Codebase list python-webargs / 83fa350
Merge branch 'upstream' into kali/master Sophie Brun 5 years ago
120 changed file(s) with 1232 addition(s) and 28292 deletion(s). Raw diff Collapse all Expand all
00 repos:
11 - repo: https://github.com/ambv/black
2 rev: 18.6b4
2 rev: 18.9b0
33 hooks:
44 - id: black
55 language_version: python3.6
6 - repo: https://github.com/pre-commit/pre-commit-hooks
7 rev: v2.0.0
8 hooks:
9 - id: flake8
610 - repo: https://github.com/asottile/blacken-docs
7 rev: v0.2.0
11 rev: v0.3.0
812 hooks:
913 - id: blacken-docs
10 additional_dependencies: [black==18.6b4]
14 additional_dependencies: [black==18.9b0]
+0
-5
.pyup.yml less more
0
1 requirements:
2 - docs/requirements.txt
3 - dev-requirements.txt:
4 pin: False
0 # Config file for automatic testing at travis-ci.org
1
20 language: python
3 # http://blog.travis-ci.com/2014-12-17-faster-builds-with-container-based-infrastructure/
41 sudo: false
52 cache: pip
3 install: travis_retry pip install -U tox
4 script: tox
5 jobs:
6 fast_finish: true
67
7 env:
8 # Lowest supported version
9 - MARSHMALLOW_VERSION="==2.15.0"
10 # Latest release
11 - MARSHMALLOW_VERSION=""
8 include:
9 - { python: '3.6', env: TOXENV=lint }
1210
13 python:
14 - "3.6"
15 - "3.5"
16 - "2.7"
17 - "pypy"
11 - { python: '2.7', env: TOXENV=py27-marshmallow2 }
12 - { python: '2.7', env: TOXENV=py27-marshmallow3 }
1813
19 install:
20 - travis_retry pip install -U .
21 - if [[ $TRAVIS_PYTHON_VERSION == 2* || $TRAVIS_PYTHON_VERSION == 'pypy' ]]; then travis_retry pip install -r dev-requirements.txt; fi
22 - if [[ $TRAVIS_PYTHON_VERSION == 3* ]] ; then travis_retry pip install -r dev-requirements-py3.txt; fi
23 - travis_retry pip install -U marshmallow"$MARSHMALLOW_VERSION" --pre
14 - { python: '3.5', env: TOXENV=py35-marshmallow2 }
15 - { python: '3.5', env: TOXENV=py35-marshmallow3 }
2416
17 - { python: '3.6', env: TOXENV=py36-marshmallow2 }
18 - { python: '3.6', env: TOXENV=py36-marshmallow3 }
2519
26 script:
27 - if [[ $TRAVIS_PYTHON_VERSION == 3.6* ]]; then invoke test; fi
28 - if [[ $TRAVIS_PYTHON_VERSION != 3.6* ]]; then invoke test --no-syntax; fi
29 jobs:
30 include:
20 - { python: '3.7', env: TOXENV=py37-marshmallow2, dist: xenial, sudo: required }
21 - { python: '3.7', env: TOXENV=py37-marshmallow3, dist: xenial, sudo: required }
22
23 - { python: '3.6', env: TOXENV=docs }
24
3125 - stage: PyPI Release
3226 if: tag IS present
3327 python: "3.6"
34 env: []
35 # Override install, and script to no-ops
36 install: true
37 script: echo "Releasing to PyPI..."
38 after_success: true
28 install: skip
29 script: skip
3930 deploy:
4031 provider: pypi
4132 user: sloria
55 ----
66
77 * Steven Loria <[email protected]>
8 * Jérôme Lafréchoux <https://github.com/lafrech> 
8 * Jérôme Lafréchoux <https://github.com/lafrech>
99
1010 Contributors (chronological)
1111 ----------------------------
2626 * Brett Higgins <https://github.com/brettdh>
2727 * Vlad Frolov <https://github.com/frol>
2828 * Tuukka Mustonen <https://github.com/tuukkamustonen>
29 * Francois-Xavier Darveau <https://github.com/EFF> 
30 * Jérôme Lafréchoux <https://github.com/lafrech> 
29 * Francois-Xavier Darveau <https://github.com/EFF>
30 * Jérôme Lafréchoux <https://github.com/lafrech>
3131 * @DmitriyS <https://github.com/DmitriyS>
3232 * Svetlozar Argirov <https://github.com/zaro>
3333 * Florian S. <https://github.com/nebularazer>
3434 * @daniel98321 <https://github.com/daniel98321>
3535 * @Itayazolay <https://github.com/Itayazolay>
3636 * @Reskov <https://github.com/Reskov>
37 * @cedzz <https://github.com/cedzz>
38 * F. Moukayed (כוכב) <https://github.com/kochab>
39 * Xiaoyu Lee <https://github.com/lee3164>
40 * Jonathan Angelo <https://github.com/jangelo>
00 Changelog
11 ---------
2
3 4.4.1 (2018-01-03)
4 ******************
5
6 Bug fixes:
7
8 * Remove usages of ``argmap2schema`` from ``fields.Nested``,
9 ``AsyncParser``, and ``PyramidParser``.
10
11 4.4.0 (2019-01-03)
12 ******************
13
14 * *Deprecation*: ``argmap2schema`` is deprecated in favor of
15 ``dict2schema`` (:pr:`352`).
16
17 4.3.1 (2018-12-31)
18 ******************
19
20 * Add ``force_all`` param to ``PyramidParser.use_args``.
21 * Add warning about missing arguments to ``AsyncParser``.
22
23 4.3.0 (2018-12-30)
24 ******************
25
26 * *Deprecation*: Add warning about missing arguments getting added
27 to parsed arguments dictionary (:issue:`342`). This behavior will be
28 removed in version 5.0.0.
29
30 4.2.0 (2018-12-27)
31 ******************
32
33 Features:
34
35 * Add ``force_all`` argument to ``use_args`` and ``use_kwargs``
36 (:issue:`252`, :issue:`307`). Thanks :user:`piroux` for reporting.
37 * *Deprecation*: The ``status_code`` and ``headers`` arguments to ``ValidationError``
38 are deprecated. Pass ``error_status_code`` and ``error_headers`` to
39 `Parser.parse`, `Parser.use_args`, and `Parser.use_kwargs` instead.
40 (:issue:`327`, :issue:`336`).
41 * Custom error handlers receive ``error_status_code`` and ``error_headers`` arguments.
42 (:issue:`327`).
43
44 .. code-block:: python
45
46 # <4.2.0
47 @parser.error_handler
48 def handle_error(error, req, schema):
49 raise CustomError(error.messages)
50
51
52 class MyParser(FlaskParser):
53 def handle_error(self, error, req, schema):
54 # ...
55 raise CustomError(error.messages)
56
57
58 # >=4.2.0
59 @parser.error_handler
60 def handle_error(error, req, schema, status_code, headers):
61 raise CustomError(error.messages)
62
63
64 # OR
65
66
67 @parser.error_handler
68 def handle_error(error, **kwargs):
69 raise CustomError(error.messages)
70
71
72 class MyParser(FlaskParser):
73 def handle_error(self, error, req, schema, status_code, headers):
74 # ...
75 raise CustomError(error.messages)
76
77 # OR
78
79 def handle_error(self, error, req, **kwargs):
80 # ...
81 raise CustomError(error.messages)
82
83 Legacy error handlers will be supported until version 5.0.0.
84
85 4.1.3 (2018-12-02)
86 ******************
87
88 Bug fixes:
89
90 * Fix bug in ``AIOHTTParser`` that prevented calling
91 ``use_args`` on the same view function multiple times (:issue:`273`).
92 Thanks to :user:`dnp1` for reporting and :user:`jangelo` for the fix.
93 * Fix compatibility with marshmallow 3.0.0rc1 (:pr:`330`).
94
95 4.1.2 (2018-11-03)
96 ******************
97
98 Bug fixes:
99
100 * Fix serialization behavior of ``DelimitedList`` (:pr:`319`).
101 Thanks :user:`lee3164` for the PR.
102
103 Other changes:
104
105 * Test against Python 3.7.
106
107 4.1.1 (2018-10-25)
108 ******************
109
110 Bug fixes:
111
112 * Fix bug in ``AIOHTTPParser`` that caused a ``JSONDecode`` error
113 when parsing empty payloads (:issue:`229`). Thanks :user:`explosic4`
114 for reporting and thanks user :user:`kochab` for the PR.
115
116 4.1.0 (2018-09-17)
117 ******************
118
119 Features:
120
121 * Add ``webargs.testing`` module, which exposes ``CommonTestCase``
122 to third-party parser libraries (see comments in :pr:`287`).
2123
3124 4.0.0 (2018-07-15)
4125 ******************
0 For code of conduct, see https://marshmallow.readthedocs.io/en/dev/code_of_conduct.html
00 Contributing Guidelines
11 =======================
22
3 Security Contact Information
4 ----------------------------
5
6 To report a security vulnerability, please use the
7 `Tidelift security contact <https://tidelift.com/security>`_.
8 Tidelift will coordinate the fix and disclosure.
9
10 Questions, Feature Requests, Bug Reports, and Feedback…
11 -------------------------------------------------------
12
13 …should all be reported on the `GitHub Issue Tracker`_ .
14
15 .. _`GitHub Issue Tracker`: https://github.com/marshmallow-code/webargs/issues?state=open
16
17
18 Contributing Code
19 -----------------
20
321 In General
4 ----------
22 ++++++++++
523
624 - `PEP 8`_, when sensible.
725 - Test ruthlessly. Write docs for new features.
1028 .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/
1129
1230 In Particular
13 -------------
31 +++++++++++++
1432
15 Questions, Feature Requests, Bug Reports, and Feedback. . .
16 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1733
18 . . .should all be reported on the `Github Issue Tracker`_ .
34 Integration with a Another Web Framework…
35 *****************************************
1936
20 .. _`Github Issue Tracker`: https://github.com/sloria/webargs/issues?state=open
37 …should be released as a separate package.
38
39 **Pull requests adding support for another framework will not be
40 accepted**. In order to keep webargs small and easy to maintain, we are
41 not currently adding support for more frameworks. Instead, release your
42 framework integration as a separate package and add it to the
43 `Ecosystem <https://github.com/marshmallow-code/webargs/wiki/Ecosystem>`_ page in
44 the `GitHub wiki <https://github.com/marshmallow-code/webargs/wiki/Ecosystem>`_ .
2145
2246 Setting Up for Local Development
23 ++++++++++++++++++++++++++++++++
47 ********************************
2448
25 1. Fork webargs_ on Github. ::
49 1. Fork webargs_ on GitHub.
2650
27 $ git clone https://github.com/sloria/webargs.git
51 ::
52
53 $ git clone https://github.com/marshmallow-code/webargs.git
2854 $ cd webargs
2955
30 2. Install development requirements. It is highly recommended that you use a virtualenv. ::
56 2. Install development requirements. **It is highly recommended that you use a virtualenv.**
57 Use the following command to install an editable version of
58 webargs along with its development requirements.
59
60 ::
3161
3262 # After activating your virtualenv
33 $ pip install -r dev-requirements.txt
63 $ pip install -e '.[dev]'
3464
35 # If you're using a Python 3 environment
36 $ pip install -r dev-requirements-py3.txt
65 3. (Optional, but recommended) Install the pre-commit hooks, which will format and lint your git staged files.
3766
38 3. (Optional, but recommended) Install the pre-commit hooks, which will format and lint your git staged files. ::
67 ::
3968
4069 # The pre-commit CLI was installed above
4170 $ pre-commit install
4574 webargs uses `black <https://github.com/ambv/black>`_ for code formatting, which is only compatible with Python>=3.6. Therefore, the ``pre-commit install`` command will only work if you have the ``python3.6`` interpreter installed.
4675
4776 Git Branch Structure
48 ++++++++++++++++++++
77 ********************
4978
5079 Webargs abides by the following branching model:
5180
5988 **Always make a new branch for your work**, no matter how small. Also, **do not put unrelated changes in the same branch or pull request**. This makes it more difficult to merge your changes.
6089
6190 Pull Requests
62 ++++++++++++++
91 **************
6392
6493 1. Create a new local branch.
94
6595 ::
6696
6797 # For a new feature
71101 $ git checkout -b fix-something 1.2-line
72102
73103 2. Commit your changes. Write `good commit messages <http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html>`_.
104
74105 ::
75106
76107 $ git commit -m "Detailed commit message"
81112 - If the pull request adds functionality, it is tested and the docs are updated.
82113 - You've added yourself to ``AUTHORS.rst``.
83114
84 4. Submit a pull request to ``sloria:dev`` or the appropriate maintenance branch. The `Travis CI <https://travis-ci.org/sloria/webargs>`_ build must be passing before your pull request is merged.
115 4. Submit a pull request to ``marshmallow-code:dev`` or the appropriate maintenance branch. The `Travis CI <https://travis-ci.org/marshmallow-code/webargs>`_ build must be passing before your pull request is merged.
85116
86117 Running Tests
87 +++++++++++++
118 *************
88119
89 To run all tests (including syntax checking): ::
120 To run all tests: ::
90121
91 $ invoke test
122 $ pytest
92123
93 To run tests without syntax-checking (use this if you don't have the
94 ``python3.6`` interpreter): ::
124 To run syntax checks: ::
95125
96 $ invoke test --no-syntax
126 $ tox -e lint
97127
98 To run tests on Python 2.7, 3.5, 3.6, and 3.7 virtual environments (must have each interpreter installed): ::
128 (Optional) To run tests on Python 2.7, 3.5, 3.6, and 3.7 virtual environments (must have each interpreter installed): ::
99129
100130 $ tox
101131
102132 Documentation
103 +++++++++++++
133 *************
104134
105135 Contributions to the documentation are welcome. Documentation is written in `reStructured Text`_ (rST). A quick rST reference can be found `here <http://docutils.sourceforge.net/docs/user/rst/quickref.html>`_. Builds are powered by Sphinx_.
106136
107 To install the packages for building the docs: ::
137 To build the docs in "watch" mode: ::
108138
109 $ pip install -r docs/requirements.txt
139 $ tox -e watch-docs
110140
111 To build the docs: ::
112
113 $ invoke docs -b
114
115 The ``-b`` (for "browse") automatically opens up the docs in your browser after building.
141 Changes in the `docs/` directory will automatically trigger a rebuild.
116142
117143 Contributing Examples
118 +++++++++++++++++++++
144 *********************
119145
120 Have a usage example you'd like to share? Feel free to add it to the `examples <https://github.com/sloria/webargs/tree/dev/examples>`_ directory and send a pull request.
146 Have a usage example you'd like to share? Feel free to add it to the `examples <https://github.com/marshmallow-code/webargs/tree/dev/examples>`_ directory and send a pull request.
121147
122148
123149 .. _Sphinx: http://sphinx.pocoo.org/
124150 .. _`reStructured Text`: http://docutils.sourceforge.net/rst.html
125 .. _webargs: https://github.com/sloria/webargs
151 .. _webargs: https://github.com/marshmallow-code/webargs
0 =======
0 *******
11 webargs
2 =======
2 *******
33
4 .. image:: https://badge.fury.io/py/webargs.svg
5 :target: http://badge.fury.io/py/webargs
4 .. image:: https://badgen.net/pypi/v/webargs
5 :target: https://badge.fury.io/py/webargs
6 :alt: PyPI version
67
7 .. image:: https://travis-ci.org/sloria/webargs.svg?branch=pypi
8 :target: https://travis-ci.org/sloria/webargs
8 .. image:: https://badgen.net/travis/marshmallow-code/webargs
9 :target: https://travis-ci.org/marshmallow-code/webargs
10 :alt: TravisCI build status
911
10 .. image:: https://img.shields.io/badge/marshmallow-3-blue.svg
12 .. image:: https://readthedocs.org/projects/webargs/badge/
13 :target: https://webargs.readthedocs.io/
14 :alt: Documentation
15
16 .. image:: https://badgen.net/badge/marshmallow/2,3?list=1
1117 :target: https://marshmallow.readthedocs.io/en/latest/upgrading.html
12 :alt: marshmallow 3 compatible
18 :alt: marshmallow 2/3 compatible
1319
14 .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
20 .. image:: https://badgen.net/badge/code%20style/black/000
1521 :target: https://github.com/ambv/black
1622 :alt: code style: black
1723
1824 Homepage: https://webargs.readthedocs.io/
1925
20 webargs is a Python library for parsing and validating HTTP request arguments, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp.
26 webargs is a Python library for parsing and validating HTTP request objects, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp.
2127
2228 .. code-block:: python
2329
4349 # Hello World
4450
4551 Install
46 -------
52 =======
4753
4854 ::
4955
5359
5460
5561 Documentation
56 -------------
62 =============
5763
5864 Full documentation is available at https://webargs.readthedocs.io/.
5965
66 Support webargs
67 ===============
68
69 webargs is maintained by a group of
70 `volunteers <https://webargs.readthedocs.io/en/latest/authors.html>`_.
71 If you'd like to support the future of the project, please consider
72 contributing to our Open Collective:
73
74 .. image:: https://opencollective.com/marshmallow/donate/button.png
75 :target: https://opencollective.com/marshmallow
76 :alt: Donate to our collective
77
78 Professional Support
79 ====================
80
81 Professionally-supported webargs is available through the
82 `Tidelift Subscription <https://tidelift.com/subscription/pkg/pypi-webargs?utm_source=pypi-webargs&utm_medium=referral&utm_campaign=readme>`_.
83
84 Tidelift gives software development teams a single source for purchasing and maintaining their software,
85 with professional-grade assurances from the experts who know it best,
86 while seamlessly integrating with existing tools. [`Get professional support`_]
87
88 .. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-webargs?utm_source=pypi-webargs&utm_medium=referral&utm_campaign=readme
89
90 .. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png
91 :target: https://tidelift.com/subscription/pkg/pypi-webargs?utm_source=pypi-webargs&utm_medium=referral&utm_campaign=readme
92 :alt: Get supported marshmallow with Tidelift
93
94 Security Contact Information
95 ============================
96
97 To report a security vulnerability, please use the
98 `Tidelift security contact <https://tidelift.com/security>`_.
99 Tidelift will coordinate the fix and disclosure.
100
60101 Project Links
61 -------------
102 =============
62103
63 - Docs: http://webargs.readthedocs.io/
64 - Changelog: http://webargs.readthedocs.io/en/latest/changelog.html
104 - Docs: https://webargs.readthedocs.io/
105 - Changelog: https://webargs.readthedocs.io/en/latest/changelog.html
65106 - PyPI: https://pypi.python.org/pypi/webargs
66 - Issues: https://github.com/sloria/webargs/issues
107 - Issues: https://github.com/marshmallow-code/webargs/issues
67108
68109
69110 License
70 -------
111 =======
71112
72 MIT licensed. See the `LICENSE <https://github.com/sloria/webargs/blob/dev/LICENSE>`_ file for more details.
113 MIT licensed. See the `LICENSE <https://github.com/marshmallow-code/webargs/blob/dev/LICENSE>`_ file for more details.
+0
-8
dev-requirements-py3.txt less more
0 -r dev-requirements.txt
1 # Additional syntax checking for Python 3
2 flake8-bugbear==18.2.0
3
4 # aiohttp
5 aiohttp>=3.0.0
6 webtest-aiohttp==2.0.0
7 pytest-aiohttp>=0.3.0
+0
-29
dev-requirements.txt less more
0 # Requirements
1 marshmallow
2
3 # Task running
4 invoke==1.1.0
5
6 # Testing
7 pytest==3.6.3
8 tox==3.1.2
9 mock==2.0.0
10 webtest==2.0.30
11
12 # Web frameworks
13 Flask>=0.10.1
14 Django>=1.6.5
15 bottle>=0.12.10
16 tornado>=4.0
17 pyramid>=1.5.2
18 webapp2>=3.0.0b1
19 falcon>=0.3.0
20
21 # Pre-commit hooks (runs black)
22 pre-commit==1.10.3
23
24 # Syntax checking
25 flake8==3.5.0
26
27 # Install this package in development mode
28 -e '.'
0 /* Styles for sponsors.html */
1 .sponsor .logo img {
2 width: 48px;
3 vertical-align: middle;
4 }
5 .sponsor a.logo {
6 float: left;
7 border-bottom: none;
8 }
0 {% if donate_url %}
1 <div class="globaltoc">
2 <ul>
3 <li class="toctree-l1">
4 <a href="{{ donate_url }}">Donate</a>
5 </li>
6 </ul>
7 </div>
8 {% endif %}
0 <div class="sponsors">
1 {% if tidelift_url %}
2 <div class="sponsor">
3 <a class="logo" href="{{ tidelift_url }}">
4 <img src="https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png" alt="Sponsor"></a>
5 <div class="sponsor_text">Professionally-supported {{ project }} is available with the
6 <a href="{{ tidelift_url }}">Tidelift Subscription</a>.
7 </div>
8 </div>
9 {% endif %}
10 </div>
+0
-3
docs/_themes/.gitignore less more
0 *.pyc
1 *.pyo
2 .DS_Store
+0
-11
docs/_themes/LICENSE less more
0 Copyright (c) Juan-Pablo Scaletti
1
2 Some rights reserved.
3
4 Redistribution and use in source and binary forms of the software as well as documentation, with or without modification, are permitted provided that the following conditions are met:
5
6 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8 * The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
9
10 THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+0
-23
docs/_themes/lucuma/footer.html less more
0 <footer>
1 {#<nav>
2 <div class="wrapper clearfix">
3 <p class="pull-left">
4 {{ t.site_in_other_languages }}: <a href="/">English</a>, <a href="/es/">Español</a>.
5 </p>
6 </div>
7 </nav>#}
8 <div class="credits">
9 <div class="wrapper align-center clearfix">
10 <p>
11 {{ t.created_by }} <a href="{{ author_url }}">{{ author }}</a>
12 <span class="hidden-xs">·</span><br class="hidden-sm hidden-md hidden-lg">
13 {{ license }}
14 </p>
15 <p class="project">
16 <a href="https://pypi.python.org/pypi/{{ project }}">PyPI</a> ·
17 <a href="{{ github }}">GitHub Repo</a> ·
18 <a href="{{ github }}/issues">Issues</a> ·
19 </p>
20 </div>
21 </div>
22 </footer>
+0
-68
docs/_themes/lucuma/genindex.html less more
0 {#
1 basic/genindex.html
2 ~~~~~~~~~~~~~~~~~~~
3
4 Template for an "all-in-one" index.
5
6 :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
7 :license: BSD, see LICENSE for details.
8 #}
9 {% macro indexentries(firstname, links) %}
10 <dt>
11 {%- if links -%}
12 <a href="{{ links[0][1] }}">
13 {%- if links[0][0] %}<strong>{% endif -%}
14 {{ firstname|e }}
15 {%- if links[0][0] %}</strong>{% endif -%}
16 </a>
17
18 {%- for ismain, link in links[1:] -%}
19 , <a href="{{ link }}">{% if ismain %}<strong>{% endif -%}
20 [{{ loop.index }}]
21 {%- if ismain %}</strong>{% endif -%}
22 </a>
23 {%- endfor %}
24 {%- else %}
25 {{ firstname|e }}
26 {%- endif %}
27 </dt>
28 {% endmacro %}
29
30 {%- extends "layout.html" %}
31 {% set title = t_nav_index %}
32
33
34 {% block content %}
35 <div id="genindex">
36 <div class="wrapper">
37 <h1 id="index">{{ t.nav_index }}</h1>
38
39 <div class="genindex-jumpbox">
40 {% for key, dummy in genindexentries -%}
41 <a href="#{{ key }}"><strong>{{ key }}</strong></a>
42 {% if not loop.last %}| {% endif %}
43 {%- endfor %}
44 </div>
45
46 {%- for key, entries in genindexentries %}
47 <h2 id="{{ key }}">{{ key }}</h2>
48 <table style="width: 100%" class="indextable genindextable"><tr>
49 {%- for column in entries|slice(2) if column %}
50 <td style="width: 33%" valign="top"><dl>
51 {%- for entryname, (links, subitems) in column %}
52 {{ indexentries(entryname, links) }}
53 {%- if subitems %}
54 <dd><dl>
55 {%- for subentryname, subentrylinks in subitems %}
56 {{ indexentries(subentryname, subentrylinks) }}
57 {%- endfor %}
58 </dl></dd>
59 {%- endif -%}
60 {%- endfor %}
61 </dl></td>
62 {%- endfor %}
63 </tr></table>
64 {% endfor %}
65 </div>
66 </div>
67 {% endblock %}
+0
-28
docs/_themes/lucuma/header.html less more
0 <header>
1 <div class="wrapper clearfix">
2 <h1 class="logo"><a href="{{ pathto('index') }}" title="{{ t.return_to_home_page }}">
3 {%- if logo -%}
4 {%- if logo.startswith -%}
5 <img src="{{ pathto(logo, 1) }}" alt="{{ project }}">
6 {%- else -%}
7 <img srcset="{{ logo|join(', ') }}" alt="{{ project }}" >
8 {%- endif -%}
9 {%- endif %} {{ project }}
10 </a></h1>
11 <ul class="nav">
12 <li>
13 {% include "search-form.html" %}
14 </li>
15 <li class="hidden-xs">
16 <a class="nav-item" href="{{ pathto('index') }}">{{ t.nav_home }}</a>
17 </li>
18 <li class="hidden-xs">
19 <a class="nav-item" href="{{ github }}" title="{{ github }}"><i class="fa fa-github"></i> Github</a>
20 </li>
21 <li class="toc toc-large">
22 <a data-toggle="dropdown" href="#toc" class="nav-item">
23 <span class="visible-xs"><i class="fa fa-bars"></i></span>
24 </a>
25 </li>
26 </ul>
27 </header>
+0
-67
docs/_themes/lucuma/layout.html less more
0 {% import 'locale-'+language+'_t' as t -%}
1 <!DOCTYPE html>
2 <html lang="{{ language }}">
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width,initial-scale=1">
6 {%- block htmltitle -%}
7 <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
8 {%- endblock %}
9 <link rel="search" type="application/opensearchdescription+xml"
10 title="{{ _('opensearch_search_in') }}"
11 href="{{ pathto('_static/opensearch.xml', 1) }}"/>
12 <link rel="shortcut icon" type="image/x-icon" href="{{ pathto('_static/favicon.ico', 1) }}">
13
14 <link href="{{ pathto('_static/styles/normalize.css', 1) }}" rel="stylesheet">
15 <link href="{{ pathto('_static/styles/font-awesome.css', 1) }}" rel="stylesheet">
16 <link href="{{ pathto('_static/styles/main.css', 1) }}" rel="stylesheet">
17 <link href="{{ pathto('_static/styles/type.css', 1) }}" rel="stylesheet">
18 <link href="{{ pathto('_static/styles/button.css', 1) }}" rel="stylesheet">
19 <link href="{{ pathto('_static/styles/pygments.css', 1) }}" rel="stylesheet">
20 <link href="{{ pathto('_static/styles/magnific-popup.css', 1) }}" rel="stylesheet">
21 <link href="{{ pathto('_static/styles/responsive.css', 1) }}" rel="stylesheet">
22 <link href="{{ pathto('_static/styles/print.css', 1) }}" rel="stylesheet" media="print">
23
24 {% if hasdoc('genindex') -%}
25 <link rel="index" title="{{ t.nav_index }}" href="{{ pathto('genindex') }}">
26 {%- endif %}
27 {% if parents -%}
28 <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}">
29 {%- endif %}
30 {% if next -%}
31 <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}">
32 {%- endif %}
33 {% if prev -%}
34 <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}">
35 {%- endif %}
36 <meta property="og:type" content="website">
37 <meta property="og:locale" content="{{ language }}">
38 <meta property="og:title" content="{{ title|striptags|e }}{{ titlesuffix }}">
39 {#<meta property="og:url" content="">
40 <meta property="og:image" content="">
41 <meta name="og:description" content="">
42 <meta name="description" content="">#}
43 </head>
44 <body class="{% block bodyclass %}{% endblock %}">
45 {% include "header.html" %}
46 {% block content %}{% endblock %}
47 {% include "footer.html" %}
48
49 <script>
50 var DOCUMENTATION_OPTIONS = {
51 URL_ROOT: '{{ url_root }}',
52 VERSION: '{{ release|e }}',
53 FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
54 HAS_SOURCE: true // neccesary for showing context in the search results
55 };
56 </script>
57 <script src="{{ pathto('_static/scripts/jquery.js', 1) }}"></script>
58 <script src="{{ pathto('_static/scripts/lodash.js', 1) }}"></script>
59 <script src="{{ pathto('_static/scripts/magnific-popup.js', 1) }}"></script>
60 <script src="{{ pathto('_static/scripts/doctools.js', 1) }}"></script>
61 <script src="{{ pathto('_static/scripts/picturefill.min.js', 1) }}"></script>
62 <script src="{{ pathto('_static/scripts/main.js', 1) }}"></script>
63 <script src="{{ pathto('_static/translations.js', 1) }}"></script>
64 {% block scripts %}{% endblock %}
65 </body>
66 </html>
+0
-19
docs/_themes/lucuma/locale-en_t less more
0 {% set nav_index = 'Index' -%}
1 {% set nav_home = 'Home' -%}
2 {% set return_to_home_page = 'Return to home page' -%}
3 {% set site_in_other_languages = 'This site in other languages' -%}
4 {% set created_by = 'Created by' -%}
5 {% set sponsored_by = 'Sponsored by' -%}
6 {% set search_page = 'Search' -%}
7 {% set activate_js_to_search = 'The search needs JavaScript to works. Please activate it.' -%}
8 {% set action_search = 'Search' -%}
9 {% set search_results_title = 'Results' -%}
10 {% set search_results_no_results = 'No results' -%}
11
12 {% set permalink_header = "Permalink to this headline" %}
13 {% set permalink_definition = "Permalink to this definition" %}
14 {% set hide_search_matches = "Hide Search Matches" %}
15 {% set searching = "Searching ..." %}
16 {% set preparing_search = "Preparing search..." %}
17 {% set search_results_x_found = "Found %s result(s)" %}
18 {% set search_result_in = "in" %}
+0
-21
docs/_themes/lucuma/locale-es_t less more
0 {% set nav_index = 'Índice' -%}
1 {% set nav_home = 'Inicio' -%}
2 {% set return_to_home_page = 'Regresar a la página inicial' -%}
3 {% set site_in_other_languages = 'Este sitio en otros idiomas' -%}
4 {% set created_by = 'Creado por' -%}
5 {% set sponsored_by = 'Auspiciado por' -%}
6 {% set search_page = 'Search' -%}
7 {% set activate_js_to_search = 'La búsqueda necesita de JavaScript para funcionar. Por favor actívalo.' -%}
8 {% set action_search = 'Buscar' -%}
9 {% set search_results_title = 'Resultados' -%}
10 {% set search_results_no_results = 'Ningún resultado encontrado' -%}
11
12 {% set permalink_header = "Enlace a este título" -%}
13 {% set permalink_definition = "Enlace a esta definición" -%}
14 {% set hide_search_matches = "Ocultar palabras resaltadas" -%}
15 {% set searching = "Buscando..." -%}
16 {% set preparing_search = "Preparando la búsqueda..." -%}
17 {% set search_results_x_found = "Encontrados %s resultado(s)" %}
18 {% set search_result_in = "en" -%}
19
20 {% set test = 'ESTA ES UNA PRUEBA' -%}
+0
-10
docs/_themes/lucuma/opensearch.xml less more
0 <?xml version="1.0" encoding="UTF-8"?>
1 <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
2 <ShortName>{{ project|e }}</ShortName>
3 <Description>{% trans docstitle=docstitle|e %}Search {{ docstitle }}{% endtrans %}</Description>
4 <InputEncoding>utf-8</InputEncoding>
5 <Url type="text/html" method="get"
6 template="{{ use_opensearch }}/{{ pathto('search') }}?q={searchTerms}&amp;check_keywords=yes&amp;area=default"/>
7 <LongName>{{ docstitle|e }}</LongName>
8 {% block extra %} {# Put e.g. an <Image> element here. #} {% endblock %}
9 </OpenSearchDescription>
+0
-12
docs/_themes/lucuma/page.html less more
0 {% extends "layout.html" %}
1
2 {% block content %}
3 <div id="main">
4 <div class="wrapper">
5 {% if pagename != 'index' %}
6 {% include "toc.html" %}
7 {% endif %}
8 {{ body }}
9 </div>
10 </div>
11 {% endblock %}
+0
-6
docs/_themes/lucuma/search-form.html less more
0 <form id="searchbox" class="search-form" method="get" action="{{ pathto('search') }}" novalidate>
1 <input type="text" name="q" value="{{ q }}">
2 <button class="button" type="submit" title="{{ t.action_search }}"><i class="fa fa-search"></i></button>
3 <input type="hidden" name="check_keywords" value="yes">
4 <input type="hidden" name="area" value="default">
5 </form>
+0
-20
docs/_themes/lucuma/search.html less more
0 {% extends "layout.html" %}
1 {% set title = t_search_page %}
2
3 {% block bodyclass %}search{% endblock %}
4
5 {% block content %}
6 <div>
7 <div class="wrapper">
8 {% include "searchresults.html" %}
9 </div>
10 </div>
11 {% endblock %}
12
13 {% block scripts %}
14 <script src="{{ pathto('_static/scripts/searchtools.js', 1) }}"></script>
15 <script>$(document).ready(function(){
16 Search.loadIndex("{{ pathto('searchindex.js', 1) }}");
17 });</script>
18 <script id="searchindexloader"></script>
19 {% endblock %}
+0
-32
docs/_themes/lucuma/searchresults.html less more
0 {% import 'locale-'+language+'_t' as t -%}
1 <h1 id="search-documentation">{{ t.search_page }}</h1>
2 <noscript>
3 <div id="fallback" class="admonition warning">
4 <p>{{ t.activate_js_to_search }}.</p>
5 </div>
6 </noscript>
7
8 <form action="" method="get" id="searchbox-body" novalidate>
9 <input type="text" name="q" value="{{ q }}">
10 <button type="submit" class="button">{{ t.action_search }}</button>
11 <span id="search-progress" style="padding-left: 10px"></span>
12 </form>
13 {% if search_performed %}
14 <h2>{{ t.search_results_title }}</h2>
15 {% if not search_results %}
16 <p>{{ t.search_results_no_results }} :(</p>
17 {% endif %}
18 {% endif %}
19
20 <div id="search-results">
21 {% if search_results -%}
22 <ul>
23 {%- for href, caption, context in search_results %}
24 <li>
25 <a href="{{ pathto(item.href) }}">{{ caption }}</a>
26 <div class="context">{{ context|e }}</div>
27 </li>
28 {%- endfor %}
29 </ul>
30 {%- endif %}
31 </div>
docs/_themes/lucuma/static/favicon.ico less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/FontAwesome.otf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/fontawesome-webfont.eot less more
Binary diff not shown
+0
-504
docs/_themes/lucuma/static/fonts/fontawesome-webfont.svg less more
0 <?xml version="1.0" standalone="no"?>
1 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
2 <svg xmlns="http://www.w3.org/2000/svg">
3 <metadata></metadata>
4 <defs>
5 <font id="fontawesomeregular" horiz-adv-x="1536" >
6 <font-face units-per-em="1792" ascent="1536" descent="-256" />
7 <missing-glyph horiz-adv-x="448" />
8 <glyph unicode=" " horiz-adv-x="448" />
9 <glyph unicode="&#x09;" horiz-adv-x="448" />
10 <glyph unicode="&#xa0;" horiz-adv-x="448" />
11 <glyph unicode="&#xa8;" horiz-adv-x="1792" />
12 <glyph unicode="&#xa9;" horiz-adv-x="1792" />
13 <glyph unicode="&#xae;" horiz-adv-x="1792" />
14 <glyph unicode="&#xb4;" horiz-adv-x="1792" />
15 <glyph unicode="&#xc6;" horiz-adv-x="1792" />
16 <glyph unicode="&#xd8;" horiz-adv-x="1792" />
17 <glyph unicode="&#x2000;" horiz-adv-x="768" />
18 <glyph unicode="&#x2001;" horiz-adv-x="1537" />
19 <glyph unicode="&#x2002;" horiz-adv-x="768" />
20 <glyph unicode="&#x2003;" horiz-adv-x="1537" />
21 <glyph unicode="&#x2004;" horiz-adv-x="512" />
22 <glyph unicode="&#x2005;" horiz-adv-x="384" />
23 <glyph unicode="&#x2006;" horiz-adv-x="256" />
24 <glyph unicode="&#x2007;" horiz-adv-x="256" />
25 <glyph unicode="&#x2008;" horiz-adv-x="192" />
26 <glyph unicode="&#x2009;" horiz-adv-x="307" />
27 <glyph unicode="&#x200a;" horiz-adv-x="85" />
28 <glyph unicode="&#x202f;" horiz-adv-x="307" />
29 <glyph unicode="&#x205f;" horiz-adv-x="384" />
30 <glyph unicode="&#x2122;" horiz-adv-x="1792" />
31 <glyph unicode="&#x221e;" horiz-adv-x="1792" />
32 <glyph unicode="&#x2260;" horiz-adv-x="1792" />
33 <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
34 <glyph unicode="&#xf000;" horiz-adv-x="1792" d="M93 1350q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78z" />
35 <glyph unicode="&#xf001;" d="M0 -64q0 50 34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5 q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89z" />
36 <glyph unicode="&#xf002;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
37 <glyph unicode="&#xf003;" horiz-adv-x="1792" d="M0 32v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5 t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768zM128 1120q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317 q54 43 100.5 115.5t46.5 131.5v11v13.5t-0.5 13t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5z" />
38 <glyph unicode="&#xf004;" horiz-adv-x="1792" d="M0 940q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138z " />
39 <glyph unicode="&#xf005;" horiz-adv-x="1664" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48z" />
40 <glyph unicode="&#xf006;" horiz-adv-x="1664" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354 q-25 27 -25 48zM221 829l306 -297l-73 -421l378 199l377 -199l-72 421l306 297l-422 62l-189 382l-189 -382z" />
41 <glyph unicode="&#xf007;" horiz-adv-x="1408" d="M0 131q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5q0 -120 -73 -189.5t-194 -69.5 h-874q-121 0 -194 69.5t-73 189.5zM320 1024q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5z" />
42 <glyph unicode="&#xf008;" horiz-adv-x="1920" d="M0 -96v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 64v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45zM128 320q0 -26 19 -45t45 -19h128 q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM128 704q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM128 1088q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19 h-128q-26 0 -45 -19t-19 -45v-128zM512 -64q0 -26 19 -45t45 -19h768q26 0 45 19t19 45v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512zM512 704q0 -26 19 -45t45 -19h768q26 0 45 19t19 45v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512zM1536 64 v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45zM1536 320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM1536 704q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128zM1536 1088q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128z" />
43 <glyph unicode="&#xf009;" horiz-adv-x="1664" d="M0 128v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM0 896v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM896 128v384q0 52 38 90t90 38h512q52 0 90 -38 t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM896 896v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90z" />
44 <glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M0 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h320q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 608v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68zM640 1120v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM1280 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM1280 608v192 q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM1280 1120v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68z" />
45 <glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M0 96v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h320q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 96v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68zM640 608v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68zM640 1120v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68z" />
46 <glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M121 608q0 40 28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68t-28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68z" />
47 <glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M110 214q0 40 28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68t-28 -68l-294 -294l294 -294q28 -28 28 -68t-28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294 q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68z" />
48 <glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90t-37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM384 672v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224q13 0 22.5 -9.5t9.5 -22.5v-64 q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5z" />
49 <glyph unicode="&#xf010;" horiz-adv-x="1664" d="M0 704q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90t-37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5z M256 704q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM384 672v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5z" />
50 <glyph unicode="&#xf011;" d="M0 640q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181 q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298zM640 768v640q0 52 38 90t90 38t90 -38t38 -90v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90z" />
51 <glyph unicode="&#xf012;" horiz-adv-x="1792" d="M0 -96v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM384 -96v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM768 -96v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576 q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM1152 -96v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM1536 -96v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23z" />
52 <glyph unicode="&#xf013;" d="M0 531v222q0 12 8 23t19 13l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10 q129 -119 165 -170q7 -8 7 -22q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108 q-44 -23 -91 -38q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5z M512 640q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
53 <glyph unicode="&#xf014;" horiz-adv-x="1408" d="M0 1056v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23zM256 76q0 -22 7 -40.5 t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5v948h-896v-948zM384 224v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM640 224v576q0 14 9 23t23 9h64 q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23zM896 224v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23z" />
54 <glyph unicode="&#xf015;" horiz-adv-x="1664" d="M26 636.5q1 13.5 11 21.5l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5zM256 64 v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45z" />
55 <glyph unicode="&#xf016;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22 v-376z" />
56 <glyph unicode="&#xf017;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 544v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23z" />
57 <glyph unicode="&#xf018;" horiz-adv-x="1920" d="M50 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256 q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73zM809 540q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4z" />
58 <glyph unicode="&#xf019;" horiz-adv-x="1664" d="M0 96v320q0 40 28 68t68 28h465l135 -136q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68zM325 985q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39q17 -41 -14 -70 l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70zM1152 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM1408 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
59 <glyph unicode="&#xf01a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM418 620q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35z" />
60 <glyph unicode="&#xf01b;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM416 672q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23z" />
61 <glyph unicode="&#xf01c;" d="M0 64v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552q25 -61 25 -123v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM197 576h316l95 -192h320l95 192h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8 t-2.5 -8z" />
62 <glyph unicode="&#xf01d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 320v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55t-32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56z" />
63 <glyph unicode="&#xf01e;" d="M0 640q0 156 61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5 t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298z" />
64 <glyph unicode="&#xf021;" d="M0 0v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129 q-19 -19 -45 -19t-45 19t-19 45zM18 800v7q65 268 270 434.5t480 166.5q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179 q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5z" />
65 <glyph unicode="&#xf022;" horiz-adv-x="1792" d="M0 160v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM128 160q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832z M256 288v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 544v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5z M256 800v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 288v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5z M512 544v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5zM512 800v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5z " />
66 <glyph unicode="&#xf023;" horiz-adv-x="1152" d="M0 96v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68zM320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192z" />
67 <glyph unicode="&#xf024;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110zM320 320v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19 q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45z" />
68 <glyph unicode="&#xf025;" horiz-adv-x="1664" d="M0 650q0 151 67 291t179 242.5t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32 q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32 q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314z" />
69 <glyph unicode="&#xf026;" horiz-adv-x="768" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45z" />
70 <glyph unicode="&#xf027;" horiz-adv-x="1152" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45zM908 464q0 21 12 35.5t29 25t34 23t29 35.5t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5 q15 0 25 -5q70 -27 112.5 -93t42.5 -142t-42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5z" />
71 <glyph unicode="&#xf028;" horiz-adv-x="1664" d="M0 448v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45zM908 464q0 21 12 35.5t29 25t34 23t29 35.5t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5 q15 0 25 -5q70 -27 112.5 -93t42.5 -142t-42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5zM1008 228q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5 q140 -59 225 -188.5t85 -282.5t-85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45zM1109 -7q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19 q13 0 26 -5q211 -91 338 -283.5t127 -422.5t-127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45z" />
72 <glyph unicode="&#xf029;" horiz-adv-x="1408" d="M0 0v640h640v-640h-640zM0 768v640h640v-640h-640zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM256 256v128h128v-128h-128zM256 1024v128h128v-128h-128zM768 0v640h384v-128h128v128h128v-384h-384v128h-128v-384h-128zM768 768v640h640v-640h-640z M896 896h384v384h-384v-384zM1024 0v128h128v-128h-128zM1024 1024v128h128v-128h-128zM1280 0v128h128v-128h-128z" />
73 <glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M0 0v1408h63v-1408h-63zM94 1v1407h32v-1407h-32zM189 1v1407h31v-1407h-31zM346 1v1407h31v-1407h-31zM472 1v1407h62v-1407h-62zM629 1v1407h31v-1407h-31zM692 1v1407h31v-1407h-31zM755 1v1407h31v-1407h-31zM880 1v1407h63v-1407h-63zM1037 1v1407h63v-1407h-63z M1163 1v1407h63v-1407h-63zM1289 1v1407h63v-1407h-63zM1383 1v1407h63v-1407h-63zM1541 1v1407h94v-1407h-94zM1666 1v1407h32v-1407h-32zM1729 0v1408h63v-1408h-63z" />
74 <glyph unicode="&#xf02b;" d="M0 864v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117zM192 1088q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5z" />
75 <glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M0 864v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117zM192 1088q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5zM704 1408h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5z" />
76 <glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M10 184q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23 t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57 q38 -15 59 -43q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5zM575 1056 q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
77 <glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M0 7v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62z" />
78 <glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M0 160v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v160h-224 q-13 0 -22.5 9.5t-9.5 22.5zM384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1408 576q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
79 <glyph unicode="&#xf030;" horiz-adv-x="1920" d="M0 128v896q0 106 75 181t181 75h224l51 136q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181zM512 576q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5zM672 576q0 119 84.5 203.5t203.5 84.5t203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5z" />
80 <glyph unicode="&#xf031;" horiz-adv-x="1664" d="M0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8 t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27 q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14zM555 527q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452z" />
81 <glyph unicode="&#xf032;" horiz-adv-x="1408" d="M0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5 t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12zM533 1292q0 -50 4 -151t4 -152q0 -27 -0.5 -80 t-0.5 -79q0 -46 1 -69q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13zM538.5 165q0.5 -37 4.5 -83.5t12 -66.5q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25 t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5z" />
82 <glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
83 <glyph unicode="&#xf034;" horiz-adv-x="1792" d="M0 1023v383l81 1l54 -27q12 -5 211 -5q44 0 132 2t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5 q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9 t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44zM1414 109.5q9 18.5 42 18.5h80v1024 h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5z" />
84 <glyph unicode="&#xf035;" d="M0 1023v383l81 1l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1 t-103 1t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29 t78 27q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44zM5 -64q0 28 26 49q4 3 36 30t59.5 49 t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5q12 0 42 -19.5t57.5 -41.5t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5 t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49z" />
85 <glyph unicode="&#xf036;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 448v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM0 832v128q0 26 19 45t45 19h1536 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM0 1216v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45z" />
86 <glyph unicode="&#xf037;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM128 832v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM384 448v128q0 26 19 45t45 19h896 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45zM512 1216v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45z" />
87 <glyph unicode="&#xf038;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM128 832v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM384 448v128q0 26 19 45t45 19h1280 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM512 1216v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45z" />
88 <glyph unicode="&#xf039;" horiz-adv-x="1792" d="M0 64v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 448v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 832v128q0 26 19 45t45 19h1664 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 1216v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45z" />
89 <glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5zM0 416v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5zM0 800v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5zM0 1184v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192 q-13 0 -22.5 9.5t-9.5 22.5zM384 32v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5zM384 416v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5zM384 800v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5zM384 1184v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-192 q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5z" />
90 <glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM0 1184v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5 t-9.5 22.5zM32 704q0 14 9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23zM640 416v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088 q-13 0 -22.5 9.5t-9.5 22.5zM640 800v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5z" />
91 <glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M0 32v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM0 416v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23t-9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5z M0 1184v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5zM640 416v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5 t-9.5 22.5zM640 800v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5z" />
92 <glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M0 288v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5q39 -17 39 -59v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5 t-84.5 203.5z" />
93 <glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216z M256 128v192l320 320l160 -160l512 512l416 -416v-448h-1408zM256 960q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136z" />
94 <glyph unicode="&#xf040;" d="M0 -128v416l832 832l416 -416l-832 -832h-416zM128 128h128v-128h107l91 91l-235 235l-91 -91v-107zM298 384q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17zM896 1184l166 165q36 38 90 38q53 0 91 -38l235 -234 q37 -39 37 -91q0 -53 -37 -90l-166 -166z" />
95 <glyph unicode="&#xf041;" horiz-adv-x="1024" d="M0 896q0 212 150 362t362 150t362 -150t150 -362q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179zM256 896q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
96 <glyph unicode="&#xf042;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73v1088q-148 0 -273 -73t-198 -198t-73 -273z" />
97 <glyph unicode="&#xf043;" horiz-adv-x="1024" d="M0 512q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275q0 -212 -150 -362t-362 -150t-362 150t-150 362zM256 384q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69z" />
98 <glyph unicode="&#xf044;" horiz-adv-x="1792" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29v-190 q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM640 256v288l672 672l288 -288l-672 -672h-288zM736 448h96v-96h56l116 116l-152 152l-116 -116v-56zM944 688q16 -16 33 1l350 350q17 17 1 33t-33 -1l-350 -350q-17 -17 -1 -33zM1376 1280l92 92 q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68l-92 -92z" />
99 <glyph unicode="&#xf045;" horiz-adv-x="1664" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h255q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29v-259 q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM256 704q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45l-384 -384 q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5t-38.5 114t-17.5 122z" />
100 <glyph unicode="&#xf046;" horiz-adv-x="1664" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3 q20 -8 20 -29v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM257 768q0 33 24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110q24 -24 24 -57t-24 -57l-814 -814q-24 -24 -57 -24t-57 24l-430 430 q-24 24 -24 57z" />
101 <glyph unicode="&#xf047;" horiz-adv-x="1792" d="M0 640q0 26 19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45t-19 -45l-256 -256 q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45z" />
102 <glyph unicode="&#xf048;" horiz-adv-x="1024" d="M0 -64v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45z" />
103 <glyph unicode="&#xf049;" horiz-adv-x="1792" d="M0 -64v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710q19 19 32 13t13 -32v-710q4 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45 t-45 -19h-128q-26 0 -45 19t-19 45z" />
104 <glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M122 640q0 26 19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19l710 710q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45z" />
105 <glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M0 -96v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31l-1328 -738q-23 -13 -39.5 -3t-16.5 36z" />
106 <glyph unicode="&#xf04c;" d="M0 -64v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45zM896 -64v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45z" />
107 <glyph unicode="&#xf04d;" d="M0 -64v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45z" />
108 <glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
109 <glyph unicode="&#xf050;" horiz-adv-x="1792" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32v710 q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
110 <glyph unicode="&#xf051;" horiz-adv-x="1024" d="M0 -96v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710q-19 -19 -32 -13t-13 32z" />
111 <glyph unicode="&#xf052;" horiz-adv-x="1538" d="M1 64v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM1 525q-6 13 13 32l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13z" />
112 <glyph unicode="&#xf053;" horiz-adv-x="1280" d="M154 704q0 26 19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45z" />
113 <glyph unicode="&#xf054;" horiz-adv-x="1280" d="M90 128q0 26 19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45z" />
114 <glyph unicode="&#xf055;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 576q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19 t19 45v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128z" />
115 <glyph unicode="&#xf056;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 576q0 -26 19 -45t45 -19h768q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19 t-19 -45v-128z" />
116 <glyph unicode="&#xf057;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM387 414q0 -27 19 -46l90 -90q19 -19 46 -19q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19 l90 90q19 19 19 46q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45z" />
117 <glyph unicode="&#xf058;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 621q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45q0 28 -18 46l-91 90 q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46z" />
118 <glyph unicode="&#xf059;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM417 939q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26 t37.5 -59q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213zM640 160q0 -14 9 -23t23 -9 h192q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192z" />
119 <glyph unicode="&#xf05a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320 q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160zM640 1056q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160z" />
120 <glyph unicode="&#xf05b;" d="M0 576v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143 q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45zM339 512q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5h-109q-26 0 -45 19 t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109z" />
121 <glyph unicode="&#xf05c;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM429 480q0 13 10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23l-137 -137l137 -137q10 -10 10 -23t-10 -23l-146 -146q-10 -10 -23 -10t-23 10l-137 137 l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23z" />
122 <glyph unicode="&#xf05d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM346 640q0 26 19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45z" />
123 <glyph unicode="&#xf05e;" d="M0 643q0 157 61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5t-61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61t-245 164t-163.5 246t-61 300zM224 643q0 -162 89 -299l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199 t-73 -274zM471 185q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5q0 161 -87 295z" />
124 <glyph unicode="&#xf060;" d="M64 576q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5t32.5 -90.5v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90 z" />
125 <glyph unicode="&#xf061;" d="M0 512v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5z" />
126 <glyph unicode="&#xf062;" horiz-adv-x="1664" d="M53 565q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651q37 -39 37 -91q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75 q-38 38 -38 90z" />
127 <glyph unicode="&#xf063;" horiz-adv-x="1664" d="M53 704q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90z" />
128 <glyph unicode="&#xf064;" horiz-adv-x="1792" d="M0 416q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45t-19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123 q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22t-13.5 30t-10.5 24q-127 285 -127 451z" />
129 <glyph unicode="&#xf065;" d="M0 -64v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23t-10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45zM781 800q0 13 10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448 q26 0 45 -19t19 -45v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23z" />
130 <glyph unicode="&#xf066;" d="M13 32q0 13 10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23zM768 704v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10 t23 -10l114 -114q10 -10 10 -23t-10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45z" />
131 <glyph unicode="&#xf067;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68z" />
132 <glyph unicode="&#xf068;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68z" />
133 <glyph unicode="&#xf069;" horiz-adv-x="1664" d="M122.5 408.5q13.5 51.5 59.5 77.5l266 154l-266 154q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5 l-266 -154l266 -154q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5z" />
134 <glyph unicode="&#xf06a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM624 1126l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5l18 621q0 12 -10 18 q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18zM640 161q0 -13 10 -23t23 -10h192q13 0 22 9.5t9 23.5v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190z" />
135 <glyph unicode="&#xf06b;" d="M0 544v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68 t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23zM376 1120q0 -40 28 -68t68 -28h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68zM608 180q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5v56v468v192h-320v-192v-468v-56zM870 1024h194q40 0 68 28 t28 68t-28 68t-68 28q-43 0 -69 -31z" />
136 <glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M0 121q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96 q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5zM384 448q0 -26 19 -45t45 -19q24 0 45 19 q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45t-19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45z" />
137 <glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M0 -160q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64zM256 640q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100 t113.5 -122.5t72.5 -150.5t27.5 -184q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184z" />
138 <glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M0 576q0 34 20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69t-20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69zM128 576q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5q-152 236 -381 353 q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353zM592 704q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34t-14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5z" />
139 <glyph unicode="&#xf070;" horiz-adv-x="1792" d="M0 576q0 38 20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5q16 -10 16 -27q0 -7 -1 -9q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87 q-143 65 -263.5 173t-208.5 245q-20 31 -20 69zM128 576q167 -258 427 -375l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353zM592 704q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34t-14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5zM896 0l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69t-20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95zM1056 286l280 502q8 -45 8 -84q0 -139 -79 -253.5t-209 -164.5z" />
140 <glyph unicode="&#xf071;" horiz-adv-x="1792" d="M16 61l768 1408q17 31 47 49t65 18t65 -18t47 -49l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126zM752 992l17 -457q0 -10 10 -16.5t24 -6.5h185q14 0 23.5 6.5t10.5 16.5l18 459q0 12 -10 19q-13 11 -24 11h-220 q-11 0 -24 -11q-10 -7 -10 -21zM768 161q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190z" />
141 <glyph unicode="&#xf072;" horiz-adv-x="1408" d="M0 477q-1 13 9 25l96 97q9 9 23 9q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16 l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23z" />
142 <glyph unicode="&#xf073;" horiz-adv-x="1664" d="M0 -128v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90zM128 -128h288v288h-288v-288zM128 224 h288v320h-288v-320zM128 608h288v288h-288v-288zM384 1088q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288zM480 -128h320v288h-320v-288zM480 224h320v320h-320v-320zM480 608h320v288h-320 v-288zM864 -128h320v288h-320v-288zM864 224h320v320h-320v-320zM864 608h320v288h-320v-288zM1152 1088q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288zM1248 -128h288v288h-288v-288z M1248 224h288v320h-288v-320zM1248 608h288v288h-288v-288z" />
143 <glyph unicode="&#xf074;" horiz-adv-x="1792" d="M0 160v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192 h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23zM0 1056v192q0 14 9 23t23 9h224q250 0 410 -225q-60 -92 -137 -273q-22 45 -37 72.5 t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23zM743 353q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192 q-32 0 -85 -0.5t-81 -1t-73 1t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5z" />
144 <glyph unicode="&#xf075;" horiz-adv-x="1792" d="M0 640q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5t-120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5 t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281z" />
145 <glyph unicode="&#xf076;" d="M0 576v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5 t-98.5 362zM0 960v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45zM1024 960v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45z" />
146 <glyph unicode="&#xf077;" horiz-adv-x="1792" d="M90 250.5q0 26.5 19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5z" />
147 <glyph unicode="&#xf078;" horiz-adv-x="1792" d="M90 773.5q0 26.5 19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5z" />
148 <glyph unicode="&#xf079;" horiz-adv-x="1920" d="M0 704q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45z M640 1120q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20z " />
149 <glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M0 1216q0 26 19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024 q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45zM384 0q0 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.5zM1280 0q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5 t-90.5 -37.5t-90.5 37.5t-37.5 90.5z" />
150 <glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158z" />
151 <glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5t-0.5 12.5zM73 56q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43 q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43z" />
152 <glyph unicode="&#xf07d;" horiz-adv-x="768" d="M64 64q0 26 19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45z" />
153 <glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M0 640q0 26 19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45z" />
154 <glyph unicode="&#xf080;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216z M256 128v384h256v-384h-256zM640 128v896h256v-896h-256zM1024 128v640h256v-640h-256zM1408 128v1024h256v-1024h-256z" />
155 <glyph unicode="&#xf081;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 286q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109 q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4q21 -63 74.5 -104 t121.5 -42q-116 -90 -261 -90q-26 0 -50 3z" />
156 <glyph unicode="&#xf082;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544 q-119 0 -203.5 84.5t-84.5 203.5z" />
157 <glyph unicode="&#xf083;" horiz-adv-x="1792" d="M0 0v1280q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5zM128 0h1536v128h-1536v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM256 1216h384v128h-384v-128zM512 574 q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM640 574q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM736 576q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9 t9 23t-9 23t-23 9q-66 0 -113 -47t-47 -113z" />
158 <glyph unicode="&#xf084;" horiz-adv-x="1792" d="M0 752q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41q0 -17 -49 -66t-66 -49 q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5zM192 768q0 -80 56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56 t56 136t-56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136z" />
159 <glyph unicode="&#xf085;" horiz-adv-x="1920" d="M0 549v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8 q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90 q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5zM384 640q0 -106 75 -181t181 -75 t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181zM1152 58v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31 v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31zM1152 1082v140q0 16 149 31q13 29 30 52 q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71 q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31zM1408 128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5q0 52 -38 90t-90 38t-90 -38t-38 -90zM1408 1152q0 -53 37.5 -90.5 t90.5 -37.5t90.5 37.5t37.5 90.5q0 52 -38 90t-90 38t-90 -38t-38 -90z" />
160 <glyph unicode="&#xf086;" horiz-adv-x="1792" d="M0 768q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257t-94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25 t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224zM616 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5 t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132z" />
161 <glyph unicode="&#xf087;" d="M0 128v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5zM128 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM384 128h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5 t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85 t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640z" />
162 <glyph unicode="&#xf088;" d="M0 512v640q0 53 37.5 90.5t90.5 37.5h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186 q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5zM128 1088q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM384 512h32q16 0 35.5 -9 t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5 t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640z" />
163 <glyph unicode="&#xf089;" horiz-adv-x="896" d="M0 889q0 37 56 46l502 73l225 455q19 41 49 41v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48z" />
164 <glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M0 940q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138z M128 940q0 -168 187 -355l581 -560l580 559q188 188 188 356q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5 t-21.5 -143z" />
165 <glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M0 288v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5q0 -4 1 -20t0.5 -26.5t-3 -23.5 t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5zM384 448v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45t-19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45z" />
166 <glyph unicode="&#xf08c;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM223 1030q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86z M237 122h231v694h-231v-694zM595 122h231v388q0 38 7 56q15 35 45 59.5t74 24.5q116 0 116 -157v-371h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694z" />
167 <glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M0 320q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19 t-19 45zM416 672q0 -14 9 -23t23 -9t23 9t9 23v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448z" />
168 <glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832 q-119 0 -203.5 84.5t-84.5 203.5zM685 576q0 13 10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23z" />
169 <glyph unicode="&#xf090;" d="M0 448v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45t-19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45zM894.5 78.5q0.5 10.5 3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113 t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5q0 4 -1 20t-0.5 26.5z" />
170 <glyph unicode="&#xf091;" horiz-adv-x="1664" d="M0 928v128q0 40 28 68t68 28h288v96q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91t97.5 -37q75 0 133.5 -45.5 t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143zM128 928q0 -78 94.5 -162t235.5 -113q-74 162 -74 371 h-256v-96zM1206 653q141 29 235.5 113t94.5 162v96h-256q0 -209 -74 -371z" />
171 <glyph unicode="&#xf092;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204 q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52 t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5h-224q-119 0 -203.5 84.5t-84.5 203.5zM271 315q3 5 13 2 q10 -5 7 -12q-5 -7 -13 -2q-10 5 -7 12zM304 290q6 6 16 -3q9 -11 2 -16q-6 -7 -16 3q-9 11 -2 16zM335 233q-9 13 0 18q9 7 17 -6q9 -12 0 -19q-8 -6 -17 7zM370 206q8 9 20 -3q12 -11 4 -19q-8 -9 -20 3q-13 11 -4 19zM419 168q4 11 19 7q16 -5 13 -16q-4 -12 -19 -6 q-17 4 -13 15zM481 154q0 11 16 11q17 2 17 -11q0 -11 -16 -11q-17 -2 -17 11zM540 158q-2 12 14 15q16 2 18 -9q2 -10 -14 -14t-18 8z" />
172 <glyph unicode="&#xf093;" horiz-adv-x="1664" d="M0 -32v320q0 40 28 68t68 28h427q21 -56 70.5 -92t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68zM325 936q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69q-17 -40 -59 -40 h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40zM1152 64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM1408 64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
173 <glyph unicode="&#xf094;" d="M0 433q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5q0 -165 -70 -327.5 t-196 -288t-281 -180.5q-124 -44 -326 -44q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5zM128 434q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5 q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24 q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5z" />
174 <glyph unicode="&#xf095;" horiz-adv-x="1408" d="M0 1069q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235 t235 -174q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5 t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5z" />
175 <glyph unicode="&#xf096;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832z" />
176 <glyph unicode="&#xf097;" horiz-adv-x="1280" d="M0 7v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62zM128 38l423 406l89 85l89 -85l423 -406 v1242h-1024v-1242z" />
177 <glyph unicode="&#xf098;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 905q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5 q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5 t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5z" />
178 <glyph unicode="&#xf099;" horiz-adv-x="1664" d="M44 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5 q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145z" />
179 <glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M95 631v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255z" />
180 <glyph unicode="&#xf09b;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44 l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3 q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5z" />
181 <glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M0 96v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68z" />
182 <glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M0 32v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v608h-1664v-608zM128 1024h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600 q-13 0 -22.5 -9.5t-9.5 -22.5v-224zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
183 <glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M0 192q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 697v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5t259 -181.5q114 -113 181.5 -259t80.5 -306q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5 t-391.5 184.5q-25 2 -41.5 20t-16.5 43zM0 1201v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294q187 -186 294 -425.5t120 -501.5q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102 q-25 1 -42.5 19.5t-17.5 43.5z" />
184 <glyph unicode="&#xf0a0;" d="M0 160v320q0 25 16 75l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113zM128 160q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5v320q0 13 -9.5 22.5t-22.5 9.5h-1216 q-13 0 -22.5 -9.5t-9.5 -22.5v-320zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM880 320q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM1136 320q0 33 23.5 56.5t56.5 23.5 t56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5z" />
185 <glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M0 672v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50 t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113zM768 633q377 -42 768 -341v954q-394 -302 -768 -343v-270z" />
186 <glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M0 128q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38 t-38 90zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM656 0q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16z" />
187 <glyph unicode="&#xf0a3;" d="M2 435q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70l-53 -186l188 -48 q40 -10 52 -51q10 -42 -20 -70l-138 -135l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53 q-41 -12 -70 19q-31 29 -19 70l53 186l-188 48q-40 10 -52 51z" />
188 <glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M0 128v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179q0 -105 -75.5 -181 t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5zM128 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM384 128h32q72 0 167 -32 t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139 q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106q-69 -57 -140 -57h-32v-640z" />
189 <glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M0 769q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5v-640 q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181zM128 768q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119 q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5 t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5t-39 -89.5zM1536 192q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
190 <glyph unicode="&#xf0a6;" d="M0 640q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5t-90.5 -37.5h-640 q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5zM128 640q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140 v-32h640v32q0 72 32 167t64 193.5t32 179.5q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576q-20 0 -48.5 15t-55 33t-68 33t-84.5 15 q-67 0 -97.5 -44.5t-30.5 -115.5zM1152 -64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
191 <glyph unicode="&#xf0a7;" d="M0 640q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317q0 -142 -77.5 -230t-217.5 -87 l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5zM128 640q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33t55 33t48.5 15v-576q0 -50 38.5 -89 t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112 q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5zM1152 1344q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
192 <glyph unicode="&#xf0a8;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM251 640q0 -27 18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502 q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45z" />
193 <glyph unicode="&#xf0a9;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM256 576q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18 l362 362l91 91q18 18 18 45t-18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128z" />
194 <glyph unicode="&#xf0aa;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 641q0 -27 18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19 t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45t-18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45z" />
195 <glyph unicode="&#xf0ab;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM252 639q0 -27 18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45t-18 45l-91 91 q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45z" />
196 <glyph unicode="&#xf0ac;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM226 979q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18 q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13 q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5 t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13 q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25 t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5 t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4 q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5q15 10 -7 16q-17 5 -43 -12q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8 q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5 q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26 q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5 q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14 q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5 q-16 0 -22 -1q-146 -80 -235 -222zM877 26q0 -6 2 -16q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7 t-10 1.5t-11.5 -7q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5z" />
197 <glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M21 0q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90zM256 64q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45zM768 960q0 185 131.5 316.5t316.5 131.5q58 0 121.5 -16.5 t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25q0 -39 -23 -106q-47 -134 -164.5 -217.5t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5z" />
198 <glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M0 64v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 576v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM0 1088v256q0 26 19 45t45 19h1664 q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45zM640 640h1024v128h-1024v-128zM1024 128h640v128h-640v-128zM1280 1152h384v128h-384v-128z" />
199 <glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M5 1241q17 39 59 39h1280q42 0 59 -39q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70z" />
200 <glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M0 160v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM0 736v384q0 66 47 113t113 47h352v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113v-384h-1792z M640 1280h512v128h-512v-128zM768 512v128h256v-128h-256z" />
201 <glyph unicode="&#xf0b2;" d="M0 -64v448q0 42 40 59q39 17 69 -14l144 -144l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45 v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19l-144 144l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19 t-19 45z" />
202 <glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M0 671q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5zM128 1280q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM256 3q0 53 3.5 103.5 t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5 zM576 896q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5zM1280 1280q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM1327 640q81 117 81 256q0 29 -5 66q66 -23 133 -23 q59 0 119 21.5t97.5 42.5t43.5 21q124 0 124 -353q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128z" />
203 <glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M16 1088q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l206 -207q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204t-85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88 q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204zM208 1088q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15t21.5 -21.5t18.5 -19q33 31 33 73 q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67zM911 383q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26l147 146q28 28 28 67q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5 q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73z" />
204 <glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M0 448q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z" />
205 <glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M115.5 -64.5q-34.5 63.5 21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399l503 -793q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5zM476 384h712l-272 429l-20 31v37v399h-128v-399v-37 l-20 -31z" />
206 <glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M1 157q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148q4 -48 -10 -97q4 -1 12 -5 l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56l-507 -398l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207zM168 176q-25 -66 21 -108q39 -36 113 -36q100 0 192 59q81 51 106 117t-21 108q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117zM168 976q25 -66 106 -117q92 -59 192 -59q74 0 113 36q46 42 21 108t-106 117q-92 59 -192 59 q-74 0 -113 -36q-46 -42 -21 -108zM672 448l9 -8q2 -2 7 -6q4 -4 11 -12t11 -12l26 -26l160 96l96 -32l736 576l-128 64l-768 -431v-113zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 576q0 26 19 45t45 19t45 -19 t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1018 391l582 -327l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
207 <glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M0 224v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68zM128 256h512v256q0 40 20 88t48 76l316 316v416h-384 v-416q0 -40 -28 -68t-68 -28h-416v-640zM213 1024h299v299zM768 -128h896v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640zM853 640h299v299z" />
208 <glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M4 1023q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581 q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776 q-113 115 -113 271z" />
209 <glyph unicode="&#xf0c7;" d="M0 -32v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 0h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20 t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280zM384 0h768v384h-768v-384zM640 928q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v320q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320z" />
210 <glyph unicode="&#xf0c8;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5z" />
211 <glyph unicode="&#xf0c9;" d="M0 64v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM0 576v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM0 1088v128q0 26 19 45t45 19h1408 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45z" />
212 <glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M0 128q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 640q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM0 1152q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM512 32v192 q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5zM512 544v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5z M512 1056v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5z" />
213 <glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M15 438q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105v-159h-362q-6 36 -6 54zM19 -190 l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66zM34 1400l136 127h106v-404h108v-99 h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54zM512 32v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5zM512 544v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5v-192 q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5zM512 1056v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5z" />
214 <glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M0 544v64q0 14 9 23t23 9h1728q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23zM384 972q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6l-14 2q-50 149 -103 205 q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743q-28 35 -51 80q-48 97 -48 188zM414 154q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22 q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156z" />
215 <glyph unicode="&#xf0cd;" d="M0 -32v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-1472q-14 0 -23 -9t-9 -23zM0 1405q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5 t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2 q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195 q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39q-37 2 -45 4z" />
216 <glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M0 160v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113zM128 160q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM128 544q0 -14 9 -23t23 -9h320 q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM128 928q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM640 160q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192zM640 544q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM640 928q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM1152 160q0 -14 9 -23t23 -9h320q14 0 23 9t9 23 v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM1152 544q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192zM1152 928q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192z" />
217 <glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M27 160q0 27 18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45t-18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45zM128 1408l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98zM320 1216l196 60l60 196l60 -196l196 -60l-196 -60 l-60 -196l-60 196zM768 1408l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98zM1083 1062l107 -107l293 293l-107 107zM1408 768l98 30l30 98l30 -98l98 -30l-98 -30l-30 -98l-30 98z" />
218 <glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M64 192q0 26 19 45t45 19v320q0 8 -0.5 35t0 38t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45v-1024q0 -15 -4 -26.5t-13.5 -18.5t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5 q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM384 128q0 -52 38 -90t90 -38 t90 38t38 90t-38 90t-90 38t-90 -38t-38 -90zM1280 128q0 -52 38 -90t90 -38t90 38t38 90t-38 90t-90 38t-90 -38t-38 -90z" />
219 <glyph unicode="&#xf0d2;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63 q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5 q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423z" />
220 <glyph unicode="&#xf0d3;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5 q-104 0 -194.5 -28.5t-153 -76.5t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118 q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5z" />
221 <glyph unicode="&#xf0d4;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM276 309q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117 q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94 q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95zM395 338q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78z M462 969q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5t-57.5 96.5t-17.5 106zM960 672h128v-160h64v160h128v64h-128v128h-64v-128h-128v-64z" />
222 <glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M32 182q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65 t-59.5 -61.5t-24.5 -66q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131zM218 228q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5q58 0 111.5 13t99 39t73 73 t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5zM324 1222q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q38 0 78 16.5t66 43.5q53 57 53 159 q0 58 -17 125t-48.5 129.5t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160zM1084 731v108h212v217h105v-217h213v-108h-213v-219h-105v219h-212z" />
223 <glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M0 64v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45zM128 384q106 0 181 -75t75 -181h1152q0 106 75 181t181 75v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512zM640 640q0 70 21 142 t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142t-21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142zM762 791l77 -80q42 37 55 57h2v-288h-128v-96h384v96h-128v448h-114z" />
224 <glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M0 832q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45z" />
225 <glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M0 320q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
226 <glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M64 640q0 26 19 45l448 448q19 19 45 19t45 -19t19 -45v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45z" />
227 <glyph unicode="&#xf0da;" horiz-adv-x="640" d="M0 192v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45z" />
228 <glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M0 32v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113zM128 32q0 -13 9.5 -22.5t22.5 -9.5h608v1152h-640v-1120zM896 0h608q13 0 22.5 9.5t9.5 22.5v1120h-640v-1152z" />
229 <glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M0 448q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45zM0 832q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
230 <glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M0 448q0 26 19 45t45 19h896q26 0 45 -19t19 -45t-19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45z" />
231 <glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M0 832q0 26 19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45z" />
232 <glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M0 32v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113zM0 1098q0 78 41.5 130t118.5 52h1472 q65 0 112.5 -47t47.5 -113q0 -79 -49 -151t-122 -123q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5z" />
233 <glyph unicode="&#xf0e1;" d="M0 1217q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122zM19 -80v991h330v-991h-330zM531 -80q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5v-568 h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329z" />
234 <glyph unicode="&#xf0e2;" d="M0 832v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298t-61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12 q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45z" />
235 <glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M40 736q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18 q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5 q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5 t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68z" />
236 <glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M0 384q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29q-141 221 -141 483zM128 384q0 -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 M320 832q0 -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.5zM710 241q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91l101 382q6 26 -7.5 48.5t-38.5 29.5t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5 t-63 -98.5zM768 1024q0 -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.5zM1216 832q0 -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.5zM1408 384q0 -53 37.5 -90.5 t90.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" />
237 <glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M0 640q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5t-120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5 t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281zM128 640q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5t-381.5 -69.5 t-282 -187.5t-104.5 -255z" />
238 <glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M0 768q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257t-94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25 t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224zM128 768q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52t-286 -52t-211.5 -141t-78.5 -191zM616 132 q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22 t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132z" />
239 <glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M1 551l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39z" />
240 <glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M0 -32v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68z" />
241 <glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M0 681q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17 q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5z M384 128q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180zM768 1310v98q0 26 19 45t45 19t45 -19t19 -45v-98q-42 2 -64 2t-64 -2z" />
242 <glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M0 96v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88v-672q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68zM256 1312q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5v64 q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64zM768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1280 640h299l-299 299v-299z" />
243 <glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M0 960q0 99 44.5 184.5t117 142t164 89t186.5 32.5t186.5 -32.5t164 -89t117 -142t44.5 -184.5q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47q0 -46 -31.5 -71t-77.5 -25 q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268zM128 960q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228 q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134zM480 1088q0 13 9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5 q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5z" />
244 <glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M0 256q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22zM0 800v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23 t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5z" />
245 <glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M0 448q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z M512 608q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5z" />
246 <glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M0 448q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5z M512 672q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24z" />
247 <glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M0 131q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89 q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5 t81 -103t47.5 -132.5t24 -138t5.5 -131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190zM256 192q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM320 1024q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5 t-271.5 112.5t-112.5 271.5z" />
248 <glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M0 768v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48 q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5 t-131.5 271.5v132q-164 20 -274 128t-110 252zM1152 832q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
249 <glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M0 96v832q0 92 66 158t158 66h64v-1280h-64q-92 0 -158 66t-66 158zM384 -128v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128v-1280h-1024zM640 1152h512v128h-512v-128zM1504 -128v1280h64q92 0 158 -66t66 -158v-832q0 -92 -66 -158t-158 -66h-64z " />
250 <glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M0 128q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38 t-38 90zM656 0q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16z" />
251 <glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM256 480v736q0 26 19 45t45 19h1152q159 0 271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158zM1408 704h64q80 0 136 56t56 136 t-56 136t-136 56h-64v-384z" />
252 <glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M0 832v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128 q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111zM768 416v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5z" />
253 <glyph unicode="&#xf0f6;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM384 160v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64 q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23zM384 416v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23zM384 672v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23zM1024 1024h376 q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
254 <glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M0 -192v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM128 -128h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224h384v1536h-1152v-1536zM256 160v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 672v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 928v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 1184v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 672v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 928v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 1184v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM768 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM768 672v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM768 928v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM768 1184v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 160v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 416v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 672v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 928v64q0 13 9.5 22.5t22.5 9.5h64 q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 1184v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5z" />
255 <glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M0 -192v1280q0 26 19 45t45 19h320v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM128 -128h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224h384v1152h-256 v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152zM256 160v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5 v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM256 672v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64 q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 672v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM512 1056q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128 v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320zM768 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5 v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM768 672v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 160v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5 v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 416v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5zM1024 672v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5 v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5z" />
256 <glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M64 192q0 26 19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128 q-26 0 -45 19t-19 45zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM384 128q0 -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.5zM896 800q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192 q14 0 23 9t9 23v224h224q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192zM1280 128q0 -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" />
257 <glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M0 96v832q0 92 66 158t158 66h32v-1280h-32q-92 0 -158 66t-66 158zM352 -128v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160v-1280h-1088zM512 416q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23v192 q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192zM640 1152h512v128h-512v-128zM1536 -128v1280h32q92 0 158 -66t66 -158v-832q0 -92 -66 -158t-158 -66h-32z" />
258 <glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M0 512v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93l1 -3q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5 t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8z" />
259 <glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M64 1152l32 128h480l32 128h960l32 -192l-64 -32v-800l128 -192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320zM384 768q0 -53 37.5 -90.5t90.5 -37.5h128v384h-256v-256z" />
260 <glyph unicode="&#xf0fd;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 192q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896z" />
261 <glyph unicode="&#xf0fe;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 576q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45 v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128z" />
262 <glyph unicode="&#xf100;" horiz-adv-x="1024" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM429 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23 l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
263 <glyph unicode="&#xf101;" horiz-adv-x="1024" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM397 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10 l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
264 <glyph unicode="&#xf102;" horiz-adv-x="1152" d="M77 224q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM77 608q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23 l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
265 <glyph unicode="&#xf103;" horiz-adv-x="1152" d="M77 672q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM77 1056q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10 l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
266 <glyph unicode="&#xf104;" horiz-adv-x="640" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
267 <glyph unicode="&#xf105;" horiz-adv-x="640" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
268 <glyph unicode="&#xf106;" horiz-adv-x="1152" d="M77 352q0 13 10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
269 <glyph unicode="&#xf107;" horiz-adv-x="1152" d="M77 800q0 13 10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23z" />
270 <glyph unicode="&#xf108;" horiz-adv-x="1920" d="M0 288v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113zM128 544q0 -13 9.5 -22.5 t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832z" />
271 <glyph unicode="&#xf109;" horiz-adv-x="1920" d="M0 96v96h160h1600h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68zM256 416v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113zM384 416q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5 t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-704zM864 112q0 -16 16 -16h160q16 0 16 16t-16 16h-160q-16 0 -16 -16z" />
272 <glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M0 160v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-832q-66 0 -113 47t-47 113zM128 288q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM512 128 q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
273 <glyph unicode="&#xf10b;" horiz-adv-x="768" d="M0 128v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90zM96 288q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704zM288 1136 q0 -16 16 -16h160q16 0 16 16t-16 16h-160q-16 0 -16 -16zM304 128q0 -33 23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5z" />
274 <glyph unicode="&#xf10c;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273z" />
275 <glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M0 192v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136z M896 192v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136z" />
276 <glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M0 832v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136zM896 832v384 q0 80 56 136t136 56h384q80 0 136 -56t56 -136v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136z" />
277 <glyph unicode="&#xf110;" horiz-adv-x="1568" d="M0 640q0 66 47 113t113 47t113 -47t47 -113t-47 -113t-113 -47t-113 47t-47 113zM176 1088q0 73 51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5t-51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5zM208 192q0 60 42 102t102 42q59 0 101.5 -42t42.5 -102t-42.5 -102 t-101.5 -42q-60 0 -102 42t-42 102zM608 1280q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM672 0q0 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.5zM1136 192q0 46 33 79t79 33t79 -33t33 -79 t-33 -79t-79 -33t-79 33t-33 79zM1168 1088q0 33 23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5t-23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5zM1344 640q0 40 28 68t68 28t68 -28t28 -68t-28 -68t-68 -28t-68 28t-28 68z" />
278 <glyph unicode="&#xf111;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5z" />
279 <glyph unicode="&#xf112;" horiz-adv-x="1792" d="M0 896q0 26 19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101 t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19l-512 512q-19 19 -19 45z" />
280 <glyph unicode="&#xf113;" horiz-adv-x="1664" d="M0 496q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218q0 -87 -27 -168q136 -160 136 -398q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86t-170 -47.5t-171.5 -22t-167 -4.5 q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331zM224 320q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11 q-152 21 -195 21q-118 0 -187 -84t-69 -204zM384 320q0 40 12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82t-12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82zM1024 320q0 40 12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82t-12.5 -82t-43 -76t-72.5 -34t-72.5 34 t-43 76t-12.5 82z" />
281 <glyph unicode="&#xf114;" horiz-adv-x="1664" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158zM128 224q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64 q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960z" />
282 <glyph unicode="&#xf115;" horiz-adv-x="1920" d="M0 224v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158zM128 331l256 315q44 53 116 87.5 t140 34.5h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-853zM171 163q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40z " />
283 <glyph unicode="&#xf116;" horiz-adv-x="1792" />
284 <glyph unicode="&#xf117;" horiz-adv-x="1792" />
285 <glyph unicode="&#xf118;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 896q0 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.5zM402 461q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38 q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5q-37 -121 -138 -195t-228 -74t-228 74t-138 195zM896 896q0 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" />
286 <glyph unicode="&#xf119;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 896q0 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.5zM402 307q37 121 138 195t228 74t228 -74t138 -195q8 -25 -4 -48.5 t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5zM896 896q0 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" />
287 <glyph unicode="&#xf11a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM384 448q0 26 19 45t45 19h640q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45zM384 896q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5t-37.5 -90.5 t-90.5 -37.5t-90.5 37.5t-37.5 90.5zM896 896q0 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" />
288 <glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M0 512q0 212 150 362t362 150h896q212 0 362 -150t150 -362t-150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150t-150 362zM192 448q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23v128 q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128zM1152 384q0 -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.5zM1408 640q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
289 <glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M0 128v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5zM128 128h1664v896h-1664v-896zM256 272v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM256 528v96 q0 16 16 16h224q16 0 16 -16v-96q0 -16 -16 -16h-224q-16 0 -16 16zM256 784v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM512 272v96q0 16 16 16h864q16 0 16 -16v-96q0 -16 -16 -16h-864q-16 0 -16 16zM512 784v96q0 16 16 16h96q16 0 16 -16v-96 q0 -16 -16 -16h-96q-16 0 -16 16zM640 528v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM768 784v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM896 528v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16z M1024 784v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM1152 528v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM1280 784v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16zM1408 528v96q0 16 16 16h112v240 q0 16 16 16h96q16 0 16 -16v-352q0 -16 -16 -16h-224q-16 0 -16 16zM1536 272v96q0 16 16 16h96q16 0 16 -16v-96q0 -16 -16 -16h-96q-16 0 -16 16z" />
290 <glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64zM320 320v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86 q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56zM448 426 q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599z" />
291 <glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M64 1280q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64zM320 320v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86 q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56zM448 426 q205 96 384 110v192q-181 -16 -384 -117v-185zM448 836q215 111 384 118v197q-172 -8 -384 -126v-189zM832 730h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15 t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2q-23 0 -49 -3v-222zM1280 828q148 -42 384 90v189q-169 -91 -306 -91q-45 0 -78 8v-196z" />
292 <glyph unicode="&#xf120;" horiz-adv-x="1664" d="M13 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23zM640 32v64q0 14 9 23t23 9h960q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-960 q-14 0 -23 9t-9 23z" />
293 <glyph unicode="&#xf121;" horiz-adv-x="1920" d="M45 576q0 13 10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23zM712 -52l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5 l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5zM1293 160q0 13 10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23z" />
294 <glyph unicode="&#xf122;" horiz-adv-x="1792" d="M0 896q0 26 19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45l397 -397v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45zM384 896q0 26 19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221 q169 -173 169 -509q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45z" />
295 <glyph unicode="&#xf123;" horiz-adv-x="1664" d="M2 900.5q9 27.5 54 34.5l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5z M832 310l59 -31l318 -168l-60 355l-12 66l49 47l257 250l-356 52l-66 10l-30 60l-159 322v-963z" />
296 <glyph unicode="&#xf124;" horiz-adv-x="1408" d="M2 561q-5 22 4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5z" />
297 <glyph unicode="&#xf125;" horiz-adv-x="1664" d="M0 928v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864 q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23zM512 301l595 595h-595v-595zM557 256h595v595z" />
298 <glyph unicode="&#xf126;" horiz-adv-x="1024" d="M0 64q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136 q0 -52 -26 -96.5t-70 -69.5q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136zM96 64q0 -40 28 -68t68 -28t68 28t28 68t-28 68t-68 28t-68 -28t-28 -68zM96 1216q0 -40 28 -68 t68 -28t68 28t28 68t-28 68t-68 28t-68 -28t-28 -68zM736 1088q0 -40 28 -68t68 -28t68 28t28 68t-28 68t-68 28t-68 -28t-28 -68z" />
299 <glyph unicode="&#xf127;" horiz-adv-x="1664" d="M0 448q0 14 9 23t23 9h320q14 0 23 -9t9 -23t-9 -23t-23 -9h-320q-14 0 -23 9t-9 23zM16 1088q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56l-239 -18l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68 l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204zM128 32q0 13 9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23zM544 -96v320q0 14 9 23t23 9t23 -9t9 -23v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23zM633 364 l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56zM1056 1184v320q0 14 9 23t23 9t23 -9t9 -23v-320 q0 -14 -9 -23t-23 -9t-23 9t-9 23zM1216 1120q0 13 9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23zM1280 960q0 14 9 23t23 9h320q14 0 23 -9t9 -23t-9 -23t-23 -9h-320q-14 0 -23 9t-9 23z" />
300 <glyph unicode="&#xf128;" horiz-adv-x="1024" d="M96.5 986q-2.5 15 5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5t-10.5 37.5v45q0 83 65 156.5 t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25zM384 40v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28z" />
301 <glyph unicode="&#xf129;" horiz-adv-x="640" d="M0 64v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45zM128 1152v192q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-192 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45z" />
302 <glyph unicode="&#xf12a;" horiz-adv-x="640" d="M98 1344q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45zM128 64v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45z" />
303 <glyph unicode="&#xf12b;" d="M5 0v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258zM1013 713q0 64 26 117t65 86.5 t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80h126v-206h-514l-3 27q-4 28 -4 46z " />
304 <glyph unicode="&#xf12c;" d="M5 0v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258zM1015 -183q0 64 26 117t65 86.5 t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126v-206h-514l-4 27q-3 45 -3 46z" />
305 <glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M1.5 146.5q5.5 37.5 30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5zM128 128h768l336 384h-768z" />
306 <glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M0 0v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5 q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124 q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89 q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1z" />
307 <glyph unicode="&#xf130;" horiz-adv-x="1152" d="M0 704v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45 t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5zM256 704v512q0 132 94 226t226 94t226 -94t94 -226v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226z" />
308 <glyph unicode="&#xf131;" horiz-adv-x="1408" d="M13 64q0 13 10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23t-10 -23l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -221 -147.5 -384.5 t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23zM128 704v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113l-101 -101 q-42 103 -42 214zM384 704v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
309 <glyph unicode="&#xf132;" horiz-adv-x="1280" d="M0 576v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150t-33.5 170.5zM640 79 q119 63 213 137q235 184 235 360v640h-448v-1137z" />
310 <glyph unicode="&#xf133;" horiz-adv-x="1664" d="M0 -128v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90zM128 -128h1408v1024h-1408v-1024z M384 1088q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288zM1152 1088q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288z" />
311 <glyph unicode="&#xf134;" horiz-adv-x="1408" d="M3.5 940q-8.5 25 3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96 q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37 zM384 1344q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
312 <glyph unicode="&#xf135;" horiz-adv-x="1664" d="M36 464l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85 q-3 -1 -9 -1q-14 0 -23 9l-64 64q-17 19 -5 39zM1248 1088q0 -40 28 -68t68 -28t68 28t28 68t-28 68t-68 28t-68 -28t-28 -68z" />
313 <glyph unicode="&#xf136;" horiz-adv-x="1792" d="M0 0l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334z" />
314 <glyph unicode="&#xf137;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM346 640q0 -26 19 -45l454 -454q19 -19 45 -19t45 19l102 102q19 19 19 45t-19 45l-307 307l307 307 q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45z" />
315 <glyph unicode="&#xf138;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM506 288q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l454 454q19 19 19 45t-19 45l-454 454 q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45z" />
316 <glyph unicode="&#xf139;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM250 544q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19l102 102 q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45z" />
317 <glyph unicode="&#xf13a;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM250 736q0 -26 19 -45l454 -454q19 -19 45 -19t45 19l454 454q19 19 19 45t-19 45l-102 102 q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45z" />
318 <glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M0 1408h1408l-128 -1438l-578 -162l-574 162zM262 1114l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674l16 175h-884z" />
319 <glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M12 75l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208l59 297h1505l-266 -1333l-804 -267z" />
320 <glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M0 0v352q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192 q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5 l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30zM832 1280q0 -26 19 -45t45 -19t45 19t19 45t-19 45t-45 19t-45 -19t-19 -45z" />
321 <glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M0 96v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181v-320h736q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28 t-28 68z" />
322 <glyph unicode="&#xf140;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5zM256 640q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362zM384 640q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM512 640q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
323 <glyph unicode="&#xf141;" horiz-adv-x="1408" d="M0 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM512 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM1024 608v192q0 40 28 68t68 28h192 q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68z" />
324 <glyph unicode="&#xf142;" horiz-adv-x="384" d="M0 96v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM0 608v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68zM0 1120v192q0 40 28 68t68 28h192q40 0 68 -28 t28 -68v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68z" />
325 <glyph unicode="&#xf143;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 256q0 -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 M256 575q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10t9 24q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128zM256 959q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128 q13 0 23 10q11 9 9 23q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128z" />
326 <glyph unicode="&#xf144;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM512 320q0 -37 32 -56q16 -8 32 -8q17 0 32 9l544 320q32 18 32 55t-32 55l-544 320q-31 19 -64 1 q-32 -19 -32 -56v-640z" />
327 <glyph unicode="&#xf145;" horiz-adv-x="1792" d="M54 448.5q0 53.5 37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136t-136 56t-136 -56l-125 126q-37 37 -37 90.5z M342 512q0 -26 19 -45l362 -362q18 -18 45 -18t45 18l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45zM452 512l572 572l316 -316l-572 -572z" />
328 <glyph unicode="&#xf146;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 576q0 -26 19 -45t45 -19h896q26 0 45 19t19 45v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128 z" />
329 <glyph unicode="&#xf147;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832zM256 672v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23z" />
330 <glyph unicode="&#xf148;" horiz-adv-x="1024" d="M3 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18z" />
331 <glyph unicode="&#xf149;" horiz-adv-x="1024" d="M3 1261q9 19 29 19h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34z" />
332 <glyph unicode="&#xf14a;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM218 640q0 -26 19 -45l358 -358q19 -19 45 -19t45 19l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19 t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45z" />
333 <glyph unicode="&#xf14b;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 128h288l544 544l-288 288l-544 -544v-288zM352 320v56l52 52l152 -152l-52 -52h-56v96h-96zM494 494 q-14 13 3 30l291 291q17 17 30 3q14 -13 -3 -30l-291 -291q-17 -17 -30 -3zM864 1024l288 -288l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28z" />
334 <glyph unicode="&#xf14c;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM282 320q0 -26 19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59 v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45z" />
335 <glyph unicode="&#xf14d;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 448q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5t224 23.5v-160 q0 -42 40 -59q12 -5 24 -5q26 0 45 19l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5z" />
336 <glyph unicode="&#xf14e;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 241v542l512 256v-542zM640 448l256 128l-256 128v-256z" />
337 <glyph unicode="&#xf150;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM391 861q17 35 57 35h640q40 0 57 -35q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66z" />
338 <glyph unicode="&#xf151;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM391 419q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66q-17 -35 -57 -35h-640q-40 0 -57 35z" />
339 <glyph unicode="&#xf152;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -14 9 -23t23 -9h960q14 0 23 9t9 23v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960z M512 320v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52t-27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57z" />
340 <glyph unicode="&#xf153;" horiz-adv-x="1024" d="M0 514v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5 t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5 l12 3l5 2q13 5 26 -2q12 -7 15 -21l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5z" />
341 <glyph unicode="&#xf154;" horiz-adv-x="1024" d="M0 32v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215 h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23z" />
342 <glyph unicode="&#xf155;" horiz-adv-x="1024" d="M52 171l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242 t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48 t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50t53 -63.5t31.5 -76.5t13 -94q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5 t-17.5 18q-17 21 -2 41z" />
343 <glyph unicode="&#xf156;" horiz-adv-x="898" d="M0 605v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171 q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22z" />
344 <glyph unicode="&#xf157;" horiz-adv-x="1027" d="M4 1360q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103 q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214z" />
345 <glyph unicode="&#xf158;" horiz-adv-x="1280" d="M0 256v128q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315t-126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9 h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23zM487 747h320q106 0 171 62t65 162t-65 162t-171 62h-320v-448z" />
346 <glyph unicode="&#xf159;" horiz-adv-x="1792" d="M0 672v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111 q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23z M373 896l32 -128h225l35 128h-292zM436 640l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5l81 299h-159zM822 768h139l-35 128h-70zM1118 896l34 -128h230l33 128h-297zM1187 640l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3l78 300h-162z" />
347 <glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M56 0l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89 t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200zM522 182q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30t24.5 40t9.5 51q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1 t-47.5 -1v-338zM522 674q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307z" />
348 <glyph unicode="&#xf15b;" d="M0 -160v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472z" />
349 <glyph unicode="&#xf15c;" d="M0 -160v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM384 160q0 -14 9 -23t23 -9h704q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM384 416q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM384 672q0 -14 9 -23t23 -9h704q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64zM1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472z" />
350 <glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM899 768v106h70l230 662h162l230 -662h70v-106h-288v106h75l-47 144h-243l-47 -144h75v-106 h-287zM988 -166l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121v-233h-584v90zM1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18 t-7.5 -29z" />
351 <glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM899 -150h70l230 662h162l230 -662h70v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287 v106zM988 768v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248v119h121v-233h-584zM1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29 z" />
352 <glyph unicode="&#xf160;" horiz-adv-x="1792" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM896 -32q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9 t-9 23v192zM896 288v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23zM896 800v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23zM896 1312v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23 v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23z" />
353 <glyph unicode="&#xf161;" horiz-adv-x="1792" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM896 -32q0 14 9 23t23 9h256q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9 t-9 23v192zM896 288v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23zM896 800v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23zM896 1312v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23 v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23z" />
354 <glyph unicode="&#xf162;" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM946 261q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5q0 -62 -13 -121.5t-41 -114 t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5zM976 1351l192 185h123v-654h165v-114h-469v114h167v432q0 7 0.5 19t0.5 17 v16h-2l-7 -12q-8 -13 -26 -31l-62 -58zM1085 261q0 -57 36.5 -95t104.5 -38q50 0 85 27t35 68q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94z" />
355 <glyph unicode="&#xf163;" d="M34 108q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35zM946 1285q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5q0 -62 -13 -121.5t-41 -114 t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5zM976 327l192 185h123v-654h165v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16 h-2l-7 -12q-8 -13 -26 -31l-62 -58zM1085 1285q0 -57 36.5 -95t104.5 -38q50 0 85 27t35 68q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94z" />
356 <glyph unicode="&#xf164;" horiz-adv-x="1664" d="M0 64v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45zM128 192q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45zM480 64v641q0 25 18 43.5t43 20.5q24 2 76 59 t101 121q68 87 101 120q18 18 31 48t17.5 48.5t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135 q0 -86 -55 -149q15 -44 15 -76q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5z" />
357 <glyph unicode="&#xf165;" horiz-adv-x="1664" d="M0 448q0 -26 19 -45t45 -19h288q26 0 45 19t19 45v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640zM128 960q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45zM480 447v641q0 26 19 44.5t45 19.5q35 1 158 44 q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76q55 -61 55 -149q-1 -78 -57.5 -135t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39 t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121t-76 59q-25 2 -43 20.5t-18 43.5z" />
358 <glyph unicode="&#xf166;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM218 366q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73 q20 84 20 260q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5q-20 -87 -20 -260zM300 551v70h232v-70h-80v-423h-74v423h-78zM396 1313l24 -69t23 -69q35 -103 46 -158v-201h74v201l90 296h-75l-51 -195l-53 195 h-78zM542 205v290h66v-270q0 -24 1 -26q1 -15 15 -15q20 0 42 31v280h67v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54zM654 936q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38q-21 -29 -21 -87v-130zM721 923 v156q0 52 32 52t32 -52v-156q0 -51 -32 -51t-32 51zM790 128v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67zM857 200q16 -16 33 -16q29 0 29 49v157q0 50 -29 50q-17 0 -33 -16v-224zM907 893q0 -37 6 -55 q11 -27 43 -27q36 0 77 45v-40h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293zM1037 247v129q0 59 20 86q29 38 80 38t78 -38q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68v-9q0 -29 -2 -43q-3 -22 -15 -40 q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86zM1103 355h66v34q0 51 -33 51t-33 -51v-34z" />
359 <glyph unicode="&#xf167;" d="M27 260q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99q-26 112 -26 350zM138 509h105v-569h100v569h107v94h-312 v-94zM266 1536h106l71 -263l68 263h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187zM463 43q0 -49 8 -73q12 -37 58 -37q48 0 102 61v-54h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391zM614 1028v175q0 80 28 117q38 51 105 51 q69 0 106 -51q28 -37 28 -117v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51q-28 38 -28 118zM704 1011q0 -70 43 -70t43 70v210q0 69 -43 69t-43 -69v-210zM798 -60h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89 v-663zM887 36v301q22 22 45 22q39 0 39 -67v-211q0 -67 -39 -67q-23 0 -45 22zM955 971v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75zM1130 100q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54 q2 9 2 58v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51q-28 -37 -28 -116v-173zM1219 245v46q0 68 45 68t45 -68v-46h-90z" />
360 <glyph unicode="&#xf168;" horiz-adv-x="1408" d="M5 384q-10 17 0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45l164 -286q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17zM536 539q18 32 531 942q25 45 64 45h241q22 0 31 -15q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37 q-10 -15 -32 -15h-239q-42 0 -66 45z" />
361 <glyph unicode="&#xf169;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM227 396q8 -13 24 -13h185q31 0 50 36l199 352q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29 l125 -216v-1l-196 -346q-9 -14 0 -28zM638 516q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1l409 723q8 16 0 28q-7 12 -24 12h-187q-30 0 -49 -35z" />
362 <glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M0 640q0 96 1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150t-1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58 t-69.5 123q-14 65 -21.5 147.5t-8.5 136.5t-1 150zM640 320q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54t-30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640z" />
363 <glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M64 558l338 271l494 -305l-342 -285zM64 1099l490 319l342 -285l-494 -304zM407 166v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284l147 96v-108l-490 -293v-1l-1 1l-1 -1v1zM896 524l494 305l338 -271l-489 -319zM896 1133l343 285l489 -319l-338 -270z" />
364 <glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M0 -255v736h121v-618h928v618h120v-701l-1 -35v-1h-1132l-35 1h-1zM221 -17v151l707 1v-151zM227 243l14 150l704 -65l-13 -150zM270 563l39 146l683 -183l-39 -146zM395 928l77 130l609 -360l-77 -130zM707 1303l125 86l398 -585l-124 -85zM1136 1510l149 26l121 -697 l-149 -26z" />
365 <glyph unicode="&#xf16d;" d="M0 69v1142q0 81 58 139t139 58h1142q81 0 139 -58t58 -139v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139zM171 110q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62 q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648zM461 643q0 -124 90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5t-90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5zM1050 1003q0 -29 20 -49t49 -20h174q29 0 49 20t20 49v165q0 28 -20 48.5 t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165z" />
366 <glyph unicode="&#xf16e;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM274 640q0 -88 62 -150t150 -62t150 62t62 150t-62 150t-150 62t-150 -62t-62 -150zM838 640q0 -88 62 -150 t150 -62t150 62t62 150t-62 150t-150 62t-150 -62t-62 -150z" />
367 <glyph unicode="&#xf170;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM309 384h94l104 160h522l104 -160h94l-459 691zM567 608l201 306l201 -306h-402z" />
368 <glyph unicode="&#xf171;" horiz-adv-x="1408" d="M0 1222q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34 t-6 39.5t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158zM173 285l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18t-76.5 27 t-73 43.5t-52 61.5q-25 96 -57 292zM243 1240q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5q-20 27 -56 44.5t-58 22t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43zM481 657q4 -91 77.5 -155t165.5 -56q91 8 152 84 t50 168q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5zM599 710q14 41 52 58q36 18 72.5 12t64 -35.5t27.5 -67.5q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82z" />
369 <glyph unicode="&#xf172;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM260 1060q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63 q24 13 39.5 23t31 29t19.5 40q48 267 80 473q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54zM385 384q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71q0 7 5.5 26.5t3 32 t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6zM436 1073q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5t-52.5 16t-54.5 32.5zM607 653q-2 49 25.5 93t72.5 64 q70 31 141.5 -10t81.5 -118q8 -66 -36 -121t-110 -61t-119 40t-56 113zM687.5 660.5q0.5 -52.5 43.5 -70.5q39 -23 81 4t36 72q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5z" />
370 <glyph unicode="&#xf173;" horiz-adv-x="1024" d="M78 779v217q91 30 155 84q64 55 103 132q39 78 54 196h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170z" />
371 <glyph unicode="&#xf174;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM413 744h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49v181 q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163z" />
372 <glyph unicode="&#xf175;" horiz-adv-x="768" d="M3 237q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19t-5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35z" />
373 <glyph unicode="&#xf176;" horiz-adv-x="768" d="M3 1043q-8 19 5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19z" />
374 <glyph unicode="&#xf177;" horiz-adv-x="1792" d="M64 637q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23z" />
375 <glyph unicode="&#xf178;" horiz-adv-x="1792" d="M0 544v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23z" />
376 <glyph unicode="&#xf179;" horiz-adv-x="1408" d="M0 634q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32 q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503zM683 1131q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17z" />
377 <glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M0 -27v557h682v-651zM0 614v565l682 94v-659h-682zM757 -131v661h907v-786zM757 614v669l907 125v-794h-907z" />
378 <glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M0 337v430q0 42 30 72t73 30q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30t-73 30t-30 73zM241 886q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20l-71 -131q107 -55 171 -153.5t64 -215.5 h-925zM245 184v666h918v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78zM455 1092q0 -16 11 -27.5t27 -11.5t27.5 11.5t11.5 27.5t-11.5 27.5 t-27.5 11.5t-27 -11.5t-11 -27.5zM876 1092q0 -16 11.5 -27.5t27.5 -11.5t27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5zM1203 337v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73z" />
379 <glyph unicode="&#xf17c;" d="M11 -115q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5 t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195q-12 112 -16 310q-2 90 24 151.5 t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5 t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13 t16.5 -9.5q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5 q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5zM321 495q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54 t7 -70.5q46 24 7 92q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5 t60 -22.5q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18zM372 630q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12zM603 1190q2 -5 5 -6 q10 0 7 -15q-3 -20 8 -20q3 0 3 3q3 17 -2.5 30t-11.5 15q-9 2 -9 -7zM634 1110q0 12 19 15h10q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5zM721 1122q24 11 32 -2q3 -6 -3 -9q-4 -1 -11.5 6.5t-17.5 4.5zM835 1196l4 -2q14 -4 18 -31q0 -3 8 2l2 3q0 11 -5 19.5t-11 12.5 t-9 3q-14 -1 -7 -7zM851 1381.5q-1 -2.5 3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9zM981 1002q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20q-2 8 -6.5 11.5t-13 5 t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5z" />
380 <glyph unicode="&#xf17d;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM112 640q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81t99.5 48l37 13 q4 1 13 3.5t13 4.5q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21zM126 775q302 0 606 80q-120 213 -244 378q-138 -65 -234 -186t-128 -272zM350 134q184 -150 418 -150q132 0 256 52q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5 t-103 -148zM609 1276q1 1 2 1q-1 0 -2 -1zM613 1277q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5l12.5 17.5q-185 164 -433 164q-76 0 -155 -19zM909 797q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5 t36.5 -6t25 -4.5l10 -2q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5zM1007 565q87 -239 128 -469q111 75 185 189.5t96 250.5q-210 60 -409 29z" />
381 <glyph unicode="&#xf17e;" d="M0 1024q0 159 112.5 271.5t271.5 112.5q130 0 234 -80q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225 t-55.5 273.5q0 73 16 150q-80 104 -80 234zM376 399q0 -92 122 -157.5t291 -65.5q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12 t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5 q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75z" />
382 <glyph unicode="&#xf180;" horiz-adv-x="1664" d="M0 640q0 75 53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41l619 619l2 -3q53 -53 53 -128t-53 -128l-587 -587 q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128zM302 660q0 21 14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36z" />
383 <glyph unicode="&#xf181;" d="M0 -64v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM160 192q0 -14 9 -23t23 -9h480q14 0 23 9t9 23v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024zM832 576q0 -14 9 -23t23 -9h480q14 0 23 9t9 23 v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640z" />
384 <glyph unicode="&#xf182;" horiz-adv-x="1280" d="M0 480q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192 q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43q-40 0 -68 28t-28 68zM416 1280q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5z" />
385 <glyph unicode="&#xf183;" horiz-adv-x="1024" d="M0 416v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68z M288 1280q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5z" />
386 <glyph unicode="&#xf184;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM399.5 766q8.5 -37 24.5 -59l349 -473l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5 t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85z" />
387 <glyph unicode="&#xf185;" horiz-adv-x="1792" d="M44 363q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29q-4 -15 -20 -20 l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20zM320 640q0 -117 45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5 t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5z" />
388 <glyph unicode="&#xf186;" d="M0 640q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384z" />
389 <glyph unicode="&#xf187;" horiz-adv-x="1792" d="M64 1088v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1536q-26 0 -45 19t-19 45zM128 -64v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45zM704 704q0 -26 19 -45t45 -19h256 q26 0 45 19t19 45t-19 45t-45 19h-256q-26 0 -45 -19t-19 -45z" />
390 <glyph unicode="&#xf188;" horiz-adv-x="1664" d="M32 576q0 26 19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19t19 -45t-19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19 t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45z M512 1152q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5h-640z" />
391 <glyph unicode="&#xf189;" horiz-adv-x="1920" d="M-1 1004q0 11 3 16l4 6q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24 q17 19 38 30q53 26 239 24q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5 t13 3t20 0.5l288 2q39 5 64 -2.5t31 -16.5l6 -10q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12 q-30 21 -70 64t-68.5 77.5t-61 58t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211 t-130.5 272q-6 16 -6 27z" />
392 <glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M0 391q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5q0 -68 -37 -139.5 t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5zM181 320q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5zM413.5 230.5 q-40.5 92.5 6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5q-45 -102 -158 -150t-224 -12q-107 34 -147.5 126.5zM495 257.5q9 -34.5 43 -50.5t74.5 -2.5t62.5 47.5q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5zM705 399 q-17 -31 13 -45q14 -5 29 0.5t22 18.5q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5zM1165 1274q-6 28 9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158 q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5zM1224 1047q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5t54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37z" />
393 <glyph unicode="&#xf18b;" d="M0 638q0 187 83.5 349.5t229.5 269.5t325 137v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495zM398 -34q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211q-171 -94 -368 -94q-196 0 -367 94zM898 909v485q179 -30 325 -137t229.5 -269.5 t83.5 -349.5q0 -280 -181 -495q-204 99 -330.5 306.5t-126.5 459.5z" />
394 <glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M0 -211q0 19 13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23 t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89 t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283 q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32z" />
395 <glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M21 217v66h1238v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5zM21 354v255h1238v-255h-1238zM21 682v255h1238v-255h-1238zM21 1010v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5v-67h-1238z" />
396 <glyph unicode="&#xf18e;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM384 544v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23t-9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5z" />
397 <glyph unicode="&#xf190;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM384 640q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23z" />
398 <glyph unicode="&#xf191;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 160q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5v960q0 13 -9.5 22.5t-22.5 9.5h-960 q-13 0 -22.5 -9.5t-9.5 -22.5v-960zM448 640q0 33 27 52l448 320q17 12 37 12q26 0 45 -19t19 -45v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52z" />
399 <glyph unicode="&#xf192;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM224 640q0 -148 73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73 t-198 -198t-73 -273zM512 640q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
400 <glyph unicode="&#xf193;" horiz-adv-x="1664" d="M0 320q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5zM416 1348q-2 16 6 42 q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455l198 99l58 -114l-256 -128q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5z" />
401 <glyph unicode="&#xf194;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 806q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5 q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237q104 139 172.5 292.5t82.5 226.5q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143 q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7z" />
402 <glyph unicode="&#xf195;" horiz-adv-x="1152" d="M0 608v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31 l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26z" />
403 <glyph unicode="&#xf196;" horiz-adv-x="1408" d="M0 288v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5zM128 288q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47 t-47 -113v-832zM256 672v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23z" />
404 <glyph unicode="&#xf197;" horiz-adv-x="2176" d="M0 576q0 12 38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113q-110 -64 -268 -64h-128v64 h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5zM323 336h29q157 0 273 64h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96zM323 816l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5 t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64h-29zM1739 484l81 -30q68 48 68 122t-68 122l-81 -30q53 -36 53 -92t-53 -92z" />
405 <glyph unicode="&#xf198;" horiz-adv-x="1664" d="M0 796q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5 t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72 l-55 163l-153 -53q-29 -9 -50 -9q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5zM620 811l105 -313l310 105l-105 315z" />
406 <glyph unicode="&#xf199;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 352q0 -40 28 -68t68 -28h832q40 0 68 28t28 68v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99 q-98 -69 -164 -69t-164 69q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436zM256 928q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13 t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68z" />
407 <glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM41 640q0 -173 68 -331.5t182.5 -273t273 -182.5t331.5 -68t331.5 68t273 182.5t182.5 273t68 331.5 t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5zM127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM254 1062q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5 q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21t14.5 -24t14 -23q63 -107 63 -212q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15 t-1.5 -18.5t9 -16.5t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5zM679 -97l230 670l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1282 -24l235 678q59 169 59 276q0 42 -6 79 q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5z" />
408 <glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M0 455q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360l272 133v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5zM1134 860v172q277 -33 481 -157l140 79l37 -390l-525 114l147 83 q-119 70 -280 99z" />
409 <glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M0 -128q0 26 20.5 45t48.5 19h1782q28 0 48.5 -19t20.5 -45v-128h-1920v128zM0 1024v128l960 384l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128zM128 0v64q0 26 20.5 45t48.5 19h59v768h256v-768h128v768h256v-768h128v768h256 v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664z" />
410 <glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M0 1024q0 23 22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31t-22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433 q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31zM512 384l18 316l574 -181q22 -7 48 -7t48 7l574 181l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128z" />
411 <glyph unicode="&#xf19e;" d="M109 1536q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610l13 -707q-62 11 -105 11 q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287z" />
412 <glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M111 182q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5t-59.5 -93 t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131zM297 228q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13 t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5zM403 1222q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5 q53 56 53 159q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160z" />
413 <glyph unicode="&#xf1a1;" horiz-adv-x="1984" d="M0 722q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58 q94 0 160 -66t66 -160q0 -62 -31 -114t-83 -82q5 -33 5 -61q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 31 -77 81.5t-29 109.5zM77 722q0 -67 51 -111 q49 131 180 235q-36 25 -82 25q-62 0 -105.5 -43.5t-43.5 -105.5zM178 465q0 -101 59.5 -194t171.5 -166q116 -75 265.5 -115.5t313.5 -40.5t313.5 40.5t265.5 115.5q112 73 171.5 166t59.5 194t-59.5 193.5t-171.5 165.5q-116 75 -265.5 115.5t-313.5 40.5t-313.5 -40.5 t-265.5 -115.5q-112 -73 -171.5 -165.5t-59.5 -193.5zM555 572q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96zM661 209.5q0 16.5 11 27.5t27 11t27 -11q77 -77 265 -77h2q188 0 265 77q11 11 27 11t27 -11t11 -27.5t-11 -27.5 q-99 -99 -319 -99h-2q-220 0 -319 99q-11 11 -11 27.5zM1153 572q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96zM1555 1350q0 -45 32 -77t77 -32t77 32t32 77t-32 77t-77 32t-77 -32t-32 -77zM1672 843q131 -105 178 -238 q57 46 57 117q0 62 -43.5 105.5t-105.5 43.5q-49 0 -86 -28z" />
414 <glyph unicode="&#xf1a2;" d="M0 193v894q0 133 94 227t226 94h896q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227zM155 709q0 -37 19.5 -67.5t52.5 -45.5q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54 q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43 q-51 0 -87 -36.5t-36 -87.5zM493 613q0 37 26 63t63 26t63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64zM560 375q0 11 8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18z M882 613q0 37 26 63t63 26t63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64zM1143 1120q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21q-29 0 -50 21t-21 50z" />
415 <glyph unicode="&#xf1a3;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM320 502q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14 q19 0 32.5 -14t13.5 -33v-54l60 -28l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122zM806 500q0 -80 58 -137t139 -57t138.5 57t57.5 139v122h-150v-126q0 -20 -13.5 -33.5t-33.5 -13.5 q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123z" />
416 <glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M0 336v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58l-131 61v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5zM1062 332 v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275h328v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5z" />
417 <glyph unicode="&#xf1a5;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM64 640h704v-704h480q93 0 158.5 65.5t65.5 158.5v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480z " />
418 <glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M0 271v697h328v286h204v-983h-532zM205 435h123v369h-123v-369zM614 271h205v697h-205v-697zM614 1050h205v204h-205v-204zM901 26v163h328v82h-328v697h533v-942h-533zM1106 435h123v369h-123v-369zM1516 26v163h327v82h-327v697h532v-942h-532zM1720 435h123v369h-123 v-369z" />
419 <glyph unicode="&#xf1a7;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM293 388l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229t-88.5 229t-213.5 95q-74 0 -141 -36h-186v-840z M504 804v277q28 17 70 17q53 0 91 -45t38 -109t-38 -109.5t-91 -45.5q-43 0 -70 15zM636 -39l211 41v206q51 -19 117 -19q125 0 213 95t88 229t-88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101v-636zM847 377v277q28 17 70 17q53 0 91 -45.5t38 -109.5 t-38 -109t-91 -45q-43 0 -70 15z" />
420 <glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M41 455q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80 t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5l1 -21q75 3 143.5 -20.5 t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14q6 -5 28 -23.5t25.5 -22t19 -18 t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63 t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27zM764 676q10 1 32.5 7t34.5 6q19 0 35 -10l-96 -20zM822 568l48 12l109 -177l-73 -48zM859 884q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1 v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5 t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43zM1061 45h31l10 -83l-41 -12v95zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM1116 29 q21 2 60.5 8.5t72 10t60.5 3.5h14q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13t-54 -9.5t-53.5 -7.5t-32 -4.5zM1947 1528l1 3l2 4l-1 -5zM1950 1535v1v-1zM1950 1535l1 1z" />
421 <glyph unicode="&#xf1a9;" d="M0 520q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5 t19.5 -177.5q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302zM333 256q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5zM685.5 -76q-0.5 -10 7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5 q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16zM852 31q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5 t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10q-29 -12 -78 -56q-26 -24 -12 -44z" />
422 <glyph unicode="&#xf1aa;" d="M0 78q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160l151 -152l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5 t-60 145.5zM2 1202q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5t149.5 -87.5l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5 q-70 15 -115 71t-45 129zM446 803l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126t135.5 51q85 0 145 -60.5t60 -145.5q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152 l-160 -160zM776 793l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5q76 -11 126.5 -68.5t50.5 -134.5q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30 l-152 152z" />
423 <glyph unicode="&#xf1ab;" d="M0 -16v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5q20 0 20 -21v-418l147 -47v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3zM39 15l694 232v1032l-694 -233v-1031zM147 293q6 4 82 92 q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8 t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110 q-4 -2 -19.5 -4t-18.5 0zM268 933l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41zM310 -116q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11q73 -37 159.5 -61.5t157.5 -24.5 q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5l-43 73l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16zM777 1294l573 -184v380zM885 453l102 -31l45 110l211 -65l37 -135l102 -31l-181 657l-100 31z M1071 630l76 185l63 -227z" />
424 <glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M0 -96v1088q0 66 47 113t113 47h128q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113zM512 -96v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-163q58 -34 93 -93t35 -128v-768q0 -106 -75 -181 t-181 -75h-864q-66 0 -113 47t-47 113zM640 896h896v256h-160q-40 0 -68 28t-28 68v160h-640v-512zM736 0q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM736 256q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9 h-128q-14 0 -23 -9t-9 -23v-128zM736 512q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM992 0q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM992 256q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM992 512q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM1248 0q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23 v-128zM1248 256q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128zM1248 512q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128z" />
425 <glyph unicode="&#xf1ad;" d="M0 -192v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45zM256 160q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 416q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 672q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 928q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM256 1184q0 -14 9 -23 t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM512 96v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23zM512 416q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64zM512 672q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM512 928q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM512 1184q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM768 416q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM768 672q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM768 928q0 -14 9 -23 t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM768 1184q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM1024 160q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64zM1024 416q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM1024 672q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM1024 928q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64zM1024 1184q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64z" />
426 <glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M64 1056q0 40 28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68zM416 1152q0 93 65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5t-65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5z" />
427 <glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M0 724q0 80 42 139.5t119 59.5q76 0 141.5 -55.5t100.5 -134t35 -152.5q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152zM256 19q0 86 56 191.5t139.5 192.5t187.5 146t193 59q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45 t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146zM333 1163q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151zM884 1064 q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5q-61 0 -105 39t-63 92.5t-19 113.5zM1226 581q0 74 35 152.5t100.5 134t141.5 55.5q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5 q-77 0 -119 59t-42 139z" />
428 <glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M64 1008q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5z" />
429 <glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M0 256v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65zM134 1026l698 -254l698 254l-698 254zM896 -93l640 349v636l-640 -233v-752z" />
430 <glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M0 96v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70v-400l434 -186q36 -16 57 -48t21 -70v-416q0 -36 -19 -67t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4 l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67zM172 531l404 -173l404 173l-404 173zM640 -96l384 192v314l-384 -164v-342zM647 1219l441 -189l441 189l-441 189zM1152 651l384 165v266l-384 -164v-267zM1196 531l404 -173l404 173l-404 173zM1664 -96 l384 192v314l-384 -164v-342z" />
431 <glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M0 22v1260h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5 t45.5 113.5q0 144 -190 144h-260v-294zM1137 477q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658q0 -111 57.5 -171.5t166.5 -60.5q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347zM1337 1073h511v124 h-511v-124zM1388 576h408q-18 195 -200 195q-90 0 -146 -52.5t-62 -142.5z" />
432 <glyph unicode="&#xf1b5;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 254h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5t-56.5 60.5t-79 29.5 t-97 8.5h-371v-787zM301 388v217h189q124 0 124 -113q0 -104 -128 -104h-185zM301 723v184h163q119 0 119 -90q0 -94 -106 -94h-176zM838 538q0 -135 79 -217t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20q-68 0 -104 38t-36 107h411q1 10 1 30 q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216zM964 911v77h319v-77h-319zM996 600q4 56 39 89t91 33q113 0 124 -122h-254z" />
433 <glyph unicode="&#xf1b6;" horiz-adv-x="2048" d="M0 764q0 86 61 146.5t146 60.5q73 0 130 -46t73 -117l783 -315q49 29 106 29q14 0 21 -1l173 248q1 114 82 194.5t195 80.5q115 0 196.5 -81t81.5 -196t-81.5 -196.5t-196.5 -81.5l-265 -194q-8 -80 -67.5 -133.5t-138.5 -53.5q-73 0 -130 46t-73 117l-783 315 q-51 -30 -106 -30q-85 0 -146 61t-61 147zM55 764q0 -64 44.5 -108.5t107.5 -44.5q11 0 33 4l-64 26q-33 14 -52.5 44.5t-19.5 66.5q0 50 35.5 85.5t85.5 35.5q20 0 41 -8v1l76 -31q-20 37 -56.5 59t-78.5 22q-63 0 -107.5 -44.5t-44.5 -107.5zM1164 244q19 -37 55.5 -59 t79.5 -22q63 0 107.5 44.5t44.5 107.5t-44.5 108t-107.5 45q-13 0 -33 -4q2 -1 20 -8t21.5 -8.5t18.5 -8.5t19 -10t16 -11t15.5 -13.5t11 -14.5t10 -18t5 -21t2.5 -25q0 -50 -35.5 -85.5t-85.5 -35.5q-14 0 -31.5 4.5t-29 9t-31.5 13.5t-28 12zM1584 767q0 -77 54.5 -131.5 t131.5 -54.5t132 54.5t55 131.5t-55 131.5t-132 54.5q-76 0 -131 -54.5t-55 -131.5zM1623 767q0 62 43.5 105.5t104.5 43.5t105 -44t44 -105t-43.5 -104.5t-105.5 -43.5q-61 0 -104.5 43.5t-43.5 104.5z" />
434 <glyph unicode="&#xf1b7;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM128 693q0 -53 38 -91t92 -38q36 0 66 18l489 -197q10 -44 45.5 -73t81.5 -29q50 0 86.5 34t41.5 83l167 122 q71 0 122 50.5t51 122.5t-51 123t-122 51q-72 0 -122.5 -50.5t-51.5 -121.5l-108 -155q-2 0 -6.5 0.5t-6.5 0.5q-35 0 -67 -19l-489 197q-10 44 -45.5 73t-80.5 29q-54 0 -92 -38t-38 -92zM162 693q0 40 28 68t68 28q27 0 49.5 -14t34.5 -37l-48 19q-29 11 -56.5 -2 t-38.5 -41q-12 -29 -0.5 -57t39.5 -40v-1l40 -16q-14 -2 -20 -2q-40 0 -68 27.5t-28 67.5zM855 369q5 -2 47 -19q29 -12 58 0.5t41 41.5q11 29 -1 57.5t-41 40.5l-40 16q14 2 21 2q39 0 67 -27.5t28 -67.5t-28 -67.5t-67 -27.5q-59 0 -85 51zM1118 695q0 48 34 82t83 34 q48 0 82 -34t34 -82t-34 -82t-82 -34q-49 0 -83 34t-34 82zM1142 696q0 -39 27.5 -66t65.5 -27t65.5 27t27.5 66q0 38 -27.5 65.5t-65.5 27.5t-65.5 -27.5t-27.5 -65.5z" />
435 <glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M16 970l433 -17l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188zM270.5 158q-3.5 28 4 65t12 55t21.5 64t19 53q78 -12 509 -28l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5 q-11 27 -14.5 55zM294 1124l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5t36 -39.5t32 -35q-47 -63 -265 -435l-317 187zM782 1524l405 -1q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190l142 83l-220 -373l-419 20l151 86q-34 89 -75 166 t-75.5 123.5t-64.5 80t-47 46.5zM953 197l211 362l7 -173q170 -16 283 -5t170 33l56 22l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164zM1218 847l313 195l19 11l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22 t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436z" />
436 <glyph unicode="&#xf1b9;" horiz-adv-x="1984" d="M0 160v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h704q98 0 179 -63.5t104 -157.5l105 -419h28q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-128v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-928v-128q0 -80 -56 -136 t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23zM160 448q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113zM516 768h952l-89 357q-2 8 -14 17.5t-21 9.5h-704q-9 0 -21 -9.5t-14 -17.5zM1472 448q0 -66 47 -113t113 -47t113 47t47 113 t-47 113t-113 47t-113 -47t-47 -113z" />
437 <glyph unicode="&#xf1ba;" horiz-adv-x="1984" d="M0 32v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h64q98 0 179 -63.5t104 -157.5l105 -419h28q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-128v-64q0 -80 -56 -136t-136 -56 t-136 56t-56 136v64h-928v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23zM160 320q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113zM516 640h952l-89 357q-2 8 -14 17.5t-21 9.5h-704q-9 0 -21 -9.5t-14 -17.5zM1472 320 q0 -66 47 -113t113 -47t113 47t47 113t-47 113t-113 47t-113 -47t-47 -113z" />
438 <glyph unicode="&#xf1bb;" d="M32 64q0 26 19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45t-19 -45t-45 -19 h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45z" />
439 <glyph unicode="&#xf1bc;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM237 886q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37q159 0 309.5 -34t253.5 -95q21 -12 40 -12 q29 0 50.5 20.5t21.5 51.5q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5zM289 637q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5q0 40 -35 61 q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64zM321 406q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52z" />
440 <glyph unicode="&#xf1bd;" d="M0 11v1258q0 58 40.5 98.5t98.5 40.5h1258q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5zM71 11q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258z M121 11v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 12.5zM121 709v560q0 7 5.5 12.5 t12.5 5.5h1258q7 0 12.5 -5.5t5.5 -12.5v-428q-85 30 -188 52q-294 64 -645 12l-18 -3l-65 134h-233l85 -190q-132 -51 -230 -137zM246 413q-24 203 166 305l129 -270l-255 -61q-14 -3 -26 4.5t-14 21.5z" />
441 <glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M0 405l17 128q2 9 9 9t9 -9l20 -128l-20 -126q-2 -9 -9 -9t-9 9zM79 405l23 207q0 9 9 9q8 0 10 -9l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10zM169 405l21 245q2 12 12 12q11 0 11 -12l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11zM259 405l21 252q0 13 13 13 q12 0 14 -13l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13zM350 405l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5zM401 159zM442 405l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5l21 -380l-21 -246q0 -7 -5 -12.5 t-12 -5.5q-16 0 -18 18zM534 403l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19zM628 405l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5l18 -506l-18 -242q-2 -21 -22 -21q-19 0 -21 21zM723 405l14 -241 q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17zM784 164zM817 405l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18zM913 404l12 492q1 12 9 20t19 8t18.5 -8 t8.5 -20l14 -492l-14 -236q0 -11 -8 -19t-19 -8t-19 8t-9 19zM1010 405q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11q11 0 20 9q9 7 9 20l1 24l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6zM1079 169zM1103 404l12 636v3q2 15 12 24q9 7 20 7 q8 0 15 -5q14 -8 16 -26l14 -639l-14 -231q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114zM1204 174v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22z" />
442 <glyph unicode="&#xf1c0;" d="M0 0v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 384v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 768 v170q119 -84 325 -127t443 -43t443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128zM0 1152v128q0 69 103 128t280 93.5t385 34.5t385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128z" />
443 <glyph unicode="&#xf1c1;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM257 60q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4 q52 85 107 197q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38 q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83z M714 842q1 7 7 44q0 3 7 43q1 4 4 8q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2q-15 -42 -2 -132zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1098 353q76 -28 124 -28q14 0 18 1q0 1 -2 3q-24 24 -140 24z" />
444 <glyph unicode="&#xf1c2;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM233 661h70l164 -661h159l128 485q7 20 10 46q2 16 2 24 h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300v-107zM1024 1024h376 q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
445 <glyph unicode="&#xf1c3;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM429 0h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4 h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107h-290v-107h68l189 -272l-194 -283h-68v-106zM1024 1024h376 q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
446 <glyph unicode="&#xf1c4;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM416 0h327v106h-93v167h137q76 0 118 15q67 23 106.5 87 t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92v-106zM650 386v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15h-119zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
447 <glyph unicode="&#xf1c5;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 0v192l192 192l128 -128l384 384l320 -320v-320 h-1024zM256 704q0 80 56 136t136 56t136 -56t56 -136t-56 -136t-136 -56t-136 56t-56 136zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
448 <glyph unicode="&#xf1c6;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536zM384 192q0 25 8 52q21 63 120 396 v128h128v-128h79q22 0 39 -13t23 -34l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5zM512 192q0 -26 37.5 -45t90.5 -19t90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45zM512 896h128v128h-128v-128zM512 1152h128v128h-128v-128 zM640 768h128v128h-128v-128zM640 1024h128v128h-128v-128zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
449 <glyph unicode="&#xf1c7;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 288v192q0 14 9 23t23 9h131l166 167q16 15 35 7 q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23zM762 206.5q1 -26.5 20 -44.5q20 -17 44 -17q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5z M973.5 54.5q2.5 -26.5 23.5 -42.5q18 -15 40 -15q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
450 <glyph unicode="&#xf1c8;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM256 256v384q0 52 38 90t90 38h384q52 0 90 -38t38 -90 v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90zM960 403v90l265 266q9 9 23 9q4 0 12 -2q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
451 <glyph unicode="&#xf1c9;" d="M0 -160v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68zM128 -128h1280v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536zM254 429q-14 19 0 38l226 301q8 11 21 12.5t24 -6.5 l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5zM636 43l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5l-63 10q-13 2 -20.5 13t-5.5 24zM947.5 181 q-1.5 13 6.5 24l182 243l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5l226 -301q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21zM1024 1024h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376z" />
452 <glyph unicode="&#xf1ca;" d="M39 1286h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132 t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390z" />
453 <glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M0 367v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64v-546q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64zM154 511l193 129l-193 129v-258zM216 367l603 -402v359l-334 223zM216 913l269 -180l334 223v359zM624 640 l272 -182l272 182l-272 182zM973 -35l603 402l-269 180l-334 -223v-359zM973 956l334 -223l269 180l-603 402v-359zM1445 640l193 -129v258z" />
454 <glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M0 407q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5 h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55t121.5 -21 q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z " />
455 <glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM128 640q0 -190 90 -361l194 194q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361zM512 640 q0 -159 112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5zM535 -38q171 -90 361 -90t361 90l-194 194q-82 -28 -167 -28t-167 28zM535 1318l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90t-361 -90z M1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
456 <glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M0 640q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5 q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348z" />
457 <glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
458 <glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M0 640q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348zM44 640q0 -173 67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331 t-67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331zM87 640q0 205 98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385zM206 217l58 34q29 -49 73 -99 l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13v-66q-208 6 -385 109.5t-283 275.5zM207 1063q106 172 282 275.5t385 109.5v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98zM415 805q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10 t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162q-67 77 -98 169l232 80q-14 42 -14 85t14 85zM918 -102 q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99l58 -34q-106 -172 -283 -275.5t-385 -109.5v66zM918 1382v66q209 -6 385 -109.5t282 -275.5l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13zM1516 428q36 103 36 212q0 112 -35 212l82 28 q-19 56 -49 112l57 33q98 -180 98 -385t-98 -385l-57 33q27 52 49 112z" />
459 <glyph unicode="&#xf1d2;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 218q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5 t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85q0 -53 41 -77v-3q-113 -37 -113 -139zM382 225q0 64 98 64q102 0 102 -61q0 -66 -93 -66 q-107 0 -107 63zM395 693q0 90 77 90q36 0 55 -25.5t19 -63.5q0 -85 -74 -85q-77 0 -77 84zM755 1072q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392q0 -50 -3 -75z M966 771q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117z" />
460 <glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M68 7q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47q98 0 218 47v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58q0 -31 22.5 -51.5t58 -32 t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5zM272 18q0 -101 172 -101q151 0 151 105q0 100 -165 100q-158 0 -158 -104zM293 775q0 -135 124 -135q119 0 119 137q0 61 -30 102t-89 41 q-124 0 -124 -145zM875 1389q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5t-39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5zM901 220q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134h-222zM1217 901v190h96v76q0 54 -6 89h227q-6 -41 -6 -165 h171v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6z" />
461 <glyph unicode="&#xf1d4;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM368 1135l323 -589v-435h134v436l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3 q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150z" />
462 <glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M57 953q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5t-78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153 t-153 102t-186 38t-186 -38t-153 -102t-102 -153t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265zM113.5 38.5q10.5 121.5 29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5t136.5 -56.5 t56.5 -136.5t-57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5z" />
463 <glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M18 264q0 275 252 466q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5 t3.5 -5t2 -3.5q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9 t-98 20t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20 q-18 -41 -54.5 -74.5t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100z" />
464 <glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M0 858q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490z M380 1075q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5t-25 66t-66 25q-43 0 -76 -25.5t-33 -65.5zM816 404q0 143 81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109q-150 -37 -218 -37 q-169 0 -311 70.5t-223.5 191.5t-81.5 264zM888 1075q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5t-24.5 66t-65.5 25q-43 0 -76 -25.5t-33 -65.5zM1160 568q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5 t-22.5 -49.5zM1559 568q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5z" />
465 <glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M0 508q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55z" />
466 <glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M0 508q-3 39 32 59l1664 960q35 21 68 -2q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55zM209 522l336 -137l863 639l-478 -797l492 -201 l221 1323z" />
467 <glyph unicode="&#xf1da;" d="M0 832v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298t-61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12 q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45zM512 480v64q0 14 9 23t23 9h224v352 q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23z" />
468 <glyph unicode="&#xf1db;" d="M0 640q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM128 640q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5z" />
469 <glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M62 1338q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5 t45 -15t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18 q-15 10 -45 12t-53 2t-41 14t-18 45z" />
470 <glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M24 926q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108 q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179q-64 117 -64 259z" />
471 <glyph unicode="&#xf1de;" d="M0 736v64q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-64q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM128 -96v672h256v-672q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM128 960v416q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-416h-256zM512 224v64q0 40 28 68 t68 28h320q40 0 68 -28t28 -68v-64q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM640 64h256v-160q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v160zM640 448v928q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-928h-256zM1024 992v64q0 40 28 68t68 28h320q40 0 68 -28 t28 -68v-64q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68zM1152 -96v928h256v-928q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23zM1152 1216v160q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-160h-256z" />
472 <glyph unicode="&#xf1e0;" d="M0 640q0 133 93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86q133 0 226.5 -93.5t93.5 -226.5 t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5z" />
473 <glyph unicode="&#xf1e1;" d="M0 160v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5zM256 640q0 -88 62.5 -150.5t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5 t150.5 62.5t62.5 150.5t-62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5z" />
474 <glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M0 448q0 143 55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68l243 244l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5 t-225 150t-150 225t-55.5 273.5zM170 615q10 -24 35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49t-34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49zM1376 1472q0 13 9 23q10 9 23 9t23 -9l90 -91q10 -9 10 -22.5t-10 -22.5 q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23zM1536 1408v96q0 14 9 23t23 9t23 -9t9 -23v-96q0 -14 -9 -23t-23 -9t-23 9t-9 23zM1605 1242.5q0 13.5 10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5z M1605 1381.5q0 13.5 10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5zM1632 1312q0 14 9 23t23 9h96q14 0 23 -9t9 -23t-9 -23t-23 -9h-96q-14 0 -23 9t-9 23z" />
475 <glyph unicode="&#xf1e3;" horiz-adv-x="1792" />
476 <glyph unicode="&#xf1e4;" horiz-adv-x="1792" />
477 <glyph unicode="&#xf1e5;" horiz-adv-x="1792" />
478 <glyph unicode="&#xf1e6;" horiz-adv-x="1792" />
479 <glyph unicode="&#xf1e7;" horiz-adv-x="1792" />
480 <glyph unicode="&#xf1e8;" horiz-adv-x="1792" />
481 <glyph unicode="&#xf1e9;" horiz-adv-x="1792" />
482 <glyph unicode="&#xf1ea;" horiz-adv-x="1792" />
483 <glyph unicode="&#xf1eb;" horiz-adv-x="1792" />
484 <glyph unicode="&#xf1ec;" horiz-adv-x="1792" />
485 <glyph unicode="&#xf1ed;" horiz-adv-x="1792" />
486 <glyph unicode="&#xf1ee;" horiz-adv-x="1792" />
487 <glyph unicode="&#xf500;" horiz-adv-x="1792" />
488 <glyph horiz-adv-x="1792" />
489 <glyph horiz-adv-x="1792" />
490 <glyph horiz-adv-x="1792" />
491 <glyph horiz-adv-x="1792" />
492 <glyph horiz-adv-x="1792" />
493 <glyph horiz-adv-x="1792" />
494 <glyph horiz-adv-x="1792" />
495 <glyph horiz-adv-x="1792" />
496 <glyph horiz-adv-x="1792" />
497 <glyph horiz-adv-x="1792" />
498 <glyph horiz-adv-x="1792" />
499 <glyph horiz-adv-x="1792" />
500 <glyph horiz-adv-x="1792" />
501 <glyph horiz-adv-x="1792" />
502 </font>
503 </defs></svg>
docs/_themes/lucuma/static/fonts/fontawesome-webfont.ttf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/fontawesome-webfont.woff less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-light-webfont.eot less more
Binary diff not shown
+0
-570
docs/_themes/lucuma/static/fonts/proximanova-light-webfont.svg less more
0 <?xml version="1.0" standalone="no"?>
1 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
2 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
3 <metadata></metadata>
4 <defs>
5 <font id="proxima_novalight" horiz-adv-x="1169" >
6 <font-face units-per-em="2048" ascent="1618" descent="-430" />
7 <missing-glyph horiz-adv-x="530" />
8 <glyph unicode="&#xfb01;" horiz-adv-x="978" d="M37 895v94h164v90q0 145 72 226t196 81q82 0 133 -30l-33 -88q-39 22 -90 22q-84 0 -127 -55t-43 -156v-90h201v-94h-201v-895h-108v895h-164zM680 1227q0 33 24.5 56.5t57.5 23.5q34 0 58 -23t24 -57t-24 -58t-58 -24q-33 0 -57.5 24.5t-24.5 57.5zM709 0v989h106v-989 h-106z" />
9 <glyph unicode="&#xfb02;" horiz-adv-x="978" d="M37 895v94h164v90q0 145 72 226t196 81q82 0 133 -30l-33 -88q-39 22 -90 22q-84 0 -127 -55t-43 -156v-90h201v-94h-201v-895h-108v895h-164zM709 0v1366h106v-1366h-106z" />
10 <glyph unicode="&#xfb03;" horiz-adv-x="1521" d="M37 895v94h164v90q0 144 71.5 225.5t196.5 81.5q56 0 99.5 -15t88.5 -54l-51 -78q-54 51 -127 51q-84 0 -127 -55t-43 -156v-90h201v-94h-201v-895h-108v895h-164zM580 895v94h163v90q0 145 72.5 226t196.5 81q82 0 133 -30l-33 -88q-39 22 -90 22q-84 0 -127 -55 t-43 -156v-90h201v-94h-201v-895h-109v895h-163zM1223 1227q0 33 24.5 56.5t57.5 23.5q34 0 57.5 -23t23.5 -57t-23.5 -58t-57.5 -24q-33 0 -57.5 24.5t-24.5 57.5zM1251 0v989h107v-989h-107z" />
11 <glyph unicode="&#xfb04;" horiz-adv-x="1521" d="M37 895v94h164v90q0 144 71.5 225.5t196.5 81.5q56 0 99.5 -15t88.5 -54l-51 -78q-54 51 -127 51q-84 0 -127 -55t-43 -156v-90h201v-94h-201v-895h-108v895h-164zM580 895v94h163v90q0 145 72.5 226t196.5 81q82 0 133 -30l-33 -88q-39 22 -90 22q-84 0 -127 -55 t-43 -156v-90h201v-94h-201v-895h-109v895h-163zM1251 0v1366h107v-1366h-107z" />
12 <glyph horiz-adv-x="0" />
13 <glyph horiz-adv-x="682" />
14 <glyph unicode=" " horiz-adv-x="530" />
15 <glyph unicode="&#x09;" horiz-adv-x="530" />
16 <glyph unicode="&#xa0;" horiz-adv-x="530" />
17 <glyph unicode="!" horiz-adv-x="448" d="M135 72q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5zM156 1366h137l-27 -1010h-84z" />
18 <glyph unicode="&#x22;" horiz-adv-x="649" d="M119 1313q0 31 21 52t53 21q31 0 52 -21t21 -52l-43 -439h-61q-43 412 -43 439zM383 1313q0 31 21.5 52t52.5 21q32 0 52.5 -21t20.5 -52l-43 -439h-61q-43 412 -43 439z" />
19 <glyph unicode="#" horiz-adv-x="1185" d="M49 381l27 84h229l146 436h-232l25 84h235l125 381h96l-125 -381h240l125 381h98l-129 -381h228l-23 -84h-231l-148 -436h238l-27 -84h-237l-127 -381h-99l131 381h-241l-129 -381h-97l129 381h-227zM401 465h238l147 436h-239z" />
20 <glyph unicode="$" horiz-adv-x="1196" d="M98 193l76 88q158 -181 385 -197v573q-55 16 -89.5 26.5t-84 29.5t-80 37t-65 46t-54 59.5t-32.5 74.5t-13 94q0 156 119.5 255t298.5 107v187h94v-187q250 -20 400 -190l-78 -86q-122 146 -322 168v-516q53 -15 91 -27t86 -32t81.5 -41t68 -51.5t55.5 -65t34.5 -81.5 t13.5 -102q0 -53 -13 -103t-45 -99.5t-80 -87t-123 -63.5t-169 -32v-182h-94v182q-149 7 -266.5 64.5t-194.5 151.5zM264 1030q0 -42 16 -76t41 -58t66 -45t79.5 -34.5t92.5 -28.5v492q-128 -6 -211.5 -76t-83.5 -174zM653 84q84 6 147 33.5t96.5 67.5t49 82t15.5 87 q0 60 -23.5 105.5t-70 77.5t-95 52.5t-119.5 41.5v-547z" />
21 <glyph unicode="%" horiz-adv-x="1474" d="M70 1049q0 146 89.5 241.5t229.5 95.5q142 0 232 -95.5t90 -241.5q0 -144 -90.5 -239t-231.5 -95q-140 0 -229.5 95t-89.5 239zM164 1049q0 -105 63.5 -179.5t161.5 -74.5q99 0 163 74.5t64 179.5q0 109 -63.5 183.5t-163.5 74.5q-98 0 -161.5 -74.5t-63.5 -183.5zM262 0 l873 1366h94l-875 -1366h-92zM764 309q0 146 90.5 242t230.5 96t231 -96t91 -242q0 -143 -91 -238.5t-231 -95.5t-230.5 95.5t-90.5 238.5zM858 309q0 -106 64 -180t163 -74t162.5 73.5t63.5 180.5q0 108 -63.5 183t-162.5 75t-163 -75t-64 -183z" />
22 <glyph unicode="&#x26;" horiz-adv-x="1308" d="M86 348q0 78 24 142.5t70 114t94.5 84.5t116.5 73q-112 175 -112 313q0 134 94.5 222.5t230.5 88.5q129 0 208 -68t79 -190q0 -33 -7 -64.5t-16.5 -56.5t-30 -51t-35.5 -44t-46 -41.5t-48 -35.5t-56 -34.5t-55.5 -31.5t-59.5 -32q58 -82 176 -215q90 -103 182 -198 q100 149 156 331l98 -41q-95 -240 -180 -364q124 -124 264 -250h-160q-78 68 -174 164q-167 -189 -401 -189q-177 0 -294.5 98t-117.5 275zM205 354q0 -133 87.5 -208.5t213.5 -75.5q178 0 323 166q-150 153 -202 219q-121 139 -185 231q-54 -32 -93 -62.5t-73.5 -71 t-52.5 -90t-18 -108.5zM393 1073q0 -110 94 -260q61 32 92.5 50t77.5 50t69 59.5t40.5 67t17.5 84.5q0 82 -50 127t-128 45q-89 0 -151 -63t-62 -160z" />
23 <glyph unicode="'" horiz-adv-x="382" d="M119 1313q0 31 21 52t53 21q31 0 52 -21t21 -52l-43 -439h-61q-43 412 -43 439z" />
24 <glyph unicode="(" horiz-adv-x="464" d="M92 498q0 489 275 905l63 -45q-109 -223 -163 -417.5t-54 -442.5q0 -247 54 -442t163 -414l-63 -50q-275 416 -275 906z" />
25 <glyph unicode=")" horiz-adv-x="464" d="M35 -358l63 -50q275 416 275 906q0 489 -275 905l-63 -45q109 -223 163 -417.5t54 -442.5q0 -247 -54 -442t-163 -414z" />
26 <glyph unicode="*" horiz-adv-x="686" d="M76 993l213 109l-213 108l39 68l200 -131l-10 239h76l-12 -239l202 131l39 -68l-215 -108l215 -109l-39 -67l-202 131l12 -240h-76l10 240l-200 -131z" />
27 <glyph unicode="+" horiz-adv-x="1015" d="M59 647v86h404v432h92v-432h401v-86h-401v-444h-92v444h-404z" />
28 <glyph unicode="," horiz-adv-x="448" d="M119 -201q49 33 82.5 87t36.5 102q-15 -2 -21 -2q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -95.5q0 -83 -42.5 -159.5t-105.5 -119.5z" />
29 <glyph unicode="-" horiz-adv-x="614" d="M61 446v99h492v-99h-492z" />
30 <glyph unicode="." horiz-adv-x="448" d="M133 72q0 35 27.5 61.5t64.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-64.5 26.5t-27.5 63.5z" />
31 <glyph unicode="/" horiz-adv-x="577" d="M0 -41l485 1448h93l-486 -1448h-92z" />
32 <glyph unicode="0" horiz-adv-x="1245" d="M119 682q0 102 17 199t55.5 189.5t95.5 162t144 111.5t194 42q106 0 192 -42t143 -111.5t95.5 -162t55.5 -189.5t17 -199q0 -83 -12 -165t-37 -162t-66 -148t-95 -120.5t-129.5 -82t-163.5 -29.5q-107 0 -194 42.5t-144 112.5t-96 163.5t-55.5 190.5t-16.5 198zM242 682 q0 -88 11.5 -170.5t40 -162t71.5 -137.5t109.5 -94t150.5 -36q82 0 148.5 36t108.5 94t70.5 137.5t40 162t11.5 170.5q0 89 -11.5 171t-39.5 161t-70 137t-108.5 93.5t-149.5 35.5q-84 0 -150.5 -35.5t-109.5 -93.5t-71 -137t-40 -161t-12 -171z" />
33 <glyph unicode="1" horiz-adv-x="630" d="M53 1049l301 317h107v-1366h-117v1206l-219 -233z" />
34 <glyph unicode="2" horiz-adv-x="1191" d="M115 0v96q115 93 190.5 155.5t165.5 141t146 135t113.5 123.5t89 122t51.5 113.5t20 114.5q0 71 -27 126.5t-72.5 87.5t-99.5 48.5t-112 16.5q-123 0 -220 -48.5t-155 -129.5l-80 74q72 99 191.5 154.5t263.5 55.5q62 0 122 -14t116 -44.5t98.5 -74t68 -109t25.5 -143.5 q0 -63 -20 -128.5t-51.5 -124t-86 -126.5t-108 -124t-134.5 -128.5t-148 -128.5t-165 -135h719v-106h-901z" />
35 <glyph unicode="3" horiz-adv-x="1114" d="M66 203l79 69q60 -86 159 -138t224 -52q159 0 251.5 78t92.5 213q0 72 -28 126.5t-78.5 87t-115.5 48.5t-144 16q-87 0 -127 -4v111q20 -2 127 -2q95 0 171 26t125.5 86.5t49.5 147.5q0 123 -95 193.5t-233 70.5q-114 0 -201 -43t-165 -131l-74 74q77 94 190.5 150 t255.5 56q121 0 220 -41t160 -124t61 -195q0 -60 -19.5 -111.5t-50 -86t-70.5 -60.5t-77.5 -40.5t-75.5 -20.5q48 -5 99.5 -27.5t101 -62t81 -105t31.5 -145.5q0 -173 -123.5 -282.5t-337.5 -109.5q-158 0 -278.5 64t-185.5 164z" />
36 <glyph unicode="4" horiz-adv-x="1107" d="M72 373v104l606 889h158v-887h200v-106h-200v-373h-117v373h-647zM193 479h526v770z" />
37 <glyph unicode="5" horiz-adv-x="1191" d="M152 199l77 77q137 -194 383 -194q148 0 245 94.5t97 235.5q0 153 -95 243t-245 90q-186 0 -331 -133l-88 37v717h788v-106h-672v-535q56 55 141.5 91t184.5 36q87 0 165 -28.5t139 -82t96.5 -137.5t35.5 -188q0 -132 -63 -234t-167 -154.5t-231 -52.5q-304 0 -460 224z " />
38 <glyph unicode="6" horiz-adv-x="1196" d="M119 682q0 108 18 207.5t58.5 191t99.5 158.5t148 107t198 40q126 0 214 -45.5t155 -128.5l-68 -84q-57 74 -126.5 113t-174.5 39q-106 0 -186.5 -52t-126.5 -140t-68 -190.5t-22 -217.5q0 -44 2 -64q51 83 162 155.5t237 72.5q94 0 173 -27t139 -79.5t94 -136t34 -189.5 q0 -84 -31 -162.5t-87.5 -139.5t-145 -98t-194.5 -37q-133 0 -233 58t-157 159t-84.5 223.5t-27.5 266.5zM246 506q5 -59 19.5 -115.5t44 -113.5t70 -99.5t101.5 -69t135 -26.5q84 0 152 30.5t108.5 79t62.5 105t22 113.5q0 161 -94.5 245t-248.5 84q-111 0 -212 -64.5 t-160 -168.5z" />
39 <glyph unicode="7" horiz-adv-x="1028" d="M68 1260v106h895v-82l-584 -1284h-129l573 1260h-755z" />
40 <glyph unicode="8" d="M121 342q0 134 98.5 229t241.5 134q-64 17 -118.5 44.5t-100.5 67.5t-72.5 95.5t-26.5 121.5q0 70 25.5 129t68.5 99.5t100.5 69t120 41.5t128.5 13q65 0 127.5 -13t120 -41.5t100.5 -69t68.5 -99.5t25.5 -129q0 -66 -26 -121.5t-72 -95.5t-100.5 -67.5t-118.5 -44.5 q143 -39 241.5 -134t98.5 -229q0 -163 -132.5 -265t-332.5 -102q-201 0 -333 101t-132 266zM240 350q0 -120 102 -194t244 -74q90 0 168.5 31.5t128 94t49.5 142.5q0 59 -28.5 110t-69.5 83.5t-91 57t-89 35.5t-68 15q-29 -3 -68.5 -14.5t-89.5 -36t-91 -57t-69 -83.5 t-28 -110zM262 1022q0 -54 26.5 -99t63 -72.5t86 -49.5t82.5 -31.5t66 -15.5q33 6 66.5 15.5t82.5 31t85 49.5t62.5 73t26.5 99q0 119 -92 188.5t-231 69.5t-231.5 -69.5t-92.5 -188.5z" />
41 <glyph unicode="9" horiz-adv-x="1196" d="M117 952q0 84 31 162.5t88 139.5t145 98t194 37q133 0 233 -58t157 -159t84.5 -223.5t27.5 -266.5q0 -108 -17.5 -208t-58 -191.5t-99.5 -158.5t-148 -107t-199 -40q-126 0 -214 45.5t-155 129.5l70 84q57 -74 125.5 -113t173.5 -39q108 0 189 52.5t126 141t66.5 190.5 t21.5 216v64q-51 -84 -162.5 -156t-238.5 -72q-94 0 -173 27t-139 79.5t-94 136t-34 189.5zM236 954q0 -161 94.5 -245t247.5 -84q111 0 212 64.5t160 168.5q-5 59 -19.5 115.5t-43.5 113.5t-69.5 99.5t-102 69t-135.5 26.5q-84 0 -151.5 -30.5t-108.5 -79t-62.5 -105 t-21.5 -113.5z" />
42 <glyph unicode=":" horiz-adv-x="444" d="M133 72q0 35 27.5 61.5t64.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-64.5 26.5t-27.5 63.5zM133 913q0 37 27.5 64t64.5 27t63.5 -27t26.5 -64q0 -35 -26.5 -61.5t-63.5 -26.5t-64.5 26.5t-27.5 61.5z" />
43 <glyph unicode=";" horiz-adv-x="448" d="M119 -199q49 33 82.5 87t36.5 102q-15 -2 -21 -2q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -97.5q0 -82 -42.5 -158t-105.5 -119zM133 913q0 37 27.5 64t64.5 27t63.5 -27t26.5 -64q0 -35 -26.5 -61.5t-63.5 -26.5t-64.5 26.5t-27.5 61.5z " />
44 <glyph unicode="&#x3c;" horiz-adv-x="1015" d="M59 647v76l897 465v-101l-788 -403l788 -399v-101z" />
45 <glyph unicode="=" horiz-adv-x="1015" d="M59 442v84h897v-84h-897zM59 842v86h897v-86h-897z" />
46 <glyph unicode="&#x3e;" horiz-adv-x="1015" d="M59 184v101l791 399l-791 403v101l897 -465v-76z" />
47 <glyph unicode="?" horiz-adv-x="950" d="M45 1171q157 215 440 215q179 0 285.5 -90.5t106.5 -224.5q0 -64 -23 -118t-60 -92t-81.5 -71.5t-89 -63.5t-81.5 -60t-60 -68.5t-23 -81.5q0 -24 16.5 -53.5t44.5 -50.5l-82 -52q-84 70 -84 162q0 54 22 100.5t57.5 79.5t78 64t85 61t78 62t57.5 75.5t22 94.5 q0 94 -72.5 157.5t-202.5 63.5q-125 0 -209 -47t-151 -137zM367 72q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5z" />
48 <glyph unicode="@" horiz-adv-x="1603" d="M72 500q0 163 67.5 313t179 257.5t260.5 172t306 64.5q188 0 336.5 -88.5t228.5 -238.5t80 -333q0 -112 -28 -203.5t-74.5 -149.5t-105.5 -89t-124 -31q-80 0 -129 51.5t-51 122.5l-2 12q-58 -80 -148 -133t-188 -53q-141 0 -227 89.5t-86 238.5q0 107 42 205 t110.5 166.5t157 109.5t179.5 41q97 0 165.5 -48t100.5 -122l27 133h100l-121 -577q-4 -24 -4 -39q0 -52 30 -82.5t73 -30.5q26 0 55.5 11t62.5 40t59 71t43 112t17 157q0 168 -73 302.5t-207 212t-305 77.5q-146 0 -283.5 -62t-237.5 -163t-160.5 -236.5t-60.5 -277.5 q0 -163 76 -296t212 -209.5t304 -76.5q197 0 383 117l35 -51q-200 -129 -426 -129q-183 0 -332 85t-233 232t-84 326zM473 506q0 -108 61 -177t166 -69t191 59.5t145 145.5l66 303q-23 66 -82.5 118t-151.5 52q-106 0 -198 -62t-144.5 -161.5t-52.5 -208.5z" />
49 <glyph unicode="A" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799z" />
50 <glyph unicode="B" horiz-adv-x="1259" d="M170 0v1366h561q172 0 274.5 -93.5t102.5 -254.5q0 -123 -71 -208t-169 -105q109 -17 188 -116t79 -220q0 -171 -105 -270t-287 -99h-573zM287 106h438q134 0 210.5 73t76.5 198q0 112 -76 191t-211 79h-438v-541zM287 754h430q127 0 197.5 71t70.5 181 q0 109 -70.5 181.5t-197.5 72.5h-430v-506z" />
51 <glyph unicode="C" horiz-adv-x="1374" d="M119 682q0 154 54 287t147 224.5t220 143.5t271 52q306 0 498 -242l-99 -64q-66 91 -172 145t-227 54q-119 0 -223.5 -44t-181 -122t-120.5 -190.5t-44 -243.5q0 -173 75.5 -310.5t205.5 -213.5t288 -76q121 0 227 54t172 145l101 -62q-200 -244 -500 -244 q-144 0 -271 52t-220 143.5t-147 224.5t-54 287z" />
52 <glyph unicode="D" horiz-adv-x="1417" d="M170 0v1366h436q155 0 286 -54t218.5 -147t136.5 -218t49 -265q0 -142 -49 -266.5t-136.5 -216.5t-218.5 -145.5t-286 -53.5h-436zM287 106h319q132 0 240 45t179.5 123.5t110 183t38.5 224.5q0 161 -65.5 291t-196 208.5t-306.5 78.5h-319v-1154z" />
53 <glyph unicode="E" horiz-adv-x="1155" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-541h749v-106h-866z" />
54 <glyph unicode="F" horiz-adv-x="1110" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-647h-117z" />
55 <glyph unicode="G" horiz-adv-x="1456" d="M119 682q0 155 54 288t147.5 224.5t220.5 143t270 51.5q309 0 514 -234l-88 -63q-73 88 -185.5 139t-240.5 51q-119 0 -223.5 -44t-181 -122t-120.5 -190.5t-44 -243.5q0 -173 75.5 -311t205.5 -214.5t288 -76.5q125 0 230.5 49.5t170.5 116.5v327h-516v105h633v-477 q-94 -105 -228 -166.5t-290 -61.5q-143 0 -270 52t-220.5 143.5t-147.5 225t-54 288.5z" />
56 <glyph unicode="H" horiz-adv-x="1439" d="M170 0v1366h117v-610h866v610h117v-1366h-117v649h-866v-649h-117z" />
57 <glyph unicode="I" horiz-adv-x="456" d="M170 0v1366h117v-1366h-117z" />
58 <glyph unicode="J" horiz-adv-x="962" d="M29 143l71 90q112 -151 273 -151q138 0 220.5 87t82.5 226v971h117v-971q0 -204 -117 -312t-297 -108q-221 0 -350 168z" />
59 <glyph unicode="K" horiz-adv-x="1200" d="M170 0v1366h117v-748l659 748h150l-582 -651l637 -715h-150l-563 643l-151 -166v-477h-117z" />
60 <glyph unicode="L" horiz-adv-x="991" d="M141 0v1366h119v-1260h662v-106h-781z" />
61 <glyph unicode="M" horiz-adv-x="1617" d="M170 0v1366h174l465 -1137l463 1137h176v-1366h-119v1219l-498 -1219h-45l-499 1219v-1219h-117z" />
62 <glyph unicode="N" horiz-adv-x="1431" d="M170 0v1366h119l856 -1157v1157h117v-1366h-115l-860 1174v-1174h-117z" />
63 <glyph unicode="O" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5z" />
64 <glyph unicode="P" d="M170 0v1366h512q127 0 222 -55.5t142.5 -145t47.5 -198.5q0 -168 -112 -284t-300 -116h-395v-567h-117zM287 674h383q135 0 218 82t83 211q0 130 -82.5 211.5t-218.5 81.5h-383v-586z" />
65 <glyph unicode="Q" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5q0 -153 -51 -285.5t-144 -228.5l144 -150l-80 -73l-146 149q-163 -119 -387 -119q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5 t189 -214t285.5 -78.5q176 0 310 94l-211 219l82 76l211 -221q149 173 149 432q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5z" />
66 <glyph unicode="R" horiz-adv-x="1216" d="M170 0v1366h510q181 0 298.5 -108t117.5 -291q0 -120 -52.5 -209.5t-137 -135t-189.5 -49.5l395 -573h-141l-383 565h-301v-565h-117zM287 672h383q136 0 219.5 82.5t83.5 212.5t-83.5 211.5t-219.5 81.5h-383v-588z" />
67 <glyph unicode="S" horiz-adv-x="1189" d="M94 193l76 88q76 -86 184 -142.5t244 -56.5q99 0 172.5 25.5t112 67.5t56 86.5t17.5 92.5q0 64 -28 112.5t-75.5 79t-109 54t-129.5 42t-135.5 38.5t-129 48t-109 65t-75.5 96t-28 135q0 109 60.5 193t162.5 128t226 44q297 0 463 -193l-78 -86q-142 172 -391 172 q-137 0 -228.5 -71t-91.5 -181q0 -56 28 -98t75.5 -69t109 -48t129.5 -40t135.5 -39.5t129 -51.5t109 -72t75.5 -104.5t28 -145.5q0 -56 -14.5 -108t-50.5 -104t-89.5 -90t-138.5 -61.5t-192 -23.5q-161 0 -289 59.5t-211 158.5z" />
68 <glyph unicode="T" horiz-adv-x="1155" d="M72 1260v106h1011v-106h-446v-1260h-119v1260h-446z" />
69 <glyph unicode="U" horiz-adv-x="1404" d="M170 524v842h119v-840q0 -209 107 -326.5t306 -117.5t306.5 117.5t107.5 326.5v840h119v-842q0 -258 -136.5 -403.5t-396.5 -145.5q-258 0 -395 146t-137 403z" />
70 <glyph unicode="V" horiz-adv-x="1325" d="M31 1366h135l498 -1235l495 1235h135l-559 -1366h-145z" />
71 <glyph unicode="W" horiz-adv-x="1775" d="M39 1366h131l330 -1202l336 1202h106l334 -1202l330 1202h131l-389 -1366h-131l-328 1174l-328 -1174h-131z" />
72 <glyph unicode="X" horiz-adv-x="1320" d="M39 0l549 700l-518 666h147l442 -580l445 580h147l-518 -664l549 -702h-145l-478 616l-475 -616h-145z" />
73 <glyph unicode="Y" horiz-adv-x="1265" d="M31 1366h141l461 -672l461 672h141l-543 -782v-584h-119v584z" />
74 <glyph unicode="Z" horiz-adv-x="1189" d="M102 0v102l824 1158h-824v106h971v-100l-823 -1160h837v-106h-985z" />
75 <glyph unicode="[" horiz-adv-x="466" d="M76 -389v1778h356v-89h-266v-1601h266v-88h-356z" />
76 <glyph unicode="\" horiz-adv-x="577" d="M0 1407h92l486 -1448h-93z" />
77 <glyph unicode="]" horiz-adv-x="466" d="M35 -301h266v1601h-266v89h356v-1778h-356v88z" />
78 <glyph unicode="^" horiz-adv-x="876" d="M39 682l356 684h86l357 -684h-99l-301 600l-301 -600h-98z" />
79 <glyph unicode="_" horiz-adv-x="1155" d="M-6 -82h1167v-88h-1167v88z" />
80 <glyph unicode="`" horiz-adv-x="442" d="M0 1434h127l315 -295h-90z" />
81 <glyph unicode="a" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5z" />
82 <glyph unicode="b" d="M166 0v1366h106v-537q61 86 151 135.5t193 49.5q198 0 320.5 -143t122.5 -377q0 -236 -122.5 -377.5t-320.5 -141.5q-106 0 -197.5 51.5t-146.5 131.5v-158h-106zM272 248q45 -73 136 -124.5t190 -51.5q162 0 254 118.5t92 303.5q0 186 -92.5 305t-253.5 119 q-99 0 -190 -53.5t-136 -127.5v-489z" />
83 <glyph unicode="c" horiz-adv-x="1011" d="M111 496q0 221 132.5 369.5t346.5 148.5q121 0 202.5 -43t147.5 -125l-74 -66q-101 138 -270 138q-170 0 -271.5 -119.5t-101.5 -302.5t102 -303.5t271 -120.5q168 0 270 139l74 -66q-65 -83 -146.5 -126.5t-203.5 -43.5q-107 0 -197.5 41t-151.5 111t-95.5 165.5 t-34.5 203.5z" />
84 <glyph unicode="d" d="M111 494q0 234 121.5 377t318.5 143q104 0 194.5 -49.5t149.5 -135.5v537h109v-1366h-109v158q-55 -80 -146.5 -131.5t-197.5 -51.5q-198 0 -319 141.5t-121 377.5zM223 494q0 -185 93 -303.5t253 -118.5q101 0 191 51t135 125v489q-45 76 -135.5 128.5t-190.5 52.5 q-160 0 -253 -119.5t-93 -304.5z" />
85 <glyph unicode="e" horiz-adv-x="1161" d="M111 496q0 142 61 260.5t170.5 188t243.5 69.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-828q8 -167 113 -280t274 -113q196 0 324 137l55 -70q-154 -160 -387 -160q-217 0 -355 146t-138 375zM225 545h719q-1 66 -23 130.5t-64 120.5t-113 91t-160 35 q-84 0 -153 -34.5t-111.5 -90t-67 -120.5t-27.5 -132z" />
86 <glyph unicode="f" horiz-adv-x="542" d="M37 895v94h164v90q0 144 71.5 225.5t196.5 81.5q56 0 99.5 -15t88.5 -54l-51 -78q-54 51 -127 51q-84 0 -127 -55t-43 -156v-90h201v-94h-201v-895h-108v895h-164z" />
87 <glyph unicode="g" horiz-adv-x="1167" d="M111 496q0 234 121.5 376t318.5 142q104 0 193.5 -49t150.5 -136v160h109v-981q0 -109 -35 -190t-98 -128t-140.5 -69t-171.5 -22q-132 0 -219 31.5t-172 117.5l61 86q64 -76 140 -107.5t190 -31.5q93 0 166.5 30.5t121.5 103t48 179.5v158q-56 -81 -147.5 -133.5 t-196.5 -52.5q-198 0 -319 140t-121 376zM223 496q0 -185 92.5 -302.5t253.5 -117.5q99 0 190 52.5t136 127.5v481q-45 75 -136 128t-190 53q-160 0 -253 -118.5t-93 -303.5z" />
88 <glyph unicode="h" horiz-adv-x="1105" d="M166 0v1366h106v-526q59 70 157.5 122t199.5 52q154 0 232.5 -77t78.5 -241v-696h-106v674q0 135 -62 189.5t-178 54.5q-92 0 -182.5 -50t-139.5 -120v-748h-106z" />
89 <glyph unicode="i" horiz-adv-x="438" d="M137 1227q0 33 24.5 56.5t57.5 23.5q34 0 58 -23t24 -57t-24 -58t-58 -24q-33 0 -57.5 24.5t-24.5 57.5zM166 0v989h106v-989h-106z" />
90 <glyph unicode="j" horiz-adv-x="438" d="M-199 -326l47 88q67 -67 146 -67q77 0 124.5 44.5t47.5 135.5v1114h106v-1114q0 -136 -69.5 -206t-198.5 -70q-64 0 -110.5 18t-92.5 57zM137 1227q0 33 24.5 56.5t57.5 23.5q34 0 58 -23t24 -57t-24 -58t-58 -24q-33 0 -57.5 24.5t-24.5 57.5z" />
91 <glyph unicode="k" horiz-adv-x="1034" d="M166 0v1366h106v-942l582 565h143l-460 -446l458 -543h-143l-395 471l-185 -174v-297h-106z" />
92 <glyph unicode="l" horiz-adv-x="438" d="M166 0v1366h106v-1366h-106z" />
93 <glyph unicode="m" horiz-adv-x="1615" d="M166 0v989h106v-149q38 58 130.5 116t189.5 58q108 0 173.5 -53.5t86.5 -133.5q44 74 136.5 130.5t191.5 56.5q270 0 270 -301v-713h-107v692q0 226 -198 226q-78 0 -159.5 -49.5t-123.5 -118.5v-750h-108v692q0 226 -197 226q-77 0 -158 -50t-127 -120v-748h-106z" />
94 <glyph unicode="n" horiz-adv-x="1105" d="M166 0v989h106v-149q59 70 157.5 122t199.5 52q311 0 311 -322v-692h-106v670q0 135 -62 191.5t-178 56.5q-92 0 -182.5 -50t-139.5 -120v-748h-106z" />
95 <glyph unicode="o" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5z" />
96 <glyph unicode="p" horiz-adv-x="1161" d="M166 -377v1366h106v-155q55 79 146.5 129.5t197.5 50.5q199 0 321 -141t122 -377q0 -235 -122 -378t-321 -143q-103 0 -193 49.5t-151 135.5v-537h-106zM272 252q45 -74 136 -127t190 -53q161 0 253.5 119t92.5 305q0 185 -92 303.5t-254 118.5q-99 0 -190 -51.5 t-136 -125.5v-489z" />
97 <glyph unicode="q" horiz-adv-x="1161" d="M102 496q0 236 122 377t321 141q106 0 197.5 -50.5t146.5 -129.5v155h106v-1366h-106v537q-61 -86 -151 -135.5t-193 -49.5q-199 0 -321 143t-122 378zM217 496q0 -186 92.5 -305t253.5 -119q99 0 190 53t136 127v489q-45 74 -136 125.5t-190 51.5q-162 0 -254 -118.5 t-92 -303.5z" />
98 <glyph unicode="r" horiz-adv-x="649" d="M166 0v989h106v-170q145 191 334 191v-117q-18 4 -53 4q-74 0 -160.5 -55t-120.5 -121v-721h-106z" />
99 <glyph unicode="s" horiz-adv-x="940" d="M80 133l63 78q50 -63 135 -104t185 -41q122 0 193 56t71 144q0 54 -34.5 92t-89.5 58.5t-122 36.5t-133.5 36t-121.5 47.5t-89.5 79t-34.5 123.5q0 118 95.5 196.5t257.5 78.5q223 0 354 -146l-59 -75q-44 60 -121.5 95.5t-173.5 35.5q-113 0 -179.5 -51t-66.5 -130 q0 -50 34.5 -84t89 -53t121 -34.5t133 -36.5t121 -51t89 -85.5t34.5 -132.5q0 -127 -96 -209t-274 -82q-242 0 -381 158z" />
100 <glyph unicode="t" horiz-adv-x="563" d="M23 895v94h163v271h109v-271h201v-94h-201v-688q0 -62 25.5 -98.5t76.5 -36.5q68 0 111 47l41 -82q-65 -62 -168 -62q-97 0 -146 56t-49 159v705h-163z" />
101 <glyph unicode="u" horiz-adv-x="1105" d="M166 293v696h106v-672q0 -136 61.5 -190.5t178.5 -54.5q92 0 181 47.5t141 116.5v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-154 0 -232.5 77t-78.5 241z" />
102 <glyph unicode="v" horiz-adv-x="985" d="M14 989h119l361 -864l356 864h121l-418 -989h-121z" />
103 <glyph unicode="w" horiz-adv-x="1472" d="M35 989h115l262 -839l278 839h92l279 -839l262 839h115l-322 -989h-102l-277 846l-278 -846h-103z" />
104 <glyph unicode="x" horiz-adv-x="980" d="M35 0l391 508l-369 481h127l308 -407l305 407h127l-369 -481l391 -508h-127l-327 436l-330 -436h-127z" />
105 <glyph unicode="y" horiz-adv-x="985" d="M14 989h119l361 -864l356 864h121l-512 -1206q-78 -184 -252 -184q-60 0 -107 14l19 98q37 -16 86 -16q52 0 86.5 26.5t64.5 94.5l78 176z" />
106 <glyph unicode="z" horiz-adv-x="960" d="M115 0v88l585 807h-585v94h723v-86l-592 -809h600v-94h-731z" />
107 <glyph unicode="{" horiz-adv-x="509" d="M12 459v82q51 0 79 42t28 103v449q0 111 69 182.5t160 71.5h127v-89h-127q-57 0 -98 -46.5t-41 -118.5v-455q0 -141 -92 -180q92 -39 92 -181v-454q0 -71 41 -118.5t98 -47.5h127v-88h-127q-91 0 -160 71t-69 183v448q0 61 -28 103.5t-79 42.5z" />
108 <glyph unicode="|" horiz-adv-x="425" d="M170 -41v1448h88v-1448h-88z" />
109 <glyph unicode="}" horiz-adv-x="509" d="M35 -301h127q56 0 96.5 47.5t40.5 118.5v454q0 141 92 181q-92 40 -92 180v455q0 72 -40 118.5t-97 46.5h-127v89h127q91 0 160 -71.5t69 -182.5v-449q0 -61 28 -103t79 -42v-82q-51 0 -79 -42.5t-28 -103.5v-448q0 -112 -69 -183t-160 -71h-127v88z" />
110 <glyph unicode="~" horiz-adv-x="1021" d="M57 887q7 80 19 145t33 128.5t50 106.5t72.5 69t98.5 26q51 0 90 -22.5t62.5 -58t41.5 -78.5t33 -86t31.5 -78.5t42.5 -58t61 -22.5q79 0 123 104t64 304l88 -10q-8 -82 -19.5 -146t-32.5 -129t-50 -107.5t-73 -69.5t-100 -27q-51 0 -90 22t-62 57.5t-41 78t-33 85.5 t-32 78.5t-43 57.5t-61 22q-79 0 -123 -104t-62 -302z" />
111 <glyph unicode="&#xa1;" horiz-adv-x="448" d="M133 920q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -64t-63.5 -27t-63.5 27t-26.5 64zM156 -377l26 1010h84l27 -1010h-137z" />
112 <glyph unicode="&#xa2;" horiz-adv-x="1011" d="M111 496q0 203 113.5 347t301.5 167v147h90v-143q110 -4 185.5 -47t138.5 -121l-74 -66q-95 129 -250 138v-846q152 6 250 139l74 -66q-62 -80 -138 -123t-186 -47v-180h-90v185q-188 23 -301.5 167.5t-113.5 348.5zM223 496q0 -163 81.5 -278.5t221.5 -139.5v833 q-141 -26 -222 -139.5t-81 -275.5z" />
113 <glyph unicode="&#xa3;" horiz-adv-x="1032" d="M37 547v86h256q-7 8 -42 45.5t-46.5 51.5t-37 50.5t-36 63t-20 67t-9.5 82.5q0 161 127.5 277t315.5 116q126 0 229.5 -59t155.5 -162l-94 -59q-30 71 -108 124.5t-175 53.5q-137 0 -231.5 -79.5t-94.5 -213.5q0 -60 21.5 -115.5t45 -87t67 -82t61.5 -73.5h309v-86h-258 q21 -58 21 -109q0 -95 -44 -162t-122 -124q52 18 110 18q57 0 110.5 -22.5t104.5 -45t101 -22.5q64 0 121.5 26.5t82.5 57.5l56 -96q-101 -97 -264 -97q-62 0 -112 15t-78.5 33.5t-74.5 33.5t-102 15q-85 0 -242 -82l-45 98q142 62 216.5 150t74.5 188q0 57 -33 125h-317z " />
114 <glyph unicode="&#xa4;" horiz-adv-x="1069" d="M74 281l114 114q-102 127 -102 287q0 163 102 287l-114 116l57 58l117 -115q120 102 287 102q162 0 286 -102l115 115l59 -58l-114 -116q102 -124 102 -287q0 -160 -102 -287l114 -114l-59 -60l-115 117q-124 -105 -286 -105q-163 0 -287 105l-117 -117zM184 682 q0 -145 103 -247.5t248 -102.5t247.5 102.5t102.5 247.5q0 146 -102.5 248t-247.5 102t-248 -102t-103 -248z" />
115 <glyph unicode="&#xa5;" horiz-adv-x="1265" d="M31 1366h141l461 -672l461 672h141l-483 -696h471v-86h-531v-242h531v-84h-531v-258h-119v258h-528v84h528v242h-528v86h469z" />
116 <glyph unicode="&#xa6;" horiz-adv-x="425" d="M170 -41v647h88v-647h-88zM170 760v647h88v-647h-88z" />
117 <glyph unicode="&#xa7;" horiz-adv-x="944" d="M80 -8l63 74q51 -64 131 -106t187 -42q119 0 192.5 55.5t73.5 149.5q0 56 -34.5 94.5t-89.5 60t-122 38t-133.5 36.5t-121.5 48t-89.5 79t-34.5 123q0 104 70 170.5t182 93.5q-123 37 -187.5 94.5t-64.5 155.5q0 114 94 192t259 78q230 0 352 -147l-57 -68 q-51 65 -129 98.5t-164 33.5q-109 0 -178.5 -52t-69.5 -137q0 -51 34.5 -85.5t89 -53.5t121 -34t133 -35.5t121 -50t89 -85.5t34.5 -135q0 -178 -196 -260q96 -36 146 -94.5t50 -153.5q0 -137 -101.5 -215t-268.5 -78q-136 0 -223 41.5t-158 116.5zM209 608q0 -36 18 -64.5 t43 -47t71 -35.5t81.5 -26.5t95.5 -24.5l6 -1.5t5 -1t6 -1.5q94 40 142 93.5t48 129.5q0 38 -16 69t-38.5 51t-60 37.5t-67.5 27t-74 20.5q-144 -36 -202 -91.5t-58 -134.5z" />
118 <glyph unicode="&#xa8;" horiz-adv-x="536" d="M-16 1231q0 31 22 53.5t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5zM401 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5z" />
119 <glyph unicode="&#xa9;" horiz-adv-x="1593" d="M90 684q0 192 95 355t258 257.5t354 94.5q144 0 275 -56t225 -150.5t150 -225.5t56 -275q0 -143 -56 -274t-150 -226t-225 -151t-275 -56q-191 0 -354 95t-258 258t-95 354zM147 684q0 -175 87.5 -324.5t237.5 -237t325 -87.5q176 0 325.5 87.5t236.5 237t87 324.5 q0 176 -87 325.5t-236.5 236.5t-325.5 87q-131 0 -251.5 -51.5t-207.5 -138.5t-139 -207t-52 -252zM373 688q0 186 124 311t302 125q183 0 297 -133l-45 -45q-39 53 -109 85t-143 32q-146 0 -252.5 -106t-106.5 -271q0 -161 107.5 -270t251.5 -109q74 0 143 32.5t109 86.5 l45 -45q-116 -135 -297 -135q-178 0 -302 127.5t-124 314.5z" />
120 <glyph unicode="&#xaa;" horiz-adv-x="768" d="M94 866q0 99 68.5 155t161.5 56q138 0 225 -90v125q0 67 -51 105t-123 38q-128 0 -205 -98l-45 57q104 113 260 113q111 0 180.5 -53t69.5 -162v-444h-86v75q-86 -92 -225 -92q-92 0 -161 58.5t-69 156.5zM182 866q0 -67 48.5 -110t125.5 -43q58 0 109.5 22.5t83.5 63.5 v133q-32 40 -83.5 62t-109.5 22q-76 0 -125 -42.5t-49 -107.5z" />
121 <glyph unicode="&#xab;" horiz-adv-x="823" d="M61 498l328 362h117l-328 -362l328 -369h-117zM317 498l328 362h117l-328 -362l328 -369h-117z" />
122 <glyph unicode="&#xac;" horiz-adv-x="1021" d="M59 842v86h897v-486h-88v400h-809z" />
123 <glyph unicode="&#xad;" horiz-adv-x="614" d="M61 446v99h492v-99h-492z" />
124 <glyph unicode="&#xae;" horiz-adv-x="1011" d="M72 952q0 181 127 307.5t307 126.5q119 0 219 -57.5t157.5 -157.5t57.5 -219q0 -180 -126.5 -307t-307.5 -127q-180 0 -307 127t-127 307zM127 952q0 -156 111.5 -267.5t267.5 -111.5t267.5 111.5t111.5 267.5q0 158 -111 268.5t-268 110.5t-268 -110.5t-111 -268.5z M342 702v498h203q65 0 109 -42t44 -109q0 -72 -46 -110t-81 -38l134 -199h-78l-129 197h-95v-197h-61zM403 958h142q34 0 62 27t28 64q0 40 -28 67t-62 27h-142v-185z" />
125 <glyph unicode="&#xaf;" horiz-adv-x="743" d="M0 1210v78h743v-78h-743z" />
126 <glyph unicode="&#xb0;" horiz-adv-x="577" d="M51 1147q0 99 69 169t167 70q99 0 169 -70t70 -169q0 -98 -69.5 -167t-169.5 -69q-98 0 -167 69t-69 167zM131 1147q0 -65 45.5 -110.5t110.5 -45.5q66 0 112.5 45.5t46.5 110.5q0 66 -46.5 113t-112.5 47q-64 0 -110 -47t-46 -113z" />
127 <glyph unicode="&#xb1;" horiz-adv-x="1015" d="M59 0v84h897v-84h-897zM59 662v83h404v435h92v-435h401v-83h-401v-447h-92v447h-404z" />
128 <glyph unicode="&#xb2;" horiz-adv-x="786" d="M106 862v72q250 179 366 296.5t116 223.5q0 82 -56 122t-135 40q-75 0 -136 -29.5t-95 -77.5l-55 58q47 61 123.5 94t164.5 33q71 0 132 -23t104 -78t43 -135q0 -64 -32 -129.5t-96.5 -132t-134.5 -124.5t-173 -132h440v-78h-576z" />
129 <glyph unicode="&#xb3;" horiz-adv-x="786" d="M94 981l53 57q39 -52 102 -82t138 -30q95 0 150 42.5t55 116.5q0 83 -62.5 122.5t-162.5 39.5q-66 0 -78 -2v78q14 -2 78 -2q95 0 154 36t59 113q0 68 -57 107t-140 39q-134 0 -227 -103l-52 56q47 56 120 90.5t165 34.5q122 0 202.5 -58.5t80.5 -158.5q0 -44 -18 -80.5 t-46.5 -58.5t-58.5 -35t-60 -17q30 -2 62.5 -15.5t63.5 -37t51 -63t20 -87.5q0 -104 -80.5 -169.5t-216.5 -65.5q-101 0 -178.5 37t-116.5 96z" />
130 <glyph unicode="&#xb4;" horiz-adv-x="442" d="M0 1139l315 295h127l-352 -295h-90z" />
131 <glyph unicode="&#xb5;" horiz-adv-x="1105" d="M166 -377v1366h106v-672q0 -137 62 -193t178 -56q91 0 180.5 49t141.5 119v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-129 0 -205 52v-404h-106z" />
132 <glyph unicode="&#xb6;" horiz-adv-x="919" d="M55 1014q0 146 103.5 249t249.5 103h346v-1571h-78v1493h-191v-1493h-77v867q-146 0 -249.5 103t-103.5 249z" />
133 <glyph unicode="&#xb7;" horiz-adv-x="448" d="M135 502q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5z" />
134 <glyph unicode="&#xb8;" horiz-adv-x="405" d="M0 -328l35 66q68 -57 162 -57q56 0 94.5 25t38.5 67q0 38 -21 60t-61 22q-52 0 -84 -37l-55 32l61 173h78l-53 -138q33 23 75 23q60 0 98 -37t38 -98q0 -71 -59.5 -115.5t-147.5 -44.5q-60 0 -114.5 16.5t-84.5 42.5z" />
135 <glyph unicode="&#xb9;" horiz-adv-x="438" d="M35 1479l198 202h82v-819h-94v699l-131 -142z" />
136 <glyph unicode="&#xba;" horiz-adv-x="829" d="M90 989q0 144 90 241t234 97q146 0 235.5 -97t89.5 -241q0 -143 -89.5 -240.5t-235.5 -97.5q-143 0 -233.5 97.5t-90.5 240.5zM182 989q0 -111 62.5 -186.5t169.5 -75.5q109 0 172 75t63 187q0 111 -63 185.5t-172 74.5q-107 0 -169.5 -74.5t-62.5 -185.5z" />
137 <glyph unicode="&#xbb;" horiz-adv-x="823" d="M61 129l328 369l-328 362h117l328 -362l-328 -369h-117zM317 129l328 369l-328 362h117l328 -362l-328 -369h-117z" />
138 <glyph unicode="&#xbc;" horiz-adv-x="1519" d="M35 1163l198 203h82v-819h-94v698l-131 -141zM197 0l872 1366h94l-874 -1366h-92zM821 219v72l367 528h125v-524h123v-76h-123v-219h-90v219h-402zM915 295h308v440z" />
139 <glyph unicode="&#xbd;" horiz-adv-x="1599" d="M35 1163l198 203h82v-819h-94v698l-131 -141zM197 0l872 1366h94l-874 -1366h-92zM920 0v72q123 88 202.5 151.5t147.5 130t99.5 124.5t31.5 114q0 82 -56 122t-135 40q-75 0 -136 -29.5t-95 -77.5l-55 58q46 60 123 93t165 33q52 0 100 -13.5t89 -40.5t65.5 -74 t24.5 -107q0 -64 -32 -129.5t-96.5 -132t-134.5 -124.5t-173 -132h440v-78h-575z" />
140 <glyph unicode="&#xbe;" horiz-adv-x="1759" d="M94 666l53 57q39 -52 102 -82.5t138 -30.5q95 0 150 43t55 117q0 83 -62.5 122.5t-162.5 39.5q-66 0 -78 -2v78q14 -2 78 -2q95 0 154 36t59 113q0 68 -56.5 106.5t-140.5 38.5q-135 0 -227 -102l-52 55q47 56 120 90.5t165 34.5q122 0 202.5 -58.5t80.5 -158.5 q0 -44 -18 -80.5t-46.5 -58t-58.5 -34.5t-60 -17q30 -2 62.5 -15.5t63.5 -37t51 -63t20 -87.5q0 -104 -80.5 -170t-216.5 -66q-101 0 -178.5 37.5t-116.5 96.5zM436 0l873 1366h94l-875 -1366h-92zM1061 219v72l366 528h125v-524h123v-76h-123v-219h-90v219h-401zM1155 295 h307v440z" />
141 <glyph unicode="&#xbf;" horiz-adv-x="802" d="M74 -86q0 64 23 118t60 92t81.5 71.5t89 63.5t81.5 60t60 68.5t23 81.5q0 25 -16.5 53t-45.5 49l82 52q86 -69 86 -162q0 -54 -22 -100.5t-57.5 -79.5t-78 -64t-85.5 -61t-78.5 -62t-57.5 -75.5t-22 -94.5q0 -94 73 -156.5t203 -62.5q125 0 209.5 46.5t148.5 135.5 l74 -75q-157 -215 -440 -215q-179 0 -285 91.5t-106 225.5zM403 918q0 36 28 63t65 27t63.5 -26.5t26.5 -63.5q0 -36 -27 -62.5t-63 -26.5q-37 0 -65 27t-28 62z" />
142 <glyph unicode="&#xc0;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM344 1786h127l315 -295h-90z" />
143 <glyph unicode="&#xc1;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM543 1491l315 295h127l-352 -295h-90z" />
144 <glyph unicode="&#xc2;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM410 1491l198 295h111l203 -295h-82l-176 231l-172 -231h-82z" />
145 <glyph unicode="&#xc3;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM350 1499q0 120 51 197.5t140 77.5q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 79.5 49t30.5 147h72q0 -120 -50 -197t-141 -77q-42 0 -74 21.5t-51 52 t-36.5 61.5t-41 52.5t-53.5 21.5q-49 0 -79.5 -49t-30.5 -148h-72z" />
146 <glyph unicode="&#xc4;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM379 1575q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5zM797 1575q0 31 22 53.5t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5 t-53.5 -22.5t-53 22.5t-22 53.5z" />
147 <glyph unicode="&#xc5;" horiz-adv-x="1325" d="M31 0l559 1366h145l559 -1366h-135l-135 336h-723l-135 -336h-135zM340 442h645l-321 799zM469 1614q0 82 57.5 139t139.5 57q80 0 137 -57.5t57 -138.5q0 -80 -57.5 -138.5t-136.5 -58.5q-81 0 -139 58.5t-58 138.5zM535 1614q0 -54 38.5 -92.5t92.5 -38.5t91.5 38.5 t37.5 92.5t-37.5 92.5t-91.5 38.5t-92.5 -38.5t-38.5 -92.5z" />
148 <glyph unicode="&#xc6;" horiz-adv-x="1923" d="M29 0l862 1366h909v-106h-747v-506h733v-107h-733v-541h747v-106h-866v336h-561l-209 -336h-135zM432 442h502v799z" />
149 <glyph unicode="&#xc7;" horiz-adv-x="1374" d="M119 682q0 154 54 287t147 224.5t220 143.5t271 52q306 0 498 -242l-99 -64q-66 91 -172 145t-227 54q-119 0 -223.5 -44t-181 -122t-120.5 -190.5t-44 -243.5q0 -173 75.5 -310.5t205.5 -213.5t288 -76q121 0 227 54t172 145l101 -62q-196 -238 -486 -244l-30 -81 q31 22 75 22q60 0 98 -37t38 -98q0 -71 -59.5 -115.5t-147.5 -44.5q-60 0 -114.5 17t-84.5 43l35 65q68 -57 162 -57q56 0 94.5 25t38.5 67q0 38 -21 60t-61 22q-52 0 -84 -37l-55 33l43 118q-133 10 -249.5 66t-201.5 146.5t-133.5 218t-48.5 274.5z" />
150 <glyph unicode="&#xc8;" horiz-adv-x="1155" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-541h749v-106h-866zM283 1786h127l315 -295h-90z" />
151 <glyph unicode="&#xc9;" horiz-adv-x="1155" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-541h749v-106h-866zM481 1491l316 295h127l-353 -295h-90z" />
152 <glyph unicode="&#xca;" horiz-adv-x="1155" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-541h749v-106h-866zM344 1491l199 295h110l203 -295h-82l-176 231l-172 -231h-82z" />
153 <glyph unicode="&#xcb;" horiz-adv-x="1155" d="M170 0v1366h866v-106h-749v-506h735v-107h-735v-541h749v-106h-866zM315 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5zM733 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5 t-53.5 22.5t-22.5 53.5z" />
154 <glyph unicode="&#xcc;" horiz-adv-x="456" d="M-90 1786h127l315 -295h-90zM170 0v1366h117v-1366h-117z" />
155 <glyph unicode="&#xcd;" horiz-adv-x="456" d="M109 1491l315 295h127l-352 -295h-90zM170 0v1366h117v-1366h-117z" />
156 <glyph unicode="&#xce;" horiz-adv-x="456" d="M-25 1491l199 295h111l202 -295h-81l-177 231l-172 -231h-82zM170 0v1366h117v-1366h-117z" />
157 <glyph unicode="&#xcf;" horiz-adv-x="456" d="M-55 1575q0 31 22 53.5t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5zM170 0v1366h117v-1366h-117zM362 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5z" />
158 <glyph unicode="&#xd0;" horiz-adv-x="1476" d="M23 631v94h206v641h437q155 0 286 -54t218.5 -147t136.5 -218t49 -265q0 -142 -49 -266.5t-136.5 -216.5t-218.5 -145.5t-286 -53.5h-437v631h-206zM346 106h320q175 0 305.5 78t196 207.5t65.5 290.5t-65 291t-195.5 208.5t-306.5 78.5h-320v-535h369v-94h-369v-525z " />
159 <glyph unicode="&#xd1;" horiz-adv-x="1431" d="M170 0v1366h119l856 -1157v1157h117v-1366h-115l-860 1174v-1174h-117zM397 1499q0 120 51 197.5t140 77.5q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 79.5 49t30.5 147h72q0 -120 -49.5 -197t-140.5 -77q-42 0 -74 21.5t-51 52t-36.5 61.5t-41 52.5 t-53.5 21.5q-49 0 -80 -49t-31 -148h-72z" />
160 <glyph unicode="&#xd2;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5zM471 1786h127l315 -295h-90z" />
161 <glyph unicode="&#xd3;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5zM664 1491l315 295h127l-352 -295h-90z" />
162 <glyph unicode="&#xd4;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5zM530 1491l199 295h111l202 -295h-81l-177 231l-172 -231h-82z" />
163 <glyph unicode="&#xd5;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5zM469 1499q0 120 50.5 197.5t139.5 77.5q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 80 49t31 147h72q0 -120 -50 -197t-141 -77q-42 0 -74 21.5t-51 52t-36.5 61.5t-41 52.5 t-53.5 21.5q-49 0 -79.5 -49t-30.5 -148h-72z" />
164 <glyph unicode="&#xd6;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q195 0 347.5 -93.5t234.5 -254t82 -359.5t-82 -359.5t-234.5 -254t-347.5 -93.5q-147 0 -272 54.5t-210.5 149t-133 224.5t-47.5 279zM242 682q0 -172 65.5 -307.5t189 -214t285.5 -78.5q161 0 285 78t190 214.5 t66 307.5q0 172 -66 308.5t-190 214t-285 77.5q-244 0 -392 -168.5t-148 -431.5zM496 1575q0 31 22 53.5t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5zM913 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5 t-53.5 22.5t-22.5 53.5z" />
165 <glyph unicode="&#xd7;" horiz-adv-x="1015" d="M137 373l312 311l-312 311l62 60l309 -312l311 312l60 -60l-312 -311l312 -311l-60 -60l-311 312l-309 -312z" />
166 <glyph unicode="&#xd8;" horiz-adv-x="1564" d="M119 682q0 149 47.5 279t133 224.5t210.5 149t272 54.5q181 0 336 -89l41 66h107l-74 -115q121 -96 187.5 -244t66.5 -325q0 -199 -82 -359.5t-234.5 -254t-347.5 -93.5q-188 0 -344 91l-41 -66h-104l74 115q-119 95 -183.5 242.5t-64.5 324.5zM242 682 q0 -146 48.5 -267.5t137.5 -201.5l631 995q-123 74 -277 74q-244 0 -392 -168.5t-148 -431.5zM498 160q127 -78 284 -78q161 0 285 78t190 214.5t66 307.5q0 149 -50 271t-143 202z" />
167 <glyph unicode="&#xd9;" horiz-adv-x="1404" d="M170 524v842h119v-840q0 -209 107 -326.5t306 -117.5t306.5 117.5t107.5 326.5v840h119v-842q0 -258 -136.5 -403.5t-396.5 -145.5q-258 0 -395 146t-137 403zM387 1786h127l315 -295h-90z" />
168 <glyph unicode="&#xda;" horiz-adv-x="1404" d="M170 524v842h119v-840q0 -209 107 -326.5t306 -117.5t306.5 117.5t107.5 326.5v840h119v-842q0 -258 -136.5 -403.5t-396.5 -145.5q-258 0 -395 146t-137 403zM580 1491l315 295h127l-352 -295h-90z" />
169 <glyph unicode="&#xdb;" horiz-adv-x="1404" d="M170 524v842h119v-840q0 -209 107 -326.5t306 -117.5t306.5 117.5t107.5 326.5v840h119v-842q0 -258 -136.5 -403.5t-396.5 -145.5q-258 0 -395 146t-137 403zM455 1491l198 295h111l203 -295h-82l-176 231l-172 -231h-82z" />
170 <glyph unicode="&#xdc;" horiz-adv-x="1404" d="M170 524v842h119v-840q0 -209 107 -326.5t306 -117.5t306.5 117.5t107.5 326.5v840h119v-842q0 -258 -136.5 -403.5t-396.5 -145.5q-258 0 -395 146t-137 403zM420 1575q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5z M838 1575q0 31 22 53.5t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5z" />
171 <glyph unicode="&#xdd;" horiz-adv-x="1265" d="M31 1366h141l461 -672l461 672h141l-543 -782v-584h-119v584zM520 1491l316 295h127l-353 -295h-90z" />
172 <glyph unicode="&#xde;" d="M170 0v1366h117v-254h395q189 0 300.5 -116t111.5 -285q0 -109 -48 -198.5t-143 -144.5t-221 -55h-395v-313h-117zM287 420h383q135 0 218 81t83 210q0 130 -83 212.5t-218 82.5h-383v-586z" />
173 <glyph unicode="&#xdf;" horiz-adv-x="1183" d="M166 0v1042q0 148 98 246t258 98q136 0 233 -66t97 -175q0 -61 -33.5 -108t-81 -77.5t-95 -59.5t-81 -69.5t-33.5 -91.5q0 -50 34 -83.5t88 -51.5t119 -33t130.5 -35.5t119.5 -50t88 -85t34 -132.5q0 -123 -94 -208t-273 -85q-136 0 -218.5 41t-154.5 117l64 78 q48 -64 127.5 -104.5t181.5 -40.5q125 0 193.5 58.5t68.5 141.5q0 55 -34 92.5t-87.5 58.5t-119 38t-131 37t-119 47.5t-87.5 79t-34 122.5q0 62 33 112t80 82.5t93.5 61.5t79.5 64t33 76q0 70 -68.5 111.5t-152.5 41.5q-105 0 -177.5 -68t-72.5 -180v-1042h-106z" />
174 <glyph unicode="&#xe0;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M221 1434h127l316 -295h-91zM225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5z" />
175 <glyph unicode="&#xe1;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5zM418 1139l315 295h127l-352 -295h-90z" />
176 <glyph unicode="&#xe2;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5zM289 1139l198 295h111l203 -295h-82l-176 231l-172 -231h-82z" />
177 <glyph unicode="&#xe3;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5zM225 1147q0 120 50.5 197t140.5 77q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 79.5 49.5t30.5 147.5h72 q0 -120 -49.5 -197t-140.5 -77q-42 0 -74 21.5t-51 52t-36.5 61t-41 52t-53.5 21.5q-49 0 -80 -48.5t-31 -147.5h-72z" />
178 <glyph unicode="&#xe4;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5zM252 1231q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5zM670 1231q0 31 22 53.5t53 22.5 t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5z" />
179 <glyph unicode="&#xe5;" horiz-adv-x="1067" d="M113 305q0 103 51.5 179.5t128.5 112.5t166 36q210 0 336 -141v200q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q160 0 260 -80t100 -238v-696h-106v117q-130 -142 -336 -142q-65 0 -126 22t-110.5 62.5t-79.5 104.5t-30 141z M225 303q0 -105 75.5 -174.5t195.5 -69.5q91 0 169 35t130 101v217q-51 68 -129.5 102.5t-169.5 34.5q-120 0 -195.5 -69.5t-75.5 -176.5zM344 1323q0 82 57.5 139.5t139.5 57.5q80 0 137 -57.5t57 -139.5q0 -80 -57.5 -138.5t-136.5 -58.5q-81 0 -139 58.5t-58 138.5z M410 1323q0 -54 38.5 -92.5t92.5 -38.5t91.5 38.5t37.5 92.5t-37.5 92.5t-91.5 38.5t-92.5 -38.5t-38.5 -92.5z" />
180 <glyph unicode="&#xe6;" horiz-adv-x="1837" d="M113 305q0 102 50.5 178.5t128 113t167.5 36.5q208 0 336 -137v196q0 106 -75.5 167t-189.5 61q-94 0 -169 -35t-142 -111l-59 74q78 85 169 125.5t212 40.5q143 0 229.5 -61.5t103.5 -178.5q56 106 155.5 173t236.5 67q108 0 197 -41.5t146.5 -113.5t88.5 -167t31 -203 v-28h-828q8 -167 113 -280t274 -113q193 0 324 137l55 -70q-154 -160 -387 -160q-264 0 -408 218q-145 -218 -409 -218q-89 0 -167.5 37t-130.5 114t-52 179zM225 303q0 -105 75.5 -174.5t195.5 -69.5q223 0 333 199q-13 25 -23.5 69t-10.5 83q-52 68 -130 103.5t-169 35.5 q-120 0 -195.5 -70t-75.5 -176zM901 545h719q0 52 -13.5 104t-42.5 101.5t-70 87.5t-101.5 61t-132.5 23q-83 0 -152 -34.5t-112 -90t-67.5 -120.5t-27.5 -132z" />
181 <glyph unicode="&#xe7;" horiz-adv-x="1011" d="M111 496q0 221 132.5 369.5t346.5 148.5q121 0 202.5 -43t147.5 -125l-74 -66q-101 138 -270 138q-170 0 -271.5 -119.5t-101.5 -302.5t102 -303.5t271 -120.5q168 0 270 139l74 -66q-62 -79 -136 -121.5t-183 -48.5l-33 -86q33 23 76 23q60 0 97.5 -37t37.5 -98 q0 -71 -59.5 -115.5t-147.5 -44.5q-60 0 -114.5 16.5t-84.5 42.5l35 66q68 -57 162 -57q56 0 94.5 25t38.5 67q0 38 -21 60t-61 22q-52 0 -84 -37l-55 33l43 122q-196 17 -315 163.5t-119 355.5z" />
182 <glyph unicode="&#xe8;" horiz-adv-x="1161" d="M111 496q0 142 61 260.5t170.5 188t243.5 69.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-828q8 -167 113 -280t274 -113q196 0 324 137l55 -70q-154 -160 -387 -160q-217 0 -355 146t-138 375zM225 545h719q-1 66 -23 130.5t-64 120.5t-113 91t-160 35 q-84 0 -153 -34.5t-111.5 -90t-67 -120.5t-27.5 -132zM268 1434h127l316 -295h-90z" />
183 <glyph unicode="&#xe9;" horiz-adv-x="1161" d="M111 496q0 142 61 260.5t170.5 188t243.5 69.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-828q8 -167 113 -280t274 -113q196 0 324 137l55 -70q-154 -160 -387 -160q-217 0 -355 146t-138 375zM225 545h719q-1 66 -23 130.5t-64 120.5t-113 91t-160 35 q-84 0 -153 -34.5t-111.5 -90t-67 -120.5t-27.5 -132zM467 1139l315 295h127l-352 -295h-90z" />
184 <glyph unicode="&#xea;" horiz-adv-x="1161" d="M111 496q0 142 61 260.5t170.5 188t243.5 69.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-828q8 -167 113 -280t274 -113q196 0 324 137l55 -70q-154 -160 -387 -160q-217 0 -355 146t-138 375zM225 545h719q-1 66 -23 130.5t-64 120.5t-113 91t-160 35 q-84 0 -153 -34.5t-111.5 -90t-67 -120.5t-27.5 -132zM334 1139l198 295h111l203 -295h-82l-176 231l-172 -231h-82z" />
185 <glyph unicode="&#xeb;" horiz-adv-x="1161" d="M111 496q0 142 61 260.5t170.5 188t243.5 69.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-828q8 -167 113 -280t274 -113q196 0 324 137l55 -70q-154 -160 -387 -160q-217 0 -355 146t-138 375zM225 545h719q-1 66 -23 130.5t-64 120.5t-113 91t-160 35 q-84 0 -153 -34.5t-111.5 -90t-67 -120.5t-27.5 -132zM303 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5zM721 1231q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5z" />
186 <glyph unicode="&#xec;" horiz-adv-x="438" d="M-102 1434h127l315 -295h-90zM166 0v989h106v-989h-106z" />
187 <glyph unicode="&#xed;" horiz-adv-x="438" d="M98 1139l316 295h127l-353 -295h-90zM166 0v989h106v-989h-106z" />
188 <glyph unicode="&#xee;" horiz-adv-x="438" d="M-37 1139l199 295h110l203 -295h-82l-176 231l-172 -231h-82zM166 0v989h106v-989h-106z" />
189 <glyph unicode="&#xef;" horiz-adv-x="438" d="M-66 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5zM166 0v989h106v-989h-106zM352 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5z" />
190 <glyph unicode="&#xf0;" d="M111 487q0 220 126.5 365t327.5 145q197 0 322 -178q-117 192 -330 352l-291 -127l-28 70l247 109q-5 3 -166 108l62 90q123 -74 221 -147l223 98l29 -67l-186 -84q393 -327 393 -721q0 -149 -57.5 -267.5t-167 -188t-252.5 -69.5q-140 0 -249 67.5t-166.5 184 t-57.5 260.5zM223 487q0 -110 41.5 -203.5t125.5 -152.5t194 -59q112 0 196 59t125 152t41 204q0 110 -41 202.5t-125 152t-196 59.5q-110 0 -194 -59t-125.5 -152.5t-41.5 -202.5z" />
191 <glyph unicode="&#xf1;" horiz-adv-x="1105" d="M170 0v989h106v-149q59 70 157.5 122t199.5 52q311 0 311 -322v-692h-106v670q0 135 -62 191.5t-178 56.5q-92 0 -182.5 -50t-139.5 -120v-748h-106zM240 1147q0 120 50.5 197t139.5 77q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 80 49.5t31 147.5h71 q0 -120 -49.5 -197t-140.5 -77q-42 0 -74 21.5t-51 52t-36.5 61t-41 52t-53.5 21.5q-49 0 -80 -48.5t-31 -147.5h-71z" />
192 <glyph unicode="&#xf2;" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM266 1434h127l316 -295h-91z" />
193 <glyph unicode="&#xf3;" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM465 1139l315 295h127l-352 -295h-90z" />
194 <glyph unicode="&#xf4;" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM332 1139l198 295h111l203 -295h-82l-176 231l-172 -231h-82z" />
195 <glyph unicode="&#xf5;" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM270 1147q0 120 50.5 197t140.5 77q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 79.5 49.5t30.5 147.5h72q0 -120 -49.5 -197t-140.5 -77q-42 0 -74 21.5t-51 52t-36.5 61t-41 52t-53.5 21.5 q-49 0 -80 -48.5t-31 -147.5h-72z" />
196 <glyph unicode="&#xf6;" d="M111 496q0 222 130.5 370t342.5 148q143 0 252.5 -69.5t167 -186.5t57.5 -262t-57.5 -263t-167 -188t-252.5 -70q-141 0 -250 70t-166 188t-57 263zM223 496q0 -112 41.5 -207.5t125.5 -156t194 -60.5q112 0 196 60.5t125 155.5t41 208q0 112 -41 206.5t-125 155 t-196 60.5q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM301 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5zM719 1231q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5z " />
197 <glyph unicode="&#xf7;" horiz-adv-x="1046" d="M59 647v86h928v-86h-928zM442 285q0 32 24 56t58 24q32 0 56 -24t24 -56q0 -34 -24 -58t-56 -24q-34 0 -58 24t-24 58zM442 1087q0 34 24 57t58 23q33 0 56.5 -23.5t23.5 -56.5q0 -32 -24 -56.5t-56 -24.5q-34 0 -58 24t-24 57z" />
198 <glyph unicode="&#xf8;" d="M111 496q0 222 130.5 370t342.5 148q158 0 276 -88l49 63h90l-84 -108q70 -71 108 -170.5t38 -214.5q0 -145 -57.5 -263t-167 -188t-252.5 -70q-166 0 -287 97l-55 -72h-90l92 121q-64 70 -98.5 167t-34.5 208zM223 496q0 -169 88 -289l486 637q-90 74 -213 74 q-110 0 -194 -60.5t-125.5 -155t-41.5 -206.5zM360 154q92 -82 224 -82q112 0 196 60.5t125 155.5t41 208q0 173 -98 297z" />
199 <glyph unicode="&#xf9;" horiz-adv-x="1105" d="M166 293v696h106v-672q0 -136 61.5 -190.5t178.5 -54.5q92 0 181 47.5t141 116.5v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-154 0 -232.5 77t-78.5 241zM238 1434h127l315 -295h-90z" />
200 <glyph unicode="&#xfa;" horiz-adv-x="1105" d="M166 293v696h106v-672q0 -136 61.5 -190.5t178.5 -54.5q92 0 181 47.5t141 116.5v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-154 0 -232.5 77t-78.5 241zM434 1139l316 295h127l-353 -295h-90z" />
201 <glyph unicode="&#xfb;" horiz-adv-x="1105" d="M166 293v696h106v-672q0 -136 61.5 -190.5t178.5 -54.5q92 0 181 47.5t141 116.5v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-154 0 -232.5 77t-78.5 241zM297 1139l199 295h110l203 -295h-82l-176 231l-172 -231h-82z" />
202 <glyph unicode="&#xfc;" horiz-adv-x="1105" d="M166 293v696h106v-672q0 -136 61.5 -190.5t178.5 -54.5q92 0 181 47.5t141 116.5v753h106v-989h-106v145q-65 -73 -160.5 -121.5t-196.5 -48.5q-154 0 -232.5 77t-78.5 241zM276 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5 t-53.5 22.5t-22.5 53.5zM694 1231q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5z" />
203 <glyph unicode="&#xfd;" horiz-adv-x="985" d="M14 989h119l361 -864l356 864h121l-512 -1206q-78 -184 -252 -184q-60 0 -107 14l19 98q37 -16 86 -16q52 0 86.5 26.5t64.5 94.5l78 176zM373 1139l315 295h127l-352 -295h-90z" />
204 <glyph unicode="&#xfe;" horiz-adv-x="1161" d="M166 -377v1743h106v-532q55 79 146.5 129.5t197.5 50.5q199 0 321 -141t122 -377q0 -235 -122 -378t-321 -143q-103 0 -193 49.5t-151 135.5v-537h-106zM272 252q45 -74 136 -127t190 -53q161 0 253.5 119t92.5 305q0 185 -92 303.5t-254 118.5q-99 0 -190 -51.5 t-136 -125.5v-489z" />
205 <glyph unicode="&#xff;" horiz-adv-x="985" d="M14 989h119l361 -864l356 864h121l-512 -1206q-78 -184 -252 -184q-60 0 -107 14l19 98q37 -16 86 -16q52 0 86.5 26.5t64.5 94.5l78 176zM209 1231q0 31 22.5 53.5t53.5 22.5t53 -22.5t22 -53.5t-22 -53.5t-53 -22.5t-53.5 22.5t-22.5 53.5zM627 1231q0 31 22 53.5 t53 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53 22.5t-22 53.5z" />
206 <glyph unicode="&#x152;" horiz-adv-x="2283" d="M119 682q0 149 47.5 278.5t132 223.5t208 148t269.5 54q162 0 302 -79t216 -226v285h867v-106h-748v-506h733v-107h-733v-541h748v-106h-867v285q-76 -148 -216 -229t-302 -81q-194 0 -345 93.5t-231.5 254t-80.5 359.5zM242 682q0 -173 65.5 -308.5t189.5 -213.5 t287 -78q176 0 310.5 94.5t199.5 276.5v460q-64 181 -198.5 274t-311.5 93q-163 0 -287 -77.5t-189.5 -212.5t-65.5 -308z" />
207 <glyph unicode="&#x153;" horiz-adv-x="1996" d="M111 496q0 222 130.5 370t342.5 148q75 0 141 -22t110.5 -54.5t80.5 -76t55.5 -81t32.5 -75.5q17 48 47.5 97t80 99t125 81.5t164.5 31.5q146 0 253.5 -72t160.5 -189.5t53 -263.5v-28h-825q6 -167 110.5 -280t274.5 -113q196 0 324 137l57 -70q-157 -160 -387 -160 q-78 0 -146 21t-114.5 52.5t-84 74.5t-58.5 82t-35 80q-15 -40 -34.5 -77t-56 -81.5t-80 -76.5t-109 -53.5t-140.5 -21.5q-141 0 -250 70t-166 188t-57 263zM223 496q0 -114 42 -210t125.5 -156t193.5 -60q166 0 264 124.5t98 301.5q0 113 -41.5 208t-125.5 154.5t-195 59.5 q-110 0 -193.5 -59.5t-125.5 -154.5t-42 -208zM1061 545h719q0 65 -22 130t-64.5 121t-114 91t-160.5 35q-83 0 -151.5 -34.5t-111.5 -90t-67.5 -120.5t-27.5 -132z" />
208 <glyph unicode="&#x178;" horiz-adv-x="1265" d="M31 1366h141l461 -672l461 672h141l-543 -782v-584h-119v584zM356 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5zM774 1575q0 31 22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5t-22.5 -53.5t-53.5 -22.5 t-53.5 22.5t-22.5 53.5z" />
209 <glyph unicode="&#x2c6;" horiz-adv-x="512" d="M0 1139l199 295h110l203 -295h-82l-176 231l-172 -231h-82z" />
210 <glyph unicode="&#x2dc;" horiz-adv-x="628" d="M0 1147q0 120 50.5 197t139.5 77q42 0 74 -21.5t51 -52t36.5 -61.5t41 -52.5t53.5 -21.5q49 0 80 49.5t31 147.5h72q0 -120 -50 -197t-141 -77q-42 0 -74 21.5t-51 52t-36.5 61t-41 52t-53.5 21.5q-49 0 -79.5 -48.5t-30.5 -147.5h-72z" />
211 <glyph unicode="&#x2000;" horiz-adv-x="905" />
212 <glyph unicode="&#x2001;" horiz-adv-x="1810" />
213 <glyph unicode="&#x2002;" horiz-adv-x="905" />
214 <glyph unicode="&#x2003;" horiz-adv-x="1810" />
215 <glyph unicode="&#x2004;" horiz-adv-x="603" />
216 <glyph unicode="&#x2005;" horiz-adv-x="452" />
217 <glyph unicode="&#x2006;" horiz-adv-x="301" />
218 <glyph unicode="&#x2007;" horiz-adv-x="301" />
219 <glyph unicode="&#x2008;" horiz-adv-x="226" />
220 <glyph unicode="&#x2009;" horiz-adv-x="362" />
221 <glyph unicode="&#x200a;" horiz-adv-x="100" />
222 <glyph unicode="&#x2010;" horiz-adv-x="614" d="M61 446v99h492v-99h-492z" />
223 <glyph unicode="&#x2011;" horiz-adv-x="614" d="M61 446v99h492v-99h-492z" />
224 <glyph unicode="&#x2012;" horiz-adv-x="614" d="M61 446v99h492v-99h-492z" />
225 <glyph unicode="&#x2013;" horiz-adv-x="1214" d="M61 446v99h1092v-99h-1092z" />
226 <glyph unicode="&#x2014;" horiz-adv-x="1705" d="M61 446v99h1584v-99h-1584z" />
227 <glyph unicode="&#x2018;" horiz-adv-x="448" d="M104 1108q0 83 42.5 158t105.5 120l59 -49q-49 -34 -82 -87t-36 -103q0 4 20 4q37 0 60.5 -24.5t23.5 -61.5q0 -36 -26 -62t-62 -26q-44 0 -74.5 35.5t-30.5 95.5z" />
228 <glyph unicode="&#x2019;" horiz-adv-x="448" d="M119 1026q49 34 82.5 87.5t36.5 103.5q0 -5 -21 -5q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -95.5q0 -83 -42.5 -158t-105.5 -120z" />
229 <glyph unicode="&#x201a;" horiz-adv-x="448" d="M119 -201q49 33 82.5 87t36.5 102q-15 -2 -21 -2q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -95.5q0 -83 -42.5 -159.5t-105.5 -119.5z" />
230 <glyph unicode="&#x201c;" horiz-adv-x="739" d="M123 1108q0 82 41.5 157.5t103.5 120.5l62 -49q-50 -34 -84 -87.5t-37 -102.5q4 4 22 4q35 0 58.5 -24.5t23.5 -61.5q0 -36 -25 -62t-61 -26q-43 0 -73.5 35.5t-30.5 95.5zM414 1108q0 83 41 158t104 120l62 -49q-50 -34 -84 -87.5t-37 -102.5q4 4 22 4q35 0 58.5 -24.5 t23.5 -61.5q0 -36 -25 -62t-63 -26q-43 0 -72.5 35t-29.5 96z" />
231 <glyph unicode="&#x201d;" horiz-adv-x="739" d="M119 1026q49 34 82.5 87.5t36.5 103.5q0 -5 -21 -5q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -95.5q0 -83 -42.5 -158t-105.5 -120zM408 1026q49 34 83 87.5t37 103.5q-5 -5 -22 -5q-35 0 -58.5 24.5t-23.5 61.5q0 36 25 62t63 26 q43 0 72.5 -35t29.5 -96q0 -83 -41 -158t-104 -120z" />
232 <glyph unicode="&#x201e;" horiz-adv-x="739" d="M119 -201q49 33 82.5 87t36.5 102q-15 -2 -21 -2q-37 0 -60.5 24.5t-23.5 61.5q0 36 26 62t62 26q44 0 74.5 -35.5t30.5 -95.5q0 -83 -42.5 -159.5t-105.5 -119.5zM408 -201q49 33 83 87t37 102l-8 -1q-9 -1 -14 -1q-35 0 -58.5 24.5t-23.5 61.5q0 36 25 62t63 26 q43 0 72.5 -35t29.5 -96q0 -83 -41.5 -159.5t-103.5 -119.5z" />
233 <glyph unicode="&#x2022;" horiz-adv-x="733" d="M158 496q0 88 61.5 149.5t149.5 61.5t149.5 -61.5t61.5 -149.5q0 -86 -61.5 -147.5t-149.5 -61.5t-149.5 61.5t-61.5 147.5z" />
234 <glyph unicode="&#x2026;" horiz-adv-x="1345" d="M135 72q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5zM584 72q0 35 26.5 61.5t63.5 26.5t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5zM1032 72q0 35 26.5 61.5t63.5 26.5 t63.5 -26.5t26.5 -61.5q0 -37 -26.5 -63.5t-63.5 -26.5t-63.5 26.5t-26.5 63.5z" />
235 <glyph unicode="&#x202f;" horiz-adv-x="362" />
236 <glyph unicode="&#x2039;" horiz-adv-x="567" d="M61 498l328 362h117l-328 -362l328 -369h-117z" />
237 <glyph unicode="&#x203a;" horiz-adv-x="567" d="M61 129l328 369l-328 362h117l328 -362l-328 -369h-117z" />
238 <glyph unicode="&#x205f;" horiz-adv-x="452" />
239 <glyph unicode="&#x20ac;" horiz-adv-x="1413" d="M72 496v84h96q-6 50 -6 102q0 54 6 106h-96v84h112q57 234 241 375.5t429 141.5q306 0 498 -242l-99 -64q-66 91 -172 145t-227 54q-195 0 -343 -111.5t-202 -298.5h668v-84h-684q-8 -47 -8 -106q0 -52 6 -102h686v-84h-668q54 -188 202.5 -301t342.5 -113q121 0 227 54 t172 145l101 -62q-200 -244 -500 -244q-247 0 -431 142t-241 379h-110z" />
240 <glyph unicode="&#x2122;" horiz-adv-x="929" d="M35 1313v53h311v-53h-127v-398h-57v398h-127zM420 915v451h88l131 -328l131 328h88v-451h-57v373l-154 -373h-16l-154 373v-373h-57z" />
241 <glyph unicode="&#x25fc;" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" />
242 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="J" k="-10" />
243 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="S" k="35" />
244 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="141" />
245 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="47" />
246 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="80" />
247 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="117" />
248 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="100" />
249 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="127" />
250 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="question" k="162" />
251 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="asterisk" k="217" />
252 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="203" />
253 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="10" />
254 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="10" />
255 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="u" k="23" />
256 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="v" k="41" />
257 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="w" k="39" />
258 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="y,yacute,ydieresis" k="41" />
259 <hkern g1="B" g2="T" k="39" />
260 <hkern g1="B" g2="V" k="25" />
261 <hkern g1="B" g2="W" k="20" />
262 <hkern g1="B" g2="Y,Yacute,Ydieresis" k="61" />
263 <hkern g1="B" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
264 <hkern g1="C,Ccedilla" g2="V" k="2" />
265 <hkern g1="C,Ccedilla" g2="W" k="4" />
266 <hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="27" />
267 <hkern g1="C,Ccedilla" g2="question" k="4" />
268 <hkern g1="C,Ccedilla" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="4" />
269 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="J" k="41" />
270 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="T" k="59" />
271 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="V" k="41" />
272 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="W" k="41" />
273 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Y,Yacute,Ydieresis" k="82" />
274 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="question" k="27" />
275 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
276 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="80" />
277 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="X" k="61" />
278 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Z" k="39" />
279 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="59" />
280 <hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="68" />
281 <hkern g1="F" g2="J" k="113" />
282 <hkern g1="F" g2="ampersand" k="6" />
283 <hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="102" />
284 <hkern g1="G" g2="T" k="4" />
285 <hkern g1="G" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="4" />
286 <hkern g1="G" g2="X" k="4" />
287 <hkern g1="G" g2="V" k="6" />
288 <hkern g1="G" g2="W" k="4" />
289 <hkern g1="G" g2="Y,Yacute,Ydieresis" k="10" />
290 <hkern g1="G" g2="question" k="6" />
291 <hkern g1="K" g2="Y,Yacute,Ydieresis" k="53" />
292 <hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="117" />
293 <hkern g1="K" g2="a,ae" k="39" />
294 <hkern g1="K" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="76" />
295 <hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="47" />
296 <hkern g1="K" g2="t" k="72" />
297 <hkern g1="K" g2="u" k="41" />
298 <hkern g1="K" g2="v" k="123" />
299 <hkern g1="K" g2="w" k="82" />
300 <hkern g1="K" g2="x" k="47" />
301 <hkern g1="K" g2="y,yacute,ydieresis" k="123" />
302 <hkern g1="K" g2="hyphen,periodcentered,endash,emdash" k="102" />
303 <hkern g1="L" g2="T" k="205" />
304 <hkern g1="L" g2="ampersand" k="18" />
305 <hkern g1="L" g2="V" k="184" />
306 <hkern g1="L" g2="W" k="129" />
307 <hkern g1="L" g2="Y,Yacute,Ydieresis" k="250" />
308 <hkern g1="L" g2="question" k="240" />
309 <hkern g1="L" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="238" />
310 <hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="76" />
311 <hkern g1="L" g2="a,ae" k="35" />
312 <hkern g1="L" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="53" />
313 <hkern g1="L" g2="t" k="66" />
314 <hkern g1="L" g2="u" k="35" />
315 <hkern g1="L" g2="v" k="121" />
316 <hkern g1="L" g2="w" k="80" />
317 <hkern g1="L" g2="y,yacute,ydieresis" k="121" />
318 <hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="59" />
319 <hkern g1="L" g2="asterisk" k="362" />
320 <hkern g1="P" g2="Y,Yacute,Ydieresis" k="4" />
321 <hkern g1="P" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="162" />
322 <hkern g1="P" g2="J" k="215" />
323 <hkern g1="P" g2="X" k="10" />
324 <hkern g1="P" g2="ampersand" k="47" />
325 <hkern g1="P" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="199" />
326 <hkern g1="P" g2="a,ae" k="41" />
327 <hkern g1="P" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="25" />
328 <hkern g1="P" g2="hyphen,periodcentered,endash,emdash" k="76" />
329 <hkern g1="R" g2="T" k="20" />
330 <hkern g1="R" g2="V" k="20" />
331 <hkern g1="R" g2="Y,Yacute,Ydieresis" k="31" />
332 <hkern g1="R" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
333 <hkern g1="R" g2="ampersand" k="4" />
334 <hkern g1="R" g2="a,ae" k="41" />
335 <hkern g1="R" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="61" />
336 <hkern g1="R" g2="s" k="6" />
337 <hkern g1="S" g2="T" k="6" />
338 <hkern g1="S" g2="Y,Yacute,Ydieresis" k="20" />
339 <hkern g1="S" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="20" />
340 <hkern g1="S" g2="t" k="39" />
341 <hkern g1="S" g2="v" k="6" />
342 <hkern g1="S" g2="w" k="4" />
343 <hkern g1="S" g2="x" k="25" />
344 <hkern g1="S" g2="y,yacute,ydieresis" k="6" />
345 <hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="59" />
346 <hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="141" />
347 <hkern g1="T" g2="J" k="168" />
348 <hkern g1="T" g2="ampersand" k="121" />
349 <hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="188" />
350 <hkern g1="T" g2="a,ae" k="211" />
351 <hkern g1="T" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="252" />
352 <hkern g1="T" g2="hyphen,periodcentered,endash,emdash" k="123" />
353 <hkern g1="T" g2="s" k="197" />
354 <hkern g1="T" g2="v" k="139" />
355 <hkern g1="T" g2="w" k="139" />
356 <hkern g1="T" g2="x" k="160" />
357 <hkern g1="T" g2="y,yacute,ydieresis" k="139" />
358 <hkern g1="T" g2="S" k="4" />
359 <hkern g1="T" g2="colon,semicolon" k="102" />
360 <hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="74" />
361 <hkern g1="T" g2="m,n,p,r,z" k="190" />
362 <hkern g1="T" g2="u" k="190" />
363 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="47" />
364 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="12" />
365 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
366 <hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="117" />
367 <hkern g1="V" g2="J" k="188" />
368 <hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
369 <hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
370 <hkern g1="V" g2="ampersand" k="51" />
371 <hkern g1="V" g2="a,ae" k="127" />
372 <hkern g1="V" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="123" />
373 <hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="45" />
374 <hkern g1="V" g2="m,n,p,r,z" k="74" />
375 <hkern g1="V" g2="s" k="72" />
376 <hkern g1="V" g2="t" k="25" />
377 <hkern g1="V" g2="u" k="74" />
378 <hkern g1="V" g2="v" k="25" />
379 <hkern g1="V" g2="w" k="6" />
380 <hkern g1="V" g2="x" k="45" />
381 <hkern g1="V" g2="y,yacute,ydieresis" k="6" />
382 <hkern g1="V" g2="hyphen,periodcentered,endash,emdash" k="106" />
383 <hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="100" />
384 <hkern g1="W" g2="J" k="59" />
385 <hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="141" />
386 <hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
387 <hkern g1="W" g2="ampersand" k="41" />
388 <hkern g1="W" g2="a,ae" k="82" />
389 <hkern g1="W" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="82" />
390 <hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="25" />
391 <hkern g1="W" g2="m,n,p,r,z" k="61" />
392 <hkern g1="W" g2="s" k="31" />
393 <hkern g1="W" g2="t" k="25" />
394 <hkern g1="W" g2="u" k="61" />
395 <hkern g1="W" g2="v" k="4" />
396 <hkern g1="W" g2="x" k="45" />
397 <hkern g1="W" g2="y,yacute,ydieresis" k="4" />
398 <hkern g1="W" g2="hyphen,periodcentered,endash,emdash" k="66" />
399 <hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="127" />
400 <hkern g1="Y,Yacute,Ydieresis" g2="J" k="229" />
401 <hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
402 <hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82" />
403 <hkern g1="Y,Yacute,Ydieresis" g2="ampersand" k="123" />
404 <hkern g1="Y,Yacute,Ydieresis" g2="a,ae" k="258" />
405 <hkern g1="Y,Yacute,Ydieresis" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="264" />
406 <hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="92" />
407 <hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,z" k="184" />
408 <hkern g1="Y,Yacute,Ydieresis" g2="s" k="205" />
409 <hkern g1="Y,Yacute,Ydieresis" g2="t" k="47" />
410 <hkern g1="Y,Yacute,Ydieresis" g2="u" k="184" />
411 <hkern g1="Y,Yacute,Ydieresis" g2="v" k="123" />
412 <hkern g1="Y,Yacute,Ydieresis" g2="w" k="123" />
413 <hkern g1="Y,Yacute,Ydieresis" g2="x" k="147" />
414 <hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="123" />
415 <hkern g1="Y,Yacute,Ydieresis" g2="hyphen,periodcentered,endash,emdash" k="231" />
416 <hkern g1="Y,Yacute,Ydieresis" g2="S" k="41" />
417 <hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="113" />
418 <hkern g1="Z" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="39" />
419 <hkern g1="a,h,m,n" g2="T" k="233" />
420 <hkern g1="a,h,m,n" g2="question" k="68" />
421 <hkern g1="a,h,m,n" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="6" />
422 <hkern g1="a,h,m,n" g2="Y,Yacute,Ydieresis" k="225" />
423 <hkern g1="a,h,m,n" g2="V" k="129" />
424 <hkern g1="a,h,m,n" g2="W" k="86" />
425 <hkern g1="ampersand" g2="T" k="158" />
426 <hkern g1="ampersand" g2="Y,Yacute,Ydieresis" k="197" />
427 <hkern g1="ampersand" g2="V" k="102" />
428 <hkern g1="ampersand" g2="W" k="111" />
429 <hkern g1="asterisk" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="217" />
430 <hkern g1="asterisk" g2="J" k="231" />
431 <hkern g1="b,o,p,oslash,thorn" g2="T" k="252" />
432 <hkern g1="b,o,p,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
433 <hkern g1="b,o,p,oslash,thorn" g2="question" k="88" />
434 <hkern g1="b,o,p,oslash,thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
435 <hkern g1="b,o,p,oslash,thorn" g2="Y,Yacute,Ydieresis" k="260" />
436 <hkern g1="b,o,p,oslash,thorn" g2="V" k="123" />
437 <hkern g1="b,o,p,oslash,thorn" g2="W" k="82" />
438 <hkern g1="b,o,p,oslash,thorn" g2="x" k="80" />
439 <hkern g1="c,cent,ccedilla" g2="T" k="176" />
440 <hkern g1="c,cent,ccedilla" g2="question" k="45" />
441 <hkern g1="c,cent,ccedilla" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
442 <hkern g1="c,cent,ccedilla" g2="Y,Yacute,Ydieresis" k="127" />
443 <hkern g1="c,cent,ccedilla" g2="V" k="68" />
444 <hkern g1="c,cent,ccedilla" g2="W" k="45" />
445 <hkern g1="colon,semicolon" g2="T" k="102" />
446 <hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="113" />
447 <hkern g1="e,ae,oe" g2="T" k="217" />
448 <hkern g1="e,ae,oe" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
449 <hkern g1="e,ae,oe" g2="question" k="68" />
450 <hkern g1="e,ae,oe" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
451 <hkern g1="e,ae,oe" g2="Y,Yacute,Ydieresis" k="225" />
452 <hkern g1="e,ae,oe" g2="V" k="106" />
453 <hkern g1="e,ae,oe" g2="W" k="82" />
454 <hkern g1="e,ae,oe" g2="asterisk" k="39" />
455 <hkern g1="eth" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
456 <hkern g1="f" g2="T" k="-82" />
457 <hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="86" />
458 <hkern g1="f" g2="ampersand" k="4" />
459 <hkern g1="f" g2="question" k="-121" />
460 <hkern g1="f" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="-141" />
461 <hkern g1="f" g2="Y,Yacute,Ydieresis" k="-109" />
462 <hkern g1="f" g2="V" k="-127" />
463 <hkern g1="f" g2="W" k="-127" />
464 <hkern g1="f" g2="X" k="-82" />
465 <hkern g1="f" g2="Z" k="-82" />
466 <hkern g1="f" g2="asterisk" k="-141" />
467 <hkern g1="f" g2="parenright,bracketright,braceright" k="-158" />
468 <hkern g1="f" g2="exclam,B,D,E,F,H,I,K,L,M,N,P,R,Egrave,Eacute,Ecircumflex,Edieresis,Igrave,Iacute,Icircumflex,Idieresis,Eth,Ntilde" k="-82" />
469 <hkern g1="f" g2="S" k="-45" />
470 <hkern g1="f" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="-82" />
471 <hkern g1="g,q" g2="T" k="190" />
472 <hkern g1="g,q" g2="question" k="45" />
473 <hkern g1="g,q" g2="Y,Yacute,Ydieresis" k="184" />
474 <hkern g1="g,q" g2="V" k="74" />
475 <hkern g1="g,q" g2="W" k="61" />
476 <hkern g1="g,q" g2="j" k="-88" />
477 <hkern g1="hyphen,periodcentered,endash,emdash" g2="Y,Yacute,Ydieresis" k="215" />
478 <hkern g1="hyphen,periodcentered,endash,emdash" g2="V" k="106" />
479 <hkern g1="hyphen,periodcentered,endash,emdash" g2="W" k="66" />
480 <hkern g1="hyphen,periodcentered,endash,emdash" g2="X" k="86" />
481 <hkern g1="k" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="4" />
482 <hkern g1="k" g2="bullet" k="59" />
483 <hkern g1="k" g2="hyphen,periodcentered,endash,emdash" k="59" />
484 <hkern g1="k" g2="Y,Yacute,Ydieresis" k="129" />
485 <hkern g1="k" g2="T" k="164" />
486 <hkern g1="k" g2="V" k="45" />
487 <hkern g1="k" g2="W" k="45" />
488 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="18" />
489 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="Y,Yacute,Ydieresis" k="184" />
490 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="T" k="188" />
491 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="V" k="182" />
492 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="W" k="141" />
493 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="61" />
494 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="45" />
495 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="t" k="45" />
496 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="v" k="141" />
497 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="w" k="96" />
498 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="y,yacute,ydieresis" k="121" />
499 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="one" k="141" />
500 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="zero,six" k="74" />
501 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="seven" k="129" />
502 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="150" />
503 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="j" k="-82" />
504 <hkern g1="questiondown" g2="j" k="-328" />
505 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="219" />
506 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="4" />
507 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="s" k="61" />
508 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="J" k="176" />
509 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="150" />
510 <hkern g1="r" g2="Y,Yacute,Ydieresis" k="102" />
511 <hkern g1="r" g2="T" k="111" />
512 <hkern g1="r" g2="V" k="45" />
513 <hkern g1="r" g2="W" k="6" />
514 <hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="168" />
515 <hkern g1="r" g2="X" k="10" />
516 <hkern g1="s" g2="Y,Yacute,Ydieresis" k="188" />
517 <hkern g1="s" g2="T" k="193" />
518 <hkern g1="s" g2="V" k="86" />
519 <hkern g1="s" g2="W" k="72" />
520 <hkern g1="s" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="41" />
521 <hkern g1="s" g2="X" k="4" />
522 <hkern g1="s" g2="question" k="86" />
523 <hkern g1="t" g2="Y,Yacute,Ydieresis" k="66" />
524 <hkern g1="t" g2="T" k="125" />
525 <hkern g1="t" g2="V" k="47" />
526 <hkern g1="t" g2="W" k="25" />
527 <hkern g1="u,z" g2="Y,Yacute,Ydieresis" k="184" />
528 <hkern g1="u,z" g2="T" k="190" />
529 <hkern g1="u,z" g2="V" k="74" />
530 <hkern g1="u,z" g2="W" k="61" />
531 <hkern g1="u,z" g2="question" k="45" />
532 <hkern g1="v" g2="Y,Yacute,Ydieresis" k="123" />
533 <hkern g1="v" g2="T" k="139" />
534 <hkern g1="v" g2="V" k="25" />
535 <hkern g1="v" g2="W" k="4" />
536 <hkern g1="v" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
537 <hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="141" />
538 <hkern g1="v" g2="X" k="80" />
539 <hkern g1="w" g2="Y,Yacute,Ydieresis" k="123" />
540 <hkern g1="w" g2="T" k="139" />
541 <hkern g1="w" g2="V" k="6" />
542 <hkern g1="w" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="39" />
543 <hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="96" />
544 <hkern g1="w" g2="X" k="96" />
545 <hkern g1="y,yacute,ydieresis" g2="Y,Yacute,Ydieresis" k="123" />
546 <hkern g1="y,yacute,ydieresis" g2="T" k="139" />
547 <hkern g1="y,yacute,ydieresis" g2="V" k="6" />
548 <hkern g1="y,yacute,ydieresis" g2="W" k="4" />
549 <hkern g1="y,yacute,ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
550 <hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="121" />
551 <hkern g1="y,yacute,ydieresis" g2="X" k="80" />
552 <hkern g1="y,yacute,ydieresis" g2="question" k="4" />
553 <hkern g1="X" g2="hyphen,periodcentered,endash,emdash" k="86" />
554 <hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="61" />
555 <hkern g1="X" g2="t" k="61" />
556 <hkern g1="X" g2="v" k="80" />
557 <hkern g1="X" g2="w" k="96" />
558 <hkern g1="X" g2="y,yacute,ydieresis" k="80" />
559 <hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
560 <hkern g1="zero,nine" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="74" />
561 <hkern g1="seven" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="203" />
562 <hkern g1="x" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="80" />
563 <hkern g1="x" g2="Y,Yacute,Ydieresis" k="147" />
564 <hkern g1="x" g2="T" k="160" />
565 <hkern g1="x" g2="V" k="45" />
566 <hkern g1="x" g2="W" k="45" />
567 <hkern g1="parenleft,bracketleft,braceleft" g2="j" k="-225" />
568 </font>
569 </defs></svg>
docs/_themes/lucuma/static/fonts/proximanova-light-webfont.ttf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-light-webfont.woff less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-light-webfont.woff2 less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-lightitalic-webfont.eot less more
Binary diff not shown
+0
-568
docs/_themes/lucuma/static/fonts/proximanova-lightitalic-webfont.svg less more
0 <?xml version="1.0" standalone="no"?>
1 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
2 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
3 <metadata></metadata>
4 <defs>
5 <font id="proxima_novalight_italic" horiz-adv-x="1169" >
6 <font-face units-per-em="2048" ascent="1618" descent="-430" />
7 <missing-glyph horiz-adv-x="530" />
8 <glyph unicode="&#xfb01;" horiz-adv-x="978" d="M90 0l199 895h-164l20 94h164l19 90q68 307 307 307q92 0 156 -43l-48 -86q-41 33 -106 33q-83 0 -130.5 -53.5t-70.5 -157.5l-20 -90h202l-22 -94h-201l-196 -895h-109zM598 0l219 989h107l-219 -989h-107zM838 1217q0 39 29.5 64.5t62.5 25.5q32 0 54 -21t22 -51 q0 -39 -30 -64.5t-65 -25.5q-31 0 -52 21.5t-21 50.5z" />
9 <glyph unicode="&#xfb02;" horiz-adv-x="978" d="M90 0l199 895h-164l20 94h164l19 90q68 307 307 307q92 0 156 -43l-48 -86q-41 33 -106 33q-83 0 -130.5 -53.5t-70.5 -157.5l-20 -90h202l-22 -94h-201l-196 -895h-109zM598 0l301 1366h107l-301 -1366h-107z" />
10 <glyph unicode="&#xfb03;" horiz-adv-x="1521" d="M90 0l199 895h-164l20 94h164l19 90q72 307 307 307q121 0 196 -75l-65 -76q-48 55 -129 55q-83 0 -130.5 -53.5t-70.5 -157.5l-20 -90h202l-22 -94h-201l-196 -895h-109zM633 0l198 895h-163l20 94h164l18 90q68 307 308 307q91 0 155 -43l-47 -86q-41 33 -106 33 q-83 0 -130.5 -53.5t-70.5 -157.5l-21 -90h203l-22 -94h-201l-197 -895h-108zM1141 0l219 989h106l-219 -989h-106zM1380 1217q0 39 29.5 64.5t63.5 25.5q32 0 53.5 -21t21.5 -51q0 -39 -29.5 -64.5t-64.5 -25.5q-31 0 -52.5 21.5t-21.5 50.5z" />
11 <glyph unicode="&#xfb04;" horiz-adv-x="1521" d="M90 0l199 895h-164l20 94h164l19 90q72 307 307 307q121 0 196 -75l-65 -76q-48 55 -129 55q-83 0 -130.5 -53.5t-70.5 -157.5l-20 -90h202l-22 -94h-201l-196 -895h-109zM633 0l198 895h-163l20 94h164l18 90q68 307 308 307q91 0 155 -43l-47 -86q-41 33 -106 33 q-83 0 -130.5 -53.5t-70.5 -157.5l-21 -90h203l-22 -94h-201l-197 -895h-108zM1141 0l301 1366h106l-301 -1366h-106z" />
12 <glyph horiz-adv-x="0" />
13 <glyph horiz-adv-x="682" />
14 <glyph unicode=" " horiz-adv-x="530" />
15 <glyph unicode="&#x09;" horiz-adv-x="530" />
16 <glyph unicode="&#xa0;" horiz-adv-x="530" />
17 <glyph unicode="!" horiz-adv-x="448" d="M39 63q0 40 29 68.5t69 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29 -69.5t-69 -28.5q-35 0 -58.5 24t-23.5 59zM150 356l196 1010h137l-250 -1010h-83z" />
18 <glyph unicode="&#x22;" horiz-adv-x="649" d="M242 874q47 393 51 422q3 40 26.5 65t59.5 25q27 0 46 -19t19 -48q0 -1 -10 -41l-133 -404h-59zM510 874q47 393 51 422q5 41 27.5 65.5t58.5 24.5q28 0 47 -19t19 -48q0 -5 -2 -13.5t-5 -17t-4 -10.5l-133 -404h-59z" />
19 <glyph unicode="#" horiz-adv-x="1185" d="M23 381l43 84h229l244 436h-230l41 84h236l209 381h96l-209 -381h240l208 381h99l-213 -381h227l-41 -84h-231l-244 -436h236l-43 -84h-238l-213 -381h-96l215 381h-244l-211 -381h-96l211 381h-225zM391 465h238l245 436h-239z" />
20 <glyph unicode="$" horiz-adv-x="1196" d="M53 215l86 84q56 -79 140.5 -133t187.5 -74l127 567q-64 28 -103.5 47t-91 52t-80.5 65.5t-50 80.5t-21 104q0 157 134 269t327 112q23 0 47 -3l41 187h94l-45 -199q110 -22 197 -74t137 -124l-88 -82q-90 132 -269 174l-114 -514q63 -28 104.5 -48.5t92.5 -54.5t81 -68 t51 -83.5t21 -106.5q0 -62 -19.5 -122t-60 -113.5t-97 -94t-136 -64.5t-171.5 -24q-26 0 -40 2l-39 -182h-95l43 193q-132 22 -236 82.5t-155 144.5zM375 1020q0 -41 18.5 -75t56.5 -62.5t76 -48.5t97 -46l108 492q-10 2 -33 2q-134 0 -228.5 -79.5t-94.5 -182.5zM559 82h27 q87 0 156 27.5t108.5 71.5t59.5 95t20 103q0 44 -19 81t-57 67t-77 51.5t-97 46.5z" />
21 <glyph unicode="%" horiz-adv-x="1474" d="M152 0l1173 1366h94l-1175 -1366h-92zM184 989q0 173 106.5 285t252.5 112q125 0 210 -76t85 -196q0 -173 -107 -286t-252 -113q-125 0 -210 76.5t-85 197.5zM279 997q0 -88 57.5 -145t146.5 -57q104 0 182 90t78 219q0 88 -57.5 145.5t-146.5 57.5q-105 0 -182.5 -89.5 t-77.5 -220.5zM715 250q0 173 106.5 285t251.5 112q127 0 212 -76.5t85 -197.5q0 -173 -106.5 -285.5t-251.5 -112.5q-126 0 -211.5 77t-85.5 198zM809 258q0 -88 58.5 -145.5t146.5 -57.5q105 0 182.5 89.5t77.5 220.5q0 88 -57.5 145t-145.5 57q-105 0 -183.5 -89.5 t-78.5 -219.5z" />
22 <glyph unicode="&#x26;" horiz-adv-x="1308" d="M43 309q0 65 15 120.5t44.5 99.5t64.5 79.5t84.5 66.5t94 53.5t103.5 47.5q-52 132 -52 244q0 149 108.5 257.5t252.5 108.5q123 0 201.5 -60.5t78.5 -170.5q0 -49 -13 -92t-33 -76t-55 -64t-67 -52.5t-81 -46t-85.5 -40t-91.5 -37.5q-13 -5 -20 -8q40 -87 119 -217 q64 -109 143 -229q142 153 231 321l89 -51q-134 -215 -263 -350q50 -69 166 -213h-147q-26 31 -103 133q-191 -158 -387 -158q-173 0 -285 88.5t-112 245.5zM166 324q0 -121 82.5 -187.5t202.5 -66.5q152 0 319 143q-111 162 -156 242q-89 150 -131 239q-72 -33 -123 -64 t-98.5 -75t-71.5 -102t-24 -129zM512 1022q0 -91 45 -203q60 23 96.5 38.5t85.5 40t78 47.5t57 53.5t41 67t13 79.5q0 72 -48.5 111.5t-119.5 39.5q-43 0 -86 -18.5t-79.5 -51.5t-59.5 -86.5t-23 -117.5z" />
23 <glyph unicode="'" horiz-adv-x="382" d="M242 874q47 393 51 422q3 40 26.5 65t59.5 25q27 0 46 -19t19 -48q0 -1 -10 -41l-133 -404h-59z" />
24 <glyph unicode="(" horiz-adv-x="464" d="M51 172q0 317 131.5 631.5t382.5 599.5l53 -53q-220 -296 -336 -597.5t-116 -629.5q0 -212 74 -490l-74 -41q-115 269 -115 580z" />
25 <glyph unicode=")" horiz-adv-x="464" d="M-156 -354q221 296 337 597.5t116 628.5q0 212 -74 490l74 41q115 -269 115 -580q0 -317 -131.5 -631.5t-382.5 -599.5z" />
26 <glyph unicode="*" horiz-adv-x="686" d="M186 1024l236 84l-186 129l51 61l172 -149l41 237h78l-66 -241l229 104l23 -69l-236 -84l187 -129l-53 -62l-170 150l-41 -238h-80l67 244l-229 -107z" />
27 <glyph unicode="+" horiz-adv-x="1015" d="M92 647l19 86h403l94 432h92l-94 -432h404l-21 -86h-403l-99 -444h-90l99 444h-404z" />
28 <glyph unicode="," horiz-adv-x="448" d="M-37 -184q57 29 102 77t58 95h-14q-28 0 -49 21.5t-21 51.5q0 41 28.5 70t67.5 29q38 0 63 -26.5t25 -72.5q0 -85 -63 -170.5t-148 -128.5z" />
29 <glyph unicode="-" horiz-adv-x="614" d="M49 446l21 99h491l-20 -99h-492z" />
30 <glyph unicode="." horiz-adv-x="448" d="M39 63q0 40 29 68.5t69 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29 -69.5t-69 -28.5q-35 0 -58.5 24t-23.5 59z" />
31 <glyph unicode="/" horiz-adv-x="577" d="M-121 -41l805 1448h96l-807 -1448h-94z" />
32 <glyph unicode="0" horiz-adv-x="1245" d="M133 500q0 120 27 244.5t81.5 239t128.5 204.5t176.5 144t217.5 54q209 0 317.5 -139.5t108.5 -382.5q0 -120 -26.5 -244.5t-80.5 -240t-127 -206t-175 -144.5t-216 -54q-209 0 -320.5 141.5t-111.5 383.5zM256 492q0 -89 17.5 -162t54.5 -129.5t99.5 -87.5t145.5 -31 q110 0 206 75t158 192t97 255t35 268q0 89 -17.5 161.5t-54.5 128.5t-99 87t-146 31q-89 0 -169 -49t-138.5 -130t-102 -183.5t-65 -212.5t-21.5 -213z" />
33 <glyph unicode="1" horiz-adv-x="630" d="M174 1049l371 317h106l-301 -1366h-117l265 1206l-269 -233z" />
34 <glyph unicode="2" horiz-adv-x="1191" d="M4 0l29 123q137 87 225 144.5t201.5 136t184.5 136t147.5 128t119 128.5t70 122t27.5 124q0 110 -87.5 174t-228.5 64q-217 0 -354 -137l-64 82q73 73 186 117t236 44q86 0 163 -20.5t139 -61t98.5 -107t36.5 -150.5q0 -54 -16.5 -109.5t-45 -107t-74 -107t-93.5 -104.5 t-115.5 -105t-129 -103t-143.5 -103t-150 -100.5t-157 -101.5h719l-23 -106h-901z" />
35 <glyph unicode="3" horiz-adv-x="1114" d="M2 260l94 62q45 -109 154 -174.5t242 -65.5q164 0 262 92t98 236q0 108 -89.5 174.5t-236.5 66.5q-70 0 -116 -4l26 111q18 -2 182 -2q94 0 173 30t130.5 95t51.5 155q0 104 -91.5 174t-240.5 70q-197 0 -350 -143l-58 82q76 78 187 122.5t227 44.5q197 0 321 -89.5 t124 -249.5q0 -78 -33 -144.5t-87.5 -110t-119 -69.5t-131.5 -31q106 -25 177 -101t71 -188q0 -86 -34.5 -164t-95.5 -136.5t-151 -93t-194 -34.5q-168 0 -306.5 80t-185.5 205z" />
36 <glyph unicode="4" horiz-adv-x="1107" d="M43 373l27 112l790 881h166l-197 -887h201l-22 -106h-201l-82 -373h-117l82 373h-647zM186 479h527l170 770z" />
37 <glyph unicode="5" horiz-adv-x="1191" d="M86 252l94 67q104 -237 385 -237q155 0 266 108t111 265q0 137 -92 213.5t-238 76.5q-158 0 -299 -102l-77 45l149 678h789l-23 -106h-672l-112 -506q51 40 128 67t164 27q109 0 199.5 -42t148.5 -131t58 -210q0 -131 -64 -242.5t-182 -179.5t-264 -68q-340 0 -469 277z " />
38 <glyph unicode="6" horiz-adv-x="1196" d="M125 467q0 93 16.5 193.5t49.5 204.5t87.5 197t123.5 165.5t164.5 115.5t205.5 43q138 0 239 -55.5t154 -156.5l-88 -76q-39 87 -119 134.5t-192 47.5q-85 0 -159 -35.5t-127 -92.5t-96.5 -136t-70.5 -157.5t-47 -166.5q-1 -3 -10 -39q64 73 178 132t232 59 q182 0 294.5 -95.5t112.5 -259.5q0 -135 -65.5 -253t-183.5 -189.5t-261 -71.5q-211 0 -324.5 128t-113.5 364zM238 436q0 -160 86 -257t243 -97q108 0 197 55.5t137.5 145t48.5 190.5q0 124 -87.5 196t-233.5 72q-212 0 -387 -196q-4 -36 -4 -109z" />
39 <glyph unicode="7" horiz-adv-x="1028" d="M137 0l848 1260h-749l22 106h895l-18 -82l-863 -1284h-135z" />
40 <glyph unicode="8" d="M76 317q0 156 117.5 261.5t310.5 140.5q-103 39 -176.5 114.5t-73.5 178.5q0 74 27.5 137t73 106t105.5 73t124.5 44t130.5 14q117 0 216 -38t161.5 -114t62.5 -177q0 -149 -110.5 -244t-290.5 -121q47 -20 90 -47t85.5 -67t67.5 -95t25 -118q0 -110 -64.5 -200 t-173.5 -140t-239 -50q-134 0 -239 38.5t-167.5 117t-62.5 186.5zM201 338q0 -121 99.5 -188.5t246.5 -67.5q89 0 169 33.5t133.5 101.5t53.5 156q0 53 -27.5 102t-71.5 83.5t-91.5 58.5t-94.5 36q-182 -12 -299.5 -98.5t-117.5 -216.5zM373 1006q0 -61 44.5 -116t103.5 -88 t120 -48q175 14 282 89t107 201q0 99 -93 166.5t-226 67.5q-139 0 -238.5 -73.5t-99.5 -198.5z" />
41 <glyph unicode="9" horiz-adv-x="1196" d="M111 190l86 76q39 -87 119.5 -134.5t193.5 -47.5q85 0 158.5 35.5t126 92.5t96.5 136t71.5 157.5t47.5 166.5q8 36 8 39q-64 -73 -178 -132t-232 -59q-183 0 -295 95t-112 259q0 135 66 253t184 190t260 72q211 0 324.5 -128t113.5 -364q0 -79 -11.5 -164.5t-37 -175.5 t-62 -173.5t-90 -158t-118 -129.5t-149 -87t-179.5 -32q-137 0 -237.5 56t-153.5 157zM324 891q0 -124 87.5 -196t233.5 -72q107 0 207 52t180 144q4 36 4 109q0 160 -85.5 257t-243.5 97q-162 0 -272.5 -117.5t-110.5 -273.5z" />
42 <glyph unicode=":" horiz-adv-x="444" d="M39 63q0 40 29 68.5t69 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29 -69.5t-69 -28.5q-35 0 -58.5 24t-23.5 59zM225 907q0 40 29.5 68.5t69.5 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29.5 -69t-69.5 -28q-35 0 -58.5 23.5t-23.5 58.5z" />
43 <glyph unicode=";" horiz-adv-x="448" d="M-37 -184q57 29 102 77t58 95h-14q-28 0 -49 21.5t-21 51.5q0 41 28.5 70t67.5 29q38 0 63 -26.5t25 -72.5q0 -85 -63 -170.5t-148 -128.5zM225 907q0 40 29.5 68.5t69.5 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29.5 -69t-69.5 -28q-35 0 -58.5 23.5t-23.5 58.5z" />
44 <glyph unicode="&#x3c;" horiz-adv-x="1015" d="M90 647l19 76l999 465l-25 -107l-876 -401l698 -399l-20 -97z" />
45 <glyph unicode="=" horiz-adv-x="1015" d="M45 442l21 84h897l-19 -84h-899zM135 842l19 86h897l-19 -86h-897z" />
46 <glyph unicode="&#x3e;" horiz-adv-x="1015" d="M-12 184l24 107l881 397l-703 404l21 96l795 -465l-17 -76z" />
47 <glyph unicode="?" horiz-adv-x="950" d="M195 1212q174 174 407 174q180 0 292 -83t112 -216q0 -74 -30 -134.5t-78 -100.5t-106 -74t-116.5 -62.5t-106.5 -57.5t-78 -68t-30 -86q0 -53 39 -92l-92 -52q-54 69 -54 148q0 60 29 108.5t75 81.5t101.5 62.5t111.5 59.5t102 63t75 81.5t29 108.5q0 94 -75.5 150.5 t-207.5 56.5q-200 0 -344 -147zM270 63q0 40 29.5 68.5t69.5 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29 -69.5t-70 -28.5q-34 0 -58 24t-24 59z" />
48 <glyph unicode="@" horiz-adv-x="1603" d="M113 500q0 163 67.5 313t179 257.5t260.5 172t306 64.5q188 0 336.5 -88.5t228.5 -238.5t80 -333q0 -112 -28 -203.5t-74.5 -149.5t-105.5 -89t-124 -31q-80 0 -129 51.5t-51 122.5l-2 12q-58 -80 -148 -133t-188 -53q-141 0 -227 89.5t-86 238.5q0 107 42 205 t110.5 166.5t157 109.5t179.5 41q97 0 165.5 -48t100.5 -122l27 133h100l-121 -577q-4 -24 -4 -39q0 -52 30 -82.5t73 -30.5q26 0 55.5 11t62.5 40t59 71t43 112t17 157q0 168 -73 302.5t-207 212t-305 77.5q-146 0 -283.5 -62t-237.5 -163t-160.5 -236.5t-60.5 -277.5 q0 -163 76 -296t212 -209.5t304 -76.5q197 0 383 117l35 -51q-200 -129 -426 -129q-183 0 -332 85t-233 232t-84 326zM514 506q0 -108 61 -177t166 -69t191 59.5t145 145.5l66 303q-23 66 -82.5 118t-151.5 52q-106 0 -198 -62t-144.5 -161.5t-52.5 -208.5z" />
49 <glyph unicode="A" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799z" />
50 <glyph unicode="B" horiz-adv-x="1259" d="M59 0l301 1366h527q142 0 240 -85.5t98 -223.5q0 -144 -93.5 -249t-224.5 -120q84 -22 141.5 -103.5t57.5 -178.5q0 -79 -28.5 -151t-84 -129.5t-146 -91.5t-204.5 -34h-584zM199 106h450q156 0 246 91t90 215q0 103 -67 169t-183 66h-416zM344 754h447q81 0 142.5 25.5 t95.5 68.5t50.5 92.5t16.5 103.5q0 92 -68.5 154t-167.5 62h-405z" />
51 <glyph unicode="C" horiz-adv-x="1374" d="M137 567q0 181 64.5 337.5t171 261t242.5 164t280 59.5q180 0 319.5 -76t217.5 -217l-113 -52q-68 122 -180.5 180t-251.5 58q-117 0 -228.5 -50.5t-199.5 -140.5t-141.5 -226t-53.5 -294q0 -221 134 -355t360 -134q206 0 387 156l82 -70q-99 -96 -223 -144.5t-252 -48.5 q-178 0 -317.5 73t-218.5 208.5t-79 310.5z" />
52 <glyph unicode="D" horiz-adv-x="1417" d="M59 0l301 1366h426q113 0 215 -44t177 -120t119 -185t44 -233q0 -115 -32.5 -226.5t-102 -212.5t-167 -177.5t-238.5 -122t-307 -45.5h-435zM199 106h319h-4q158 0 292 54.5t223.5 147t139.5 214.5t50 258q0 207 -130 343.5t-325 136.5h-309z" />
53 <glyph unicode="E" horiz-adv-x="1155" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-120 -541h749l-22 -106h-867z" />
54 <glyph unicode="F" horiz-adv-x="1110" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-143 -647h-117z" />
55 <glyph unicode="G" horiz-adv-x="1456" d="M137 567q0 175 61.5 329t165.5 261.5t244 169.5t293 62q178 0 313.5 -75t212.5 -206l-104 -53q-61 111 -177 169t-259 58q-120 0 -233 -53.5t-199.5 -145.5t-138.5 -226t-52 -286q0 -223 135 -356t359 -133q222 0 397 164l72 327h-516l22 107h635l-108 -490 q-221 -215 -508 -215q-278 0 -446.5 165.5t-168.5 426.5z" />
56 <glyph unicode="H" horiz-adv-x="1439" d="M59 0l301 1366h117l-133 -610h864l135 610h119l-301 -1366h-119l144 649h-867l-143 -649h-117z" />
57 <glyph unicode="I" horiz-adv-x="456" d="M59 0l301 1366h117l-301 -1366h-117z" />
58 <glyph unicode="J" horiz-adv-x="962" d="M-39 156l80 82q39 -74 109 -115t163 -41q136 0 221 84t117 229l215 971h117l-213 -971q-46 -210 -162 -315t-289 -105q-119 0 -213.5 46.5t-144.5 134.5z" />
59 <glyph unicode="K" horiz-adv-x="1200" d="M59 0l301 1366h117l-162 -733l813 733h158l-725 -651l479 -715h-139l-426 649l-192 -172l-107 -477h-117z" />
60 <glyph unicode="L" horiz-adv-x="991" d="M31 0l301 1366h119l-279 -1260h659l-20 -106h-780z" />
61 <glyph unicode="M" horiz-adv-x="1617" d="M59 0l301 1366h168l213 -1137l717 1137h180l-301 -1366h-118l268 1219l-766 -1219h-45l-230 1219l-270 -1219h-117z" />
62 <glyph unicode="N" horiz-adv-x="1431" d="M59 0l301 1366h119l596 -1167l260 1167h117l-301 -1366h-115l-598 1184l-262 -1184h-117z" />
63 <glyph unicode="O" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5z" />
64 <glyph unicode="P" d="M59 0l301 1366h490q148 0 248 -101.5t100 -240.5q0 -65 -17.5 -128.5t-57 -123.5t-96.5 -105t-143.5 -72.5t-191.5 -27.5h-389l-127 -567h-117zM326 674h381h-2q89 0 160.5 28t116 76t68 108.5t23.5 129.5q0 99 -72.5 171.5t-179.5 72.5h-366z" />
65 <glyph unicode="Q" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -205 -84.5 -381t-230.5 -289l92 -123l-94 -59l-90 121q-166 -91 -348 -91q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210 t107 -154.5t157 -92.5t191 -32q142 0 274 74l-176 239l94 60l174 -238q119 98 187.5 247t68.5 329q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5z" />
66 <glyph unicode="R" horiz-adv-x="1216" d="M59 0l301 1366h469q70 0 136 -23.5t118.5 -66t84.5 -109t32 -145.5q0 -193 -128.5 -319t-338.5 -132l268 -571h-133l-258 565h-309l-125 -565h-117zM326 672h376h5q172 0 269 99t97 245q0 104 -78 174t-178 70h-362z" />
67 <glyph unicode="S" horiz-adv-x="1189" d="M49 215l86 84q72 -102 187.5 -159.5t259.5 -57.5q87 0 156 27.5t108.5 71.5t59.5 95t20 103q0 48 -23.5 88t-63 69t-90.5 55t-107.5 49t-113 47.5t-107.5 55t-90.5 66.5t-63 87t-23.5 112q0 157 134 269t327 112q155 0 281 -58t190 -155l-89 -82q-62 93 -167 140.5 t-226 47.5q-134 0 -228.5 -79.5t-94.5 -182.5q0 -49 29.5 -90t77.5 -69t109.5 -57.5t125.5 -54t125.5 -59.5t109.5 -73.5t77.5 -96t29.5 -127.5q0 -62 -19.5 -122t-60 -113.5t-97 -94t-136 -64.5t-171.5 -24q-171 0 -314 68t-208 172z" />
68 <glyph unicode="T" horiz-adv-x="1155" d="M240 1260l22 106h1012l-23 -106h-446l-279 -1260h-118l278 1260h-446z" />
69 <glyph unicode="U" horiz-adv-x="1404" d="M166 420q0 46 10 104l184 842h119l-184 -840q-12 -48 -12 -92q0 -158 103 -255t286 -97q192 0 296.5 112t153.5 332l185 840h118l-184 -842q-30 -132 -73 -228.5t-109.5 -171t-163 -112t-223.5 -37.5q-235 0 -370.5 120t-135.5 325z" />
70 <glyph unicode="V" horiz-adv-x="1325" d="M221 1366h129l223 -1235l770 1235h142l-860 -1366h-146z" />
71 <glyph unicode="W" horiz-adv-x="1775" d="M229 1366h129l62 -1202l602 1202h106l70 -1202l594 1202h135l-690 -1366h-131l-70 1174l-585 -1174h-132z" />
72 <glyph unicode="X" horiz-adv-x="1320" d="M-72 0l701 709l-369 657h135l322 -580l565 580h160l-662 -672l391 -694h-133l-348 618l-604 -618h-158z" />
73 <glyph unicode="Y" horiz-adv-x="1265" d="M221 1366h131l314 -672l608 672h151l-714 -782l-129 -584h-119l131 584z" />
74 <glyph unicode="Z" horiz-adv-x="1189" d="M-8 0l22 102l1069 1158h-811l21 106h971l-21 -100l-1071 -1160h827l-22 -106h-985z" />
75 <glyph unicode="[" horiz-adv-x="466" d="M-121 -389l393 1778h357l-21 -89h-264l-356 -1601h264l-19 -88h-354z" />
76 <glyph unicode="\" horiz-adv-x="577" d="M201 1407h92l164 -1448h-92z" />
77 <glyph unicode="]" horiz-adv-x="466" d="M-162 -389l21 88h262l356 1601h-266l20 89h357l-395 -1778h-355z" />
78 <glyph unicode="^" horiz-adv-x="876" d="M78 682l508 684h86l205 -684h-93l-168 600l-434 -600h-104z" />
79 <glyph unicode="_" horiz-adv-x="1155" d="M-154 -170l21 88h1165l-20 -88h-1166z" />
80 <glyph unicode="`" horiz-adv-x="442" d="M207 1434h127l250 -295h-90z" />
81 <glyph unicode="a" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5z" />
82 <glyph unicode="b" d="M55 0l301 1366h107l-115 -526q62 81 149.5 127.5t190.5 46.5q172 0 278.5 -109t106.5 -297q0 -167 -63.5 -310.5t-183.5 -233t-271 -89.5q-119 0 -211 52.5t-145 140.5l-37 -168h-107zM217 252q39 -78 126 -129t202 -51q91 0 169.5 44t130.5 116.5t81.5 165t29.5 190.5 q0 151 -81.5 240.5t-217.5 89.5q-99 0 -189 -54.5t-146 -136.5z" />
83 <glyph unicode="c" horiz-adv-x="1011" d="M94 414q0 161 72 299t199 219.5t278 81.5q248 0 354 -180l-82 -62q-41 73 -112 109.5t-156 36.5q-131 0 -233.5 -73t-154.5 -187t-52 -246q0 -163 94.5 -251.5t243.5 -88.5q81 0 150 34t118 93l61 -74q-147 -150 -339 -150q-196 0 -318.5 116.5t-122.5 322.5z" />
84 <glyph unicode="d" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l118 545h109l-303 -1366h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5z" />
85 <glyph unicode="e" horiz-adv-x="1161" d="M94 412q0 122 43 233t116 192t175 129t215 48q193 0 306.5 -121t113.5 -307q0 -58 -16 -125h-836q-4 -24 -4 -58q0 -144 94 -239.5t268 -95.5q78 0 157.5 27t141.5 79l41 -78q-70 -54 -160.5 -87.5t-183.5 -33.5q-219 0 -345 120t-126 317zM221 545h731h6q3 15 3 45 q0 149 -87 240.5t-243 91.5q-147 0 -265 -111t-145 -266z" />
86 <glyph unicode="f" horiz-adv-x="542" d="M90 0l199 895h-164l20 94h164l19 90q29 144 105.5 225.5t201.5 81.5q121 0 196 -75l-65 -76q-48 55 -129 55q-83 0 -130.5 -53.5t-70.5 -157.5l-20 -90h202l-22 -94h-201l-196 -895h-109z" />
87 <glyph unicode="g" horiz-adv-x="1167" d="M8 -233l76 79q100 -151 350 -151q61 0 115.5 17t102 53t82.5 98t52 145l31 150q-63 -80 -153.5 -127t-196.5 -47q-165 0 -270 105t-105 306q0 95 23 186t67.5 169t106 137t143.5 93t174 34q104 0 204 -55t155 -138l39 168h108l-219 -981q-25 -110 -70 -190.5 t-105.5 -127.5t-130.5 -69t-153 -22q-148 0 -251.5 37.5t-174.5 130.5zM207 410q0 -154 80.5 -242t218.5 -88q91 0 182.5 50.5t151.5 125.5l108 479q-44 83 -137.5 133t-200.5 50q-120 0 -214 -76.5t-141.5 -191t-47.5 -240.5z" />
88 <glyph unicode="h" horiz-adv-x="1105" d="M55 0l301 1366h107l-115 -526q76 75 168.5 124.5t188.5 49.5q131 0 209.5 -62t78.5 -180q0 -38 -12 -84l-152 -688h-106l147 672q13 58 13 71q0 88 -60 131.5t-161 43.5q-86 0 -174.5 -50.5t-159.5 -124.5l-166 -743h-107z" />
89 <glyph unicode="i" horiz-adv-x="438" d="M55 0l219 989h107l-219 -989h-107zM295 1217q0 39 29.5 64.5t62.5 25.5q32 0 54 -21t22 -51q0 -39 -29.5 -64.5t-64.5 -25.5q-31 0 -52.5 21.5t-21.5 50.5z" />
90 <glyph unicode="j" horiz-adv-x="438" d="M-371 -313l64 82q25 -32 63 -53t80 -21q150 0 191 180l247 1114h107l-248 -1114q-31 -140 -99.5 -208t-185.5 -68q-149 0 -219 88zM295 1217q0 39 29.5 64.5t62.5 25.5q32 0 54 -21t22 -51q0 -39 -29.5 -64.5t-64.5 -25.5q-31 0 -52.5 21.5t-21.5 50.5z" />
91 <glyph unicode="k" horiz-adv-x="1034" d="M55 0l301 1366h107l-207 -934l700 557h150l-561 -446l340 -543h-131l-297 477l-230 -180l-65 -297h-107z" />
92 <glyph unicode="l" horiz-adv-x="438" d="M55 0l301 1366h107l-301 -1366h-107z" />
93 <glyph unicode="m" horiz-adv-x="1615" d="M55 0l219 989h107l-33 -149q35 40 75 74.5t107.5 67t133.5 32.5q59 0 108.5 -19.5t79 -50t45.5 -63.5t16 -64v-4q70 86 157.5 143.5t182.5 57.5q105 0 177.5 -64t72.5 -178q0 -26 -12 -84l-152 -688h-106l151 688q9 36 9 55q0 81 -52.5 128t-128.5 47q-74 0 -154.5 -50 t-142.5 -123l-163 -745h-109l154 688q8 62 8 68q-2 72 -50 117t-134 45q-72 0 -150.5 -49.5t-142.5 -123.5l-166 -745h-107z" />
94 <glyph unicode="n" horiz-adv-x="1105" d="M55 0l219 989h107l-33 -149q76 75 168.5 124.5t188.5 49.5q131 0 209.5 -62t78.5 -180q0 -38 -12 -84l-152 -688h-106l147 672q13 58 13 71q0 88 -60 131.5t-161 43.5q-86 0 -175 -50t-159 -123l-166 -745h-107z" />
95 <glyph unicode="o" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5z" />
96 <glyph unicode="p" horiz-adv-x="1161" d="M-29 -377l303 1366h107l-33 -149q62 81 149.5 127.5t190.5 46.5q172 0 278.5 -109t106.5 -297q0 -167 -63.5 -310.5t-183.5 -233t-271 -89.5q-119 0 -211 52.5t-145 140.5l-121 -545h-107zM217 252q39 -78 126 -129t202 -51q91 0 169.5 44t130.5 116.5t81.5 165 t29.5 190.5q0 151 -81.5 240.5t-217.5 89.5q-99 0 -189 -54.5t-146 -136.5z" />
97 <glyph unicode="q" horiz-adv-x="1161" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-303 -1366h-109l119 527q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5z" />
98 <glyph unicode="r" horiz-adv-x="649" d="M55 0l219 989h107l-37 -160q81 95 165 138t212 43l-27 -115q-36 6 -71 6q-85 0 -167 -53t-134 -127l-160 -721h-107z" />
99 <glyph unicode="s" horiz-adv-x="940" d="M16 150l76 73q41 -66 128.5 -111.5t195.5 -45.5q118 0 190 60.5t72 143.5q0 43 -29 77t-75.5 58.5t-103 46.5t-113 46.5t-103 53t-75.5 72t-29 97.5q0 125 97 209t263 84q122 0 219 -46.5t141 -115.5l-69 -70q-33 60 -117.5 101t-181.5 41q-110 0 -177 -51t-67 -128 q0 -41 29 -73.5t75.5 -55t103 -44t113 -46.5t103 -54.5t75.5 -75.5t29 -103q0 -131 -100 -224.5t-272 -93.5q-273 0 -398 175z" />
100 <glyph unicode="t" horiz-adv-x="563" d="M111 139q0 30 8 54l155 702h-163l20 94h164l59 271h109l-60 -271h201l-22 -94h-201l-152 -686q-4 -24 -4 -43q0 -94 101 -94q53 0 104 37l21 -86q-66 -48 -142 -48q-95 0 -146.5 40.5t-51.5 123.5z" />
101 <glyph unicode="u" horiz-adv-x="1105" d="M111 217q0 38 12 84l149 688h109l-150 -670q-10 -45 -10 -73q0 -88 59.5 -131t159.5 -43q88 0 177.5 50t158.5 124l166 743h107l-220 -989h-106l33 150q-179 -175 -357 -175q-131 0 -209.5 62t-78.5 180z" />
102 <glyph unicode="v" horiz-adv-x="985" d="M123 989h115l165 -864l551 864h125l-637 -989h-120z" />
103 <glyph unicode="w" horiz-adv-x="1472" d="M143 989h109l78 -839l465 839h90l92 -839l450 839h119l-540 -989h-103l-90 846l-465 -846h-102z" />
104 <glyph unicode="x" horiz-adv-x="980" d="M-76 0l502 508l-260 481h121l215 -407l395 407h135l-477 -481l281 -508h-121l-232 436l-424 -436h-135z" />
105 <glyph unicode="y" horiz-adv-x="985" d="M-94 -381l41 102q36 -18 96 -18q42 0 77.5 24.5t78.5 88.5l118 178l-194 995h115l165 -864l551 864h125l-780 -1206q-59 -94 -125.5 -139t-150.5 -45q-62 0 -117 20z" />
106 <glyph unicode="z" horiz-adv-x="960" d="M4 0l19 88l757 807h-577l20 94h723l-18 -86l-764 -809h590l-19 -94h-731z" />
107 <glyph unicode="{" horiz-adv-x="509" d="M-31 -190q0 34 8 55l101 448q4 24 4 37q0 46 -22 77.5t-58 31.5l18 82q57 0 92 40.5t48 104.5l100 449q29 124 103.5 189t181.5 65h127l-21 -89h-127q-67 0 -112 -43t-62 -122l-104 -465q-30 -141 -131 -178q59 -32 59 -111q0 -37 -8 -70l-98 -446q-5 -30 -5 -43 q0 -54 34 -88.5t85 -34.5h115l-21 -88h-100q-82 0 -144.5 55.5t-62.5 143.5z" />
108 <glyph unicode="|" horiz-adv-x="425" d="M211 -41v1448h88v-1448h-88z" />
109 <glyph unicode="}" horiz-adv-x="509" d="M-164 -389l21 88h125q68 0 113.5 43.5t62.5 122.5l102 465q33 141 133 180q-59 27 -59 108q0 37 8 70l98 447q4 24 4 43q0 54 -33.5 88t-84.5 34h-115l20 89h101q82 0 143.5 -55t61.5 -144q0 -34 -7 -55l-100 -449q-4 -24 -4 -37q0 -46 22 -77t58 -31l-19 -82 q-57 0 -91.5 -41t-47.5 -105l-100 -448q-29 -124 -103.5 -189t-181.5 -65h-127z" />
110 <glyph unicode="~" horiz-adv-x="1021" d="M141 887q23 99 54 180.5t74 150t101 106.5t126 38q56 0 93.5 -22.5t55.5 -58t28.5 -78.5t17.5 -86t17.5 -78.5t34.5 -58t62 -22.5q81 0 149.5 107.5t114.5 300.5l86 -10q-23 -99 -53.5 -180.5t-73 -151t-101 -108.5t-128.5 -39q-56 0 -93 22t-54.5 57.5t-28 78 t-17.5 85.5t-17.5 78.5t-34.5 57.5t-62 22q-81 0 -151 -107.5t-114 -298.5z" />
111 <glyph unicode="&#xa1;" horiz-adv-x="448" d="M-39 -377l250 1010h84l-197 -1010h-137zM225 911q0 41 29.5 70t69.5 29q35 0 58.5 -24.5t23.5 -59.5q0 -40 -29.5 -68.5t-69.5 -28.5q-35 0 -58.5 24t-23.5 58z" />
112 <glyph unicode="&#xa2;" horiz-adv-x="1011" d="M94 414q0 160 71.5 297.5t197.5 219.5t276 83l33 143h90l-35 -149q184 -26 270 -174l-82 -62q-68 118 -208 141l-187 -841h25q81 0 150 34t118 93l61 -74q-147 -150 -339 -150q-25 0 -37 2l-39 -182h-90l43 195q-146 31 -232 142t-86 282zM207 412q0 -131 60.5 -214 t164.5 -112l186 829q-124 -8 -219 -81.5t-143.5 -184t-48.5 -237.5z" />
113 <glyph unicode="&#xa3;" horiz-adv-x="1032" d="M2 84q158 62 265.5 176.5t107.5 231.5q0 28 -6 55h-322l19 86h270q-11 21 -53.5 85.5t-62 115t-19.5 112.5q0 83 37.5 163.5t101 141t153.5 98t189 37.5q136 0 250.5 -65t144.5 -166l-108 -49q-20 77 -99.5 127.5t-183.5 50.5q-147 0 -252.5 -94.5t-105.5 -247.5 q0 -61 20.5 -112.5t59 -110t51.5 -86.5h301l-19 -86h-258q4 -28 4 -41q0 -102 -73 -197.5t-166 -154.5q56 16 98 16q70 0 176 -45t166 -45q109 0 197 84l33 -96q-116 -97 -234 -97q-62 0 -118.5 15t-93 33.5t-92 33.5t-116.5 15q-96 0 -237 -82z" />
114 <glyph unicode="&#xa4;" horiz-adv-x="1069" d="M23 283l157 129q-35 64 -49 109.5t-14 111.5q0 193 164 354l-76 100l65 54l80 -99q122 88 273 88q167 0 292 -116l160 131l51 -62l-159 -131q63 -104 63 -221q0 -187 -164 -354l78 -98l-70 -56l-75 101q-126 -91 -271 -91q-170 0 -297 121l-161 -135zM217 645 q0 -139 89 -226t229 -87q157 0 276 115.5t119 271.5q0 139 -89 226t-229 87q-157 0 -276 -115.5t-119 -271.5z" />
115 <glyph unicode="&#xa5;" horiz-adv-x="1265" d="M-10 258l18 84h537l55 242h-537l17 86h479l-332 696h131l314 -672l608 672h152l-637 -696h465l-19 -86h-524l-53 -242h522l-19 -84h-522l-57 -258h-119l57 258h-536z" />
116 <glyph unicode="&#xa6;" horiz-adv-x="425" d="M211 -41v647h88v-647h-88zM211 760v647h88v-647h-88z" />
117 <glyph unicode="&#xa7;" horiz-adv-x="944" d="M-33 -2l78 68q47 -69 138 -108.5t200 -39.5q114 0 187 62t73 153q0 45 -29 79.5t-75 58t-101.5 45t-111 45.5t-101.5 53.5t-75 76t-29 105.5q0 102 82 179.5t231 96.5q-203 73 -203 228q0 113 96 199.5t257 86.5q129 0 228 -40.5t159 -112.5l-74 -62q-49 66 -132.5 99 t-174.5 33q-107 0 -179.5 -55t-72.5 -132q0 -45 29 -80t75.5 -58t103 -43.5t113 -44t103 -53.5t75.5 -78t29 -110q0 -96 -66 -174t-196 -115q84 -44 117 -95t33 -120q0 -59 -25 -114.5t-70.5 -99.5t-116.5 -70.5t-155 -26.5q-281 0 -420 164zM229 612q0 -33 14 -59.5 t34.5 -46t61.5 -39.5t75.5 -33.5t95.5 -34.5q127 36 186.5 98t59.5 132q0 72 -55 116t-160 82q-155 -21 -233.5 -79.5t-78.5 -135.5z" />
118 <glyph unicode="&#xa8;" horiz-adv-x="536" d="M143 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM561 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
119 <glyph unicode="&#xa9;" horiz-adv-x="1593" d="M131 684q0 192 94.5 355t257 257.5t353.5 94.5q192 0 355 -94.5t258 -257.5t95 -355q0 -143 -56 -274t-151 -226t-226 -151t-275 -56q-191 0 -353.5 95t-257 258t-94.5 354zM188 684q0 -175 87 -324.5t236.5 -237t324.5 -87.5q176 0 326 87.5t237.5 237t87.5 324.5 q0 176 -87.5 325.5t-237.5 236.5t-326 87q-131 0 -251 -51.5t-207 -138.5t-138.5 -207t-51.5 -252zM403 629q0 103 41.5 196t109 158t155 103t178.5 38q220 0 317 -163l-55 -39q-36 68 -104.5 104.5t-157.5 36.5q-101 0 -196 -55t-157.5 -156.5t-62.5 -222.5 q0 -134 91.5 -228t234.5 -94q64 0 128.5 27t108.5 69l35 -51q-129 -106 -272 -106q-181 0 -287.5 109.5t-106.5 273.5z" />
120 <glyph unicode="&#xaa;" horiz-adv-x="837" d="M186 928q0 104 44.5 195.5t125.5 147.5t179 56q80 0 141.5 -31t97.5 -86l23 101h88l-144 -643h-88l23 102q-96 -119 -232 -119q-108 0 -183 72t-75 205zM279 934q0 -100 52.5 -155.5t139.5 -55.5q119 0 221 117l70 311q-26 47 -85 75.5t-130 28.5q-113 0 -190.5 -95 t-77.5 -226z" />
121 <glyph unicode="&#xab;" horiz-adv-x="823" d="M59 498l410 362h125l-418 -373l238 -358h-109zM315 498l410 362h125l-418 -373l238 -358h-109z" />
122 <glyph unicode="&#xac;" horiz-adv-x="1021" d="M135 842l19 86h897l-107 -486h-90l88 400h-807z" />
123 <glyph unicode="&#xad;" horiz-adv-x="614" d="M49 446l21 99h491l-20 -99h-492z" />
124 <glyph unicode="&#xae;" horiz-adv-x="1011" d="M172 952q0 181 127 307.5t307 126.5q119 0 219 -57.5t157.5 -157.5t57.5 -219q0 -180 -127.5 -307t-308.5 -127q-180 0 -306 127t-126 307zM227 952q0 -156 110.5 -267.5t266.5 -111.5q157 0 269 112t112 267q0 158 -112 268.5t-269 110.5t-267 -110.5t-110 -268.5z M387 702l109 498h186q58 0 99.5 -35t41.5 -96q0 -71 -51.5 -119.5t-112.5 -48.5l91 -199h-74l-86 197h-98l-43 -197h-62zM504 958h141q46 0 79.5 30t33.5 73q0 38 -24.5 60t-61.5 22h-127z" />
125 <glyph unicode="&#xaf;" horiz-adv-x="743" d="M158 1210l16 78h741l-16 -78h-741z" />
126 <glyph unicode="&#xb0;" horiz-adv-x="577" d="M193 1147q0 98 69.5 168.5t167.5 70.5t169 -70.5t71 -168.5t-70.5 -167t-169.5 -69q-98 0 -167.5 69t-69.5 167zM274 1147q0 -65 45 -110.5t109 -45.5q65 0 113.5 46t48.5 110q0 66 -47.5 113t-112.5 47q-64 0 -110 -47t-46 -113z" />
127 <glyph unicode="&#xb1;" horiz-adv-x="1015" d="M-51 0l18 84h897l-18 -84h-897zM94 662l21 83h401l96 435h90l-94 -435h404l-19 -83h-403l-98 -447h-93l99 447h-404z" />
128 <glyph unicode="&#xb2;" horiz-adv-x="786" d="M186 862l19 80q70 42 111.5 67.5t101 63t94.5 62t80.5 58.5t72 58.5t55.5 55t44 57t25 55t10 56.5q0 69 -55.5 105t-131.5 36q-144 0 -231 -96l-45 61q107 113 276 113q51 0 98.5 -12t89.5 -36t67.5 -67t25.5 -100q0 -42 -16.5 -84t-41.5 -79t-70 -79t-85.5 -74.5 t-104.5 -75.5t-111.5 -72.5t-121.5 -74.5h436l-16 -78h-576z" />
129 <glyph unicode="&#xb3;" horiz-adv-x="786" d="M213 995l66 52q77 -121 243 -121q91 0 146 52.5t55 131.5q0 60 -59.5 98.5t-153.5 38.5q-43 0 -57 -2l16 78q62 -4 121 -4q92 0 148.5 42.5t56.5 115.5q0 64 -59 101.5t-142 37.5q-120 0 -223 -90l-41 59q51 47 123 78t145 31q122 0 205.5 -53t83.5 -152 q0 -92 -64.5 -149.5t-163.5 -65.5q63 -11 110.5 -59.5t47.5 -116.5q0 -97 -81 -173.5t-212 -76.5q-107 0 -188.5 38.5t-122.5 108.5z" />
130 <glyph unicode="&#xb4;" horiz-adv-x="442" d="M137 1139l381 295h129l-418 -295h-92z" />
131 <glyph unicode="&#xb5;" horiz-adv-x="1105" d="M-29 -377l303 1366h107l-154 -696q-6 -30 -6 -68q0 -86 49.5 -121.5t143.5 -35.5q92 0 192.5 49.5t165.5 118.5l170 753h107l-220 -989h-106l31 145q-81 -73 -187 -121.5t-207 -48.5q-128 0 -192 52l-90 -404h-107z" />
132 <glyph unicode="&#xb6;" horiz-adv-x="919" d="M162 981q0 97 50.5 185t143 144t203.5 56h385l-348 -1571h-78l332 1493h-191l-331 -1493h-78l192 867q-116 0 -198 91t-82 228z" />
133 <glyph unicode="&#xb7;" horiz-adv-x="448" d="M133 494q0 41 29 68.5t71 27.5q34 0 58 -23.5t24 -58.5q0 -40 -29 -68t-69 -28q-35 0 -59.5 24t-24.5 58z" />
134 <glyph unicode="&#xb8;" horiz-adv-x="405" d="M-182 -311l47 61q66 -69 170 -69q66 0 100.5 29.5t34.5 74.5q0 31 -22 50.5t-60 19.5q-46 0 -76 -37l-49 32l100 173h78l-84 -138q33 23 70 23q53 0 86 -31t33 -86q0 -79 -59.5 -128.5t-155.5 -49.5q-133 0 -213 76z" />
135 <glyph unicode="&#xb9;" horiz-adv-x="438" d="M250 1479l244 202h81l-180 -819h-94l152 690l-158 -135z" />
136 <glyph unicode="&#xba;" horiz-adv-x="829" d="M190 940q0 158 106.5 272.5t260.5 114.5q134 0 215.5 -79.5t81.5 -209.5q0 -158 -106.5 -272.5t-260.5 -114.5q-134 0 -215.5 79.5t-81.5 209.5zM283 940q0 -95 56.5 -154t149.5 -59q121 0 198 92.5t77 218.5q0 94 -57.5 152.5t-149.5 58.5q-121 0 -197.5 -91.5 t-76.5 -217.5z" />
137 <glyph unicode="&#xbb;" horiz-adv-x="823" d="M-23 129l418 373l-237 358h108l246 -368l-410 -363h-125zM231 129l420 373l-237 358h108l246 -368l-410 -363h-127z" />
138 <glyph unicode="&#xbc;" horiz-adv-x="1519" d="M86 0l1174 1366h94l-1176 -1366h-92zM180 1163l244 203h82l-180 -819h-95l152 690l-158 -135zM758 219l16 72l483 528h125l-116 -524h123l-15 -76h-123l-49 -219h-90l47 219h-401zM870 295h306l96 432z" />
139 <glyph unicode="&#xbd;" horiz-adv-x="1599" d="M86 0l1174 1366h94l-1176 -1366h-92zM180 1163l244 203h82l-180 -819h-95l152 690l-158 -135zM809 0l18 80q92 56 142 87t123.5 78.5t113.5 78t87.5 72t71 74t40 69.5t16.5 73q0 69 -55 105.5t-131 36.5q-144 0 -231 -97l-46 62q106 112 277 112q51 0 98.5 -12t89.5 -36 t67.5 -67t25.5 -100q0 -42 -16.5 -84t-41.5 -79t-70 -79t-85.5 -74t-105 -75.5t-111 -72.5t-121.5 -74h436l-17 -78h-575z" />
140 <glyph unicode="&#xbe;" horiz-adv-x="1759" d="M143 680l66 51q38 -59 101.5 -90t142.5 -31q91 0 145.5 53t54.5 132q0 60 -59.5 98.5t-153.5 38.5q-43 0 -57 -2l16 78q62 -4 121 -4q92 0 148.5 42t56.5 115q0 64 -59 101.5t-142 37.5q-120 0 -223 -90l-41 60q51 46 122.5 77t145.5 31q123 0 206 -52.5t83 -151.5 q0 -92 -64 -150t-163 -66q63 -11 110.5 -59.5t47.5 -116.5q0 -97 -81 -173.5t-212 -76.5q-107 0 -189 39t-123 109zM326 0l1173 1366h94l-1175 -1366h-92zM997 219l17 72l483 528h125l-117 -524h123l-14 -76h-123l-49 -219h-90l47 219h-402zM1110 295h305l96 432z" />
141 <glyph unicode="&#xbf;" horiz-adv-x="802" d="M-57 -100q0 75 30 135.5t78 101t106 74t116 62.5t106 58t78 68t30 86q0 52 -41 93l95 49q53 -64 53 -146q0 -60 -29 -108.5t-75 -81.5t-102 -63t-112 -59.5t-102 -63t-75 -82.5t-29 -109q0 -92 75.5 -148.5t208.5 -56.5q200 0 342 148l58 -80q-177 -174 -410 -174 q-180 0 -290.5 82.5t-110.5 214.5zM496 911q0 41 29 69t69 28q35 0 58.5 -23.5t23.5 -58.5q0 -40 -28.5 -68.5t-69.5 -28.5q-34 0 -58 24t-24 58z" />
142 <glyph unicode="&#xc0;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM629 1786h127l250 -295h-91z" />
143 <glyph unicode="&#xc1;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM758 1491l381 295h129l-418 -295h-92z" />
144 <glyph unicode="&#xc2;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM629 1491l264 295h111l137 -295h-78l-127 231l-221 -231h-86z" />
145 <glyph unicode="&#xc3;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM571 1499q25 123 83.5 199t146.5 76q43 0 72 -21.5t45 -52t30 -61.5t36.5 -52.5t55.5 -21.5q94 0 144 196h73q-26 -124 -84.5 -199t-146.5 -75q-43 0 -72 21.5t-45 52t-30 61.5 t-37 52.5t-56 21.5q-94 0 -141 -197h-74z" />
146 <glyph unicode="&#xc4;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM616 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM1034 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5 q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
147 <glyph unicode="&#xc5;" horiz-adv-x="1325" d="M-80 0l860 1366h146l258 -1366h-129l-62 336h-723l-209 -336h-141zM332 442h647l-148 799zM711 1595q0 87 64 151t151 64q78 0 128 -50t50 -128q0 -87 -64 -151t-151 -64q-78 0 -128 50t-50 128zM776 1602q0 -53 31.5 -86t83.5 -33q59 0 103 42.5t44 100.5q0 53 -31.5 86 t-82.5 33q-60 0 -104 -42.5t-44 -100.5z" />
148 <glyph unicode="&#xc6;" horiz-adv-x="1923" d="M-82 0l1163 1366h910l-23 -106h-747l-113 -506h733l-22 -107h-736l-118 -541h747l-22 -106h-867l74 336h-555l-283 -336h-141zM426 442h496l174 789z" />
149 <glyph unicode="&#xc7;" horiz-adv-x="1374" d="M137 567q0 181 64.5 337.5t171 261t242.5 164t280 59.5q180 0 319.5 -76t217.5 -217l-113 -52q-68 122 -180.5 180t-251.5 58q-117 0 -228.5 -50.5t-199.5 -140.5t-141.5 -226t-53.5 -294q0 -221 134 -355t360 -134q206 0 387 156l82 -70q-99 -96 -223 -144.5t-252 -48.5 q-27 0 -39 2l-56 -92q33 23 70 23q53 0 86 -31t33 -86q0 -79 -59.5 -128.5t-155.5 -49.5q-133 0 -213 76l47 61q66 -69 170 -69q66 0 100.5 29.5t34.5 74.5q0 31 -22 50.5t-60 19.5q-46 0 -76 -37l-49 32l78 134q-227 33 -365.5 190t-138.5 393z" />
150 <glyph unicode="&#xc8;" horiz-adv-x="1155" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-120 -541h749l-22 -106h-867zM567 1786h127l250 -295h-90z" />
151 <glyph unicode="&#xc9;" horiz-adv-x="1155" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-120 -541h749l-22 -106h-867zM696 1491l381 295h129l-418 -295h-92z" />
152 <glyph unicode="&#xca;" horiz-adv-x="1155" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-120 -541h749l-22 -106h-867zM563 1491l264 295h111l137 -295h-78l-127 231l-221 -231h-86z" />
153 <glyph unicode="&#xcb;" horiz-adv-x="1155" d="M59 0l301 1366h867l-23 -106h-749l-111 -506h733l-24 -107h-734l-120 -541h749l-22 -106h-867zM551 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -26 -59t-61 -25q-28 0 -47.5 19.5t-19.5 48.5zM969 1567q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5 q0 -34 -25 -59t-59 -25q-29 0 -49 19.5t-20 48.5z" />
154 <glyph unicode="&#xcc;" horiz-adv-x="456" d="M59 0l301 1366h117l-301 -1366h-117zM195 1786h127l249 -295h-90z" />
155 <glyph unicode="&#xcd;" horiz-adv-x="456" d="M59 0l301 1366h117l-301 -1366h-117zM324 1491l381 295h129l-418 -295h-92z" />
156 <glyph unicode="&#xce;" horiz-adv-x="456" d="M59 0l301 1366h117l-301 -1366h-117zM195 1491l264 295h110l138 -295h-78l-127 231l-221 -231h-86z" />
157 <glyph unicode="&#xcf;" horiz-adv-x="456" d="M59 0l301 1366h117l-301 -1366h-117zM180 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM598 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
158 <glyph unicode="&#xd0;" horiz-adv-x="1476" d="M51 633l23 102h207l139 631h426q113 0 215 -44t177 -120t119 -185t44 -233q0 -115 -32.5 -226.5t-102 -212.5t-167.5 -177.5t-239 -122t-307 -45.5h-434l139 633h-207zM258 106h315q158 0 292 54.5t223.5 147t139.5 214.5t50 258q0 207 -130 343.5t-325 136.5h-309 l-117 -525h367l-23 -102h-366z" />
159 <glyph unicode="&#xd1;" horiz-adv-x="1431" d="M59 0l301 1366h119l596 -1167l260 1167h117l-301 -1366h-115l-598 1184l-262 -1184h-117zM621 1499q25 123 83 199t146 76q43 0 72 -21.5t45 -52t30.5 -61.5t37 -52.5t55.5 -21.5q93 0 143 196h74q-26 -123 -85 -198.5t-147 -75.5q-43 0 -72 21.5t-44.5 52t-29.5 61.5 t-37 52.5t-56 21.5q-95 0 -142 -197h-73z" />
160 <glyph unicode="&#xd2;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM756 1786h127l250 -295h-91z" />
161 <glyph unicode="&#xd3;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM879 1491l381 295h129l-418 -295h-92z" />
162 <glyph unicode="&#xd4;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM750 1491l264 295h110l138 -295h-78l-127 231l-221 -231h-86z" />
163 <glyph unicode="&#xd5;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM690 1499q25 123 83.5 199t146.5 76q43 0 72 -21.5t45 -52t30 -61.5t36.5 -52.5t55.5 -21.5q94 0 144 196h73 q-26 -124 -84.5 -199t-146.5 -75q-43 0 -72 21.5t-45 52t-30 61.5t-37 52.5t-56 21.5q-94 0 -141 -197h-74z" />
164 <glyph unicode="&#xd6;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q127 0 238 -39.5t194.5 -113t131.5 -187t48 -252.5q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-128 0 -239.5 39.5t-195.5 113t-132 187t-48 252.5zM264 571q0 -116 39 -210t107 -154.5t157 -92.5t191 -32 q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 116 -39 210t-107 154.5t-157.5 92.5t-191.5 32q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM731 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5z M1149 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
165 <glyph unicode="&#xd7;" horiz-adv-x="1015" d="M106 375l383 315l-239 307l67 56l238 -310l385 314l51 -64l-383 -315l238 -307l-66 -54l-239 308l-381 -314z" />
166 <glyph unicode="&#xd8;" horiz-adv-x="1564" d="M137 567q0 170 60.5 323t162.5 262t241.5 173t293.5 64q219 0 379 -111l76 88h106l-119 -139q170 -163 170 -430q0 -226 -101.5 -415.5t-275 -298t-378.5 -108.5q-230 0 -387 115l-78 -90h-105l121 141q-166 163 -166 426zM264 571q0 -208 117 -338l815 955 q-133 94 -311 94q-123 0 -236.5 -53.5t-198.5 -146t-135.5 -226t-50.5 -285.5zM440 180q128 -98 318 -98q123 0 236.5 53.5t198.5 146t136 226.5t51 285q0 207 -123 340z" />
167 <glyph unicode="&#xd9;" horiz-adv-x="1404" d="M166 420q0 46 10 104l184 842h119l-184 -840q-12 -48 -12 -92q0 -158 103 -255t286 -97q192 0 296.5 112t153.5 332l185 840h118l-184 -842q-30 -132 -73 -228.5t-109.5 -171t-163 -112t-223.5 -37.5q-235 0 -370.5 120t-135.5 325zM672 1786h127l250 -295h-91z" />
168 <glyph unicode="&#xda;" horiz-adv-x="1404" d="M166 420q0 46 10 104l184 842h119l-184 -840q-12 -48 -12 -92q0 -158 103 -255t286 -97q192 0 296.5 112t153.5 332l185 840h118l-184 -842q-30 -132 -73 -228.5t-109.5 -171t-163 -112t-223.5 -37.5q-235 0 -370.5 120t-135.5 325zM795 1491l381 295h129l-418 -295h-92z " />
169 <glyph unicode="&#xdb;" horiz-adv-x="1404" d="M166 420q0 46 10 104l184 842h119l-184 -840q-12 -48 -12 -92q0 -158 103 -255t286 -97q192 0 296.5 112t153.5 332l185 840h118l-184 -842q-30 -132 -73 -228.5t-109.5 -171t-163 -112t-223.5 -37.5q-235 0 -370.5 120t-135.5 325zM674 1491l264 295h111l137 -295h-78 l-127 231l-221 -231h-86z" />
170 <glyph unicode="&#xdc;" horiz-adv-x="1404" d="M166 420q0 46 10 104l184 842h119l-184 -840q-12 -48 -12 -92q0 -158 103 -255t286 -97q192 0 296.5 112t153.5 332l185 840h118l-184 -842q-30 -132 -73 -228.5t-109.5 -171t-163 -112t-223.5 -37.5q-235 0 -370.5 120t-135.5 325zM655 1567q0 34 26 59t60 25 q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM1073 1567q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
171 <glyph unicode="&#xdd;" horiz-adv-x="1265" d="M221 1366h131l314 -672l608 672h151l-714 -782l-129 -584h-119l131 584zM735 1491l381 295h129l-418 -295h-92z" />
172 <glyph unicode="&#xde;" d="M59 0l301 1366h117l-55 -254h371q146 0 248 -99.5t102 -242.5q0 -65 -18 -128.5t-58 -123.5t-97.5 -105t-144 -72.5t-190.5 -27.5h-389l-70 -313h-117zM270 420h377q91 0 163.5 28.5t116 77.5t66.5 109t23 127q0 102 -74 173t-178 71h-365z" />
173 <glyph unicode="&#xdf;" horiz-adv-x="1183" d="M55 0l230 1042q34 152 136.5 248t256.5 96q82 0 156 -27t122 -81t48 -123q0 -54 -23 -96t-60 -69t-81.5 -49.5t-89 -43t-81.5 -43t-60 -56t-23 -75.5q0 -40 28.5 -71.5t73.5 -52.5t100 -40.5t110 -42.5t100 -51.5t73.5 -73.5t28.5 -102q0 -59 -23.5 -114t-68 -100.5 t-116.5 -72.5t-161 -27q-138 0 -232.5 43.5t-174.5 141.5l75 67q123 -161 334 -161q120 0 190 63t70 145q0 43 -28.5 76t-74 55t-100.5 41.5t-110 42t-100.5 50t-74 71t-28.5 99.5t23 101t59.5 74t81 53.5t89 45t81 41.5t59.5 50t23 65q0 67 -68 109t-147 42 q-103 0 -181 -67t-104 -181l-231 -1042h-107z" />
174 <glyph unicode="&#xe0;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM440 1434h127l250 -295h-90z" />
175 <glyph unicode="&#xe1;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM569 1139l381 295h129l-417 -295h-93z" />
176 <glyph unicode="&#xe2;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM442 1139l265 295h110l137 -295h-77l-127 231l-222 -231h-86z" />
177 <glyph unicode="&#xe3;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM383 1147q25 123 83 198.5t146 75.5q43 0 72 -21.5t45 -52t30.5 -61.5t37 -52.5t55.5 -21.5q93 0 143 197h74q-26 -124 -84.5 -199t-146.5 -75q-43 0 -72 21.5t-45 52t-30 61t-37 52t-56 21.5q-94 0 -141 -196h-74 z" />
178 <glyph unicode="&#xe4;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM432 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM850 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5 t-20.5 48.5z" />
179 <glyph unicode="&#xe5;" d="M92 381q0 125 38 240t104.5 202t165 139t212.5 52q118 0 211 -52.5t146 -140.5l35 168h108l-219 -989h-109l35 150q-64 -81 -151 -128t-189 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q100 0 191 54.5t145 135.5l104 475q-39 78 -125.5 129.5 t-201.5 51.5q-119 0 -215.5 -75.5t-146.5 -193t-50 -248.5zM545 1305q0 87 64 151t151 64q78 0 128 -50.5t50 -128.5q0 -87 -64 -151t-151 -64q-78 0 -128 50.5t-50 128.5zM610 1311q0 -53 31.5 -86t83.5 -33q59 0 103 42.5t44 100.5q0 53 -31.5 86t-82.5 33 q-60 0 -104 -42.5t-44 -100.5z" />
180 <glyph unicode="&#xe6;" horiz-adv-x="1939" d="M92 381q0 168 63.5 311.5t183.5 232.5t271 89q119 0 212.5 -52.5t144.5 -140.5l37 168h108l-41 -186q73 98 171.5 154.5t209.5 56.5q188 0 288.5 -117.5t100.5 -306.5q0 -71 -14 -129h-826q-4 -24 -4 -58q0 -144 94.5 -239.5t268.5 -95.5q159 0 289 106l41 -78 q-157 -121 -330 -121q-165 0 -269.5 80.5t-138.5 214.5l-59 -270h-109l33 150q-62 -81 -149.5 -128t-188.5 -47q-173 0 -280 109t-107 297zM209 401q0 -151 81.5 -240t217.5 -89q99 0 189.5 54.5t146.5 135.5l104 475q-39 78 -125.5 129.5t-201.5 51.5q-119 0 -215.5 -75.5 t-146.5 -193t-50 -248.5zM1012 545h725q4 20 4 45q0 150 -82.5 241t-237.5 91q-147 0 -264.5 -111t-144.5 -266z" />
181 <glyph unicode="&#xe7;" horiz-adv-x="1011" d="M94 414q0 161 72 299t199 219.5t278 81.5q248 0 354 -180l-82 -62q-41 73 -112 109.5t-156 36.5q-131 0 -233.5 -73t-154.5 -187t-52 -246q0 -163 94.5 -251.5t243.5 -88.5q81 0 150 34t118 93l61 -74q-147 -150 -339 -150q-5 0 -15 1t-14 1l-55 -92q33 23 69 23 q53 0 86 -31t33 -86q0 -79 -59.5 -128.5t-155.5 -49.5q-133 0 -213 76l47 61q66 -69 170 -69q66 0 100.5 29.5t34.5 74.5q0 31 -22 50.5t-60 19.5q-45 0 -75 -37l-50 32l78 134q-156 29 -248 140t-92 290z" />
182 <glyph unicode="&#xe8;" horiz-adv-x="1161" d="M94 412q0 122 43 233t116 192t175 129t215 48q193 0 306.5 -121t113.5 -307q0 -58 -16 -125h-836q-4 -24 -4 -58q0 -144 94 -239.5t268 -95.5q78 0 157.5 27t141.5 79l41 -78q-70 -54 -160.5 -87.5t-183.5 -33.5q-219 0 -345 120t-126 317zM221 545h731h6q3 15 3 45 q0 149 -87 240.5t-243 91.5q-147 0 -265 -111t-145 -266zM475 1434h127l250 -295h-90z" />
183 <glyph unicode="&#xe9;" horiz-adv-x="1161" d="M94 412q0 122 43 233t116 192t175 129t215 48q193 0 306.5 -121t113.5 -307q0 -58 -16 -125h-836q-4 -24 -4 -58q0 -144 94 -239.5t268 -95.5q78 0 157.5 27t141.5 79l41 -78q-70 -54 -160.5 -87.5t-183.5 -33.5q-219 0 -345 120t-126 317zM221 545h731h6q3 15 3 45 q0 149 -87 240.5t-243 91.5q-147 0 -265 -111t-145 -266zM604 1139l381 295h129l-418 -295h-92z" />
184 <glyph unicode="&#xea;" horiz-adv-x="1161" d="M94 412q0 122 43 233t116 192t175 129t215 48q193 0 306.5 -121t113.5 -307q0 -58 -16 -125h-836q-4 -24 -4 -58q0 -144 94 -239.5t268 -95.5q78 0 157.5 27t141.5 79l41 -78q-70 -54 -160.5 -87.5t-183.5 -33.5q-219 0 -345 120t-126 317zM221 545h731h6q3 15 3 45 q0 149 -87 240.5t-243 91.5q-147 0 -265 -111t-145 -266zM475 1139l264 295h111l137 -295h-78l-127 231l-221 -231h-86z" />
185 <glyph unicode="&#xeb;" horiz-adv-x="1161" d="M94 412q0 122 43 233t116 192t175 129t215 48q193 0 306.5 -121t113.5 -307q0 -58 -16 -125h-836q-4 -24 -4 -58q0 -144 94 -239.5t268 -95.5q78 0 157.5 27t141.5 79l41 -78q-70 -54 -160.5 -87.5t-183.5 -33.5q-219 0 -345 120t-126 317zM221 545h731h6q3 15 3 45 q0 149 -87 240.5t-243 91.5q-147 0 -265 -111t-145 -266zM463 1223q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -47.5 19.5t-19.5 48.5zM881 1223q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49 19.5t-20 48.5z " />
186 <glyph unicode="&#xec;" horiz-adv-x="438" d="M55 0l219 989h107l-219 -989h-107zM104 1434h127l250 -295h-90z" />
187 <glyph unicode="&#xed;" horiz-adv-x="438" d="M55 0l219 989h107l-219 -989h-107zM236 1139l380 295h129l-417 -295h-92z" />
188 <glyph unicode="&#xee;" horiz-adv-x="438" d="M55 0l219 989h107l-219 -989h-107zM104 1139l265 295h110l137 -295h-77l-127 231l-222 -231h-86z" />
189 <glyph unicode="&#xef;" horiz-adv-x="438" d="M55 0l219 989h107l-219 -989h-107zM94 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM512 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
190 <glyph unicode="&#xf0;" d="M94 395q0 123 41 234.5t110.5 192t165.5 128t201 47.5t199.5 -52.5t144.5 -162.5q-79 210 -249 383l-320 -94l-14 68l276 82q-59 54 -143 118l80 82q107 -80 188 -164l244 74l14 -67l-205 -62q117 -134 181.5 -284t64.5 -302q0 -176 -68.5 -322.5t-192.5 -232.5t-277 -86 q-195 0 -318 119t-123 301zM209 410q0 -150 87.5 -244t240.5 -94q112 0 207.5 67.5t151.5 183t56 250.5q0 60 -19.5 116.5t-57.5 105t-103 77.5t-149 29q-169 0 -291.5 -142t-122.5 -349z" />
191 <glyph unicode="&#xf1;" horiz-adv-x="1105" d="M59 0l220 989h106l-33 -149q76 75 168.5 124.5t188.5 49.5q131 0 209.5 -62t78.5 -180q0 -38 -12 -84l-151 -688h-107l147 672q13 58 13 71q0 88 -60 131.5t-161 43.5q-86 0 -175 -50t-159 -123l-166 -745h-107zM383 1147q25 123 83 198.5t146 75.5q43 0 72 -21.5t45 -52 t30.5 -61.5t37 -52.5t55.5 -21.5q93 0 143 197h74q-26 -124 -84.5 -199t-146.5 -75q-43 0 -72 21.5t-45 52t-30 61t-37 52t-56 21.5q-94 0 -141 -196h-74z" />
192 <glyph unicode="&#xf2;" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5zM473 1434h127l250 -295h-90z" />
193 <glyph unicode="&#xf3;" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5zM602 1139l381 295h129l-418 -295h-92z" />
194 <glyph unicode="&#xf4;" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5zM473 1139l264 295h111l137 -295h-78l-127 231l-221 -231h-86z" />
195 <glyph unicode="&#xf5;" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5zM414 1147q25 123 83 198.5t146 75.5q43 0 72 -21.5t45 -52t30.5 -61.5t37 -52.5t55.5 -21.5q93 0 143 197h74q-26 -123 -85 -198.5t-147 -75.5q-43 0 -72 21.5t-44.5 52t-29.5 61t-37 52t-56 21.5q-95 0 -142 -196h-73z" />
196 <glyph unicode="&#xf6;" d="M92 410q0 156 70 294.5t196.5 224t278.5 85.5q199 0 317.5 -118.5t118.5 -315.5q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-199 0 -317.5 119t-118.5 316zM209 414q0 -157 85 -249.5t236 -92.5q120 0 219 72.5t153 187.5t54 243q0 157 -85 250t-236 93 q-120 0 -219 -72.5t-153 -188t-54 -243.5zM461 1223q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -47.5 19.5t-19.5 48.5zM879 1223q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49 19.5t-20 48.5z" />
197 <glyph unicode="&#xf7;" horiz-adv-x="1046" d="M92 647l19 86h927l-18 -86h-928zM395 279q0 37 25.5 61.5t62.5 24.5q31 0 52.5 -21.5t21.5 -52.5q0 -36 -26.5 -61t-63.5 -25q-31 0 -51.5 21.5t-20.5 52.5zM571 1081q0 35 26.5 60.5t61.5 25.5q32 0 53 -21t21 -52q0 -37 -25.5 -61.5t-62.5 -24.5q-31 0 -52.5 21 t-21.5 52z" />
198 <glyph unicode="&#xf8;" d="M39 0l135 135q-82 111 -82 275q0 156 70 294.5t196.5 224t278.5 85.5q184 0 301 -105l78 80h94l-125 -127q88 -114 88 -282q0 -156 -70 -294.5t-196.5 -224.5t-278.5 -86q-194 0 -311 111l-84 -86h-94zM209 414q0 -120 45 -197l608 617q-87 84 -227 84q-120 0 -219 -72.5 t-153 -188t-54 -243.5zM295 164q86 -92 235 -92q120 0 219 72.5t153 187.5t54 243q0 122 -53 205z" />
199 <glyph unicode="&#xf9;" horiz-adv-x="1105" d="M111 217q0 38 12 84l149 688h109l-150 -670q-10 -45 -10 -73q0 -88 59.5 -131t159.5 -43q88 0 177.5 50t158.5 124l166 743h107l-220 -989h-106l33 150q-179 -175 -357 -175q-131 0 -209.5 62t-78.5 180zM444 1434h127l250 -295h-90z" />
200 <glyph unicode="&#xfa;" horiz-adv-x="1105" d="M111 217q0 38 12 84l149 688h109l-150 -670q-10 -45 -10 -73q0 -88 59.5 -131t159.5 -43q88 0 177.5 50t158.5 124l166 743h107l-220 -989h-106l33 150q-179 -175 -357 -175q-131 0 -209.5 62t-78.5 180zM571 1139l381 295h129l-417 -295h-93z" />
201 <glyph unicode="&#xfb;" horiz-adv-x="1105" d="M111 217q0 38 12 84l149 688h109l-150 -670q-10 -45 -10 -73q0 -88 59.5 -131t159.5 -43q88 0 177.5 50t158.5 124l166 743h107l-220 -989h-106l33 150q-179 -175 -357 -175q-131 0 -209.5 62t-78.5 180zM438 1139l264 295h111l137 -295h-78l-127 231l-221 -231h-86z" />
202 <glyph unicode="&#xfc;" horiz-adv-x="1105" d="M111 217q0 38 12 84l149 688h109l-150 -670q-10 -45 -10 -73q0 -88 59.5 -131t159.5 -43q88 0 177.5 50t158.5 124l166 743h107l-220 -989h-106l33 150q-179 -175 -357 -175q-131 0 -209.5 62t-78.5 180zM436 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5 q0 -34 -25.5 -59t-60.5 -25q-28 0 -48 19.5t-20 48.5zM854 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
203 <glyph unicode="&#xfd;" horiz-adv-x="985" d="M-94 -381l41 102q36 -18 96 -18q42 0 77.5 24.5t78.5 88.5l118 178l-194 995h115l165 -864l551 864h125l-780 -1206q-59 -94 -125.5 -139t-150.5 -45q-62 0 -117 20zM510 1139l381 295h129l-418 -295h-92z" />
204 <glyph unicode="&#xfe;" horiz-adv-x="1161" d="M-29 -377l385 1743h107l-115 -526q62 81 149.5 127.5t190.5 46.5q172 0 278.5 -109t106.5 -297q0 -167 -63.5 -310.5t-183.5 -233t-271 -89.5q-119 0 -211 52.5t-145 140.5l-121 -545h-107zM217 252q39 -78 126 -129t202 -51q91 0 169.5 44t130.5 116.5t81.5 165 t29.5 190.5q0 151 -81.5 240.5t-217.5 89.5q-99 0 -189 -54.5t-146 -136.5z" />
205 <glyph unicode="&#xff;" horiz-adv-x="985" d="M-94 -381l41 102q36 -18 96 -18q42 0 77.5 24.5t78.5 88.5l118 178l-194 995h115l165 -864l551 864h125l-780 -1206q-59 -94 -125.5 -139t-150.5 -45q-62 0 -117 20zM369 1223q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -47.5 19.5 t-19.5 48.5zM786 1223q0 34 26 59t60 25q29 0 48.5 -19.5t19.5 -48.5q0 -34 -25 -59t-59 -25q-29 0 -49.5 19.5t-20.5 48.5z" />
206 <glyph unicode="&#x152;" horiz-adv-x="2283" d="M137 567q0 177 62 331t167 260t245.5 167t293.5 61q116 0 211.5 -32t176.5 -113t120 -207l72 332h866l-22 -106h-748l-113 -506h734l-25 -107h-733l-119 -541h748l-23 -106h-866l51 233q-89 -122 -221 -190t-301 -68q-257 0 -416.5 165.5t-159.5 426.5zM264 571 q0 -224 132.5 -356.5t348.5 -132.5q157 0 299.5 84t227.5 231l104 473q-28 195 -155 302.5t-322 107.5q-128 0 -244.5 -54t-202.5 -147t-137 -225.5t-51 -282.5z" />
207 <glyph unicode="&#x153;" horiz-adv-x="1996" d="M92 410q0 116 41 225.5t111 193t172 134.5t217 51q93 0 169.5 -32t122.5 -81.5t72 -100t31 -95.5q180 309 457 309q185 0 300.5 -116t115.5 -312q0 -55 -17 -125h-827q-4 -20 -4 -58q0 -144 93.5 -239.5t264.5 -95.5q79 0 157.5 28t137.5 78l43 -78q-70 -56 -159.5 -88.5 t-182.5 -32.5q-78 0 -147 20.5t-117.5 53t-85.5 74t-56.5 83t-23.5 79.5q-28 -47 -48.5 -78t-64 -79.5t-87.5 -78t-111 -52t-142 -22.5q-193 0 -312.5 117t-119.5 318zM209 414q0 -156 83.5 -249t233.5 -93q117 0 215 70t152.5 185.5t54.5 247.5q0 88 -26 156t-71 107.5 t-100.5 59.5t-119.5 20q-115 0 -213 -70t-153.5 -185.5t-55.5 -248.5zM1067 545h729q4 24 4 45q0 145 -85.5 238.5t-239.5 93.5q-79 0 -152.5 -35.5t-125.5 -91t-86 -121.5t-44 -129z" />
208 <glyph unicode="&#x178;" horiz-adv-x="1265" d="M221 1366h131l314 -672l608 672h151l-714 -782l-129 -584h-119l131 584zM592 1567q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25.5 -59t-60.5 -25q-28 0 -47.5 19.5t-19.5 48.5zM1010 1567q0 34 26 59t60 25q29 0 48 -19.5t19 -48.5q0 -34 -25 -59t-59 -25 q-29 0 -49 19.5t-20 48.5z" />
209 <glyph unicode="&#x2c6;" horiz-adv-x="512" d="M141 1139l265 295h110l137 -295h-78l-126 231l-222 -231h-86z" />
210 <glyph unicode="&#x2dc;" horiz-adv-x="628" d="M143 1147q25 123 83.5 198.5t146.5 75.5q43 0 72 -21.5t45 -52t30 -61.5t36.5 -52.5t55.5 -21.5q94 0 144 197h73q-26 -124 -84.5 -199t-146.5 -75q-43 0 -72 21.5t-45 52t-30 61t-37 52t-56 21.5q-94 0 -141 -196h-74z" />
211 <glyph unicode="&#x2000;" horiz-adv-x="905" />
212 <glyph unicode="&#x2001;" horiz-adv-x="1810" />
213 <glyph unicode="&#x2002;" horiz-adv-x="905" />
214 <glyph unicode="&#x2003;" horiz-adv-x="1810" />
215 <glyph unicode="&#x2004;" horiz-adv-x="603" />
216 <glyph unicode="&#x2005;" horiz-adv-x="452" />
217 <glyph unicode="&#x2006;" horiz-adv-x="301" />
218 <glyph unicode="&#x2007;" horiz-adv-x="301" />
219 <glyph unicode="&#x2008;" horiz-adv-x="226" />
220 <glyph unicode="&#x2009;" horiz-adv-x="362" />
221 <glyph unicode="&#x200a;" horiz-adv-x="100" />
222 <glyph unicode="&#x2010;" horiz-adv-x="614" d="M49 446l21 99h491l-20 -99h-492z" />
223 <glyph unicode="&#x2011;" horiz-adv-x="614" d="M49 446l21 99h491l-20 -99h-492z" />
224 <glyph unicode="&#x2012;" horiz-adv-x="614" d="M49 446l21 99h491l-20 -99h-492z" />
225 <glyph unicode="&#x2013;" horiz-adv-x="1214" d="M49 446l21 99h1091l-20 -99h-1092z" />
226 <glyph unicode="&#x2014;" horiz-adv-x="1705" d="M49 446l21 99h1583l-21 -99h-1583z" />
227 <glyph unicode="&#x2018;" horiz-adv-x="448" d="M238 1087q0 84 62.5 169t148.5 130l49 -53q-57 -29 -102 -77t-58 -95h14q28 0 49 -22t21 -54q0 -39 -28.5 -67.5t-67.5 -28.5t-63.5 25t-24.5 73z" />
228 <glyph unicode="&#x2019;" horiz-adv-x="448" d="M236 1042q57 29 101.5 77t57.5 95h-14q-28 0 -49 22t-21 52q0 41 29 69.5t68 28.5t63.5 -25t24.5 -73q0 -84 -62.5 -169t-148.5 -130z" />
229 <glyph unicode="&#x201a;" horiz-adv-x="448" d="M-37 -184q57 29 102 77t58 95h-14q-28 0 -49 21.5t-21 51.5q0 41 28.5 70t67.5 29q38 0 63 -26.5t25 -72.5q0 -85 -63 -170.5t-148 -128.5z" />
230 <glyph unicode="&#x201c;" horiz-adv-x="739" d="M258 1087q0 85 62 169.5t147 129.5l51 -53q-57 -29 -102 -77t-58 -95h15q28 0 48.5 -22t20.5 -54q0 -39 -29.5 -67.5t-68.5 -28.5q-37 0 -61.5 25.5t-24.5 72.5zM547 1087q0 85 62 169.5t147 129.5l49 -53q-57 -30 -102 -78t-58 -94h14q30 0 51 -22t21 -54 q0 -39 -29.5 -67.5t-68.5 -28.5q-38 0 -62 25t-24 73z" />
231 <glyph unicode="&#x201d;" horiz-adv-x="739" d="M236 1042q57 29 101.5 77t57.5 95h-14q-28 0 -49 22t-21 52q0 41 29 69.5t68 28.5t63.5 -25t24.5 -73q0 -84 -62.5 -169t-148.5 -130zM524 1042q57 29 102 77t58 95h-14q-29 0 -49.5 21.5t-20.5 52.5q0 41 28.5 69.5t67.5 28.5q38 0 62 -25t24 -73q0 -85 -62 -169.5 t-147 -129.5z" />
232 <glyph unicode="&#x201e;" horiz-adv-x="739" d="M-37 -184q57 29 102 77t58 95h-14q-28 0 -49 21.5t-21 51.5q0 41 28.5 70t67.5 29q38 0 63 -26.5t25 -72.5q0 -85 -63 -170.5t-148 -128.5zM252 -184q57 30 102 78t58 94h-15q-29 0 -50 21t-21 52q0 41 29.5 70t68.5 29q38 0 62 -26.5t24 -72.5q0 -85 -62 -170.5 t-147 -128.5z" />
233 <glyph unicode="&#x2022;" horiz-adv-x="733" d="M154 477q0 93 70.5 161.5t164.5 68.5q82 0 136.5 -54.5t54.5 -136.5q0 -93 -71 -161t-165 -68q-82 0 -136 54t-54 136z" />
234 <glyph unicode="&#x2026;" horiz-adv-x="1345" d="M39 63q0 40 29 68.5t69 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29 -69.5t-69 -28.5q-35 0 -58.5 24t-23.5 59zM487 63q0 40 29.5 68.5t69.5 28.5q35 0 58.5 -24t23.5 -58q0 -41 -29.5 -69.5t-69.5 -28.5q-35 0 -58.5 24t-23.5 59zM936 63q0 40 29 68.5t69 28.5 q35 0 58.5 -24t23.5 -58q0 -41 -28.5 -69.5t-69.5 -28.5q-34 0 -58 24t-24 59z" />
235 <glyph unicode="&#x202f;" horiz-adv-x="362" />
236 <glyph unicode="&#x2039;" horiz-adv-x="567" d="M59 498l410 362h125l-418 -373l238 -358h-109z" />
237 <glyph unicode="&#x203a;" horiz-adv-x="567" d="M-23 129l418 373l-237 358h108l246 -368l-410 -363h-125z" />
238 <glyph unicode="&#x205f;" horiz-adv-x="452" />
239 <glyph unicode="&#x20ac;" horiz-adv-x="1413" d="M70 496l18 84h94q0 97 27 208h-74l19 84h79q57 156 167.5 274.5t250.5 180.5t289 62q180 0 319.5 -76t217.5 -217l-113 -52q-68 122 -180 180t-252 58q-177 0 -333.5 -110.5t-233.5 -299.5h694l-21 -84h-702q-27 -111 -27 -208h684l-18 -84h-662q23 -191 154 -302.5 t336 -111.5q206 0 387 156l82 -70q-99 -96 -223 -144.5t-252 -48.5q-251 0 -419.5 142.5t-191.5 378.5h-116z" />
240 <glyph unicode="&#x2122;" horiz-adv-x="929" d="M215 1313l10 53h312l-11 -53h-127l-88 -398h-57l88 398h-127zM512 915l98 451h88l60 -328l203 328h88l-99 -451h-57l82 373l-236 -373h-16l-72 373l-82 -373h-57z" />
241 <glyph unicode="&#x25fc;" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" />
242 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="J" k="-10" />
243 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="S" k="39" />
244 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="162" />
245 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="68" />
246 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="100" />
247 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="137" />
248 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="119" />
249 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="147" />
250 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="question" k="162" />
251 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="asterisk" k="217" />
252 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="203" />
253 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="10" />
254 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="10" />
255 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="u" k="23" />
256 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="v" k="41" />
257 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="w" k="39" />
258 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="y,yacute,ydieresis" k="41" />
259 <hkern g1="B" g2="T" k="39" />
260 <hkern g1="B" g2="V" k="25" />
261 <hkern g1="B" g2="W" k="20" />
262 <hkern g1="B" g2="Y,Yacute,Ydieresis" k="61" />
263 <hkern g1="B" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
264 <hkern g1="C,Ccedilla" g2="S" k="-4" />
265 <hkern g1="C,Ccedilla" g2="T" k="4" />
266 <hkern g1="C,Ccedilla" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="-4" />
267 <hkern g1="C,Ccedilla" g2="V" k="23" />
268 <hkern g1="C,Ccedilla" g2="W" k="20" />
269 <hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="47" />
270 <hkern g1="C,Ccedilla" g2="question" k="4" />
271 <hkern g1="C,Ccedilla" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="4" />
272 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="J" k="41" />
273 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="T" k="80" />
274 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="V" k="66" />
275 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="W" k="63" />
276 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Y,Yacute,Ydieresis" k="109" />
277 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="question" k="27" />
278 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
279 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="55" />
280 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="X" k="61" />
281 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Z" k="39" />
282 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="59" />
283 <hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="102" />
284 <hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="68" />
285 <hkern g1="F" g2="J" k="113" />
286 <hkern g1="F" g2="ampersand" k="6" />
287 <hkern g1="G" g2="V" k="45" />
288 <hkern g1="G" g2="Y,Yacute,Ydieresis" k="51" />
289 <hkern g1="G" g2="W" k="14" />
290 <hkern g1="G" g2="X" k="4" />
291 <hkern g1="G" g2="question" k="6" />
292 <hkern g1="G" g2="T" k="41" />
293 <hkern g1="G" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="4" />
294 <hkern g1="K" g2="Y,Yacute,Ydieresis" k="53" />
295 <hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="117" />
296 <hkern g1="K" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="76" />
297 <hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="47" />
298 <hkern g1="K" g2="t" k="72" />
299 <hkern g1="K" g2="u" k="41" />
300 <hkern g1="K" g2="v" k="123" />
301 <hkern g1="K" g2="w" k="82" />
302 <hkern g1="K" g2="x" k="47" />
303 <hkern g1="K" g2="y,yacute,ydieresis" k="123" />
304 <hkern g1="K" g2="hyphen,periodcentered,endash,emdash" k="102" />
305 <hkern g1="L" g2="V" k="184" />
306 <hkern g1="L" g2="Y,Yacute,Ydieresis" k="250" />
307 <hkern g1="L" g2="W" k="129" />
308 <hkern g1="L" g2="question" k="240" />
309 <hkern g1="L" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="238" />
310 <hkern g1="L" g2="T" k="205" />
311 <hkern g1="L" g2="ampersand" k="18" />
312 <hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="76" />
313 <hkern g1="L" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="53" />
314 <hkern g1="L" g2="t" k="66" />
315 <hkern g1="L" g2="u" k="35" />
316 <hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="59" />
317 <hkern g1="L" g2="asterisk" k="362" />
318 <hkern g1="L" g2="v" k="121" />
319 <hkern g1="L" g2="w" k="80" />
320 <hkern g1="L" g2="y,yacute,ydieresis" k="121" />
321 <hkern g1="P" g2="V" k="4" />
322 <hkern g1="P" g2="W" k="4" />
323 <hkern g1="P" g2="Y,Yacute,Ydieresis" k="41" />
324 <hkern g1="P" g2="hyphen,periodcentered,endash,emdash" k="76" />
325 <hkern g1="P" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="162" />
326 <hkern g1="P" g2="J" k="215" />
327 <hkern g1="P" g2="X" k="10" />
328 <hkern g1="P" g2="ampersand" k="47" />
329 <hkern g1="P" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="199" />
330 <hkern g1="P" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="25" />
331 <hkern g1="R" g2="T" k="20" />
332 <hkern g1="R" g2="V" k="20" />
333 <hkern g1="R" g2="Y,Yacute,Ydieresis" k="33" />
334 <hkern g1="R" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
335 <hkern g1="R" g2="ampersand" k="4" />
336 <hkern g1="R" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="61" />
337 <hkern g1="R" g2="s" k="6" />
338 <hkern g1="S" g2="v" k="6" />
339 <hkern g1="S" g2="w" k="4" />
340 <hkern g1="S" g2="y,yacute,ydieresis" k="6" />
341 <hkern g1="S" g2="T" k="27" />
342 <hkern g1="S" g2="V" k="23" />
343 <hkern g1="S" g2="W" k="20" />
344 <hkern g1="S" g2="Y,Yacute,Ydieresis" k="55" />
345 <hkern g1="S" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="18" />
346 <hkern g1="S" g2="t" k="39" />
347 <hkern g1="S" g2="x" k="25" />
348 <hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="37" />
349 <hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="121" />
350 <hkern g1="T" g2="J" k="168" />
351 <hkern g1="T" g2="ampersand" k="82" />
352 <hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="188" />
353 <hkern g1="T" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="252" />
354 <hkern g1="T" g2="S" k="-18" />
355 <hkern g1="T" g2="colon,semicolon" k="102" />
356 <hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="74" />
357 <hkern g1="T" g2="m,n,p,r,z" k="190" />
358 <hkern g1="T" g2="s" k="197" />
359 <hkern g1="T" g2="v" k="139" />
360 <hkern g1="T" g2="w" k="139" />
361 <hkern g1="T" g2="x" k="160" />
362 <hkern g1="T" g2="y,yacute,ydieresis" k="139" />
363 <hkern g1="T" g2="hyphen,periodcentered,endash,emdash" k="123" />
364 <hkern g1="T" g2="u" k="190" />
365 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="27" />
366 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
367 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="12" />
368 <hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="45" />
369 <hkern g1="V" g2="m,n,p,r,z" k="74" />
370 <hkern g1="V" g2="s" k="72" />
371 <hkern g1="V" g2="v" k="25" />
372 <hkern g1="V" g2="w" k="6" />
373 <hkern g1="V" g2="x" k="45" />
374 <hkern g1="V" g2="y,yacute,ydieresis" k="6" />
375 <hkern g1="V" g2="hyphen,periodcentered,endash,emdash" k="106" />
376 <hkern g1="V" g2="u" k="74" />
377 <hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="96" />
378 <hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
379 <hkern g1="V" g2="ampersand" k="12" />
380 <hkern g1="V" g2="J" k="188" />
381 <hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="18" />
382 <hkern g1="V" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="123" />
383 <hkern g1="V" g2="t" k="25" />
384 <hkern g1="V" g2="S" k="-23" />
385 <hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="25" />
386 <hkern g1="W" g2="m,n,p,r,z" k="61" />
387 <hkern g1="W" g2="s" k="31" />
388 <hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="80" />
389 <hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="141" />
390 <hkern g1="W" g2="ampersand" k="20" />
391 <hkern g1="W" g2="J" k="59" />
392 <hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="18" />
393 <hkern g1="W" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="82" />
394 <hkern g1="W" g2="t" k="25" />
395 <hkern g1="W" g2="u" k="61" />
396 <hkern g1="W" g2="x" k="45" />
397 <hkern g1="W" g2="v" k="4" />
398 <hkern g1="W" g2="y,yacute,ydieresis" k="4" />
399 <hkern g1="W" g2="hyphen,periodcentered,endash,emdash" k="66" />
400 <hkern g1="W" g2="S" k="-20" />
401 <hkern g1="Y,Yacute,Ydieresis" g2="u" k="184" />
402 <hkern g1="Y,Yacute,Ydieresis" g2="x" k="147" />
403 <hkern g1="Y,Yacute,Ydieresis" g2="v" k="123" />
404 <hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="123" />
405 <hkern g1="Y,Yacute,Ydieresis" g2="hyphen,periodcentered,endash,emdash" k="231" />
406 <hkern g1="Y,Yacute,Ydieresis" g2="S" k="12" />
407 <hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="106" />
408 <hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
409 <hkern g1="Y,Yacute,Ydieresis" g2="ampersand" k="84" />
410 <hkern g1="Y,Yacute,Ydieresis" g2="J" k="229" />
411 <hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="55" />
412 <hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="113" />
413 <hkern g1="Y,Yacute,Ydieresis" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="264" />
414 <hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="92" />
415 <hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,z" k="184" />
416 <hkern g1="Y,Yacute,Ydieresis" g2="s" k="205" />
417 <hkern g1="Y,Yacute,Ydieresis" g2="t" k="47" />
418 <hkern g1="Y,Yacute,Ydieresis" g2="w" k="123" />
419 <hkern g1="Z" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="39" />
420 <hkern g1="ampersand" g2="y,yacute,ydieresis" k="41" />
421 <hkern g1="ampersand" g2="T" k="197" />
422 <hkern g1="ampersand" g2="Y,Yacute,Ydieresis" k="236" />
423 <hkern g1="ampersand" g2="V" k="141" />
424 <hkern g1="ampersand" g2="W" k="131" />
425 <hkern g1="ampersand" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="53" />
426 <hkern g1="asterisk" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="217" />
427 <hkern g1="asterisk" g2="J" k="231" />
428 <hkern g1="b,o,p,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
429 <hkern g1="b,o,p,oslash,thorn" g2="Y,Yacute,Ydieresis" k="260" />
430 <hkern g1="b,o,p,oslash,thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
431 <hkern g1="b,o,p,oslash,thorn" g2="question" k="88" />
432 <hkern g1="b,o,p,oslash,thorn" g2="T" k="252" />
433 <hkern g1="b,o,p,oslash,thorn" g2="V" k="123" />
434 <hkern g1="b,o,p,oslash,thorn" g2="W" k="82" />
435 <hkern g1="b,o,p,oslash,thorn" g2="x" k="80" />
436 <hkern g1="c,cent,ccedilla" g2="T" k="176" />
437 <hkern g1="c,cent,ccedilla" g2="V" k="68" />
438 <hkern g1="c,cent,ccedilla" g2="W" k="45" />
439 <hkern g1="c,cent,ccedilla" g2="Y,Yacute,Ydieresis" k="127" />
440 <hkern g1="c,cent,ccedilla" g2="question" k="45" />
441 <hkern g1="c,cent,ccedilla" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
442 <hkern g1="colon,semicolon" g2="T" k="102" />
443 <hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="113" />
444 <hkern g1="e,ae,oe" g2="T" k="217" />
445 <hkern g1="e,ae,oe" g2="V" k="106" />
446 <hkern g1="e,ae,oe" g2="W" k="82" />
447 <hkern g1="e,ae,oe" g2="Y,Yacute,Ydieresis" k="225" />
448 <hkern g1="e,ae,oe" g2="question" k="68" />
449 <hkern g1="e,ae,oe" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="4" />
450 <hkern g1="e,ae,oe" g2="asterisk" k="39" />
451 <hkern g1="e,ae,oe" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
452 <hkern g1="eth" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="18" />
453 <hkern g1="f" g2="T" k="-82" />
454 <hkern g1="f" g2="V" k="-127" />
455 <hkern g1="f" g2="W" k="-127" />
456 <hkern g1="f" g2="X" k="-82" />
457 <hkern g1="f" g2="Y,Yacute,Ydieresis" k="-109" />
458 <hkern g1="f" g2="Z" k="-82" />
459 <hkern g1="f" g2="question" k="-121" />
460 <hkern g1="f" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="-141" />
461 <hkern g1="f" g2="asterisk" k="-141" />
462 <hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="86" />
463 <hkern g1="f" g2="ampersand" k="4" />
464 <hkern g1="f" g2="parenright,bracketright,braceright" k="-158" />
465 <hkern g1="f" g2="exclam,B,D,E,F,H,I,K,L,M,N,P,R,Egrave,Eacute,Ecircumflex,Edieresis,Igrave,Iacute,Icircumflex,Idieresis,Eth,Ntilde" k="-82" />
466 <hkern g1="f" g2="S" k="-45" />
467 <hkern g1="f" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="-82" />
468 <hkern g1="g,q" g2="T" k="190" />
469 <hkern g1="g,q" g2="V" k="74" />
470 <hkern g1="g,q" g2="W" k="61" />
471 <hkern g1="g,q" g2="Y,Yacute,Ydieresis" k="184" />
472 <hkern g1="g,q" g2="question" k="45" />
473 <hkern g1="g,q" g2="j" k="-88" />
474 <hkern g1="hyphen,periodcentered,endash,emdash" g2="V" k="106" />
475 <hkern g1="hyphen,periodcentered,endash,emdash" g2="W" k="66" />
476 <hkern g1="hyphen,periodcentered,endash,emdash" g2="X" k="86" />
477 <hkern g1="hyphen,periodcentered,endash,emdash" g2="Y,Yacute,Ydieresis" k="215" />
478 <hkern g1="k" g2="T" k="164" />
479 <hkern g1="k" g2="V" k="45" />
480 <hkern g1="k" g2="W" k="45" />
481 <hkern g1="k" g2="Y,Yacute,Ydieresis" k="129" />
482 <hkern g1="k" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="4" />
483 <hkern g1="k" g2="bullet" k="59" />
484 <hkern g1="k" g2="hyphen,periodcentered,endash,emdash" k="59" />
485 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="T" k="188" />
486 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="V" k="182" />
487 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="W" k="141" />
488 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="Y,Yacute,Ydieresis" k="184" />
489 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="150" />
490 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="61" />
491 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="j" k="-82" />
492 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="18" />
493 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="45" />
494 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="t" k="45" />
495 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="v" k="141" />
496 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="w" k="96" />
497 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="y,yacute,ydieresis" k="121" />
498 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="one" k="141" />
499 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="zero,six" k="74" />
500 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="seven" k="129" />
501 <hkern g1="questiondown" g2="j" k="-328" />
502 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="219" />
503 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="4" />
504 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="s" k="61" />
505 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="J" k="176" />
506 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="150" />
507 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="ampersand" k="-18" />
508 <hkern g1="r" g2="V" k="45" />
509 <hkern g1="r" g2="W" k="6" />
510 <hkern g1="r" g2="Y,Yacute,Ydieresis" k="102" />
511 <hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="168" />
512 <hkern g1="r" g2="T" k="111" />
513 <hkern g1="r" g2="X" k="10" />
514 <hkern g1="s" g2="V" k="86" />
515 <hkern g1="s" g2="W" k="72" />
516 <hkern g1="s" g2="Y,Yacute,Ydieresis" k="188" />
517 <hkern g1="s" g2="T" k="193" />
518 <hkern g1="s" g2="X" k="4" />
519 <hkern g1="s" g2="question" k="86" />
520 <hkern g1="s" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="41" />
521 <hkern g1="t" g2="V" k="47" />
522 <hkern g1="t" g2="W" k="25" />
523 <hkern g1="t" g2="Y,Yacute,Ydieresis" k="66" />
524 <hkern g1="t" g2="T" k="125" />
525 <hkern g1="a,u,z" g2="V" k="74" />
526 <hkern g1="a,u,z" g2="W" k="61" />
527 <hkern g1="a,u,z" g2="Y,Yacute,Ydieresis" k="184" />
528 <hkern g1="a,u,z" g2="T" k="190" />
529 <hkern g1="a,u,z" g2="question" k="45" />
530 <hkern g1="v" g2="V" k="25" />
531 <hkern g1="v" g2="W" k="4" />
532 <hkern g1="v" g2="Y,Yacute,Ydieresis" k="123" />
533 <hkern g1="v" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
534 <hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="141" />
535 <hkern g1="v" g2="T" k="139" />
536 <hkern g1="v" g2="X" k="80" />
537 <hkern g1="w" g2="V" k="6" />
538 <hkern g1="w" g2="Y,Yacute,Ydieresis" k="123" />
539 <hkern g1="w" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="39" />
540 <hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="96" />
541 <hkern g1="w" g2="T" k="139" />
542 <hkern g1="w" g2="X" k="96" />
543 <hkern g1="y,yacute,ydieresis" g2="V" k="6" />
544 <hkern g1="y,yacute,ydieresis" g2="W" k="4" />
545 <hkern g1="y,yacute,ydieresis" g2="Y,Yacute,Ydieresis" k="123" />
546 <hkern g1="y,yacute,ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
547 <hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="121" />
548 <hkern g1="y,yacute,ydieresis" g2="T" k="139" />
549 <hkern g1="y,yacute,ydieresis" g2="X" k="80" />
550 <hkern g1="y,yacute,ydieresis" g2="question" k="4" />
551 <hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
552 <hkern g1="X" g2="y,yacute,ydieresis" k="80" />
553 <hkern g1="X" g2="w" k="96" />
554 <hkern g1="X" g2="v" k="80" />
555 <hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="61" />
556 <hkern g1="X" g2="t" k="61" />
557 <hkern g1="X" g2="hyphen,periodcentered,endash,emdash" k="86" />
558 <hkern g1="zero,nine" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="74" />
559 <hkern g1="seven" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="203" />
560 <hkern g1="x" g2="V" k="45" />
561 <hkern g1="x" g2="W" k="45" />
562 <hkern g1="x" g2="Y,Yacute,Ydieresis" k="147" />
563 <hkern g1="x" g2="T" k="160" />
564 <hkern g1="x" g2="a,c,d,e,g,o,q,ae,ccedilla,eth,oslash,oe" k="80" />
565 <hkern g1="parenleft,bracketleft,braceleft" g2="j" k="-225" />
566 </font>
567 </defs></svg>
docs/_themes/lucuma/static/fonts/proximanova-lightitalic-webfont.ttf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-lightitalic-webfont.woff less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-lightitalic-webfont.woff2 less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-regular-webfont.eot less more
Binary diff not shown
+0
-570
docs/_themes/lucuma/static/fonts/proximanova-regular-webfont.svg less more
0 <?xml version="1.0" standalone="no"?>
1 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
2 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
3 <metadata></metadata>
4 <defs>
5 <font id="proxima_nova_rgregular" horiz-adv-x="1171" >
6 <font-face units-per-em="2048" ascent="1618" descent="-430" />
7 <missing-glyph horiz-adv-x="530" />
8 <glyph unicode="&#xfb01;" horiz-adv-x="1042" d="M33 854v135h164v76q0 151 78 236t208 85q95 0 152 -32l-39 -117q-41 23 -88 23q-77 0 -117.5 -50t-40.5 -145v-76h201v-135h-201v-854h-153v854h-164zM709 1233q0 43 30.5 73.5t73.5 30.5t72.5 -30.5t29.5 -73.5t-29.5 -73t-72.5 -30t-73.5 30t-30.5 73zM735 0v989h154 v-989h-154z" />
9 <glyph unicode="&#xfb02;" horiz-adv-x="1042" d="M33 854v135h164v76q0 151 78 236t208 85q95 0 152 -32l-39 -117q-41 23 -88 23q-77 0 -117.5 -50t-40.5 -145v-76h201v-135h-201v-854h-153v854h-164zM735 0v1366h154v-1366h-154z" />
10 <glyph unicode="&#xfb03;" horiz-adv-x="1622" d="M33 854v135h164v76q0 151 77 236t209 85q129 0 209 -75l-63 -99q-55 48 -121 48q-77 0 -117.5 -50t-40.5 -145v-76h201v-135h-201v-854h-153v854h-164zM614 854v135h164v76q0 151 78.5 236t208.5 85q95 0 152 -32l-39 -117q-41 23 -88 23q-77 0 -117.5 -50t-40.5 -145 v-76h201v-135h-201v-854h-154v854h-164zM1288 1233q0 43 31 73.5t74 30.5t72.5 -30.5t29.5 -73.5t-29.5 -73t-72.5 -30t-74 30t-31 73zM1315 0v989h153v-989h-153z" />
11 <glyph unicode="&#xfb04;" horiz-adv-x="1622" d="M33 854v135h164v76q0 151 77 236t209 85q129 0 209 -75l-63 -99q-55 48 -121 48q-77 0 -117.5 -50t-40.5 -145v-76h201v-135h-201v-854h-153v854h-164zM614 854v135h164v76q0 151 78.5 236t208.5 85q95 0 152 -32l-39 -117q-41 23 -88 23q-77 0 -117.5 -50t-40.5 -145 v-76h201v-135h-201v-854h-154v854h-164zM1315 0v1366h153v-1366h-153z" />
12 <glyph horiz-adv-x="0" />
13 <glyph horiz-adv-x="682" />
14 <glyph unicode=" " horiz-adv-x="530" />
15 <glyph unicode="&#x09;" horiz-adv-x="530" />
16 <glyph unicode="&#xa0;" horiz-adv-x="530" />
17 <glyph unicode="!" horiz-adv-x="471" d="M123 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5q0 -45 -33.5 -78.5t-78.5 -33.5q-46 0 -79.5 34t-33.5 78zM139 1366h193l-33 -983h-127z" />
18 <glyph unicode="&#x22;" horiz-adv-x="704" d="M111 1292q0 38 27 66t65 28q39 0 66.5 -27.5t27.5 -66.5q0 -13 -13.5 -125t-27.5 -217l-14 -106h-76q-55 419 -55 448zM408 1292q0 39 27.5 66.5t66.5 27.5q38 0 65 -28t27 -66q0 -13 -14 -125t-28 -217l-13 -106h-76q-55 419 -55 448z" />
19 <glyph unicode="#" horiz-adv-x="1210" d="M45 371l35 108h219l135 408h-221l33 106h225l123 373h127l-123 -373h225l123 373h125l-125 -373h219l-30 -106h-224l-137 -408h227l-32 -108h-232l-123 -371h-125l125 371h-227l-123 -371h-127l125 371h-217zM424 479h225l137 408h-225z" />
20 <glyph unicode="$" horiz-adv-x="1214" d="M88 193l102 131q64 -75 157 -127.5t208 -65.5v498q-54 15 -90 26t-84.5 30t-80.5 38t-67 48t-55.5 62t-33.5 77.5t-13 97.5q0 157 118.5 260.5t305.5 117.5v187h125v-189q244 -20 405 -188l-102 -125q-121 133 -303 158v-447q54 -15 91.5 -27t86.5 -32t83 -41t69.5 -52 t57 -66t35 -83t13.5 -104q0 -72 -24.5 -137.5t-74 -122.5t-136.5 -94.5t-201 -45.5v-182h-125v182q-149 9 -268 66.5t-199 149.5zM307 1018q0 -41 18 -73t54.5 -56t77 -40.5t98.5 -33.5v418q-109 -8 -178.5 -67t-69.5 -148zM680 129q134 14 197 82.5t63 153.5 q0 48 -19.5 85.5t-58 64.5t-80.5 45t-102 36v-467z" />
21 <glyph unicode="%" horiz-adv-x="1499" d="M63 1047q0 147 92.5 243t237.5 96q146 0 238 -95.5t92 -243.5q0 -143 -92 -238.5t-238 -95.5q-145 0 -237.5 95.5t-92.5 238.5zM186 1047q0 -98 58.5 -164t148.5 -66q91 0 149 66t58 164q0 102 -57.5 168.5t-149.5 66.5q-90 0 -148.5 -66.5t-58.5 -168.5zM262 0l873 1366 h114l-874 -1366h-113zM776 311q0 144 92.5 241t237.5 97q144 0 236 -97t92 -241t-91.5 -240t-236.5 -96t-237.5 96t-92.5 240zM897 311q0 -100 58 -165.5t151 -65.5q91 0 149 66t58 165q0 101 -58 167.5t-149 66.5q-93 0 -151 -66.5t-58 -167.5z" />
22 <glyph unicode="&#x26;" horiz-adv-x="1314" d="M76 356q0 77 23.5 140.5t69 112.5t93.5 84t115 71q-105 179 -105 307q0 135 98.5 225t245.5 90q136 0 222 -71t86 -197q0 -43 -11.5 -81.5t-26.5 -68t-45.5 -60t-54 -50t-67.5 -46t-69 -40t-75 -39.5q60 -80 160 -194q70 -85 162 -183q88 134 147 314l132 -60 q-88 -213 -187 -352q127 -130 266 -258h-213q-41 35 -149 143q-168 -168 -393 -168q-88 0 -164.5 24.5t-134.5 71t-91.5 120t-33.5 165.5zM240 367q0 -122 80.5 -193.5t195.5 -71.5q152 0 285 136q-141 149 -189 206q-103 119 -170 218q-97 -59 -149.5 -128t-52.5 -167z M430 1067q0 -96 82 -236q65 32 105 56t82.5 59t62.5 76t20 90q0 73 -45 114.5t-116 41.5q-80 0 -135.5 -56.5t-55.5 -144.5z" />
23 <glyph unicode="'" horiz-adv-x="407" d="M111 1292q0 38 27 66t65 28q39 0 66.5 -27.5t27.5 -66.5q0 -13 -13.5 -125t-27.5 -217l-14 -106h-76q-55 419 -55 448z" />
24 <glyph unicode="(" horiz-adv-x="507" d="M90 498q0 246 75 479.5t214 425.5l94 -70q-109 -213 -162 -403.5t-53 -431.5q0 -240 53 -431.5t162 -402.5l-94 -72q-139 192 -214 426t-75 480z" />
25 <glyph unicode=")" horiz-adv-x="507" d="M35 -336l94 -72q139 192 214 426t75 480t-75 479.5t-214 425.5l-94 -70q109 -213 162 -403.5t53 -431.5q0 -240 -53 -431.5t-162 -402.5z" />
26 <glyph unicode="*" horiz-adv-x="696" d="M70 985l209 107l-209 106l45 82l198 -129l-12 235h94l-12 -235l197 129l47 -82l-209 -106l209 -107l-47 -80l-197 127l12 -235h-94l12 235l-198 -127z" />
27 <glyph unicode="+" horiz-adv-x="1021" d="M59 637v106h394v424h116v-424h394v-106h-394v-436h-116v436h-394z" />
28 <glyph unicode="," horiz-adv-x="471" d="M117 -197q51 33 89 87t44 104q-8 -4 -29 -4q-41 0 -69.5 30t-28.5 74q0 45 31.5 78t76.5 33q55 0 92 -42.5t37 -113.5q0 -91 -46 -173.5t-119 -135.5z" />
29 <glyph unicode="-" horiz-adv-x="614" d="M61 428v135h492v-135h-492z" />
30 <glyph unicode="." horiz-adv-x="473" d="M123 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5t-33 -79t-79 -33t-79.5 33t-33.5 79z" />
31 <glyph unicode="/" horiz-adv-x="606" d="M0 -41l485 1448h121l-485 -1448h-121z" />
32 <glyph unicode="0" horiz-adv-x="1253" d="M104 682q0 104 18 202t58.5 190t100 160.5t148.5 110t198 41.5q108 0 197 -41.5t148.5 -110t100 -160.5t58.5 -190.5t18 -201.5t-18 -201.5t-58.5 -191t-100 -161.5t-148.5 -111t-197 -42q-109 0 -198 42t-148.5 111t-100 162t-58.5 191t-18 201zM279 682 q0 -108 18.5 -202.5t57.5 -176t109 -129t163 -47.5t163 47.5t109 129t57.5 176t18.5 202.5q0 85 -11 162t-37 149.5t-65 125.5t-99.5 84.5t-135.5 31.5t-135.5 -31.5t-99.5 -84.5t-65 -125.5t-37 -149.5t-11 -162z" />
33 <glyph unicode="1" horiz-adv-x="694" d="M43 1014l342 352h150v-1366h-170v1143l-220 -234z" />
34 <glyph unicode="2" horiz-adv-x="1204" d="M109 1171q77 103 202.5 159t272.5 56q87 0 167.5 -25t146 -73t105 -126.5t39.5 -176.5q0 -82 -34 -166.5t-88 -159.5t-145 -165.5t-179 -165t-217 -176.5h670v-152h-938v137q140 109 229 181.5t185 156t152 144t104 126t68.5 124t20.5 116.5q0 123 -84.5 186.5 t-201.5 63.5q-119 0 -213.5 -46t-157.5 -126z" />
35 <glyph unicode="3" horiz-adv-x="1140" d="M59 201l101 106q62 -82 162.5 -131t218.5 -49q148 0 233.5 69t85.5 187q0 123 -91 182.5t-249 59.5q-121 0 -141 -2v155q23 -2 141 -2q139 0 228.5 56.5t89.5 168.5q0 110 -87.5 172t-218.5 62q-110 0 -196.5 -41t-163.5 -125l-94 107q78 96 197 153t272 57 q202 0 331.5 -97t129.5 -265q0 -71 -27.5 -130t-72 -96.5t-93.5 -60t-100 -30.5q49 -5 101.5 -27.5t101.5 -62t80.5 -105t31.5 -143.5q0 -173 -131.5 -283.5t-353.5 -110.5q-165 0 -291.5 63.5t-194.5 162.5z" />
36 <glyph unicode="4" horiz-adv-x="1142" d="M66 346v141l585 879h234v-870h192v-150h-192v-346h-170v346h-649zM236 496h479v712z" />
37 <glyph unicode="5" horiz-adv-x="1208" d="M135 195l105 114q140 -182 376 -182q138 0 227 83.5t89 209.5q0 134 -87.5 214.5t-226.5 80.5q-182 0 -315 -127l-125 43v735h836v-152h-666v-475q55 54 139 88.5t181 34.5q87 0 165 -29t138.5 -82.5t96.5 -137.5t36 -187q0 -203 -139 -327t-349 -124q-315 0 -481 220z " />
38 <glyph unicode="6" horiz-adv-x="1210" d="M104 682q0 113 20.5 215t65 192t109 155.5t158 103.5t205.5 38q236 0 376 -163l-86 -127q-58 68 -124.5 103.5t-165.5 35.5q-77 0 -142 -30t-109.5 -81.5t-75 -120.5t-45 -146t-14.5 -159v-53q51 81 158.5 147t229.5 66q93 0 173.5 -27.5t141.5 -80.5t96 -137.5 t35 -190.5q0 -89 -33.5 -169.5t-93.5 -142.5t-151 -98.5t-199 -36.5q-112 0 -202 38t-150 103t-100.5 156t-58.5 193t-18 217zM283 508q4 -54 17.5 -105t40.5 -102t64.5 -89t94 -61.5t125.5 -23.5q76 0 137.5 26.5t98.5 69.5t57 93t20 100q0 144 -87.5 219.5t-225.5 75.5 q-101 0 -193 -56t-149 -147z" />
39 <glyph unicode="7" horiz-adv-x="1054" d="M63 1214v152h932v-117l-559 -1249h-188l551 1214h-736z" />
40 <glyph unicode="8" horiz-adv-x="1191" d="M106 346q0 129 94 223t232 136q-84 24 -149.5 64.5t-109.5 109t-44 153.5q0 89 40.5 158.5t108.5 111t149 63t169 21.5q87 0 168.5 -21.5t150 -63t109.5 -111t41 -158.5q0 -124 -86.5 -206.5t-218.5 -120.5q138 -41 231.5 -135.5t93.5 -223.5q0 -168 -140.5 -269.5 t-348.5 -101.5q-136 0 -246.5 43.5t-177 129t-66.5 198.5zM279 365q0 -107 92.5 -172.5t224.5 -65.5q131 0 224 65.5t93 172.5q0 51 -25 95t-62 72.5t-82.5 50.5t-82 32.5t-65.5 13.5q-29 -3 -65.5 -13.5t-82 -32.5t-82.5 -50.5t-62 -72.5t-25 -95zM301 1010 q0 -47 23.5 -86.5t56 -64t76.5 -44t76 -28t63 -13.5q31 5 63.5 13.5t76.5 28t77 44t56.5 64t23.5 86.5q0 103 -85 164t-212 61q-128 0 -211.5 -61t-83.5 -164z" />
41 <glyph unicode="9" horiz-adv-x="1210" d="M100 942q0 89 33.5 169.5t94 142.5t152 98.5t200.5 36.5q111 0 201 -38t150 -103t100.5 -156t58.5 -193t18 -217q0 -113 -21 -215.5t-65.5 -192t-109 -155.5t-157 -104t-204.5 -38q-232 0 -379 164l86 127q58 -68 126 -103.5t167 -35.5t175.5 46.5t121 125t66.5 171 t22 194.5q0 35 -2 53q-51 -81 -158 -147t-227 -66q-126 0 -225.5 47t-161.5 147.5t-62 241.5zM272 948q0 -144 88.5 -219.5t227.5 -75.5q100 0 193 56.5t149 148.5q-5 54 -18.5 104.5t-41 101.5t-65 88.5t-94 61t-125.5 23.5q-75 0 -136.5 -26.5t-99.5 -69t-58 -92.5 t-20 -101z" />
42 <glyph unicode=":" horiz-adv-x="460" d="M123 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5t-33 -79t-79 -33t-79.5 33t-33.5 79zM123 891q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5q0 -45 -33.5 -79t-78.5 -34t-79 34t-34 79z" />
43 <glyph unicode=";" horiz-adv-x="471" d="M117 -195q50 33 88.5 88t44.5 105q-8 -4 -29 -4q-42 0 -70 29.5t-28 74.5t31.5 78t76.5 33q55 0 92 -42.5t37 -113.5q0 -92 -45.5 -174t-119.5 -135zM123 891q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5q0 -45 -33.5 -79t-78.5 -34t-79 34t-34 79z" />
44 <glyph unicode="&#x3c;" horiz-adv-x="1021" d="M59 631v108l904 449v-129l-773 -375l773 -371v-129z" />
45 <glyph unicode="=" horiz-adv-x="1021" d="M59 432v109h904v-109h-904zM59 827v109h904v-109h-904z" />
46 <glyph unicode="&#x3e;" horiz-adv-x="1021" d="M59 184v129l772 371l-772 375v129l904 -449v-108z" />
47 <glyph unicode="?" horiz-adv-x="946" d="M37 1178q75 99 188 153.5t256 54.5q183 0 292.5 -90.5t109.5 -226.5q0 -63 -22 -116t-57 -90.5t-77 -70.5t-84 -62t-77 -57.5t-57 -64.5t-22 -76q0 -59 54 -98l-125 -55q-78 67 -78 168q0 53 20.5 97.5t53 77t71.5 61.5t78.5 56.5t72 56t53 66.5t20.5 82q0 81 -62.5 136 t-177.5 55q-111 0 -189 -43t-139 -125zM346 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5t-33 -79t-79 -33t-79.5 33t-33.5 79z" />
48 <glyph unicode="@" horiz-adv-x="1603" d="M72 500q0 162 67.5 312t179 258t260.5 172.5t306 64.5q189 0 337.5 -88t228 -235.5t79.5 -326.5q0 -115 -31 -209t-82 -152.5t-113 -90t-128 -31.5q-82 0 -132 48.5t-55 117.5v14q-56 -80 -143 -130t-182 -50q-142 0 -228 92t-86 242q0 104 41.5 200t108.5 164.5t154 109 t177 40.5q95 0 163.5 -45t99.5 -115l26 127h140l-117 -555q-4 -24 -4 -43q0 -49 27.5 -77.5t68.5 -28.5q26 0 54 11t59 39t55 68.5t39.5 106.5t15.5 147q0 254 -160 417t-419 163q-145 0 -281.5 -61t-236 -161.5t-159 -235t-59.5 -275.5q0 -162 75 -295t209.5 -209 t301.5 -76q199 0 381 115l37 -53q-200 -129 -426 -129q-183 0 -332 85t-233 232t-84 326zM498 516q0 -101 55.5 -164t153.5 -63q95 0 172.5 53.5t130.5 130.5l59 285q-21 58 -75 103.5t-136 45.5q-150 0 -255 -119t-105 -272z" />
49 <glyph unicode="A" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM385 455h580l-291 737z" />
50 <glyph unicode="B" horiz-adv-x="1288" d="M160 0v1366h608q176 0 279.5 -96t103.5 -252q0 -123 -70 -207t-170 -106q109 -17 188 -115.5t79 -220.5q0 -167 -105.5 -268t-290.5 -101h-622zM330 152h420q118 0 184.5 63t66.5 172q0 100 -66 168t-185 68h-420v-471zM330 774h409q112 0 174 61t62 158q0 96 -62 158.5 t-174 62.5h-409v-440z" />
51 <glyph unicode="C" horiz-adv-x="1384" d="M104 682q0 154 55 287t149 224.5t223.5 143.5t275.5 52q329 0 518 -271l-141 -80q-60 90 -161 144.5t-216 54.5q-226 0 -376 -155.5t-150 -399.5q0 -159 69 -286.5t189 -198t268 -70.5q114 0 215.5 55t161.5 144l143 -78q-199 -273 -520 -273q-146 0 -275.5 52 t-223.5 143.5t-149 224.5t-55 287z" />
52 <glyph unicode="D" horiz-adv-x="1433" d="M160 0v1366h467q208 0 369 -90.5t246 -245.5t85 -348q0 -145 -50 -270.5t-140 -216.5t-221.5 -143t-288.5 -52h-467zM330 152h297q161 0 282 72t181.5 191t60.5 267q0 150 -59.5 269t-180 191t-284.5 72h-297v-1062z" />
53 <glyph unicode="E" horiz-adv-x="1165" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-471h725v-152h-895z" />
54 <glyph unicode="F" horiz-adv-x="1128" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-623h-170z" />
55 <glyph unicode="G" horiz-adv-x="1460" d="M104 682q0 156 55.5 289.5t150 224.5t223.5 142t274 51q324 0 530 -254l-135 -86q-66 86 -170.5 137t-224.5 51q-226 0 -376 -155.5t-150 -399.5q0 -159 69 -286.5t189 -198t268 -70.5q113 0 211 43.5t158 103.5v277h-471v151h638v-491q-99 -111 -236.5 -174.5 t-299.5 -63.5q-145 0 -274 51.5t-223.5 143t-150 225t-55.5 289.5z" />
56 <glyph unicode="H" horiz-adv-x="1458" d="M160 0v1366h170v-588h798v588h170v-1366h-170v627h-798v-627h-170z" />
57 <glyph unicode="I" horiz-adv-x="489" d="M160 0v1366h170v-1366h-170z" />
58 <glyph unicode="J" horiz-adv-x="972" d="M23 133l90 129q107 -135 256 -135q125 0 199.5 79t74.5 208v952h170v-954q0 -143 -58.5 -243.5t-154.5 -147t-221 -46.5q-222 0 -356 158z" />
59 <glyph unicode="K" horiz-adv-x="1230" d="M160 0v1366h170v-704l604 704h213l-569 -647l620 -719h-213l-518 614l-137 -155v-459h-170z" />
60 <glyph unicode="L" horiz-adv-x="1009" d="M137 0v1366h170v-1214h635v-152h-805z" />
61 <glyph unicode="M" horiz-adv-x="1656" d="M160 0v1366h243l426 -1053l424 1053h244v-1366h-170v1149l-463 -1149h-69l-465 1149v-1149h-170z" />
62 <glyph unicode="N" horiz-adv-x="1449" d="M160 0v1366h174l786 -1067v1067h170v-1366h-164l-796 1090v-1090h-170z" />
63 <glyph unicode="O" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399z" />
64 <glyph unicode="P" horiz-adv-x="1202" d="M160 0v1366h549q198 0 313 -118.5t115 -293.5q0 -174 -115.5 -292.5t-312.5 -118.5h-379v-543h-170zM330 694h358q121 0 197 72t76 188t-76 188t-197 72h-358v-520z" />
65 <glyph unicode="Q" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361q0 -305 -188 -506l129 -137l-117 -102l-133 141q-159 -103 -371 -103q-198 0 -353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5q145 0 260 70l-194 211 l119 100l192 -209q127 156 127 383q0 242 -139 398.5t-365 156.5q-227 0 -364 -156t-137 -399z" />
66 <glyph unicode="R" horiz-adv-x="1247" d="M160 0v1366h549q190 0 310 -112.5t120 -299.5q0 -89 -29.5 -163t-79.5 -122.5t-113.5 -77t-134.5 -34.5l369 -557h-201l-346 543h-274v-543h-170zM330 692h358q121 0 198 73t77 189t-76.5 188t-198.5 72h-358v-522z" />
67 <glyph unicode="S" horiz-adv-x="1200" d="M78 193l102 131q74 -86 183.5 -141.5t244.5 -55.5q87 0 152.5 22t101 58t52 75.5t16.5 82.5q0 56 -27.5 98.5t-74.5 69t-107.5 47t-127.5 38.5t-134.5 37t-128 48t-107.5 67.5t-74.5 99t-27.5 138.5q0 168 133.5 274.5t337.5 106.5q300 0 483 -193l-102 -125 q-145 164 -395 164q-122 0 -201.5 -60.5t-79.5 -156.5q0 -49 27.5 -86t74.5 -60.5t107.5 -42.5t128 -37t134.5 -38.5t127.5 -52t107.5 -73t74.5 -105.5t27.5 -146q0 -78 -28 -147t-85 -127.5t-157.5 -93t-233.5 -34.5q-169 0 -301.5 58.5t-222.5 159.5z" />
68 <glyph unicode="T" horiz-adv-x="1167" d="M66 1214v152h1036v-152h-434v-1214h-170v1214h-432z" />
69 <glyph unicode="U" horiz-adv-x="1435" d="M160 530v836h172v-831q0 -191 99.5 -299.5t285.5 -108.5t286.5 109t100.5 299v831h172v-834q0 -261 -143 -409t-416 -148q-271 0 -414 148.5t-143 406.5z" />
70 <glyph unicode="V" horiz-adv-x="1347" d="M18 1366h195l461 -1180l461 1180h194l-549 -1366h-211z" />
71 <glyph unicode="W" horiz-adv-x="1808" d="M29 1366h188l303 -1139l314 1139h141l313 -1139l301 1139h191l-391 -1366h-185l-301 1102l-301 -1102h-184z" />
72 <glyph unicode="X" horiz-adv-x="1335" d="M25 0l532 700l-502 666h207l406 -545l403 545h209l-502 -664l533 -702h-207l-436 582l-437 -582h-206z" />
73 <glyph unicode="Y" horiz-adv-x="1282" d="M18 1366h199l424 -635l424 635h199l-537 -788v-578h-170v578z" />
74 <glyph unicode="Z" horiz-adv-x="1198" d="M98 0v141l768 1073h-768v152h987v-141l-770 -1073h785v-152h-1002z" />
75 <glyph unicode="[" horiz-adv-x="497" d="M82 -389v1778h381v-113h-260v-1552h260v-113h-381z" />
76 <glyph unicode="\" horiz-adv-x="606" d="M0 1407h121l485 -1448h-121z" />
77 <glyph unicode="]" horiz-adv-x="497" d="M35 -276h262v1552h-262v113h383v-1778h-383v113z" />
78 <glyph unicode="^" horiz-adv-x="884" d="M39 682l346 684h117l344 -684h-127l-277 571l-276 -571h-127z" />
79 <glyph unicode="_" horiz-adv-x="1155" d="M-6 -82h1167v-113h-1167v113z" />
80 <glyph unicode="`" horiz-adv-x="462" d="M0 1434h160l303 -295h-117z" />
81 <glyph unicode="a" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5z" />
82 <glyph unicode="b" horiz-adv-x="1177" d="M154 0v1366h153v-526q60 82 147.5 128t186.5 46q196 0 318 -142t122 -378q0 -238 -122 -378.5t-318 -140.5q-101 0 -188.5 47t-145.5 125v-147h-153zM307 268q41 -66 124 -110.5t173 -44.5q146 0 232 106.5t86 274.5t-86 275.5t-232 107.5q-89 0 -172.5 -46.5 t-124.5 -113.5v-449z" />
83 <glyph unicode="c" horiz-adv-x="1015" d="M96 496q0 146 61.5 263.5t174.5 186t258 68.5q229 0 362 -172l-102 -92q-93 127 -252 127q-155 0 -248.5 -107t-93.5 -274t94 -275t248 -108q155 0 252 129l102 -95q-133 -172 -362 -172q-218 0 -356 149t-138 372z" />
84 <glyph unicode="d" horiz-adv-x="1177" d="M96 494q0 235 123 377.5t318 142.5q99 0 185.5 -46t147.5 -128v526h154v-1366h-154v147q-58 -78 -145 -125t-188 -47q-196 0 -318.5 140.5t-122.5 378.5zM256 494q0 -168 85.5 -274.5t233.5 -106.5q89 0 171.5 45.5t123.5 111.5v447q-41 67 -124 113.5t-171 46.5 q-147 0 -233 -107.5t-86 -275.5z" />
85 <glyph unicode="e" horiz-adv-x="1153" d="M96 496q0 142 62.5 260.5t174.5 188t251 69.5q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -146 104.5 -244t249.5 -98q87 0 167.5 33t140.5 94l73 -100q-157 -154 -393 -154q-222 0 -364 145t-142 376zM258 559h649q-1 57 -20.5 113t-57.5 105t-102 79.5 t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60.5 -105t-25 -114.5z" />
86 <glyph unicode="f" horiz-adv-x="581" d="M33 854v135h164v76q0 151 77 236t209 85q129 0 209 -75l-63 -99q-55 48 -121 48q-77 0 -117.5 -50t-40.5 -145v-76h201v-135h-201v-854h-153v854h-164z" />
87 <glyph unicode="g" horiz-adv-x="1177" d="M96 500q0 235 122 374.5t319 139.5q99 0 185.5 -46t147.5 -128v149h154v-975q0 -113 -39 -196t-107.5 -129.5t-149.5 -68t-177 -21.5q-130 0 -221.5 32t-177.5 117l77 111q61 -71 137.5 -102t184.5 -31q136 0 227.5 71t91.5 217v150q-58 -79 -145.5 -127.5t-187.5 -48.5 q-197 0 -319 138t-122 374zM256 500q0 -166 85.5 -270.5t233.5 -104.5q88 0 170 46.5t125 113.5v434q-43 66 -125.5 112t-169.5 46q-148 0 -233.5 -104.5t-85.5 -272.5z" />
88 <glyph unicode="h" horiz-adv-x="1130" d="M156 0v1366h153v-520q56 69 151.5 118.5t201.5 49.5q315 0 315 -316v-698h-154v651q0 125 -57 175.5t-166 50.5q-85 0 -165 -45t-126 -109v-723h-153z" />
89 <glyph unicode="i" horiz-adv-x="460" d="M127 1233q0 43 30.5 73.5t73.5 30.5t73 -30.5t30 -73.5t-30 -73t-73 -30t-73.5 30t-30.5 73zM154 0v989h153v-989h-153z" />
90 <glyph unicode="j" horiz-adv-x="460" d="M-201 -328l54 115q61 -61 141 -61q73 0 116.5 44t43.5 134v1085h153v-1085q0 -147 -75.5 -226t-217.5 -79q-72 0 -119.5 17t-95.5 56zM127 1233q0 43 30.5 73.5t73.5 30.5t73 -30.5t30 -73.5t-30 -73t-73 -30t-73.5 30t-30.5 73z" />
91 <glyph unicode="k" horiz-adv-x="1052" d="M154 0v1366h153v-903l520 526h195l-438 -448l440 -541h-197l-354 444l-166 -161v-283h-153z" />
92 <glyph unicode="l" horiz-adv-x="460" d="M154 0v1366h153v-1366h-153z" />
93 <glyph unicode="m" horiz-adv-x="1654" d="M154 0v989h153v-143q40 58 131 113t191 55q107 0 174 -51.5t90 -133.5q45 73 138 129t194 56q136 0 206 -75t70 -224v-715h-153v672q0 205 -183 205q-74 0 -148 -44.5t-114 -107.5v-725h-153v672q0 205 -183 205q-72 0 -145 -45.5t-115 -108.5v-723h-153z" />
94 <glyph unicode="n" horiz-adv-x="1130" d="M154 0v989h153v-143q58 69 154 118.5t201 49.5q313 0 313 -320v-694h-152v647q0 125 -58 177.5t-165 52.5q-86 0 -165.5 -45t-127.5 -109v-723h-153z" />
95 <glyph unicode="o" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5z" />
96 <glyph unicode="p" d="M154 -377v1366h153v-147q56 78 144.5 125t189.5 47q197 0 318.5 -139.5t121.5 -378.5q0 -237 -121.5 -379t-318.5 -142q-100 0 -185.5 46t-148.5 129v-527h-153zM307 272q41 -67 124 -113t171 -46q146 0 232 107.5t86 275.5t-86 274.5t-232 106.5q-88 0 -171 -46 t-124 -112v-447z" />
97 <glyph unicode="q" d="M90 496q0 239 121.5 378.5t318.5 139.5q101 0 189.5 -47t144.5 -125v147h154v-1366h-154v527q-63 -83 -148.5 -129t-185.5 -46q-197 0 -318.5 142t-121.5 379zM252 496q0 -168 85.5 -275.5t231.5 -107.5q88 0 171 46t124 113v447q-41 66 -124 112t-171 46 q-146 0 -231.5 -106.5t-85.5 -274.5z" />
98 <glyph unicode="r" horiz-adv-x="675" d="M154 0v989h153v-158q64 82 149 131.5t181 49.5v-158q-36 4 -59 4q-71 0 -154 -48.5t-117 -109.5v-700h-153z" />
99 <glyph unicode="s" horiz-adv-x="952" d="M70 131l77 111q53 -60 141 -101t185 -41q111 0 173.5 47t62.5 123q0 48 -34 81t-88 51t-119 33t-130.5 35t-119.5 49t-88 82.5t-34 127.5q0 122 98 203.5t269 81.5q226 0 366 -144l-71 -106q-46 56 -123.5 90.5t-171.5 34.5q-99 0 -159 -44.5t-60 -111.5q0 -43 34 -72.5 t87.5 -46t119 -31t131 -35.5t119 -51.5t87.5 -87.5t34 -135q0 -130 -101.5 -214.5t-285.5 -84.5q-249 0 -399 156z" />
100 <glyph unicode="t" horiz-adv-x="602" d="M20 854v135h164v271h156v-271h201v-135h-201v-614q0 -58 25 -92.5t73 -34.5q68 0 105 43l45 -117q-67 -64 -182 -64q-109 0 -165.5 60.5t-56.5 171.5v647h-164z" />
101 <glyph unicode="u" horiz-adv-x="1128" d="M154 291v698h153v-651q0 -124 57 -174.5t166 -50.5q86 0 166 43t125 106v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-315 0 -315 316z" />
102 <glyph unicode="v" horiz-adv-x="1003" d="M6 989h168l328 -811l329 811h166l-411 -989h-168z" />
103 <glyph unicode="w" horiz-adv-x="1503" d="M25 989h159l242 -788l260 788h133l258 -788l242 788h162l-316 -989h-155l-258 795l-258 -795h-154z" />
104 <glyph unicode="x" horiz-adv-x="997" d="M25 0l378 508l-358 481h178l275 -377l276 377h176l-358 -481l381 -508h-176l-299 406l-297 -406h-176z" />
105 <glyph unicode="y" horiz-adv-x="1003" d="M6 989h168l328 -811l329 811h166l-495 -1190q-81 -197 -291 -200q-64 0 -111 14l23 139q37 -16 84 -16q54 0 88 22.5t59 81.5l66 150z" />
106 <glyph unicode="z" horiz-adv-x="966" d="M106 0v121l545 733h-545v135h746v-117l-549 -737h557v-135h-754z" />
107 <glyph unicode="{" horiz-adv-x="534" d="M10 449v102q53 0 81 40t28 101v420q0 123 76 200t178 77h127v-113h-127q-55 0 -95 -46t-40 -116v-434q0 -140 -93 -180q93 -40 93 -181v-432q0 -69 40 -116t95 -47h127v-113h-127q-102 0 -178 76.5t-76 197.5v422q0 61 -28 101.5t-81 40.5z" />
108 <glyph unicode="|" horiz-adv-x="432" d="M160 -41v1448h112v-1448h-112z" />
109 <glyph unicode="}" horiz-adv-x="534" d="M35 -276h125q56 0 96.5 47t40.5 116v432q0 142 92 181q-92 39 -92 180v434q0 71 -40 116.5t-97 45.5h-125v113h125q103 0 179.5 -77t76.5 -200v-420q0 -61 27.5 -101t78.5 -40v-102q-51 0 -78.5 -40.5t-27.5 -101.5v-422q0 -121 -76.5 -197.5t-179.5 -76.5h-125v113z" />
110 <glyph unicode="~" horiz-adv-x="1030" d="M55 879q8 81 19 146.5t32.5 131t51.5 109t76 71t104 27.5q52 0 92 -21.5t63.5 -56t41.5 -76.5t32 -83.5t29.5 -76t39.5 -56t56 -21.5q71 0 110 102t58 291l113 -12q-8 -82 -18.5 -146.5t-32 -131.5t-50.5 -110.5t-75 -71.5t-105 -28q-60 0 -104.5 29t-66.5 72t-42.5 93.5 t-35 93.5t-41.5 72t-64 29t-65 -28t-48 -82t-33 -122.5t-22 -158.5z" />
111 <glyph unicode="&#xa1;" horiz-adv-x="471" d="M123 897q0 46 33.5 79.5t79.5 33.5q45 0 77.5 -33.5t32.5 -79.5q0 -45 -32.5 -78t-77.5 -33q-46 0 -79.5 33.5t-33.5 77.5zM139 -377l31 983h129l33 -983h-193z" />
112 <glyph unicode="&#xa2;" horiz-adv-x="1015" d="M96 496q0 201 115.5 343.5t304.5 168.5v149h121v-145q192 -15 315 -170l-102 -92q-81 111 -213 124v-759q129 12 213 127l102 -95q-120 -155 -315 -170v-182h-121v187q-189 25 -304.5 168t-115.5 346zM256 496q0 -144 69.5 -245.5t190.5 -129.5v747q-120 -28 -190 -129 t-70 -243z" />
113 <glyph unicode="&#xa3;" horiz-adv-x="1060" d="M41 549v110h215q-77 89 -102 129q-56 92 -56 195q0 111 62.5 204t168 146t228.5 53q140 0 248.5 -60t165.5 -169l-137 -82q-28 70 -99.5 119t-161.5 49q-122 0 -206 -71.5t-84 -190.5q0 -43 9 -80.5t29 -72t36.5 -57.5t46 -58.5t42.5 -53.5h308v-110h-250q14 -47 14 -88 q0 -161 -156 -271q59 19 107 19q67 0 157 -42t146 -42q63 0 117.5 25.5t77.5 56.5l73 -137q-101 -97 -276 -97q-62 0 -113.5 15t-81.5 32.5t-75.5 32.5t-96.5 15q-84 0 -241 -82l-60 129q130 57 200.5 138t70.5 173q0 59 -31 123h-295z" />
114 <glyph unicode="&#xa4;" horiz-adv-x="1069" d="M74 281l114 114q-102 127 -102 287q0 163 102 287l-114 116l57 58l117 -115q120 102 287 102q162 0 286 -102l115 115l59 -58l-114 -116q102 -124 102 -287q0 -160 -102 -287l114 -114l-59 -60l-115 117q-124 -105 -286 -105q-163 0 -287 105l-117 -117zM184 682 q0 -145 103 -247.5t248 -102.5t247.5 102.5t102.5 247.5q0 146 -102.5 248t-247.5 102t-248 -102t-103 -248z" />
115 <glyph unicode="&#xa5;" horiz-adv-x="1282" d="M18 1366h199l424 -635l424 635h199l-465 -682h440v-106h-512v-220h512v-108h-512v-250h-170v250h-512v108h512v220h-512v106h438z" />
116 <glyph unicode="&#xa6;" horiz-adv-x="432" d="M160 -41v647h112v-647h-112zM160 760v647h112v-647h-112z" />
117 <glyph unicode="&#xa7;" horiz-adv-x="958" d="M70 -6l77 100q51 -62 135 -103.5t187 -41.5q107 0 173.5 47t66.5 129q0 51 -34 86t-88 54.5t-119 35.5t-130.5 36.5t-119.5 49t-88 82t-34 127.5q0 101 66.5 167t167.5 93q-113 36 -173.5 96t-60.5 158q0 117 99.5 196.5t267.5 79.5q236 0 366 -145l-71 -92 q-50 61 -127.5 92t-161.5 31q-101 0 -163 -45t-62 -119q0 -36 21 -63t56.5 -43.5t81.5 -29.5t96.5 -25t101 -26t96.5 -36t81.5 -52.5t56.5 -78t21 -109.5q0 -86 -48 -153.5t-140 -106.5q92 -36 140 -95.5t48 -154.5q0 -140 -107 -220.5t-280 -80.5q-139 0 -230.5 42.5 t-168.5 117.5zM244 610q0 -53 43.5 -90.5t86 -51.5t134.5 -37q18 -5 27 -7q85 37 127.5 85t42.5 118q0 42 -19 73.5t-56 53t-71.5 34t-85.5 25.5q-126 -32 -177.5 -82t-51.5 -121z" />
118 <glyph unicode="&#xa8;" horiz-adv-x="557" d="M-29 1237q0 39 28.5 66.5t68.5 27.5q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68.5 28t-28.5 66zM395 1237q0 39 27.5 66.5t66.5 27.5q40 0 68.5 -27.5t28.5 -66.5q0 -38 -28.5 -66t-68.5 -28q-38 0 -66 28t-28 66z" />
119 <glyph unicode="&#xa9;" horiz-adv-x="1593" d="M90 684q0 192 95 355t258 257.5t354 94.5q144 0 275 -56t225 -150.5t150 -225.5t56 -275q0 -143 -56 -274t-150 -226t-225 -151t-275 -56q-191 0 -354 95t-258 258t-95 354zM154 684q0 -130 51.5 -249t137.5 -205t205 -137.5t249 -51.5t249.5 51.5t205.5 138t137 205 t51 248.5q0 174 -86.5 322t-234.5 234.5t-322 86.5q-130 0 -248.5 -51t-205 -137t-138 -205.5t-51.5 -249.5zM375 688q0 186 123.5 310t302.5 124q185 0 299 -133l-51 -51q-39 54 -107 85.5t-141 31.5q-143 0 -246.5 -104t-103.5 -265q0 -158 104.5 -264.5t245.5 -106.5 q73 0 140.5 32.5t107.5 86.5l53 -51q-116 -135 -301 -135q-178 0 -302 127t-124 313z" />
120 <glyph unicode="&#xaa;" horiz-adv-x="774" d="M84 864q0 100 68.5 155.5t160.5 55.5q139 0 222 -86v113q0 61 -47.5 97t-116.5 36q-123 0 -201 -94l-53 78q105 108 268 108q117 0 191.5 -55t74.5 -172v-432h-116v71q-85 -88 -222 -88q-91 0 -160 58t-69 155zM203 864q0 -61 43.5 -98t111.5 -37q53 0 100.5 21t76.5 57 v115q-29 36 -76.5 56.5t-100.5 20.5q-68 0 -111.5 -37.5t-43.5 -97.5z" />
121 <glyph unicode="&#xab;" horiz-adv-x="899" d="M61 498l328 362h154l-328 -362l328 -369h-154zM356 498l328 362h154l-328 -362l328 -369h-154z" />
122 <glyph unicode="&#xac;" horiz-adv-x="1032" d="M59 827v109h904v-504h-113v395h-791z" />
123 <glyph unicode="&#xad;" horiz-adv-x="614" d="M61 428v135h492v-135h-492z" />
124 <glyph unicode="&#xae;" horiz-adv-x="1011" d="M72 952q0 181 127 307.5t307 126.5q119 0 219 -57.5t157.5 -157.5t57.5 -219q0 -180 -126.5 -307t-307.5 -127q-180 0 -307 127t-127 307zM131 952q0 -154 110 -264t265 -110t265 110t110 264q0 158 -109.5 266.5t-265.5 108.5t-265.5 -108.5t-109.5 -266.5zM340 702v498 h203q65 0 111 -42t46 -109q0 -72 -46 -110t-81 -38l134 -199h-82l-129 197h-90v-197h-66zM406 958h137q34 0 62 27t28 64q0 40 -28 67t-62 27h-137v-185z" />
125 <glyph unicode="&#xaf;" horiz-adv-x="743" d="M0 1210v99h743v-99h-743z" />
126 <glyph unicode="&#xb0;" horiz-adv-x="593" d="M47 1137q0 103 73 176t177 73q103 0 176.5 -73t73.5 -176q0 -104 -73.5 -177t-176.5 -73q-104 0 -177 73t-73 177zM147 1137q0 -63 43.5 -106.5t106.5 -43.5q62 0 107 44t45 106q0 61 -45 106t-107 45q-63 0 -106.5 -44.5t-43.5 -106.5z" />
127 <glyph unicode="&#xb1;" horiz-adv-x="1021" d="M59 0v109h904v-109h-904zM59 664v106h394v424h116v-424h394v-106h-394v-437h-116v437h-394z" />
128 <glyph unicode="&#xb2;" horiz-adv-x="794" d="M100 1565q49 62 130 95.5t171 33.5q78 0 142.5 -24.5t107.5 -81t43 -136.5q0 -60 -28.5 -119.5t-87.5 -122t-127 -118.5t-168 -129h415v-101h-596v92q256 184 362.5 290t106.5 200q0 73 -51 111t-123 38t-133.5 -30.5t-95.5 -75.5z" />
129 <glyph unicode="&#xb3;" horiz-adv-x="794" d="M86 981l68 78q40 -51 103.5 -81t133.5 -30q87 0 138 39t51 105q0 74 -58 107.5t-155 33.5q-70 0 -82 -2v102q14 -2 82 -2q91 0 145.5 31.5t54.5 99.5q0 62 -52.5 96.5t-131.5 34.5q-132 0 -223 -98l-64 72q111 127 299 127q131 0 212 -59.5t81 -159.5q0 -82 -55.5 -130 t-126.5 -59q31 -3 63.5 -16.5t63 -37t50 -62t19.5 -85.5q0 -106 -83 -171.5t-226 -65.5q-104 0 -184.5 37t-122.5 96z" />
130 <glyph unicode="&#xb4;" horiz-adv-x="462" d="M0 1139l303 295h160l-346 -295h-117z" />
131 <glyph unicode="&#xb5;" horiz-adv-x="1128" d="M154 -377v1366h153v-651q0 -124 57.5 -176.5t165.5 -52.5q85 0 165.5 44.5t125.5 108.5v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-93 0 -162 29v-381h-153z" />
132 <glyph unicode="&#xb6;" horiz-adv-x="919" d="M55 1014q0 146 103.5 249t249.5 103h366v-1571h-92v1479h-182v-1479h-92v867q-146 0 -249.5 103t-103.5 249z" />
133 <glyph unicode="&#xb7;" horiz-adv-x="473" d="M123 502q0 44 33.5 77t79.5 33t79 -33t33 -77q0 -46 -33 -79.5t-79 -33.5t-79.5 33.5t-33.5 79.5z" />
134 <glyph unicode="&#xb8;" horiz-adv-x="419" d="M0 -330l39 78q73 -59 164 -59q53 0 89 23t36 63q0 33 -19.5 52t-56.5 19q-51 0 -78 -34l-68 38l64 173h92l-53 -136q29 23 76 23q59 0 97 -37.5t38 -99.5q0 -74 -61 -119t-152 -45q-63 0 -118.5 17.5t-88.5 43.5z" />
135 <glyph unicode="&#xb9;" horiz-adv-x="481" d="M29 1456l221 225h108v-819h-122v660l-136 -142z" />
136 <glyph unicode="&#xba;" horiz-adv-x="829" d="M82 989q0 143 91.5 240.5t240.5 97.5q151 0 242.5 -97t91.5 -241q0 -143 -91.5 -240.5t-242.5 -97.5q-148 0 -240 98t-92 240zM205 989q0 -103 56 -171t153 -68q98 0 155.5 68t57.5 171t-57.5 170.5t-155.5 67.5q-97 0 -153 -67.5t-56 -170.5z" />
137 <glyph unicode="&#xbb;" horiz-adv-x="899" d="M61 129l328 369l-328 362h154l328 -362l-328 -369h-154zM356 129l328 369l-328 362h154l328 -362l-328 -369h-154z" />
138 <glyph unicode="&#xbc;" horiz-adv-x="1576" d="M29 1141l221 225h108v-819h-122v659l-136 -141zM223 0l873 1366h112l-874 -1366h-111zM860 205v92l354 522h170v-514h117v-100h-117v-205h-122v205h-402zM983 305h279v406z" />
139 <glyph unicode="&#xbd;" horiz-adv-x="1652" d="M29 1141l221 225h108v-819h-122v659l-136 -141zM223 0l873 1366h112l-874 -1366h-111zM958 702q49 62 130.5 95.5t171.5 33.5q79 0 143 -24.5t106.5 -80.5t42.5 -136q0 -48 -20.5 -97.5t-54 -94.5t-88 -97t-112 -98t-136.5 -103h415v-100h-595v92q256 184 362.5 290 t106.5 200q0 73 -51 111t-124 38q-72 0 -133.5 -30.5t-95.5 -75.5z" />
140 <glyph unicode="&#xbe;" horiz-adv-x="1798" d="M86 666l68 77q40 -51 103.5 -80.5t133.5 -29.5q88 0 138.5 38.5t50.5 104.5q0 74 -58 108t-155 34q-64 0 -82 -3v103q14 -2 82 -2q91 0 145.5 31.5t54.5 99.5q0 62 -52.5 96.5t-131.5 34.5q-132 0 -223 -98l-64 71q111 127 299 127q131 0 212 -59.5t81 -159.5 q0 -82 -55.5 -129.5t-126.5 -58.5q31 -3 63.5 -16.5t63 -37t50 -62t19.5 -85.5q0 -106 -83 -172t-226 -66q-104 0 -184.5 37.5t-122.5 96.5zM444 0l873 1366h113l-875 -1366h-111zM1083 205v92l355 522h170v-514h116v-100h-116v-205h-123v205h-402zM1206 305h279v406z" />
141 <glyph unicode="&#xbf;" horiz-adv-x="806" d="M63 -84q0 63 22 116t57 90.5t77 70.5t84 62t77 57.5t57 64.5t22 76q0 60 -53 98l124 55q78 -67 78 -168q0 -53 -20.5 -97.5t-53 -77t-71.5 -61.5t-78 -56.5t-71.5 -56t-53 -66.5t-20.5 -82q0 -81 62.5 -136t176.5 -55q111 0 189 42.5t139 123.5l102 -109 q-75 -99 -188 -153.5t-256 -54.5q-183 0 -292.5 90.5t-109.5 226.5zM375 897q0 46 33 79.5t79 33.5t79.5 -33.5t33.5 -79.5t-33.5 -79.5t-79.5 -33.5t-79 33.5t-33 79.5z" />
142 <glyph unicode="&#xc0;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM348 1786h160l303 -295h-117zM385 455h580l-291 737z" />
143 <glyph unicode="&#xc1;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM385 455h580l-291 737zM541 1491l303 295h160l-347 -295h-116z" />
144 <glyph unicode="&#xc2;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM385 455h580l-291 737zM406 1491l194 295h148l200 -295h-104l-170 217l-164 -217h-104z" />
145 <glyph unicode="&#xc3;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM354 1499q0 123 52.5 199t146.5 76q34 0 62.5 -14t46.5 -35t35.5 -45.5t31.5 -45.5t33.5 -35t42.5 -14q44 0 71 44t27 132h92q0 -123 -52 -198.5t-146 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47 t-49 19.5q-44 0 -71.5 -44t-27.5 -132h-92zM385 455h580l-291 737z" />
146 <glyph unicode="&#xc4;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM369 1583q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM385 455h580l-291 737zM793 1583q0 39 27.5 66.5t66.5 27.5q40 0 68 -27t28 -67q0 -38 -28 -66 t-68 -28q-38 0 -66 28t-28 66z" />
147 <glyph unicode="&#xc5;" horiz-adv-x="1347" d="M18 0l551 1366h211l549 -1366h-194l-121 305h-680l-121 -305h-195zM385 455h580l-291 737zM473 1620q0 83 60 143t143 60t140.5 -59.5t57.5 -143.5t-57.5 -143.5t-140.5 -59.5t-143 60t-60 143zM555 1620q0 -50 35 -85.5t86 -35.5q49 0 84 35.5t35 85.5t-35 85.5 t-84 35.5q-51 0 -86 -35.5t-35 -85.5z" />
148 <glyph unicode="&#xc6;" horiz-adv-x="1941" d="M14 0l852 1366h963v-152h-725v-440h711v-151h-711v-471h725v-152h-895v305h-537l-188 -305h-195zM479 455h455v737z" />
149 <glyph unicode="&#xc7;" horiz-adv-x="1384" d="M104 682q0 154 55 287t149 224.5t223.5 143.5t275.5 52q329 0 518 -271l-141 -80q-60 90 -161 144.5t-216 54.5q-226 0 -376 -155.5t-150 -399.5q0 -159 69 -286.5t189 -198t268 -70.5q114 0 215.5 55t161.5 144l143 -78q-194 -265 -500 -273l-30 -79q27 22 75 22 q59 0 97.5 -37.5t38.5 -99.5q0 -74 -61 -119t-152 -45q-63 0 -118.5 17.5t-88.5 43.5l39 78q73 -59 164 -59q53 0 88.5 23t35.5 63q0 33 -19 52.5t-56 19.5q-51 0 -78 -35l-68 39l43 121q-134 12 -250.5 68t-201 146t-133 216.5t-48.5 271.5z" />
150 <glyph unicode="&#xc8;" horiz-adv-x="1165" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-471h725v-152h-895zM281 1786h159l303 -295h-116z" />
151 <glyph unicode="&#xc9;" horiz-adv-x="1165" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-471h725v-152h-895zM471 1491l303 295h160l-346 -295h-117z" />
152 <glyph unicode="&#xca;" horiz-adv-x="1165" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-471h725v-152h-895zM334 1491l194 295h148l201 -295h-105l-170 217l-164 -217h-104z" />
153 <glyph unicode="&#xcb;" horiz-adv-x="1165" d="M160 0v1366h895v-152h-725v-440h710v-151h-710v-471h725v-152h-895zM299 1583q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM723 1583q0 39 27.5 66.5t66.5 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66 28 t-28 66z" />
154 <glyph unicode="&#xcc;" horiz-adv-x="489" d="M-84 1786h160l303 -295h-117zM160 0v1366h170v-1366h-170z" />
155 <glyph unicode="&#xcd;" horiz-adv-x="489" d="M113 1491l303 295h159l-346 -295h-116zM160 0v1366h170v-1366h-170z" />
156 <glyph unicode="&#xce;" horiz-adv-x="489" d="M-27 1491l195 295h147l201 -295h-104l-170 217l-164 -217h-105zM160 0v1366h170v-1366h-170z" />
157 <glyph unicode="&#xcf;" horiz-adv-x="489" d="M-63 1583q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM160 0v1366h170v-1366h-170zM360 1583q0 39 28 66.5t67 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66.5 28t-28.5 66z" />
158 <glyph unicode="&#xd0;" horiz-adv-x="1490" d="M20 612v125h197v629h467q208 0 369 -90.5t246 -245.5t85 -348q0 -145 -50 -270.5t-140 -216.5t-221.5 -143t-288.5 -52h-467v612h-197zM387 152h297q161 0 282 72t181.5 191t60.5 267q0 150 -59.5 269t-180 191t-284.5 72h-297v-477h346v-125h-346v-460z" />
159 <glyph unicode="&#xd1;" horiz-adv-x="1449" d="M160 0v1366h174l786 -1067v1067h170v-1366h-164l-796 1090v-1090h-170zM401 1499q0 123 52.5 199t146.5 76q34 0 62.5 -14t46.5 -35t35.5 -45.5t31.5 -45.5t33.5 -35t42.5 -14q44 0 71 44t27 132h92q0 -123 -52 -198.5t-146 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47 t-49 19.5q-44 0 -71 -44t-27 -132h-93z" />
160 <glyph unicode="&#xd2;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399zM463 1786h160l303 -295h-117z" />
161 <glyph unicode="&#xd3;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399zM651 1491l303 295h160l-346 -295h-117z" />
162 <glyph unicode="&#xd4;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399zM516 1491l195 295h147l201 -295h-105l-170 217l-163 -217h-105z" />
163 <glyph unicode="&#xd5;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399zM463 1499q0 123 52.5 199t146.5 76q41 0 72.5 -19.5t51.5 -47t38 -55.5t40 -47.5t49 -19.5q44 0 71.5 44t27.5 132h92q0 -123 -52.5 -198.5t-146.5 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47t-49 19.5q-44 0 -71 -44t-27 -132h-92z" />
164 <glyph unicode="&#xd6;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5t354 -92.5t241 -253.5t85 -361t-85 -361t-241 -253.5t-354 -92.5t-353.5 92.5t-240 253.5t-84.5 361zM281 682q0 -158 60.5 -284t175.5 -198.5t265 -72.5t265.5 72.5t177 198.5t61.5 284q0 242 -139 398.5t-365 156.5 q-227 0 -364 -156t-137 -399zM475 1583q0 40 28 67t68 27q39 0 67 -27.5t28 -66.5q0 -38 -28.5 -66t-66.5 -28q-40 0 -68 28t-28 66zM899 1583q0 39 27.5 66.5t66.5 27.5q40 0 68.5 -27.5t28.5 -66.5q0 -38 -28.5 -66t-68.5 -28q-38 0 -66 28t-28 66z" />
165 <glyph unicode="&#xd7;" horiz-adv-x="1021" d="M131 379l305 305l-305 305l76 76l303 -305l305 305l76 -76l-303 -305l303 -305l-76 -76l-305 305l-303 -305z" />
166 <glyph unicode="&#xd8;" horiz-adv-x="1566" d="M104 682q0 200 84.5 361t240 253.5t353.5 92.5q189 0 342 -86l43 63h138l-86 -129q115 -96 179 -240.5t64 -314.5q0 -200 -85 -361t-241 -253.5t-354 -92.5q-194 0 -352 93l-45 -68h-137l90 133q-111 96 -172.5 238t-61.5 311zM281 682q0 -257 149 -412l606 901 q-116 66 -254 66q-227 0 -364 -156t-137 -399zM518 199q113 -72 264 -72q150 0 265.5 72.5t177 198.5t61.5 284q0 128 -41.5 236.5t-118.5 183.5z" />
167 <glyph unicode="&#xd9;" horiz-adv-x="1435" d="M160 530v836h172v-831q0 -191 99.5 -299.5t285.5 -108.5t286.5 109t100.5 299v831h172v-834q0 -261 -143 -409t-416 -148q-271 0 -414 148.5t-143 406.5zM393 1786h160l303 -295h-117z" />
168 <glyph unicode="&#xda;" horiz-adv-x="1435" d="M160 530v836h172v-831q0 -191 99.5 -299.5t285.5 -108.5t286.5 109t100.5 299v831h172v-834q0 -261 -143 -409t-416 -148q-271 0 -414 148.5t-143 406.5zM582 1491l303 295h159l-346 -295h-116z" />
169 <glyph unicode="&#xdb;" horiz-adv-x="1435" d="M160 530v836h172v-831q0 -191 99.5 -299.5t285.5 -108.5t286.5 109t100.5 299v831h172v-834q0 -261 -143 -409t-416 -148q-271 0 -414 148.5t-143 406.5zM457 1491l194 295h148l200 -295h-104l-170 217l-164 -217h-104z" />
170 <glyph unicode="&#xdc;" horiz-adv-x="1435" d="M160 530v836h172v-831q0 -191 99.5 -299.5t285.5 -108.5t286.5 109t100.5 299v831h172v-834q0 -261 -143 -409t-416 -148q-271 0 -414 148.5t-143 406.5zM412 1583q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM836 1583 q0 39 27.5 66.5t66.5 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66 28t-28 66z" />
171 <glyph unicode="&#xdd;" horiz-adv-x="1282" d="M18 1366h199l424 -635l424 635h199l-537 -788v-578h-170v578zM514 1491l303 295h160l-346 -295h-117z" />
172 <glyph unicode="&#xde;" horiz-adv-x="1202" d="M160 0v1366h170v-244h379q198 0 313 -119t115 -294q0 -174 -115.5 -292t-312.5 -118h-379v-299h-170zM330 451h358q122 0 197.5 71.5t75.5 186.5q0 116 -76 189t-197 73h-358v-520z" />
173 <glyph unicode="&#xdf;" horiz-adv-x="1222" d="M156 0v1022q0 155 106.5 259.5t282.5 104.5q147 0 252.5 -71t105.5 -187q0 -45 -17 -83t-44 -64t-59.5 -49.5t-65.5 -44.5t-60 -42.5t-44 -50.5t-17 -63q0 -43 32.5 -71.5t84.5 -45t114.5 -30.5t125 -35t114.5 -51.5t84.5 -87t32.5 -134.5q0 -128 -99 -214.5t-282 -86.5 q-134 0 -219 41.5t-162 118.5l78 107q46 -61 125.5 -100.5t177.5 -39.5q112 0 171.5 49.5t59.5 120.5q0 48 -32.5 81t-84.5 51.5t-114.5 34t-125 36t-114.5 49t-84.5 81.5t-32.5 126q0 61 31 110.5t75 81.5t87.5 60t74.5 60.5t31 68.5q0 63 -61.5 100t-140.5 37 q-100 0 -167 -62t-67 -165v-1022h-153z" />
174 <glyph unicode="&#xe0;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM217 1434h160l303 -295h-117zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5z" />
175 <glyph unicode="&#xe1;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5zM412 1139l303 295h159l-346 -295h-116z" />
176 <glyph unicode="&#xe2;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5zM279 1139l194 295h148l200 -295h-104l-170 217l-164 -217h-104z" />
177 <glyph unicode="&#xe3;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM223 1147q0 123 52.5 198.5t146.5 75.5q41 0 73 -19.5t52 -47t38 -55t40 -47t49 -19.5q44 0 71 44t27 132h92q0 -123 -52 -198.5t-146 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47t-49 19.5q-44 0 -71.5 -44t-27.5 -132h-92zM256 303q0 -95 68.5 -156 t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5z" />
178 <glyph unicode="&#xe4;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM233 1237q0 39 28.5 66.5t68.5 27.5q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68.5 28t-28.5 66zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5 zM657 1237q0 39 28 66.5t67 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66.5 28t-28.5 66z" />
179 <glyph unicode="&#xe5;" horiz-adv-x="1081" d="M100 303q0 80 30 144.5t79.5 103t109.5 58.5t125 20q210 0 328 -133v178q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q82 0 149.5 -19t120.5 -57.5t83 -104.5t30 -153v-680h-154v113q-123 -138 -328 -138q-63 0 -123.5 21.5t-110.5 61.5 t-80 103.5t-30 141.5zM256 303q0 -95 68.5 -156t177.5 -61q82 0 154.5 31.5t115.5 91.5v188q-43 58 -115.5 89.5t-154.5 31.5q-108 0 -177 -60.5t-69 -154.5zM342 1323q0 83 60 143t143 60t140.5 -59.5t57.5 -143.5t-57.5 -143.5t-140.5 -59.5t-143 60t-60 143zM424 1323 q0 -50 35 -85.5t86 -35.5q49 0 84 35.5t35 85.5t-35 85.5t-84 35.5q-51 0 -86 -35.5t-35 -85.5z" />
180 <glyph unicode="&#xe6;" horiz-adv-x="1820" d="M100 303q0 153 100.5 239.5t243.5 86.5q209 0 328 -131v176q0 96 -70 151.5t-180 55.5q-176 0 -303 -138l-72 107q157 164 396 164q139 0 225 -55t111 -162q56 98 150.5 157.5t227.5 59.5q214 0 341.5 -151t127.5 -380v-39h-798q9 -145 104 -241.5t250 -96.5 q87 0 167.5 32t139.5 93l74 -102q-157 -154 -393 -154q-263 0 -410 205q-62 -87 -163 -146t-244 -59q-66 0 -128.5 21.5t-113 61.5t-81 103.5t-30.5 141.5zM256 303q0 -95 68.5 -156t177.5 -61q57 0 109 15t104.5 55.5t87.5 103.5q-31 75 -31 133q-43 60 -115.5 92.5 t-154.5 32.5q-108 0 -177 -60.5t-69 -154.5zM926 559h649q-1 57 -21 113t-58 105t-102 79.5t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60 -105t-24.5 -114.5z" />
181 <glyph unicode="&#xe7;" horiz-adv-x="1015" d="M96 496q0 146 61.5 263.5t174.5 186t258 68.5q229 0 362 -172l-102 -92q-93 127 -252 127q-155 0 -248.5 -107t-93.5 -274t94 -275t248 -108q155 0 252 129l102 -95q-119 -157 -323 -170l-33 -86q29 23 76 23q59 0 97 -37.5t38 -99.5q0 -74 -61 -119t-152 -45 q-63 0 -118.5 17.5t-88.5 43.5l39 78q73 -59 164 -59q53 0 89 23t36 63q0 33 -19.5 52t-56.5 19q-51 0 -78 -34l-67 39l45 125q-198 17 -320.5 162t-122.5 354z" />
182 <glyph unicode="&#xe8;" horiz-adv-x="1153" d="M96 496q0 142 62.5 260.5t174.5 188t251 69.5q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -146 104.5 -244t249.5 -98q87 0 167.5 33t140.5 94l73 -100q-157 -154 -393 -154q-222 0 -364 145t-142 376zM258 559h649q-1 57 -20.5 113t-57.5 105t-102 79.5 t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60.5 -105t-25 -114.5zM258 1434h160l303 -295h-117z" />
183 <glyph unicode="&#xe9;" horiz-adv-x="1153" d="M96 496q0 142 62.5 260.5t174.5 188t251 69.5q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -146 104.5 -244t249.5 -98q87 0 167.5 33t140.5 94l73 -100q-157 -154 -393 -154q-222 0 -364 145t-142 376zM258 559h649q-1 57 -20.5 113t-57.5 105t-102 79.5 t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60.5 -105t-25 -114.5zM451 1139l303 295h159l-346 -295h-116z" />
184 <glyph unicode="&#xea;" horiz-adv-x="1153" d="M96 496q0 142 62.5 260.5t174.5 188t251 69.5q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -146 104.5 -244t249.5 -98q87 0 167.5 33t140.5 94l73 -100q-157 -154 -393 -154q-222 0 -364 145t-142 376zM258 559h649q-1 57 -20.5 113t-57.5 105t-102 79.5 t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60.5 -105t-25 -114.5zM315 1139l195 295h147l201 -295h-104l-170 217l-164 -217h-105z" />
185 <glyph unicode="&#xeb;" horiz-adv-x="1153" d="M96 496q0 142 62.5 260.5t174.5 188t251 69.5q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -146 104.5 -244t249.5 -98q87 0 167.5 33t140.5 94l73 -100q-157 -154 -393 -154q-222 0 -364 145t-142 376zM258 559h649q-1 57 -20.5 113t-57.5 105t-102 79.5 t-145 30.5q-76 0 -138 -30t-100.5 -78.5t-60.5 -105t-25 -114.5zM279 1237q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM702 1237q0 39 28 66.5t67 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66.5 28t-28.5 66z " />
186 <glyph unicode="&#xec;" horiz-adv-x="460" d="M-98 1434h159l304 -295h-117zM154 0v989h153v-989h-153z" />
187 <glyph unicode="&#xed;" horiz-adv-x="460" d="M96 1139l303 295h160l-346 -295h-117zM154 0v989h153v-989h-153z" />
188 <glyph unicode="&#xee;" horiz-adv-x="460" d="M-39 1139l195 295h147l201 -295h-105l-170 217l-163 -217h-105zM154 0v989h153v-989h-153z" />
189 <glyph unicode="&#xef;" horiz-adv-x="460" d="M-76 1237q0 40 28 67t68 27q39 0 67 -27.5t28 -66.5q0 -38 -28.5 -66t-66.5 -28q-40 0 -68 28t-28 66zM154 0v989h153v-989h-153zM348 1237q0 39 27.5 66.5t66.5 27.5q40 0 68.5 -27.5t28.5 -66.5q0 -38 -28.5 -66t-68.5 -28q-38 0 -66 28t-28 66z" />
190 <glyph unicode="&#xf0;" d="M96 479q0 216 127 359t324 143q200 0 323 -180q-104 186 -327 348l-293 -131l-37 86l242 106q-29 19 -85 55t-69 44l84 127q125 -77 229 -156l222 98l34 -84l-176 -77q381 -324 381 -711q0 -233 -133.5 -382t-355.5 -149q-218 0 -354 143t-136 361zM258 479 q0 -154 88 -260t240 -106t239.5 106t87.5 260q0 98 -37 180t-112.5 133.5t-177.5 51.5q-152 0 -240 -106.5t-88 -258.5z" />
191 <glyph unicode="&#xf1;" horiz-adv-x="1130" d="M160 0v989h153v-143q58 69 154 118.5t201 49.5q313 0 313 -320v-694h-152v647q0 125 -58 177.5t-165 52.5q-86 0 -165.5 -45t-127.5 -109v-723h-153zM246 1147q0 123 52 198.5t146 75.5q41 0 73 -19.5t52 -47t38 -55t40 -47t49 -19.5q44 0 71.5 44t27.5 132h92 q0 -123 -52.5 -198.5t-146.5 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47t-49 19.5q-44 0 -71 -44t-27 -132h-92z" />
192 <glyph unicode="&#xf2;" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5zM258 1434h160l303 -295h-117z" />
193 <glyph unicode="&#xf3;" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5zM451 1139l303 295h159l-346 -295h-116z" />
194 <glyph unicode="&#xf4;" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5zM317 1139l195 295h147l201 -295h-104l-170 217l-164 -217h-105z" />
195 <glyph unicode="&#xf5;" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5zM266 1147q0 123 52.5 198.5t146.5 75.5q41 0 73 -19.5t52 -47t38 -55t40 -47t49 -19.5q44 0 71 44t27 132h92q0 -123 -52 -198.5t-146 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47t-49 19.5q-44 0 -71.5 -44t-27.5 -132h-92z" />
196 <glyph unicode="&#xf6;" d="M96 496q0 144 59 261t171.5 187t259.5 70t259.5 -70t171 -187t58.5 -261t-58.5 -262t-171 -188.5t-259.5 -70.5t-259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -160 88 -271.5t240 -111.5q102 0 177.5 54t112.5 139.5t37 189.5q0 103 -37 188t-112.5 139t-177.5 54 t-178 -54t-113 -139.5t-37 -187.5zM279 1237q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM702 1237q0 39 28 66.5t67 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66.5 28t-28.5 66z" />
197 <glyph unicode="&#xf7;" horiz-adv-x="1046" d="M59 637v106h928v-106h-928zM430 295q0 38 28 66t66 28t66 -28t28 -66t-28 -66t-66 -28t-66 28t-28 66zM430 1079q0 38 28 65t66 27t66 -27t28 -65q0 -40 -28 -68t-66 -28t-66 28t-28 68z" />
198 <glyph unicode="&#xf8;" d="M96 496q0 144 59 261t171.5 187t259.5 70q160 0 280 -84l47 59h113l-92 -117q68 -71 104.5 -168.5t36.5 -207.5q0 -144 -58.5 -262t-171 -188.5t-259.5 -70.5q-168 0 -291 93l-53 -68h-111l98 125q-133 145 -133 371zM258 496q0 -147 70 -248l446 567q-78 62 -188 62 q-102 0 -178 -54t-113 -139.5t-37 -187.5zM385 182q81 -69 201 -69q102 0 177.5 54t112.5 139.5t37 189.5q0 151 -77 254z" />
199 <glyph unicode="&#xf9;" horiz-adv-x="1128" d="M154 291v698h153v-651q0 -124 57 -174.5t166 -50.5q86 0 166 43t125 106v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-315 0 -315 316zM242 1434h159l304 -295h-117z" />
200 <glyph unicode="&#xfa;" horiz-adv-x="1128" d="M154 291v698h153v-651q0 -124 57 -174.5t166 -50.5q86 0 166 43t125 106v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-315 0 -315 316zM432 1139l303 295h160l-346 -295h-117z" />
201 <glyph unicode="&#xfb;" horiz-adv-x="1128" d="M154 291v698h153v-651q0 -124 57 -174.5t166 -50.5q86 0 166 43t125 106v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-315 0 -315 316zM295 1139l194 295h148l201 -295h-105l-170 217l-164 -217h-104z" />
202 <glyph unicode="&#xfc;" horiz-adv-x="1128" d="M154 291v698h153v-651q0 -124 57 -174.5t166 -50.5q86 0 166 43t125 106v727h154v-989h-154v139q-62 -70 -155 -117t-197 -47q-315 0 -315 316zM264 1237q0 40 28 67t68 27q39 0 67 -27.5t28 -66.5q0 -38 -28.5 -66t-66.5 -28q-40 0 -68 28t-28 66zM688 1237 q0 39 27.5 66.5t66.5 27.5q40 0 68.5 -27.5t28.5 -66.5q0 -38 -28.5 -66t-68.5 -28q-38 0 -66 28t-28 66z" />
203 <glyph unicode="&#xfd;" horiz-adv-x="1003" d="M6 989h168l328 -811l329 811h166l-495 -1190q-81 -197 -291 -200q-64 0 -111 14l23 139q37 -16 84 -16q54 0 88 22.5t59 81.5l66 150zM369 1139l303 295h159l-346 -295h-116z" />
204 <glyph unicode="&#xfe;" d="M154 -377v1743h153v-524q56 78 144.5 125t189.5 47q197 0 318.5 -139.5t121.5 -378.5q0 -237 -121.5 -379t-318.5 -142q-100 0 -185.5 46t-148.5 129v-527h-153zM307 272q41 -67 124 -113t171 -46q146 0 232 107.5t86 275.5t-86 274.5t-232 106.5q-88 0 -171 -46 t-124 -112v-447z" />
205 <glyph unicode="&#xff;" horiz-adv-x="1003" d="M6 989h168l328 -811l329 811h166l-495 -1190q-81 -197 -291 -200q-64 0 -111 14l23 139q37 -16 84 -16q54 0 88 22.5t59 81.5l66 150zM195 1237q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM618 1237q0 39 28 66.5t67 27.5 q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66.5 28t-28.5 66z" />
206 <glyph unicode="&#x152;" horiz-adv-x="2263" d="M104 682q0 200 82.5 360.5t234.5 252t347 91.5q150 0 282.5 -69.5t206.5 -198.5v248h895v-152h-725v-440h711v-151h-711v-471h725v-152h-895v248q-74 -131 -206.5 -202t-282.5 -71q-195 0 -347 92.5t-234.5 253.5t-82.5 361zM281 682q0 -118 35.5 -220t100 -176.5 t160.5 -116.5t211 -42q160 0 284.5 85.5t184.5 246.5v448q-60 160 -184 244t-285 84q-231 0 -369 -155t-138 -398z" />
207 <glyph unicode="&#x153;" horiz-adv-x="1970" d="M96 496q0 144 59 261t171.5 187t259.5 70q87 0 160 -28.5t121.5 -75.5t78 -90t49.5 -89q19 46 50.5 91t80 90.5t120 73.5t155.5 28q146 0 255 -71t164.5 -190.5t55.5 -269.5v-39h-799q9 -145 105.5 -243.5t249.5 -98.5q87 0 167 33t140 94l73 -100q-157 -154 -393 -154 q-90 0 -165 27t-125.5 72.5t-82 89.5t-53.5 94q-17 -38 -37.5 -72t-56.5 -74.5t-77.5 -69t-103.5 -48t-132 -19.5q-147 0 -259.5 70.5t-171.5 188.5t-59 262zM258 496q0 -163 89 -274t239 -111t238.5 111t88.5 274q0 162 -88.5 271.5t-238.5 109.5t-239 -110t-89 -271z M1075 559h651q-1 45 -13.5 90t-38.5 88t-63 76t-91.5 53.5t-118.5 20.5q-76 0 -139 -30t-101.5 -78.5t-60.5 -105t-25 -114.5z" />
208 <glyph unicode="&#x178;" horiz-adv-x="1282" d="M18 1366h199l424 -635l424 635h199l-537 -788v-578h-170v578zM340 1583q0 40 28 67t68 27q39 0 66.5 -27.5t27.5 -66.5q0 -38 -28 -66t-66 -28q-40 0 -68 28t-28 66zM764 1583q0 39 27.5 66.5t66.5 27.5q40 0 68 -27t28 -67q0 -38 -28 -66t-68 -28q-38 0 -66 28t-28 66z " />
209 <glyph unicode="&#x2c6;" horiz-adv-x="542" d="M0 1139l195 295h147l201 -295h-105l-170 217l-164 -217h-104z" />
210 <glyph unicode="&#x2dc;" horiz-adv-x="641" d="M0 1147q0 123 52.5 198.5t146.5 75.5q41 0 73 -19.5t52 -47t38 -55t40 -47t49 -19.5q44 0 71 44t27 132h92q0 -123 -52.5 -198.5t-146.5 -75.5q-41 0 -73 19.5t-52 47t-38 55t-40 47t-49 19.5q-44 0 -71 -44t-27 -132h-92z" />
211 <glyph unicode="&#x2000;" horiz-adv-x="911" />
212 <glyph unicode="&#x2001;" horiz-adv-x="1823" />
213 <glyph unicode="&#x2002;" horiz-adv-x="911" />
214 <glyph unicode="&#x2003;" horiz-adv-x="1823" />
215 <glyph unicode="&#x2004;" horiz-adv-x="607" />
216 <glyph unicode="&#x2005;" horiz-adv-x="455" />
217 <glyph unicode="&#x2006;" horiz-adv-x="303" />
218 <glyph unicode="&#x2007;" horiz-adv-x="303" />
219 <glyph unicode="&#x2008;" horiz-adv-x="227" />
220 <glyph unicode="&#x2009;" horiz-adv-x="364" />
221 <glyph unicode="&#x200a;" horiz-adv-x="101" />
222 <glyph unicode="&#x2010;" horiz-adv-x="614" d="M61 428v135h492v-135h-492z" />
223 <glyph unicode="&#x2011;" horiz-adv-x="614" d="M61 428v135h492v-135h-492z" />
224 <glyph unicode="&#x2012;" horiz-adv-x="614" d="M61 428v135h492v-135h-492z" />
225 <glyph unicode="&#x2013;" horiz-adv-x="1214" d="M61 428v135h1092v-135h-1092z" />
226 <glyph unicode="&#x2014;" horiz-adv-x="1705" d="M61 428v135h1584v-135h-1584z" />
227 <glyph unicode="&#x2018;" horiz-adv-x="471" d="M98 1079q0 90 46 172.5t118 134.5l78 -61q-50 -33 -88.5 -87t-44.5 -103q1 0 12 2t17 2q41 0 69.5 -30.5t28.5 -74.5q0 -46 -31.5 -78t-77.5 -32q-54 0 -90.5 41.5t-36.5 113.5z" />
228 <glyph unicode="&#x2019;" horiz-adv-x="471" d="M117 985q50 33 88.5 87.5t44.5 103.5q-10 -5 -29 -5q-41 0 -69.5 30.5t-28.5 74.5q0 45 31.5 77.5t76.5 32.5q55 0 92 -41.5t37 -113.5q0 -91 -46 -173.5t-119 -135.5z" />
229 <glyph unicode="&#x201a;" horiz-adv-x="471" d="M117 -197q51 33 89 87t44 104q-8 -4 -29 -4q-41 0 -69.5 30t-28.5 74q0 45 31.5 78t76.5 33q55 0 92 -42.5t37 -113.5q0 -91 -46 -173.5t-119 -135.5z" />
230 <glyph unicode="&#x201c;" horiz-adv-x="798" d="M111 1079q0 91 46 173.5t119 133.5l76 -61q-50 -32 -87.5 -86.5t-43.5 -103.5l11 2q10 2 16 2q43 0 71.5 -30.5t28.5 -74.5q0 -46 -32 -78t-78 -32q-54 0 -90.5 41.5t-36.5 113.5zM438 1079q0 91 46.5 173.5t119.5 133.5l76 -61q-50 -32 -87.5 -86.5t-43.5 -103.5 q1 0 11 2t15 2q43 0 72 -30.5t29 -74.5q0 -46 -32.5 -78t-78.5 -32q-54 0 -90.5 41.5t-36.5 113.5z" />
231 <glyph unicode="&#x201d;" horiz-adv-x="798" d="M117 985q50 33 88.5 87.5t44.5 103.5q-10 -5 -29 -5q-41 0 -69.5 30.5t-28.5 74.5q0 45 31.5 77.5t76.5 32.5q55 0 92 -41.5t37 -113.5q0 -91 -46 -173.5t-119 -135.5zM446 985q50 33 88 87.5t44 103.5q-5 -5 -27 -5q-43 0 -71.5 30.5t-28.5 74.5q0 45 32.5 77.5 t77.5 32.5q54 0 90.5 -41.5t36.5 -113.5q0 -91 -46.5 -173.5t-119.5 -135.5z" />
232 <glyph unicode="&#x201e;" horiz-adv-x="798" d="M117 -197q51 33 89 87t44 104q-8 -4 -29 -4q-41 0 -69.5 30t-28.5 74q0 45 31.5 78t76.5 33q55 0 92 -42.5t37 -113.5q0 -91 -46 -173.5t-119 -135.5zM446 -197q50 33 88 87t44 104q-4 -4 -27 -4q-43 0 -71.5 30t-28.5 74q0 45 32.5 78t77.5 33q53 0 90 -42.5t37 -113.5 q0 -91 -46.5 -173.5t-119.5 -135.5z" />
233 <glyph unicode="&#x2022;" horiz-adv-x="733" d="M147 496q0 91 65.5 156t156.5 65t156 -65t65 -156q0 -90 -65 -155t-156 -65t-156.5 65.5t-65.5 154.5z" />
234 <glyph unicode="&#x2026;" horiz-adv-x="1415" d="M123 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5q0 -45 -33.5 -78.5t-78.5 -33.5q-46 0 -79.5 34t-33.5 78zM594 92q0 46 33.5 79.5t79.5 33.5t79 -33.5t33 -79.5q0 -45 -33.5 -78.5t-78.5 -33.5t-79 34t-34 78zM1067 92q0 46 33.5 79.5t79.5 33.5q45 0 77.5 -33.5 t32.5 -79.5q0 -45 -32.5 -78.5t-77.5 -33.5q-46 0 -79.5 34t-33.5 78z" />
235 <glyph unicode="&#x202f;" horiz-adv-x="364" />
236 <glyph unicode="&#x2039;" horiz-adv-x="604" d="M61 498l328 362h154l-328 -362l328 -369h-154z" />
237 <glyph unicode="&#x203a;" horiz-adv-x="604" d="M61 129l328 369l-328 362h154l328 -362l-328 -369h-154z" />
238 <glyph unicode="&#x205f;" horiz-adv-x="455" />
239 <glyph unicode="&#x20ac;" horiz-adv-x="1423" d="M63 485v107h91q-4 58 -4 90t4 94h-91v109h113q61 230 246 367t430 137q329 0 518 -271l-141 -80q-60 90 -161 144.5t-216 54.5q-174 0 -307 -95t-189 -257h619v-109h-643q-6 -46 -6 -94q0 -46 6 -90h643v-107h-619q54 -163 188 -260.5t308 -97.5q114 0 215.5 55 t161.5 144l143 -78q-199 -273 -520 -273q-248 0 -433 138.5t-245 371.5h-111z" />
240 <glyph unicode="&#x2122;" horiz-adv-x="929" d="M35 1313v53h311v-53h-127v-398h-57v398h-127zM420 915v451h88l131 -328l131 328h88v-451h-57v373l-154 -373h-16l-154 373v-373h-57z" />
241 <glyph unicode="&#x25fc;" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" />
242 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="J" k="-18" />
243 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="S" k="29" />
244 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="137" />
245 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="53" />
246 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="76" />
247 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="111" />
248 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="96" />
249 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="129" />
250 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="question" k="158" />
251 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="asterisk" k="207" />
252 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="199" />
253 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="18" />
254 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="23" />
255 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="u" k="25" />
256 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="v" k="41" />
257 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="w" k="35" />
258 <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="y,yacute,ydieresis" k="41" />
259 <hkern g1="B" g2="T" k="35" />
260 <hkern g1="B" g2="V" k="27" />
261 <hkern g1="B" g2="W" k="20" />
262 <hkern g1="B" g2="Y,Yacute,Ydieresis" k="61" />
263 <hkern g1="B" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
264 <hkern g1="C,Ccedilla" g2="V" k="4" />
265 <hkern g1="C,Ccedilla" g2="W" k="6" />
266 <hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="33" />
267 <hkern g1="C,Ccedilla" g2="question" k="6" />
268 <hkern g1="C,Ccedilla" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="6" />
269 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="J" k="41" />
270 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="T" k="55" />
271 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="V" k="41" />
272 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="W" k="41" />
273 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Y,Yacute,Ydieresis" k="82" />
274 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="question" k="33" />
275 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
276 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="76" />
277 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="X" k="61" />
278 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Z" k="35" />
279 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="55" />
280 <hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="74" />
281 <hkern g1="F" g2="J" k="121" />
282 <hkern g1="F" g2="ampersand" k="12" />
283 <hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="102" />
284 <hkern g1="G" g2="T" k="6" />
285 <hkern g1="G" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="6" />
286 <hkern g1="G" g2="X" k="6" />
287 <hkern g1="G" g2="V" k="12" />
288 <hkern g1="G" g2="W" k="6" />
289 <hkern g1="G" g2="Y,Yacute,Ydieresis" k="18" />
290 <hkern g1="G" g2="question" k="12" />
291 <hkern g1="K" g2="Y,Yacute,Ydieresis" k="43" />
292 <hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="111" />
293 <hkern g1="K" g2="a,ae" k="35" />
294 <hkern g1="K" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="70" />
295 <hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="53" />
296 <hkern g1="K" g2="t" k="80" />
297 <hkern g1="K" g2="u" k="41" />
298 <hkern g1="K" g2="v" k="123" />
299 <hkern g1="K" g2="w" k="82" />
300 <hkern g1="K" g2="x" k="53" />
301 <hkern g1="K" g2="y,yacute,ydieresis" k="123" />
302 <hkern g1="K" g2="hyphen,periodcentered,endash,emdash" k="102" />
303 <hkern g1="L" g2="T" k="205" />
304 <hkern g1="L" g2="ampersand" k="14" />
305 <hkern g1="L" g2="V" k="184" />
306 <hkern g1="L" g2="W" k="135" />
307 <hkern g1="L" g2="Y,Yacute,Ydieresis" k="252" />
308 <hkern g1="L" g2="question" k="233" />
309 <hkern g1="L" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="250" />
310 <hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="70" />
311 <hkern g1="L" g2="a,ae" k="29" />
312 <hkern g1="L" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="43" />
313 <hkern g1="L" g2="t" k="68" />
314 <hkern g1="L" g2="u" k="29" />
315 <hkern g1="L" g2="v" k="117" />
316 <hkern g1="L" g2="w" k="76" />
317 <hkern g1="L" g2="y,yacute,ydieresis" k="117" />
318 <hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="55" />
319 <hkern g1="L" g2="asterisk" k="356" />
320 <hkern g1="P" g2="Y,Yacute,Ydieresis" k="6" />
321 <hkern g1="P" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="158" />
322 <hkern g1="P" g2="J" k="223" />
323 <hkern g1="P" g2="X" k="18" />
324 <hkern g1="P" g2="ampersand" k="53" />
325 <hkern g1="P" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="193" />
326 <hkern g1="P" g2="a,ae" k="41" />
327 <hkern g1="P" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="27" />
328 <hkern g1="P" g2="hyphen,periodcentered,endash,emdash" k="70" />
329 <hkern g1="R" g2="T" k="20" />
330 <hkern g1="R" g2="V" k="20" />
331 <hkern g1="R" g2="Y,Yacute,Ydieresis" k="33" />
332 <hkern g1="R" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="6" />
333 <hkern g1="R" g2="ampersand" k="6" />
334 <hkern g1="R" g2="a,ae" k="41" />
335 <hkern g1="R" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="61" />
336 <hkern g1="R" g2="s" k="12" />
337 <hkern g1="S" g2="T" k="12" />
338 <hkern g1="S" g2="Y,Yacute,Ydieresis" k="20" />
339 <hkern g1="S" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="20" />
340 <hkern g1="S" g2="t" k="35" />
341 <hkern g1="S" g2="v" k="12" />
342 <hkern g1="S" g2="w" k="6" />
343 <hkern g1="S" g2="x" k="27" />
344 <hkern g1="S" g2="y,yacute,ydieresis" k="12" />
345 <hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="55" />
346 <hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="137" />
347 <hkern g1="T" g2="J" k="170" />
348 <hkern g1="T" g2="ampersand" k="117" />
349 <hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="190" />
350 <hkern g1="T" g2="a,ae" k="195" />
351 <hkern g1="T" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="236" />
352 <hkern g1="T" g2="hyphen,periodcentered,endash,emdash" k="123" />
353 <hkern g1="T" g2="s" k="186" />
354 <hkern g1="T" g2="v" k="115" />
355 <hkern g1="T" g2="w" k="115" />
356 <hkern g1="T" g2="x" k="135" />
357 <hkern g1="T" g2="y,yacute,ydieresis" k="115" />
358 <hkern g1="T" g2="S" k="6" />
359 <hkern g1="T" g2="colon,semicolon" k="102" />
360 <hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="63" />
361 <hkern g1="T" g2="m,n,p,r,z" k="174" />
362 <hkern g1="T" g2="u" k="174" />
363 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="53" />
364 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="25" />
365 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
366 <hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
367 <hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="111" />
368 <hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
369 <hkern g1="V" g2="J" k="190" />
370 <hkern g1="V" g2="ampersand" k="59" />
371 <hkern g1="V" g2="a,ae" k="129" />
372 <hkern g1="V" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="123" />
373 <hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="47" />
374 <hkern g1="V" g2="m,n,p,r,z" k="86" />
375 <hkern g1="V" g2="s" k="80" />
376 <hkern g1="V" g2="t" k="27" />
377 <hkern g1="V" g2="u" k="86" />
378 <hkern g1="V" g2="v" k="27" />
379 <hkern g1="V" g2="w" k="12" />
380 <hkern g1="V" g2="x" k="47" />
381 <hkern g1="V" g2="y,yacute,ydieresis" k="12" />
382 <hkern g1="V" g2="hyphen,periodcentered,endash,emdash" k="109" />
383 <hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="137" />
384 <hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="96" />
385 <hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
386 <hkern g1="W" g2="J" k="78" />
387 <hkern g1="W" g2="ampersand" k="41" />
388 <hkern g1="W" g2="a,ae" k="82" />
389 <hkern g1="W" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="82" />
390 <hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="27" />
391 <hkern g1="W" g2="m,n,p,r,z" k="61" />
392 <hkern g1="W" g2="s" k="39" />
393 <hkern g1="W" g2="t" k="27" />
394 <hkern g1="W" g2="u" k="61" />
395 <hkern g1="W" g2="v" k="6" />
396 <hkern g1="W" g2="x" k="47" />
397 <hkern g1="W" g2="y,yacute,ydieresis" k="6" />
398 <hkern g1="W" g2="hyphen,periodcentered,endash,emdash" k="68" />
399 <hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
400 <hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="129" />
401 <hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82" />
402 <hkern g1="Y,Yacute,Ydieresis" g2="J" k="231" />
403 <hkern g1="Y,Yacute,Ydieresis" g2="ampersand" k="123" />
404 <hkern g1="Y,Yacute,Ydieresis" g2="a,ae" k="248" />
405 <hkern g1="Y,Yacute,Ydieresis" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="260" />
406 <hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="100" />
407 <hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,z" k="184" />
408 <hkern g1="Y,Yacute,Ydieresis" g2="s" k="205" />
409 <hkern g1="Y,Yacute,Ydieresis" g2="t" k="53" />
410 <hkern g1="Y,Yacute,Ydieresis" g2="u" k="184" />
411 <hkern g1="Y,Yacute,Ydieresis" g2="v" k="123" />
412 <hkern g1="Y,Yacute,Ydieresis" g2="w" k="123" />
413 <hkern g1="Y,Yacute,Ydieresis" g2="x" k="150" />
414 <hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="123" />
415 <hkern g1="Y,Yacute,Ydieresis" g2="hyphen,periodcentered,endash,emdash" k="238" />
416 <hkern g1="Y,Yacute,Ydieresis" g2="S" k="41" />
417 <hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="121" />
418 <hkern g1="Z" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="35" />
419 <hkern g1="a,h,m,n" g2="T" k="221" />
420 <hkern g1="a,h,m,n" g2="question" k="74" />
421 <hkern g1="a,h,m,n" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="12" />
422 <hkern g1="a,h,m,n" g2="Y,Yacute,Ydieresis" k="225" />
423 <hkern g1="a,h,m,n" g2="V" k="135" />
424 <hkern g1="a,h,m,n" g2="W" k="88" />
425 <hkern g1="ampersand" g2="T" k="152" />
426 <hkern g1="ampersand" g2="Y,Yacute,Ydieresis" k="186" />
427 <hkern g1="ampersand" g2="V" k="102" />
428 <hkern g1="ampersand" g2="W" k="98" />
429 <hkern g1="asterisk" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="207" />
430 <hkern g1="asterisk" g2="J" k="238" />
431 <hkern g1="b,o,p,oslash,thorn" g2="T" k="236" />
432 <hkern g1="b,o,p,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="14" />
433 <hkern g1="b,o,p,oslash,thorn" g2="question" k="94" />
434 <hkern g1="b,o,p,oslash,thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
435 <hkern g1="b,o,p,oslash,thorn" g2="Y,Yacute,Ydieresis" k="254" />
436 <hkern g1="b,o,p,oslash,thorn" g2="V" k="123" />
437 <hkern g1="b,o,p,oslash,thorn" g2="W" k="82" />
438 <hkern g1="b,o,p,oslash,thorn" g2="x" k="76" />
439 <hkern g1="c,cent,ccedilla" g2="T" k="166" />
440 <hkern g1="c,cent,ccedilla" g2="question" k="47" />
441 <hkern g1="c,cent,ccedilla" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="6" />
442 <hkern g1="c,cent,ccedilla" g2="Y,Yacute,Ydieresis" k="129" />
443 <hkern g1="c,cent,ccedilla" g2="V" k="74" />
444 <hkern g1="c,cent,ccedilla" g2="W" k="47" />
445 <hkern g1="colon,semicolon" g2="T" k="102" />
446 <hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="121" />
447 <hkern g1="e,ae,oe" g2="T" k="207" />
448 <hkern g1="e,ae,oe" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="14" />
449 <hkern g1="e,ae,oe" g2="question" k="74" />
450 <hkern g1="e,ae,oe" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="6" />
451 <hkern g1="e,ae,oe" g2="Y,Yacute,Ydieresis" k="225" />
452 <hkern g1="e,ae,oe" g2="V" k="109" />
453 <hkern g1="e,ae,oe" g2="W" k="82" />
454 <hkern g1="e,ae,oe" g2="asterisk" k="35" />
455 <hkern g1="eth" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="14" />
456 <hkern g1="f" g2="T" k="-82" />
457 <hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="88" />
458 <hkern g1="f" g2="ampersand" k="6" />
459 <hkern g1="f" g2="question" k="-117" />
460 <hkern g1="f" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="-137" />
461 <hkern g1="f" g2="Y,Yacute,Ydieresis" k="-115" />
462 <hkern g1="f" g2="V" k="-129" />
463 <hkern g1="f" g2="W" k="-129" />
464 <hkern g1="f" g2="X" k="-82" />
465 <hkern g1="f" g2="Z" k="-82" />
466 <hkern g1="f" g2="asterisk" k="-137" />
467 <hkern g1="f" g2="parenright,bracketright,braceright" k="-152" />
468 <hkern g1="f" g2="exclam,B,D,E,F,H,I,K,L,M,N,P,R,Egrave,Eacute,Ecircumflex,Edieresis,Igrave,Iacute,Icircumflex,Idieresis,Eth,Ntilde" k="-82" />
469 <hkern g1="f" g2="S" k="-47" />
470 <hkern g1="f" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="-82" />
471 <hkern g1="g,q" g2="T" k="174" />
472 <hkern g1="g,q" g2="question" k="47" />
473 <hkern g1="g,q" g2="Y,Yacute,Ydieresis" k="184" />
474 <hkern g1="g,q" g2="V" k="86" />
475 <hkern g1="g,q" g2="W" k="61" />
476 <hkern g1="g,q" g2="j" k="-94" />
477 <hkern g1="hyphen,periodcentered,endash,emdash" g2="Y,Yacute,Ydieresis" k="223" />
478 <hkern g1="hyphen,periodcentered,endash,emdash" g2="V" k="109" />
479 <hkern g1="hyphen,periodcentered,endash,emdash" g2="W" k="68" />
480 <hkern g1="hyphen,periodcentered,endash,emdash" g2="X" k="88" />
481 <hkern g1="k" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="6" />
482 <hkern g1="k" g2="bullet" k="55" />
483 <hkern g1="k" g2="hyphen,periodcentered,endash,emdash" k="55" />
484 <hkern g1="k" g2="Y,Yacute,Ydieresis" k="135" />
485 <hkern g1="k" g2="T" k="141" />
486 <hkern g1="k" g2="V" k="47" />
487 <hkern g1="k" g2="W" k="47" />
488 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="14" />
489 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="Y,Yacute,Ydieresis" k="184" />
490 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="T" k="190" />
491 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="V" k="178" />
492 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="W" k="137" />
493 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="61" />
494 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="47" />
495 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="t" k="47" />
496 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="v" k="137" />
497 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="w" k="90" />
498 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="y,yacute,ydieresis" k="117" />
499 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="one" k="160" />
500 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="zero,six" k="63" />
501 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="seven" k="135" />
502 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="156" />
503 <hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="j" k="-82" />
504 <hkern g1="questiondown" g2="j" k="-328" />
505 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="213" />
506 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="6" />
507 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="s" k="61" />
508 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="J" k="188" />
509 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="156" />
510 <hkern g1="r" g2="Y,Yacute,Ydieresis" k="102" />
511 <hkern g1="r" g2="T" k="98" />
512 <hkern g1="r" g2="V" k="47" />
513 <hkern g1="r" g2="W" k="12" />
514 <hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="170" />
515 <hkern g1="r" g2="X" k="18" />
516 <hkern g1="s" g2="Y,Yacute,Ydieresis" k="190" />
517 <hkern g1="s" g2="T" k="180" />
518 <hkern g1="s" g2="V" k="88" />
519 <hkern g1="s" g2="W" k="80" />
520 <hkern g1="s" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="41" />
521 <hkern g1="s" g2="X" k="6" />
522 <hkern g1="s" g2="question" k="88" />
523 <hkern g1="t" g2="Y,Yacute,Ydieresis" k="68" />
524 <hkern g1="t" g2="T" k="106" />
525 <hkern g1="t" g2="V" k="53" />
526 <hkern g1="t" g2="W" k="27" />
527 <hkern g1="u,z" g2="Y,Yacute,Ydieresis" k="184" />
528 <hkern g1="u,z" g2="T" k="174" />
529 <hkern g1="u,z" g2="V" k="86" />
530 <hkern g1="u,z" g2="W" k="61" />
531 <hkern g1="u,z" g2="question" k="47" />
532 <hkern g1="v" g2="Y,Yacute,Ydieresis" k="123" />
533 <hkern g1="v" g2="T" k="115" />
534 <hkern g1="v" g2="V" k="27" />
535 <hkern g1="v" g2="W" k="6" />
536 <hkern g1="v" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
537 <hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="137" />
538 <hkern g1="v" g2="X" k="76" />
539 <hkern g1="w" g2="Y,Yacute,Ydieresis" k="123" />
540 <hkern g1="w" g2="T" k="115" />
541 <hkern g1="w" g2="V" k="12" />
542 <hkern g1="w" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="35" />
543 <hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="90" />
544 <hkern g1="w" g2="X" k="90" />
545 <hkern g1="y,yacute,ydieresis" g2="Y,Yacute,Ydieresis" k="123" />
546 <hkern g1="y,yacute,ydieresis" g2="T" k="115" />
547 <hkern g1="y,yacute,ydieresis" g2="V" k="12" />
548 <hkern g1="y,yacute,ydieresis" g2="W" k="6" />
549 <hkern g1="y,yacute,ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
550 <hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="117" />
551 <hkern g1="y,yacute,ydieresis" g2="X" k="76" />
552 <hkern g1="y,yacute,ydieresis" g2="question" k="6" />
553 <hkern g1="X" g2="hyphen,periodcentered,endash,emdash" k="88" />
554 <hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="61" />
555 <hkern g1="X" g2="t" k="61" />
556 <hkern g1="X" g2="v" k="76" />
557 <hkern g1="X" g2="w" k="90" />
558 <hkern g1="X" g2="y,yacute,ydieresis" k="76" />
559 <hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
560 <hkern g1="zero,nine" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="63" />
561 <hkern g1="seven" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="199" />
562 <hkern g1="x" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="76" />
563 <hkern g1="x" g2="Y,Yacute,Ydieresis" k="150" />
564 <hkern g1="x" g2="T" k="135" />
565 <hkern g1="x" g2="V" k="47" />
566 <hkern g1="x" g2="W" k="47" />
567 <hkern g1="parenleft,bracketleft,braceleft" g2="j" k="-225" />
568 </font>
569 </defs></svg>
docs/_themes/lucuma/static/fonts/proximanova-regular-webfont.ttf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-regular-webfont.woff less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-regular-webfont.woff2 less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-semibold-webfont.eot less more
Binary diff not shown
+0
-535
docs/_themes/lucuma/static/fonts/proximanova-semibold-webfont.svg less more
0 <?xml version="1.0" standalone="no"?>
1 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
2 <svg xmlns="http://www.w3.org/2000/svg">
3 <metadata></metadata>
4 <defs>
5 <font id="proxima_novasemibold" horiz-adv-x="1175" >
6 <font-face units-per-em="2048" ascent="1618" descent="-430" />
7 <missing-glyph horiz-adv-x="528" />
8 <glyph unicode="&#xfb01;" horiz-adv-x="1126" d="M29 803v186h164v55q0 162 86 252t225 90q109 0 174 -36l-47 -162q-36 22 -86 22q-66 0 -101.5 -42t-35.5 -124v-55h200v-186h-200v-803h-215v803h-164zM748 1243q0 55 39 94t94 39t94 -39t39 -94t-39 -94t-94 -39t-94 39t-39 94zM772 0v989h215v-989h-215z" />
9 <glyph unicode="&#xfb02;" horiz-adv-x="1126" d="M29 803v186h164v55q0 162 86 252t225 90q109 0 174 -36l-47 -162q-36 22 -86 22q-66 0 -101.5 -42t-35.5 -124v-55h200v-186h-200v-803h-215v803h-164zM772 0v1366h215v-1366h-215z" />
10 <glyph unicode="&#xfb03;" horiz-adv-x="1757" d="M29 803v186h164v55q0 159 85 250.5t226 91.5q156 0 237 -86l-84 -133q-46 43 -112 43t-101.5 -42t-35.5 -124v-55h200v-186h-200v-803h-215v803h-164zM662 803v186h163v55q0 162 86.5 252t225.5 90q109 0 174 -36l-47 -162q-36 22 -86 22q-66 0 -102 -42t-36 -124v-55 h201v-186h-201v-803h-215v803h-163zM1378 1243q0 55 39 94t94 39q56 0 95 -39t39 -94t-39 -94t-95 -39q-55 0 -94 39t-39 94zM1403 0v989h215v-989h-215z" />
11 <glyph unicode="&#xfb04;" horiz-adv-x="1757" d="M29 803v186h164v55q0 159 85 250.5t226 91.5q156 0 237 -86l-84 -133q-46 43 -112 43t-101.5 -42t-35.5 -124v-55h200v-186h-200v-803h-215v803h-164zM662 803v186h163v55q0 162 86.5 252t225.5 90q109 0 174 -36l-47 -162q-36 22 -86 22q-66 0 -102 -42t-36 -124v-55 h201v-186h-201v-803h-215v803h-163zM1403 0v1366h215v-1366h-215z" />
12 <glyph horiz-adv-x="0" />
13 <glyph horiz-adv-x="682" />
14 <glyph unicode=" " horiz-adv-x="528" />
15 <glyph unicode="&#x09;" horiz-adv-x="528" />
16 <glyph unicode="&#xa0;" horiz-adv-x="528" />
17 <glyph unicode="!" horiz-adv-x="499" d="M109 123q0 57 42.5 99t100.5 42t99.5 -42t41.5 -99q0 -59 -41.5 -101t-99.5 -42t-100.5 42t-42.5 101zM119 1366h262l-37 -946h-186z" />
18 <glyph unicode="&#x22;" horiz-adv-x="778" d="M98 1266q0 51 35.5 85.5t85.5 34.5q51 0 86 -34.5t35 -85.5q0 -16 -18 -132t-36 -224l-18 -109h-98q-72 430 -72 465zM438 1266q0 51 35 85.5t86 34.5t86 -34.5t35 -85.5q0 -16 -18 -132t-36 -224l-18 -109h-98q-72 430 -72 465z" />
19 <glyph unicode="#" horiz-adv-x="1243" d="M39 358l45 142h209l123 366h-209l43 142h213l119 358h163l-118 -358h207l118 358h164l-121 -358h209l-41 -142h-213l-125 -366h217l-45 -142h-219l-119 -358h-163l120 358h-208l-119 -358h-164l121 358h-207zM457 500h205l124 366h-206z" />
20 <glyph unicode="$" horiz-adv-x="1239" d="M74 193l135 186q61 -68 149.5 -118t192.5 -66v397q-52 13 -91 24.5t-86.5 30.5t-81.5 39t-68.5 50.5t-56 65.5t-35 82t-13.5 103q0 159 118 269.5t314 127.5v189h164v-191q245 -27 411 -186l-135 -178q-112 112 -276 145v-354q76 -20 129.5 -37.5t117.5 -51.5 t103.5 -74.5t66.5 -104t27 -142.5q0 -80 -26.5 -150t-79.5 -127.5t-139.5 -94.5t-198.5 -47v-185h-164v185q-293 22 -477 213zM365 1006q0 -56 47.5 -91t138.5 -63v322q-86 -11 -136 -56t-50 -112zM715 193q99 14 148.5 66t49.5 118q0 64 -51 103t-147 69v-356z" />
21 <glyph unicode="%" horiz-adv-x="1529" d="M57 1047q0 146 94.5 242.5t245.5 96.5q152 0 246 -96t94 -243q0 -145 -94.5 -241.5t-245.5 -96.5q-150 0 -245 96.5t-95 241.5zM217 1047q0 -89 51 -145t129 -56q80 0 131.5 56t51.5 145q0 90 -51.5 147t-131.5 57q-78 0 -129 -57t-51 -147zM264 0l873 1366h139 l-875 -1366h-137zM793 313q0 147 94.5 243.5t245.5 96.5t245.5 -96.5t94.5 -243.5q0 -145 -95 -241.5t-245 -96.5t-245 96.5t-95 241.5zM950 313q0 -89 51.5 -144.5t131.5 -55.5t131 55.5t51 144.5q0 90 -51 147.5t-131 57.5t-131.5 -57.5t-51.5 -147.5z" />
22 <glyph unicode="&#x26;" horiz-adv-x="1320" d="M61 365q0 76 23 139t67 110.5t92.5 82t114.5 67.5q-96 172 -96 301q0 137 106 229t265 92q144 0 240 -74.5t96 -203.5q0 -60 -20.5 -111.5t-49 -87t-79 -71.5t-89.5 -57.5t-102 -51.5q57 -80 135 -170q83 -101 135 -158q85 126 135 287l174 -80q-84 -198 -188 -340 q144 -151 266 -268h-282q-70 66 -121 119q-171 -144 -383 -144q-92 0 -171 25t-139 72.5t-94.5 123t-34.5 169.5zM289 383q0 -108 69.5 -172t169.5 -64q117 0 236 97q-114 120 -168 190q-86 99 -152 195q-74 -49 -114.5 -107t-40.5 -139zM477 1059q0 -86 68 -205 q54 26 91.5 48.5t72 52t52 64.5t17.5 77q0 62 -38.5 97.5t-98.5 35.5q-69 0 -116.5 -48t-47.5 -122z" />
23 <glyph unicode="'" horiz-adv-x="438" d="M98 1266q0 51 35.5 85.5t85.5 34.5q51 0 86 -34.5t35 -85.5q0 -16 -18 -132t-36 -224l-18 -109h-98q-72 430 -72 465z" />
24 <glyph unicode="(" horiz-adv-x="565" d="M86 498q0 248 82.5 488t228.5 417l133 -100q-109 -201 -160 -386.5t-51 -418.5q0 -230 51.5 -417.5t159.5 -385.5l-133 -103q-146 177 -228.5 417.5t-82.5 488.5z" />
25 <glyph unicode=")" horiz-adv-x="567" d="M37 -305l133 -103q145 177 227 418t82 488t-82 487.5t-227 417.5l-133 -100q107 -202 158 -387.5t51 -417.5q0 -230 -51 -417t-158 -386z" />
26 <glyph unicode="*" horiz-adv-x="710" d="M59 975l203 104l-203 105l58 98l192 -125l-10 229h113l-11 -229l193 125l57 -98l-205 -105l205 -104l-57 -98l-193 122l11 -229h-113l10 229l-192 -122z" />
27 <glyph unicode="+" horiz-adv-x="1028" d="M59 623v137h379v411h152v-411h379v-137h-379v-426h-152v426h-379z" />
28 <glyph unicode="," horiz-adv-x="501" d="M109 125q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -195.5t-139 -154.5l-98 79q51 30 94.5 86t52.5 107q-12 -6 -35 -6q-51 0 -85.5 37t-34.5 94z" />
29 <glyph unicode="-" horiz-adv-x="614" d="M61 403v185h492v-185h-492z" />
30 <glyph unicode="." horiz-adv-x="503" d="M109 123q0 57 42.5 99t100.5 42t100.5 -42t42.5 -99q0 -59 -42.5 -102.5t-100.5 -43.5t-100.5 43.5t-42.5 102.5z" />
31 <glyph unicode="/" horiz-adv-x="645" d="M0 -41l485 1448h160l-485 -1448h-160z" />
32 <glyph unicode="0" horiz-adv-x="1263" d="M86 682q0 106 19.5 205.5t62.5 191t105.5 159t155 108t204.5 40.5q111 0 203 -40.5t154.5 -108t105.5 -159t62.5 -191t19.5 -205.5q0 -105 -19.5 -205t-62.5 -191.5t-105.5 -160t-154.5 -109.5t-203 -41q-112 0 -204.5 41t-155 109.5t-105.5 160t-62.5 191.5t-19.5 205z M330 682q0 -102 16.5 -187.5t51 -156t94.5 -110.5t141 -40q80 0 140 40t94 110.5t50.5 156t16.5 187.5q0 103 -16 188.5t-50.5 155t-94 109t-140.5 39.5t-141 -39.5t-94.5 -109t-51 -155.5t-16.5 -188z" />
33 <glyph unicode="1" horiz-adv-x="778" d="M31 969l393 397h209v-1366h-240v1057l-223 -234z" />
34 <glyph unicode="2" horiz-adv-x="1218" d="M84 1167q88 107 222 163t284 56q135 0 245 -47t179 -144t69 -228q0 -75 -28 -150.5t-76 -145.5t-125.5 -148.5t-163.5 -151t-203 -160.5h605v-211h-990v190q147 112 240 184.5t186 150t144.5 131t94 110t59 104t16.5 97.5q0 68 -37 116.5t-92 69.5t-121 21 q-224 0 -369 -162z" />
35 <glyph unicode="3" d="M49 197l131 157q66 -77 167 -121.5t210 -44.5q133 0 209 57t76 152q0 195 -303 195q-116 0 -156 -4v217q23 -2 156 -2q128 0 205 45t77 135t-78.5 140.5t-197.5 50.5q-206 0 -355 -152l-122 149q84 99 210 157t289 58q223 0 357.5 -98.5t134.5 -267.5q0 -66 -26 -122.5 t-69.5 -94.5t-94.5 -62.5t-105 -33.5q52 -6 105.5 -29t102 -62.5t79 -102.5t30.5 -138q0 -177 -140.5 -288.5t-375.5 -111.5q-173 0 -307 62t-209 160z" />
36 <glyph unicode="4" horiz-adv-x="1187" d="M57 309v193l561 864h330v-846h182v-211h-182v-309h-239v309h-652zM293 520h416v631z" />
37 <glyph unicode="5" horiz-adv-x="1228" d="M117 186l137 166q139 -164 367 -164q127 0 203.5 69t76.5 173q0 109 -74.5 175.5t-199.5 66.5q-173 0 -299 -117l-170 49v762h895v-211h-656v-393q55 51 136 84t174 33q118 0 216 -50.5t160 -152.5t62 -238q0 -210 -145.5 -336.5t-376.5 -126.5q-324 0 -506 211z" />
38 <glyph unicode="6" horiz-adv-x="1230" d="M86 682q0 149 39 276t113 223t190 150.5t260 54.5q240 0 391 -151l-110 -180q-58 59 -123.5 89t-157.5 30q-111 0 -194 -63t-124.5 -164.5t-41.5 -223.5v-39q52 77 153 135t213 58q126 0 228.5 -49t166.5 -151.5t64 -242.5q0 -126 -61.5 -230t-177.5 -166.5t-265 -62.5 q-117 0 -212 37t-159.5 102t-108.5 155t-63.5 193t-19.5 220zM332 510q5 -59 24 -113t53 -102.5t92.5 -77.5t133.5 -29q126 0 200 73.5t74 164.5q0 119 -79.5 181.5t-198.5 62.5q-87 0 -167.5 -43t-131.5 -117z" />
39 <glyph unicode="7" horiz-adv-x="1089" d="M55 1155v211h985v-166l-528 -1200h-264l516 1155h-709z" />
40 <glyph unicode="8" horiz-adv-x="1220" d="M86 352q0 123 87 216t220 137q-127 40 -205.5 121t-78.5 202q0 74 29 134.5t77.5 101.5t113.5 69t135.5 40.5t145.5 12.5q94 0 181 -21t160 -62t117 -112.5t44 -162.5q0 -121 -79 -202t-206 -121q133 -44 220.5 -137t87.5 -216q0 -119 -74 -206t-191 -129t-260 -42 t-260.5 42t-190.5 129t-73 206zM330 383q0 -89 80 -142t200 -53q118 0 199.5 53.5t81.5 141.5q0 49 -31 90.5t-79 66t-91 39t-80 19.5q-38 -5 -81 -19.5t-90 -39t-78 -65.5t-31 -91zM352 991q0 -36 19.5 -67t47.5 -51t65.5 -35.5t67 -23.5t58.5 -13q39 6 77 18t82 33.5 t71.5 57.5t27.5 81q0 86 -72 134.5t-186 48.5t-186 -48.5t-72 -134.5z" />
41 <glyph unicode="9" horiz-adv-x="1230" d="M80 930q0 195 140 327t364 132q117 0 212 -37t159.5 -101.5t108.5 -154.5t63.5 -193t19.5 -219q0 -119 -24.5 -225t-74 -194.5t-120.5 -152.5t-169 -99.5t-214 -35.5q-238 0 -393 152l112 182q58 -61 123 -91t158 -30q89 0 160 38.5t113.5 103.5t64.5 144t22 165 q0 27 -2 39q-50 -76 -151 -133.5t-215 -57.5q-126 0 -228 48.5t-165.5 150.5t-63.5 242zM322 938q0 -120 79.5 -182t200.5 -62q87 0 166.5 44t132.5 118q-4 47 -16.5 90t-36.5 86t-57.5 74t-83.5 50.5t-111 19.5q-126 0 -200 -73t-74 -165z" />
42 <glyph unicode=":" horiz-adv-x="485" d="M109 123q0 57 42.5 99t100.5 42t100.5 -42t42.5 -99q0 -59 -42.5 -102.5t-100.5 -43.5t-100.5 43.5t-42.5 102.5zM109 860q0 59 42.5 101.5t100.5 42.5t100.5 -42.5t42.5 -101.5q0 -57 -42.5 -99t-100.5 -42t-100.5 42t-42.5 99z" />
43 <glyph unicode=";" horiz-adv-x="501" d="M109 131q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -195.5t-139 -154.5l-98 80q51 30 94.5 85.5t52.5 106.5q-8 -4 -35 -4q-51 0 -85.5 36.5t-34.5 92.5zM109 862q0 58 42 100t101 42t101 -42t42 -100t-42.5 -100.5t-100.5 -42.5t-100.5 42.5t-42.5 100.5z " />
44 <glyph unicode="&#x3c;" horiz-adv-x="1028" d="M59 608v156l910 424v-164l-746 -340l746 -334v-166z" />
45 <glyph unicode="=" horiz-adv-x="1028" d="M59 420v139h910v-139h-910zM59 811v137h910v-137h-910z" />
46 <glyph unicode="&#x3e;" horiz-adv-x="1028" d="M59 184v166l748 334l-748 340v164l910 -424v-156z" />
47 <glyph unicode="?" horiz-adv-x="940" d="M27 1184q78 97 193.5 149.5t252.5 52.5q190 0 303 -90t113 -231q0 -62 -20 -114t-52.5 -88.5t-71.5 -68t-77.5 -58.5t-71 -53t-52.5 -58.5t-20 -69.5q0 -26 12 -52t33 -40l-182 -62q-72 69 -72 177q0 69 34 124.5t82.5 92t97 69.5t82.5 74t34 88q0 64 -50 106t-144 42 q-174 0 -285 -144zM317 123q0 57 43 99t101 42t100.5 -42t42.5 -99q0 -59 -42.5 -102.5t-100.5 -43.5t-101 43.5t-43 102.5z" />
48 <glyph unicode="@" horiz-adv-x="1603" d="M72 500q0 215 114 402t301.5 296t397.5 109q191 0 339.5 -86.5t227 -231t78.5 -319.5q0 -119 -35 -216.5t-91 -157t-122.5 -91t-134.5 -31.5q-84 0 -134.5 46t-58.5 112l-2 14q-55 -78 -137 -125t-170 -47q-146 0 -231.5 94.5t-85.5 245.5q0 136 67.5 254t176 186 t227.5 68q92 0 158.5 -41t101.5 -107l22 117h193l-111 -524q-4 -20 -4 -45q0 -48 23.5 -73t60.5 -25q32 0 66.5 19t67 58t53 109.5t20.5 161.5q0 248 -156.5 403.5t-414.5 155.5q-144 0 -279 -60t-233.5 -159.5t-157.5 -233t-59 -274.5q0 -120 43.5 -226t120 -182.5 t184.5 -121t233 -44.5q198 0 375 115l41 -59q-200 -129 -426 -129q-183 0 -332 85t-233 232t-84 326zM528 528q0 -89 50 -143.5t137 -54.5q83 0 149 44.5t111 110.5l53 258q-18 48 -65.5 85.5t-118.5 37.5q-133 0 -224.5 -102.5t-91.5 -235.5z" />
49 <glyph unicode="A" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM444 475h492l-246 651z" />
50 <glyph unicode="B" horiz-adv-x="1329" d="M145 0v1366h672q183 0 286 -98.5t103 -249.5q0 -123 -68.5 -207.5t-168.5 -105.5q111 -17 187.5 -113.5t76.5 -220.5q0 -165 -104.5 -268t-292.5 -103h-691zM385 211h395q97 0 152 50.5t55 139.5q0 81 -55 136t-152 55h-395v-381zM385 803h385q89 0 140 48.5t51 127.5 q0 77 -51 126.5t-140 49.5h-385v-352z" />
51 <glyph unicode="C" horiz-adv-x="1396" d="M86 682q0 155 55.5 288t151.5 224.5t228 143t282 51.5q192 0 328 -84.5t219 -221.5l-203 -106q-51 88 -144 143.5t-200 55.5q-203 0 -337 -139t-134 -355q0 -213 134 -353.5t337 -140.5q106 0 199.5 56t144.5 143l205 -102q-197 -310 -549 -310q-150 0 -282 52 t-228 143.5t-151.5 224.5t-55.5 287z" />
52 <glyph unicode="D" horiz-adv-x="1454" d="M145 0v1366h508q211 0 374 -87t252 -242t89 -353q0 -303 -197.5 -493.5t-515.5 -190.5h-510zM385 211h268q144 0 252 64.5t162.5 171t54.5 237.5q0 133 -52.5 238.5t-160 169t-254.5 63.5h-270v-944z" />
53 <glyph unicode="E" horiz-adv-x="1181" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936z" />
54 <glyph unicode="F" horiz-adv-x="1153" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-592h-240z" />
55 <glyph unicode="G" horiz-adv-x="1468" d="M86 682q0 158 56.5 291.5t153 224t228 141t279.5 50.5q351 0 549 -283l-195 -113q-59 81 -152 132t-202 51q-203 0 -337 -139t-134 -355q0 -213 134 -353.5t337 -140.5q97 0 184.5 36.5t138.5 86.5v211h-409v211h647v-510q-104 -117 -247 -183.5t-314 -66.5 q-198 0 -361 87t-259.5 250t-96.5 372z" />
56 <glyph unicode="H" horiz-adv-x="1480" d="M145 0v1366h240v-557h711v557h239v-1366h-239v598h-711v-598h-240z" />
57 <glyph unicode="I" horiz-adv-x="530" d="M145 0v1366h240v-1366h-240z" />
58 <glyph unicode="J" horiz-adv-x="987" d="M16 121l113 182q100 -115 233 -115q108 0 174 68.5t66 179.5v930h240v-932q0 -225 -127 -342t-334 -117q-225 0 -365 146z" />
59 <glyph unicode="K" horiz-adv-x="1271" d="M145 0v1366h240v-649l535 649h297l-555 -643l598 -723h-297l-457 578l-121 -142v-436h-240z" />
60 <glyph unicode="L" horiz-adv-x="1036" d="M129 0v1366h240v-1155h602v-211h-842z" />
61 <glyph unicode="M" horiz-adv-x="1710" d="M145 0v1366h338l373 -938l371 938h338v-1366h-240v1055l-418 -1055h-102l-420 1055v-1055h-240z" />
62 <glyph unicode="N" horiz-adv-x="1474" d="M145 0v1366h246l699 -946v946h239v-1366h-231l-713 977v-977h-240z" />
63 <glyph unicode="O" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355z" />
64 <glyph unicode="P" horiz-adv-x="1247" d="M145 0v1366h603q207 0 325.5 -122.5t118.5 -305.5q0 -181 -119 -303.5t-325 -122.5h-363v-512h-240zM385 723h330q102 0 166.5 59.5t64.5 155.5q0 98 -64.5 157.5t-166.5 59.5h-330v-432z" />
65 <glyph unicode="Q" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282q0 -293 -183 -492l113 -127l-166 -139l-119 133q-155 -82 -344 -82q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q106 0 193 41l-170 193 l168 139l170 -192q92 131 92 313q0 215 -125 354.5t-328 139.5q-204 0 -328 -139t-124 -355z" />
66 <glyph unicode="R" horiz-adv-x="1288" d="M145 0v1366h600q202 0 325.5 -118.5t123.5 -309.5q0 -88 -27.5 -160.5t-74 -121t-103.5 -79t-121 -40.5l336 -537h-278l-301 510h-240v-510h-240zM385 721h330q102 0 167.5 60t65.5 159q0 97 -65 156t-168 59h-330v-434z" />
67 <glyph unicode="S" horiz-adv-x="1216" d="M57 193l136 186q77 -83 188 -137t244 -54q137 0 204.5 55.5t67.5 133.5q0 58 -44 97.5t-114 62t-155 42.5t-169.5 48.5t-154.5 69t-114 114.5t-44 176q0 173 138 287.5t360 114.5q314 0 510 -193l-135 -178q-79 79 -182.5 118.5t-214.5 39.5q-104 0 -167 -47.5 t-63 -122.5q0 -41 27 -71.5t73 -50t106 -36.5t126 -34t131.5 -37t125.5 -52t106 -74t73 -106.5t27 -145.5q0 -69 -19.5 -131t-61.5 -116t-103 -93t-149.5 -61.5t-195.5 -22.5q-346 0 -557 218z" />
68 <glyph unicode="T" horiz-adv-x="1181" d="M57 1155v211h1067v-211h-413v-1155h-240v1155h-414z" />
69 <glyph unicode="U" horiz-adv-x="1474" d="M145 541v825h244v-819q0 -166 90.5 -262.5t257.5 -96.5t257.5 96.5t90.5 262.5v819h244v-825q0 -261 -151 -413.5t-441 -152.5q-289 0 -440.5 152.5t-151.5 413.5z" />
70 <glyph unicode="V" horiz-adv-x="1378" d="M4 1366h272l414 -1104l414 1104h272l-536 -1366h-299z" />
71 <glyph unicode="W" horiz-adv-x="1849" d="M14 1366h267l266 -1051l282 1051h191l283 -1051l266 1051h268l-391 -1366h-256l-264 1010l-267 -1010h-256z" />
72 <glyph unicode="X" horiz-adv-x="1353" d="M8 0l510 700l-479 666h287l352 -500l350 500h289l-481 -664l512 -702h-287l-383 535l-383 -535h-287z" />
73 <glyph unicode="Y" horiz-adv-x="1304" d="M4 1366h275l374 -584l375 584h275l-529 -799v-567h-239v567z" />
74 <glyph unicode="Z" horiz-adv-x="1206" d="M92 0v195l696 960h-696v211h1010v-192l-701 -963h715v-211h-1024z" />
75 <glyph unicode="[" horiz-adv-x="542" d="M90 -389v1778h416v-148h-256v-1483h256v-147h-416z" />
76 <glyph unicode="\" horiz-adv-x="645" d="M0 1407h160l485 -1448h-160z" />
77 <glyph unicode="]" horiz-adv-x="542" d="M37 -242h256v1483h-256v148h416v-1778h-416v147z" />
78 <glyph unicode="^" horiz-adv-x="894" d="M39 682l332 684h157l328 -684h-164l-243 535l-244 -535h-166z" />
79 <glyph unicode="_" horiz-adv-x="1155" d="M-6 -82h1167v-147h-1167v147z" />
80 <glyph unicode="`" horiz-adv-x="491" d="M0 1434h205l287 -295h-154z" />
81 <glyph unicode="a" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5z" />
82 <glyph unicode="b" horiz-adv-x="1189" d="M139 0v1366h215v-514q59 79 142 120.5t176 41.5q195 0 317.5 -141t122.5 -377q0 -241 -122.5 -381t-317.5 -140q-94 0 -177 42.5t-141 117.5v-135h-215zM354 297q37 -56 109 -93.5t147 -37.5q126 0 202.5 92t76.5 238q0 144 -76.5 235.5t-202.5 91.5q-75 0 -146.5 -38 t-109.5 -95v-393z" />
83 <glyph unicode="c" horiz-adv-x="1019" d="M80 496q0 225 143.5 371.5t366.5 146.5q248 0 379 -176l-142 -129q-80 114 -227 114q-133 0 -216 -91t-83 -236t83 -237.5t216 -92.5q143 0 227 119l142 -133q-135 -177 -379 -177q-223 0 -366.5 148t-143.5 373z" />
84 <glyph unicode="d" horiz-adv-x="1189" d="M80 496q0 236 122.5 377t315.5 141q95 0 177.5 -41.5t140.5 -120.5v514h215v-1366h-215v135q-58 -75 -140.5 -117.5t-177.5 -42.5q-193 0 -315.5 140t-122.5 381zM301 496q0 -146 76.5 -238t204.5 -92q74 0 146 38.5t108 94.5v391q-36 56 -108 94.5t-146 38.5 q-127 0 -204 -91.5t-77 -235.5z" />
85 <glyph unicode="e" horiz-adv-x="1140" d="M80 496q0 142 63.5 260.5t179.5 188t259 69.5q220 0 352.5 -150.5t132.5 -386.5v-53h-762q13 -116 96 -194t217 -78q76 0 153.5 29t129.5 81l98 -141q-75 -70 -179.5 -108t-221.5 -38q-226 0 -372 144t-146 377zM303 578h557q-2 46 -19.5 90t-49.5 83.5t-86.5 63 t-124.5 23.5q-126 0 -198 -79.5t-79 -180.5z" />
86 <glyph unicode="f" horiz-adv-x="632" d="M29 803v186h164v55q0 159 85 250.5t226 91.5q156 0 237 -86l-84 -133q-46 43 -112 43t-101.5 -42t-35.5 -124v-55h200v-186h-200v-803h-215v803h-164z" />
87 <glyph unicode="g" horiz-adv-x="1189" d="M80 506q0 237 121 372.5t317 135.5q94 0 176 -41.5t142 -120.5v137h215v-938q0 -103 -30 -183.5t-78.5 -130t-116.5 -81.5t-137 -44.5t-146 -12.5q-131 0 -229 33t-187 114l100 156q113 -127 316 -127q56 0 105.5 14t93 44.5t69 86t25.5 131.5v113q-59 -77 -141.5 -121.5 t-176.5 -44.5q-194 0 -316 134.5t-122 373.5zM301 506q0 -143 76.5 -229.5t204.5 -86.5q73 0 144.5 38t109.5 94v370q-38 55 -109.5 93t-144.5 38q-128 0 -204.5 -87t-76.5 -230z" />
88 <glyph unicode="h" horiz-adv-x="1163" d="M141 0v1366h215v-510q56 66 148 112t201 46q159 0 239 -80t80 -234v-700h-215v623q0 111 -50.5 155.5t-148.5 44.5q-78 0 -145.5 -38t-108.5 -93v-692h-215z" />
89 <glyph unicode="i" horiz-adv-x="493" d="M115 1243q0 55 38.5 94t94.5 39t94.5 -39t38.5 -94t-38.5 -94t-94.5 -39t-94.5 39t-38.5 94zM139 0v989h215v-989h-215z" />
90 <glyph unicode="j" horiz-adv-x="493" d="M-207 -330l64 160q62 -55 137 -55q67 0 106 41.5t39 126.5v1046h215v-1046q0 -162 -83 -253t-244 -91q-82 0 -131 16t-103 55zM115 1243q0 55 38.5 94t94.5 39t94.5 -39t38.5 -94t-38.5 -94t-94.5 -39t-94.5 39t-38.5 94z" />
91 <glyph unicode="k" horiz-adv-x="1079" d="M139 0v1366h215v-854l437 477h266l-410 -448l418 -541h-270l-301 410l-140 -144v-266h-215z" />
92 <glyph unicode="l" horiz-adv-x="493" d="M139 0v1366h215v-1366h-215z" />
93 <glyph unicode="m" horiz-adv-x="1708" d="M139 0v989h215v-133q40 55 130.5 106.5t193.5 51.5q107 0 175.5 -48.5t94.5 -131.5q45 72 137.5 126t198.5 54q137 0 211 -75t74 -224v-715h-215v645q0 84 -40 131t-124 47q-68 0 -131 -38.5t-98 -92.5v-692h-216v645q0 178 -161 178q-67 0 -129.5 -39t-100.5 -92v-692 h-215z" />
94 <glyph unicode="n" horiz-adv-x="1163" d="M139 0v989h215v-133q55 65 148.5 111.5t202.5 46.5q158 0 238.5 -82t80.5 -236v-696h-215v618q0 111 -52 158t-149 47q-76 0 -144 -38t-110 -93v-692h-215z" />
95 <glyph unicode="o" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM303 496q0 -138 77 -234t208 -96q132 0 208 95.5t76 234.5q0 138 -76 232.5 t-208 94.5q-131 0 -208 -95t-77 -232z" />
96 <glyph unicode="p" horiz-adv-x="1185" d="M139 -377v1366h215v-135q56 75 139.5 117.5t178.5 42.5q196 0 317 -139t121 -379q0 -241 -121.5 -381t-316.5 -140q-190 0 -318 162v-514h-215zM354 301q36 -57 108 -96t146 -39q127 0 204 92t77 238t-77 236.5t-204 90.5q-74 0 -145.5 -37.5t-108.5 -93.5v-391z" />
97 <glyph unicode="q" horiz-adv-x="1185" d="M76 496q0 240 121 379t317 139q95 0 177.5 -42.5t139.5 -117.5v135h216v-1366h-216v514q-128 -162 -317 -162q-195 0 -316.5 140t-121.5 381zM297 496q0 -146 77 -238t204 -92q74 0 145.5 39t107.5 96v391q-37 56 -108 93.5t-145 37.5q-127 0 -204 -90.5t-77 -236.5z" />
98 <glyph unicode="r" horiz-adv-x="710" d="M139 0v989h215v-143q60 74 145.5 121t176.5 47v-213q-27 6 -66 6q-70 0 -147 -39.5t-109 -93.5v-674h-215z" />
99 <glyph unicode="s" horiz-adv-x="966" d="M55 131l99 154q55 -57 148.5 -97.5t184.5 -40.5q95 0 146 36t51 96q0 39 -33 65t-85.5 40.5t-116.5 27.5t-128 33.5t-116.5 50.5t-85.5 86t-33 133q0 127 104 213t285 86q228 0 383 -137l-90 -152q-47 52 -125 85.5t-168 33.5q-83 0 -132.5 -34.5t-49.5 -88.5 q0 -31 25.5 -53t67.5 -33.5t96 -24.5t110 -25t110 -35.5t96 -55t67.5 -85.5t25.5 -124q0 -136 -109 -223t-303 -87q-127 0 -237 40.5t-187 115.5z" />
100 <glyph unicode="t" horiz-adv-x="653" d="M20 803v186h164v271h215v-271h201v-186h-201v-518q0 -53 25 -86t70 -33q29 0 55 11t39 26l51 -164q-71 -64 -201 -64q-125 0 -189.5 65.5t-64.5 190.5v572h-164z" />
101 <glyph unicode="u" horiz-adv-x="1161" d="M139 289v700h215v-620q0 -110 51.5 -156.5t149.5 -46.5q77 0 144.5 37.5t107.5 91.5v694h215v-989h-215v131q-59 -66 -149.5 -111t-198.5 -45q-158 0 -239 81t-81 233z" />
102 <glyph unicode="v" horiz-adv-x="1030" d="M-4 989h231l289 -741l289 741h229l-403 -989h-232z" />
103 <glyph unicode="w" horiz-adv-x="1546" d="M10 989h223l209 -719l236 719h190l234 -719l209 719h225l-307 -989h-225l-232 725l-229 -725h-226z" />
104 <glyph unicode="x" horiz-adv-x="1017" d="M10 0l365 508l-342 481h241l234 -334l235 334h242l-342 -481l365 -508h-242l-256 365l-258 -365h-242z" />
105 <glyph unicode="y" horiz-adv-x="1030" d="M-4 989h231l289 -741l289 741h229l-477 -1167q-49 -120 -132 -170.5t-206 -52.5q-70 0 -121 14l31 192q37 -16 82 -16q55 0 88.5 19t54.5 67l49 113z" />
106 <glyph unicode="z" horiz-adv-x="974" d="M96 0v164l488 639h-488v186h776v-155l-495 -646h504v-188h-785z" />
107 <glyph unicode="{" horiz-adv-x="567" d="M10 436v127q52 0 79.5 39.5t27.5 99.5v381q0 136 86.5 221t204.5 85h124v-148h-124q-56 0 -95 -43.5t-39 -112.5v-403q0 -143 -92 -182q92 -39 92 -183v-401q0 -68 39.5 -113t94.5 -45h124v-147h-124q-118 0 -204.5 83.5t-86.5 219.5v383q0 60 -27.5 99.5t-79.5 39.5z " />
108 <glyph unicode="|" horiz-adv-x="438" d="M145 -41v1448h148v-1448h-148z" />
109 <glyph unicode="}" horiz-adv-x="567" d="M35 -242h125q55 0 94 45t39 113v401q0 144 92 183q-92 39 -92 182v403q0 69 -39 112.5t-94 43.5h-125v148h125q118 0 204.5 -85t86.5 -221v-381q0 -60 27 -99.5t79 -39.5v-127q-52 0 -79 -39.5t-27 -99.5v-383q0 -136 -86.5 -219.5t-204.5 -83.5h-125v147z" />
110 <glyph unicode="~" horiz-adv-x="1038" d="M55 870q8 103 25 183t49 154.5t88 115.5t133 41q53 0 93.5 -20.5t64.5 -54t42 -73.5t31 -79.5t26.5 -73t34 -54t48.5 -20.5q113 0 146 377l149 -16q-6 -68 -15 -123t-23.5 -114.5t-36.5 -103.5t-52 -80.5t-72.5 -55.5t-95.5 -19t-93.5 20.5t-64.5 53.5t-42 72.5t-31 79.5 t-26.5 73t-34 53.5t-48.5 20.5q-113 0 -143 -375z" />
111 <glyph unicode="&#xa1;" horiz-adv-x="499" d="M106 868q0 58 43 101t101 43t99.5 -42.5t41.5 -101.5q0 -57 -41.5 -99t-99.5 -42t-101 42t-43 99zM119 -377l37 948h186l39 -948h-262z" />
112 <glyph unicode="&#xa2;" horiz-adv-x="1019" d="M80 496q0 201 116.5 342t307.5 170v149h160v-147q194 -23 305 -172l-142 -129q-63 87 -163 108v-645q98 21 163 113l142 -133q-114 -149 -305 -172v-185h-160v187q-190 28 -307 169.5t-117 344.5zM301 496q0 -117 54.5 -202t148.5 -114v629q-94 -31 -148.5 -114 t-54.5 -199z" />
113 <glyph unicode="&#xa3;" horiz-adv-x="1097" d="M45 551v141h170q-38 51 -59 83t-40.5 87t-19.5 111q0 119 69 215t178 147t232 51q159 0 274 -60.5t175 -178.5l-190 -113q-25 68 -88.5 112t-143.5 44q-104 0 -175 -61t-71 -160q0 -44 14 -86.5t27 -65t45 -67t41 -58.5h301v-141h-237q6 -30 6 -62q0 -148 -143 -245 q46 18 102 18q65 0 148.5 -38t134.5 -38q61 0 111 23.5t73 54.5l98 -190q-101 -101 -291 -101q-61 0 -115 14.5t-87 32t-78 32t-90 14.5q-92 0 -238 -80l-82 170q114 53 178 124t64 154q0 55 -27 117h-266z" />
114 <glyph unicode="&#xa4;" horiz-adv-x="1069" d="M74 281l114 114q-102 127 -102 287q0 163 102 287l-114 116l57 58l117 -115q120 102 287 102q162 0 286 -102l115 115l59 -58l-114 -116q102 -124 102 -287q0 -160 -102 -287l114 -114l-59 -60l-115 117q-124 -105 -286 -105q-163 0 -287 105l-117 -117zM184 682 q0 -145 103 -247.5t248 -102.5t247.5 102.5t102.5 247.5q0 146 -102.5 248t-247.5 102t-248 -102t-103 -248z" />
115 <glyph unicode="&#xa5;" horiz-adv-x="1304" d="M4 1366h275l374 -584l375 584h275l-437 -659h394v-140h-486v-186h486v-139h-486v-242h-239v242h-488v139h488v186h-488v140h395z" />
116 <glyph unicode="&#xa6;" horiz-adv-x="438" d="M145 -41v647h148v-647h-148zM145 760v647h148v-647h-148z" />
117 <glyph unicode="&#xa7;" horiz-adv-x="976" d="M57 -6l97 139q56 -61 141.5 -104t183.5 -43q92 0 148.5 38t56.5 105q0 44 -33 74.5t-85.5 47.5t-116.5 32t-128 36t-116.5 51t-85.5 85t-33 131q0 97 63 163.5t152 92.5q-215 78 -215 258q0 123 106.5 204.5t280.5 81.5q252 0 385 -141l-90 -127q-51 56 -128 86.5 t-157 30.5q-87 0 -138.5 -36t-51.5 -97q0 -32 20.5 -55t55 -37t79.5 -25.5t94.5 -23t99 -25t94.5 -36.5t79.5 -53.5t55 -79t20.5 -110.5q0 -84 -46.5 -152.5t-133.5 -107.5q180 -76 180 -250q0 -146 -114.5 -229.5t-297.5 -83.5q-251 0 -422 160zM293 614q0 -23 8 -42 t18 -33t32 -27t37.5 -20t47.5 -16.5t48 -13.5t53 -13q71 32 106 73t35 101q0 36 -16 63.5t-46 46.5t-61 30.5t-74 22.5q-104 -25 -146 -67.5t-42 -104.5z" />
118 <glyph unicode="&#xa8;" horiz-adv-x="583" d="M-43 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -85.5 35t-35.5 84zM387 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -84.5 35t-34.5 84z" />
119 <glyph unicode="&#xa9;" horiz-adv-x="1593" d="M90 684q0 192 95 355t258 257.5t354 94.5q144 0 275 -56t225 -150.5t150 -225.5t56 -275q0 -143 -56 -274t-150 -226t-225 -151t-275 -56q-191 0 -354 95t-258 258t-95 354zM160 684q0 -128 51 -246t136.5 -203.5t203.5 -136.5t246 -51q129 0 247.5 51t203.5 136.5 t135.5 203.5t50.5 246q0 130 -50.5 248t-135.5 203t-203 135.5t-248 50.5q-128 0 -246 -50.5t-203.5 -135.5t-136.5 -203.5t-51 -247.5zM379 688q0 186 123.5 309t302.5 123q185 0 301 -135l-57 -59q-40 54 -106 86t-138 32q-140 0 -240 -101t-100 -257q0 -153 100.5 -256.5 t239.5 -103.5q73 0 138.5 32.5t105.5 87.5l59 -57q-120 -139 -303 -139q-178 0 -302 126t-124 312z" />
120 <glyph unicode="&#xaa;" horiz-adv-x="782" d="M72 864q0 100 68 154.5t159 54.5q139 0 215 -80v94q0 54 -43 86.5t-109 32.5q-116 0 -192 -88l-64 105q113 104 281 104q59 0 108 -12.5t90 -40t64 -76t23 -115.5v-415h-158v69q-79 -86 -215 -86q-89 0 -158 57.5t-69 155.5zM229 864q0 -52 38.5 -81t97.5 -29 q44 0 84.5 17t64.5 48v90q-24 31 -64.5 48.5t-84.5 17.5q-59 0 -97.5 -30t-38.5 -81z" />
121 <glyph unicode="&#xab;" horiz-adv-x="1003" d="M61 498l328 362h205l-328 -362l328 -369h-205zM410 498l327 362h205l-328 -362l328 -369h-205z" />
122 <glyph unicode="&#xac;" horiz-adv-x="1046" d="M59 811v137h910v-528h-144v391h-766z" />
123 <glyph unicode="&#xad;" horiz-adv-x="614" d="M61 403v185h492v-185h-492z" />
124 <glyph unicode="&#xae;" horiz-adv-x="1011" d="M72 952q0 181 127 307.5t307 126.5q119 0 219 -57.5t157.5 -157.5t57.5 -219q0 -180 -126.5 -307t-307.5 -127q-180 0 -307 127t-127 307zM135 952q0 -152 108.5 -261t262.5 -109q155 0 264 108.5t109 261.5q0 156 -108.5 264.5t-264.5 108.5q-154 0 -262.5 -108.5 t-108.5 -264.5zM340 702v498h203q65 0 112 -42t47 -109q0 -72 -46 -110t-81 -38l134 -199h-84l-129 197h-88v-197h-68zM408 961h135q34 0 62 25.5t28 62.5q0 39 -28 65.5t-62 26.5h-135v-180z" />
125 <glyph unicode="&#xaf;" horiz-adv-x="743" d="M0 1210v127h743v-127h-743z" />
126 <glyph unicode="&#xb0;" horiz-adv-x="618" d="M45 1120q0 110 77 188t187 78q109 0 187.5 -78t78.5 -188q0 -109 -78.5 -186.5t-187.5 -77.5q-110 0 -187 77.5t-77 186.5zM168 1120q0 -58 41 -98.5t100 -40.5t101.5 40.5t42.5 98.5t-42.5 101t-101.5 43q-58 0 -99.5 -42.5t-41.5 -101.5z" />
127 <glyph unicode="&#xb1;" horiz-adv-x="1028" d="M59 0v139h910v-139h-910zM59 666v139h379v409h152v-409h379v-139h-379v-424h-152v424h-379z" />
128 <glyph unicode="&#xb2;" horiz-adv-x="806" d="M84 1563q56 65 141.5 98t175.5 33q136 0 226 -64.5t90 -183.5q0 -104 -92 -207.5t-287 -243.5h385v-133h-625v123q263 186 358 278t95 171q0 63 -43.5 95t-110.5 32q-68 0 -130 -30t-95 -73z" />
129 <glyph unicode="&#xb3;" horiz-adv-x="806" d="M76 979l84 106q41 -49 105.5 -76.5t129.5 -27.5q78 0 122 32t44 85q0 119 -194 119q-68 0 -86 -3v132q21 -3 86 -3q182 0 182 111q0 52 -46.5 79.5t-117.5 27.5q-131 0 -221 -93l-78 97q115 129 315 129q144 0 228 -59.5t84 -161.5q0 -76 -55 -125.5t-128 -61.5 q32 -3 65.5 -17t63.5 -37.5t49 -61.5t19 -83q0 -106 -89.5 -172.5t-238.5 -66.5q-109 0 -193.5 36.5t-129.5 94.5z" />
130 <glyph unicode="&#xb4;" horiz-adv-x="491" d="M0 1139l287 295h205l-338 -295h-154z" />
131 <glyph unicode="&#xb6;" horiz-adv-x="919" d="M55 1014q0 146 103.5 249t249.5 103h395v-1571h-113v1458h-170v-1458h-112v867q-146 0 -249.5 103t-103.5 249z" />
132 <glyph unicode="&#xb7;" horiz-adv-x="503" d="M109 502q0 57 42.5 99t100.5 42t99.5 -42t41.5 -99q0 -59 -41.5 -101.5t-99.5 -42.5t-100.5 42.5t-42.5 101.5z" />
133 <glyph unicode="&#xb8;" horiz-adv-x="438" d="M0 -334l47 94q73 -59 166 -59q47 0 80 19.5t33 54.5q0 61 -66 61q-44 0 -72 -31l-82 48l62 170h113l-52 -132q33 23 74 23q58 0 96.5 -39.5t38.5 -101.5q0 -76 -63.5 -123t-157.5 -47q-65 0 -123.5 18t-93.5 45z" />
134 <glyph unicode="&#xb9;" horiz-adv-x="540" d="M20 1430l254 251h144v-819h-166v608l-135 -141z" />
135 <glyph unicode="&#xba;" horiz-adv-x="829" d="M70 989q0 142 95 240t249 98q157 0 251.5 -97.5t94.5 -240.5q0 -142 -95 -240t-251 -98q-154 0 -249 98.5t-95 239.5zM236 989q0 -93 47.5 -151t130.5 -58q86 0 135 58t49 151q0 94 -49 150.5t-135 56.5q-83 0 -130.5 -56.5t-47.5 -150.5z" />
136 <glyph unicode="&#xbb;" horiz-adv-x="1003" d="M61 129l328 369l-328 362h205l328 -362l-328 -369h-205zM410 129l327 369l-327 362h204l328 -362l-328 -369h-204z" />
137 <glyph unicode="&#xbc;" horiz-adv-x="1650" d="M20 1114l254 252h144v-819h-166v608l-135 -141zM256 0l874 1366h138l-875 -1366h-137zM913 188v117l338 514h230v-500h110v-131h-110v-188h-164v188h-404zM1077 319h240v359z" />
138 <glyph unicode="&#xbd;" horiz-adv-x="1722" d="M20 1114l254 252h144v-819h-166v608l-135 -141zM256 0l874 1366h138l-875 -1366h-137zM1001 700q56 64 142 97.5t176 33.5q136 0 225.5 -64t89.5 -183q0 -104 -92 -207.5t-287 -243.5h385v-133h-624v123q263 186 357.5 277.5t94.5 170.5q0 63 -43 95t-110 32 q-69 0 -130.5 -30t-94.5 -72z" />
139 <glyph unicode="&#xbe;" horiz-adv-x="1849" d="M76 664l84 106q41 -49 105.5 -76.5t129.5 -27.5q78 0 122 31.5t44 84.5q0 119 -194 119q-74 0 -86 -2v131q14 -2 86 -2q182 0 182 111q0 52 -46 79t-118 27q-132 0 -221 -92l-78 96q115 129 315 129q144 0 228 -59.5t84 -161.5q0 -76 -55 -125t-128 -61q32 -3 65.5 -17 t63.5 -37.5t49 -61.5t19 -83q0 -106 -89.5 -173t-238.5 -67q-109 0 -193.5 36.5t-129.5 95.5zM455 0l874 1366h137l-874 -1366h-137zM1110 188v117l338 514h229v-500h111v-131h-111v-188h-164v188h-403zM1274 319h239v359z" />
140 <glyph unicode="&#xbf;" horiz-adv-x="811" d="M51 -80q0 62 20 114.5t52.5 89t71 68.5t77.5 58.5t71.5 53t52.5 59t20 69.5q0 26 -12 52t-33 40l182 62q72 -69 72 -176q0 -59 -24.5 -108t-61 -81t-79.5 -64.5t-79.5 -58t-61 -62t-24.5 -77.5q0 -64 50 -105.5t144 -41.5q172 0 285 143l139 -154q-79 -96 -194 -149 t-252 -53q-190 0 -303 90t-113 231zM336 868q0 59 42.5 101.5t100.5 42.5q59 0 101.5 -43t42.5 -101t-42.5 -100.5t-101.5 -42.5t-101 42.5t-42 100.5z" />
141 <glyph unicode="&#xc0;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM354 1786h205l287 -295h-154zM444 475h492l-246 651z" />
142 <glyph unicode="&#xc1;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM444 475h492l-246 651zM539 1491l286 295h205l-338 -295h-153z" />
143 <glyph unicode="&#xc2;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM401 1491l191 295h196l197 -295h-135l-160 199l-151 -199h-138zM444 475h492l-246 651z" />
144 <glyph unicode="&#xc3;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM362 1499q0 128 55 201.5t156 73.5q40 0 71.5 -16.5t52 -40t38 -47t38.5 -40t44 -16.5q38 0 62 37t24 110h117q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 40t-38.5 47t-39 40t-44 16.5 q-37 0 -60.5 -37.5t-23.5 -110.5h-119zM444 475h492l-246 651z" />
145 <glyph unicode="&#xc4;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM356 1597q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85.5 34.5t-35.5 83.5zM444 475h492l-246 651zM786 1597q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84 t-86 -34q-50 0 -84.5 34.5t-34.5 83.5z" />
146 <glyph unicode="&#xc5;" horiz-adv-x="1378" d="M4 0l537 1366h299l536 -1366h-272l-100 264h-627l-101 -264h-272zM444 475h492l-246 651zM481 1628q0 86 62.5 148.5t148.5 62.5t146.5 -62t60.5 -149q0 -86 -60.5 -147.5t-146.5 -61.5t-148.5 61.5t-62.5 147.5zM586 1628q0 -43 31 -74.5t75 -31.5q43 0 74 31.5t31 74.5 q0 44 -31 75.5t-74 31.5q-44 0 -75 -31.5t-31 -75.5z" />
147 <glyph unicode="&#xc6;" horiz-adv-x="1966" d="M-4 0l840 1366h1032v-211h-697v-352h682v-211h-682v-381h697v-211h-936v264h-504l-158 -264h-274zM541 475h391v651z" />
148 <glyph unicode="&#xc7;" horiz-adv-x="1396" d="M86 682q0 155 55.5 288t151.5 224.5t228 143t282 51.5q192 0 328 -84.5t219 -221.5l-203 -106q-51 88 -144 143.5t-200 55.5q-203 0 -337 -139t-134 -355q0 -213 134 -353.5t337 -140.5q106 0 199.5 56t144.5 143l205 -102q-188 -297 -521 -310l-28 -75q31 22 74 22 q58 0 96.5 -39.5t38.5 -101.5q0 -76 -63.5 -123t-157.5 -47q-65 0 -124 18t-94 45l48 95q75 -60 165 -60q47 0 80 19.5t33 54.5q0 61 -65 61q-45 0 -72 -30l-82 47l43 119q-136 13 -253.5 70t-202 147t-133 215.5t-48.5 269.5z" />
149 <glyph unicode="&#xc8;" horiz-adv-x="1181" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936zM276 1786h205l287 -295h-154z" />
150 <glyph unicode="&#xc9;" horiz-adv-x="1181" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936zM461 1491l287 295h204l-338 -295h-153z" />
151 <glyph unicode="&#xca;" horiz-adv-x="1181" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936zM322 1491l190 295h197l196 -295h-135l-160 199l-151 -199h-137z" />
152 <glyph unicode="&#xcb;" horiz-adv-x="1181" d="M145 0v1366h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936zM281 1597q0 51 35 86t85 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85 34.5t-35 83.5zM711 1597q0 51 34 86t84 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-49 0 -83.5 34.5t-34.5 83.5 z" />
153 <glyph unicode="&#xcc;" horiz-adv-x="530" d="M-74 1786h205l287 -295h-154zM145 0v1366h240v-1366h-240z" />
154 <glyph unicode="&#xcd;" horiz-adv-x="530" d="M117 1491l286 295h205l-338 -295h-153zM145 0v1366h240v-1366h-240z" />
155 <glyph unicode="&#xce;" horiz-adv-x="530" d="M-27 1491l191 295h196l197 -295h-135l-160 199l-151 -199h-138zM145 0v1366h240v-1366h-240z" />
156 <glyph unicode="&#xcf;" horiz-adv-x="530" d="M-70 1595q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85.5 34.5t-35.5 83.5zM145 0v1366h240v-1366h-240zM360 1595q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -84.5 34.5t-34.5 83.5z" />
157 <glyph unicode="&#xd0;" horiz-adv-x="1507" d="M20 586v174h179v606h508q211 0 374 -87t251.5 -242t88.5 -353q0 -303 -197 -493.5t-515 -190.5h-510v586h-179zM438 211h269q144 0 252 64.5t162.5 171t54.5 237.5q0 133 -52.5 238.5t-160 169t-254.5 63.5h-271v-395h326v-174h-326v-375z" />
158 <glyph unicode="&#xd1;" horiz-adv-x="1474" d="M145 0v1366h246l699 -946v946h239v-1366h-231l-713 977v-977h-240zM406 1499q0 128 54.5 201.5t155.5 73.5q40 0 71.5 -16.5t52 -40t38 -47t38.5 -40t44 -16.5q38 0 62 37t24 110h117q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 40t-38.5 47t-39 40t-44 16.5 q-37 0 -60.5 -37.5t-23.5 -110.5h-118z" />
159 <glyph unicode="&#xd2;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355zM453 1786h204l287 -295h-153z" />
160 <glyph unicode="&#xd3;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355zM633 1491l287 295h204l-338 -295h-153z" />
161 <glyph unicode="&#xd4;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355zM498 1491l190 295h197l196 -295h-135l-160 199l-151 -199h-137z" />
162 <glyph unicode="&#xd5;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355zM457 1499q0 128 55 201.5t156 73.5q40 0 71.5 -16.5t51.5 -40t37.5 -47t38.5 -40t44 -16.5q38 0 62 37t24 110h117q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 40t-38.5 47t-39 40t-44 16.5q-37 0 -60.5 -37.5t-23.5 -110.5 h-118z" />
163 <glyph unicode="&#xd6;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q151 0 281 -53.5t222 -147t144 -224.5t52 -282t-52 -282t-144 -224.5t-222 -147t-281 -53.5q-202 0 -361.5 91t-248 252.5t-88.5 363.5zM332 682q0 -214 124 -354t328 -140q203 0 328 140t125 354q0 215 -125 354.5 t-328 139.5q-204 0 -328 -139t-124 -355zM451 1597q0 51 35 86t85 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85 34.5t-35 83.5zM881 1597q0 51 34 86t84 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-49 0 -83.5 34.5t-34.5 83.5z" />
164 <glyph unicode="&#xd7;" horiz-adv-x="1028" d="M121 389l297 295l-297 297l98 96l295 -295l297 295l96 -96l-295 -297l295 -295l-96 -98l-297 297l-295 -297z" />
165 <glyph unicode="&#xd8;" horiz-adv-x="1566" d="M86 682q0 202 88.5 363.5t248 252.5t361.5 91q193 0 349 -86l45 63h178l-105 -145q110 -97 171 -236t61 -303q0 -151 -52 -282t-144 -224.5t-222 -147t-281 -53.5q-204 0 -366 95l-51 -70h-179l113 156q-103 97 -159 232t-56 294zM332 682q0 -203 106 -336l563 776 q-97 54 -217 54q-204 0 -328 -139t-124 -355zM549 250q105 -62 235 -62q203 0 328 140t125 354q0 213 -123 352z" />
166 <glyph unicode="&#xd9;" horiz-adv-x="1474" d="M145 541v825h244v-819q0 -166 90.5 -262.5t257.5 -96.5t257.5 96.5t90.5 262.5v819h244v-825q0 -261 -151 -413.5t-441 -152.5q-289 0 -440.5 152.5t-151.5 413.5zM403 1786h205l287 -295h-154z" />
167 <glyph unicode="&#xda;" horiz-adv-x="1474" d="M145 541v825h244v-819q0 -166 90.5 -262.5t257.5 -96.5t257.5 96.5t90.5 262.5v819h244v-825q0 -261 -151 -413.5t-441 -152.5q-289 0 -440.5 152.5t-151.5 413.5zM586 1491l286 295h205l-338 -295h-153z" />
168 <glyph unicode="&#xdb;" horiz-adv-x="1474" d="M145 541v825h244v-819q0 -166 90.5 -262.5t257.5 -96.5t257.5 96.5t90.5 262.5v819h244v-825q0 -261 -151 -413.5t-441 -152.5q-289 0 -440.5 152.5t-151.5 413.5zM457 1491l190 295h197l196 -295h-135l-160 199l-151 -199h-137z" />
169 <glyph unicode="&#xdc;" horiz-adv-x="1474" d="M145 541v825h244v-819q0 -166 90.5 -262.5t257.5 -96.5t257.5 96.5t90.5 262.5v819h244v-825q0 -261 -151 -413.5t-441 -152.5q-289 0 -440.5 152.5t-151.5 413.5zM406 1597q0 51 35 86t85 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85 34.5t-35 83.5z M836 1597q0 51 34 86t84 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -84 34.5t-34 83.5z" />
170 <glyph unicode="&#xdd;" horiz-adv-x="1304" d="M4 1366h275l374 -584l375 584h275l-529 -799v-567h-239v567zM506 1491l287 295h204l-338 -295h-153z" />
171 <glyph unicode="&#xde;" horiz-adv-x="1247" d="M145 0v1366h240v-229h363q139 0 241.5 -60t152.5 -156t50 -214q0 -182 -119 -304t-325 -122h-363v-281h-240zM385 492h330q102 0 166.5 59.5t64.5 155.5q0 98 -64.5 158.5t-166.5 60.5h-330v-434z" />
172 <glyph unicode="&#xdf;" horiz-adv-x="1275" d="M141 0v993q0 167 118 280t316 113q161 0 278.5 -77t117.5 -201q0 -53 -21.5 -97.5t-53 -72t-69 -55t-69 -48.5t-53 -50t-21.5 -62q0 -31 24 -53t63 -33.5t89 -24.5t102.5 -24.5t102.5 -35t89 -55t63 -85t24 -123.5q0 -135 -106 -224.5t-291 -89.5q-136 0 -223.5 41.5 t-169.5 120.5l94 148q45 -58 126 -96.5t173 -38.5t141 37.5t49 93.5q0 34 -24 59t-63 38.5t-89 28t-102.5 26.5t-102.5 35t-89 52.5t-63 80t-24 116.5q0 50 20 93.5t50.5 72t66 55.5t66 46.5t50.5 44.5t20 50q0 55 -53.5 86t-125.5 31q-93 0 -154 -55t-61 -148v-993h-215z " />
173 <glyph unicode="&#xe0;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM211 1434h205l286 -295h-153zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5z" />
174 <glyph unicode="&#xe1;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5zM401 1139l287 295h205l-338 -295h-154z" />
175 <glyph unicode="&#xe2;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM264 1139l191 295h196l197 -295h-135l-160 198l-152 -198h-137zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5z" />
176 <glyph unicode="&#xe3;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM221 1147q0 128 55 201t156 73q40 0 71.5 -16.5t52 -39.5t38 -46.5t38.5 -40t44 -16.5q38 0 62 37t24 110h117q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 39.5t-38.5 46.5t-39 40t-44 16.5q-37 0 -60.5 -37t-23.5 -110h-119zM297 301 q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5z" />
177 <glyph unicode="&#xe4;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM211 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -85.5 35t-35.5 84zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5z M641 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -84.5 35t-34.5 84z" />
178 <glyph unicode="&#xe5;" horiz-adv-x="1099" d="M82 303q0 82 30 146.5t80.5 102t109.5 56.5t122 19q209 0 321 -127v147q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q69 0 128.5 -11.5t112.5 -38.5t91 -67t60 -101.5t22 -138.5v-657h-216v109q-55 -64 -139 -99t-182 -35q-61 0 -121 21.5 t-110 61t-80.5 103.5t-30.5 142zM297 301q0 -80 60.5 -129t152.5 -49q72 0 135 26.5t100 75.5v152q-37 49 -100 75.5t-135 26.5q-92 0 -152.5 -49.5t-60.5 -128.5zM342 1323q0 86 62.5 148.5t148.5 62.5t146.5 -62t60.5 -149q0 -86 -60.5 -147.5t-146.5 -61.5t-148.5 61.5 t-62.5 147.5zM446 1323q0 -43 31.5 -74.5t75.5 -31.5q43 0 73.5 31.5t30.5 74.5q0 44 -30.5 75.5t-73.5 31.5q-44 0 -75.5 -31.5t-31.5 -75.5z" />
179 <glyph unicode="&#xe6;" horiz-adv-x="1798" d="M82 301q0 79 28 142t76 102.5t109 60.5t129 21q208 0 321 -125v145q0 85 -64 134.5t-167 49.5q-170 0 -293 -126l-90 149q166 160 416 160q267 0 338 -185q127 185 364 185q213 0 344 -150.5t131 -386.5v-53h-761q13 -116 96 -192t217 -76q75 0 152.5 29.5t130.5 80.5 l98 -145q-75 -70 -179.5 -108t-222.5 -38q-131 0 -236 51.5t-173 139.5q-65 -82 -168 -136.5t-238 -54.5q-67 0 -130 21t-114.5 60t-82.5 103t-31 142zM297 301q0 -80 60.5 -129t152.5 -49q78 0 147.5 33.5t112.5 107.5q-25 48 -25 109q-37 51 -100.5 78.5t-134.5 27.5 q-92 0 -152.5 -49.5t-60.5 -128.5zM961 578h557q-2 46 -19.5 90t-49.5 83t-87 63t-125 24q-126 0 -197.5 -78.5t-78.5 -181.5z" />
180 <glyph unicode="&#xe7;" horiz-adv-x="1019" d="M80 496q0 225 143.5 371.5t366.5 146.5q248 0 379 -176l-142 -129q-80 114 -227 114q-133 0 -216 -91t-83 -236t83 -237.5t216 -92.5q143 0 227 119l142 -133q-118 -157 -330 -175l-31 -81q31 22 74 22q58 0 96.5 -39.5t38.5 -101.5q0 -76 -63.5 -123t-157.5 -47 q-65 0 -123.5 18t-93.5 45l47 94q73 -59 166 -59q47 0 80 19.5t33 54.5q0 61 -66 61q-45 0 -72 -30l-82 47l43 123q-199 20 -323.5 163.5t-124.5 352.5z" />
181 <glyph unicode="&#xe8;" horiz-adv-x="1140" d="M80 496q0 142 63.5 260.5t179.5 188t259 69.5q220 0 352.5 -150.5t132.5 -386.5v-53h-762q13 -116 96 -194t217 -78q76 0 153.5 29t129.5 81l98 -141q-75 -70 -179.5 -108t-221.5 -38q-226 0 -372 144t-146 377zM244 1434h205l286 -295h-153zM303 578h557q-2 46 -19.5 90 t-49.5 83.5t-86.5 63t-124.5 23.5q-126 0 -198 -79.5t-79 -180.5z" />
182 <glyph unicode="&#xe9;" horiz-adv-x="1140" d="M80 496q0 142 63.5 260.5t179.5 188t259 69.5q220 0 352.5 -150.5t132.5 -386.5v-53h-762q13 -116 96 -194t217 -78q76 0 153.5 29t129.5 81l98 -141q-75 -70 -179.5 -108t-221.5 -38q-226 0 -372 144t-146 377zM303 578h557q-2 46 -19.5 90t-49.5 83.5t-86.5 63 t-124.5 23.5q-126 0 -198 -79.5t-79 -180.5zM430 1139l287 295h205l-338 -295h-154z" />
183 <glyph unicode="&#xea;" horiz-adv-x="1140" d="M80 496q0 142 63.5 260.5t179.5 188t259 69.5q220 0 352.5 -150.5t132.5 -386.5v-53h-762q13 -116 96 -194t217 -78q76 0 153.5 29t129.5 81l98 -141q-75 -70 -179.5 -108t-221.5 -38q-226 0 -372 144t-146 377zM293 1139l190 295h197l197 -295h-136l-159 198l-152 -198 h-137zM303 578h557q-2 46 -19.5 90t-49.5 83.5t-86.5 63t-124.5 23.5q-126 0 -198 -79.5t-79 -180.5z" />
184 <glyph unicode="&#xeb;" horiz-adv-x="1140" d="M80 496q0 142 63.5 260.5t179.5 188t259 69.5q220 0 352.5 -150.5t132.5 -386.5v-53h-762q13 -116 96 -194t217 -78q76 0 153.5 29t129.5 81l98 -141q-75 -70 -179.5 -108t-221.5 -38q-226 0 -372 144t-146 377zM248 1245q0 51 35.5 86t85.5 35q51 0 85.5 -35t34.5 -86 q0 -50 -34.5 -84.5t-85.5 -34.5q-50 0 -85.5 35t-35.5 84zM303 578h557q-2 46 -19.5 90t-49.5 83.5t-86.5 63t-124.5 23.5q-126 0 -198 -79.5t-79 -180.5zM678 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-49 0 -84 35t-35 84z" />
185 <glyph unicode="&#xec;" horiz-adv-x="493" d="M-92 1434h205l286 -295h-153zM139 0v989h215v-989h-215z" />
186 <glyph unicode="&#xed;" horiz-adv-x="493" d="M94 1139l287 295h205l-338 -295h-154zM139 0v989h215v-989h-215z" />
187 <glyph unicode="&#xee;" horiz-adv-x="493" d="M-45 1139l190 295h197l197 -295h-136l-159 198l-152 -198h-137zM139 0v989h215v-989h-215z" />
188 <glyph unicode="&#xef;" horiz-adv-x="493" d="M-88 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -85.5 35t-35.5 84zM139 0v989h215v-989h-215zM342 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-49 0 -84 35t-35 84z" />
189 <glyph unicode="&#xf0;" d="M80 469q0 213 125.5 351t316.5 138q207 0 326 -184q-84 169 -324 342l-297 -131l-43 107l230 100q-38 25 -140 88l117 174q142 -88 244 -164l215 94l45 -102l-162 -72q363 -320 363 -698q0 -238 -137.5 -387.5t-370.5 -149.5q-228 0 -368 139t-140 355zM303 469 q0 -127 77 -215t208 -88q133 0 208.5 87.5t75.5 215.5q0 126 -76 213.5t-208 87.5q-131 0 -208 -87.5t-77 -213.5z" />
190 <glyph unicode="&#xf1;" horiz-adv-x="1163" d="M150 0v989h215v-133q55 66 148 112t202 46q158 0 238.5 -82t80.5 -236v-696h-215v618q0 111 -52 158t-149 47q-76 0 -143.5 -38t-109.5 -93v-692h-215zM254 1147q0 128 55 201t156 73q40 0 71.5 -16.5t52 -39.5t38 -46.5t38.5 -40t44 -16.5q38 0 62 37t24 110h116 q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 39.5t-38 46.5t-38.5 40t-44 16.5q-37 0 -60.5 -37t-23.5 -110h-119z" />
191 <glyph unicode="&#xf2;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM250 1434h205l286 -295h-153zM303 496q0 -138 77 -234t208 -96q132 0 208 95.5 t76 234.5q0 138 -76 232.5t-208 94.5q-131 0 -208 -95t-77 -232z" />
192 <glyph unicode="&#xf3;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM303 496q0 -138 77 -234t208 -96q132 0 208 95.5t76 234.5q0 138 -76 232.5 t-208 94.5q-131 0 -208 -95t-77 -232zM434 1139l287 295h205l-338 -295h-154z" />
193 <glyph unicode="&#xf4;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM299 1139l190 295h197l197 -295h-135l-160 198l-152 -198h-137zM303 496 q0 -138 77 -234t208 -96q132 0 208 95.5t76 234.5q0 138 -76 232.5t-208 94.5q-131 0 -208 -95t-77 -232z" />
194 <glyph unicode="&#xf5;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM260 1147q0 128 55 201t156 73q40 0 71.5 -16.5t52 -39.5t38 -46.5t38.5 -40 t44 -16.5q38 0 62 37t24 110h117q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 39.5t-38.5 46.5t-39 40t-44 16.5q-37 0 -60.5 -37t-23.5 -110h-119zM303 496q0 -138 77 -234t208 -96q132 0 208 95.5t76 234.5q0 138 -76 232.5t-208 94.5q-131 0 -208 -95t-77 -232z" />
195 <glyph unicode="&#xf6;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5t270 -70.5t177.5 -187.5t60.5 -260q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5t-211.5 41.5t-161 113t-100 166t-35.5 200.5zM252 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5 q-50 0 -85.5 35t-35.5 84zM303 496q0 -138 77 -234t208 -96q132 0 208 95.5t76 234.5q0 138 -76 232.5t-208 94.5q-131 0 -208 -95t-77 -232zM682 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-49 0 -84 35t-35 84z" />
196 <glyph unicode="&#xf7;" horiz-adv-x="1046" d="M59 623v137h928v-137h-928zM412 311q0 46 33 78.5t79 32.5t78.5 -32.5t32.5 -78.5t-32.5 -79t-78.5 -33t-79 33t-33 79zM412 1067q0 45 33 77t79 32t78.5 -31.5t32.5 -77.5t-33 -80.5t-78 -34.5t-78.5 34.5t-33.5 80.5z" />
197 <glyph unicode="&#xf8;" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5q157 0 284 -80l48 55h141l-105 -125q140 -146 140 -368q0 -106 -35.5 -200.5t-100 -166t-161 -113t-211.5 -41.5q-171 0 -293 86l-51 -61h-140l109 131q-133 145 -133 365zM303 496q0 -115 49 -197l391 477q-66 47 -155 47 q-131 0 -208 -95t-77 -232zM424 219q72 -53 164 -53q132 0 208 95.5t76 234.5q0 114 -53 200z" />
198 <glyph unicode="&#xf9;" horiz-adv-x="1161" d="M139 289v700h215v-620q0 -110 51.5 -156.5t149.5 -46.5q77 0 144.5 37.5t107.5 91.5v694h215v-989h-215v131q-59 -66 -149.5 -111t-198.5 -45q-158 0 -239 81t-81 233zM248 1434h205l286 -295h-153z" />
199 <glyph unicode="&#xfa;" horiz-adv-x="1161" d="M139 289v700h215v-620q0 -110 51.5 -156.5t149.5 -46.5q77 0 144.5 37.5t107.5 91.5v694h215v-989h-215v131q-59 -66 -149.5 -111t-198.5 -45q-158 0 -239 81t-81 233zM430 1139l287 295h205l-338 -295h-154z" />
200 <glyph unicode="&#xfb;" horiz-adv-x="1161" d="M139 289v700h215v-620q0 -110 51.5 -156.5t149.5 -46.5q77 0 144.5 37.5t107.5 91.5v694h215v-989h-215v131q-59 -66 -149.5 -111t-198.5 -45q-158 0 -239 81t-81 233zM291 1139l190 295h197l196 -295h-135l-159 198l-152 -198h-137z" />
201 <glyph unicode="&#xfc;" horiz-adv-x="1161" d="M139 289v700h215v-620q0 -110 51.5 -156.5t149.5 -46.5q77 0 144.5 37.5t107.5 91.5v694h215v-989h-215v131q-59 -66 -149.5 -111t-198.5 -45q-158 0 -239 81t-81 233zM252 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -85.5 35 t-35.5 84zM682 1245q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-49 0 -84 35t-35 84z" />
202 <glyph unicode="&#xfd;" horiz-adv-x="1030" d="M-4 989h231l289 -741l289 741h229l-477 -1167q-49 -120 -132 -170.5t-206 -52.5q-70 0 -121 14l31 192q37 -16 82 -16q55 0 88.5 19t54.5 67l49 113zM362 1139l287 295h205l-338 -295h-154z" />
203 <glyph unicode="&#xfe;" horiz-adv-x="1185" d="M139 -377v1743h215v-512q56 75 139.5 117.5t178.5 42.5q196 0 317 -139t121 -379q0 -241 -121.5 -381t-316.5 -140q-190 0 -318 162v-514h-215zM354 301q36 -57 108 -96t146 -39q127 0 204 92t77 238t-77 236.5t-204 90.5q-74 0 -145.5 -37.5t-108.5 -93.5v-391z" />
204 <glyph unicode="&#xff;" horiz-adv-x="1030" d="M-4 989h231l289 -741l289 741h229l-477 -1167q-49 -120 -132 -170.5t-206 -52.5q-70 0 -121 14l31 192q37 -16 82 -16q55 0 88.5 19t54.5 67l49 113zM180 1245q0 51 35.5 86t85.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-50 0 -85.5 35t-35.5 84zM610 1245 q0 51 34.5 86t84.5 35q51 0 86 -35t35 -86q0 -50 -35 -84.5t-86 -34.5q-49 0 -84 35t-35 84z" />
205 <glyph unicode="&#x152;" horiz-adv-x="2238" d="M86 682q0 203 85 363.5t239 250.5t350 90q133 0 254 -56t192 -161v197h936v-211h-696v-352h682v-211h-682v-381h696v-211h-936v199q-71 -107 -192.5 -165.5t-253.5 -58.5q-196 0 -350 91t-239 252t-85 364zM332 682q0 -215 125.5 -354.5t335.5 -139.5q140 0 249 72 t164 207v434q-55 133 -163.5 203t-249.5 70q-210 0 -335.5 -138t-125.5 -354z" />
206 <glyph unicode="&#x153;" horiz-adv-x="1935" d="M80 496q0 143 60.5 260t177.5 187.5t270 70.5q252 0 395 -246q24 43 55 81.5t78.5 78t114 63t143.5 23.5q220 0 354 -150.5t134 -386.5v-53h-764q13 -116 97 -194t218 -78q74 0 152 29.5t129 80.5l98 -141q-73 -70 -177.5 -108t-223.5 -38q-268 0 -408 246 q-145 -246 -395 -246q-115 0 -211.5 41.5t-161 113t-100 166t-35.5 200.5zM303 496q0 -143 78 -237.5t207 -94.5t206.5 94.5t77.5 237.5q0 141 -77.5 234t-206.5 93t-207 -93t-78 -234zM1096 578h557q-2 46 -18.5 90.5t-48.5 83t-87 62.5t-125 24q-66 0 -119 -23 t-85.5 -61.5t-51 -83t-22.5 -92.5z" />
207 <glyph unicode="&#x178;" horiz-adv-x="1304" d="M4 1366h275l374 -584l375 584h275l-529 -799v-567h-239v567zM324 1597q0 51 35 86t85 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -85 34.5t-35 83.5zM754 1597q0 51 34 86t84 35q51 0 86 -35t35 -86q0 -50 -35 -84t-86 -34q-50 0 -84 34.5t-34 83.5z" />
208 <glyph unicode="&#x2c6;" horiz-adv-x="583" d="M0 1139l190 295h197l197 -295h-135l-160 198l-152 -198h-137z" />
209 <glyph unicode="&#x2dc;" horiz-adv-x="657" d="M0 1147q0 128 55 201t156 73q40 0 71.5 -16.5t52 -39.5t38 -46.5t38.5 -40t44 -16.5q38 0 62 37t24 110h116q0 -128 -55 -201t-156 -73q-39 0 -70.5 16.5t-52 39.5t-38 46.5t-38.5 40t-44 16.5q-37 0 -60.5 -37t-23.5 -110h-119z" />
210 <glyph unicode="&#x2000;" horiz-adv-x="919" />
211 <glyph unicode="&#x2001;" horiz-adv-x="1839" />
212 <glyph unicode="&#x2002;" horiz-adv-x="919" />
213 <glyph unicode="&#x2003;" horiz-adv-x="1839" />
214 <glyph unicode="&#x2004;" horiz-adv-x="613" />
215 <glyph unicode="&#x2005;" horiz-adv-x="459" />
216 <glyph unicode="&#x2006;" horiz-adv-x="306" />
217 <glyph unicode="&#x2007;" horiz-adv-x="306" />
218 <glyph unicode="&#x2008;" horiz-adv-x="229" />
219 <glyph unicode="&#x2009;" horiz-adv-x="367" />
220 <glyph unicode="&#x200a;" horiz-adv-x="102" />
221 <glyph unicode="&#x2010;" horiz-adv-x="614" d="M61 403v185h492v-185h-492z" />
222 <glyph unicode="&#x2011;" horiz-adv-x="614" d="M61 403v185h492v-185h-492z" />
223 <glyph unicode="&#x2012;" horiz-adv-x="614" d="M61 403v185h492v-185h-492z" />
224 <glyph unicode="&#x2013;" horiz-adv-x="1214" d="M61 403v185h1092v-185h-1092z" />
225 <glyph unicode="&#x2014;" horiz-adv-x="1705" d="M61 403v185h1584v-185h-1584z" />
226 <glyph unicode="&#x2018;" horiz-adv-x="501" d="M88 1038q0 103 52 196t139 155l98 -80q-51 -30 -95 -86t-53 -107q12 6 35 6q52 0 86.5 -36.5t34.5 -92.5q0 -59 -40.5 -100t-98.5 -41q-66 0 -112 50t-46 136z" />
227 <glyph unicode="&#x2019;" horiz-adv-x="501" d="M109 1247q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -194.5t-139 -153.5l-98 78q51 30 94.5 85.5t52.5 106.5q-8 -4 -35 -4q-51 0 -85.5 36.5t-34.5 92.5z" />
228 <glyph unicode="&#x201a;" horiz-adv-x="501" d="M109 125q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -195.5t-139 -154.5l-98 79q51 30 94.5 86t52.5 107q-12 -6 -35 -6q-51 0 -85.5 37t-34.5 94z" />
229 <glyph unicode="&#x201c;" horiz-adv-x="880" d="M94 1038q0 103 53 196t140 155l96 -80q-50 -30 -93.5 -85.5t-53.5 -107.5q18 6 34 6q53 0 88 -36t35 -93q0 -58 -41 -99.5t-98 -41.5q-66 0 -113 50t-47 136zM473 1038q0 103 53 196t140 155l96 -80q-51 -30 -94.5 -86t-53.5 -107q18 6 35 6q53 0 88 -36t35 -93 q0 -58 -41 -99.5t-98 -41.5q-66 0 -113 50t-47 136z" />
230 <glyph unicode="&#x201d;" horiz-adv-x="880" d="M109 1247q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -194.5t-139 -153.5l-98 78q51 30 94.5 85.5t52.5 106.5q-8 -4 -35 -4q-51 0 -85.5 36.5t-34.5 92.5zM487 1247q0 57 41 98t99 41q66 0 111.5 -50t45.5 -136q0 -103 -51.5 -194.5t-138.5 -153.5l-98 78 q51 30 94.5 85.5t52.5 106.5q-8 -4 -35 -4q-52 0 -86.5 36.5t-34.5 92.5z" />
231 <glyph unicode="&#x201e;" horiz-adv-x="880" d="M109 125q0 57 40.5 98t98.5 41q66 0 112 -50t46 -136q0 -103 -52 -195.5t-139 -154.5l-98 79q51 30 94.5 86t52.5 107q-12 -6 -35 -6q-51 0 -85.5 37t-34.5 94zM487 125q0 57 41 98t99 41q66 0 111.5 -50t45.5 -136q0 -103 -51.5 -196t-138.5 -154l-98 79q51 30 94.5 86 t52.5 107q-12 -6 -35 -6q-51 0 -86 37t-35 94z" />
232 <glyph unicode="&#x2022;" horiz-adv-x="733" d="M135 496q0 97 68.5 165t165.5 68t165 -68t68 -165q0 -96 -68 -164t-165 -68t-165.5 68.5t-68.5 163.5z" />
233 <glyph unicode="&#x2026;" horiz-adv-x="1505" d="M109 123q0 57 42.5 99t100.5 42t99.5 -42t41.5 -99q0 -59 -41.5 -101t-99.5 -42t-100.5 42t-42.5 101zM610 123q0 57 43 99t101 42t99.5 -42t41.5 -99q0 -59 -41.5 -101t-99.5 -42q-59 0 -101.5 42.5t-42.5 100.5zM1112 123q0 57 42.5 99t100.5 42t100 -42t42 -99 q0 -59 -42 -101t-100 -42q-59 0 -101 42t-42 101z" />
234 <glyph unicode="&#x202f;" horiz-adv-x="367" />
235 <glyph unicode="&#x2039;" horiz-adv-x="655" d="M61 498l328 362h205l-328 -362l328 -369h-205z" />
236 <glyph unicode="&#x203a;" horiz-adv-x="655" d="M61 129l328 369l-328 362h205l328 -362l-328 -369h-205z" />
237 <glyph unicode="&#x205f;" horiz-adv-x="459" />
238 <glyph unicode="&#x20ac;" horiz-adv-x="1439" d="M53 471v139h82q-2 23 -2 72q0 24 4 78h-84v139h111q66 224 252 357t434 133q192 0 328 -84.5t219 -221.5l-203 -106q-51 88 -144 143.5t-200 55.5q-146 0 -259.5 -74.5t-168.5 -202.5h549v-139h-588q-4 -54 -4 -78q0 -49 4 -72h588v-139h-551q55 -131 168.5 -207 t261.5 -76q106 0 199.5 56t144.5 143l205 -102q-197 -310 -549 -310q-249 0 -436.5 134.5t-251.5 361.5h-109z" />
239 <glyph unicode="&#x2122;" horiz-adv-x="929" d="M35 1313v53h311v-53h-127v-398h-57v398h-127zM420 915v451h88l131 -328l131 328h88v-451h-57v373l-154 -373h-16l-154 373v-373h-57z" />
240 <glyph unicode="&#x25fc;" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" />
241 <hkern g1="B" g2="T" k="31" />
242 <hkern g1="B" g2="V" k="31" />
243 <hkern g1="B" g2="W" k="20" />
244 <hkern g1="B" g2="Y,Yacute,Ydieresis" k="61" />
245 <hkern g1="B" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
246 <hkern g1="C,Ccedilla" g2="V" k="6" />
247 <hkern g1="C,Ccedilla" g2="W" k="10" />
248 <hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="41" />
249 <hkern g1="C,Ccedilla" g2="question" k="10" />
250 <hkern g1="C,Ccedilla" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="10" />
251 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="J" k="41" />
252 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="T" k="51" />
253 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="V" k="41" />
254 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="W" k="41" />
255 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Y,Yacute,Ydieresis" k="82" />
256 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="question" k="41" />
257 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
258 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="72" />
259 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="X" k="61" />
260 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="Z" k="31" />
261 <hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="51" />
262 <hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="82" />
263 <hkern g1="F" g2="J" k="133" />
264 <hkern g1="F" g2="ampersand" k="20" />
265 <hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="102" />
266 <hkern g1="G" g2="T" k="10" />
267 <hkern g1="G" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="10" />
268 <hkern g1="G" g2="X" k="10" />
269 <hkern g1="G" g2="V" k="20" />
270 <hkern g1="G" g2="W" k="10" />
271 <hkern g1="G" g2="Y,Yacute,Ydieresis" k="31" />
272 <hkern g1="G" g2="question" k="20" />
273 <hkern g1="K" g2="Y,Yacute,Ydieresis" k="31" />
274 <hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="102" />
275 <hkern g1="K" g2="a,ae" k="31" />
276 <hkern g1="K" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="61" />
277 <hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="61" />
278 <hkern g1="K" g2="t" k="92" />
279 <hkern g1="K" g2="u" k="41" />
280 <hkern g1="K" g2="v" k="123" />
281 <hkern g1="K" g2="w" k="82" />
282 <hkern g1="K" g2="x" k="61" />
283 <hkern g1="K" g2="y,yacute,ydieresis" k="123" />
284 <hkern g1="K" g2="hyphen,periodcentered,endash,emdash" k="102" />
285 <hkern g1="L" g2="T" k="205" />
286 <hkern g1="L" g2="ampersand" k="10" />
287 <hkern g1="L" g2="V" k="184" />
288 <hkern g1="L" g2="W" k="143" />
289 <hkern g1="L" g2="Y,Yacute,Ydieresis" k="256" />
290 <hkern g1="L" g2="question" k="225" />
291 <hkern g1="L" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="266" />
292 <hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
293 <hkern g1="L" g2="a,ae" k="20" />
294 <hkern g1="L" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="31" />
295 <hkern g1="L" g2="t" k="72" />
296 <hkern g1="L" g2="u" k="20" />
297 <hkern g1="L" g2="v" k="113" />
298 <hkern g1="L" g2="w" k="72" />
299 <hkern g1="L" g2="y,yacute,ydieresis" k="113" />
300 <hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="51" />
301 <hkern g1="L" g2="asterisk" k="348" />
302 <hkern g1="P" g2="Y,Yacute,Ydieresis" k="10" />
303 <hkern g1="P" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="154" />
304 <hkern g1="P" g2="J" k="236" />
305 <hkern g1="P" g2="X" k="31" />
306 <hkern g1="P" g2="ampersand" k="61" />
307 <hkern g1="P" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
308 <hkern g1="P" g2="a,ae" k="41" />
309 <hkern g1="P" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="31" />
310 <hkern g1="P" g2="hyphen,periodcentered,endash,emdash" k="61" />
311 <hkern g1="R" g2="T" k="20" />
312 <hkern g1="R" g2="V" k="20" />
313 <hkern g1="R" g2="Y,Yacute,Ydieresis" k="35" />
314 <hkern g1="R" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="10" />
315 <hkern g1="R" g2="ampersand" k="10" />
316 <hkern g1="R" g2="a,ae" k="41" />
317 <hkern g1="R" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="61" />
318 <hkern g1="R" g2="s" k="20" />
319 <hkern g1="S" g2="T" k="20" />
320 <hkern g1="S" g2="Y,Yacute,Ydieresis" k="20" />
321 <hkern g1="S" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="20" />
322 <hkern g1="S" g2="t" k="31" />
323 <hkern g1="S" g2="v" k="20" />
324 <hkern g1="S" g2="w" k="10" />
325 <hkern g1="S" g2="x" k="31" />
326 <hkern g1="S" g2="y,yacute,ydieresis" k="20" />
327 <hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="51" />
328 <hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="133" />
329 <hkern g1="T" g2="J" k="174" />
330 <hkern g1="T" g2="ampersand" k="113" />
331 <hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="195" />
332 <hkern g1="T" g2="a,ae" k="174" />
333 <hkern g1="T" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="215" />
334 <hkern g1="T" g2="hyphen,periodcentered,endash,emdash" k="123" />
335 <hkern g1="T" g2="s" k="174" />
336 <hkern g1="T" g2="v" k="82" />
337 <hkern g1="T" g2="w" k="82" />
338 <hkern g1="T" g2="x" k="102" />
339 <hkern g1="T" g2="y,yacute,ydieresis" k="82" />
340 <hkern g1="T" g2="S" k="10" />
341 <hkern g1="T" g2="colon,semicolon" k="102" />
342 <hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="51" />
343 <hkern g1="T" g2="m,n,p,r,z" k="154" />
344 <hkern g1="T" g2="u" k="154" />
345 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="61" />
346 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="41" />
347 <hkern g1="J,U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
348 <hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="102" />
349 <hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
350 <hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
351 <hkern g1="V" g2="J" k="195" />
352 <hkern g1="V" g2="ampersand" k="72" />
353 <hkern g1="V" g2="a,ae" k="133" />
354 <hkern g1="V" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="123" />
355 <hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="51" />
356 <hkern g1="V" g2="m,n,p,r,z" k="102" />
357 <hkern g1="V" g2="s" k="92" />
358 <hkern g1="V" g2="t" k="31" />
359 <hkern g1="V" g2="u" k="102" />
360 <hkern g1="V" g2="v" k="31" />
361 <hkern g1="V" g2="w" k="20" />
362 <hkern g1="V" g2="x" k="51" />
363 <hkern g1="V" g2="y,yacute,ydieresis" k="20" />
364 <hkern g1="V" g2="hyphen,periodcentered,endash,emdash" k="113" />
365 <hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="92" />
366 <hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="133" />
367 <hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
368 <hkern g1="W" g2="J" k="102" />
369 <hkern g1="W" g2="ampersand" k="41" />
370 <hkern g1="W" g2="a,ae" k="82" />
371 <hkern g1="W" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="82" />
372 <hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="31" />
373 <hkern g1="W" g2="m,n,p,r,z" k="61" />
374 <hkern g1="W" g2="s" k="51" />
375 <hkern g1="W" g2="t" k="31" />
376 <hkern g1="W" g2="u" k="61" />
377 <hkern g1="W" g2="v" k="10" />
378 <hkern g1="W" g2="x" k="51" />
379 <hkern g1="W" g2="y,yacute,ydieresis" k="10" />
380 <hkern g1="W" g2="hyphen,periodcentered,endash,emdash" k="72" />
381 <hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="133" />
382 <hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
383 <hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82" />
384 <hkern g1="Y,Yacute,Ydieresis" g2="J" k="236" />
385 <hkern g1="Y,Yacute,Ydieresis" g2="ampersand" k="123" />
386 <hkern g1="Y,Yacute,Ydieresis" g2="a,ae" k="236" />
387 <hkern g1="Y,Yacute,Ydieresis" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="256" />
388 <hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="113" />
389 <hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,z" k="184" />
390 <hkern g1="Y,Yacute,Ydieresis" g2="s" k="205" />
391 <hkern g1="Y,Yacute,Ydieresis" g2="t" k="61" />
392 <hkern g1="Y,Yacute,Ydieresis" g2="u" k="184" />
393 <hkern g1="Y,Yacute,Ydieresis" g2="v" k="123" />
394 <hkern g1="Y,Yacute,Ydieresis" g2="w" k="123" />
395 <hkern g1="Y,Yacute,Ydieresis" g2="x" k="154" />
396 <hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="123" />
397 <hkern g1="Y,Yacute,Ydieresis" g2="hyphen,periodcentered,endash,emdash" k="246" />
398 <hkern g1="Y,Yacute,Ydieresis" g2="S" k="41" />
399 <hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="133" />
400 <hkern g1="a,h,m,n" g2="T" k="205" />
401 <hkern g1="a,h,m,n" g2="question" k="82" />
402 <hkern g1="a,h,m,n" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
403 <hkern g1="a,h,m,n" g2="Y,Yacute,Ydieresis" k="225" />
404 <hkern g1="a,h,m,n" g2="V" k="143" />
405 <hkern g1="a,h,m,n" g2="W" k="92" />
406 <hkern g1="ampersand" g2="T" k="143" />
407 <hkern g1="ampersand" g2="Y,Yacute,Ydieresis" k="174" />
408 <hkern g1="ampersand" g2="V" k="102" />
409 <hkern g1="ampersand" g2="W" k="82" />
410 <hkern g1="asterisk" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="195" />
411 <hkern g1="asterisk" g2="J" k="246" />
412 <hkern g1="b,o,p,oslash,thorn" g2="T" k="215" />
413 <hkern g1="b,o,p,oslash,thorn" g2="question" k="102" />
414 <hkern g1="b,o,p,oslash,thorn" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="20" />
415 <hkern g1="b,o,p,oslash,thorn" g2="Y,Yacute,Ydieresis" k="246" />
416 <hkern g1="b,o,p,oslash,thorn" g2="V" k="123" />
417 <hkern g1="b,o,p,oslash,thorn" g2="W" k="82" />
418 <hkern g1="b,o,p,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="10" />
419 <hkern g1="b,o,p,oslash,thorn" g2="x" k="72" />
420 <hkern g1="c,cent,ccedilla" g2="T" k="154" />
421 <hkern g1="c,cent,ccedilla" g2="question" k="51" />
422 <hkern g1="c,cent,ccedilla" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="10" />
423 <hkern g1="c,cent,ccedilla" g2="Y,Yacute,Ydieresis" k="133" />
424 <hkern g1="c,cent,ccedilla" g2="V" k="82" />
425 <hkern g1="c,cent,ccedilla" g2="W" k="51" />
426 <hkern g1="colon,semicolon" g2="T" k="102" />
427 <hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="133" />
428 <hkern g1="e,ae,oe" g2="T" k="195" />
429 <hkern g1="e,ae,oe" g2="question" k="82" />
430 <hkern g1="e,ae,oe" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="10" />
431 <hkern g1="e,ae,oe" g2="Y,Yacute,Ydieresis" k="225" />
432 <hkern g1="e,ae,oe" g2="V" k="113" />
433 <hkern g1="e,ae,oe" g2="W" k="82" />
434 <hkern g1="e,ae,oe" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="10" />
435 <hkern g1="e,ae,oe" g2="asterisk" k="31" />
436 <hkern g1="eth" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="10" />
437 <hkern g1="f" g2="T" k="-82" />
438 <hkern g1="f" g2="question" k="-113" />
439 <hkern g1="f" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="-133" />
440 <hkern g1="f" g2="Y,Yacute,Ydieresis" k="-123" />
441 <hkern g1="f" g2="V" k="-133" />
442 <hkern g1="f" g2="W" k="-133" />
443 <hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="92" />
444 <hkern g1="f" g2="X" k="-82" />
445 <hkern g1="f" g2="Z" k="-82" />
446 <hkern g1="f" g2="asterisk" k="-133" />
447 <hkern g1="f" g2="ampersand" k="10" />
448 <hkern g1="f" g2="parenright,bracketright,braceright" k="-143" />
449 <hkern g1="f" g2="exclam,B,D,E,F,H,I,K,L,M,N,P,R,Egrave,Eacute,Ecircumflex,Edieresis,Igrave,Iacute,Icircumflex,Idieresis,Eth,Ntilde" k="-82" />
450 <hkern g1="f" g2="S" k="-51" />
451 <hkern g1="f" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="-82" />
452 <hkern g1="g,q" g2="T" k="154" />
453 <hkern g1="g,q" g2="question" k="51" />
454 <hkern g1="g,q" g2="Y,Yacute,Ydieresis" k="184" />
455 <hkern g1="g,q" g2="V" k="102" />
456 <hkern g1="g,q" g2="W" k="61" />
457 <hkern g1="g,q" g2="j" k="-102" />
458 <hkern g1="hyphen,periodcentered,endash,emdash" g2="Y,Yacute,Ydieresis" k="236" />
459 <hkern g1="hyphen,periodcentered,endash,emdash" g2="V" k="113" />
460 <hkern g1="hyphen,periodcentered,endash,emdash" g2="W" k="72" />
461 <hkern g1="hyphen,periodcentered,endash,emdash" g2="X" k="92" />
462 <hkern g1="k" g2="T" k="113" />
463 <hkern g1="k" g2="Y,Yacute,Ydieresis" k="143" />
464 <hkern g1="k" g2="V" k="51" />
465 <hkern g1="k" g2="W" k="51" />
466 <hkern g1="k" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="10" />
467 <hkern g1="k" g2="bullet" k="51" />
468 <hkern g1="k" g2="hyphen,periodcentered,endash,emdash" k="51" />
469 <hkern g1="questiondown" g2="j" k="-328" />
470 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="205" />
471 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="10" />
472 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="s" k="61" />
473 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="J" k="205" />
474 <hkern g1="quotedbl,quotesingle,quoteleft,quoteright,quotedblleft,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="164" />
475 <hkern g1="r" g2="T" k="82" />
476 <hkern g1="r" g2="V" k="51" />
477 <hkern g1="r" g2="W" k="20" />
478 <hkern g1="r" g2="Y,Yacute,Ydieresis" k="102" />
479 <hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="174" />
480 <hkern g1="r" g2="X" k="31" />
481 <hkern g1="s" g2="T" k="164" />
482 <hkern g1="s" g2="V" k="92" />
483 <hkern g1="s" g2="W" k="92" />
484 <hkern g1="s" g2="Y,Yacute,Ydieresis" k="195" />
485 <hkern g1="s" g2="quotedbl,quotesingle,registered,quoteleft,quoteright,quotedblleft,quotedblright,trademark" k="41" />
486 <hkern g1="s" g2="X" k="10" />
487 <hkern g1="s" g2="question" k="92" />
488 <hkern g1="t" g2="T" k="82" />
489 <hkern g1="t" g2="V" k="61" />
490 <hkern g1="t" g2="W" k="31" />
491 <hkern g1="t" g2="Y,Yacute,Ydieresis" k="72" />
492 <hkern g1="u,z" g2="T" k="154" />
493 <hkern g1="u,z" g2="V" k="102" />
494 <hkern g1="u,z" g2="W" k="61" />
495 <hkern g1="u,z" g2="Y,Yacute,Ydieresis" k="184" />
496 <hkern g1="u,z" g2="question" k="51" />
497 <hkern g1="v" g2="T" k="82" />
498 <hkern g1="v" g2="V" k="31" />
499 <hkern g1="v" g2="W" k="10" />
500 <hkern g1="v" g2="Y,Yacute,Ydieresis" k="123" />
501 <hkern g1="v" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
502 <hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="133" />
503 <hkern g1="v" g2="X" k="72" />
504 <hkern g1="w" g2="T" k="82" />
505 <hkern g1="w" g2="V" k="20" />
506 <hkern g1="w" g2="Y,Yacute,Ydieresis" k="123" />
507 <hkern g1="w" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="31" />
508 <hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="82" />
509 <hkern g1="w" g2="X" k="82" />
510 <hkern g1="y,yacute,ydieresis" g2="T" k="82" />
511 <hkern g1="y,yacute,ydieresis" g2="V" k="20" />
512 <hkern g1="y,yacute,ydieresis" g2="W" k="10" />
513 <hkern g1="y,yacute,ydieresis" g2="Y,Yacute,Ydieresis" k="123" />
514 <hkern g1="y,yacute,ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41" />
515 <hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="113" />
516 <hkern g1="y,yacute,ydieresis" g2="X" k="72" />
517 <hkern g1="y,yacute,ydieresis" g2="question" k="10" />
518 <hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="61" />
519 <hkern g1="X" g2="t" k="61" />
520 <hkern g1="X" g2="v" k="72" />
521 <hkern g1="X" g2="w" k="82" />
522 <hkern g1="X" g2="y,yacute,ydieresis" k="72" />
523 <hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
524 <hkern g1="X" g2="hyphen,periodcentered,endash,emdash" k="92" />
525 <hkern g1="zero,nine" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="51" />
526 <hkern g1="seven" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="195" />
527 <hkern g1="x" g2="T" k="102" />
528 <hkern g1="x" g2="V" k="51" />
529 <hkern g1="x" g2="W" k="51" />
530 <hkern g1="x" g2="c,d,e,g,o,q,ccedilla,eth,oslash,oe" k="72" />
531 <hkern g1="x" g2="Y,Yacute,Ydieresis" k="154" />
532 <hkern g1="parenleft,bracketleft,braceleft" g2="j" k="-225" />
533 </font>
534 </defs></svg>
docs/_themes/lucuma/static/fonts/proximanova-semibold-webfont.ttf less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-semibold-webfont.woff less more
Binary diff not shown
docs/_themes/lucuma/static/fonts/proximanova-semibold-webfont.woff2 less more
Binary diff not shown
+0
-0
docs/_themes/lucuma/static/humans.txt less more
(Empty file)
docs/_themes/lucuma/static/images/file.png less more
Binary diff not shown
docs/_themes/lucuma/static/images/lucuma-labs.png less more
Binary diff not shown
docs/_themes/lucuma/static/images/tab-info.gif less more
Binary diff not shown
docs/_themes/lucuma/static/images/tab-warning.gif less more
Binary diff not shown
+0
-0
docs/_themes/lucuma/static/robots.txt less more
(Empty file)
+0
-238
docs/_themes/lucuma/static/scripts/doctools.js less more
0 /*
1 * doctools.js
2 * ~~~~~~~~~~~
3 *
4 * Sphinx JavaScript utilities for all documentation.
5 *
6 * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
7 * :license: BSD, see LICENSE for details.
8 *
9 */
10
11 /**
12 * select a different prefix for underscore
13 */
14 $u = _.noConflict();
15
16 /**
17 * make the code below compatible with browsers without
18 * an installed firebug like debugger
19 if (!window.console || !console.firebug) {
20 var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
21 "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
22 "profile", "profileEnd"];
23 window.console = {};
24 for (var i = 0; i < names.length; ++i)
25 window.console[names[i]] = function() {};
26 }
27 */
28
29 /**
30 * small helper function to urldecode strings
31 */
32 jQuery.urldecode = function(x) {
33 return decodeURIComponent(x).replace(/\+/g, ' ');
34 };
35
36 /**
37 * small helper function to urlencode strings
38 */
39 jQuery.urlencode = encodeURIComponent;
40
41 /**
42 * This function returns the parsed url parameters of the
43 * current request. Multiple values per key are supported,
44 * it will always return arrays of strings for the value parts.
45 */
46 jQuery.getQueryParameters = function(s) {
47 if (typeof s == 'undefined')
48 s = document.location.search;
49 var parts = s.substr(s.indexOf('?') + 1).split('&');
50 var result = {};
51 for (var i = 0; i < parts.length; i++) {
52 var tmp = parts[i].split('=', 2);
53 var key = jQuery.urldecode(tmp[0]);
54 var value = jQuery.urldecode(tmp[1]);
55 if (key in result)
56 result[key].push(value);
57 else
58 result[key] = [value];
59 }
60 return result;
61 };
62
63 /**
64 * highlight a given string on a jquery object by wrapping it in
65 * span elements with the given class name.
66 */
67 jQuery.fn.highlightText = function(text, className) {
68 function highlight(node) {
69 if (node.nodeType == 3) {
70 var val = node.nodeValue;
71 var pos = val.toLowerCase().indexOf(text);
72 if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
73 var span = document.createElement("span");
74 span.className = className;
75 span.appendChild(document.createTextNode(val.substr(pos, text.length)));
76 node.parentNode.insertBefore(span, node.parentNode.insertBefore(
77 document.createTextNode(val.substr(pos + text.length)),
78 node.nextSibling));
79 node.nodeValue = val.substr(0, pos);
80 }
81 }
82 else if (!jQuery(node).is("button, select, textarea")) {
83 jQuery.each(node.childNodes, function() {
84 highlight(this);
85 });
86 }
87 }
88 return this.each(function() {
89 highlight(this);
90 });
91 };
92
93 /**
94 * Small JavaScript module for the documentation.
95 */
96 var Documentation = {
97
98 init : function() {
99 this.fixFirefoxAnchorBug();
100 this.highlightSearchWords();
101 this.initIndexTable();
102 },
103
104 /**
105 * i18n support
106 */
107 TRANSLATIONS : {},
108 PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
109 LOCALE : 'unknown',
110
111 // gettext and ngettext don't access this so that the functions
112 // can safely bound to a different name (_ = Documentation.gettext)
113 gettext : function(string) {
114 var translated = Documentation.TRANSLATIONS[string];
115 if (typeof translated == 'undefined')
116 return string;
117 return (typeof translated == 'string') ? translated : translated[0];
118 },
119
120 ngettext : function(singular, plural, n) {
121 var translated = Documentation.TRANSLATIONS[singular];
122 if (typeof translated == 'undefined')
123 return (n == 1) ? singular : plural;
124 return translated[Documentation.PLURALEXPR(n)];
125 },
126
127 addTranslations : function(catalog) {
128 for (var key in catalog.messages)
129 this.TRANSLATIONS[key] = catalog.messages[key];
130 this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
131 this.LOCALE = catalog.locale;
132 },
133
134 /**
135 * add context elements like header anchor links
136 */
137 addContextElements : function() {
138 $('div[id] > :header:first').each(function() {
139 $('<a class="headerlink">\u00B6</a>').
140 attr('href', '#' + this.id).
141 attr('title', _('permalink_header')).
142 appendTo(this);
143 });
144 $('dt[id]').each(function() {
145 $('<a class="headerlink">\u00B6</a>').
146 attr('href', '#' + this.id).
147 attr('title', _('permalink_definition')).
148 appendTo(this);
149 });
150 },
151
152 /**
153 * workaround a firefox stupidity
154 */
155 fixFirefoxAnchorBug : function() {
156 if (document.location.hash && $.browser.mozilla)
157 window.setTimeout(function() {
158 document.location.href += '';
159 }, 10);
160 },
161
162 /**
163 * highlight the search words provided in the url in the text
164 */
165 highlightSearchWords : function() {
166 var params = $.getQueryParameters();
167 var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
168 if (terms.length) {
169 var body = $('div.body');
170 if (!body.length) {
171 body = $('body');
172 }
173 window.setTimeout(function() {
174 $.each(terms, function() {
175 body.highlightText(this.toLowerCase(), 'highlighted');
176 });
177 }, 10);
178 $('<p class="highlight-link"><a href="javascript:Documentation.' +
179 'hideSearchWords()">' + _('hide_search_matches') + '</a></p>')
180 .appendTo($('#searchbox'));
181 }
182 },
183
184 /**
185 * init the domain index toggle buttons
186 */
187 initIndexTable : function() {
188 var togglers = $('img.toggler').click(function() {
189 var src = $(this).attr('src');
190 var idnum = $(this).attr('id').substr(7);
191 $('tr.cg-' + idnum).toggle();
192 if (src.substr(-9) == 'minus.png')
193 $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
194 else
195 $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
196 }).css('display', '');
197 if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
198 togglers.click();
199 }
200 },
201
202 /**
203 * helper function to hide the search marks again
204 */
205 hideSearchWords : function() {
206 $('#searchbox .highlight-link').fadeOut(300);
207 $('span.highlighted').removeClass('highlighted');
208 },
209
210 /**
211 * make the url absolute
212 */
213 makeURL : function(relativeURL) {
214 return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
215 },
216
217 /**
218 * get the current relative url
219 */
220 getCurrentURL : function() {
221 var path = document.location.pathname;
222 var parts = path.split(/\//);
223 $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
224 if (this == '..')
225 parts.pop();
226 });
227 var url = parts.join('/');
228 return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
229 }
230 };
231
232 // quick alias for translations
233 _ = Documentation.gettext;
234
235 $(document).ready(function() {
236 Documentation.init();
237 });
+0
-10346
docs/_themes/lucuma/static/scripts/jquery.js less more
0 /*!
1 * jQuery JavaScript Library v1.11.2
2 * http://jquery.com/
3 *
4 * Includes Sizzle.js
5 * http://sizzlejs.com/
6 *
7 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
8 * Released under the MIT license
9 * http://jquery.org/license
10 *
11 * Date: 2014-12-17T15:27Z
12 */
13
14 (function( global, factory ) {
15
16 if ( typeof module === "object" && typeof module.exports === "object" ) {
17 // For CommonJS and CommonJS-like environments where a proper window is present,
18 // execute the factory and get jQuery
19 // For environments that do not inherently posses a window with a document
20 // (such as Node.js), expose a jQuery-making factory as module.exports
21 // This accentuates the need for the creation of a real window
22 // e.g. var jQuery = require("jquery")(window);
23 // See ticket #14549 for more info
24 module.exports = global.document ?
25 factory( global, true ) :
26 function( w ) {
27 if ( !w.document ) {
28 throw new Error( "jQuery requires a window with a document" );
29 }
30 return factory( w );
31 };
32 } else {
33 factory( global );
34 }
35
36 // Pass this if window is not defined yet
37 }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
38
39 // Can't do this because several apps including ASP.NET trace
40 // the stack via arguments.caller.callee and Firefox dies if
41 // you try to trace through "use strict" call chains. (#13335)
42 // Support: Firefox 18+
43 //
44
45 var deletedIds = [];
46
47 var slice = deletedIds.slice;
48
49 var concat = deletedIds.concat;
50
51 var push = deletedIds.push;
52
53 var indexOf = deletedIds.indexOf;
54
55 var class2type = {};
56
57 var toString = class2type.toString;
58
59 var hasOwn = class2type.hasOwnProperty;
60
61 var support = {};
62
63
64
65 var
66 version = "1.11.2",
67
68 // Define a local copy of jQuery
69 jQuery = function( selector, context ) {
70 // The jQuery object is actually just the init constructor 'enhanced'
71 // Need init if jQuery is called (just allow error to be thrown if not included)
72 return new jQuery.fn.init( selector, context );
73 },
74
75 // Support: Android<4.1, IE<9
76 // Make sure we trim BOM and NBSP
77 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
78
79 // Matches dashed string for camelizing
80 rmsPrefix = /^-ms-/,
81 rdashAlpha = /-([\da-z])/gi,
82
83 // Used by jQuery.camelCase as callback to replace()
84 fcamelCase = function( all, letter ) {
85 return letter.toUpperCase();
86 };
87
88 jQuery.fn = jQuery.prototype = {
89 // The current version of jQuery being used
90 jquery: version,
91
92 constructor: jQuery,
93
94 // Start with an empty selector
95 selector: "",
96
97 // The default length of a jQuery object is 0
98 length: 0,
99
100 toArray: function() {
101 return slice.call( this );
102 },
103
104 // Get the Nth element in the matched element set OR
105 // Get the whole matched element set as a clean array
106 get: function( num ) {
107 return num != null ?
108
109 // Return just the one element from the set
110 ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
111
112 // Return all the elements in a clean array
113 slice.call( this );
114 },
115
116 // Take an array of elements and push it onto the stack
117 // (returning the new matched element set)
118 pushStack: function( elems ) {
119
120 // Build a new jQuery matched element set
121 var ret = jQuery.merge( this.constructor(), elems );
122
123 // Add the old object onto the stack (as a reference)
124 ret.prevObject = this;
125 ret.context = this.context;
126
127 // Return the newly-formed element set
128 return ret;
129 },
130
131 // Execute a callback for every element in the matched set.
132 // (You can seed the arguments with an array of args, but this is
133 // only used internally.)
134 each: function( callback, args ) {
135 return jQuery.each( this, callback, args );
136 },
137
138 map: function( callback ) {
139 return this.pushStack( jQuery.map(this, function( elem, i ) {
140 return callback.call( elem, i, elem );
141 }));
142 },
143
144 slice: function() {
145 return this.pushStack( slice.apply( this, arguments ) );
146 },
147
148 first: function() {
149 return this.eq( 0 );
150 },
151
152 last: function() {
153 return this.eq( -1 );
154 },
155
156 eq: function( i ) {
157 var len = this.length,
158 j = +i + ( i < 0 ? len : 0 );
159 return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
160 },
161
162 end: function() {
163 return this.prevObject || this.constructor(null);
164 },
165
166 // For internal use only.
167 // Behaves like an Array's method, not like a jQuery method.
168 push: push,
169 sort: deletedIds.sort,
170 splice: deletedIds.splice
171 };
172
173 jQuery.extend = jQuery.fn.extend = function() {
174 var src, copyIsArray, copy, name, options, clone,
175 target = arguments[0] || {},
176 i = 1,
177 length = arguments.length,
178 deep = false;
179
180 // Handle a deep copy situation
181 if ( typeof target === "boolean" ) {
182 deep = target;
183
184 // skip the boolean and the target
185 target = arguments[ i ] || {};
186 i++;
187 }
188
189 // Handle case when target is a string or something (possible in deep copy)
190 if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
191 target = {};
192 }
193
194 // extend jQuery itself if only one argument is passed
195 if ( i === length ) {
196 target = this;
197 i--;
198 }
199
200 for ( ; i < length; i++ ) {
201 // Only deal with non-null/undefined values
202 if ( (options = arguments[ i ]) != null ) {
203 // Extend the base object
204 for ( name in options ) {
205 src = target[ name ];
206 copy = options[ name ];
207
208 // Prevent never-ending loop
209 if ( target === copy ) {
210 continue;
211 }
212
213 // Recurse if we're merging plain objects or arrays
214 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
215 if ( copyIsArray ) {
216 copyIsArray = false;
217 clone = src && jQuery.isArray(src) ? src : [];
218
219 } else {
220 clone = src && jQuery.isPlainObject(src) ? src : {};
221 }
222
223 // Never move original objects, clone them
224 target[ name ] = jQuery.extend( deep, clone, copy );
225
226 // Don't bring in undefined values
227 } else if ( copy !== undefined ) {
228 target[ name ] = copy;
229 }
230 }
231 }
232 }
233
234 // Return the modified object
235 return target;
236 };
237
238 jQuery.extend({
239 // Unique for each copy of jQuery on the page
240 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
241
242 // Assume jQuery is ready without the ready module
243 isReady: true,
244
245 error: function( msg ) {
246 throw new Error( msg );
247 },
248
249 noop: function() {},
250
251 // See test/unit/core.js for details concerning isFunction.
252 // Since version 1.3, DOM methods and functions like alert
253 // aren't supported. They return false on IE (#2968).
254 isFunction: function( obj ) {
255 return jQuery.type(obj) === "function";
256 },
257
258 isArray: Array.isArray || function( obj ) {
259 return jQuery.type(obj) === "array";
260 },
261
262 isWindow: function( obj ) {
263 /* jshint eqeqeq: false */
264 return obj != null && obj == obj.window;
265 },
266
267 isNumeric: function( obj ) {
268 // parseFloat NaNs numeric-cast false positives (null|true|false|"")
269 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
270 // subtraction forces infinities to NaN
271 // adding 1 corrects loss of precision from parseFloat (#15100)
272 return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
273 },
274
275 isEmptyObject: function( obj ) {
276 var name;
277 for ( name in obj ) {
278 return false;
279 }
280 return true;
281 },
282
283 isPlainObject: function( obj ) {
284 var key;
285
286 // Must be an Object.
287 // Because of IE, we also have to check the presence of the constructor property.
288 // Make sure that DOM nodes and window objects don't pass through, as well
289 if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
290 return false;
291 }
292
293 try {
294 // Not own constructor property must be Object
295 if ( obj.constructor &&
296 !hasOwn.call(obj, "constructor") &&
297 !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
298 return false;
299 }
300 } catch ( e ) {
301 // IE8,9 Will throw exceptions on certain host objects #9897
302 return false;
303 }
304
305 // Support: IE<9
306 // Handle iteration over inherited properties before own properties.
307 if ( support.ownLast ) {
308 for ( key in obj ) {
309 return hasOwn.call( obj, key );
310 }
311 }
312
313 // Own properties are enumerated firstly, so to speed up,
314 // if last one is own, then all properties are own.
315 for ( key in obj ) {}
316
317 return key === undefined || hasOwn.call( obj, key );
318 },
319
320 type: function( obj ) {
321 if ( obj == null ) {
322 return obj + "";
323 }
324 return typeof obj === "object" || typeof obj === "function" ?
325 class2type[ toString.call(obj) ] || "object" :
326 typeof obj;
327 },
328
329 // Evaluates a script in a global context
330 // Workarounds based on findings by Jim Driscoll
331 // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
332 globalEval: function( data ) {
333 if ( data && jQuery.trim( data ) ) {
334 // We use execScript on Internet Explorer
335 // We use an anonymous function so that context is window
336 // rather than jQuery in Firefox
337 ( window.execScript || function( data ) {
338 window[ "eval" ].call( window, data );
339 } )( data );
340 }
341 },
342
343 // Convert dashed to camelCase; used by the css and data modules
344 // Microsoft forgot to hump their vendor prefix (#9572)
345 camelCase: function( string ) {
346 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
347 },
348
349 nodeName: function( elem, name ) {
350 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
351 },
352
353 // args is for internal usage only
354 each: function( obj, callback, args ) {
355 var value,
356 i = 0,
357 length = obj.length,
358 isArray = isArraylike( obj );
359
360 if ( args ) {
361 if ( isArray ) {
362 for ( ; i < length; i++ ) {
363 value = callback.apply( obj[ i ], args );
364
365 if ( value === false ) {
366 break;
367 }
368 }
369 } else {
370 for ( i in obj ) {
371 value = callback.apply( obj[ i ], args );
372
373 if ( value === false ) {
374 break;
375 }
376 }
377 }
378
379 // A special, fast, case for the most common use of each
380 } else {
381 if ( isArray ) {
382 for ( ; i < length; i++ ) {
383 value = callback.call( obj[ i ], i, obj[ i ] );
384
385 if ( value === false ) {
386 break;
387 }
388 }
389 } else {
390 for ( i in obj ) {
391 value = callback.call( obj[ i ], i, obj[ i ] );
392
393 if ( value === false ) {
394 break;
395 }
396 }
397 }
398 }
399
400 return obj;
401 },
402
403 // Support: Android<4.1, IE<9
404 trim: function( text ) {
405 return text == null ?
406 "" :
407 ( text + "" ).replace( rtrim, "" );
408 },
409
410 // results is for internal usage only
411 makeArray: function( arr, results ) {
412 var ret = results || [];
413
414 if ( arr != null ) {
415 if ( isArraylike( Object(arr) ) ) {
416 jQuery.merge( ret,
417 typeof arr === "string" ?
418 [ arr ] : arr
419 );
420 } else {
421 push.call( ret, arr );
422 }
423 }
424
425 return ret;
426 },
427
428 inArray: function( elem, arr, i ) {
429 var len;
430
431 if ( arr ) {
432 if ( indexOf ) {
433 return indexOf.call( arr, elem, i );
434 }
435
436 len = arr.length;
437 i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
438
439 for ( ; i < len; i++ ) {
440 // Skip accessing in sparse arrays
441 if ( i in arr && arr[ i ] === elem ) {
442 return i;
443 }
444 }
445 }
446
447 return -1;
448 },
449
450 merge: function( first, second ) {
451 var len = +second.length,
452 j = 0,
453 i = first.length;
454
455 while ( j < len ) {
456 first[ i++ ] = second[ j++ ];
457 }
458
459 // Support: IE<9
460 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
461 if ( len !== len ) {
462 while ( second[j] !== undefined ) {
463 first[ i++ ] = second[ j++ ];
464 }
465 }
466
467 first.length = i;
468
469 return first;
470 },
471
472 grep: function( elems, callback, invert ) {
473 var callbackInverse,
474 matches = [],
475 i = 0,
476 length = elems.length,
477 callbackExpect = !invert;
478
479 // Go through the array, only saving the items
480 // that pass the validator function
481 for ( ; i < length; i++ ) {
482 callbackInverse = !callback( elems[ i ], i );
483 if ( callbackInverse !== callbackExpect ) {
484 matches.push( elems[ i ] );
485 }
486 }
487
488 return matches;
489 },
490
491 // arg is for internal usage only
492 map: function( elems, callback, arg ) {
493 var value,
494 i = 0,
495 length = elems.length,
496 isArray = isArraylike( elems ),
497 ret = [];
498
499 // Go through the array, translating each of the items to their new values
500 if ( isArray ) {
501 for ( ; i < length; i++ ) {
502 value = callback( elems[ i ], i, arg );
503
504 if ( value != null ) {
505 ret.push( value );
506 }
507 }
508
509 // Go through every key on the object,
510 } else {
511 for ( i in elems ) {
512 value = callback( elems[ i ], i, arg );
513
514 if ( value != null ) {
515 ret.push( value );
516 }
517 }
518 }
519
520 // Flatten any nested arrays
521 return concat.apply( [], ret );
522 },
523
524 // A global GUID counter for objects
525 guid: 1,
526
527 // Bind a function to a context, optionally partially applying any
528 // arguments.
529 proxy: function( fn, context ) {
530 var args, proxy, tmp;
531
532 if ( typeof context === "string" ) {
533 tmp = fn[ context ];
534 context = fn;
535 fn = tmp;
536 }
537
538 // Quick check to determine if target is callable, in the spec
539 // this throws a TypeError, but we will just return undefined.
540 if ( !jQuery.isFunction( fn ) ) {
541 return undefined;
542 }
543
544 // Simulated bind
545 args = slice.call( arguments, 2 );
546 proxy = function() {
547 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
548 };
549
550 // Set the guid of unique handler to the same of original handler, so it can be removed
551 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
552
553 return proxy;
554 },
555
556 now: function() {
557 return +( new Date() );
558 },
559
560 // jQuery.support is not used in Core but other projects attach their
561 // properties to it so it needs to exist.
562 support: support
563 });
564
565 // Populate the class2type map
566 jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
567 class2type[ "[object " + name + "]" ] = name.toLowerCase();
568 });
569
570 function isArraylike( obj ) {
571 var length = obj.length,
572 type = jQuery.type( obj );
573
574 if ( type === "function" || jQuery.isWindow( obj ) ) {
575 return false;
576 }
577
578 if ( obj.nodeType === 1 && length ) {
579 return true;
580 }
581
582 return type === "array" || length === 0 ||
583 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
584 }
585 var Sizzle =
586 /*!
587 * Sizzle CSS Selector Engine v2.2.0-pre
588 * http://sizzlejs.com/
589 *
590 * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
591 * Released under the MIT license
592 * http://jquery.org/license
593 *
594 * Date: 2014-12-16
595 */
596 (function( window ) {
597
598 var i,
599 support,
600 Expr,
601 getText,
602 isXML,
603 tokenize,
604 compile,
605 select,
606 outermostContext,
607 sortInput,
608 hasDuplicate,
609
610 // Local document vars
611 setDocument,
612 document,
613 docElem,
614 documentIsHTML,
615 rbuggyQSA,
616 rbuggyMatches,
617 matches,
618 contains,
619
620 // Instance-specific data
621 expando = "sizzle" + 1 * new Date(),
622 preferredDoc = window.document,
623 dirruns = 0,
624 done = 0,
625 classCache = createCache(),
626 tokenCache = createCache(),
627 compilerCache = createCache(),
628 sortOrder = function( a, b ) {
629 if ( a === b ) {
630 hasDuplicate = true;
631 }
632 return 0;
633 },
634
635 // General-purpose constants
636 MAX_NEGATIVE = 1 << 31,
637
638 // Instance methods
639 hasOwn = ({}).hasOwnProperty,
640 arr = [],
641 pop = arr.pop,
642 push_native = arr.push,
643 push = arr.push,
644 slice = arr.slice,
645 // Use a stripped-down indexOf as it's faster than native
646 // http://jsperf.com/thor-indexof-vs-for/5
647 indexOf = function( list, elem ) {
648 var i = 0,
649 len = list.length;
650 for ( ; i < len; i++ ) {
651 if ( list[i] === elem ) {
652 return i;
653 }
654 }
655 return -1;
656 },
657
658 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
659
660 // Regular expressions
661
662 // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
663 whitespace = "[\\x20\\t\\r\\n\\f]",
664 // http://www.w3.org/TR/css3-syntax/#characters
665 characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
666
667 // Loosely modeled on CSS identifier characters
668 // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
669 // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
670 identifier = characterEncoding.replace( "w", "w#" ),
671
672 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
673 attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
674 // Operator (capture 2)
675 "*([*^$|!~]?=)" + whitespace +
676 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
677 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
678 "*\\]",
679
680 pseudos = ":(" + characterEncoding + ")(?:\\((" +
681 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
682 // 1. quoted (capture 3; capture 4 or capture 5)
683 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
684 // 2. simple (capture 6)
685 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
686 // 3. anything else (capture 2)
687 ".*" +
688 ")\\)|)",
689
690 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
691 rwhitespace = new RegExp( whitespace + "+", "g" ),
692 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
693
694 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
695 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
696
697 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
698
699 rpseudo = new RegExp( pseudos ),
700 ridentifier = new RegExp( "^" + identifier + "$" ),
701
702 matchExpr = {
703 "ID": new RegExp( "^#(" + characterEncoding + ")" ),
704 "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
705 "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
706 "ATTR": new RegExp( "^" + attributes ),
707 "PSEUDO": new RegExp( "^" + pseudos ),
708 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
709 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
710 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
711 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
712 // For use in libraries implementing .is()
713 // We use this for POS matching in `select`
714 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
715 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
716 },
717
718 rinputs = /^(?:input|select|textarea|button)$/i,
719 rheader = /^h\d$/i,
720
721 rnative = /^[^{]+\{\s*\[native \w/,
722
723 // Easily-parseable/retrievable ID or TAG or CLASS selectors
724 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
725
726 rsibling = /[+~]/,
727 rescape = /'|\\/g,
728
729 // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
730 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
731 funescape = function( _, escaped, escapedWhitespace ) {
732 var high = "0x" + escaped - 0x10000;
733 // NaN means non-codepoint
734 // Support: Firefox<24
735 // Workaround erroneous numeric interpretation of +"0x"
736 return high !== high || escapedWhitespace ?
737 escaped :
738 high < 0 ?
739 // BMP codepoint
740 String.fromCharCode( high + 0x10000 ) :
741 // Supplemental Plane codepoint (surrogate pair)
742 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
743 },
744
745 // Used for iframes
746 // See setDocument()
747 // Removing the function wrapper causes a "Permission Denied"
748 // error in IE
749 unloadHandler = function() {
750 setDocument();
751 };
752
753 // Optimize for push.apply( _, NodeList )
754 try {
755 push.apply(
756 (arr = slice.call( preferredDoc.childNodes )),
757 preferredDoc.childNodes
758 );
759 // Support: Android<4.0
760 // Detect silently failing push.apply
761 arr[ preferredDoc.childNodes.length ].nodeType;
762 } catch ( e ) {
763 push = { apply: arr.length ?
764
765 // Leverage slice if possible
766 function( target, els ) {
767 push_native.apply( target, slice.call(els) );
768 } :
769
770 // Support: IE<9
771 // Otherwise append directly
772 function( target, els ) {
773 var j = target.length,
774 i = 0;
775 // Can't trust NodeList.length
776 while ( (target[j++] = els[i++]) ) {}
777 target.length = j - 1;
778 }
779 };
780 }
781
782 function Sizzle( selector, context, results, seed ) {
783 var match, elem, m, nodeType,
784 // QSA vars
785 i, groups, old, nid, newContext, newSelector;
786
787 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
788 setDocument( context );
789 }
790
791 context = context || document;
792 results = results || [];
793 nodeType = context.nodeType;
794
795 if ( typeof selector !== "string" || !selector ||
796 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
797
798 return results;
799 }
800
801 if ( !seed && documentIsHTML ) {
802
803 // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
804 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
805 // Speed-up: Sizzle("#ID")
806 if ( (m = match[1]) ) {
807 if ( nodeType === 9 ) {
808 elem = context.getElementById( m );
809 // Check parentNode to catch when Blackberry 4.6 returns
810 // nodes that are no longer in the document (jQuery #6963)
811 if ( elem && elem.parentNode ) {
812 // Handle the case where IE, Opera, and Webkit return items
813 // by name instead of ID
814 if ( elem.id === m ) {
815 results.push( elem );
816 return results;
817 }
818 } else {
819 return results;
820 }
821 } else {
822 // Context is not a document
823 if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
824 contains( context, elem ) && elem.id === m ) {
825 results.push( elem );
826 return results;
827 }
828 }
829
830 // Speed-up: Sizzle("TAG")
831 } else if ( match[2] ) {
832 push.apply( results, context.getElementsByTagName( selector ) );
833 return results;
834
835 // Speed-up: Sizzle(".CLASS")
836 } else if ( (m = match[3]) && support.getElementsByClassName ) {
837 push.apply( results, context.getElementsByClassName( m ) );
838 return results;
839 }
840 }
841
842 // QSA path
843 if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
844 nid = old = expando;
845 newContext = context;
846 newSelector = nodeType !== 1 && selector;
847
848 // qSA works strangely on Element-rooted queries
849 // We can work around this by specifying an extra ID on the root
850 // and working up from there (Thanks to Andrew Dupont for the technique)
851 // IE 8 doesn't work on object elements
852 if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
853 groups = tokenize( selector );
854
855 if ( (old = context.getAttribute("id")) ) {
856 nid = old.replace( rescape, "\\$&" );
857 } else {
858 context.setAttribute( "id", nid );
859 }
860 nid = "[id='" + nid + "'] ";
861
862 i = groups.length;
863 while ( i-- ) {
864 groups[i] = nid + toSelector( groups[i] );
865 }
866 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
867 newSelector = groups.join(",");
868 }
869
870 if ( newSelector ) {
871 try {
872 push.apply( results,
873 newContext.querySelectorAll( newSelector )
874 );
875 return results;
876 } catch(qsaError) {
877 } finally {
878 if ( !old ) {
879 context.removeAttribute("id");
880 }
881 }
882 }
883 }
884 }
885
886 // All others
887 return select( selector.replace( rtrim, "$1" ), context, results, seed );
888 }
889
890 /**
891 * Create key-value caches of limited size
892 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
893 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
894 * deleting the oldest entry
895 */
896 function createCache() {
897 var keys = [];
898
899 function cache( key, value ) {
900 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
901 if ( keys.push( key + " " ) > Expr.cacheLength ) {
902 // Only keep the most recent entries
903 delete cache[ keys.shift() ];
904 }
905 return (cache[ key + " " ] = value);
906 }
907 return cache;
908 }
909
910 /**
911 * Mark a function for special use by Sizzle
912 * @param {Function} fn The function to mark
913 */
914 function markFunction( fn ) {
915 fn[ expando ] = true;
916 return fn;
917 }
918
919 /**
920 * Support testing using an element
921 * @param {Function} fn Passed the created div and expects a boolean result
922 */
923 function assert( fn ) {
924 var div = document.createElement("div");
925
926 try {
927 return !!fn( div );
928 } catch (e) {
929 return false;
930 } finally {
931 // Remove from its parent by default
932 if ( div.parentNode ) {
933 div.parentNode.removeChild( div );
934 }
935 // release memory in IE
936 div = null;
937 }
938 }
939
940 /**
941 * Adds the same handler for all of the specified attrs
942 * @param {String} attrs Pipe-separated list of attributes
943 * @param {Function} handler The method that will be applied
944 */
945 function addHandle( attrs, handler ) {
946 var arr = attrs.split("|"),
947 i = attrs.length;
948
949 while ( i-- ) {
950 Expr.attrHandle[ arr[i] ] = handler;
951 }
952 }
953
954 /**
955 * Checks document order of two siblings
956 * @param {Element} a
957 * @param {Element} b
958 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
959 */
960 function siblingCheck( a, b ) {
961 var cur = b && a,
962 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
963 ( ~b.sourceIndex || MAX_NEGATIVE ) -
964 ( ~a.sourceIndex || MAX_NEGATIVE );
965
966 // Use IE sourceIndex if available on both nodes
967 if ( diff ) {
968 return diff;
969 }
970
971 // Check if b follows a
972 if ( cur ) {
973 while ( (cur = cur.nextSibling) ) {
974 if ( cur === b ) {
975 return -1;
976 }
977 }
978 }
979
980 return a ? 1 : -1;
981 }
982
983 /**
984 * Returns a function to use in pseudos for input types
985 * @param {String} type
986 */
987 function createInputPseudo( type ) {
988 return function( elem ) {
989 var name = elem.nodeName.toLowerCase();
990 return name === "input" && elem.type === type;
991 };
992 }
993
994 /**
995 * Returns a function to use in pseudos for buttons
996 * @param {String} type
997 */
998 function createButtonPseudo( type ) {
999 return function( elem ) {
1000 var name = elem.nodeName.toLowerCase();
1001 return (name === "input" || name === "button") && elem.type === type;
1002 };
1003 }
1004
1005 /**
1006 * Returns a function to use in pseudos for positionals
1007 * @param {Function} fn
1008 */
1009 function createPositionalPseudo( fn ) {
1010 return markFunction(function( argument ) {
1011 argument = +argument;
1012 return markFunction(function( seed, matches ) {
1013 var j,
1014 matchIndexes = fn( [], seed.length, argument ),
1015 i = matchIndexes.length;
1016
1017 // Match elements found at the specified indexes
1018 while ( i-- ) {
1019 if ( seed[ (j = matchIndexes[i]) ] ) {
1020 seed[j] = !(matches[j] = seed[j]);
1021 }
1022 }
1023 });
1024 });
1025 }
1026
1027 /**
1028 * Checks a node for validity as a Sizzle context
1029 * @param {Element|Object=} context
1030 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1031 */
1032 function testContext( context ) {
1033 return context && typeof context.getElementsByTagName !== "undefined" && context;
1034 }
1035
1036 // Expose support vars for convenience
1037 support = Sizzle.support = {};
1038
1039 /**
1040 * Detects XML nodes
1041 * @param {Element|Object} elem An element or a document
1042 * @returns {Boolean} True iff elem is a non-HTML XML node
1043 */
1044 isXML = Sizzle.isXML = function( elem ) {
1045 // documentElement is verified for cases where it doesn't yet exist
1046 // (such as loading iframes in IE - #4833)
1047 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
1048 return documentElement ? documentElement.nodeName !== "HTML" : false;
1049 };
1050
1051 /**
1052 * Sets document-related variables once based on the current document
1053 * @param {Element|Object} [doc] An element or document object to use to set the document
1054 * @returns {Object} Returns the current document
1055 */
1056 setDocument = Sizzle.setDocument = function( node ) {
1057 var hasCompare, parent,
1058 doc = node ? node.ownerDocument || node : preferredDoc;
1059
1060 // If no document and documentElement is available, return
1061 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
1062 return document;
1063 }
1064
1065 // Set our document
1066 document = doc;
1067 docElem = doc.documentElement;
1068 parent = doc.defaultView;
1069
1070 // Support: IE>8
1071 // If iframe document is assigned to "document" variable and if iframe has been reloaded,
1072 // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
1073 // IE6-8 do not support the defaultView property so parent will be undefined
1074 if ( parent && parent !== parent.top ) {
1075 // IE11 does not have attachEvent, so all must suffer
1076 if ( parent.addEventListener ) {
1077 parent.addEventListener( "unload", unloadHandler, false );
1078 } else if ( parent.attachEvent ) {
1079 parent.attachEvent( "onunload", unloadHandler );
1080 }
1081 }
1082
1083 /* Support tests
1084 ---------------------------------------------------------------------- */
1085 documentIsHTML = !isXML( doc );
1086
1087 /* Attributes
1088 ---------------------------------------------------------------------- */
1089
1090 // Support: IE<8
1091 // Verify that getAttribute really returns attributes and not properties
1092 // (excepting IE8 booleans)
1093 support.attributes = assert(function( div ) {
1094 div.className = "i";
1095 return !div.getAttribute("className");
1096 });
1097
1098 /* getElement(s)By*
1099 ---------------------------------------------------------------------- */
1100
1101 // Check if getElementsByTagName("*") returns only elements
1102 support.getElementsByTagName = assert(function( div ) {
1103 div.appendChild( doc.createComment("") );
1104 return !div.getElementsByTagName("*").length;
1105 });
1106
1107 // Support: IE<9
1108 support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
1109
1110 // Support: IE<10
1111 // Check if getElementById returns elements by name
1112 // The broken getElementById methods don't pick up programatically-set names,
1113 // so use a roundabout getElementsByName test
1114 support.getById = assert(function( div ) {
1115 docElem.appendChild( div ).id = expando;
1116 return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
1117 });
1118
1119 // ID find and filter
1120 if ( support.getById ) {
1121 Expr.find["ID"] = function( id, context ) {
1122 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1123 var m = context.getElementById( id );
1124 // Check parentNode to catch when Blackberry 4.6 returns
1125 // nodes that are no longer in the document #6963
1126 return m && m.parentNode ? [ m ] : [];
1127 }
1128 };
1129 Expr.filter["ID"] = function( id ) {
1130 var attrId = id.replace( runescape, funescape );
1131 return function( elem ) {
1132 return elem.getAttribute("id") === attrId;
1133 };
1134 };
1135 } else {
1136 // Support: IE6/7
1137 // getElementById is not reliable as a find shortcut
1138 delete Expr.find["ID"];
1139
1140 Expr.filter["ID"] = function( id ) {
1141 var attrId = id.replace( runescape, funescape );
1142 return function( elem ) {
1143 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
1144 return node && node.value === attrId;
1145 };
1146 };
1147 }
1148
1149 // Tag
1150 Expr.find["TAG"] = support.getElementsByTagName ?
1151 function( tag, context ) {
1152 if ( typeof context.getElementsByTagName !== "undefined" ) {
1153 return context.getElementsByTagName( tag );
1154
1155 // DocumentFragment nodes don't have gEBTN
1156 } else if ( support.qsa ) {
1157 return context.querySelectorAll( tag );
1158 }
1159 } :
1160
1161 function( tag, context ) {
1162 var elem,
1163 tmp = [],
1164 i = 0,
1165 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1166 results = context.getElementsByTagName( tag );
1167
1168 // Filter out possible comments
1169 if ( tag === "*" ) {
1170 while ( (elem = results[i++]) ) {
1171 if ( elem.nodeType === 1 ) {
1172 tmp.push( elem );
1173 }
1174 }
1175
1176 return tmp;
1177 }
1178 return results;
1179 };
1180
1181 // Class
1182 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
1183 if ( documentIsHTML ) {
1184 return context.getElementsByClassName( className );
1185 }
1186 };
1187
1188 /* QSA/matchesSelector
1189 ---------------------------------------------------------------------- */
1190
1191 // QSA and matchesSelector support
1192
1193 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1194 rbuggyMatches = [];
1195
1196 // qSa(:focus) reports false when true (Chrome 21)
1197 // We allow this because of a bug in IE8/9 that throws an error
1198 // whenever `document.activeElement` is accessed on an iframe
1199 // So, we allow :focus to pass through QSA all the time to avoid the IE error
1200 // See http://bugs.jquery.com/ticket/13378
1201 rbuggyQSA = [];
1202
1203 if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
1204 // Build QSA regex
1205 // Regex strategy adopted from Diego Perini
1206 assert(function( div ) {
1207 // Select is set to empty string on purpose
1208 // This is to test IE's treatment of not explicitly
1209 // setting a boolean content attribute,
1210 // since its presence should be enough
1211 // http://bugs.jquery.com/ticket/12359
1212 docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
1213 "<select id='" + expando + "-\f]' msallowcapture=''>" +
1214 "<option selected=''></option></select>";
1215
1216 // Support: IE8, Opera 11-12.16
1217 // Nothing should be selected when empty strings follow ^= or $= or *=
1218 // The test attribute must be unknown in Opera but "safe" for WinRT
1219 // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1220 if ( div.querySelectorAll("[msallowcapture^='']").length ) {
1221 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1222 }
1223
1224 // Support: IE8
1225 // Boolean attributes and "value" are not treated correctly
1226 if ( !div.querySelectorAll("[selected]").length ) {
1227 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1228 }
1229
1230 // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
1231 if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1232 rbuggyQSA.push("~=");
1233 }
1234
1235 // Webkit/Opera - :checked should return selected option elements
1236 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1237 // IE8 throws error here and will not see later tests
1238 if ( !div.querySelectorAll(":checked").length ) {
1239 rbuggyQSA.push(":checked");
1240 }
1241
1242 // Support: Safari 8+, iOS 8+
1243 // https://bugs.webkit.org/show_bug.cgi?id=136851
1244 // In-page `selector#id sibing-combinator selector` fails
1245 if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
1246 rbuggyQSA.push(".#.+[+~]");
1247 }
1248 });
1249
1250 assert(function( div ) {
1251 // Support: Windows 8 Native Apps
1252 // The type and name attributes are restricted during .innerHTML assignment
1253 var input = doc.createElement("input");
1254 input.setAttribute( "type", "hidden" );
1255 div.appendChild( input ).setAttribute( "name", "D" );
1256
1257 // Support: IE8
1258 // Enforce case-sensitivity of name attribute
1259 if ( div.querySelectorAll("[name=d]").length ) {
1260 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1261 }
1262
1263 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1264 // IE8 throws error here and will not see later tests
1265 if ( !div.querySelectorAll(":enabled").length ) {
1266 rbuggyQSA.push( ":enabled", ":disabled" );
1267 }
1268
1269 // Opera 10-11 does not throw on post-comma invalid pseudos
1270 div.querySelectorAll("*,:x");
1271 rbuggyQSA.push(",.*:");
1272 });
1273 }
1274
1275 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
1276 docElem.webkitMatchesSelector ||
1277 docElem.mozMatchesSelector ||
1278 docElem.oMatchesSelector ||
1279 docElem.msMatchesSelector) )) ) {
1280
1281 assert(function( div ) {
1282 // Check to see if it's possible to do matchesSelector
1283 // on a disconnected node (IE 9)
1284 support.disconnectedMatch = matches.call( div, "div" );
1285
1286 // This should fail with an exception
1287 // Gecko does not error, returns false instead
1288 matches.call( div, "[s!='']:x" );
1289 rbuggyMatches.push( "!=", pseudos );
1290 });
1291 }
1292
1293 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
1294 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
1295
1296 /* Contains
1297 ---------------------------------------------------------------------- */
1298 hasCompare = rnative.test( docElem.compareDocumentPosition );
1299
1300 // Element contains another
1301 // Purposefully does not implement inclusive descendent
1302 // As in, an element does not contain itself
1303 contains = hasCompare || rnative.test( docElem.contains ) ?
1304 function( a, b ) {
1305 var adown = a.nodeType === 9 ? a.documentElement : a,
1306 bup = b && b.parentNode;
1307 return a === bup || !!( bup && bup.nodeType === 1 && (
1308 adown.contains ?
1309 adown.contains( bup ) :
1310 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1311 ));
1312 } :
1313 function( a, b ) {
1314 if ( b ) {
1315 while ( (b = b.parentNode) ) {
1316 if ( b === a ) {
1317 return true;
1318 }
1319 }
1320 }
1321 return false;
1322 };
1323
1324 /* Sorting
1325 ---------------------------------------------------------------------- */
1326
1327 // Document order sorting
1328 sortOrder = hasCompare ?
1329 function( a, b ) {
1330
1331 // Flag for duplicate removal
1332 if ( a === b ) {
1333 hasDuplicate = true;
1334 return 0;
1335 }
1336
1337 // Sort on method existence if only one input has compareDocumentPosition
1338 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1339 if ( compare ) {
1340 return compare;
1341 }
1342
1343 // Calculate position if both inputs belong to the same document
1344 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
1345 a.compareDocumentPosition( b ) :
1346
1347 // Otherwise we know they are disconnected
1348 1;
1349
1350 // Disconnected nodes
1351 if ( compare & 1 ||
1352 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
1353
1354 // Choose the first element that is related to our preferred document
1355 if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
1356 return -1;
1357 }
1358 if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
1359 return 1;
1360 }
1361
1362 // Maintain original order
1363 return sortInput ?
1364 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1365 0;
1366 }
1367
1368 return compare & 4 ? -1 : 1;
1369 } :
1370 function( a, b ) {
1371 // Exit early if the nodes are identical
1372 if ( a === b ) {
1373 hasDuplicate = true;
1374 return 0;
1375 }
1376
1377 var cur,
1378 i = 0,
1379 aup = a.parentNode,
1380 bup = b.parentNode,
1381 ap = [ a ],
1382 bp = [ b ];
1383
1384 // Parentless nodes are either documents or disconnected
1385 if ( !aup || !bup ) {
1386 return a === doc ? -1 :
1387 b === doc ? 1 :
1388 aup ? -1 :
1389 bup ? 1 :
1390 sortInput ?
1391 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1392 0;
1393
1394 // If the nodes are siblings, we can do a quick check
1395 } else if ( aup === bup ) {
1396 return siblingCheck( a, b );
1397 }
1398
1399 // Otherwise we need full lists of their ancestors for comparison
1400 cur = a;
1401 while ( (cur = cur.parentNode) ) {
1402 ap.unshift( cur );
1403 }
1404 cur = b;
1405 while ( (cur = cur.parentNode) ) {
1406 bp.unshift( cur );
1407 }
1408
1409 // Walk down the tree looking for a discrepancy
1410 while ( ap[i] === bp[i] ) {
1411 i++;
1412 }
1413
1414 return i ?
1415 // Do a sibling check if the nodes have a common ancestor
1416 siblingCheck( ap[i], bp[i] ) :
1417
1418 // Otherwise nodes in our document sort first
1419 ap[i] === preferredDoc ? -1 :
1420 bp[i] === preferredDoc ? 1 :
1421 0;
1422 };
1423
1424 return doc;
1425 };
1426
1427 Sizzle.matches = function( expr, elements ) {
1428 return Sizzle( expr, null, null, elements );
1429 };
1430
1431 Sizzle.matchesSelector = function( elem, expr ) {
1432 // Set document vars if needed
1433 if ( ( elem.ownerDocument || elem ) !== document ) {
1434 setDocument( elem );
1435 }
1436
1437 // Make sure that attribute selectors are quoted
1438 expr = expr.replace( rattributeQuotes, "='$1']" );
1439
1440 if ( support.matchesSelector && documentIsHTML &&
1441 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1442 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
1443
1444 try {
1445 var ret = matches.call( elem, expr );
1446
1447 // IE 9's matchesSelector returns false on disconnected nodes
1448 if ( ret || support.disconnectedMatch ||
1449 // As well, disconnected nodes are said to be in a document
1450 // fragment in IE 9
1451 elem.document && elem.document.nodeType !== 11 ) {
1452 return ret;
1453 }
1454 } catch (e) {}
1455 }
1456
1457 return Sizzle( expr, document, null, [ elem ] ).length > 0;
1458 };
1459
1460 Sizzle.contains = function( context, elem ) {
1461 // Set document vars if needed
1462 if ( ( context.ownerDocument || context ) !== document ) {
1463 setDocument( context );
1464 }
1465 return contains( context, elem );
1466 };
1467
1468 Sizzle.attr = function( elem, name ) {
1469 // Set document vars if needed
1470 if ( ( elem.ownerDocument || elem ) !== document ) {
1471 setDocument( elem );
1472 }
1473
1474 var fn = Expr.attrHandle[ name.toLowerCase() ],
1475 // Don't get fooled by Object.prototype properties (jQuery #13807)
1476 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1477 fn( elem, name, !documentIsHTML ) :
1478 undefined;
1479
1480 return val !== undefined ?
1481 val :
1482 support.attributes || !documentIsHTML ?
1483 elem.getAttribute( name ) :
1484 (val = elem.getAttributeNode(name)) && val.specified ?
1485 val.value :
1486 null;
1487 };
1488
1489 Sizzle.error = function( msg ) {
1490 throw new Error( "Syntax error, unrecognized expression: " + msg );
1491 };
1492
1493 /**
1494 * Document sorting and removing duplicates
1495 * @param {ArrayLike} results
1496 */
1497 Sizzle.uniqueSort = function( results ) {
1498 var elem,
1499 duplicates = [],
1500 j = 0,
1501 i = 0;
1502
1503 // Unless we *know* we can detect duplicates, assume their presence
1504 hasDuplicate = !support.detectDuplicates;
1505 sortInput = !support.sortStable && results.slice( 0 );
1506 results.sort( sortOrder );
1507
1508 if ( hasDuplicate ) {
1509 while ( (elem = results[i++]) ) {
1510 if ( elem === results[ i ] ) {
1511 j = duplicates.push( i );
1512 }
1513 }
1514 while ( j-- ) {
1515 results.splice( duplicates[ j ], 1 );
1516 }
1517 }
1518
1519 // Clear input after sorting to release objects
1520 // See https://github.com/jquery/sizzle/pull/225
1521 sortInput = null;
1522
1523 return results;
1524 };
1525
1526 /**
1527 * Utility function for retrieving the text value of an array of DOM nodes
1528 * @param {Array|Element} elem
1529 */
1530 getText = Sizzle.getText = function( elem ) {
1531 var node,
1532 ret = "",
1533 i = 0,
1534 nodeType = elem.nodeType;
1535
1536 if ( !nodeType ) {
1537 // If no nodeType, this is expected to be an array
1538 while ( (node = elem[i++]) ) {
1539 // Do not traverse comment nodes
1540 ret += getText( node );
1541 }
1542 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1543 // Use textContent for elements
1544 // innerText usage removed for consistency of new lines (jQuery #11153)
1545 if ( typeof elem.textContent === "string" ) {
1546 return elem.textContent;
1547 } else {
1548 // Traverse its children
1549 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1550 ret += getText( elem );
1551 }
1552 }
1553 } else if ( nodeType === 3 || nodeType === 4 ) {
1554 return elem.nodeValue;
1555 }
1556 // Do not include comment or processing instruction nodes
1557
1558 return ret;
1559 };
1560
1561 Expr = Sizzle.selectors = {
1562
1563 // Can be adjusted by the user
1564 cacheLength: 50,
1565
1566 createPseudo: markFunction,
1567
1568 match: matchExpr,
1569
1570 attrHandle: {},
1571
1572 find: {},
1573
1574 relative: {
1575 ">": { dir: "parentNode", first: true },
1576 " ": { dir: "parentNode" },
1577 "+": { dir: "previousSibling", first: true },
1578 "~": { dir: "previousSibling" }
1579 },
1580
1581 preFilter: {
1582 "ATTR": function( match ) {
1583 match[1] = match[1].replace( runescape, funescape );
1584
1585 // Move the given value to match[3] whether quoted or unquoted
1586 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
1587
1588 if ( match[2] === "~=" ) {
1589 match[3] = " " + match[3] + " ";
1590 }
1591
1592 return match.slice( 0, 4 );
1593 },
1594
1595 "CHILD": function( match ) {
1596 /* matches from matchExpr["CHILD"]
1597 1 type (only|nth|...)
1598 2 what (child|of-type)
1599 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1600 4 xn-component of xn+y argument ([+-]?\d*n|)
1601 5 sign of xn-component
1602 6 x of xn-component
1603 7 sign of y-component
1604 8 y of y-component
1605 */
1606 match[1] = match[1].toLowerCase();
1607
1608 if ( match[1].slice( 0, 3 ) === "nth" ) {
1609 // nth-* requires argument
1610 if ( !match[3] ) {
1611 Sizzle.error( match[0] );
1612 }
1613
1614 // numeric x and y parameters for Expr.filter.CHILD
1615 // remember that false/true cast respectively to 0/1
1616 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
1617 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
1618
1619 // other types prohibit arguments
1620 } else if ( match[3] ) {
1621 Sizzle.error( match[0] );
1622 }
1623
1624 return match;
1625 },
1626
1627 "PSEUDO": function( match ) {
1628 var excess,
1629 unquoted = !match[6] && match[2];
1630
1631 if ( matchExpr["CHILD"].test( match[0] ) ) {
1632 return null;
1633 }
1634
1635 // Accept quoted arguments as-is
1636 if ( match[3] ) {
1637 match[2] = match[4] || match[5] || "";
1638
1639 // Strip excess characters from unquoted arguments
1640 } else if ( unquoted && rpseudo.test( unquoted ) &&
1641 // Get excess from tokenize (recursively)
1642 (excess = tokenize( unquoted, true )) &&
1643 // advance to the next closing parenthesis
1644 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
1645
1646 // excess is a negative index
1647 match[0] = match[0].slice( 0, excess );
1648 match[2] = unquoted.slice( 0, excess );
1649 }
1650
1651 // Return only captures needed by the pseudo filter method (type and argument)
1652 return match.slice( 0, 3 );
1653 }
1654 },
1655
1656 filter: {
1657
1658 "TAG": function( nodeNameSelector ) {
1659 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1660 return nodeNameSelector === "*" ?
1661 function() { return true; } :
1662 function( elem ) {
1663 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1664 };
1665 },
1666
1667 "CLASS": function( className ) {
1668 var pattern = classCache[ className + " " ];
1669
1670 return pattern ||
1671 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
1672 classCache( className, function( elem ) {
1673 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
1674 });
1675 },
1676
1677 "ATTR": function( name, operator, check ) {
1678 return function( elem ) {
1679 var result = Sizzle.attr( elem, name );
1680
1681 if ( result == null ) {
1682 return operator === "!=";
1683 }
1684 if ( !operator ) {
1685 return true;
1686 }
1687
1688 result += "";
1689
1690 return operator === "=" ? result === check :
1691 operator === "!=" ? result !== check :
1692 operator === "^=" ? check && result.indexOf( check ) === 0 :
1693 operator === "*=" ? check && result.indexOf( check ) > -1 :
1694 operator === "$=" ? check && result.slice( -check.length ) === check :
1695 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1696 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1697 false;
1698 };
1699 },
1700
1701 "CHILD": function( type, what, argument, first, last ) {
1702 var simple = type.slice( 0, 3 ) !== "nth",
1703 forward = type.slice( -4 ) !== "last",
1704 ofType = what === "of-type";
1705
1706 return first === 1 && last === 0 ?
1707
1708 // Shortcut for :nth-*(n)
1709 function( elem ) {
1710 return !!elem.parentNode;
1711 } :
1712
1713 function( elem, context, xml ) {
1714 var cache, outerCache, node, diff, nodeIndex, start,
1715 dir = simple !== forward ? "nextSibling" : "previousSibling",
1716 parent = elem.parentNode,
1717 name = ofType && elem.nodeName.toLowerCase(),
1718 useCache = !xml && !ofType;
1719
1720 if ( parent ) {
1721
1722 // :(first|last|only)-(child|of-type)
1723 if ( simple ) {
1724 while ( dir ) {
1725 node = elem;
1726 while ( (node = node[ dir ]) ) {
1727 if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
1728 return false;
1729 }
1730 }
1731 // Reverse direction for :only-* (if we haven't yet done so)
1732 start = dir = type === "only" && !start && "nextSibling";
1733 }
1734 return true;
1735 }
1736
1737 start = [ forward ? parent.firstChild : parent.lastChild ];
1738
1739 // non-xml :nth-child(...) stores cache data on `parent`
1740 if ( forward && useCache ) {
1741 // Seek `elem` from a previously-cached index
1742 outerCache = parent[ expando ] || (parent[ expando ] = {});
1743 cache = outerCache[ type ] || [];
1744 nodeIndex = cache[0] === dirruns && cache[1];
1745 diff = cache[0] === dirruns && cache[2];
1746 node = nodeIndex && parent.childNodes[ nodeIndex ];
1747
1748 while ( (node = ++nodeIndex && node && node[ dir ] ||
1749
1750 // Fallback to seeking `elem` from the start
1751 (diff = nodeIndex = 0) || start.pop()) ) {
1752
1753 // When found, cache indexes on `parent` and break
1754 if ( node.nodeType === 1 && ++diff && node === elem ) {
1755 outerCache[ type ] = [ dirruns, nodeIndex, diff ];
1756 break;
1757 }
1758 }
1759
1760 // Use previously-cached element index if available
1761 } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
1762 diff = cache[1];
1763
1764 // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
1765 } else {
1766 // Use the same loop as above to seek `elem` from the start
1767 while ( (node = ++nodeIndex && node && node[ dir ] ||
1768 (diff = nodeIndex = 0) || start.pop()) ) {
1769
1770 if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
1771 // Cache the index of each encountered element
1772 if ( useCache ) {
1773 (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
1774 }
1775
1776 if ( node === elem ) {
1777 break;
1778 }
1779 }
1780 }
1781 }
1782
1783 // Incorporate the offset, then check against cycle size
1784 diff -= last;
1785 return diff === first || ( diff % first === 0 && diff / first >= 0 );
1786 }
1787 };
1788 },
1789
1790 "PSEUDO": function( pseudo, argument ) {
1791 // pseudo-class names are case-insensitive
1792 // http://www.w3.org/TR/selectors/#pseudo-classes
1793 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
1794 // Remember that setFilters inherits from pseudos
1795 var args,
1796 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
1797 Sizzle.error( "unsupported pseudo: " + pseudo );
1798
1799 // The user may use createPseudo to indicate that
1800 // arguments are needed to create the filter function
1801 // just as Sizzle does
1802 if ( fn[ expando ] ) {
1803 return fn( argument );
1804 }
1805
1806 // But maintain support for old signatures
1807 if ( fn.length > 1 ) {
1808 args = [ pseudo, pseudo, "", argument ];
1809 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
1810 markFunction(function( seed, matches ) {
1811 var idx,
1812 matched = fn( seed, argument ),
1813 i = matched.length;
1814 while ( i-- ) {
1815 idx = indexOf( seed, matched[i] );
1816 seed[ idx ] = !( matches[ idx ] = matched[i] );
1817 }
1818 }) :
1819 function( elem ) {
1820 return fn( elem, 0, args );
1821 };
1822 }
1823
1824 return fn;
1825 }
1826 },
1827
1828 pseudos: {
1829 // Potentially complex pseudos
1830 "not": markFunction(function( selector ) {
1831 // Trim the selector passed to compile
1832 // to avoid treating leading and trailing
1833 // spaces as combinators
1834 var input = [],
1835 results = [],
1836 matcher = compile( selector.replace( rtrim, "$1" ) );
1837
1838 return matcher[ expando ] ?
1839 markFunction(function( seed, matches, context, xml ) {
1840 var elem,
1841 unmatched = matcher( seed, null, xml, [] ),
1842 i = seed.length;
1843
1844 // Match elements unmatched by `matcher`
1845 while ( i-- ) {
1846 if ( (elem = unmatched[i]) ) {
1847 seed[i] = !(matches[i] = elem);
1848 }
1849 }
1850 }) :
1851 function( elem, context, xml ) {
1852 input[0] = elem;
1853 matcher( input, null, xml, results );
1854 // Don't keep the element (issue #299)
1855 input[0] = null;
1856 return !results.pop();
1857 };
1858 }),
1859
1860 "has": markFunction(function( selector ) {
1861 return function( elem ) {
1862 return Sizzle( selector, elem ).length > 0;
1863 };
1864 }),
1865
1866 "contains": markFunction(function( text ) {
1867 text = text.replace( runescape, funescape );
1868 return function( elem ) {
1869 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
1870 };
1871 }),
1872
1873 // "Whether an element is represented by a :lang() selector
1874 // is based solely on the element's language value
1875 // being equal to the identifier C,
1876 // or beginning with the identifier C immediately followed by "-".
1877 // The matching of C against the element's language value is performed case-insensitively.
1878 // The identifier C does not have to be a valid language name."
1879 // http://www.w3.org/TR/selectors/#lang-pseudo
1880 "lang": markFunction( function( lang ) {
1881 // lang value must be a valid identifier
1882 if ( !ridentifier.test(lang || "") ) {
1883 Sizzle.error( "unsupported lang: " + lang );
1884 }
1885 lang = lang.replace( runescape, funescape ).toLowerCase();
1886 return function( elem ) {
1887 var elemLang;
1888 do {
1889 if ( (elemLang = documentIsHTML ?
1890 elem.lang :
1891 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
1892
1893 elemLang = elemLang.toLowerCase();
1894 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
1895 }
1896 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
1897 return false;
1898 };
1899 }),
1900
1901 // Miscellaneous
1902 "target": function( elem ) {
1903 var hash = window.location && window.location.hash;
1904 return hash && hash.slice( 1 ) === elem.id;
1905 },
1906
1907 "root": function( elem ) {
1908 return elem === docElem;
1909 },
1910
1911 "focus": function( elem ) {
1912 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
1913 },
1914
1915 // Boolean properties
1916 "enabled": function( elem ) {
1917 return elem.disabled === false;
1918 },
1919
1920 "disabled": function( elem ) {
1921 return elem.disabled === true;
1922 },
1923
1924 "checked": function( elem ) {
1925 // In CSS3, :checked should return both checked and selected elements
1926 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1927 var nodeName = elem.nodeName.toLowerCase();
1928 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
1929 },
1930
1931 "selected": function( elem ) {
1932 // Accessing this property makes selected-by-default
1933 // options in Safari work properly
1934 if ( elem.parentNode ) {
1935 elem.parentNode.selectedIndex;
1936 }
1937
1938 return elem.selected === true;
1939 },
1940
1941 // Contents
1942 "empty": function( elem ) {
1943 // http://www.w3.org/TR/selectors/#empty-pseudo
1944 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
1945 // but not by others (comment: 8; processing instruction: 7; etc.)
1946 // nodeType < 6 works because attributes (2) do not appear as children
1947 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1948 if ( elem.nodeType < 6 ) {
1949 return false;
1950 }
1951 }
1952 return true;
1953 },
1954
1955 "parent": function( elem ) {
1956 return !Expr.pseudos["empty"]( elem );
1957 },
1958
1959 // Element/input types
1960 "header": function( elem ) {
1961 return rheader.test( elem.nodeName );
1962 },
1963
1964 "input": function( elem ) {
1965 return rinputs.test( elem.nodeName );
1966 },
1967
1968 "button": function( elem ) {
1969 var name = elem.nodeName.toLowerCase();
1970 return name === "input" && elem.type === "button" || name === "button";
1971 },
1972
1973 "text": function( elem ) {
1974 var attr;
1975 return elem.nodeName.toLowerCase() === "input" &&
1976 elem.type === "text" &&
1977
1978 // Support: IE<8
1979 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
1980 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
1981 },
1982
1983 // Position-in-collection
1984 "first": createPositionalPseudo(function() {
1985 return [ 0 ];
1986 }),
1987
1988 "last": createPositionalPseudo(function( matchIndexes, length ) {
1989 return [ length - 1 ];
1990 }),
1991
1992 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
1993 return [ argument < 0 ? argument + length : argument ];
1994 }),
1995
1996 "even": createPositionalPseudo(function( matchIndexes, length ) {
1997 var i = 0;
1998 for ( ; i < length; i += 2 ) {
1999 matchIndexes.push( i );
2000 }
2001 return matchIndexes;
2002 }),
2003
2004 "odd": createPositionalPseudo(function( matchIndexes, length ) {
2005 var i = 1;
2006 for ( ; i < length; i += 2 ) {
2007 matchIndexes.push( i );
2008 }
2009 return matchIndexes;
2010 }),
2011
2012 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2013 var i = argument < 0 ? argument + length : argument;
2014 for ( ; --i >= 0; ) {
2015 matchIndexes.push( i );
2016 }
2017 return matchIndexes;
2018 }),
2019
2020 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2021 var i = argument < 0 ? argument + length : argument;
2022 for ( ; ++i < length; ) {
2023 matchIndexes.push( i );
2024 }
2025 return matchIndexes;
2026 })
2027 }
2028 };
2029
2030 Expr.pseudos["nth"] = Expr.pseudos["eq"];
2031
2032 // Add button/input type pseudos
2033 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2034 Expr.pseudos[ i ] = createInputPseudo( i );
2035 }
2036 for ( i in { submit: true, reset: true } ) {
2037 Expr.pseudos[ i ] = createButtonPseudo( i );
2038 }
2039
2040 // Easy API for creating new setFilters
2041 function setFilters() {}
2042 setFilters.prototype = Expr.filters = Expr.pseudos;
2043 Expr.setFilters = new setFilters();
2044
2045 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2046 var matched, match, tokens, type,
2047 soFar, groups, preFilters,
2048 cached = tokenCache[ selector + " " ];
2049
2050 if ( cached ) {
2051 return parseOnly ? 0 : cached.slice( 0 );
2052 }
2053
2054 soFar = selector;
2055 groups = [];
2056 preFilters = Expr.preFilter;
2057
2058 while ( soFar ) {
2059
2060 // Comma and first run
2061 if ( !matched || (match = rcomma.exec( soFar )) ) {
2062 if ( match ) {
2063 // Don't consume trailing commas as valid
2064 soFar = soFar.slice( match[0].length ) || soFar;
2065 }
2066 groups.push( (tokens = []) );
2067 }
2068
2069 matched = false;
2070
2071 // Combinators
2072 if ( (match = rcombinators.exec( soFar )) ) {
2073 matched = match.shift();
2074 tokens.push({
2075 value: matched,
2076 // Cast descendant combinators to space
2077 type: match[0].replace( rtrim, " " )
2078 });
2079 soFar = soFar.slice( matched.length );
2080 }
2081
2082 // Filters
2083 for ( type in Expr.filter ) {
2084 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2085 (match = preFilters[ type ]( match ))) ) {
2086 matched = match.shift();
2087 tokens.push({
2088 value: matched,
2089 type: type,
2090 matches: match
2091 });
2092 soFar = soFar.slice( matched.length );
2093 }
2094 }
2095
2096 if ( !matched ) {
2097 break;
2098 }
2099 }
2100
2101 // Return the length of the invalid excess
2102 // if we're just parsing
2103 // Otherwise, throw an error or return tokens
2104 return parseOnly ?
2105 soFar.length :
2106 soFar ?
2107 Sizzle.error( selector ) :
2108 // Cache the tokens
2109 tokenCache( selector, groups ).slice( 0 );
2110 };
2111
2112 function toSelector( tokens ) {
2113 var i = 0,
2114 len = tokens.length,
2115 selector = "";
2116 for ( ; i < len; i++ ) {
2117 selector += tokens[i].value;
2118 }
2119 return selector;
2120 }
2121
2122 function addCombinator( matcher, combinator, base ) {
2123 var dir = combinator.dir,
2124 checkNonElements = base && dir === "parentNode",
2125 doneName = done++;
2126
2127 return combinator.first ?
2128 // Check against closest ancestor/preceding element
2129 function( elem, context, xml ) {
2130 while ( (elem = elem[ dir ]) ) {
2131 if ( elem.nodeType === 1 || checkNonElements ) {
2132 return matcher( elem, context, xml );
2133 }
2134 }
2135 } :
2136
2137 // Check against all ancestor/preceding elements
2138 function( elem, context, xml ) {
2139 var oldCache, outerCache,
2140 newCache = [ dirruns, doneName ];
2141
2142 // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
2143 if ( xml ) {
2144 while ( (elem = elem[ dir ]) ) {
2145 if ( elem.nodeType === 1 || checkNonElements ) {
2146 if ( matcher( elem, context, xml ) ) {
2147 return true;
2148 }
2149 }
2150 }
2151 } else {
2152 while ( (elem = elem[ dir ]) ) {
2153 if ( elem.nodeType === 1 || checkNonElements ) {
2154 outerCache = elem[ expando ] || (elem[ expando ] = {});
2155 if ( (oldCache = outerCache[ dir ]) &&
2156 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2157
2158 // Assign to newCache so results back-propagate to previous elements
2159 return (newCache[ 2 ] = oldCache[ 2 ]);
2160 } else {
2161 // Reuse newcache so results back-propagate to previous elements
2162 outerCache[ dir ] = newCache;
2163
2164 // A match means we're done; a fail means we have to keep checking
2165 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
2166 return true;
2167 }
2168 }
2169 }
2170 }
2171 }
2172 };
2173 }
2174
2175 function elementMatcher( matchers ) {
2176 return matchers.length > 1 ?
2177 function( elem, context, xml ) {
2178 var i = matchers.length;
2179 while ( i-- ) {
2180 if ( !matchers[i]( elem, context, xml ) ) {
2181 return false;
2182 }
2183 }
2184 return true;
2185 } :
2186 matchers[0];
2187 }
2188
2189 function multipleContexts( selector, contexts, results ) {
2190 var i = 0,
2191 len = contexts.length;
2192 for ( ; i < len; i++ ) {
2193 Sizzle( selector, contexts[i], results );
2194 }
2195 return results;
2196 }
2197
2198 function condense( unmatched, map, filter, context, xml ) {
2199 var elem,
2200 newUnmatched = [],
2201 i = 0,
2202 len = unmatched.length,
2203 mapped = map != null;
2204
2205 for ( ; i < len; i++ ) {
2206 if ( (elem = unmatched[i]) ) {
2207 if ( !filter || filter( elem, context, xml ) ) {
2208 newUnmatched.push( elem );
2209 if ( mapped ) {
2210 map.push( i );
2211 }
2212 }
2213 }
2214 }
2215
2216 return newUnmatched;
2217 }
2218
2219 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2220 if ( postFilter && !postFilter[ expando ] ) {
2221 postFilter = setMatcher( postFilter );
2222 }
2223 if ( postFinder && !postFinder[ expando ] ) {
2224 postFinder = setMatcher( postFinder, postSelector );
2225 }
2226 return markFunction(function( seed, results, context, xml ) {
2227 var temp, i, elem,
2228 preMap = [],
2229 postMap = [],
2230 preexisting = results.length,
2231
2232 // Get initial elements from seed or context
2233 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
2234
2235 // Prefilter to get matcher input, preserving a map for seed-results synchronization
2236 matcherIn = preFilter && ( seed || !selector ) ?
2237 condense( elems, preMap, preFilter, context, xml ) :
2238 elems,
2239
2240 matcherOut = matcher ?
2241 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2242 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2243
2244 // ...intermediate processing is necessary
2245 [] :
2246
2247 // ...otherwise use results directly
2248 results :
2249 matcherIn;
2250
2251 // Find primary matches
2252 if ( matcher ) {
2253 matcher( matcherIn, matcherOut, context, xml );
2254 }
2255
2256 // Apply postFilter
2257 if ( postFilter ) {
2258 temp = condense( matcherOut, postMap );
2259 postFilter( temp, [], context, xml );
2260
2261 // Un-match failing elements by moving them back to matcherIn
2262 i = temp.length;
2263 while ( i-- ) {
2264 if ( (elem = temp[i]) ) {
2265 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
2266 }
2267 }
2268 }
2269
2270 if ( seed ) {
2271 if ( postFinder || preFilter ) {
2272 if ( postFinder ) {
2273 // Get the final matcherOut by condensing this intermediate into postFinder contexts
2274 temp = [];
2275 i = matcherOut.length;
2276 while ( i-- ) {
2277 if ( (elem = matcherOut[i]) ) {
2278 // Restore matcherIn since elem is not yet a final match
2279 temp.push( (matcherIn[i] = elem) );
2280 }
2281 }
2282 postFinder( null, (matcherOut = []), temp, xml );
2283 }
2284
2285 // Move matched elements from seed to results to keep them synchronized
2286 i = matcherOut.length;
2287 while ( i-- ) {
2288 if ( (elem = matcherOut[i]) &&
2289 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
2290
2291 seed[temp] = !(results[temp] = elem);
2292 }
2293 }
2294 }
2295
2296 // Add elements to results, through postFinder if defined
2297 } else {
2298 matcherOut = condense(
2299 matcherOut === results ?
2300 matcherOut.splice( preexisting, matcherOut.length ) :
2301 matcherOut
2302 );
2303 if ( postFinder ) {
2304 postFinder( null, results, matcherOut, xml );
2305 } else {
2306 push.apply( results, matcherOut );
2307 }
2308 }
2309 });
2310 }
2311
2312 function matcherFromTokens( tokens ) {
2313 var checkContext, matcher, j,
2314 len = tokens.length,
2315 leadingRelative = Expr.relative[ tokens[0].type ],
2316 implicitRelative = leadingRelative || Expr.relative[" "],
2317 i = leadingRelative ? 1 : 0,
2318
2319 // The foundational matcher ensures that elements are reachable from top-level context(s)
2320 matchContext = addCombinator( function( elem ) {
2321 return elem === checkContext;
2322 }, implicitRelative, true ),
2323 matchAnyContext = addCombinator( function( elem ) {
2324 return indexOf( checkContext, elem ) > -1;
2325 }, implicitRelative, true ),
2326 matchers = [ function( elem, context, xml ) {
2327 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2328 (checkContext = context).nodeType ?
2329 matchContext( elem, context, xml ) :
2330 matchAnyContext( elem, context, xml ) );
2331 // Avoid hanging onto element (issue #299)
2332 checkContext = null;
2333 return ret;
2334 } ];
2335
2336 for ( ; i < len; i++ ) {
2337 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
2338 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
2339 } else {
2340 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
2341
2342 // Return special upon seeing a positional matcher
2343 if ( matcher[ expando ] ) {
2344 // Find the next relative operator (if any) for proper handling
2345 j = ++i;
2346 for ( ; j < len; j++ ) {
2347 if ( Expr.relative[ tokens[j].type ] ) {
2348 break;
2349 }
2350 }
2351 return setMatcher(
2352 i > 1 && elementMatcher( matchers ),
2353 i > 1 && toSelector(
2354 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
2355 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
2356 ).replace( rtrim, "$1" ),
2357 matcher,
2358 i < j && matcherFromTokens( tokens.slice( i, j ) ),
2359 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
2360 j < len && toSelector( tokens )
2361 );
2362 }
2363 matchers.push( matcher );
2364 }
2365 }
2366
2367 return elementMatcher( matchers );
2368 }
2369
2370 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2371 var bySet = setMatchers.length > 0,
2372 byElement = elementMatchers.length > 0,
2373 superMatcher = function( seed, context, xml, results, outermost ) {
2374 var elem, j, matcher,
2375 matchedCount = 0,
2376 i = "0",
2377 unmatched = seed && [],
2378 setMatched = [],
2379 contextBackup = outermostContext,
2380 // We must always have either seed elements or outermost context
2381 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
2382 // Use integer dirruns iff this is the outermost matcher
2383 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
2384 len = elems.length;
2385
2386 if ( outermost ) {
2387 outermostContext = context !== document && context;
2388 }
2389
2390 // Add elements passing elementMatchers directly to results
2391 // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
2392 // Support: IE<9, Safari
2393 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2394 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
2395 if ( byElement && elem ) {
2396 j = 0;
2397 while ( (matcher = elementMatchers[j++]) ) {
2398 if ( matcher( elem, context, xml ) ) {
2399 results.push( elem );
2400 break;
2401 }
2402 }
2403 if ( outermost ) {
2404 dirruns = dirrunsUnique;
2405 }
2406 }
2407
2408 // Track unmatched elements for set filters
2409 if ( bySet ) {
2410 // They will have gone through all possible matchers
2411 if ( (elem = !matcher && elem) ) {
2412 matchedCount--;
2413 }
2414
2415 // Lengthen the array for every element, matched or not
2416 if ( seed ) {
2417 unmatched.push( elem );
2418 }
2419 }
2420 }
2421
2422 // Apply set filters to unmatched elements
2423 matchedCount += i;
2424 if ( bySet && i !== matchedCount ) {
2425 j = 0;
2426 while ( (matcher = setMatchers[j++]) ) {
2427 matcher( unmatched, setMatched, context, xml );
2428 }
2429
2430 if ( seed ) {
2431 // Reintegrate element matches to eliminate the need for sorting
2432 if ( matchedCount > 0 ) {
2433 while ( i-- ) {
2434 if ( !(unmatched[i] || setMatched[i]) ) {
2435 setMatched[i] = pop.call( results );
2436 }
2437 }
2438 }
2439
2440 // Discard index placeholder values to get only actual matches
2441 setMatched = condense( setMatched );
2442 }
2443
2444 // Add matches to results
2445 push.apply( results, setMatched );
2446
2447 // Seedless set matches succeeding multiple successful matchers stipulate sorting
2448 if ( outermost && !seed && setMatched.length > 0 &&
2449 ( matchedCount + setMatchers.length ) > 1 ) {
2450
2451 Sizzle.uniqueSort( results );
2452 }
2453 }
2454
2455 // Override manipulation of globals by nested matchers
2456 if ( outermost ) {
2457 dirruns = dirrunsUnique;
2458 outermostContext = contextBackup;
2459 }
2460
2461 return unmatched;
2462 };
2463
2464 return bySet ?
2465 markFunction( superMatcher ) :
2466 superMatcher;
2467 }
2468
2469 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2470 var i,
2471 setMatchers = [],
2472 elementMatchers = [],
2473 cached = compilerCache[ selector + " " ];
2474
2475 if ( !cached ) {
2476 // Generate a function of recursive functions that can be used to check each element
2477 if ( !match ) {
2478 match = tokenize( selector );
2479 }
2480 i = match.length;
2481 while ( i-- ) {
2482 cached = matcherFromTokens( match[i] );
2483 if ( cached[ expando ] ) {
2484 setMatchers.push( cached );
2485 } else {
2486 elementMatchers.push( cached );
2487 }
2488 }
2489
2490 // Cache the compiled function
2491 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
2492
2493 // Save selector and tokenization
2494 cached.selector = selector;
2495 }
2496 return cached;
2497 };
2498
2499 /**
2500 * A low-level selection function that works with Sizzle's compiled
2501 * selector functions
2502 * @param {String|Function} selector A selector or a pre-compiled
2503 * selector function built with Sizzle.compile
2504 * @param {Element} context
2505 * @param {Array} [results]
2506 * @param {Array} [seed] A set of elements to match against
2507 */
2508 select = Sizzle.select = function( selector, context, results, seed ) {
2509 var i, tokens, token, type, find,
2510 compiled = typeof selector === "function" && selector,
2511 match = !seed && tokenize( (selector = compiled.selector || selector) );
2512
2513 results = results || [];
2514
2515 // Try to minimize operations if there is no seed and only one group
2516 if ( match.length === 1 ) {
2517
2518 // Take a shortcut and set the context if the root selector is an ID
2519 tokens = match[0] = match[0].slice( 0 );
2520 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
2521 support.getById && context.nodeType === 9 && documentIsHTML &&
2522 Expr.relative[ tokens[1].type ] ) {
2523
2524 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
2525 if ( !context ) {
2526 return results;
2527
2528 // Precompiled matchers will still verify ancestry, so step up a level
2529 } else if ( compiled ) {
2530 context = context.parentNode;
2531 }
2532
2533 selector = selector.slice( tokens.shift().value.length );
2534 }
2535
2536 // Fetch a seed set for right-to-left matching
2537 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
2538 while ( i-- ) {
2539 token = tokens[i];
2540
2541 // Abort if we hit a combinator
2542 if ( Expr.relative[ (type = token.type) ] ) {
2543 break;
2544 }
2545 if ( (find = Expr.find[ type ]) ) {
2546 // Search, expanding context for leading sibling combinators
2547 if ( (seed = find(
2548 token.matches[0].replace( runescape, funescape ),
2549 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
2550 )) ) {
2551
2552 // If seed is empty or no tokens remain, we can return early
2553 tokens.splice( i, 1 );
2554 selector = seed.length && toSelector( tokens );
2555 if ( !selector ) {
2556 push.apply( results, seed );
2557 return results;
2558 }
2559
2560 break;
2561 }
2562 }
2563 }
2564 }
2565
2566 // Compile and execute a filtering function if one is not provided
2567 // Provide `match` to avoid retokenization if we modified the selector above
2568 ( compiled || compile( selector, match ) )(
2569 seed,
2570 context,
2571 !documentIsHTML,
2572 results,
2573 rsibling.test( selector ) && testContext( context.parentNode ) || context
2574 );
2575 return results;
2576 };
2577
2578 // One-time assignments
2579
2580 // Sort stability
2581 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
2582
2583 // Support: Chrome 14-35+
2584 // Always assume duplicates if they aren't passed to the comparison function
2585 support.detectDuplicates = !!hasDuplicate;
2586
2587 // Initialize against the default document
2588 setDocument();
2589
2590 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2591 // Detached nodes confoundingly follow *each other*
2592 support.sortDetached = assert(function( div1 ) {
2593 // Should return 1, but returns 4 (following)
2594 return div1.compareDocumentPosition( document.createElement("div") ) & 1;
2595 });
2596
2597 // Support: IE<8
2598 // Prevent attribute/property "interpolation"
2599 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2600 if ( !assert(function( div ) {
2601 div.innerHTML = "<a href='#'></a>";
2602 return div.firstChild.getAttribute("href") === "#" ;
2603 }) ) {
2604 addHandle( "type|href|height|width", function( elem, name, isXML ) {
2605 if ( !isXML ) {
2606 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2607 }
2608 });
2609 }
2610
2611 // Support: IE<9
2612 // Use defaultValue in place of getAttribute("value")
2613 if ( !support.attributes || !assert(function( div ) {
2614 div.innerHTML = "<input/>";
2615 div.firstChild.setAttribute( "value", "" );
2616 return div.firstChild.getAttribute( "value" ) === "";
2617 }) ) {
2618 addHandle( "value", function( elem, name, isXML ) {
2619 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2620 return elem.defaultValue;
2621 }
2622 });
2623 }
2624
2625 // Support: IE<9
2626 // Use getAttributeNode to fetch booleans when getAttribute lies
2627 if ( !assert(function( div ) {
2628 return div.getAttribute("disabled") == null;
2629 }) ) {
2630 addHandle( booleans, function( elem, name, isXML ) {
2631 var val;
2632 if ( !isXML ) {
2633 return elem[ name ] === true ? name.toLowerCase() :
2634 (val = elem.getAttributeNode( name )) && val.specified ?
2635 val.value :
2636 null;
2637 }
2638 });
2639 }
2640
2641 return Sizzle;
2642
2643 })( window );
2644
2645
2646
2647 jQuery.find = Sizzle;
2648 jQuery.expr = Sizzle.selectors;
2649 jQuery.expr[":"] = jQuery.expr.pseudos;
2650 jQuery.unique = Sizzle.uniqueSort;
2651 jQuery.text = Sizzle.getText;
2652 jQuery.isXMLDoc = Sizzle.isXML;
2653 jQuery.contains = Sizzle.contains;
2654
2655
2656
2657 var rneedsContext = jQuery.expr.match.needsContext;
2658
2659 var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
2660
2661
2662
2663 var risSimple = /^.[^:#\[\.,]*$/;
2664
2665 // Implement the identical functionality for filter and not
2666 function winnow( elements, qualifier, not ) {
2667 if ( jQuery.isFunction( qualifier ) ) {
2668 return jQuery.grep( elements, function( elem, i ) {
2669 /* jshint -W018 */
2670 return !!qualifier.call( elem, i, elem ) !== not;
2671 });
2672
2673 }
2674
2675 if ( qualifier.nodeType ) {
2676 return jQuery.grep( elements, function( elem ) {
2677 return ( elem === qualifier ) !== not;
2678 });
2679
2680 }
2681
2682 if ( typeof qualifier === "string" ) {
2683 if ( risSimple.test( qualifier ) ) {
2684 return jQuery.filter( qualifier, elements, not );
2685 }
2686
2687 qualifier = jQuery.filter( qualifier, elements );
2688 }
2689
2690 return jQuery.grep( elements, function( elem ) {
2691 return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
2692 });
2693 }
2694
2695 jQuery.filter = function( expr, elems, not ) {
2696 var elem = elems[ 0 ];
2697
2698 if ( not ) {
2699 expr = ":not(" + expr + ")";
2700 }
2701
2702 return elems.length === 1 && elem.nodeType === 1 ?
2703 jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
2704 jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2705 return elem.nodeType === 1;
2706 }));
2707 };
2708
2709 jQuery.fn.extend({
2710 find: function( selector ) {
2711 var i,
2712 ret = [],
2713 self = this,
2714 len = self.length;
2715
2716 if ( typeof selector !== "string" ) {
2717 return this.pushStack( jQuery( selector ).filter(function() {
2718 for ( i = 0; i < len; i++ ) {
2719 if ( jQuery.contains( self[ i ], this ) ) {
2720 return true;
2721 }
2722 }
2723 }) );
2724 }
2725
2726 for ( i = 0; i < len; i++ ) {
2727 jQuery.find( selector, self[ i ], ret );
2728 }
2729
2730 // Needed because $( selector, context ) becomes $( context ).find( selector )
2731 ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
2732 ret.selector = this.selector ? this.selector + " " + selector : selector;
2733 return ret;
2734 },
2735 filter: function( selector ) {
2736 return this.pushStack( winnow(this, selector || [], false) );
2737 },
2738 not: function( selector ) {
2739 return this.pushStack( winnow(this, selector || [], true) );
2740 },
2741 is: function( selector ) {
2742 return !!winnow(
2743 this,
2744
2745 // If this is a positional/relative selector, check membership in the returned set
2746 // so $("p:first").is("p:last") won't return true for a doc with two "p".
2747 typeof selector === "string" && rneedsContext.test( selector ) ?
2748 jQuery( selector ) :
2749 selector || [],
2750 false
2751 ).length;
2752 }
2753 });
2754
2755
2756 // Initialize a jQuery object
2757
2758
2759 // A central reference to the root jQuery(document)
2760 var rootjQuery,
2761
2762 // Use the correct document accordingly with window argument (sandbox)
2763 document = window.document,
2764
2765 // A simple way to check for HTML strings
2766 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
2767 // Strict HTML recognition (#11290: must start with <)
2768 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
2769
2770 init = jQuery.fn.init = function( selector, context ) {
2771 var match, elem;
2772
2773 // HANDLE: $(""), $(null), $(undefined), $(false)
2774 if ( !selector ) {
2775 return this;
2776 }
2777
2778 // Handle HTML strings
2779 if ( typeof selector === "string" ) {
2780 if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
2781 // Assume that strings that start and end with <> are HTML and skip the regex check
2782 match = [ null, selector, null ];
2783
2784 } else {
2785 match = rquickExpr.exec( selector );
2786 }
2787
2788 // Match html or make sure no context is specified for #id
2789 if ( match && (match[1] || !context) ) {
2790
2791 // HANDLE: $(html) -> $(array)
2792 if ( match[1] ) {
2793 context = context instanceof jQuery ? context[0] : context;
2794
2795 // scripts is true for back-compat
2796 // Intentionally let the error be thrown if parseHTML is not present
2797 jQuery.merge( this, jQuery.parseHTML(
2798 match[1],
2799 context && context.nodeType ? context.ownerDocument || context : document,
2800 true
2801 ) );
2802
2803 // HANDLE: $(html, props)
2804 if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
2805 for ( match in context ) {
2806 // Properties of context are called as methods if possible
2807 if ( jQuery.isFunction( this[ match ] ) ) {
2808 this[ match ]( context[ match ] );
2809
2810 // ...and otherwise set as attributes
2811 } else {
2812 this.attr( match, context[ match ] );
2813 }
2814 }
2815 }
2816
2817 return this;
2818
2819 // HANDLE: $(#id)
2820 } else {
2821 elem = document.getElementById( match[2] );
2822
2823 // Check parentNode to catch when Blackberry 4.6 returns
2824 // nodes that are no longer in the document #6963
2825 if ( elem && elem.parentNode ) {
2826 // Handle the case where IE and Opera return items
2827 // by name instead of ID
2828 if ( elem.id !== match[2] ) {
2829 return rootjQuery.find( selector );
2830 }
2831
2832 // Otherwise, we inject the element directly into the jQuery object
2833 this.length = 1;
2834 this[0] = elem;
2835 }
2836
2837 this.context = document;
2838 this.selector = selector;
2839 return this;
2840 }
2841
2842 // HANDLE: $(expr, $(...))
2843 } else if ( !context || context.jquery ) {
2844 return ( context || rootjQuery ).find( selector );
2845
2846 // HANDLE: $(expr, context)
2847 // (which is just equivalent to: $(context).find(expr)
2848 } else {
2849 return this.constructor( context ).find( selector );
2850 }
2851
2852 // HANDLE: $(DOMElement)
2853 } else if ( selector.nodeType ) {
2854 this.context = this[0] = selector;
2855 this.length = 1;
2856 return this;
2857
2858 // HANDLE: $(function)
2859 // Shortcut for document ready
2860 } else if ( jQuery.isFunction( selector ) ) {
2861 return typeof rootjQuery.ready !== "undefined" ?
2862 rootjQuery.ready( selector ) :
2863 // Execute immediately if ready is not present
2864 selector( jQuery );
2865 }
2866
2867 if ( selector.selector !== undefined ) {
2868 this.selector = selector.selector;
2869 this.context = selector.context;
2870 }
2871
2872 return jQuery.makeArray( selector, this );
2873 };
2874
2875 // Give the init function the jQuery prototype for later instantiation
2876 init.prototype = jQuery.fn;
2877
2878 // Initialize central reference
2879 rootjQuery = jQuery( document );
2880
2881
2882 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
2883 // methods guaranteed to produce a unique set when starting from a unique set
2884 guaranteedUnique = {
2885 children: true,
2886 contents: true,
2887 next: true,
2888 prev: true
2889 };
2890
2891 jQuery.extend({
2892 dir: function( elem, dir, until ) {
2893 var matched = [],
2894 cur = elem[ dir ];
2895
2896 while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
2897 if ( cur.nodeType === 1 ) {
2898 matched.push( cur );
2899 }
2900 cur = cur[dir];
2901 }
2902 return matched;
2903 },
2904
2905 sibling: function( n, elem ) {
2906 var r = [];
2907
2908 for ( ; n; n = n.nextSibling ) {
2909 if ( n.nodeType === 1 && n !== elem ) {
2910 r.push( n );
2911 }
2912 }
2913
2914 return r;
2915 }
2916 });
2917
2918 jQuery.fn.extend({
2919 has: function( target ) {
2920 var i,
2921 targets = jQuery( target, this ),
2922 len = targets.length;
2923
2924 return this.filter(function() {
2925 for ( i = 0; i < len; i++ ) {
2926 if ( jQuery.contains( this, targets[i] ) ) {
2927 return true;
2928 }
2929 }
2930 });
2931 },
2932
2933 closest: function( selectors, context ) {
2934 var cur,
2935 i = 0,
2936 l = this.length,
2937 matched = [],
2938 pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
2939 jQuery( selectors, context || this.context ) :
2940 0;
2941
2942 for ( ; i < l; i++ ) {
2943 for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
2944 // Always skip document fragments
2945 if ( cur.nodeType < 11 && (pos ?
2946 pos.index(cur) > -1 :
2947
2948 // Don't pass non-elements to Sizzle
2949 cur.nodeType === 1 &&
2950 jQuery.find.matchesSelector(cur, selectors)) ) {
2951
2952 matched.push( cur );
2953 break;
2954 }
2955 }
2956 }
2957
2958 return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
2959 },
2960
2961 // Determine the position of an element within
2962 // the matched set of elements
2963 index: function( elem ) {
2964
2965 // No argument, return index in parent
2966 if ( !elem ) {
2967 return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
2968 }
2969
2970 // index in selector
2971 if ( typeof elem === "string" ) {
2972 return jQuery.inArray( this[0], jQuery( elem ) );
2973 }
2974
2975 // Locate the position of the desired element
2976 return jQuery.inArray(
2977 // If it receives a jQuery object, the first element is used
2978 elem.jquery ? elem[0] : elem, this );
2979 },
2980
2981 add: function( selector, context ) {
2982 return this.pushStack(
2983 jQuery.unique(
2984 jQuery.merge( this.get(), jQuery( selector, context ) )
2985 )
2986 );
2987 },
2988
2989 addBack: function( selector ) {
2990 return this.add( selector == null ?
2991 this.prevObject : this.prevObject.filter(selector)
2992 );
2993 }
2994 });
2995
2996 function sibling( cur, dir ) {
2997 do {
2998 cur = cur[ dir ];
2999 } while ( cur && cur.nodeType !== 1 );
3000
3001 return cur;
3002 }
3003
3004 jQuery.each({
3005 parent: function( elem ) {
3006 var parent = elem.parentNode;
3007 return parent && parent.nodeType !== 11 ? parent : null;
3008 },
3009 parents: function( elem ) {
3010 return jQuery.dir( elem, "parentNode" );
3011 },
3012 parentsUntil: function( elem, i, until ) {
3013 return jQuery.dir( elem, "parentNode", until );
3014 },
3015 next: function( elem ) {
3016 return sibling( elem, "nextSibling" );
3017 },
3018 prev: function( elem ) {
3019 return sibling( elem, "previousSibling" );
3020 },
3021 nextAll: function( elem ) {
3022 return jQuery.dir( elem, "nextSibling" );
3023 },
3024 prevAll: function( elem ) {
3025 return jQuery.dir( elem, "previousSibling" );
3026 },
3027 nextUntil: function( elem, i, until ) {
3028 return jQuery.dir( elem, "nextSibling", until );
3029 },
3030 prevUntil: function( elem, i, until ) {
3031 return jQuery.dir( elem, "previousSibling", until );
3032 },
3033 siblings: function( elem ) {
3034 return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
3035 },
3036 children: function( elem ) {
3037 return jQuery.sibling( elem.firstChild );
3038 },
3039 contents: function( elem ) {
3040 return jQuery.nodeName( elem, "iframe" ) ?
3041 elem.contentDocument || elem.contentWindow.document :
3042 jQuery.merge( [], elem.childNodes );
3043 }
3044 }, function( name, fn ) {
3045 jQuery.fn[ name ] = function( until, selector ) {
3046 var ret = jQuery.map( this, fn, until );
3047
3048 if ( name.slice( -5 ) !== "Until" ) {
3049 selector = until;
3050 }
3051
3052 if ( selector && typeof selector === "string" ) {
3053 ret = jQuery.filter( selector, ret );
3054 }
3055
3056 if ( this.length > 1 ) {
3057 // Remove duplicates
3058 if ( !guaranteedUnique[ name ] ) {
3059 ret = jQuery.unique( ret );
3060 }
3061
3062 // Reverse order for parents* and prev-derivatives
3063 if ( rparentsprev.test( name ) ) {
3064 ret = ret.reverse();
3065 }
3066 }
3067
3068 return this.pushStack( ret );
3069 };
3070 });
3071 var rnotwhite = (/\S+/g);
3072
3073
3074
3075 // String to Object options format cache
3076 var optionsCache = {};
3077
3078 // Convert String-formatted options into Object-formatted ones and store in cache
3079 function createOptions( options ) {
3080 var object = optionsCache[ options ] = {};
3081 jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
3082 object[ flag ] = true;
3083 });
3084 return object;
3085 }
3086
3087 /*
3088 * Create a callback list using the following parameters:
3089 *
3090 * options: an optional list of space-separated options that will change how
3091 * the callback list behaves or a more traditional option object
3092 *
3093 * By default a callback list will act like an event callback list and can be
3094 * "fired" multiple times.
3095 *
3096 * Possible options:
3097 *
3098 * once: will ensure the callback list can only be fired once (like a Deferred)
3099 *
3100 * memory: will keep track of previous values and will call any callback added
3101 * after the list has been fired right away with the latest "memorized"
3102 * values (like a Deferred)
3103 *
3104 * unique: will ensure a callback can only be added once (no duplicate in the list)
3105 *
3106 * stopOnFalse: interrupt callings when a callback returns false
3107 *
3108 */
3109 jQuery.Callbacks = function( options ) {
3110
3111 // Convert options from String-formatted to Object-formatted if needed
3112 // (we check in cache first)
3113 options = typeof options === "string" ?
3114 ( optionsCache[ options ] || createOptions( options ) ) :
3115 jQuery.extend( {}, options );
3116
3117 var // Flag to know if list is currently firing
3118 firing,
3119 // Last fire value (for non-forgettable lists)
3120 memory,
3121 // Flag to know if list was already fired
3122 fired,
3123 // End of the loop when firing
3124 firingLength,
3125 // Index of currently firing callback (modified by remove if needed)
3126 firingIndex,
3127 // First callback to fire (used internally by add and fireWith)
3128 firingStart,
3129 // Actual callback list
3130 list = [],
3131 // Stack of fire calls for repeatable lists
3132 stack = !options.once && [],
3133 // Fire callbacks
3134 fire = function( data ) {
3135 memory = options.memory && data;
3136 fired = true;
3137 firingIndex = firingStart || 0;
3138 firingStart = 0;
3139 firingLength = list.length;
3140 firing = true;
3141 for ( ; list && firingIndex < firingLength; firingIndex++ ) {
3142 if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
3143 memory = false; // To prevent further calls using add
3144 break;
3145 }
3146 }
3147 firing = false;
3148 if ( list ) {
3149 if ( stack ) {
3150 if ( stack.length ) {
3151 fire( stack.shift() );
3152 }
3153 } else if ( memory ) {
3154 list = [];
3155 } else {
3156 self.disable();
3157 }
3158 }
3159 },
3160 // Actual Callbacks object
3161 self = {
3162 // Add a callback or a collection of callbacks to the list
3163 add: function() {
3164 if ( list ) {
3165 // First, we save the current length
3166 var start = list.length;
3167 (function add( args ) {
3168 jQuery.each( args, function( _, arg ) {
3169 var type = jQuery.type( arg );
3170 if ( type === "function" ) {
3171 if ( !options.unique || !self.has( arg ) ) {
3172 list.push( arg );
3173 }
3174 } else if ( arg && arg.length && type !== "string" ) {
3175 // Inspect recursively
3176 add( arg );
3177 }
3178 });
3179 })( arguments );
3180 // Do we need to add the callbacks to the
3181 // current firing batch?
3182 if ( firing ) {
3183 firingLength = list.length;
3184 // With memory, if we're not firing then
3185 // we should call right away
3186 } else if ( memory ) {
3187 firingStart = start;
3188 fire( memory );
3189 }
3190 }
3191 return this;
3192 },
3193 // Remove a callback from the list
3194 remove: function() {
3195 if ( list ) {
3196 jQuery.each( arguments, function( _, arg ) {
3197 var index;
3198 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3199 list.splice( index, 1 );
3200 // Handle firing indexes
3201 if ( firing ) {
3202 if ( index <= firingLength ) {
3203 firingLength--;
3204 }
3205 if ( index <= firingIndex ) {
3206 firingIndex--;
3207 }
3208 }
3209 }
3210 });
3211 }
3212 return this;
3213 },
3214 // Check if a given callback is in the list.
3215 // If no argument is given, return whether or not list has callbacks attached.
3216 has: function( fn ) {
3217 return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
3218 },
3219 // Remove all callbacks from the list
3220 empty: function() {
3221 list = [];
3222 firingLength = 0;
3223 return this;
3224 },
3225 // Have the list do nothing anymore
3226 disable: function() {
3227 list = stack = memory = undefined;
3228 return this;
3229 },
3230 // Is it disabled?
3231 disabled: function() {
3232 return !list;
3233 },
3234 // Lock the list in its current state
3235 lock: function() {
3236 stack = undefined;
3237 if ( !memory ) {
3238 self.disable();
3239 }
3240 return this;
3241 },
3242 // Is it locked?
3243 locked: function() {
3244 return !stack;
3245 },
3246 // Call all callbacks with the given context and arguments
3247 fireWith: function( context, args ) {
3248 if ( list && ( !fired || stack ) ) {
3249 args = args || [];
3250 args = [ context, args.slice ? args.slice() : args ];
3251 if ( firing ) {
3252 stack.push( args );
3253 } else {
3254 fire( args );
3255 }
3256 }
3257 return this;
3258 },
3259 // Call all the callbacks with the given arguments
3260 fire: function() {
3261 self.fireWith( this, arguments );
3262 return this;
3263 },
3264 // To know if the callbacks have already been called at least once
3265 fired: function() {
3266 return !!fired;
3267 }
3268 };
3269
3270 return self;
3271 };
3272
3273
3274 jQuery.extend({
3275
3276 Deferred: function( func ) {
3277 var tuples = [
3278 // action, add listener, listener list, final state
3279 [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
3280 [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
3281 [ "notify", "progress", jQuery.Callbacks("memory") ]
3282 ],
3283 state = "pending",
3284 promise = {
3285 state: function() {
3286 return state;
3287 },
3288 always: function() {
3289 deferred.done( arguments ).fail( arguments );
3290 return this;
3291 },
3292 then: function( /* fnDone, fnFail, fnProgress */ ) {
3293 var fns = arguments;
3294 return jQuery.Deferred(function( newDefer ) {
3295 jQuery.each( tuples, function( i, tuple ) {
3296 var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
3297 // deferred[ done | fail | progress ] for forwarding actions to newDefer
3298 deferred[ tuple[1] ](function() {
3299 var returned = fn && fn.apply( this, arguments );
3300 if ( returned && jQuery.isFunction( returned.promise ) ) {
3301 returned.promise()
3302 .done( newDefer.resolve )
3303 .fail( newDefer.reject )
3304 .progress( newDefer.notify );
3305 } else {
3306 newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
3307 }
3308 });
3309 });
3310 fns = null;
3311 }).promise();
3312 },
3313 // Get a promise for this deferred
3314 // If obj is provided, the promise aspect is added to the object
3315 promise: function( obj ) {
3316 return obj != null ? jQuery.extend( obj, promise ) : promise;
3317 }
3318 },
3319 deferred = {};
3320
3321 // Keep pipe for back-compat
3322 promise.pipe = promise.then;
3323
3324 // Add list-specific methods
3325 jQuery.each( tuples, function( i, tuple ) {
3326 var list = tuple[ 2 ],
3327 stateString = tuple[ 3 ];
3328
3329 // promise[ done | fail | progress ] = list.add
3330 promise[ tuple[1] ] = list.add;
3331
3332 // Handle state
3333 if ( stateString ) {
3334 list.add(function() {
3335 // state = [ resolved | rejected ]
3336 state = stateString;
3337
3338 // [ reject_list | resolve_list ].disable; progress_list.lock
3339 }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
3340 }
3341
3342 // deferred[ resolve | reject | notify ]
3343 deferred[ tuple[0] ] = function() {
3344 deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
3345 return this;
3346 };
3347 deferred[ tuple[0] + "With" ] = list.fireWith;
3348 });
3349
3350 // Make the deferred a promise
3351 promise.promise( deferred );
3352
3353 // Call given func if any
3354 if ( func ) {
3355 func.call( deferred, deferred );
3356 }
3357
3358 // All done!
3359 return deferred;
3360 },
3361
3362 // Deferred helper
3363 when: function( subordinate /* , ..., subordinateN */ ) {
3364 var i = 0,
3365 resolveValues = slice.call( arguments ),
3366 length = resolveValues.length,
3367
3368 // the count of uncompleted subordinates
3369 remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
3370
3371 // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
3372 deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
3373
3374 // Update function for both resolve and progress values
3375 updateFunc = function( i, contexts, values ) {
3376 return function( value ) {
3377 contexts[ i ] = this;
3378 values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
3379 if ( values === progressValues ) {
3380 deferred.notifyWith( contexts, values );
3381
3382 } else if ( !(--remaining) ) {
3383 deferred.resolveWith( contexts, values );
3384 }
3385 };
3386 },
3387
3388 progressValues, progressContexts, resolveContexts;
3389
3390 // add listeners to Deferred subordinates; treat others as resolved
3391 if ( length > 1 ) {
3392 progressValues = new Array( length );
3393 progressContexts = new Array( length );
3394 resolveContexts = new Array( length );
3395 for ( ; i < length; i++ ) {
3396 if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
3397 resolveValues[ i ].promise()
3398 .done( updateFunc( i, resolveContexts, resolveValues ) )
3399 .fail( deferred.reject )
3400 .progress( updateFunc( i, progressContexts, progressValues ) );
3401 } else {
3402 --remaining;
3403 }
3404 }
3405 }
3406
3407 // if we're not waiting on anything, resolve the master
3408 if ( !remaining ) {
3409 deferred.resolveWith( resolveContexts, resolveValues );
3410 }
3411
3412 return deferred.promise();
3413 }
3414 });
3415
3416
3417 // The deferred used on DOM ready
3418 var readyList;
3419
3420 jQuery.fn.ready = function( fn ) {
3421 // Add the callback
3422 jQuery.ready.promise().done( fn );
3423
3424 return this;
3425 };
3426
3427 jQuery.extend({
3428 // Is the DOM ready to be used? Set to true once it occurs.
3429 isReady: false,
3430
3431 // A counter to track how many items to wait for before
3432 // the ready event fires. See #6781
3433 readyWait: 1,
3434
3435 // Hold (or release) the ready event
3436 holdReady: function( hold ) {
3437 if ( hold ) {
3438 jQuery.readyWait++;
3439 } else {
3440 jQuery.ready( true );
3441 }
3442 },
3443
3444 // Handle when the DOM is ready
3445 ready: function( wait ) {
3446
3447 // Abort if there are pending holds or we're already ready
3448 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
3449 return;
3450 }
3451
3452 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
3453 if ( !document.body ) {
3454 return setTimeout( jQuery.ready );
3455 }
3456
3457 // Remember that the DOM is ready
3458 jQuery.isReady = true;
3459
3460 // If a normal DOM Ready event fired, decrement, and wait if need be
3461 if ( wait !== true && --jQuery.readyWait > 0 ) {
3462 return;
3463 }
3464
3465 // If there are functions bound, to execute
3466 readyList.resolveWith( document, [ jQuery ] );
3467
3468 // Trigger any bound ready events
3469 if ( jQuery.fn.triggerHandler ) {
3470 jQuery( document ).triggerHandler( "ready" );
3471 jQuery( document ).off( "ready" );
3472 }
3473 }
3474 });
3475
3476 /**
3477 * Clean-up method for dom ready events
3478 */
3479 function detach() {
3480 if ( document.addEventListener ) {
3481 document.removeEventListener( "DOMContentLoaded", completed, false );
3482 window.removeEventListener( "load", completed, false );
3483
3484 } else {
3485 document.detachEvent( "onreadystatechange", completed );
3486 window.detachEvent( "onload", completed );
3487 }
3488 }
3489
3490 /**
3491 * The ready event handler and self cleanup method
3492 */
3493 function completed() {
3494 // readyState === "complete" is good enough for us to call the dom ready in oldIE
3495 if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
3496 detach();
3497 jQuery.ready();
3498 }
3499 }
3500
3501 jQuery.ready.promise = function( obj ) {
3502 if ( !readyList ) {
3503
3504 readyList = jQuery.Deferred();
3505
3506 // Catch cases where $(document).ready() is called after the browser event has already occurred.
3507 // we once tried to use readyState "interactive" here, but it caused issues like the one
3508 // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
3509 if ( document.readyState === "complete" ) {
3510 // Handle it asynchronously to allow scripts the opportunity to delay ready
3511 setTimeout( jQuery.ready );
3512
3513 // Standards-based browsers support DOMContentLoaded
3514 } else if ( document.addEventListener ) {
3515 // Use the handy event callback
3516 document.addEventListener( "DOMContentLoaded", completed, false );
3517
3518 // A fallback to window.onload, that will always work
3519 window.addEventListener( "load", completed, false );
3520
3521 // If IE event model is used
3522 } else {
3523 // Ensure firing before onload, maybe late but safe also for iframes
3524 document.attachEvent( "onreadystatechange", completed );
3525
3526 // A fallback to window.onload, that will always work
3527 window.attachEvent( "onload", completed );
3528
3529 // If IE and not a frame
3530 // continually check to see if the document is ready
3531 var top = false;
3532
3533 try {
3534 top = window.frameElement == null && document.documentElement;
3535 } catch(e) {}
3536
3537 if ( top && top.doScroll ) {
3538 (function doScrollCheck() {
3539 if ( !jQuery.isReady ) {
3540
3541 try {
3542 // Use the trick by Diego Perini
3543 // http://javascript.nwbox.com/IEContentLoaded/
3544 top.doScroll("left");
3545 } catch(e) {
3546 return setTimeout( doScrollCheck, 50 );
3547 }
3548
3549 // detach all dom ready events
3550 detach();
3551
3552 // and execute any waiting functions
3553 jQuery.ready();
3554 }
3555 })();
3556 }
3557 }
3558 }
3559 return readyList.promise( obj );
3560 };
3561
3562
3563 var strundefined = typeof undefined;
3564
3565
3566
3567 // Support: IE<9
3568 // Iteration over object's inherited properties before its own
3569 var i;
3570 for ( i in jQuery( support ) ) {
3571 break;
3572 }
3573 support.ownLast = i !== "0";
3574
3575 // Note: most support tests are defined in their respective modules.
3576 // false until the test is run
3577 support.inlineBlockNeedsLayout = false;
3578
3579 // Execute ASAP in case we need to set body.style.zoom
3580 jQuery(function() {
3581 // Minified: var a,b,c,d
3582 var val, div, body, container;
3583
3584 body = document.getElementsByTagName( "body" )[ 0 ];
3585 if ( !body || !body.style ) {
3586 // Return for frameset docs that don't have a body
3587 return;
3588 }
3589
3590 // Setup
3591 div = document.createElement( "div" );
3592 container = document.createElement( "div" );
3593 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
3594 body.appendChild( container ).appendChild( div );
3595
3596 if ( typeof div.style.zoom !== strundefined ) {
3597 // Support: IE<8
3598 // Check if natively block-level elements act like inline-block
3599 // elements when setting their display to 'inline' and giving
3600 // them layout
3601 div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
3602
3603 support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
3604 if ( val ) {
3605 // Prevent IE 6 from affecting layout for positioned elements #11048
3606 // Prevent IE from shrinking the body in IE 7 mode #12869
3607 // Support: IE<8
3608 body.style.zoom = 1;
3609 }
3610 }
3611
3612 body.removeChild( container );
3613 });
3614
3615
3616
3617
3618 (function() {
3619 var div = document.createElement( "div" );
3620
3621 // Execute the test only if not already executed in another module.
3622 if (support.deleteExpando == null) {
3623 // Support: IE<9
3624 support.deleteExpando = true;
3625 try {
3626 delete div.test;
3627 } catch( e ) {
3628 support.deleteExpando = false;
3629 }
3630 }
3631
3632 // Null elements to avoid leaks in IE.
3633 div = null;
3634 })();
3635
3636
3637 /**
3638 * Determines whether an object can have data
3639 */
3640 jQuery.acceptData = function( elem ) {
3641 var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
3642 nodeType = +elem.nodeType || 1;
3643
3644 // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
3645 return nodeType !== 1 && nodeType !== 9 ?
3646 false :
3647
3648 // Nodes accept data unless otherwise specified; rejection can be conditional
3649 !noData || noData !== true && elem.getAttribute("classid") === noData;
3650 };
3651
3652
3653 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
3654 rmultiDash = /([A-Z])/g;
3655
3656 function dataAttr( elem, key, data ) {
3657 // If nothing was found internally, try to fetch any
3658 // data from the HTML5 data-* attribute
3659 if ( data === undefined && elem.nodeType === 1 ) {
3660
3661 var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
3662
3663 data = elem.getAttribute( name );
3664
3665 if ( typeof data === "string" ) {
3666 try {
3667 data = data === "true" ? true :
3668 data === "false" ? false :
3669 data === "null" ? null :
3670 // Only convert to a number if it doesn't change the string
3671 +data + "" === data ? +data :
3672 rbrace.test( data ) ? jQuery.parseJSON( data ) :
3673 data;
3674 } catch( e ) {}
3675
3676 // Make sure we set the data so it isn't changed later
3677 jQuery.data( elem, key, data );
3678
3679 } else {
3680 data = undefined;
3681 }
3682 }
3683
3684 return data;
3685 }
3686
3687 // checks a cache object for emptiness
3688 function isEmptyDataObject( obj ) {
3689 var name;
3690 for ( name in obj ) {
3691
3692 // if the public data object is empty, the private is still empty
3693 if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
3694 continue;
3695 }
3696 if ( name !== "toJSON" ) {
3697 return false;
3698 }
3699 }
3700
3701 return true;
3702 }
3703
3704 function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
3705 if ( !jQuery.acceptData( elem ) ) {
3706 return;
3707 }
3708
3709 var ret, thisCache,
3710 internalKey = jQuery.expando,
3711
3712 // We have to handle DOM nodes and JS objects differently because IE6-7
3713 // can't GC object references properly across the DOM-JS boundary
3714 isNode = elem.nodeType,
3715
3716 // Only DOM nodes need the global jQuery cache; JS object data is
3717 // attached directly to the object so GC can occur automatically
3718 cache = isNode ? jQuery.cache : elem,
3719
3720 // Only defining an ID for JS objects if its cache already exists allows
3721 // the code to shortcut on the same path as a DOM node with no cache
3722 id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
3723
3724 // Avoid doing any more work than we need to when trying to get data on an
3725 // object that has no data at all
3726 if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
3727 return;
3728 }
3729
3730 if ( !id ) {
3731 // Only DOM nodes need a new unique ID for each element since their data
3732 // ends up in the global cache
3733 if ( isNode ) {
3734 id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
3735 } else {
3736 id = internalKey;
3737 }
3738 }
3739
3740 if ( !cache[ id ] ) {
3741 // Avoid exposing jQuery metadata on plain JS objects when the object
3742 // is serialized using JSON.stringify
3743 cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
3744 }
3745
3746 // An object can be passed to jQuery.data instead of a key/value pair; this gets
3747 // shallow copied over onto the existing cache
3748 if ( typeof name === "object" || typeof name === "function" ) {
3749 if ( pvt ) {
3750 cache[ id ] = jQuery.extend( cache[ id ], name );
3751 } else {
3752 cache[ id ].data = jQuery.extend( cache[ id ].data, name );
3753 }
3754 }
3755
3756 thisCache = cache[ id ];
3757
3758 // jQuery data() is stored in a separate object inside the object's internal data
3759 // cache in order to avoid key collisions between internal data and user-defined
3760 // data.
3761 if ( !pvt ) {
3762 if ( !thisCache.data ) {
3763 thisCache.data = {};
3764 }
3765
3766 thisCache = thisCache.data;
3767 }
3768
3769 if ( data !== undefined ) {
3770 thisCache[ jQuery.camelCase( name ) ] = data;
3771 }
3772
3773 // Check for both converted-to-camel and non-converted data property names
3774 // If a data property was specified
3775 if ( typeof name === "string" ) {
3776
3777 // First Try to find as-is property data
3778 ret = thisCache[ name ];
3779
3780 // Test for null|undefined property data
3781 if ( ret == null ) {
3782
3783 // Try to find the camelCased property
3784 ret = thisCache[ jQuery.camelCase( name ) ];
3785 }
3786 } else {
3787 ret = thisCache;
3788 }
3789
3790 return ret;
3791 }
3792
3793 function internalRemoveData( elem, name, pvt ) {
3794 if ( !jQuery.acceptData( elem ) ) {
3795 return;
3796 }
3797
3798 var thisCache, i,
3799 isNode = elem.nodeType,
3800
3801 // See jQuery.data for more information
3802 cache = isNode ? jQuery.cache : elem,
3803 id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
3804
3805 // If there is already no cache entry for this object, there is no
3806 // purpose in continuing
3807 if ( !cache[ id ] ) {
3808 return;
3809 }
3810
3811 if ( name ) {
3812
3813 thisCache = pvt ? cache[ id ] : cache[ id ].data;
3814
3815 if ( thisCache ) {
3816
3817 // Support array or space separated string names for data keys
3818 if ( !jQuery.isArray( name ) ) {
3819
3820 // try the string as a key before any manipulation
3821 if ( name in thisCache ) {
3822 name = [ name ];
3823 } else {
3824
3825 // split the camel cased version by spaces unless a key with the spaces exists
3826 name = jQuery.camelCase( name );
3827 if ( name in thisCache ) {
3828 name = [ name ];
3829 } else {
3830 name = name.split(" ");
3831 }
3832 }
3833 } else {
3834 // If "name" is an array of keys...
3835 // When data is initially created, via ("key", "val") signature,
3836 // keys will be converted to camelCase.
3837 // Since there is no way to tell _how_ a key was added, remove
3838 // both plain key and camelCase key. #12786
3839 // This will only penalize the array argument path.
3840 name = name.concat( jQuery.map( name, jQuery.camelCase ) );
3841 }
3842
3843 i = name.length;
3844 while ( i-- ) {
3845 delete thisCache[ name[i] ];
3846 }
3847
3848 // If there is no data left in the cache, we want to continue
3849 // and let the cache object itself get destroyed
3850 if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
3851 return;
3852 }
3853 }
3854 }
3855
3856 // See jQuery.data for more information
3857 if ( !pvt ) {
3858 delete cache[ id ].data;
3859
3860 // Don't destroy the parent cache unless the internal data object
3861 // had been the only thing left in it
3862 if ( !isEmptyDataObject( cache[ id ] ) ) {
3863 return;
3864 }
3865 }
3866
3867 // Destroy the cache
3868 if ( isNode ) {
3869 jQuery.cleanData( [ elem ], true );
3870
3871 // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
3872 /* jshint eqeqeq: false */
3873 } else if ( support.deleteExpando || cache != cache.window ) {
3874 /* jshint eqeqeq: true */
3875 delete cache[ id ];
3876
3877 // When all else fails, null
3878 } else {
3879 cache[ id ] = null;
3880 }
3881 }
3882
3883 jQuery.extend({
3884 cache: {},
3885
3886 // The following elements (space-suffixed to avoid Object.prototype collisions)
3887 // throw uncatchable exceptions if you attempt to set expando properties
3888 noData: {
3889 "applet ": true,
3890 "embed ": true,
3891 // ...but Flash objects (which have this classid) *can* handle expandos
3892 "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
3893 },
3894
3895 hasData: function( elem ) {
3896 elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
3897 return !!elem && !isEmptyDataObject( elem );
3898 },
3899
3900 data: function( elem, name, data ) {
3901 return internalData( elem, name, data );
3902 },
3903
3904 removeData: function( elem, name ) {
3905 return internalRemoveData( elem, name );
3906 },
3907
3908 // For internal use only.
3909 _data: function( elem, name, data ) {
3910 return internalData( elem, name, data, true );
3911 },
3912
3913 _removeData: function( elem, name ) {
3914 return internalRemoveData( elem, name, true );
3915 }
3916 });
3917
3918 jQuery.fn.extend({
3919 data: function( key, value ) {
3920 var i, name, data,
3921 elem = this[0],
3922 attrs = elem && elem.attributes;
3923
3924 // Special expections of .data basically thwart jQuery.access,
3925 // so implement the relevant behavior ourselves
3926
3927 // Gets all values
3928 if ( key === undefined ) {
3929 if ( this.length ) {
3930 data = jQuery.data( elem );
3931
3932 if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
3933 i = attrs.length;
3934 while ( i-- ) {
3935
3936 // Support: IE11+
3937 // The attrs elements can be null (#14894)
3938 if ( attrs[ i ] ) {
3939 name = attrs[ i ].name;
3940 if ( name.indexOf( "data-" ) === 0 ) {
3941 name = jQuery.camelCase( name.slice(5) );
3942 dataAttr( elem, name, data[ name ] );
3943 }
3944 }
3945 }
3946 jQuery._data( elem, "parsedAttrs", true );
3947 }
3948 }
3949
3950 return data;
3951 }
3952
3953 // Sets multiple values
3954 if ( typeof key === "object" ) {
3955 return this.each(function() {
3956 jQuery.data( this, key );
3957 });
3958 }
3959
3960 return arguments.length > 1 ?
3961
3962 // Sets one value
3963 this.each(function() {
3964 jQuery.data( this, key, value );
3965 }) :
3966
3967 // Gets one value
3968 // Try to fetch any internally stored data first
3969 elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
3970 },
3971
3972 removeData: function( key ) {
3973 return this.each(function() {
3974 jQuery.removeData( this, key );
3975 });
3976 }
3977 });
3978
3979
3980 jQuery.extend({
3981 queue: function( elem, type, data ) {
3982 var queue;
3983
3984 if ( elem ) {
3985 type = ( type || "fx" ) + "queue";
3986 queue = jQuery._data( elem, type );
3987
3988 // Speed up dequeue by getting out quickly if this is just a lookup
3989 if ( data ) {
3990 if ( !queue || jQuery.isArray(data) ) {
3991 queue = jQuery._data( elem, type, jQuery.makeArray(data) );
3992 } else {
3993 queue.push( data );
3994 }
3995 }
3996 return queue || [];
3997 }
3998 },
3999
4000 dequeue: function( elem, type ) {
4001 type = type || "fx";
4002
4003 var queue = jQuery.queue( elem, type ),
4004 startLength = queue.length,
4005 fn = queue.shift(),
4006 hooks = jQuery._queueHooks( elem, type ),
4007 next = function() {
4008 jQuery.dequeue( elem, type );
4009 };
4010
4011 // If the fx queue is dequeued, always remove the progress sentinel
4012 if ( fn === "inprogress" ) {
4013 fn = queue.shift();
4014 startLength--;
4015 }
4016
4017 if ( fn ) {
4018
4019 // Add a progress sentinel to prevent the fx queue from being
4020 // automatically dequeued
4021 if ( type === "fx" ) {
4022 queue.unshift( "inprogress" );
4023 }
4024
4025 // clear up the last queue stop function
4026 delete hooks.stop;
4027 fn.call( elem, next, hooks );
4028 }
4029
4030 if ( !startLength && hooks ) {
4031 hooks.empty.fire();
4032 }
4033 },
4034
4035 // not intended for public consumption - generates a queueHooks object, or returns the current one
4036 _queueHooks: function( elem, type ) {
4037 var key = type + "queueHooks";
4038 return jQuery._data( elem, key ) || jQuery._data( elem, key, {
4039 empty: jQuery.Callbacks("once memory").add(function() {
4040 jQuery._removeData( elem, type + "queue" );
4041 jQuery._removeData( elem, key );
4042 })
4043 });
4044 }
4045 });
4046
4047 jQuery.fn.extend({
4048 queue: function( type, data ) {
4049 var setter = 2;
4050
4051 if ( typeof type !== "string" ) {
4052 data = type;
4053 type = "fx";
4054 setter--;
4055 }
4056
4057 if ( arguments.length < setter ) {
4058 return jQuery.queue( this[0], type );
4059 }
4060
4061 return data === undefined ?
4062 this :
4063 this.each(function() {
4064 var queue = jQuery.queue( this, type, data );
4065
4066 // ensure a hooks for this queue
4067 jQuery._queueHooks( this, type );
4068
4069 if ( type === "fx" && queue[0] !== "inprogress" ) {
4070 jQuery.dequeue( this, type );
4071 }
4072 });
4073 },
4074 dequeue: function( type ) {
4075 return this.each(function() {
4076 jQuery.dequeue( this, type );
4077 });
4078 },
4079 clearQueue: function( type ) {
4080 return this.queue( type || "fx", [] );
4081 },
4082 // Get a promise resolved when queues of a certain type
4083 // are emptied (fx is the type by default)
4084 promise: function( type, obj ) {
4085 var tmp,
4086 count = 1,
4087 defer = jQuery.Deferred(),
4088 elements = this,
4089 i = this.length,
4090 resolve = function() {
4091 if ( !( --count ) ) {
4092 defer.resolveWith( elements, [ elements ] );
4093 }
4094 };
4095
4096 if ( typeof type !== "string" ) {
4097 obj = type;
4098 type = undefined;
4099 }
4100 type = type || "fx";
4101
4102 while ( i-- ) {
4103 tmp = jQuery._data( elements[ i ], type + "queueHooks" );
4104 if ( tmp && tmp.empty ) {
4105 count++;
4106 tmp.empty.add( resolve );
4107 }
4108 }
4109 resolve();
4110 return defer.promise( obj );
4111 }
4112 });
4113 var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
4114
4115 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4116
4117 var isHidden = function( elem, el ) {
4118 // isHidden might be called from jQuery#filter function;
4119 // in that case, element will be second argument
4120 elem = el || elem;
4121 return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
4122 };
4123
4124
4125
4126 // Multifunctional method to get and set values of a collection
4127 // The value/s can optionally be executed if it's a function
4128 var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
4129 var i = 0,
4130 length = elems.length,
4131 bulk = key == null;
4132
4133 // Sets many values
4134 if ( jQuery.type( key ) === "object" ) {
4135 chainable = true;
4136 for ( i in key ) {
4137 jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
4138 }
4139
4140 // Sets one value
4141 } else if ( value !== undefined ) {
4142 chainable = true;
4143
4144 if ( !jQuery.isFunction( value ) ) {
4145 raw = true;
4146 }
4147
4148 if ( bulk ) {
4149 // Bulk operations run against the entire set
4150 if ( raw ) {
4151 fn.call( elems, value );
4152 fn = null;
4153
4154 // ...except when executing function values
4155 } else {
4156 bulk = fn;
4157 fn = function( elem, key, value ) {
4158 return bulk.call( jQuery( elem ), value );
4159 };
4160 }
4161 }
4162
4163 if ( fn ) {
4164 for ( ; i < length; i++ ) {
4165 fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
4166 }
4167 }
4168 }
4169
4170 return chainable ?
4171 elems :
4172
4173 // Gets
4174 bulk ?
4175 fn.call( elems ) :
4176 length ? fn( elems[0], key ) : emptyGet;
4177 };
4178 var rcheckableType = (/^(?:checkbox|radio)$/i);
4179
4180
4181
4182 (function() {
4183 // Minified: var a,b,c
4184 var input = document.createElement( "input" ),
4185 div = document.createElement( "div" ),
4186 fragment = document.createDocumentFragment();
4187
4188 // Setup
4189 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
4190
4191 // IE strips leading whitespace when .innerHTML is used
4192 support.leadingWhitespace = div.firstChild.nodeType === 3;
4193
4194 // Make sure that tbody elements aren't automatically inserted
4195 // IE will insert them into empty tables
4196 support.tbody = !div.getElementsByTagName( "tbody" ).length;
4197
4198 // Make sure that link elements get serialized correctly by innerHTML
4199 // This requires a wrapper element in IE
4200 support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
4201
4202 // Makes sure cloning an html5 element does not cause problems
4203 // Where outerHTML is undefined, this still works
4204 support.html5Clone =
4205 document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
4206
4207 // Check if a disconnected checkbox will retain its checked
4208 // value of true after appended to the DOM (IE6/7)
4209 input.type = "checkbox";
4210 input.checked = true;
4211 fragment.appendChild( input );
4212 support.appendChecked = input.checked;
4213
4214 // Make sure textarea (and checkbox) defaultValue is properly cloned
4215 // Support: IE6-IE11+
4216 div.innerHTML = "<textarea>x</textarea>";
4217 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
4218
4219 // #11217 - WebKit loses check when the name is after the checked attribute
4220 fragment.appendChild( div );
4221 div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
4222
4223 // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
4224 // old WebKit doesn't clone checked state correctly in fragments
4225 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
4226
4227 // Support: IE<9
4228 // Opera does not clone events (and typeof div.attachEvent === undefined).
4229 // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
4230 support.noCloneEvent = true;
4231 if ( div.attachEvent ) {
4232 div.attachEvent( "onclick", function() {
4233 support.noCloneEvent = false;
4234 });
4235
4236 div.cloneNode( true ).click();
4237 }
4238
4239 // Execute the test only if not already executed in another module.
4240 if (support.deleteExpando == null) {
4241 // Support: IE<9
4242 support.deleteExpando = true;
4243 try {
4244 delete div.test;
4245 } catch( e ) {
4246 support.deleteExpando = false;
4247 }
4248 }
4249 })();
4250
4251
4252 (function() {
4253 var i, eventName,
4254 div = document.createElement( "div" );
4255
4256 // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
4257 for ( i in { submit: true, change: true, focusin: true }) {
4258 eventName = "on" + i;
4259
4260 if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
4261 // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
4262 div.setAttribute( eventName, "t" );
4263 support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
4264 }
4265 }
4266
4267 // Null elements to avoid leaks in IE.
4268 div = null;
4269 })();
4270
4271
4272 var rformElems = /^(?:input|select|textarea)$/i,
4273 rkeyEvent = /^key/,
4274 rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
4275 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
4276 rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
4277
4278 function returnTrue() {
4279 return true;
4280 }
4281
4282 function returnFalse() {
4283 return false;
4284 }
4285
4286 function safeActiveElement() {
4287 try {
4288 return document.activeElement;
4289 } catch ( err ) { }
4290 }
4291
4292 /*
4293 * Helper functions for managing events -- not part of the public interface.
4294 * Props to Dean Edwards' addEvent library for many of the ideas.
4295 */
4296 jQuery.event = {
4297
4298 global: {},
4299
4300 add: function( elem, types, handler, data, selector ) {
4301 var tmp, events, t, handleObjIn,
4302 special, eventHandle, handleObj,
4303 handlers, type, namespaces, origType,
4304 elemData = jQuery._data( elem );
4305
4306 // Don't attach events to noData or text/comment nodes (but allow plain objects)
4307 if ( !elemData ) {
4308 return;
4309 }
4310
4311 // Caller can pass in an object of custom data in lieu of the handler
4312 if ( handler.handler ) {
4313 handleObjIn = handler;
4314 handler = handleObjIn.handler;
4315 selector = handleObjIn.selector;
4316 }
4317
4318 // Make sure that the handler has a unique ID, used to find/remove it later
4319 if ( !handler.guid ) {
4320 handler.guid = jQuery.guid++;
4321 }
4322
4323 // Init the element's event structure and main handler, if this is the first
4324 if ( !(events = elemData.events) ) {
4325 events = elemData.events = {};
4326 }
4327 if ( !(eventHandle = elemData.handle) ) {
4328 eventHandle = elemData.handle = function( e ) {
4329 // Discard the second event of a jQuery.event.trigger() and
4330 // when an event is called after a page has unloaded
4331 return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
4332 jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
4333 undefined;
4334 };
4335 // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
4336 eventHandle.elem = elem;
4337 }
4338
4339 // Handle multiple events separated by a space
4340 types = ( types || "" ).match( rnotwhite ) || [ "" ];
4341 t = types.length;
4342 while ( t-- ) {
4343 tmp = rtypenamespace.exec( types[t] ) || [];
4344 type = origType = tmp[1];
4345 namespaces = ( tmp[2] || "" ).split( "." ).sort();
4346
4347 // There *must* be a type, no attaching namespace-only handlers
4348 if ( !type ) {
4349 continue;
4350 }
4351
4352 // If event changes its type, use the special event handlers for the changed type
4353 special = jQuery.event.special[ type ] || {};
4354
4355 // If selector defined, determine special event api type, otherwise given type
4356 type = ( selector ? special.delegateType : special.bindType ) || type;
4357
4358 // Update special based on newly reset type
4359 special = jQuery.event.special[ type ] || {};
4360
4361 // handleObj is passed to all event handlers
4362 handleObj = jQuery.extend({
4363 type: type,
4364 origType: origType,
4365 data: data,
4366 handler: handler,
4367 guid: handler.guid,
4368 selector: selector,
4369 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
4370 namespace: namespaces.join(".")
4371 }, handleObjIn );
4372
4373 // Init the event handler queue if we're the first
4374 if ( !(handlers = events[ type ]) ) {
4375 handlers = events[ type ] = [];
4376 handlers.delegateCount = 0;
4377
4378 // Only use addEventListener/attachEvent if the special events handler returns false
4379 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
4380 // Bind the global event handler to the element
4381 if ( elem.addEventListener ) {
4382 elem.addEventListener( type, eventHandle, false );
4383
4384 } else if ( elem.attachEvent ) {
4385 elem.attachEvent( "on" + type, eventHandle );
4386 }
4387 }
4388 }
4389
4390 if ( special.add ) {
4391 special.add.call( elem, handleObj );
4392
4393 if ( !handleObj.handler.guid ) {
4394 handleObj.handler.guid = handler.guid;
4395 }
4396 }
4397
4398 // Add to the element's handler list, delegates in front
4399 if ( selector ) {
4400 handlers.splice( handlers.delegateCount++, 0, handleObj );
4401 } else {
4402 handlers.push( handleObj );
4403 }
4404
4405 // Keep track of which events have ever been used, for event optimization
4406 jQuery.event.global[ type ] = true;
4407 }
4408
4409 // Nullify elem to prevent memory leaks in IE
4410 elem = null;
4411 },
4412
4413 // Detach an event or set of events from an element
4414 remove: function( elem, types, handler, selector, mappedTypes ) {
4415 var j, handleObj, tmp,
4416 origCount, t, events,
4417 special, handlers, type,
4418 namespaces, origType,
4419 elemData = jQuery.hasData( elem ) && jQuery._data( elem );
4420
4421 if ( !elemData || !(events = elemData.events) ) {
4422 return;
4423 }
4424
4425 // Once for each type.namespace in types; type may be omitted
4426 types = ( types || "" ).match( rnotwhite ) || [ "" ];
4427 t = types.length;
4428 while ( t-- ) {
4429 tmp = rtypenamespace.exec( types[t] ) || [];
4430 type = origType = tmp[1];
4431 namespaces = ( tmp[2] || "" ).split( "." ).sort();
4432
4433 // Unbind all events (on this namespace, if provided) for the element
4434 if ( !type ) {
4435 for ( type in events ) {
4436 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
4437 }
4438 continue;
4439 }
4440
4441 special = jQuery.event.special[ type ] || {};
4442 type = ( selector ? special.delegateType : special.bindType ) || type;
4443 handlers = events[ type ] || [];
4444 tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
4445
4446 // Remove matching events
4447 origCount = j = handlers.length;
4448 while ( j-- ) {
4449 handleObj = handlers[ j ];
4450
4451 if ( ( mappedTypes || origType === handleObj.origType ) &&
4452 ( !handler || handler.guid === handleObj.guid ) &&
4453 ( !tmp || tmp.test( handleObj.namespace ) ) &&
4454 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
4455 handlers.splice( j, 1 );
4456
4457 if ( handleObj.selector ) {
4458 handlers.delegateCount--;
4459 }
4460 if ( special.remove ) {
4461 special.remove.call( elem, handleObj );
4462 }
4463 }
4464 }
4465
4466 // Remove generic event handler if we removed something and no more handlers exist
4467 // (avoids potential for endless recursion during removal of special event handlers)
4468 if ( origCount && !handlers.length ) {
4469 if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
4470 jQuery.removeEvent( elem, type, elemData.handle );
4471 }
4472
4473 delete events[ type ];
4474 }
4475 }
4476
4477 // Remove the expando if it's no longer used
4478 if ( jQuery.isEmptyObject( events ) ) {
4479 delete elemData.handle;
4480
4481 // removeData also checks for emptiness and clears the expando if empty
4482 // so use it instead of delete
4483 jQuery._removeData( elem, "events" );
4484 }
4485 },
4486
4487 trigger: function( event, data, elem, onlyHandlers ) {
4488 var handle, ontype, cur,
4489 bubbleType, special, tmp, i,
4490 eventPath = [ elem || document ],
4491 type = hasOwn.call( event, "type" ) ? event.type : event,
4492 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
4493
4494 cur = tmp = elem = elem || document;
4495
4496 // Don't do events on text and comment nodes
4497 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
4498 return;
4499 }
4500
4501 // focus/blur morphs to focusin/out; ensure we're not firing them right now
4502 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
4503 return;
4504 }
4505
4506 if ( type.indexOf(".") >= 0 ) {
4507 // Namespaced trigger; create a regexp to match event type in handle()
4508 namespaces = type.split(".");
4509 type = namespaces.shift();
4510 namespaces.sort();
4511 }
4512 ontype = type.indexOf(":") < 0 && "on" + type;
4513
4514 // Caller can pass in a jQuery.Event object, Object, or just an event type string
4515 event = event[ jQuery.expando ] ?
4516 event :
4517 new jQuery.Event( type, typeof event === "object" && event );
4518
4519 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
4520 event.isTrigger = onlyHandlers ? 2 : 3;
4521 event.namespace = namespaces.join(".");
4522 event.namespace_re = event.namespace ?
4523 new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
4524 null;
4525
4526 // Clean up the event in case it is being reused
4527 event.result = undefined;
4528 if ( !event.target ) {
4529 event.target = elem;
4530 }
4531
4532 // Clone any incoming data and prepend the event, creating the handler arg list
4533 data = data == null ?
4534 [ event ] :
4535 jQuery.makeArray( data, [ event ] );
4536
4537 // Allow special events to draw outside the lines
4538 special = jQuery.event.special[ type ] || {};
4539 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
4540 return;
4541 }
4542
4543 // Determine event propagation path in advance, per W3C events spec (#9951)
4544 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
4545 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
4546
4547 bubbleType = special.delegateType || type;
4548 if ( !rfocusMorph.test( bubbleType + type ) ) {
4549 cur = cur.parentNode;
4550 }
4551 for ( ; cur; cur = cur.parentNode ) {
4552 eventPath.push( cur );
4553 tmp = cur;
4554 }
4555
4556 // Only add window if we got to document (e.g., not plain obj or detached DOM)
4557 if ( tmp === (elem.ownerDocument || document) ) {
4558 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
4559 }
4560 }
4561
4562 // Fire handlers on the event path
4563 i = 0;
4564 while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
4565
4566 event.type = i > 1 ?
4567 bubbleType :
4568 special.bindType || type;
4569
4570 // jQuery handler
4571 handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
4572 if ( handle ) {
4573 handle.apply( cur, data );
4574 }
4575
4576 // Native handler
4577 handle = ontype && cur[ ontype ];
4578 if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
4579 event.result = handle.apply( cur, data );
4580 if ( event.result === false ) {
4581 event.preventDefault();
4582 }
4583 }
4584 }
4585 event.type = type;
4586
4587 // If nobody prevented the default action, do it now
4588 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
4589
4590 if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
4591 jQuery.acceptData( elem ) ) {
4592
4593 // Call a native DOM method on the target with the same name name as the event.
4594 // Can't use an .isFunction() check here because IE6/7 fails that test.
4595 // Don't do default actions on window, that's where global variables be (#6170)
4596 if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
4597
4598 // Don't re-trigger an onFOO event when we call its FOO() method
4599 tmp = elem[ ontype ];
4600
4601 if ( tmp ) {
4602 elem[ ontype ] = null;
4603 }
4604
4605 // Prevent re-triggering of the same event, since we already bubbled it above
4606 jQuery.event.triggered = type;
4607 try {
4608 elem[ type ]();
4609 } catch ( e ) {
4610 // IE<9 dies on focus/blur to hidden element (#1486,#12518)
4611 // only reproducible on winXP IE8 native, not IE9 in IE8 mode
4612 }
4613 jQuery.event.triggered = undefined;
4614
4615 if ( tmp ) {
4616 elem[ ontype ] = tmp;
4617 }
4618 }
4619 }
4620 }
4621
4622 return event.result;
4623 },
4624
4625 dispatch: function( event ) {
4626
4627 // Make a writable jQuery.Event from the native event object
4628 event = jQuery.event.fix( event );
4629
4630 var i, ret, handleObj, matched, j,
4631 handlerQueue = [],
4632 args = slice.call( arguments ),
4633 handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
4634 special = jQuery.event.special[ event.type ] || {};
4635
4636 // Use the fix-ed jQuery.Event rather than the (read-only) native event
4637 args[0] = event;
4638 event.delegateTarget = this;
4639
4640 // Call the preDispatch hook for the mapped type, and let it bail if desired
4641 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
4642 return;
4643 }
4644
4645 // Determine handlers
4646 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
4647
4648 // Run delegates first; they may want to stop propagation beneath us
4649 i = 0;
4650 while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
4651 event.currentTarget = matched.elem;
4652
4653 j = 0;
4654 while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
4655
4656 // Triggered event must either 1) have no namespace, or
4657 // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
4658 if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
4659
4660 event.handleObj = handleObj;
4661 event.data = handleObj.data;
4662
4663 ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
4664 .apply( matched.elem, args );
4665
4666 if ( ret !== undefined ) {
4667 if ( (event.result = ret) === false ) {
4668 event.preventDefault();
4669 event.stopPropagation();
4670 }
4671 }
4672 }
4673 }
4674 }
4675
4676 // Call the postDispatch hook for the mapped type
4677 if ( special.postDispatch ) {
4678 special.postDispatch.call( this, event );
4679 }
4680
4681 return event.result;
4682 },
4683
4684 handlers: function( event, handlers ) {
4685 var sel, handleObj, matches, i,
4686 handlerQueue = [],
4687 delegateCount = handlers.delegateCount,
4688 cur = event.target;
4689
4690 // Find delegate handlers
4691 // Black-hole SVG <use> instance trees (#13180)
4692 // Avoid non-left-click bubbling in Firefox (#3861)
4693 if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
4694
4695 /* jshint eqeqeq: false */
4696 for ( ; cur != this; cur = cur.parentNode || this ) {
4697 /* jshint eqeqeq: true */
4698
4699 // Don't check non-elements (#13208)
4700 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
4701 if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
4702 matches = [];
4703 for ( i = 0; i < delegateCount; i++ ) {
4704 handleObj = handlers[ i ];
4705
4706 // Don't conflict with Object.prototype properties (#13203)
4707 sel = handleObj.selector + " ";
4708
4709 if ( matches[ sel ] === undefined ) {
4710 matches[ sel ] = handleObj.needsContext ?
4711 jQuery( sel, this ).index( cur ) >= 0 :
4712 jQuery.find( sel, this, null, [ cur ] ).length;
4713 }
4714 if ( matches[ sel ] ) {
4715 matches.push( handleObj );
4716 }
4717 }
4718 if ( matches.length ) {
4719 handlerQueue.push({ elem: cur, handlers: matches });
4720 }
4721 }
4722 }
4723 }
4724
4725 // Add the remaining (directly-bound) handlers
4726 if ( delegateCount < handlers.length ) {
4727 handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
4728 }
4729
4730 return handlerQueue;
4731 },
4732
4733 fix: function( event ) {
4734 if ( event[ jQuery.expando ] ) {
4735 return event;
4736 }
4737
4738 // Create a writable copy of the event object and normalize some properties
4739 var i, prop, copy,
4740 type = event.type,
4741 originalEvent = event,
4742 fixHook = this.fixHooks[ type ];
4743
4744 if ( !fixHook ) {
4745 this.fixHooks[ type ] = fixHook =
4746 rmouseEvent.test( type ) ? this.mouseHooks :
4747 rkeyEvent.test( type ) ? this.keyHooks :
4748 {};
4749 }
4750 copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
4751
4752 event = new jQuery.Event( originalEvent );
4753
4754 i = copy.length;
4755 while ( i-- ) {
4756 prop = copy[ i ];
4757 event[ prop ] = originalEvent[ prop ];
4758 }
4759
4760 // Support: IE<9
4761 // Fix target property (#1925)
4762 if ( !event.target ) {
4763 event.target = originalEvent.srcElement || document;
4764 }
4765
4766 // Support: Chrome 23+, Safari?
4767 // Target should not be a text node (#504, #13143)
4768 if ( event.target.nodeType === 3 ) {
4769 event.target = event.target.parentNode;
4770 }
4771
4772 // Support: IE<9
4773 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
4774 event.metaKey = !!event.metaKey;
4775
4776 return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
4777 },
4778
4779 // Includes some event props shared by KeyEvent and MouseEvent
4780 props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
4781
4782 fixHooks: {},
4783
4784 keyHooks: {
4785 props: "char charCode key keyCode".split(" "),
4786 filter: function( event, original ) {
4787
4788 // Add which for key events
4789 if ( event.which == null ) {
4790 event.which = original.charCode != null ? original.charCode : original.keyCode;
4791 }
4792
4793 return event;
4794 }
4795 },
4796
4797 mouseHooks: {
4798 props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
4799 filter: function( event, original ) {
4800 var body, eventDoc, doc,
4801 button = original.button,
4802 fromElement = original.fromElement;
4803
4804 // Calculate pageX/Y if missing and clientX/Y available
4805 if ( event.pageX == null && original.clientX != null ) {
4806 eventDoc = event.target.ownerDocument || document;
4807 doc = eventDoc.documentElement;
4808 body = eventDoc.body;
4809
4810 event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
4811 event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
4812 }
4813
4814 // Add relatedTarget, if necessary
4815 if ( !event.relatedTarget && fromElement ) {
4816 event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
4817 }
4818
4819 // Add which for click: 1 === left; 2 === middle; 3 === right
4820 // Note: button is not normalized, so don't use it
4821 if ( !event.which && button !== undefined ) {
4822 event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
4823 }
4824
4825 return event;
4826 }
4827 },
4828
4829 special: {
4830 load: {
4831 // Prevent triggered image.load events from bubbling to window.load
4832 noBubble: true
4833 },
4834 focus: {
4835 // Fire native event if possible so blur/focus sequence is correct
4836 trigger: function() {
4837 if ( this !== safeActiveElement() && this.focus ) {
4838 try {
4839 this.focus();
4840 return false;
4841 } catch ( e ) {
4842 // Support: IE<9
4843 // If we error on focus to hidden element (#1486, #12518),
4844 // let .trigger() run the handlers
4845 }
4846 }
4847 },
4848 delegateType: "focusin"
4849 },
4850 blur: {
4851 trigger: function() {
4852 if ( this === safeActiveElement() && this.blur ) {
4853 this.blur();
4854 return false;
4855 }
4856 },
4857 delegateType: "focusout"
4858 },
4859 click: {
4860 // For checkbox, fire native event so checked state will be right
4861 trigger: function() {
4862 if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
4863 this.click();
4864 return false;
4865 }
4866 },
4867
4868 // For cross-browser consistency, don't fire native .click() on links
4869 _default: function( event ) {
4870 return jQuery.nodeName( event.target, "a" );
4871 }
4872 },
4873
4874 beforeunload: {
4875 postDispatch: function( event ) {
4876
4877 // Support: Firefox 20+
4878 // Firefox doesn't alert if the returnValue field is not set.
4879 if ( event.result !== undefined && event.originalEvent ) {
4880 event.originalEvent.returnValue = event.result;
4881 }
4882 }
4883 }
4884 },
4885
4886 simulate: function( type, elem, event, bubble ) {
4887 // Piggyback on a donor event to simulate a different one.
4888 // Fake originalEvent to avoid donor's stopPropagation, but if the
4889 // simulated event prevents default then we do the same on the donor.
4890 var e = jQuery.extend(
4891 new jQuery.Event(),
4892 event,
4893 {
4894 type: type,
4895 isSimulated: true,
4896 originalEvent: {}
4897 }
4898 );
4899 if ( bubble ) {
4900 jQuery.event.trigger( e, null, elem );
4901 } else {
4902 jQuery.event.dispatch.call( elem, e );
4903 }
4904 if ( e.isDefaultPrevented() ) {
4905 event.preventDefault();
4906 }
4907 }
4908 };
4909
4910 jQuery.removeEvent = document.removeEventListener ?
4911 function( elem, type, handle ) {
4912 if ( elem.removeEventListener ) {
4913 elem.removeEventListener( type, handle, false );
4914 }
4915 } :
4916 function( elem, type, handle ) {
4917 var name = "on" + type;
4918
4919 if ( elem.detachEvent ) {
4920
4921 // #8545, #7054, preventing memory leaks for custom events in IE6-8
4922 // detachEvent needed property on element, by name of that event, to properly expose it to GC
4923 if ( typeof elem[ name ] === strundefined ) {
4924 elem[ name ] = null;
4925 }
4926
4927 elem.detachEvent( name, handle );
4928 }
4929 };
4930
4931 jQuery.Event = function( src, props ) {
4932 // Allow instantiation without the 'new' keyword
4933 if ( !(this instanceof jQuery.Event) ) {
4934 return new jQuery.Event( src, props );
4935 }
4936
4937 // Event object
4938 if ( src && src.type ) {
4939 this.originalEvent = src;
4940 this.type = src.type;
4941
4942 // Events bubbling up the document may have been marked as prevented
4943 // by a handler lower down the tree; reflect the correct value.
4944 this.isDefaultPrevented = src.defaultPrevented ||
4945 src.defaultPrevented === undefined &&
4946 // Support: IE < 9, Android < 4.0
4947 src.returnValue === false ?
4948 returnTrue :
4949 returnFalse;
4950
4951 // Event type
4952 } else {
4953 this.type = src;
4954 }
4955
4956 // Put explicitly provided properties onto the event object
4957 if ( props ) {
4958 jQuery.extend( this, props );
4959 }
4960
4961 // Create a timestamp if incoming event doesn't have one
4962 this.timeStamp = src && src.timeStamp || jQuery.now();
4963
4964 // Mark it as fixed
4965 this[ jQuery.expando ] = true;
4966 };
4967
4968 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
4969 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
4970 jQuery.Event.prototype = {
4971 isDefaultPrevented: returnFalse,
4972 isPropagationStopped: returnFalse,
4973 isImmediatePropagationStopped: returnFalse,
4974
4975 preventDefault: function() {
4976 var e = this.originalEvent;
4977
4978 this.isDefaultPrevented = returnTrue;
4979 if ( !e ) {
4980 return;
4981 }
4982
4983 // If preventDefault exists, run it on the original event
4984 if ( e.preventDefault ) {
4985 e.preventDefault();
4986
4987 // Support: IE
4988 // Otherwise set the returnValue property of the original event to false
4989 } else {
4990 e.returnValue = false;
4991 }
4992 },
4993 stopPropagation: function() {
4994 var e = this.originalEvent;
4995
4996 this.isPropagationStopped = returnTrue;
4997 if ( !e ) {
4998 return;
4999 }
5000 // If stopPropagation exists, run it on the original event
5001 if ( e.stopPropagation ) {
5002 e.stopPropagation();
5003 }
5004
5005 // Support: IE
5006 // Set the cancelBubble property of the original event to true
5007 e.cancelBubble = true;
5008 },
5009 stopImmediatePropagation: function() {
5010 var e = this.originalEvent;
5011
5012 this.isImmediatePropagationStopped = returnTrue;
5013
5014 if ( e && e.stopImmediatePropagation ) {
5015 e.stopImmediatePropagation();
5016 }
5017
5018 this.stopPropagation();
5019 }
5020 };
5021
5022 // Create mouseenter/leave events using mouseover/out and event-time checks
5023 jQuery.each({
5024 mouseenter: "mouseover",
5025 mouseleave: "mouseout",
5026 pointerenter: "pointerover",
5027 pointerleave: "pointerout"
5028 }, function( orig, fix ) {
5029 jQuery.event.special[ orig ] = {
5030 delegateType: fix,
5031 bindType: fix,
5032
5033 handle: function( event ) {
5034 var ret,
5035 target = this,
5036 related = event.relatedTarget,
5037 handleObj = event.handleObj;
5038
5039 // For mousenter/leave call the handler if related is outside the target.
5040 // NB: No relatedTarget if the mouse left/entered the browser window
5041 if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
5042 event.type = handleObj.origType;
5043 ret = handleObj.handler.apply( this, arguments );
5044 event.type = fix;
5045 }
5046 return ret;
5047 }
5048 };
5049 });
5050
5051 // IE submit delegation
5052 if ( !support.submitBubbles ) {
5053
5054 jQuery.event.special.submit = {
5055 setup: function() {
5056 // Only need this for delegated form submit events
5057 if ( jQuery.nodeName( this, "form" ) ) {
5058 return false;
5059 }
5060
5061 // Lazy-add a submit handler when a descendant form may potentially be submitted
5062 jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
5063 // Node name check avoids a VML-related crash in IE (#9807)
5064 var elem = e.target,
5065 form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
5066 if ( form && !jQuery._data( form, "submitBubbles" ) ) {
5067 jQuery.event.add( form, "submit._submit", function( event ) {
5068 event._submit_bubble = true;
5069 });
5070 jQuery._data( form, "submitBubbles", true );
5071 }
5072 });
5073 // return undefined since we don't need an event listener
5074 },
5075
5076 postDispatch: function( event ) {
5077 // If form was submitted by the user, bubble the event up the tree
5078 if ( event._submit_bubble ) {
5079 delete event._submit_bubble;
5080 if ( this.parentNode && !event.isTrigger ) {
5081 jQuery.event.simulate( "submit", this.parentNode, event, true );
5082 }
5083 }
5084 },
5085
5086 teardown: function() {
5087 // Only need this for delegated form submit events
5088 if ( jQuery.nodeName( this, "form" ) ) {
5089 return false;
5090 }
5091
5092 // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
5093 jQuery.event.remove( this, "._submit" );
5094 }
5095 };
5096 }
5097
5098 // IE change delegation and checkbox/radio fix
5099 if ( !support.changeBubbles ) {
5100
5101 jQuery.event.special.change = {
5102
5103 setup: function() {
5104
5105 if ( rformElems.test( this.nodeName ) ) {
5106 // IE doesn't fire change on a check/radio until blur; trigger it on click
5107 // after a propertychange. Eat the blur-change in special.change.handle.
5108 // This still fires onchange a second time for check/radio after blur.
5109 if ( this.type === "checkbox" || this.type === "radio" ) {
5110 jQuery.event.add( this, "propertychange._change", function( event ) {
5111 if ( event.originalEvent.propertyName === "checked" ) {
5112 this._just_changed = true;
5113 }
5114 });
5115 jQuery.event.add( this, "click._change", function( event ) {
5116 if ( this._just_changed && !event.isTrigger ) {
5117 this._just_changed = false;
5118 }
5119 // Allow triggered, simulated change events (#11500)
5120 jQuery.event.simulate( "change", this, event, true );
5121 });
5122 }
5123 return false;
5124 }
5125 // Delegated event; lazy-add a change handler on descendant inputs
5126 jQuery.event.add( this, "beforeactivate._change", function( e ) {
5127 var elem = e.target;
5128
5129 if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
5130 jQuery.event.add( elem, "change._change", function( event ) {
5131 if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
5132 jQuery.event.simulate( "change", this.parentNode, event, true );
5133 }
5134 });
5135 jQuery._data( elem, "changeBubbles", true );
5136 }
5137 });
5138 },
5139
5140 handle: function( event ) {
5141 var elem = event.target;
5142
5143 // Swallow native change events from checkbox/radio, we already triggered them above
5144 if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
5145 return event.handleObj.handler.apply( this, arguments );
5146 }
5147 },
5148
5149 teardown: function() {
5150 jQuery.event.remove( this, "._change" );
5151
5152 return !rformElems.test( this.nodeName );
5153 }
5154 };
5155 }
5156
5157 // Create "bubbling" focus and blur events
5158 if ( !support.focusinBubbles ) {
5159 jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
5160
5161 // Attach a single capturing handler on the document while someone wants focusin/focusout
5162 var handler = function( event ) {
5163 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
5164 };
5165
5166 jQuery.event.special[ fix ] = {
5167 setup: function() {
5168 var doc = this.ownerDocument || this,
5169 attaches = jQuery._data( doc, fix );
5170
5171 if ( !attaches ) {
5172 doc.addEventListener( orig, handler, true );
5173 }
5174 jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
5175 },
5176 teardown: function() {
5177 var doc = this.ownerDocument || this,
5178 attaches = jQuery._data( doc, fix ) - 1;
5179
5180 if ( !attaches ) {
5181 doc.removeEventListener( orig, handler, true );
5182 jQuery._removeData( doc, fix );
5183 } else {
5184 jQuery._data( doc, fix, attaches );
5185 }
5186 }
5187 };
5188 });
5189 }
5190
5191 jQuery.fn.extend({
5192
5193 on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
5194 var type, origFn;
5195
5196 // Types can be a map of types/handlers
5197 if ( typeof types === "object" ) {
5198 // ( types-Object, selector, data )
5199 if ( typeof selector !== "string" ) {
5200 // ( types-Object, data )
5201 data = data || selector;
5202 selector = undefined;
5203 }
5204 for ( type in types ) {
5205 this.on( type, selector, data, types[ type ], one );
5206 }
5207 return this;
5208 }
5209
5210 if ( data == null && fn == null ) {
5211 // ( types, fn )
5212 fn = selector;
5213 data = selector = undefined;
5214 } else if ( fn == null ) {
5215 if ( typeof selector === "string" ) {
5216 // ( types, selector, fn )
5217 fn = data;
5218 data = undefined;
5219 } else {
5220 // ( types, data, fn )
5221 fn = data;
5222 data = selector;
5223 selector = undefined;
5224 }
5225 }
5226 if ( fn === false ) {
5227 fn = returnFalse;
5228 } else if ( !fn ) {
5229 return this;
5230 }
5231
5232 if ( one === 1 ) {
5233 origFn = fn;
5234 fn = function( event ) {
5235 // Can use an empty set, since event contains the info
5236 jQuery().off( event );
5237 return origFn.apply( this, arguments );
5238 };
5239 // Use same guid so caller can remove using origFn
5240 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
5241 }
5242 return this.each( function() {
5243 jQuery.event.add( this, types, fn, data, selector );
5244 });
5245 },
5246 one: function( types, selector, data, fn ) {
5247 return this.on( types, selector, data, fn, 1 );
5248 },
5249 off: function( types, selector, fn ) {
5250 var handleObj, type;
5251 if ( types && types.preventDefault && types.handleObj ) {
5252 // ( event ) dispatched jQuery.Event
5253 handleObj = types.handleObj;
5254 jQuery( types.delegateTarget ).off(
5255 handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
5256 handleObj.selector,
5257 handleObj.handler
5258 );
5259 return this;
5260 }
5261 if ( typeof types === "object" ) {
5262 // ( types-object [, selector] )
5263 for ( type in types ) {
5264 this.off( type, selector, types[ type ] );
5265 }
5266 return this;
5267 }
5268 if ( selector === false || typeof selector === "function" ) {
5269 // ( types [, fn] )
5270 fn = selector;
5271 selector = undefined;
5272 }
5273 if ( fn === false ) {
5274 fn = returnFalse;
5275 }
5276 return this.each(function() {
5277 jQuery.event.remove( this, types, fn, selector );
5278 });
5279 },
5280
5281 trigger: function( type, data ) {
5282 return this.each(function() {
5283 jQuery.event.trigger( type, data, this );
5284 });
5285 },
5286 triggerHandler: function( type, data ) {
5287 var elem = this[0];
5288 if ( elem ) {
5289 return jQuery.event.trigger( type, data, elem, true );
5290 }
5291 }
5292 });
5293
5294
5295 function createSafeFragment( document ) {
5296 var list = nodeNames.split( "|" ),
5297 safeFrag = document.createDocumentFragment();
5298
5299 if ( safeFrag.createElement ) {
5300 while ( list.length ) {
5301 safeFrag.createElement(
5302 list.pop()
5303 );
5304 }
5305 }
5306 return safeFrag;
5307 }
5308
5309 var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
5310 "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
5311 rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
5312 rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
5313 rleadingWhitespace = /^\s+/,
5314 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
5315 rtagName = /<([\w:]+)/,
5316 rtbody = /<tbody/i,
5317 rhtml = /<|&#?\w+;/,
5318 rnoInnerhtml = /<(?:script|style|link)/i,
5319 // checked="checked" or checked
5320 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5321 rscriptType = /^$|\/(?:java|ecma)script/i,
5322 rscriptTypeMasked = /^true\/(.*)/,
5323 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
5324
5325 // We have to close these tags to support XHTML (#13200)
5326 wrapMap = {
5327 option: [ 1, "<select multiple='multiple'>", "</select>" ],
5328 legend: [ 1, "<fieldset>", "</fieldset>" ],
5329 area: [ 1, "<map>", "</map>" ],
5330 param: [ 1, "<object>", "</object>" ],
5331 thead: [ 1, "<table>", "</table>" ],
5332 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
5333 col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
5334 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
5335
5336 // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
5337 // unless wrapped in a div with non-breaking characters in front of it.
5338 _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
5339 },
5340 safeFragment = createSafeFragment( document ),
5341 fragmentDiv = safeFragment.appendChild( document.createElement("div") );
5342
5343 wrapMap.optgroup = wrapMap.option;
5344 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5345 wrapMap.th = wrapMap.td;
5346
5347 function getAll( context, tag ) {
5348 var elems, elem,
5349 i = 0,
5350 found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
5351 typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
5352 undefined;
5353
5354 if ( !found ) {
5355 for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
5356 if ( !tag || jQuery.nodeName( elem, tag ) ) {
5357 found.push( elem );
5358 } else {
5359 jQuery.merge( found, getAll( elem, tag ) );
5360 }
5361 }
5362 }
5363
5364 return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
5365 jQuery.merge( [ context ], found ) :
5366 found;
5367 }
5368
5369 // Used in buildFragment, fixes the defaultChecked property
5370 function fixDefaultChecked( elem ) {
5371 if ( rcheckableType.test( elem.type ) ) {
5372 elem.defaultChecked = elem.checked;
5373 }
5374 }
5375
5376 // Support: IE<8
5377 // Manipulating tables requires a tbody
5378 function manipulationTarget( elem, content ) {
5379 return jQuery.nodeName( elem, "table" ) &&
5380 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
5381
5382 elem.getElementsByTagName("tbody")[0] ||
5383 elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
5384 elem;
5385 }
5386
5387 // Replace/restore the type attribute of script elements for safe DOM manipulation
5388 function disableScript( elem ) {
5389 elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
5390 return elem;
5391 }
5392 function restoreScript( elem ) {
5393 var match = rscriptTypeMasked.exec( elem.type );
5394 if ( match ) {
5395 elem.type = match[1];
5396 } else {
5397 elem.removeAttribute("type");
5398 }
5399 return elem;
5400 }
5401
5402 // Mark scripts as having already been evaluated
5403 function setGlobalEval( elems, refElements ) {
5404 var elem,
5405 i = 0;
5406 for ( ; (elem = elems[i]) != null; i++ ) {
5407 jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
5408 }
5409 }
5410
5411 function cloneCopyEvent( src, dest ) {
5412
5413 if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
5414 return;
5415 }
5416
5417 var type, i, l,
5418 oldData = jQuery._data( src ),
5419 curData = jQuery._data( dest, oldData ),
5420 events = oldData.events;
5421
5422 if ( events ) {
5423 delete curData.handle;
5424 curData.events = {};
5425
5426 for ( type in events ) {
5427 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
5428 jQuery.event.add( dest, type, events[ type ][ i ] );
5429 }
5430 }
5431 }
5432
5433 // make the cloned public data object a copy from the original
5434 if ( curData.data ) {
5435 curData.data = jQuery.extend( {}, curData.data );
5436 }
5437 }
5438
5439 function fixCloneNodeIssues( src, dest ) {
5440 var nodeName, e, data;
5441
5442 // We do not need to do anything for non-Elements
5443 if ( dest.nodeType !== 1 ) {
5444 return;
5445 }
5446
5447 nodeName = dest.nodeName.toLowerCase();
5448
5449 // IE6-8 copies events bound via attachEvent when using cloneNode.
5450 if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
5451 data = jQuery._data( dest );
5452
5453 for ( e in data.events ) {
5454 jQuery.removeEvent( dest, e, data.handle );
5455 }
5456
5457 // Event data gets referenced instead of copied if the expando gets copied too
5458 dest.removeAttribute( jQuery.expando );
5459 }
5460
5461 // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
5462 if ( nodeName === "script" && dest.text !== src.text ) {
5463 disableScript( dest ).text = src.text;
5464 restoreScript( dest );
5465
5466 // IE6-10 improperly clones children of object elements using classid.
5467 // IE10 throws NoModificationAllowedError if parent is null, #12132.
5468 } else if ( nodeName === "object" ) {
5469 if ( dest.parentNode ) {
5470 dest.outerHTML = src.outerHTML;
5471 }
5472
5473 // This path appears unavoidable for IE9. When cloning an object
5474 // element in IE9, the outerHTML strategy above is not sufficient.
5475 // If the src has innerHTML and the destination does not,
5476 // copy the src.innerHTML into the dest.innerHTML. #10324
5477 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
5478 dest.innerHTML = src.innerHTML;
5479 }
5480
5481 } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
5482 // IE6-8 fails to persist the checked state of a cloned checkbox
5483 // or radio button. Worse, IE6-7 fail to give the cloned element
5484 // a checked appearance if the defaultChecked value isn't also set
5485
5486 dest.defaultChecked = dest.checked = src.checked;
5487
5488 // IE6-7 get confused and end up setting the value of a cloned
5489 // checkbox/radio button to an empty string instead of "on"
5490 if ( dest.value !== src.value ) {
5491 dest.value = src.value;
5492 }
5493
5494 // IE6-8 fails to return the selected option to the default selected
5495 // state when cloning options
5496 } else if ( nodeName === "option" ) {
5497 dest.defaultSelected = dest.selected = src.defaultSelected;
5498
5499 // IE6-8 fails to set the defaultValue to the correct value when
5500 // cloning other types of input fields
5501 } else if ( nodeName === "input" || nodeName === "textarea" ) {
5502 dest.defaultValue = src.defaultValue;
5503 }
5504 }
5505
5506 jQuery.extend({
5507 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
5508 var destElements, node, clone, i, srcElements,
5509 inPage = jQuery.contains( elem.ownerDocument, elem );
5510
5511 if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
5512 clone = elem.cloneNode( true );
5513
5514 // IE<=8 does not properly clone detached, unknown element nodes
5515 } else {
5516 fragmentDiv.innerHTML = elem.outerHTML;
5517 fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
5518 }
5519
5520 if ( (!support.noCloneEvent || !support.noCloneChecked) &&
5521 (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
5522
5523 // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
5524 destElements = getAll( clone );
5525 srcElements = getAll( elem );
5526
5527 // Fix all IE cloning issues
5528 for ( i = 0; (node = srcElements[i]) != null; ++i ) {
5529 // Ensure that the destination node is not null; Fixes #9587
5530 if ( destElements[i] ) {
5531 fixCloneNodeIssues( node, destElements[i] );
5532 }
5533 }
5534 }
5535
5536 // Copy the events from the original to the clone
5537 if ( dataAndEvents ) {
5538 if ( deepDataAndEvents ) {
5539 srcElements = srcElements || getAll( elem );
5540 destElements = destElements || getAll( clone );
5541
5542 for ( i = 0; (node = srcElements[i]) != null; i++ ) {
5543 cloneCopyEvent( node, destElements[i] );
5544 }
5545 } else {
5546 cloneCopyEvent( elem, clone );
5547 }
5548 }
5549
5550 // Preserve script evaluation history
5551 destElements = getAll( clone, "script" );
5552 if ( destElements.length > 0 ) {
5553 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
5554 }
5555
5556 destElements = srcElements = node = null;
5557
5558 // Return the cloned set
5559 return clone;
5560 },
5561
5562 buildFragment: function( elems, context, scripts, selection ) {
5563 var j, elem, contains,
5564 tmp, tag, tbody, wrap,
5565 l = elems.length,
5566
5567 // Ensure a safe fragment
5568 safe = createSafeFragment( context ),
5569
5570 nodes = [],
5571 i = 0;
5572
5573 for ( ; i < l; i++ ) {
5574 elem = elems[ i ];
5575
5576 if ( elem || elem === 0 ) {
5577
5578 // Add nodes directly
5579 if ( jQuery.type( elem ) === "object" ) {
5580 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
5581
5582 // Convert non-html into a text node
5583 } else if ( !rhtml.test( elem ) ) {
5584 nodes.push( context.createTextNode( elem ) );
5585
5586 // Convert html into DOM nodes
5587 } else {
5588 tmp = tmp || safe.appendChild( context.createElement("div") );
5589
5590 // Deserialize a standard representation
5591 tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
5592 wrap = wrapMap[ tag ] || wrapMap._default;
5593
5594 tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
5595
5596 // Descend through wrappers to the right content
5597 j = wrap[0];
5598 while ( j-- ) {
5599 tmp = tmp.lastChild;
5600 }
5601
5602 // Manually add leading whitespace removed by IE
5603 if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
5604 nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
5605 }
5606
5607 // Remove IE's autoinserted <tbody> from table fragments
5608 if ( !support.tbody ) {
5609
5610 // String was a <table>, *may* have spurious <tbody>
5611 elem = tag === "table" && !rtbody.test( elem ) ?
5612 tmp.firstChild :
5613
5614 // String was a bare <thead> or <tfoot>
5615 wrap[1] === "<table>" && !rtbody.test( elem ) ?
5616 tmp :
5617 0;
5618
5619 j = elem && elem.childNodes.length;
5620 while ( j-- ) {
5621 if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
5622 elem.removeChild( tbody );
5623 }
5624 }
5625 }
5626
5627 jQuery.merge( nodes, tmp.childNodes );
5628
5629 // Fix #12392 for WebKit and IE > 9
5630 tmp.textContent = "";
5631
5632 // Fix #12392 for oldIE
5633 while ( tmp.firstChild ) {
5634 tmp.removeChild( tmp.firstChild );
5635 }
5636
5637 // Remember the top-level container for proper cleanup
5638 tmp = safe.lastChild;
5639 }
5640 }
5641 }
5642
5643 // Fix #11356: Clear elements from fragment
5644 if ( tmp ) {
5645 safe.removeChild( tmp );
5646 }
5647
5648 // Reset defaultChecked for any radios and checkboxes
5649 // about to be appended to the DOM in IE 6/7 (#8060)
5650 if ( !support.appendChecked ) {
5651 jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
5652 }
5653
5654 i = 0;
5655 while ( (elem = nodes[ i++ ]) ) {
5656
5657 // #4087 - If origin and destination elements are the same, and this is
5658 // that element, do not do anything
5659 if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
5660 continue;
5661 }
5662
5663 contains = jQuery.contains( elem.ownerDocument, elem );
5664
5665 // Append to fragment
5666 tmp = getAll( safe.appendChild( elem ), "script" );
5667
5668 // Preserve script evaluation history
5669 if ( contains ) {
5670 setGlobalEval( tmp );
5671 }
5672
5673 // Capture executables
5674 if ( scripts ) {
5675 j = 0;
5676 while ( (elem = tmp[ j++ ]) ) {
5677 if ( rscriptType.test( elem.type || "" ) ) {
5678 scripts.push( elem );
5679 }
5680 }
5681 }
5682 }
5683
5684 tmp = null;
5685
5686 return safe;
5687 },
5688
5689 cleanData: function( elems, /* internal */ acceptData ) {
5690 var elem, type, id, data,
5691 i = 0,
5692 internalKey = jQuery.expando,
5693 cache = jQuery.cache,
5694 deleteExpando = support.deleteExpando,
5695 special = jQuery.event.special;
5696
5697 for ( ; (elem = elems[i]) != null; i++ ) {
5698 if ( acceptData || jQuery.acceptData( elem ) ) {
5699
5700 id = elem[ internalKey ];
5701 data = id && cache[ id ];
5702
5703 if ( data ) {
5704 if ( data.events ) {
5705 for ( type in data.events ) {
5706 if ( special[ type ] ) {
5707 jQuery.event.remove( elem, type );
5708
5709 // This is a shortcut to avoid jQuery.event.remove's overhead
5710 } else {
5711 jQuery.removeEvent( elem, type, data.handle );
5712 }
5713 }
5714 }
5715
5716 // Remove cache only if it was not already removed by jQuery.event.remove
5717 if ( cache[ id ] ) {
5718
5719 delete cache[ id ];
5720
5721 // IE does not allow us to delete expando properties from nodes,
5722 // nor does it have a removeAttribute function on Document nodes;
5723 // we must handle all of these cases
5724 if ( deleteExpando ) {
5725 delete elem[ internalKey ];
5726
5727 } else if ( typeof elem.removeAttribute !== strundefined ) {
5728 elem.removeAttribute( internalKey );
5729
5730 } else {
5731 elem[ internalKey ] = null;
5732 }
5733
5734 deletedIds.push( id );
5735 }
5736 }
5737 }
5738 }
5739 }
5740 });
5741
5742 jQuery.fn.extend({
5743 text: function( value ) {
5744 return access( this, function( value ) {
5745 return value === undefined ?
5746 jQuery.text( this ) :
5747 this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
5748 }, null, value, arguments.length );
5749 },
5750
5751 append: function() {
5752 return this.domManip( arguments, function( elem ) {
5753 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5754 var target = manipulationTarget( this, elem );
5755 target.appendChild( elem );
5756 }
5757 });
5758 },
5759
5760 prepend: function() {
5761 return this.domManip( arguments, function( elem ) {
5762 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
5763 var target = manipulationTarget( this, elem );
5764 target.insertBefore( elem, target.firstChild );
5765 }
5766 });
5767 },
5768
5769 before: function() {
5770 return this.domManip( arguments, function( elem ) {
5771 if ( this.parentNode ) {
5772 this.parentNode.insertBefore( elem, this );
5773 }
5774 });
5775 },
5776
5777 after: function() {
5778 return this.domManip( arguments, function( elem ) {
5779 if ( this.parentNode ) {
5780 this.parentNode.insertBefore( elem, this.nextSibling );
5781 }
5782 });
5783 },
5784
5785 remove: function( selector, keepData /* Internal Use Only */ ) {
5786 var elem,
5787 elems = selector ? jQuery.filter( selector, this ) : this,
5788 i = 0;
5789
5790 for ( ; (elem = elems[i]) != null; i++ ) {
5791
5792 if ( !keepData && elem.nodeType === 1 ) {
5793 jQuery.cleanData( getAll( elem ) );
5794 }
5795
5796 if ( elem.parentNode ) {
5797 if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
5798 setGlobalEval( getAll( elem, "script" ) );
5799 }
5800 elem.parentNode.removeChild( elem );
5801 }
5802 }
5803
5804 return this;
5805 },
5806
5807 empty: function() {
5808 var elem,
5809 i = 0;
5810
5811 for ( ; (elem = this[i]) != null; i++ ) {
5812 // Remove element nodes and prevent memory leaks
5813 if ( elem.nodeType === 1 ) {
5814 jQuery.cleanData( getAll( elem, false ) );
5815 }
5816
5817 // Remove any remaining nodes
5818 while ( elem.firstChild ) {
5819 elem.removeChild( elem.firstChild );
5820 }
5821
5822 // If this is a select, ensure that it displays empty (#12336)
5823 // Support: IE<9
5824 if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
5825 elem.options.length = 0;
5826 }
5827 }
5828
5829 return this;
5830 },
5831
5832 clone: function( dataAndEvents, deepDataAndEvents ) {
5833 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5834 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5835
5836 return this.map(function() {
5837 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
5838 });
5839 },
5840
5841 html: function( value ) {
5842 return access( this, function( value ) {
5843 var elem = this[ 0 ] || {},
5844 i = 0,
5845 l = this.length;
5846
5847 if ( value === undefined ) {
5848 return elem.nodeType === 1 ?
5849 elem.innerHTML.replace( rinlinejQuery, "" ) :
5850 undefined;
5851 }
5852
5853 // See if we can take a shortcut and just use innerHTML
5854 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
5855 ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
5856 ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
5857 !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
5858
5859 value = value.replace( rxhtmlTag, "<$1></$2>" );
5860
5861 try {
5862 for (; i < l; i++ ) {
5863 // Remove element nodes and prevent memory leaks
5864 elem = this[i] || {};
5865 if ( elem.nodeType === 1 ) {
5866 jQuery.cleanData( getAll( elem, false ) );
5867 elem.innerHTML = value;
5868 }
5869 }
5870
5871 elem = 0;
5872
5873 // If using innerHTML throws an exception, use the fallback method
5874 } catch(e) {}
5875 }
5876
5877 if ( elem ) {
5878 this.empty().append( value );
5879 }
5880 }, null, value, arguments.length );
5881 },
5882
5883 replaceWith: function() {
5884 var arg = arguments[ 0 ];
5885
5886 // Make the changes, replacing each context element with the new content
5887 this.domManip( arguments, function( elem ) {
5888 arg = this.parentNode;
5889
5890 jQuery.cleanData( getAll( this ) );
5891
5892 if ( arg ) {
5893 arg.replaceChild( elem, this );
5894 }
5895 });
5896
5897 // Force removal if there was no new content (e.g., from empty arguments)
5898 return arg && (arg.length || arg.nodeType) ? this : this.remove();
5899 },
5900
5901 detach: function( selector ) {
5902 return this.remove( selector, true );
5903 },
5904
5905 domManip: function( args, callback ) {
5906
5907 // Flatten any nested arrays
5908 args = concat.apply( [], args );
5909
5910 var first, node, hasScripts,
5911 scripts, doc, fragment,
5912 i = 0,
5913 l = this.length,
5914 set = this,
5915 iNoClone = l - 1,
5916 value = args[0],
5917 isFunction = jQuery.isFunction( value );
5918
5919 // We can't cloneNode fragments that contain checked, in WebKit
5920 if ( isFunction ||
5921 ( l > 1 && typeof value === "string" &&
5922 !support.checkClone && rchecked.test( value ) ) ) {
5923 return this.each(function( index ) {
5924 var self = set.eq( index );
5925 if ( isFunction ) {
5926 args[0] = value.call( this, index, self.html() );
5927 }
5928 self.domManip( args, callback );
5929 });
5930 }
5931
5932 if ( l ) {
5933 fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
5934 first = fragment.firstChild;
5935
5936 if ( fragment.childNodes.length === 1 ) {
5937 fragment = first;
5938 }
5939
5940 if ( first ) {
5941 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
5942 hasScripts = scripts.length;
5943
5944 // Use the original fragment for the last item instead of the first because it can end up
5945 // being emptied incorrectly in certain situations (#8070).
5946 for ( ; i < l; i++ ) {
5947 node = fragment;
5948
5949 if ( i !== iNoClone ) {
5950 node = jQuery.clone( node, true, true );
5951
5952 // Keep references to cloned scripts for later restoration
5953 if ( hasScripts ) {
5954 jQuery.merge( scripts, getAll( node, "script" ) );
5955 }
5956 }
5957
5958 callback.call( this[i], node, i );
5959 }
5960
5961 if ( hasScripts ) {
5962 doc = scripts[ scripts.length - 1 ].ownerDocument;
5963
5964 // Reenable scripts
5965 jQuery.map( scripts, restoreScript );
5966
5967 // Evaluate executable scripts on first document insertion
5968 for ( i = 0; i < hasScripts; i++ ) {
5969 node = scripts[ i ];
5970 if ( rscriptType.test( node.type || "" ) &&
5971 !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
5972
5973 if ( node.src ) {
5974 // Optional AJAX dependency, but won't run scripts if not present
5975 if ( jQuery._evalUrl ) {
5976 jQuery._evalUrl( node.src );
5977 }
5978 } else {
5979 jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
5980 }
5981 }
5982 }
5983 }
5984
5985 // Fix #11809: Avoid leaking memory
5986 fragment = first = null;
5987 }
5988 }
5989
5990 return this;
5991 }
5992 });
5993
5994 jQuery.each({
5995 appendTo: "append",
5996 prependTo: "prepend",
5997 insertBefore: "before",
5998 insertAfter: "after",
5999 replaceAll: "replaceWith"
6000 }, function( name, original ) {
6001 jQuery.fn[ name ] = function( selector ) {
6002 var elems,
6003 i = 0,
6004 ret = [],
6005 insert = jQuery( selector ),
6006 last = insert.length - 1;
6007
6008 for ( ; i <= last; i++ ) {
6009 elems = i === last ? this : this.clone(true);
6010 jQuery( insert[i] )[ original ]( elems );
6011
6012 // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
6013 push.apply( ret, elems.get() );
6014 }
6015
6016 return this.pushStack( ret );
6017 };
6018 });
6019
6020
6021 var iframe,
6022 elemdisplay = {};
6023
6024 /**
6025 * Retrieve the actual display of a element
6026 * @param {String} name nodeName of the element
6027 * @param {Object} doc Document object
6028 */
6029 // Called only from within defaultDisplay
6030 function actualDisplay( name, doc ) {
6031 var style,
6032 elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
6033
6034 // getDefaultComputedStyle might be reliably used only on attached element
6035 display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
6036
6037 // Use of this method is a temporary fix (more like optmization) until something better comes along,
6038 // since it was removed from specification and supported only in FF
6039 style.display : jQuery.css( elem[ 0 ], "display" );
6040
6041 // We don't have any data stored on the element,
6042 // so use "detach" method as fast way to get rid of the element
6043 elem.detach();
6044
6045 return display;
6046 }
6047
6048 /**
6049 * Try to determine the default display value of an element
6050 * @param {String} nodeName
6051 */
6052 function defaultDisplay( nodeName ) {
6053 var doc = document,
6054 display = elemdisplay[ nodeName ];
6055
6056 if ( !display ) {
6057 display = actualDisplay( nodeName, doc );
6058
6059 // If the simple way fails, read from inside an iframe
6060 if ( display === "none" || !display ) {
6061
6062 // Use the already-created iframe if possible
6063 iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
6064
6065 // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
6066 doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
6067
6068 // Support: IE
6069 doc.write();
6070 doc.close();
6071
6072 display = actualDisplay( nodeName, doc );
6073 iframe.detach();
6074 }
6075
6076 // Store the correct default display
6077 elemdisplay[ nodeName ] = display;
6078 }
6079
6080 return display;
6081 }
6082
6083
6084 (function() {
6085 var shrinkWrapBlocksVal;
6086
6087 support.shrinkWrapBlocks = function() {
6088 if ( shrinkWrapBlocksVal != null ) {
6089 return shrinkWrapBlocksVal;
6090 }
6091
6092 // Will be changed later if needed.
6093 shrinkWrapBlocksVal = false;
6094
6095 // Minified: var b,c,d
6096 var div, body, container;
6097
6098 body = document.getElementsByTagName( "body" )[ 0 ];
6099 if ( !body || !body.style ) {
6100 // Test fired too early or in an unsupported environment, exit.
6101 return;
6102 }
6103
6104 // Setup
6105 div = document.createElement( "div" );
6106 container = document.createElement( "div" );
6107 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
6108 body.appendChild( container ).appendChild( div );
6109
6110 // Support: IE6
6111 // Check if elements with layout shrink-wrap their children
6112 if ( typeof div.style.zoom !== strundefined ) {
6113 // Reset CSS: box-sizing; display; margin; border
6114 div.style.cssText =
6115 // Support: Firefox<29, Android 2.3
6116 // Vendor-prefix box-sizing
6117 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
6118 "box-sizing:content-box;display:block;margin:0;border:0;" +
6119 "padding:1px;width:1px;zoom:1";
6120 div.appendChild( document.createElement( "div" ) ).style.width = "5px";
6121 shrinkWrapBlocksVal = div.offsetWidth !== 3;
6122 }
6123
6124 body.removeChild( container );
6125
6126 return shrinkWrapBlocksVal;
6127 };
6128
6129 })();
6130 var rmargin = (/^margin/);
6131
6132 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6133
6134
6135
6136 var getStyles, curCSS,
6137 rposition = /^(top|right|bottom|left)$/;
6138
6139 if ( window.getComputedStyle ) {
6140 getStyles = function( elem ) {
6141 // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
6142 // IE throws on elements created in popups
6143 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6144 if ( elem.ownerDocument.defaultView.opener ) {
6145 return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
6146 }
6147
6148 return window.getComputedStyle( elem, null );
6149 };
6150
6151 curCSS = function( elem, name, computed ) {
6152 var width, minWidth, maxWidth, ret,
6153 style = elem.style;
6154
6155 computed = computed || getStyles( elem );
6156
6157 // getPropertyValue is only needed for .css('filter') in IE9, see #12537
6158 ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
6159
6160 if ( computed ) {
6161
6162 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
6163 ret = jQuery.style( elem, name );
6164 }
6165
6166 // A tribute to the "awesome hack by Dean Edwards"
6167 // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
6168 // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
6169 // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
6170 if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
6171
6172 // Remember the original values
6173 width = style.width;
6174 minWidth = style.minWidth;
6175 maxWidth = style.maxWidth;
6176
6177 // Put in the new values to get a computed value out
6178 style.minWidth = style.maxWidth = style.width = ret;
6179 ret = computed.width;
6180
6181 // Revert the changed values
6182 style.width = width;
6183 style.minWidth = minWidth;
6184 style.maxWidth = maxWidth;
6185 }
6186 }
6187
6188 // Support: IE
6189 // IE returns zIndex value as an integer.
6190 return ret === undefined ?
6191 ret :
6192 ret + "";
6193 };
6194 } else if ( document.documentElement.currentStyle ) {
6195 getStyles = function( elem ) {
6196 return elem.currentStyle;
6197 };
6198
6199 curCSS = function( elem, name, computed ) {
6200 var left, rs, rsLeft, ret,
6201 style = elem.style;
6202
6203 computed = computed || getStyles( elem );
6204 ret = computed ? computed[ name ] : undefined;
6205
6206 // Avoid setting ret to empty string here
6207 // so we don't default to auto
6208 if ( ret == null && style && style[ name ] ) {
6209 ret = style[ name ];
6210 }
6211
6212 // From the awesome hack by Dean Edwards
6213 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
6214
6215 // If we're not dealing with a regular pixel number
6216 // but a number that has a weird ending, we need to convert it to pixels
6217 // but not position css attributes, as those are proportional to the parent element instead
6218 // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
6219 if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
6220
6221 // Remember the original values
6222 left = style.left;
6223 rs = elem.runtimeStyle;
6224 rsLeft = rs && rs.left;
6225
6226 // Put in the new values to get a computed value out
6227 if ( rsLeft ) {
6228 rs.left = elem.currentStyle.left;
6229 }
6230 style.left = name === "fontSize" ? "1em" : ret;
6231 ret = style.pixelLeft + "px";
6232
6233 // Revert the changed values
6234 style.left = left;
6235 if ( rsLeft ) {
6236 rs.left = rsLeft;
6237 }
6238 }
6239
6240 // Support: IE
6241 // IE returns zIndex value as an integer.
6242 return ret === undefined ?
6243 ret :
6244 ret + "" || "auto";
6245 };
6246 }
6247
6248
6249
6250
6251 function addGetHookIf( conditionFn, hookFn ) {
6252 // Define the hook, we'll check on the first run if it's really needed.
6253 return {
6254 get: function() {
6255 var condition = conditionFn();
6256
6257 if ( condition == null ) {
6258 // The test was not ready at this point; screw the hook this time
6259 // but check again when needed next time.
6260 return;
6261 }
6262
6263 if ( condition ) {
6264 // Hook not needed (or it's not possible to use it due to missing dependency),
6265 // remove it.
6266 // Since there are no other hooks for marginRight, remove the whole object.
6267 delete this.get;
6268 return;
6269 }
6270
6271 // Hook needed; redefine it so that the support test is not executed again.
6272
6273 return (this.get = hookFn).apply( this, arguments );
6274 }
6275 };
6276 }
6277
6278
6279 (function() {
6280 // Minified: var b,c,d,e,f,g, h,i
6281 var div, style, a, pixelPositionVal, boxSizingReliableVal,
6282 reliableHiddenOffsetsVal, reliableMarginRightVal;
6283
6284 // Setup
6285 div = document.createElement( "div" );
6286 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
6287 a = div.getElementsByTagName( "a" )[ 0 ];
6288 style = a && a.style;
6289
6290 // Finish early in limited (non-browser) environments
6291 if ( !style ) {
6292 return;
6293 }
6294
6295 style.cssText = "float:left;opacity:.5";
6296
6297 // Support: IE<9
6298 // Make sure that element opacity exists (as opposed to filter)
6299 support.opacity = style.opacity === "0.5";
6300
6301 // Verify style float existence
6302 // (IE uses styleFloat instead of cssFloat)
6303 support.cssFloat = !!style.cssFloat;
6304
6305 div.style.backgroundClip = "content-box";
6306 div.cloneNode( true ).style.backgroundClip = "";
6307 support.clearCloneStyle = div.style.backgroundClip === "content-box";
6308
6309 // Support: Firefox<29, Android 2.3
6310 // Vendor-prefix box-sizing
6311 support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
6312 style.WebkitBoxSizing === "";
6313
6314 jQuery.extend(support, {
6315 reliableHiddenOffsets: function() {
6316 if ( reliableHiddenOffsetsVal == null ) {
6317 computeStyleTests();
6318 }
6319 return reliableHiddenOffsetsVal;
6320 },
6321
6322 boxSizingReliable: function() {
6323 if ( boxSizingReliableVal == null ) {
6324 computeStyleTests();
6325 }
6326 return boxSizingReliableVal;
6327 },
6328
6329 pixelPosition: function() {
6330 if ( pixelPositionVal == null ) {
6331 computeStyleTests();
6332 }
6333 return pixelPositionVal;
6334 },
6335
6336 // Support: Android 2.3
6337 reliableMarginRight: function() {
6338 if ( reliableMarginRightVal == null ) {
6339 computeStyleTests();
6340 }
6341 return reliableMarginRightVal;
6342 }
6343 });
6344
6345 function computeStyleTests() {
6346 // Minified: var b,c,d,j
6347 var div, body, container, contents;
6348
6349 body = document.getElementsByTagName( "body" )[ 0 ];
6350 if ( !body || !body.style ) {
6351 // Test fired too early or in an unsupported environment, exit.
6352 return;
6353 }
6354
6355 // Setup
6356 div = document.createElement( "div" );
6357 container = document.createElement( "div" );
6358 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
6359 body.appendChild( container ).appendChild( div );
6360
6361 div.style.cssText =
6362 // Support: Firefox<29, Android 2.3
6363 // Vendor-prefix box-sizing
6364 "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
6365 "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
6366 "border:1px;padding:1px;width:4px;position:absolute";
6367
6368 // Support: IE<9
6369 // Assume reasonable values in the absence of getComputedStyle
6370 pixelPositionVal = boxSizingReliableVal = false;
6371 reliableMarginRightVal = true;
6372
6373 // Check for getComputedStyle so that this code is not run in IE<9.
6374 if ( window.getComputedStyle ) {
6375 pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
6376 boxSizingReliableVal =
6377 ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
6378
6379 // Support: Android 2.3
6380 // Div with explicit width and no margin-right incorrectly
6381 // gets computed margin-right based on width of container (#3333)
6382 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
6383 contents = div.appendChild( document.createElement( "div" ) );
6384
6385 // Reset CSS: box-sizing; display; margin; border; padding
6386 contents.style.cssText = div.style.cssText =
6387 // Support: Firefox<29, Android 2.3
6388 // Vendor-prefix box-sizing
6389 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
6390 "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
6391 contents.style.marginRight = contents.style.width = "0";
6392 div.style.width = "1px";
6393
6394 reliableMarginRightVal =
6395 !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
6396
6397 div.removeChild( contents );
6398 }
6399
6400 // Support: IE8
6401 // Check if table cells still have offsetWidth/Height when they are set
6402 // to display:none and there are still other visible table cells in a
6403 // table row; if so, offsetWidth/Height are not reliable for use when
6404 // determining if an element has been hidden directly using
6405 // display:none (it is still safe to use offsets if a parent element is
6406 // hidden; don safety goggles and see bug #4512 for more information).
6407 div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
6408 contents = div.getElementsByTagName( "td" );
6409 contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
6410 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
6411 if ( reliableHiddenOffsetsVal ) {
6412 contents[ 0 ].style.display = "";
6413 contents[ 1 ].style.display = "none";
6414 reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
6415 }
6416
6417 body.removeChild( container );
6418 }
6419
6420 })();
6421
6422
6423 // A method for quickly swapping in/out CSS properties to get correct calculations.
6424 jQuery.swap = function( elem, options, callback, args ) {
6425 var ret, name,
6426 old = {};
6427
6428 // Remember the old values, and insert the new ones
6429 for ( name in options ) {
6430 old[ name ] = elem.style[ name ];
6431 elem.style[ name ] = options[ name ];
6432 }
6433
6434 ret = callback.apply( elem, args || [] );
6435
6436 // Revert the old values
6437 for ( name in options ) {
6438 elem.style[ name ] = old[ name ];
6439 }
6440
6441 return ret;
6442 };
6443
6444
6445 var
6446 ralpha = /alpha\([^)]*\)/i,
6447 ropacity = /opacity\s*=\s*([^)]*)/,
6448
6449 // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
6450 // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6451 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6452 rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
6453 rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
6454
6455 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6456 cssNormalTransform = {
6457 letterSpacing: "0",
6458 fontWeight: "400"
6459 },
6460
6461 cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
6462
6463
6464 // return a css property mapped to a potentially vendor prefixed property
6465 function vendorPropName( style, name ) {
6466
6467 // shortcut for names that are not vendor prefixed
6468 if ( name in style ) {
6469 return name;
6470 }
6471
6472 // check for vendor prefixed names
6473 var capName = name.charAt(0).toUpperCase() + name.slice(1),
6474 origName = name,
6475 i = cssPrefixes.length;
6476
6477 while ( i-- ) {
6478 name = cssPrefixes[ i ] + capName;
6479 if ( name in style ) {
6480 return name;
6481 }
6482 }
6483
6484 return origName;
6485 }
6486
6487 function showHide( elements, show ) {
6488 var display, elem, hidden,
6489 values = [],
6490 index = 0,
6491 length = elements.length;
6492
6493 for ( ; index < length; index++ ) {
6494 elem = elements[ index ];
6495 if ( !elem.style ) {
6496 continue;
6497 }
6498
6499 values[ index ] = jQuery._data( elem, "olddisplay" );
6500 display = elem.style.display;
6501 if ( show ) {
6502 // Reset the inline display of this element to learn if it is
6503 // being hidden by cascaded rules or not
6504 if ( !values[ index ] && display === "none" ) {
6505 elem.style.display = "";
6506 }
6507
6508 // Set elements which have been overridden with display: none
6509 // in a stylesheet to whatever the default browser style is
6510 // for such an element
6511 if ( elem.style.display === "" && isHidden( elem ) ) {
6512 values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
6513 }
6514 } else {
6515 hidden = isHidden( elem );
6516
6517 if ( display && display !== "none" || !hidden ) {
6518 jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
6519 }
6520 }
6521 }
6522
6523 // Set the display of most of the elements in a second loop
6524 // to avoid the constant reflow
6525 for ( index = 0; index < length; index++ ) {
6526 elem = elements[ index ];
6527 if ( !elem.style ) {
6528 continue;
6529 }
6530 if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
6531 elem.style.display = show ? values[ index ] || "" : "none";
6532 }
6533 }
6534
6535 return elements;
6536 }
6537
6538 function setPositiveNumber( elem, value, subtract ) {
6539 var matches = rnumsplit.exec( value );
6540 return matches ?
6541 // Guard against undefined "subtract", e.g., when used as in cssHooks
6542 Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
6543 value;
6544 }
6545
6546 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
6547 var i = extra === ( isBorderBox ? "border" : "content" ) ?
6548 // If we already have the right measurement, avoid augmentation
6549 4 :
6550 // Otherwise initialize for horizontal or vertical properties
6551 name === "width" ? 1 : 0,
6552
6553 val = 0;
6554
6555 for ( ; i < 4; i += 2 ) {
6556 // both box models exclude margin, so add it if we want it
6557 if ( extra === "margin" ) {
6558 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
6559 }
6560
6561 if ( isBorderBox ) {
6562 // border-box includes padding, so remove it if we want content
6563 if ( extra === "content" ) {
6564 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6565 }
6566
6567 // at this point, extra isn't border nor margin, so remove border
6568 if ( extra !== "margin" ) {
6569 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6570 }
6571 } else {
6572 // at this point, extra isn't content, so add padding
6573 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6574
6575 // at this point, extra isn't content nor padding, so add border
6576 if ( extra !== "padding" ) {
6577 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6578 }
6579 }
6580 }
6581
6582 return val;
6583 }
6584
6585 function getWidthOrHeight( elem, name, extra ) {
6586
6587 // Start with offset property, which is equivalent to the border-box value
6588 var valueIsBorderBox = true,
6589 val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
6590 styles = getStyles( elem ),
6591 isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
6592
6593 // some non-html elements return undefined for offsetWidth, so check for null/undefined
6594 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
6595 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
6596 if ( val <= 0 || val == null ) {
6597 // Fall back to computed then uncomputed css if necessary
6598 val = curCSS( elem, name, styles );
6599 if ( val < 0 || val == null ) {
6600 val = elem.style[ name ];
6601 }
6602
6603 // Computed unit is not pixels. Stop here and return.
6604 if ( rnumnonpx.test(val) ) {
6605 return val;
6606 }
6607
6608 // we need the check for style in case a browser which returns unreliable values
6609 // for getComputedStyle silently falls back to the reliable elem.style
6610 valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
6611
6612 // Normalize "", auto, and prepare for extra
6613 val = parseFloat( val ) || 0;
6614 }
6615
6616 // use the active box-sizing model to add/subtract irrelevant styles
6617 return ( val +
6618 augmentWidthOrHeight(
6619 elem,
6620 name,
6621 extra || ( isBorderBox ? "border" : "content" ),
6622 valueIsBorderBox,
6623 styles
6624 )
6625 ) + "px";
6626 }
6627
6628 jQuery.extend({
6629 // Add in style property hooks for overriding the default
6630 // behavior of getting and setting a style property
6631 cssHooks: {
6632 opacity: {
6633 get: function( elem, computed ) {
6634 if ( computed ) {
6635 // We should always get a number back from opacity
6636 var ret = curCSS( elem, "opacity" );
6637 return ret === "" ? "1" : ret;
6638 }
6639 }
6640 }
6641 },
6642
6643 // Don't automatically add "px" to these possibly-unitless properties
6644 cssNumber: {
6645 "columnCount": true,
6646 "fillOpacity": true,
6647 "flexGrow": true,
6648 "flexShrink": true,
6649 "fontWeight": true,
6650 "lineHeight": true,
6651 "opacity": true,
6652 "order": true,
6653 "orphans": true,
6654 "widows": true,
6655 "zIndex": true,
6656 "zoom": true
6657 },
6658
6659 // Add in properties whose names you wish to fix before
6660 // setting or getting the value
6661 cssProps: {
6662 // normalize float css property
6663 "float": support.cssFloat ? "cssFloat" : "styleFloat"
6664 },
6665
6666 // Get and set the style property on a DOM Node
6667 style: function( elem, name, value, extra ) {
6668 // Don't set styles on text and comment nodes
6669 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6670 return;
6671 }
6672
6673 // Make sure that we're working with the right name
6674 var ret, type, hooks,
6675 origName = jQuery.camelCase( name ),
6676 style = elem.style;
6677
6678 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
6679
6680 // gets hook for the prefixed version
6681 // followed by the unprefixed version
6682 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6683
6684 // Check if we're setting a value
6685 if ( value !== undefined ) {
6686 type = typeof value;
6687
6688 // convert relative number strings (+= or -=) to relative numbers. #7345
6689 if ( type === "string" && (ret = rrelNum.exec( value )) ) {
6690 value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
6691 // Fixes bug #9237
6692 type = "number";
6693 }
6694
6695 // Make sure that null and NaN values aren't set. See: #7116
6696 if ( value == null || value !== value ) {
6697 return;
6698 }
6699
6700 // If a number was passed in, add 'px' to the (except for certain CSS properties)
6701 if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
6702 value += "px";
6703 }
6704
6705 // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
6706 // but it would mean to define eight (for every problematic property) identical functions
6707 if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
6708 style[ name ] = "inherit";
6709 }
6710
6711 // If a hook was provided, use that value, otherwise just set the specified value
6712 if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
6713
6714 // Support: IE
6715 // Swallow errors from 'invalid' CSS values (#5509)
6716 try {
6717 style[ name ] = value;
6718 } catch(e) {}
6719 }
6720
6721 } else {
6722 // If a hook was provided get the non-computed value from there
6723 if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
6724 return ret;
6725 }
6726
6727 // Otherwise just get the value from the style object
6728 return style[ name ];
6729 }
6730 },
6731
6732 css: function( elem, name, extra, styles ) {
6733 var num, val, hooks,
6734 origName = jQuery.camelCase( name );
6735
6736 // Make sure that we're working with the right name
6737 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
6738
6739 // gets hook for the prefixed version
6740 // followed by the unprefixed version
6741 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6742
6743 // If a hook was provided get the computed value from there
6744 if ( hooks && "get" in hooks ) {
6745 val = hooks.get( elem, true, extra );
6746 }
6747
6748 // Otherwise, if a way to get the computed value exists, use that
6749 if ( val === undefined ) {
6750 val = curCSS( elem, name, styles );
6751 }
6752
6753 //convert "normal" to computed value
6754 if ( val === "normal" && name in cssNormalTransform ) {
6755 val = cssNormalTransform[ name ];
6756 }
6757
6758 // Return, converting to number if forced or a qualifier was provided and val looks numeric
6759 if ( extra === "" || extra ) {
6760 num = parseFloat( val );
6761 return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
6762 }
6763 return val;
6764 }
6765 });
6766
6767 jQuery.each([ "height", "width" ], function( i, name ) {
6768 jQuery.cssHooks[ name ] = {
6769 get: function( elem, computed, extra ) {
6770 if ( computed ) {
6771 // certain elements can have dimension info if we invisibly show them
6772 // however, it must have a current display style that would benefit from this
6773 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
6774 jQuery.swap( elem, cssShow, function() {
6775 return getWidthOrHeight( elem, name, extra );
6776 }) :
6777 getWidthOrHeight( elem, name, extra );
6778 }
6779 },
6780
6781 set: function( elem, value, extra ) {
6782 var styles = extra && getStyles( elem );
6783 return setPositiveNumber( elem, value, extra ?
6784 augmentWidthOrHeight(
6785 elem,
6786 name,
6787 extra,
6788 support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6789 styles
6790 ) : 0
6791 );
6792 }
6793 };
6794 });
6795
6796 if ( !support.opacity ) {
6797 jQuery.cssHooks.opacity = {
6798 get: function( elem, computed ) {
6799 // IE uses filters for opacity
6800 return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
6801 ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
6802 computed ? "1" : "";
6803 },
6804
6805 set: function( elem, value ) {
6806 var style = elem.style,
6807 currentStyle = elem.currentStyle,
6808 opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
6809 filter = currentStyle && currentStyle.filter || style.filter || "";
6810
6811 // IE has trouble with opacity if it does not have layout
6812 // Force it by setting the zoom level
6813 style.zoom = 1;
6814
6815 // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
6816 // if value === "", then remove inline opacity #12685
6817 if ( ( value >= 1 || value === "" ) &&
6818 jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
6819 style.removeAttribute ) {
6820
6821 // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
6822 // if "filter:" is present at all, clearType is disabled, we want to avoid this
6823 // style.removeAttribute is IE Only, but so apparently is this code path...
6824 style.removeAttribute( "filter" );
6825
6826 // if there is no filter style applied in a css rule or unset inline opacity, we are done
6827 if ( value === "" || currentStyle && !currentStyle.filter ) {
6828 return;
6829 }
6830 }
6831
6832 // otherwise, set new filter values
6833 style.filter = ralpha.test( filter ) ?
6834 filter.replace( ralpha, opacity ) :
6835 filter + " " + opacity;
6836 }
6837 };
6838 }
6839
6840 jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
6841 function( elem, computed ) {
6842 if ( computed ) {
6843 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
6844 // Work around by temporarily setting element display to inline-block
6845 return jQuery.swap( elem, { "display": "inline-block" },
6846 curCSS, [ elem, "marginRight" ] );
6847 }
6848 }
6849 );
6850
6851 // These hooks are used by animate to expand properties
6852 jQuery.each({
6853 margin: "",
6854 padding: "",
6855 border: "Width"
6856 }, function( prefix, suffix ) {
6857 jQuery.cssHooks[ prefix + suffix ] = {
6858 expand: function( value ) {
6859 var i = 0,
6860 expanded = {},
6861
6862 // assumes a single number if not a string
6863 parts = typeof value === "string" ? value.split(" ") : [ value ];
6864
6865 for ( ; i < 4; i++ ) {
6866 expanded[ prefix + cssExpand[ i ] + suffix ] =
6867 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
6868 }
6869
6870 return expanded;
6871 }
6872 };
6873
6874 if ( !rmargin.test( prefix ) ) {
6875 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
6876 }
6877 });
6878
6879 jQuery.fn.extend({
6880 css: function( name, value ) {
6881 return access( this, function( elem, name, value ) {
6882 var styles, len,
6883 map = {},
6884 i = 0;
6885
6886 if ( jQuery.isArray( name ) ) {
6887 styles = getStyles( elem );
6888 len = name.length;
6889
6890 for ( ; i < len; i++ ) {
6891 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
6892 }
6893
6894 return map;
6895 }
6896
6897 return value !== undefined ?
6898 jQuery.style( elem, name, value ) :
6899 jQuery.css( elem, name );
6900 }, name, value, arguments.length > 1 );
6901 },
6902 show: function() {
6903 return showHide( this, true );
6904 },
6905 hide: function() {
6906 return showHide( this );
6907 },
6908 toggle: function( state ) {
6909 if ( typeof state === "boolean" ) {
6910 return state ? this.show() : this.hide();
6911 }
6912
6913 return this.each(function() {
6914 if ( isHidden( this ) ) {
6915 jQuery( this ).show();
6916 } else {
6917 jQuery( this ).hide();
6918 }
6919 });
6920 }
6921 });
6922
6923
6924 function Tween( elem, options, prop, end, easing ) {
6925 return new Tween.prototype.init( elem, options, prop, end, easing );
6926 }
6927 jQuery.Tween = Tween;
6928
6929 Tween.prototype = {
6930 constructor: Tween,
6931 init: function( elem, options, prop, end, easing, unit ) {
6932 this.elem = elem;
6933 this.prop = prop;
6934 this.easing = easing || "swing";
6935 this.options = options;
6936 this.start = this.now = this.cur();
6937 this.end = end;
6938 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
6939 },
6940 cur: function() {
6941 var hooks = Tween.propHooks[ this.prop ];
6942
6943 return hooks && hooks.get ?
6944 hooks.get( this ) :
6945 Tween.propHooks._default.get( this );
6946 },
6947 run: function( percent ) {
6948 var eased,
6949 hooks = Tween.propHooks[ this.prop ];
6950
6951 if ( this.options.duration ) {
6952 this.pos = eased = jQuery.easing[ this.easing ](
6953 percent, this.options.duration * percent, 0, 1, this.options.duration
6954 );
6955 } else {
6956 this.pos = eased = percent;
6957 }
6958 this.now = ( this.end - this.start ) * eased + this.start;
6959
6960 if ( this.options.step ) {
6961 this.options.step.call( this.elem, this.now, this );
6962 }
6963
6964 if ( hooks && hooks.set ) {
6965 hooks.set( this );
6966 } else {
6967 Tween.propHooks._default.set( this );
6968 }
6969 return this;
6970 }
6971 };
6972
6973 Tween.prototype.init.prototype = Tween.prototype;
6974
6975 Tween.propHooks = {
6976 _default: {
6977 get: function( tween ) {
6978 var result;
6979
6980 if ( tween.elem[ tween.prop ] != null &&
6981 (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
6982 return tween.elem[ tween.prop ];
6983 }
6984
6985 // passing an empty string as a 3rd parameter to .css will automatically
6986 // attempt a parseFloat and fallback to a string if the parse fails
6987 // so, simple values such as "10px" are parsed to Float.
6988 // complex values such as "rotate(1rad)" are returned as is.
6989 result = jQuery.css( tween.elem, tween.prop, "" );
6990 // Empty strings, null, undefined and "auto" are converted to 0.
6991 return !result || result === "auto" ? 0 : result;
6992 },
6993 set: function( tween ) {
6994 // use step hook for back compat - use cssHook if its there - use .style if its
6995 // available and use plain properties where available
6996 if ( jQuery.fx.step[ tween.prop ] ) {
6997 jQuery.fx.step[ tween.prop ]( tween );
6998 } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
6999 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
7000 } else {
7001 tween.elem[ tween.prop ] = tween.now;
7002 }
7003 }
7004 }
7005 };
7006
7007 // Support: IE <=9
7008 // Panic based approach to setting things on disconnected nodes
7009
7010 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
7011 set: function( tween ) {
7012 if ( tween.elem.nodeType && tween.elem.parentNode ) {
7013 tween.elem[ tween.prop ] = tween.now;
7014 }
7015 }
7016 };
7017
7018 jQuery.easing = {
7019 linear: function( p ) {
7020 return p;
7021 },
7022 swing: function( p ) {
7023 return 0.5 - Math.cos( p * Math.PI ) / 2;
7024 }
7025 };
7026
7027 jQuery.fx = Tween.prototype.init;
7028
7029 // Back Compat <1.8 extension point
7030 jQuery.fx.step = {};
7031
7032
7033
7034
7035 var
7036 fxNow, timerId,
7037 rfxtypes = /^(?:toggle|show|hide)$/,
7038 rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
7039 rrun = /queueHooks$/,
7040 animationPrefilters = [ defaultPrefilter ],
7041 tweeners = {
7042 "*": [ function( prop, value ) {
7043 var tween = this.createTween( prop, value ),
7044 target = tween.cur(),
7045 parts = rfxnum.exec( value ),
7046 unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
7047
7048 // Starting value computation is required for potential unit mismatches
7049 start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
7050 rfxnum.exec( jQuery.css( tween.elem, prop ) ),
7051 scale = 1,
7052 maxIterations = 20;
7053
7054 if ( start && start[ 3 ] !== unit ) {
7055 // Trust units reported by jQuery.css
7056 unit = unit || start[ 3 ];
7057
7058 // Make sure we update the tween properties later on
7059 parts = parts || [];
7060
7061 // Iteratively approximate from a nonzero starting point
7062 start = +target || 1;
7063
7064 do {
7065 // If previous iteration zeroed out, double until we get *something*
7066 // Use a string for doubling factor so we don't accidentally see scale as unchanged below
7067 scale = scale || ".5";
7068
7069 // Adjust and apply
7070 start = start / scale;
7071 jQuery.style( tween.elem, prop, start + unit );
7072
7073 // Update scale, tolerating zero or NaN from tween.cur()
7074 // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
7075 } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
7076 }
7077
7078 // Update tween properties
7079 if ( parts ) {
7080 start = tween.start = +start || +target || 0;
7081 tween.unit = unit;
7082 // If a +=/-= token was provided, we're doing a relative animation
7083 tween.end = parts[ 1 ] ?
7084 start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
7085 +parts[ 2 ];
7086 }
7087
7088 return tween;
7089 } ]
7090 };
7091
7092 // Animations created synchronously will run synchronously
7093 function createFxNow() {
7094 setTimeout(function() {
7095 fxNow = undefined;
7096 });
7097 return ( fxNow = jQuery.now() );
7098 }
7099
7100 // Generate parameters to create a standard animation
7101 function genFx( type, includeWidth ) {
7102 var which,
7103 attrs = { height: type },
7104 i = 0;
7105
7106 // if we include width, step value is 1 to do all cssExpand values,
7107 // if we don't include width, step value is 2 to skip over Left and Right
7108 includeWidth = includeWidth ? 1 : 0;
7109 for ( ; i < 4 ; i += 2 - includeWidth ) {
7110 which = cssExpand[ i ];
7111 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
7112 }
7113
7114 if ( includeWidth ) {
7115 attrs.opacity = attrs.width = type;
7116 }
7117
7118 return attrs;
7119 }
7120
7121 function createTween( value, prop, animation ) {
7122 var tween,
7123 collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
7124 index = 0,
7125 length = collection.length;
7126 for ( ; index < length; index++ ) {
7127 if ( (tween = collection[ index ].call( animation, prop, value )) ) {
7128
7129 // we're done with this property
7130 return tween;
7131 }
7132 }
7133 }
7134
7135 function defaultPrefilter( elem, props, opts ) {
7136 /* jshint validthis: true */
7137 var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
7138 anim = this,
7139 orig = {},
7140 style = elem.style,
7141 hidden = elem.nodeType && isHidden( elem ),
7142 dataShow = jQuery._data( elem, "fxshow" );
7143
7144 // handle queue: false promises
7145 if ( !opts.queue ) {
7146 hooks = jQuery._queueHooks( elem, "fx" );
7147 if ( hooks.unqueued == null ) {
7148 hooks.unqueued = 0;
7149 oldfire = hooks.empty.fire;
7150 hooks.empty.fire = function() {
7151 if ( !hooks.unqueued ) {
7152 oldfire();
7153 }
7154 };
7155 }
7156 hooks.unqueued++;
7157
7158 anim.always(function() {
7159 // doing this makes sure that the complete handler will be called
7160 // before this completes
7161 anim.always(function() {
7162 hooks.unqueued--;
7163 if ( !jQuery.queue( elem, "fx" ).length ) {
7164 hooks.empty.fire();
7165 }
7166 });
7167 });
7168 }
7169
7170 // height/width overflow pass
7171 if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
7172 // Make sure that nothing sneaks out
7173 // Record all 3 overflow attributes because IE does not
7174 // change the overflow attribute when overflowX and
7175 // overflowY are set to the same value
7176 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
7177
7178 // Set display property to inline-block for height/width
7179 // animations on inline elements that are having width/height animated
7180 display = jQuery.css( elem, "display" );
7181
7182 // Test default display if display is currently "none"
7183 checkDisplay = display === "none" ?
7184 jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
7185
7186 if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
7187
7188 // inline-level elements accept inline-block;
7189 // block-level elements need to be inline with layout
7190 if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
7191 style.display = "inline-block";
7192 } else {
7193 style.zoom = 1;
7194 }
7195 }
7196 }
7197
7198 if ( opts.overflow ) {
7199 style.overflow = "hidden";
7200 if ( !support.shrinkWrapBlocks() ) {
7201 anim.always(function() {
7202 style.overflow = opts.overflow[ 0 ];
7203 style.overflowX = opts.overflow[ 1 ];
7204 style.overflowY = opts.overflow[ 2 ];
7205 });
7206 }
7207 }
7208
7209 // show/hide pass
7210 for ( prop in props ) {
7211 value = props[ prop ];
7212 if ( rfxtypes.exec( value ) ) {
7213 delete props[ prop ];
7214 toggle = toggle || value === "toggle";
7215 if ( value === ( hidden ? "hide" : "show" ) ) {
7216
7217 // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
7218 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
7219 hidden = true;
7220 } else {
7221 continue;
7222 }
7223 }
7224 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
7225
7226 // Any non-fx value stops us from restoring the original display value
7227 } else {
7228 display = undefined;
7229 }
7230 }
7231
7232 if ( !jQuery.isEmptyObject( orig ) ) {
7233 if ( dataShow ) {
7234 if ( "hidden" in dataShow ) {
7235 hidden = dataShow.hidden;
7236 }
7237 } else {
7238 dataShow = jQuery._data( elem, "fxshow", {} );
7239 }
7240
7241 // store state if its toggle - enables .stop().toggle() to "reverse"
7242 if ( toggle ) {
7243 dataShow.hidden = !hidden;
7244 }
7245 if ( hidden ) {
7246 jQuery( elem ).show();
7247 } else {
7248 anim.done(function() {
7249 jQuery( elem ).hide();
7250 });
7251 }
7252 anim.done(function() {
7253 var prop;
7254 jQuery._removeData( elem, "fxshow" );
7255 for ( prop in orig ) {
7256 jQuery.style( elem, prop, orig[ prop ] );
7257 }
7258 });
7259 for ( prop in orig ) {
7260 tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
7261
7262 if ( !( prop in dataShow ) ) {
7263 dataShow[ prop ] = tween.start;
7264 if ( hidden ) {
7265 tween.end = tween.start;
7266 tween.start = prop === "width" || prop === "height" ? 1 : 0;
7267 }
7268 }
7269 }
7270
7271 // If this is a noop like .hide().hide(), restore an overwritten display value
7272 } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
7273 style.display = display;
7274 }
7275 }
7276
7277 function propFilter( props, specialEasing ) {
7278 var index, name, easing, value, hooks;
7279
7280 // camelCase, specialEasing and expand cssHook pass
7281 for ( index in props ) {
7282 name = jQuery.camelCase( index );
7283 easing = specialEasing[ name ];
7284 value = props[ index ];
7285 if ( jQuery.isArray( value ) ) {
7286 easing = value[ 1 ];
7287 value = props[ index ] = value[ 0 ];
7288 }
7289
7290 if ( index !== name ) {
7291 props[ name ] = value;
7292 delete props[ index ];
7293 }
7294
7295 hooks = jQuery.cssHooks[ name ];
7296 if ( hooks && "expand" in hooks ) {
7297 value = hooks.expand( value );
7298 delete props[ name ];
7299
7300 // not quite $.extend, this wont overwrite keys already present.
7301 // also - reusing 'index' from above because we have the correct "name"
7302 for ( index in value ) {
7303 if ( !( index in props ) ) {
7304 props[ index ] = value[ index ];
7305 specialEasing[ index ] = easing;
7306 }
7307 }
7308 } else {
7309 specialEasing[ name ] = easing;
7310 }
7311 }
7312 }
7313
7314 function Animation( elem, properties, options ) {
7315 var result,
7316 stopped,
7317 index = 0,
7318 length = animationPrefilters.length,
7319 deferred = jQuery.Deferred().always( function() {
7320 // don't match elem in the :animated selector
7321 delete tick.elem;
7322 }),
7323 tick = function() {
7324 if ( stopped ) {
7325 return false;
7326 }
7327 var currentTime = fxNow || createFxNow(),
7328 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7329 // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
7330 temp = remaining / animation.duration || 0,
7331 percent = 1 - temp,
7332 index = 0,
7333 length = animation.tweens.length;
7334
7335 for ( ; index < length ; index++ ) {
7336 animation.tweens[ index ].run( percent );
7337 }
7338
7339 deferred.notifyWith( elem, [ animation, percent, remaining ]);
7340
7341 if ( percent < 1 && length ) {
7342 return remaining;
7343 } else {
7344 deferred.resolveWith( elem, [ animation ] );
7345 return false;
7346 }
7347 },
7348 animation = deferred.promise({
7349 elem: elem,
7350 props: jQuery.extend( {}, properties ),
7351 opts: jQuery.extend( true, { specialEasing: {} }, options ),
7352 originalProperties: properties,
7353 originalOptions: options,
7354 startTime: fxNow || createFxNow(),
7355 duration: options.duration,
7356 tweens: [],
7357 createTween: function( prop, end ) {
7358 var tween = jQuery.Tween( elem, animation.opts, prop, end,
7359 animation.opts.specialEasing[ prop ] || animation.opts.easing );
7360 animation.tweens.push( tween );
7361 return tween;
7362 },
7363 stop: function( gotoEnd ) {
7364 var index = 0,
7365 // if we are going to the end, we want to run all the tweens
7366 // otherwise we skip this part
7367 length = gotoEnd ? animation.tweens.length : 0;
7368 if ( stopped ) {
7369 return this;
7370 }
7371 stopped = true;
7372 for ( ; index < length ; index++ ) {
7373 animation.tweens[ index ].run( 1 );
7374 }
7375
7376 // resolve when we played the last frame
7377 // otherwise, reject
7378 if ( gotoEnd ) {
7379 deferred.resolveWith( elem, [ animation, gotoEnd ] );
7380 } else {
7381 deferred.rejectWith( elem, [ animation, gotoEnd ] );
7382 }
7383 return this;
7384 }
7385 }),
7386 props = animation.props;
7387
7388 propFilter( props, animation.opts.specialEasing );
7389
7390 for ( ; index < length ; index++ ) {
7391 result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
7392 if ( result ) {
7393 return result;
7394 }
7395 }
7396
7397 jQuery.map( props, createTween, animation );
7398
7399 if ( jQuery.isFunction( animation.opts.start ) ) {
7400 animation.opts.start.call( elem, animation );
7401 }
7402
7403 jQuery.fx.timer(
7404 jQuery.extend( tick, {
7405 elem: elem,
7406 anim: animation,
7407 queue: animation.opts.queue
7408 })
7409 );
7410
7411 // attach callbacks from options
7412 return animation.progress( animation.opts.progress )
7413 .done( animation.opts.done, animation.opts.complete )
7414 .fail( animation.opts.fail )
7415 .always( animation.opts.always );
7416 }
7417
7418 jQuery.Animation = jQuery.extend( Animation, {
7419 tweener: function( props, callback ) {
7420 if ( jQuery.isFunction( props ) ) {
7421 callback = props;
7422 props = [ "*" ];
7423 } else {
7424 props = props.split(" ");
7425 }
7426
7427 var prop,
7428 index = 0,
7429 length = props.length;
7430
7431 for ( ; index < length ; index++ ) {
7432 prop = props[ index ];
7433 tweeners[ prop ] = tweeners[ prop ] || [];
7434 tweeners[ prop ].unshift( callback );
7435 }
7436 },
7437
7438 prefilter: function( callback, prepend ) {
7439 if ( prepend ) {
7440 animationPrefilters.unshift( callback );
7441 } else {
7442 animationPrefilters.push( callback );
7443 }
7444 }
7445 });
7446
7447 jQuery.speed = function( speed, easing, fn ) {
7448 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
7449 complete: fn || !fn && easing ||
7450 jQuery.isFunction( speed ) && speed,
7451 duration: speed,
7452 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
7453 };
7454
7455 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
7456 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
7457
7458 // normalize opt.queue - true/undefined/null -> "fx"
7459 if ( opt.queue == null || opt.queue === true ) {
7460 opt.queue = "fx";
7461 }
7462
7463 // Queueing
7464 opt.old = opt.complete;
7465
7466 opt.complete = function() {
7467 if ( jQuery.isFunction( opt.old ) ) {
7468 opt.old.call( this );
7469 }
7470
7471 if ( opt.queue ) {
7472 jQuery.dequeue( this, opt.queue );
7473 }
7474 };
7475
7476 return opt;
7477 };
7478
7479 jQuery.fn.extend({
7480 fadeTo: function( speed, to, easing, callback ) {
7481
7482 // show any hidden elements after setting opacity to 0
7483 return this.filter( isHidden ).css( "opacity", 0 ).show()
7484
7485 // animate to the value specified
7486 .end().animate({ opacity: to }, speed, easing, callback );
7487 },
7488 animate: function( prop, speed, easing, callback ) {
7489 var empty = jQuery.isEmptyObject( prop ),
7490 optall = jQuery.speed( speed, easing, callback ),
7491 doAnimation = function() {
7492 // Operate on a copy of prop so per-property easing won't be lost
7493 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
7494
7495 // Empty animations, or finishing resolves immediately
7496 if ( empty || jQuery._data( this, "finish" ) ) {
7497 anim.stop( true );
7498 }
7499 };
7500 doAnimation.finish = doAnimation;
7501
7502 return empty || optall.queue === false ?
7503 this.each( doAnimation ) :
7504 this.queue( optall.queue, doAnimation );
7505 },
7506 stop: function( type, clearQueue, gotoEnd ) {
7507 var stopQueue = function( hooks ) {
7508 var stop = hooks.stop;
7509 delete hooks.stop;
7510 stop( gotoEnd );
7511 };
7512
7513 if ( typeof type !== "string" ) {
7514 gotoEnd = clearQueue;
7515 clearQueue = type;
7516 type = undefined;
7517 }
7518 if ( clearQueue && type !== false ) {
7519 this.queue( type || "fx", [] );
7520 }
7521
7522 return this.each(function() {
7523 var dequeue = true,
7524 index = type != null && type + "queueHooks",
7525 timers = jQuery.timers,
7526 data = jQuery._data( this );
7527
7528 if ( index ) {
7529 if ( data[ index ] && data[ index ].stop ) {
7530 stopQueue( data[ index ] );
7531 }
7532 } else {
7533 for ( index in data ) {
7534 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
7535 stopQueue( data[ index ] );
7536 }
7537 }
7538 }
7539
7540 for ( index = timers.length; index--; ) {
7541 if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
7542 timers[ index ].anim.stop( gotoEnd );
7543 dequeue = false;
7544 timers.splice( index, 1 );
7545 }
7546 }
7547
7548 // start the next in the queue if the last step wasn't forced
7549 // timers currently will call their complete callbacks, which will dequeue
7550 // but only if they were gotoEnd
7551 if ( dequeue || !gotoEnd ) {
7552 jQuery.dequeue( this, type );
7553 }
7554 });
7555 },
7556 finish: function( type ) {
7557 if ( type !== false ) {
7558 type = type || "fx";
7559 }
7560 return this.each(function() {
7561 var index,
7562 data = jQuery._data( this ),
7563 queue = data[ type + "queue" ],
7564 hooks = data[ type + "queueHooks" ],
7565 timers = jQuery.timers,
7566 length = queue ? queue.length : 0;
7567
7568 // enable finishing flag on private data
7569 data.finish = true;
7570
7571 // empty the queue first
7572 jQuery.queue( this, type, [] );
7573
7574 if ( hooks && hooks.stop ) {
7575 hooks.stop.call( this, true );
7576 }
7577
7578 // look for any active animations, and finish them
7579 for ( index = timers.length; index--; ) {
7580 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
7581 timers[ index ].anim.stop( true );
7582 timers.splice( index, 1 );
7583 }
7584 }
7585
7586 // look for any animations in the old queue and finish them
7587 for ( index = 0; index < length; index++ ) {
7588 if ( queue[ index ] && queue[ index ].finish ) {
7589 queue[ index ].finish.call( this );
7590 }
7591 }
7592
7593 // turn off finishing flag
7594 delete data.finish;
7595 });
7596 }
7597 });
7598
7599 jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
7600 var cssFn = jQuery.fn[ name ];
7601 jQuery.fn[ name ] = function( speed, easing, callback ) {
7602 return speed == null || typeof speed === "boolean" ?
7603 cssFn.apply( this, arguments ) :
7604 this.animate( genFx( name, true ), speed, easing, callback );
7605 };
7606 });
7607
7608 // Generate shortcuts for custom animations
7609 jQuery.each({
7610 slideDown: genFx("show"),
7611 slideUp: genFx("hide"),
7612 slideToggle: genFx("toggle"),
7613 fadeIn: { opacity: "show" },
7614 fadeOut: { opacity: "hide" },
7615 fadeToggle: { opacity: "toggle" }
7616 }, function( name, props ) {
7617 jQuery.fn[ name ] = function( speed, easing, callback ) {
7618 return this.animate( props, speed, easing, callback );
7619 };
7620 });
7621
7622 jQuery.timers = [];
7623 jQuery.fx.tick = function() {
7624 var timer,
7625 timers = jQuery.timers,
7626 i = 0;
7627
7628 fxNow = jQuery.now();
7629
7630 for ( ; i < timers.length; i++ ) {
7631 timer = timers[ i ];
7632 // Checks the timer has not already been removed
7633 if ( !timer() && timers[ i ] === timer ) {
7634 timers.splice( i--, 1 );
7635 }
7636 }
7637
7638 if ( !timers.length ) {
7639 jQuery.fx.stop();
7640 }
7641 fxNow = undefined;
7642 };
7643
7644 jQuery.fx.timer = function( timer ) {
7645 jQuery.timers.push( timer );
7646 if ( timer() ) {
7647 jQuery.fx.start();
7648 } else {
7649 jQuery.timers.pop();
7650 }
7651 };
7652
7653 jQuery.fx.interval = 13;
7654
7655 jQuery.fx.start = function() {
7656 if ( !timerId ) {
7657 timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
7658 }
7659 };
7660
7661 jQuery.fx.stop = function() {
7662 clearInterval( timerId );
7663 timerId = null;
7664 };
7665
7666 jQuery.fx.speeds = {
7667 slow: 600,
7668 fast: 200,
7669 // Default speed
7670 _default: 400
7671 };
7672
7673
7674 // Based off of the plugin by Clint Helfers, with permission.
7675 // http://blindsignals.com/index.php/2009/07/jquery-delay/
7676 jQuery.fn.delay = function( time, type ) {
7677 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7678 type = type || "fx";
7679
7680 return this.queue( type, function( next, hooks ) {
7681 var timeout = setTimeout( next, time );
7682 hooks.stop = function() {
7683 clearTimeout( timeout );
7684 };
7685 });
7686 };
7687
7688
7689 (function() {
7690 // Minified: var a,b,c,d,e
7691 var input, div, select, a, opt;
7692
7693 // Setup
7694 div = document.createElement( "div" );
7695 div.setAttribute( "className", "t" );
7696 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
7697 a = div.getElementsByTagName("a")[ 0 ];
7698
7699 // First batch of tests.
7700 select = document.createElement("select");
7701 opt = select.appendChild( document.createElement("option") );
7702 input = div.getElementsByTagName("input")[ 0 ];
7703
7704 a.style.cssText = "top:1px";
7705
7706 // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
7707 support.getSetAttribute = div.className !== "t";
7708
7709 // Get the style information from getAttribute
7710 // (IE uses .cssText instead)
7711 support.style = /top/.test( a.getAttribute("style") );
7712
7713 // Make sure that URLs aren't manipulated
7714 // (IE normalizes it by default)
7715 support.hrefNormalized = a.getAttribute("href") === "/a";
7716
7717 // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
7718 support.checkOn = !!input.value;
7719
7720 // Make sure that a selected-by-default option has a working selected property.
7721 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
7722 support.optSelected = opt.selected;
7723
7724 // Tests for enctype support on a form (#6743)
7725 support.enctype = !!document.createElement("form").enctype;
7726
7727 // Make sure that the options inside disabled selects aren't marked as disabled
7728 // (WebKit marks them as disabled)
7729 select.disabled = true;
7730 support.optDisabled = !opt.disabled;
7731
7732 // Support: IE8 only
7733 // Check if we can trust getAttribute("value")
7734 input = document.createElement( "input" );
7735 input.setAttribute( "value", "" );
7736 support.input = input.getAttribute( "value" ) === "";
7737
7738 // Check if an input maintains its value after becoming a radio
7739 input.value = "t";
7740 input.setAttribute( "type", "radio" );
7741 support.radioValue = input.value === "t";
7742 })();
7743
7744
7745 var rreturn = /\r/g;
7746
7747 jQuery.fn.extend({
7748 val: function( value ) {
7749 var hooks, ret, isFunction,
7750 elem = this[0];
7751
7752 if ( !arguments.length ) {
7753 if ( elem ) {
7754 hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
7755
7756 if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
7757 return ret;
7758 }
7759
7760 ret = elem.value;
7761
7762 return typeof ret === "string" ?
7763 // handle most common string cases
7764 ret.replace(rreturn, "") :
7765 // handle cases where value is null/undef or number
7766 ret == null ? "" : ret;
7767 }
7768
7769 return;
7770 }
7771
7772 isFunction = jQuery.isFunction( value );
7773
7774 return this.each(function( i ) {
7775 var val;
7776
7777 if ( this.nodeType !== 1 ) {
7778 return;
7779 }
7780
7781 if ( isFunction ) {
7782 val = value.call( this, i, jQuery( this ).val() );
7783 } else {
7784 val = value;
7785 }
7786
7787 // Treat null/undefined as ""; convert numbers to string
7788 if ( val == null ) {
7789 val = "";
7790 } else if ( typeof val === "number" ) {
7791 val += "";
7792 } else if ( jQuery.isArray( val ) ) {
7793 val = jQuery.map( val, function( value ) {
7794 return value == null ? "" : value + "";
7795 });
7796 }
7797
7798 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
7799
7800 // If set returns undefined, fall back to normal setting
7801 if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
7802 this.value = val;
7803 }
7804 });
7805 }
7806 });
7807
7808 jQuery.extend({
7809 valHooks: {
7810 option: {
7811 get: function( elem ) {
7812 var val = jQuery.find.attr( elem, "value" );
7813 return val != null ?
7814 val :
7815 // Support: IE10-11+
7816 // option.text throws exceptions (#14686, #14858)
7817 jQuery.trim( jQuery.text( elem ) );
7818 }
7819 },
7820 select: {
7821 get: function( elem ) {
7822 var value, option,
7823 options = elem.options,
7824 index = elem.selectedIndex,
7825 one = elem.type === "select-one" || index < 0,
7826 values = one ? null : [],
7827 max = one ? index + 1 : options.length,
7828 i = index < 0 ?
7829 max :
7830 one ? index : 0;
7831
7832 // Loop through all the selected options
7833 for ( ; i < max; i++ ) {
7834 option = options[ i ];
7835
7836 // oldIE doesn't update selected after form reset (#2551)
7837 if ( ( option.selected || i === index ) &&
7838 // Don't return options that are disabled or in a disabled optgroup
7839 ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
7840 ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
7841
7842 // Get the specific value for the option
7843 value = jQuery( option ).val();
7844
7845 // We don't need an array for one selects
7846 if ( one ) {
7847 return value;
7848 }
7849
7850 // Multi-Selects return an array
7851 values.push( value );
7852 }
7853 }
7854
7855 return values;
7856 },
7857
7858 set: function( elem, value ) {
7859 var optionSet, option,
7860 options = elem.options,
7861 values = jQuery.makeArray( value ),
7862 i = options.length;
7863
7864 while ( i-- ) {
7865 option = options[ i ];
7866
7867 if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
7868
7869 // Support: IE6
7870 // When new option element is added to select box we need to
7871 // force reflow of newly added node in order to workaround delay
7872 // of initialization properties
7873 try {
7874 option.selected = optionSet = true;
7875
7876 } catch ( _ ) {
7877
7878 // Will be executed only in IE6
7879 option.scrollHeight;
7880 }
7881
7882 } else {
7883 option.selected = false;
7884 }
7885 }
7886
7887 // Force browsers to behave consistently when non-matching value is set
7888 if ( !optionSet ) {
7889 elem.selectedIndex = -1;
7890 }
7891
7892 return options;
7893 }
7894 }
7895 }
7896 });
7897
7898 // Radios and checkboxes getter/setter
7899 jQuery.each([ "radio", "checkbox" ], function() {
7900 jQuery.valHooks[ this ] = {
7901 set: function( elem, value ) {
7902 if ( jQuery.isArray( value ) ) {
7903 return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
7904 }
7905 }
7906 };
7907 if ( !support.checkOn ) {
7908 jQuery.valHooks[ this ].get = function( elem ) {
7909 // Support: Webkit
7910 // "" is returned instead of "on" if a value isn't specified
7911 return elem.getAttribute("value") === null ? "on" : elem.value;
7912 };
7913 }
7914 });
7915
7916
7917
7918
7919 var nodeHook, boolHook,
7920 attrHandle = jQuery.expr.attrHandle,
7921 ruseDefault = /^(?:checked|selected)$/i,
7922 getSetAttribute = support.getSetAttribute,
7923 getSetInput = support.input;
7924
7925 jQuery.fn.extend({
7926 attr: function( name, value ) {
7927 return access( this, jQuery.attr, name, value, arguments.length > 1 );
7928 },
7929
7930 removeAttr: function( name ) {
7931 return this.each(function() {
7932 jQuery.removeAttr( this, name );
7933 });
7934 }
7935 });
7936
7937 jQuery.extend({
7938 attr: function( elem, name, value ) {
7939 var hooks, ret,
7940 nType = elem.nodeType;
7941
7942 // don't get/set attributes on text, comment and attribute nodes
7943 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
7944 return;
7945 }
7946
7947 // Fallback to prop when attributes are not supported
7948 if ( typeof elem.getAttribute === strundefined ) {
7949 return jQuery.prop( elem, name, value );
7950 }
7951
7952 // All attributes are lowercase
7953 // Grab necessary hook if one is defined
7954 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7955 name = name.toLowerCase();
7956 hooks = jQuery.attrHooks[ name ] ||
7957 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
7958 }
7959
7960 if ( value !== undefined ) {
7961
7962 if ( value === null ) {
7963 jQuery.removeAttr( elem, name );
7964
7965 } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
7966 return ret;
7967
7968 } else {
7969 elem.setAttribute( name, value + "" );
7970 return value;
7971 }
7972
7973 } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
7974 return ret;
7975
7976 } else {
7977 ret = jQuery.find.attr( elem, name );
7978
7979 // Non-existent attributes return null, we normalize to undefined
7980 return ret == null ?
7981 undefined :
7982 ret;
7983 }
7984 },
7985
7986 removeAttr: function( elem, value ) {
7987 var name, propName,
7988 i = 0,
7989 attrNames = value && value.match( rnotwhite );
7990
7991 if ( attrNames && elem.nodeType === 1 ) {
7992 while ( (name = attrNames[i++]) ) {
7993 propName = jQuery.propFix[ name ] || name;
7994
7995 // Boolean attributes get special treatment (#10870)
7996 if ( jQuery.expr.match.bool.test( name ) ) {
7997 // Set corresponding property to false
7998 if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
7999 elem[ propName ] = false;
8000 // Support: IE<9
8001 // Also clear defaultChecked/defaultSelected (if appropriate)
8002 } else {
8003 elem[ jQuery.camelCase( "default-" + name ) ] =
8004 elem[ propName ] = false;
8005 }
8006
8007 // See #9699 for explanation of this approach (setting first, then removal)
8008 } else {
8009 jQuery.attr( elem, name, "" );
8010 }
8011
8012 elem.removeAttribute( getSetAttribute ? name : propName );
8013 }
8014 }
8015 },
8016
8017 attrHooks: {
8018 type: {
8019 set: function( elem, value ) {
8020 if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
8021 // Setting the type on a radio button after the value resets the value in IE6-9
8022 // Reset value to default in case type is set after value during creation
8023 var val = elem.value;
8024 elem.setAttribute( "type", value );
8025 if ( val ) {
8026 elem.value = val;
8027 }
8028 return value;
8029 }
8030 }
8031 }
8032 }
8033 });
8034
8035 // Hook for boolean attributes
8036 boolHook = {
8037 set: function( elem, value, name ) {
8038 if ( value === false ) {
8039 // Remove boolean attributes when set to false
8040 jQuery.removeAttr( elem, name );
8041 } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
8042 // IE<8 needs the *property* name
8043 elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
8044
8045 // Use defaultChecked and defaultSelected for oldIE
8046 } else {
8047 elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
8048 }
8049
8050 return name;
8051 }
8052 };
8053
8054 // Retrieve booleans specially
8055 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
8056
8057 var getter = attrHandle[ name ] || jQuery.find.attr;
8058
8059 attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
8060 function( elem, name, isXML ) {
8061 var ret, handle;
8062 if ( !isXML ) {
8063 // Avoid an infinite loop by temporarily removing this function from the getter
8064 handle = attrHandle[ name ];
8065 attrHandle[ name ] = ret;
8066 ret = getter( elem, name, isXML ) != null ?
8067 name.toLowerCase() :
8068 null;
8069 attrHandle[ name ] = handle;
8070 }
8071 return ret;
8072 } :
8073 function( elem, name, isXML ) {
8074 if ( !isXML ) {
8075 return elem[ jQuery.camelCase( "default-" + name ) ] ?
8076 name.toLowerCase() :
8077 null;
8078 }
8079 };
8080 });
8081
8082 // fix oldIE attroperties
8083 if ( !getSetInput || !getSetAttribute ) {
8084 jQuery.attrHooks.value = {
8085 set: function( elem, value, name ) {
8086 if ( jQuery.nodeName( elem, "input" ) ) {
8087 // Does not return so that setAttribute is also used
8088 elem.defaultValue = value;
8089 } else {
8090 // Use nodeHook if defined (#1954); otherwise setAttribute is fine
8091 return nodeHook && nodeHook.set( elem, value, name );
8092 }
8093 }
8094 };
8095 }
8096
8097 // IE6/7 do not support getting/setting some attributes with get/setAttribute
8098 if ( !getSetAttribute ) {
8099
8100 // Use this for any attribute in IE6/7
8101 // This fixes almost every IE6/7 issue
8102 nodeHook = {
8103 set: function( elem, value, name ) {
8104 // Set the existing or create a new attribute node
8105 var ret = elem.getAttributeNode( name );
8106 if ( !ret ) {
8107 elem.setAttributeNode(
8108 (ret = elem.ownerDocument.createAttribute( name ))
8109 );
8110 }
8111
8112 ret.value = value += "";
8113
8114 // Break association with cloned elements by also using setAttribute (#9646)
8115 if ( name === "value" || value === elem.getAttribute( name ) ) {
8116 return value;
8117 }
8118 }
8119 };
8120
8121 // Some attributes are constructed with empty-string values when not defined
8122 attrHandle.id = attrHandle.name = attrHandle.coords =
8123 function( elem, name, isXML ) {
8124 var ret;
8125 if ( !isXML ) {
8126 return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
8127 ret.value :
8128 null;
8129 }
8130 };
8131
8132 // Fixing value retrieval on a button requires this module
8133 jQuery.valHooks.button = {
8134 get: function( elem, name ) {
8135 var ret = elem.getAttributeNode( name );
8136 if ( ret && ret.specified ) {
8137 return ret.value;
8138 }
8139 },
8140 set: nodeHook.set
8141 };
8142
8143 // Set contenteditable to false on removals(#10429)
8144 // Setting to empty string throws an error as an invalid value
8145 jQuery.attrHooks.contenteditable = {
8146 set: function( elem, value, name ) {
8147 nodeHook.set( elem, value === "" ? false : value, name );
8148 }
8149 };
8150
8151 // Set width and height to auto instead of 0 on empty string( Bug #8150 )
8152 // This is for removals
8153 jQuery.each([ "width", "height" ], function( i, name ) {
8154 jQuery.attrHooks[ name ] = {
8155 set: function( elem, value ) {
8156 if ( value === "" ) {
8157 elem.setAttribute( name, "auto" );
8158 return value;
8159 }
8160 }
8161 };
8162 });
8163 }
8164
8165 if ( !support.style ) {
8166 jQuery.attrHooks.style = {
8167 get: function( elem ) {
8168 // Return undefined in the case of empty string
8169 // Note: IE uppercases css property names, but if we were to .toLowerCase()
8170 // .cssText, that would destroy case senstitivity in URL's, like in "background"
8171 return elem.style.cssText || undefined;
8172 },
8173 set: function( elem, value ) {
8174 return ( elem.style.cssText = value + "" );
8175 }
8176 };
8177 }
8178
8179
8180
8181
8182 var rfocusable = /^(?:input|select|textarea|button|object)$/i,
8183 rclickable = /^(?:a|area)$/i;
8184
8185 jQuery.fn.extend({
8186 prop: function( name, value ) {
8187 return access( this, jQuery.prop, name, value, arguments.length > 1 );
8188 },
8189
8190 removeProp: function( name ) {
8191 name = jQuery.propFix[ name ] || name;
8192 return this.each(function() {
8193 // try/catch handles cases where IE balks (such as removing a property on window)
8194 try {
8195 this[ name ] = undefined;
8196 delete this[ name ];
8197 } catch( e ) {}
8198 });
8199 }
8200 });
8201
8202 jQuery.extend({
8203 propFix: {
8204 "for": "htmlFor",
8205 "class": "className"
8206 },
8207
8208 prop: function( elem, name, value ) {
8209 var ret, hooks, notxml,
8210 nType = elem.nodeType;
8211
8212 // don't get/set properties on text, comment and attribute nodes
8213 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
8214 return;
8215 }
8216
8217 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
8218
8219 if ( notxml ) {
8220 // Fix name and attach hooks
8221 name = jQuery.propFix[ name ] || name;
8222 hooks = jQuery.propHooks[ name ];
8223 }
8224
8225 if ( value !== undefined ) {
8226 return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
8227 ret :
8228 ( elem[ name ] = value );
8229
8230 } else {
8231 return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
8232 ret :
8233 elem[ name ];
8234 }
8235 },
8236
8237 propHooks: {
8238 tabIndex: {
8239 get: function( elem ) {
8240 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
8241 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
8242 // Use proper attribute retrieval(#12072)
8243 var tabindex = jQuery.find.attr( elem, "tabindex" );
8244
8245 return tabindex ?
8246 parseInt( tabindex, 10 ) :
8247 rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
8248 0 :
8249 -1;
8250 }
8251 }
8252 }
8253 });
8254
8255 // Some attributes require a special call on IE
8256 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
8257 if ( !support.hrefNormalized ) {
8258 // href/src property should get the full normalized URL (#10299/#12915)
8259 jQuery.each([ "href", "src" ], function( i, name ) {
8260 jQuery.propHooks[ name ] = {
8261 get: function( elem ) {
8262 return elem.getAttribute( name, 4 );
8263 }
8264 };
8265 });
8266 }
8267
8268 // Support: Safari, IE9+
8269 // mis-reports the default selected property of an option
8270 // Accessing the parent's selectedIndex property fixes it
8271 if ( !support.optSelected ) {
8272 jQuery.propHooks.selected = {
8273 get: function( elem ) {
8274 var parent = elem.parentNode;
8275
8276 if ( parent ) {
8277 parent.selectedIndex;
8278
8279 // Make sure that it also works with optgroups, see #5701
8280 if ( parent.parentNode ) {
8281 parent.parentNode.selectedIndex;
8282 }
8283 }
8284 return null;
8285 }
8286 };
8287 }
8288
8289 jQuery.each([
8290 "tabIndex",
8291 "readOnly",
8292 "maxLength",
8293 "cellSpacing",
8294 "cellPadding",
8295 "rowSpan",
8296 "colSpan",
8297 "useMap",
8298 "frameBorder",
8299 "contentEditable"
8300 ], function() {
8301 jQuery.propFix[ this.toLowerCase() ] = this;
8302 });
8303
8304 // IE6/7 call enctype encoding
8305 if ( !support.enctype ) {
8306 jQuery.propFix.enctype = "encoding";
8307 }
8308
8309
8310
8311
8312 var rclass = /[\t\r\n\f]/g;
8313
8314 jQuery.fn.extend({
8315 addClass: function( value ) {
8316 var classes, elem, cur, clazz, j, finalValue,
8317 i = 0,
8318 len = this.length,
8319 proceed = typeof value === "string" && value;
8320
8321 if ( jQuery.isFunction( value ) ) {
8322 return this.each(function( j ) {
8323 jQuery( this ).addClass( value.call( this, j, this.className ) );
8324 });
8325 }
8326
8327 if ( proceed ) {
8328 // The disjunction here is for better compressibility (see removeClass)
8329 classes = ( value || "" ).match( rnotwhite ) || [];
8330
8331 for ( ; i < len; i++ ) {
8332 elem = this[ i ];
8333 cur = elem.nodeType === 1 && ( elem.className ?
8334 ( " " + elem.className + " " ).replace( rclass, " " ) :
8335 " "
8336 );
8337
8338 if ( cur ) {
8339 j = 0;
8340 while ( (clazz = classes[j++]) ) {
8341 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
8342 cur += clazz + " ";
8343 }
8344 }
8345
8346 // only assign if different to avoid unneeded rendering.
8347 finalValue = jQuery.trim( cur );
8348 if ( elem.className !== finalValue ) {
8349 elem.className = finalValue;
8350 }
8351 }
8352 }
8353 }
8354
8355 return this;
8356 },
8357
8358 removeClass: function( value ) {
8359 var classes, elem, cur, clazz, j, finalValue,
8360 i = 0,
8361 len = this.length,
8362 proceed = arguments.length === 0 || typeof value === "string" && value;
8363
8364 if ( jQuery.isFunction( value ) ) {
8365 return this.each(function( j ) {
8366 jQuery( this ).removeClass( value.call( this, j, this.className ) );
8367 });
8368 }
8369 if ( proceed ) {
8370 classes = ( value || "" ).match( rnotwhite ) || [];
8371
8372 for ( ; i < len; i++ ) {
8373 elem = this[ i ];
8374 // This expression is here for better compressibility (see addClass)
8375 cur = elem.nodeType === 1 && ( elem.className ?
8376 ( " " + elem.className + " " ).replace( rclass, " " ) :
8377 ""
8378 );
8379
8380 if ( cur ) {
8381 j = 0;
8382 while ( (clazz = classes[j++]) ) {
8383 // Remove *all* instances
8384 while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
8385 cur = cur.replace( " " + clazz + " ", " " );
8386 }
8387 }
8388
8389 // only assign if different to avoid unneeded rendering.
8390 finalValue = value ? jQuery.trim( cur ) : "";
8391 if ( elem.className !== finalValue ) {
8392 elem.className = finalValue;
8393 }
8394 }
8395 }
8396 }
8397
8398 return this;
8399 },
8400
8401 toggleClass: function( value, stateVal ) {
8402 var type = typeof value;
8403
8404 if ( typeof stateVal === "boolean" && type === "string" ) {
8405 return stateVal ? this.addClass( value ) : this.removeClass( value );
8406 }
8407
8408 if ( jQuery.isFunction( value ) ) {
8409 return this.each(function( i ) {
8410 jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
8411 });
8412 }
8413
8414 return this.each(function() {
8415 if ( type === "string" ) {
8416 // toggle individual class names
8417 var className,
8418 i = 0,
8419 self = jQuery( this ),
8420 classNames = value.match( rnotwhite ) || [];
8421
8422 while ( (className = classNames[ i++ ]) ) {
8423 // check each className given, space separated list
8424 if ( self.hasClass( className ) ) {
8425 self.removeClass( className );
8426 } else {
8427 self.addClass( className );
8428 }
8429 }
8430
8431 // Toggle whole class name
8432 } else if ( type === strundefined || type === "boolean" ) {
8433 if ( this.className ) {
8434 // store className if set
8435 jQuery._data( this, "__className__", this.className );
8436 }
8437
8438 // If the element has a class name or if we're passed "false",
8439 // then remove the whole classname (if there was one, the above saved it).
8440 // Otherwise bring back whatever was previously saved (if anything),
8441 // falling back to the empty string if nothing was stored.
8442 this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
8443 }
8444 });
8445 },
8446
8447 hasClass: function( selector ) {
8448 var className = " " + selector + " ",
8449 i = 0,
8450 l = this.length;
8451 for ( ; i < l; i++ ) {
8452 if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
8453 return true;
8454 }
8455 }
8456
8457 return false;
8458 }
8459 });
8460
8461
8462
8463
8464 // Return jQuery for attributes-only inclusion
8465
8466
8467 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
8468 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
8469 "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
8470
8471 // Handle event binding
8472 jQuery.fn[ name ] = function( data, fn ) {
8473 return arguments.length > 0 ?
8474 this.on( name, null, data, fn ) :
8475 this.trigger( name );
8476 };
8477 });
8478
8479 jQuery.fn.extend({
8480 hover: function( fnOver, fnOut ) {
8481 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
8482 },
8483
8484 bind: function( types, data, fn ) {
8485 return this.on( types, null, data, fn );
8486 },
8487 unbind: function( types, fn ) {
8488 return this.off( types, null, fn );
8489 },
8490
8491 delegate: function( selector, types, data, fn ) {
8492 return this.on( types, selector, data, fn );
8493 },
8494 undelegate: function( selector, types, fn ) {
8495 // ( namespace ) or ( selector, types [, fn] )
8496 return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
8497 }
8498 });
8499
8500
8501 var nonce = jQuery.now();
8502
8503 var rquery = (/\?/);
8504
8505
8506
8507 var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
8508
8509 jQuery.parseJSON = function( data ) {
8510 // Attempt to parse using the native JSON parser first
8511 if ( window.JSON && window.JSON.parse ) {
8512 // Support: Android 2.3
8513 // Workaround failure to string-cast null input
8514 return window.JSON.parse( data + "" );
8515 }
8516
8517 var requireNonComma,
8518 depth = null,
8519 str = jQuery.trim( data + "" );
8520
8521 // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
8522 // after removing valid tokens
8523 return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
8524
8525 // Force termination if we see a misplaced comma
8526 if ( requireNonComma && comma ) {
8527 depth = 0;
8528 }
8529
8530 // Perform no more replacements after returning to outermost depth
8531 if ( depth === 0 ) {
8532 return token;
8533 }
8534
8535 // Commas must not follow "[", "{", or ","
8536 requireNonComma = open || comma;
8537
8538 // Determine new depth
8539 // array/object open ("[" or "{"): depth += true - false (increment)
8540 // array/object close ("]" or "}"): depth += false - true (decrement)
8541 // other cases ("," or primitive): depth += true - true (numeric cast)
8542 depth += !close - !open;
8543
8544 // Remove this token
8545 return "";
8546 }) ) ?
8547 ( Function( "return " + str ) )() :
8548 jQuery.error( "Invalid JSON: " + data );
8549 };
8550
8551
8552 // Cross-browser xml parsing
8553 jQuery.parseXML = function( data ) {
8554 var xml, tmp;
8555 if ( !data || typeof data !== "string" ) {
8556 return null;
8557 }
8558 try {
8559 if ( window.DOMParser ) { // Standard
8560 tmp = new DOMParser();
8561 xml = tmp.parseFromString( data, "text/xml" );
8562 } else { // IE
8563 xml = new ActiveXObject( "Microsoft.XMLDOM" );
8564 xml.async = "false";
8565 xml.loadXML( data );
8566 }
8567 } catch( e ) {
8568 xml = undefined;
8569 }
8570 if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
8571 jQuery.error( "Invalid XML: " + data );
8572 }
8573 return xml;
8574 };
8575
8576
8577 var
8578 // Document location
8579 ajaxLocParts,
8580 ajaxLocation,
8581
8582 rhash = /#.*$/,
8583 rts = /([?&])_=[^&]*/,
8584 rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
8585 // #7653, #8125, #8152: local protocol detection
8586 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
8587 rnoContent = /^(?:GET|HEAD)$/,
8588 rprotocol = /^\/\//,
8589 rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
8590
8591 /* Prefilters
8592 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
8593 * 2) These are called:
8594 * - BEFORE asking for a transport
8595 * - AFTER param serialization (s.data is a string if s.processData is true)
8596 * 3) key is the dataType
8597 * 4) the catchall symbol "*" can be used
8598 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
8599 */
8600 prefilters = {},
8601
8602 /* Transports bindings
8603 * 1) key is the dataType
8604 * 2) the catchall symbol "*" can be used
8605 * 3) selection will start with transport dataType and THEN go to "*" if needed
8606 */
8607 transports = {},
8608
8609 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8610 allTypes = "*/".concat("*");
8611
8612 // #8138, IE may throw an exception when accessing
8613 // a field from window.location if document.domain has been set
8614 try {
8615 ajaxLocation = location.href;
8616 } catch( e ) {
8617 // Use the href attribute of an A element
8618 // since IE will modify it given document.location
8619 ajaxLocation = document.createElement( "a" );
8620 ajaxLocation.href = "";
8621 ajaxLocation = ajaxLocation.href;
8622 }
8623
8624 // Segment location into parts
8625 ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
8626
8627 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
8628 function addToPrefiltersOrTransports( structure ) {
8629
8630 // dataTypeExpression is optional and defaults to "*"
8631 return function( dataTypeExpression, func ) {
8632
8633 if ( typeof dataTypeExpression !== "string" ) {
8634 func = dataTypeExpression;
8635 dataTypeExpression = "*";
8636 }
8637
8638 var dataType,
8639 i = 0,
8640 dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
8641
8642 if ( jQuery.isFunction( func ) ) {
8643 // For each dataType in the dataTypeExpression
8644 while ( (dataType = dataTypes[i++]) ) {
8645 // Prepend if requested
8646 if ( dataType.charAt( 0 ) === "+" ) {
8647 dataType = dataType.slice( 1 ) || "*";
8648 (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
8649
8650 // Otherwise append
8651 } else {
8652 (structure[ dataType ] = structure[ dataType ] || []).push( func );
8653 }
8654 }
8655 }
8656 };
8657 }
8658
8659 // Base inspection function for prefilters and transports
8660 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
8661
8662 var inspected = {},
8663 seekingTransport = ( structure === transports );
8664
8665 function inspect( dataType ) {
8666 var selected;
8667 inspected[ dataType ] = true;
8668 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
8669 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
8670 if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
8671 options.dataTypes.unshift( dataTypeOrTransport );
8672 inspect( dataTypeOrTransport );
8673 return false;
8674 } else if ( seekingTransport ) {
8675 return !( selected = dataTypeOrTransport );
8676 }
8677 });
8678 return selected;
8679 }
8680
8681 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
8682 }
8683
8684 // A special extend for ajax options
8685 // that takes "flat" options (not to be deep extended)
8686 // Fixes #9887
8687 function ajaxExtend( target, src ) {
8688 var deep, key,
8689 flatOptions = jQuery.ajaxSettings.flatOptions || {};
8690
8691 for ( key in src ) {
8692 if ( src[ key ] !== undefined ) {
8693 ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
8694 }
8695 }
8696 if ( deep ) {
8697 jQuery.extend( true, target, deep );
8698 }
8699
8700 return target;
8701 }
8702
8703 /* Handles responses to an ajax request:
8704 * - finds the right dataType (mediates between content-type and expected dataType)
8705 * - returns the corresponding response
8706 */
8707 function ajaxHandleResponses( s, jqXHR, responses ) {
8708 var firstDataType, ct, finalDataType, type,
8709 contents = s.contents,
8710 dataTypes = s.dataTypes;
8711
8712 // Remove auto dataType and get content-type in the process
8713 while ( dataTypes[ 0 ] === "*" ) {
8714 dataTypes.shift();
8715 if ( ct === undefined ) {
8716 ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
8717 }
8718 }
8719
8720 // Check if we're dealing with a known content-type
8721 if ( ct ) {
8722 for ( type in contents ) {
8723 if ( contents[ type ] && contents[ type ].test( ct ) ) {
8724 dataTypes.unshift( type );
8725 break;
8726 }
8727 }
8728 }
8729
8730 // Check to see if we have a response for the expected dataType
8731 if ( dataTypes[ 0 ] in responses ) {
8732 finalDataType = dataTypes[ 0 ];
8733 } else {
8734 // Try convertible dataTypes
8735 for ( type in responses ) {
8736 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
8737 finalDataType = type;
8738 break;
8739 }
8740 if ( !firstDataType ) {
8741 firstDataType = type;
8742 }
8743 }
8744 // Or just use first one
8745 finalDataType = finalDataType || firstDataType;
8746 }
8747
8748 // If we found a dataType
8749 // We add the dataType to the list if needed
8750 // and return the corresponding response
8751 if ( finalDataType ) {
8752 if ( finalDataType !== dataTypes[ 0 ] ) {
8753 dataTypes.unshift( finalDataType );
8754 }
8755 return responses[ finalDataType ];
8756 }
8757 }
8758
8759 /* Chain conversions given the request and the original response
8760 * Also sets the responseXXX fields on the jqXHR instance
8761 */
8762 function ajaxConvert( s, response, jqXHR, isSuccess ) {
8763 var conv2, current, conv, tmp, prev,
8764 converters = {},
8765 // Work with a copy of dataTypes in case we need to modify it for conversion
8766 dataTypes = s.dataTypes.slice();
8767
8768 // Create converters map with lowercased keys
8769 if ( dataTypes[ 1 ] ) {
8770 for ( conv in s.converters ) {
8771 converters[ conv.toLowerCase() ] = s.converters[ conv ];
8772 }
8773 }
8774
8775 current = dataTypes.shift();
8776
8777 // Convert to each sequential dataType
8778 while ( current ) {
8779
8780 if ( s.responseFields[ current ] ) {
8781 jqXHR[ s.responseFields[ current ] ] = response;
8782 }
8783
8784 // Apply the dataFilter if provided
8785 if ( !prev && isSuccess && s.dataFilter ) {
8786 response = s.dataFilter( response, s.dataType );
8787 }
8788
8789 prev = current;
8790 current = dataTypes.shift();
8791
8792 if ( current ) {
8793
8794 // There's only work to do if current dataType is non-auto
8795 if ( current === "*" ) {
8796
8797 current = prev;
8798
8799 // Convert response if prev dataType is non-auto and differs from current
8800 } else if ( prev !== "*" && prev !== current ) {
8801
8802 // Seek a direct converter
8803 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
8804
8805 // If none found, seek a pair
8806 if ( !conv ) {
8807 for ( conv2 in converters ) {
8808
8809 // If conv2 outputs current
8810 tmp = conv2.split( " " );
8811 if ( tmp[ 1 ] === current ) {
8812
8813 // If prev can be converted to accepted input
8814 conv = converters[ prev + " " + tmp[ 0 ] ] ||
8815 converters[ "* " + tmp[ 0 ] ];
8816 if ( conv ) {
8817 // Condense equivalence converters
8818 if ( conv === true ) {
8819 conv = converters[ conv2 ];
8820
8821 // Otherwise, insert the intermediate dataType
8822 } else if ( converters[ conv2 ] !== true ) {
8823 current = tmp[ 0 ];
8824 dataTypes.unshift( tmp[ 1 ] );
8825 }
8826 break;
8827 }
8828 }
8829 }
8830 }
8831
8832 // Apply converter (if not an equivalence)
8833 if ( conv !== true ) {
8834
8835 // Unless errors are allowed to bubble, catch and return them
8836 if ( conv && s[ "throws" ] ) {
8837 response = conv( response );
8838 } else {
8839 try {
8840 response = conv( response );
8841 } catch ( e ) {
8842 return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
8843 }
8844 }
8845 }
8846 }
8847 }
8848 }
8849
8850 return { state: "success", data: response };
8851 }
8852
8853 jQuery.extend({
8854
8855 // Counter for holding the number of active queries
8856 active: 0,
8857
8858 // Last-Modified header cache for next request
8859 lastModified: {},
8860 etag: {},
8861
8862 ajaxSettings: {
8863 url: ajaxLocation,
8864 type: "GET",
8865 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
8866 global: true,
8867 processData: true,
8868 async: true,
8869 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
8870 /*
8871 timeout: 0,
8872 data: null,
8873 dataType: null,
8874 username: null,
8875 password: null,
8876 cache: null,
8877 throws: false,
8878 traditional: false,
8879 headers: {},
8880 */
8881
8882 accepts: {
8883 "*": allTypes,
8884 text: "text/plain",
8885 html: "text/html",
8886 xml: "application/xml, text/xml",
8887 json: "application/json, text/javascript"
8888 },
8889
8890 contents: {
8891 xml: /xml/,
8892 html: /html/,
8893 json: /json/
8894 },
8895
8896 responseFields: {
8897 xml: "responseXML",
8898 text: "responseText",
8899 json: "responseJSON"
8900 },
8901
8902 // Data converters
8903 // Keys separate source (or catchall "*") and destination types with a single space
8904 converters: {
8905
8906 // Convert anything to text
8907 "* text": String,
8908
8909 // Text to html (true = no transformation)
8910 "text html": true,
8911
8912 // Evaluate text as a json expression
8913 "text json": jQuery.parseJSON,
8914
8915 // Parse text as xml
8916 "text xml": jQuery.parseXML
8917 },
8918
8919 // For options that shouldn't be deep extended:
8920 // you can add your own custom options here if
8921 // and when you create one that shouldn't be
8922 // deep extended (see ajaxExtend)
8923 flatOptions: {
8924 url: true,
8925 context: true
8926 }
8927 },
8928
8929 // Creates a full fledged settings object into target
8930 // with both ajaxSettings and settings fields.
8931 // If target is omitted, writes into ajaxSettings.
8932 ajaxSetup: function( target, settings ) {
8933 return settings ?
8934
8935 // Building a settings object
8936 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
8937
8938 // Extending ajaxSettings
8939 ajaxExtend( jQuery.ajaxSettings, target );
8940 },
8941
8942 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
8943 ajaxTransport: addToPrefiltersOrTransports( transports ),
8944
8945 // Main method
8946 ajax: function( url, options ) {
8947
8948 // If url is an object, simulate pre-1.5 signature
8949 if ( typeof url === "object" ) {
8950 options = url;
8951 url = undefined;
8952 }
8953
8954 // Force options to be an object
8955 options = options || {};
8956
8957 var // Cross-domain detection vars
8958 parts,
8959 // Loop variable
8960 i,
8961 // URL without anti-cache param
8962 cacheURL,
8963 // Response headers as string
8964 responseHeadersString,
8965 // timeout handle
8966 timeoutTimer,
8967
8968 // To know if global events are to be dispatched
8969 fireGlobals,
8970
8971 transport,
8972 // Response headers
8973 responseHeaders,
8974 // Create the final options object
8975 s = jQuery.ajaxSetup( {}, options ),
8976 // Callbacks context
8977 callbackContext = s.context || s,
8978 // Context for global events is callbackContext if it is a DOM node or jQuery collection
8979 globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
8980 jQuery( callbackContext ) :
8981 jQuery.event,
8982 // Deferreds
8983 deferred = jQuery.Deferred(),
8984 completeDeferred = jQuery.Callbacks("once memory"),
8985 // Status-dependent callbacks
8986 statusCode = s.statusCode || {},
8987 // Headers (they are sent all at once)
8988 requestHeaders = {},
8989 requestHeadersNames = {},
8990 // The jqXHR state
8991 state = 0,
8992 // Default abort message
8993 strAbort = "canceled",
8994 // Fake xhr
8995 jqXHR = {
8996 readyState: 0,
8997
8998 // Builds headers hashtable if needed
8999 getResponseHeader: function( key ) {
9000 var match;
9001 if ( state === 2 ) {
9002 if ( !responseHeaders ) {
9003 responseHeaders = {};
9004 while ( (match = rheaders.exec( responseHeadersString )) ) {
9005 responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
9006 }
9007 }
9008 match = responseHeaders[ key.toLowerCase() ];
9009 }
9010 return match == null ? null : match;
9011 },
9012
9013 // Raw string
9014 getAllResponseHeaders: function() {
9015 return state === 2 ? responseHeadersString : null;
9016 },
9017
9018 // Caches the header
9019 setRequestHeader: function( name, value ) {
9020 var lname = name.toLowerCase();
9021 if ( !state ) {
9022 name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
9023 requestHeaders[ name ] = value;
9024 }
9025 return this;
9026 },
9027
9028 // Overrides response content-type header
9029 overrideMimeType: function( type ) {
9030 if ( !state ) {
9031 s.mimeType = type;
9032 }
9033 return this;
9034 },
9035
9036 // Status-dependent callbacks
9037 statusCode: function( map ) {
9038 var code;
9039 if ( map ) {
9040 if ( state < 2 ) {
9041 for ( code in map ) {
9042 // Lazy-add the new callback in a way that preserves old ones
9043 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
9044 }
9045 } else {
9046 // Execute the appropriate callbacks
9047 jqXHR.always( map[ jqXHR.status ] );
9048 }
9049 }
9050 return this;
9051 },
9052
9053 // Cancel the request
9054 abort: function( statusText ) {
9055 var finalText = statusText || strAbort;
9056 if ( transport ) {
9057 transport.abort( finalText );
9058 }
9059 done( 0, finalText );
9060 return this;
9061 }
9062 };
9063
9064 // Attach deferreds
9065 deferred.promise( jqXHR ).complete = completeDeferred.add;
9066 jqXHR.success = jqXHR.done;
9067 jqXHR.error = jqXHR.fail;
9068
9069 // Remove hash character (#7531: and string promotion)
9070 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
9071 // Handle falsy url in the settings object (#10093: consistency with old signature)
9072 // We also use the url parameter if available
9073 s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
9074
9075 // Alias method option to type as per ticket #12004
9076 s.type = options.method || options.type || s.method || s.type;
9077
9078 // Extract dataTypes list
9079 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
9080
9081 // A cross-domain request is in order when we have a protocol:host:port mismatch
9082 if ( s.crossDomain == null ) {
9083 parts = rurl.exec( s.url.toLowerCase() );
9084 s.crossDomain = !!( parts &&
9085 ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
9086 ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
9087 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
9088 );
9089 }
9090
9091 // Convert data if not already a string
9092 if ( s.data && s.processData && typeof s.data !== "string" ) {
9093 s.data = jQuery.param( s.data, s.traditional );
9094 }
9095
9096 // Apply prefilters
9097 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
9098
9099 // If request was aborted inside a prefilter, stop there
9100 if ( state === 2 ) {
9101 return jqXHR;
9102 }
9103
9104 // We can fire global events as of now if asked to
9105 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9106 fireGlobals = jQuery.event && s.global;
9107
9108 // Watch for a new set of requests
9109 if ( fireGlobals && jQuery.active++ === 0 ) {
9110 jQuery.event.trigger("ajaxStart");
9111 }
9112
9113 // Uppercase the type
9114 s.type = s.type.toUpperCase();
9115
9116 // Determine if request has content
9117 s.hasContent = !rnoContent.test( s.type );
9118
9119 // Save the URL in case we're toying with the If-Modified-Since
9120 // and/or If-None-Match header later on
9121 cacheURL = s.url;
9122
9123 // More options handling for requests with no content
9124 if ( !s.hasContent ) {
9125
9126 // If data is available, append data to url
9127 if ( s.data ) {
9128 cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
9129 // #9682: remove data so that it's not used in an eventual retry
9130 delete s.data;
9131 }
9132
9133 // Add anti-cache in url if needed
9134 if ( s.cache === false ) {
9135 s.url = rts.test( cacheURL ) ?
9136
9137 // If there is already a '_' parameter, set its value
9138 cacheURL.replace( rts, "$1_=" + nonce++ ) :
9139
9140 // Otherwise add one to the end
9141 cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
9142 }
9143 }
9144
9145 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9146 if ( s.ifModified ) {
9147 if ( jQuery.lastModified[ cacheURL ] ) {
9148 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
9149 }
9150 if ( jQuery.etag[ cacheURL ] ) {
9151 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
9152 }
9153 }
9154
9155 // Set the correct header, if data is being sent
9156 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
9157 jqXHR.setRequestHeader( "Content-Type", s.contentType );
9158 }
9159
9160 // Set the Accepts header for the server, depending on the dataType
9161 jqXHR.setRequestHeader(
9162 "Accept",
9163 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
9164 s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
9165 s.accepts[ "*" ]
9166 );
9167
9168 // Check for headers option
9169 for ( i in s.headers ) {
9170 jqXHR.setRequestHeader( i, s.headers[ i ] );
9171 }
9172
9173 // Allow custom headers/mimetypes and early abort
9174 if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
9175 // Abort if not done already and return
9176 return jqXHR.abort();
9177 }
9178
9179 // aborting is no longer a cancellation
9180 strAbort = "abort";
9181
9182 // Install callbacks on deferreds
9183 for ( i in { success: 1, error: 1, complete: 1 } ) {
9184 jqXHR[ i ]( s[ i ] );
9185 }
9186
9187 // Get transport
9188 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
9189
9190 // If no transport, we auto-abort
9191 if ( !transport ) {
9192 done( -1, "No Transport" );
9193 } else {
9194 jqXHR.readyState = 1;
9195
9196 // Send global event
9197 if ( fireGlobals ) {
9198 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
9199 }
9200 // Timeout
9201 if ( s.async && s.timeout > 0 ) {
9202 timeoutTimer = setTimeout(function() {
9203 jqXHR.abort("timeout");
9204 }, s.timeout );
9205 }
9206
9207 try {
9208 state = 1;
9209 transport.send( requestHeaders, done );
9210 } catch ( e ) {
9211 // Propagate exception as error if not done
9212 if ( state < 2 ) {
9213 done( -1, e );
9214 // Simply rethrow otherwise
9215 } else {
9216 throw e;
9217 }
9218 }
9219 }
9220
9221 // Callback for when everything is done
9222 function done( status, nativeStatusText, responses, headers ) {
9223 var isSuccess, success, error, response, modified,
9224 statusText = nativeStatusText;
9225
9226 // Called once
9227 if ( state === 2 ) {
9228 return;
9229 }
9230
9231 // State is "done" now
9232 state = 2;
9233
9234 // Clear timeout if it exists
9235 if ( timeoutTimer ) {
9236 clearTimeout( timeoutTimer );
9237 }
9238
9239 // Dereference transport for early garbage collection
9240 // (no matter how long the jqXHR object will be used)
9241 transport = undefined;
9242
9243 // Cache response headers
9244 responseHeadersString = headers || "";
9245
9246 // Set readyState
9247 jqXHR.readyState = status > 0 ? 4 : 0;
9248
9249 // Determine if successful
9250 isSuccess = status >= 200 && status < 300 || status === 304;
9251
9252 // Get response data
9253 if ( responses ) {
9254 response = ajaxHandleResponses( s, jqXHR, responses );
9255 }
9256
9257 // Convert no matter what (that way responseXXX fields are always set)
9258 response = ajaxConvert( s, response, jqXHR, isSuccess );
9259
9260 // If successful, handle type chaining
9261 if ( isSuccess ) {
9262
9263 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9264 if ( s.ifModified ) {
9265 modified = jqXHR.getResponseHeader("Last-Modified");
9266 if ( modified ) {
9267 jQuery.lastModified[ cacheURL ] = modified;
9268 }
9269 modified = jqXHR.getResponseHeader("etag");
9270 if ( modified ) {
9271 jQuery.etag[ cacheURL ] = modified;
9272 }
9273 }
9274
9275 // if no content
9276 if ( status === 204 || s.type === "HEAD" ) {
9277 statusText = "nocontent";
9278
9279 // if not modified
9280 } else if ( status === 304 ) {
9281 statusText = "notmodified";
9282
9283 // If we have data, let's convert it
9284 } else {
9285 statusText = response.state;
9286 success = response.data;
9287 error = response.error;
9288 isSuccess = !error;
9289 }
9290 } else {
9291 // We extract error from statusText
9292 // then normalize statusText and status for non-aborts
9293 error = statusText;
9294 if ( status || !statusText ) {
9295 statusText = "error";
9296 if ( status < 0 ) {
9297 status = 0;
9298 }
9299 }
9300 }
9301
9302 // Set data for the fake xhr object
9303 jqXHR.status = status;
9304 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
9305
9306 // Success/Error
9307 if ( isSuccess ) {
9308 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
9309 } else {
9310 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
9311 }
9312
9313 // Status-dependent callbacks
9314 jqXHR.statusCode( statusCode );
9315 statusCode = undefined;
9316
9317 if ( fireGlobals ) {
9318 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
9319 [ jqXHR, s, isSuccess ? success : error ] );
9320 }
9321
9322 // Complete
9323 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
9324
9325 if ( fireGlobals ) {
9326 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
9327 // Handle the global AJAX counter
9328 if ( !( --jQuery.active ) ) {
9329 jQuery.event.trigger("ajaxStop");
9330 }
9331 }
9332 }
9333
9334 return jqXHR;
9335 },
9336
9337 getJSON: function( url, data, callback ) {
9338 return jQuery.get( url, data, callback, "json" );
9339 },
9340
9341 getScript: function( url, callback ) {
9342 return jQuery.get( url, undefined, callback, "script" );
9343 }
9344 });
9345
9346 jQuery.each( [ "get", "post" ], function( i, method ) {
9347 jQuery[ method ] = function( url, data, callback, type ) {
9348 // shift arguments if data argument was omitted
9349 if ( jQuery.isFunction( data ) ) {
9350 type = type || callback;
9351 callback = data;
9352 data = undefined;
9353 }
9354
9355 return jQuery.ajax({
9356 url: url,
9357 type: method,
9358 dataType: type,
9359 data: data,
9360 success: callback
9361 });
9362 };
9363 });
9364
9365
9366 jQuery._evalUrl = function( url ) {
9367 return jQuery.ajax({
9368 url: url,
9369 type: "GET",
9370 dataType: "script",
9371 async: false,
9372 global: false,
9373 "throws": true
9374 });
9375 };
9376
9377
9378 jQuery.fn.extend({
9379 wrapAll: function( html ) {
9380 if ( jQuery.isFunction( html ) ) {
9381 return this.each(function(i) {
9382 jQuery(this).wrapAll( html.call(this, i) );
9383 });
9384 }
9385
9386 if ( this[0] ) {
9387 // The elements to wrap the target around
9388 var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
9389
9390 if ( this[0].parentNode ) {
9391 wrap.insertBefore( this[0] );
9392 }
9393
9394 wrap.map(function() {
9395 var elem = this;
9396
9397 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
9398 elem = elem.firstChild;
9399 }
9400
9401 return elem;
9402 }).append( this );
9403 }
9404
9405 return this;
9406 },
9407
9408 wrapInner: function( html ) {
9409 if ( jQuery.isFunction( html ) ) {
9410 return this.each(function(i) {
9411 jQuery(this).wrapInner( html.call(this, i) );
9412 });
9413 }
9414
9415 return this.each(function() {
9416 var self = jQuery( this ),
9417 contents = self.contents();
9418
9419 if ( contents.length ) {
9420 contents.wrapAll( html );
9421
9422 } else {
9423 self.append( html );
9424 }
9425 });
9426 },
9427
9428 wrap: function( html ) {
9429 var isFunction = jQuery.isFunction( html );
9430
9431 return this.each(function(i) {
9432 jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
9433 });
9434 },
9435
9436 unwrap: function() {
9437 return this.parent().each(function() {
9438 if ( !jQuery.nodeName( this, "body" ) ) {
9439 jQuery( this ).replaceWith( this.childNodes );
9440 }
9441 }).end();
9442 }
9443 });
9444
9445
9446 jQuery.expr.filters.hidden = function( elem ) {
9447 // Support: Opera <= 12.12
9448 // Opera reports offsetWidths and offsetHeights less than zero on some elements
9449 return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
9450 (!support.reliableHiddenOffsets() &&
9451 ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
9452 };
9453
9454 jQuery.expr.filters.visible = function( elem ) {
9455 return !jQuery.expr.filters.hidden( elem );
9456 };
9457
9458
9459
9460
9461 var r20 = /%20/g,
9462 rbracket = /\[\]$/,
9463 rCRLF = /\r?\n/g,
9464 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
9465 rsubmittable = /^(?:input|select|textarea|keygen)/i;
9466
9467 function buildParams( prefix, obj, traditional, add ) {
9468 var name;
9469
9470 if ( jQuery.isArray( obj ) ) {
9471 // Serialize array item.
9472 jQuery.each( obj, function( i, v ) {
9473 if ( traditional || rbracket.test( prefix ) ) {
9474 // Treat each array item as a scalar.
9475 add( prefix, v );
9476
9477 } else {
9478 // Item is non-scalar (array or object), encode its numeric index.
9479 buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
9480 }
9481 });
9482
9483 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
9484 // Serialize object item.
9485 for ( name in obj ) {
9486 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
9487 }
9488
9489 } else {
9490 // Serialize scalar item.
9491 add( prefix, obj );
9492 }
9493 }
9494
9495 // Serialize an array of form elements or a set of
9496 // key/values into a query string
9497 jQuery.param = function( a, traditional ) {
9498 var prefix,
9499 s = [],
9500 add = function( key, value ) {
9501 // If value is a function, invoke it and return its value
9502 value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
9503 s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
9504 };
9505
9506 // Set traditional to true for jQuery <= 1.3.2 behavior.
9507 if ( traditional === undefined ) {
9508 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
9509 }
9510
9511 // If an array was passed in, assume that it is an array of form elements.
9512 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
9513 // Serialize the form elements
9514 jQuery.each( a, function() {
9515 add( this.name, this.value );
9516 });
9517
9518 } else {
9519 // If traditional, encode the "old" way (the way 1.3.2 or older
9520 // did it), otherwise encode params recursively.
9521 for ( prefix in a ) {
9522 buildParams( prefix, a[ prefix ], traditional, add );
9523 }
9524 }
9525
9526 // Return the resulting serialization
9527 return s.join( "&" ).replace( r20, "+" );
9528 };
9529
9530 jQuery.fn.extend({
9531 serialize: function() {
9532 return jQuery.param( this.serializeArray() );
9533 },
9534 serializeArray: function() {
9535 return this.map(function() {
9536 // Can add propHook for "elements" to filter or add form elements
9537 var elements = jQuery.prop( this, "elements" );
9538 return elements ? jQuery.makeArray( elements ) : this;
9539 })
9540 .filter(function() {
9541 var type = this.type;
9542 // Use .is(":disabled") so that fieldset[disabled] works
9543 return this.name && !jQuery( this ).is( ":disabled" ) &&
9544 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
9545 ( this.checked || !rcheckableType.test( type ) );
9546 })
9547 .map(function( i, elem ) {
9548 var val = jQuery( this ).val();
9549
9550 return val == null ?
9551 null :
9552 jQuery.isArray( val ) ?
9553 jQuery.map( val, function( val ) {
9554 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9555 }) :
9556 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9557 }).get();
9558 }
9559 });
9560
9561
9562 // Create the request object
9563 // (This is still attached to ajaxSettings for backward compatibility)
9564 jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
9565 // Support: IE6+
9566 function() {
9567
9568 // XHR cannot access local files, always use ActiveX for that case
9569 return !this.isLocal &&
9570
9571 // Support: IE7-8
9572 // oldIE XHR does not support non-RFC2616 methods (#13240)
9573 // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
9574 // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
9575 // Although this check for six methods instead of eight
9576 // since IE also does not support "trace" and "connect"
9577 /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
9578
9579 createStandardXHR() || createActiveXHR();
9580 } :
9581 // For all other browsers, use the standard XMLHttpRequest object
9582 createStandardXHR;
9583
9584 var xhrId = 0,
9585 xhrCallbacks = {},
9586 xhrSupported = jQuery.ajaxSettings.xhr();
9587
9588 // Support: IE<10
9589 // Open requests must be manually aborted on unload (#5280)
9590 // See https://support.microsoft.com/kb/2856746 for more info
9591 if ( window.attachEvent ) {
9592 window.attachEvent( "onunload", function() {
9593 for ( var key in xhrCallbacks ) {
9594 xhrCallbacks[ key ]( undefined, true );
9595 }
9596 });
9597 }
9598
9599 // Determine support properties
9600 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
9601 xhrSupported = support.ajax = !!xhrSupported;
9602
9603 // Create transport if the browser can provide an xhr
9604 if ( xhrSupported ) {
9605
9606 jQuery.ajaxTransport(function( options ) {
9607 // Cross domain only allowed if supported through XMLHttpRequest
9608 if ( !options.crossDomain || support.cors ) {
9609
9610 var callback;
9611
9612 return {
9613 send: function( headers, complete ) {
9614 var i,
9615 xhr = options.xhr(),
9616 id = ++xhrId;
9617
9618 // Open the socket
9619 xhr.open( options.type, options.url, options.async, options.username, options.password );
9620
9621 // Apply custom fields if provided
9622 if ( options.xhrFields ) {
9623 for ( i in options.xhrFields ) {
9624 xhr[ i ] = options.xhrFields[ i ];
9625 }
9626 }
9627
9628 // Override mime type if needed
9629 if ( options.mimeType && xhr.overrideMimeType ) {
9630 xhr.overrideMimeType( options.mimeType );
9631 }
9632
9633 // X-Requested-With header
9634 // For cross-domain requests, seeing as conditions for a preflight are
9635 // akin to a jigsaw puzzle, we simply never set it to be sure.
9636 // (it can always be set on a per-request basis or even using ajaxSetup)
9637 // For same-domain requests, won't change header if already provided.
9638 if ( !options.crossDomain && !headers["X-Requested-With"] ) {
9639 headers["X-Requested-With"] = "XMLHttpRequest";
9640 }
9641
9642 // Set headers
9643 for ( i in headers ) {
9644 // Support: IE<9
9645 // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
9646 // request header to a null-value.
9647 //
9648 // To keep consistent with other XHR implementations, cast the value
9649 // to string and ignore `undefined`.
9650 if ( headers[ i ] !== undefined ) {
9651 xhr.setRequestHeader( i, headers[ i ] + "" );
9652 }
9653 }
9654
9655 // Do send the request
9656 // This may raise an exception which is actually
9657 // handled in jQuery.ajax (so no try/catch here)
9658 xhr.send( ( options.hasContent && options.data ) || null );
9659
9660 // Listener
9661 callback = function( _, isAbort ) {
9662 var status, statusText, responses;
9663
9664 // Was never called and is aborted or complete
9665 if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
9666 // Clean up
9667 delete xhrCallbacks[ id ];
9668 callback = undefined;
9669 xhr.onreadystatechange = jQuery.noop;
9670
9671 // Abort manually if needed
9672 if ( isAbort ) {
9673 if ( xhr.readyState !== 4 ) {
9674 xhr.abort();
9675 }
9676 } else {
9677 responses = {};
9678 status = xhr.status;
9679
9680 // Support: IE<10
9681 // Accessing binary-data responseText throws an exception
9682 // (#11426)
9683 if ( typeof xhr.responseText === "string" ) {
9684 responses.text = xhr.responseText;
9685 }
9686
9687 // Firefox throws an exception when accessing
9688 // statusText for faulty cross-domain requests
9689 try {
9690 statusText = xhr.statusText;
9691 } catch( e ) {
9692 // We normalize with Webkit giving an empty statusText
9693 statusText = "";
9694 }
9695
9696 // Filter status for non standard behaviors
9697
9698 // If the request is local and we have data: assume a success
9699 // (success with no data won't get notified, that's the best we
9700 // can do given current implementations)
9701 if ( !status && options.isLocal && !options.crossDomain ) {
9702 status = responses.text ? 200 : 404;
9703 // IE - #1450: sometimes returns 1223 when it should be 204
9704 } else if ( status === 1223 ) {
9705 status = 204;
9706 }
9707 }
9708 }
9709
9710 // Call complete if needed
9711 if ( responses ) {
9712 complete( status, statusText, responses, xhr.getAllResponseHeaders() );
9713 }
9714 };
9715
9716 if ( !options.async ) {
9717 // if we're in sync mode we fire the callback
9718 callback();
9719 } else if ( xhr.readyState === 4 ) {
9720 // (IE6 & IE7) if it's in cache and has been
9721 // retrieved directly we need to fire the callback
9722 setTimeout( callback );
9723 } else {
9724 // Add to the list of active xhr callbacks
9725 xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
9726 }
9727 },
9728
9729 abort: function() {
9730 if ( callback ) {
9731 callback( undefined, true );
9732 }
9733 }
9734 };
9735 }
9736 });
9737 }
9738
9739 // Functions to create xhrs
9740 function createStandardXHR() {
9741 try {
9742 return new window.XMLHttpRequest();
9743 } catch( e ) {}
9744 }
9745
9746 function createActiveXHR() {
9747 try {
9748 return new window.ActiveXObject( "Microsoft.XMLHTTP" );
9749 } catch( e ) {}
9750 }
9751
9752
9753
9754
9755 // Install script dataType
9756 jQuery.ajaxSetup({
9757 accepts: {
9758 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
9759 },
9760 contents: {
9761 script: /(?:java|ecma)script/
9762 },
9763 converters: {
9764 "text script": function( text ) {
9765 jQuery.globalEval( text );
9766 return text;
9767 }
9768 }
9769 });
9770
9771 // Handle cache's special case and global
9772 jQuery.ajaxPrefilter( "script", function( s ) {
9773 if ( s.cache === undefined ) {
9774 s.cache = false;
9775 }
9776 if ( s.crossDomain ) {
9777 s.type = "GET";
9778 s.global = false;
9779 }
9780 });
9781
9782 // Bind script tag hack transport
9783 jQuery.ajaxTransport( "script", function(s) {
9784
9785 // This transport only deals with cross domain requests
9786 if ( s.crossDomain ) {
9787
9788 var script,
9789 head = document.head || jQuery("head")[0] || document.documentElement;
9790
9791 return {
9792
9793 send: function( _, callback ) {
9794
9795 script = document.createElement("script");
9796
9797 script.async = true;
9798
9799 if ( s.scriptCharset ) {
9800 script.charset = s.scriptCharset;
9801 }
9802
9803 script.src = s.url;
9804
9805 // Attach handlers for all browsers
9806 script.onload = script.onreadystatechange = function( _, isAbort ) {
9807
9808 if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
9809
9810 // Handle memory leak in IE
9811 script.onload = script.onreadystatechange = null;
9812
9813 // Remove the script
9814 if ( script.parentNode ) {
9815 script.parentNode.removeChild( script );
9816 }
9817
9818 // Dereference the script
9819 script = null;
9820
9821 // Callback if not abort
9822 if ( !isAbort ) {
9823 callback( 200, "success" );
9824 }
9825 }
9826 };
9827
9828 // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
9829 // Use native DOM manipulation to avoid our domManip AJAX trickery
9830 head.insertBefore( script, head.firstChild );
9831 },
9832
9833 abort: function() {
9834 if ( script ) {
9835 script.onload( undefined, true );
9836 }
9837 }
9838 };
9839 }
9840 });
9841
9842
9843
9844
9845 var oldCallbacks = [],
9846 rjsonp = /(=)\?(?=&|$)|\?\?/;
9847
9848 // Default jsonp settings
9849 jQuery.ajaxSetup({
9850 jsonp: "callback",
9851 jsonpCallback: function() {
9852 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
9853 this[ callback ] = true;
9854 return callback;
9855 }
9856 });
9857
9858 // Detect, normalize options and install callbacks for jsonp requests
9859 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
9860
9861 var callbackName, overwritten, responseContainer,
9862 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
9863 "url" :
9864 typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
9865 );
9866
9867 // Handle iff the expected data type is "jsonp" or we have a parameter to set
9868 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
9869
9870 // Get callback name, remembering preexisting value associated with it
9871 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
9872 s.jsonpCallback() :
9873 s.jsonpCallback;
9874
9875 // Insert callback into url or form data
9876 if ( jsonProp ) {
9877 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
9878 } else if ( s.jsonp !== false ) {
9879 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
9880 }
9881
9882 // Use data converter to retrieve json after script execution
9883 s.converters["script json"] = function() {
9884 if ( !responseContainer ) {
9885 jQuery.error( callbackName + " was not called" );
9886 }
9887 return responseContainer[ 0 ];
9888 };
9889
9890 // force json dataType
9891 s.dataTypes[ 0 ] = "json";
9892
9893 // Install callback
9894 overwritten = window[ callbackName ];
9895 window[ callbackName ] = function() {
9896 responseContainer = arguments;
9897 };
9898
9899 // Clean-up function (fires after converters)
9900 jqXHR.always(function() {
9901 // Restore preexisting value
9902 window[ callbackName ] = overwritten;
9903
9904 // Save back as free
9905 if ( s[ callbackName ] ) {
9906 // make sure that re-using the options doesn't screw things around
9907 s.jsonpCallback = originalSettings.jsonpCallback;
9908
9909 // save the callback name for future use
9910 oldCallbacks.push( callbackName );
9911 }
9912
9913 // Call if it was a function and we have a response
9914 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
9915 overwritten( responseContainer[ 0 ] );
9916 }
9917
9918 responseContainer = overwritten = undefined;
9919 });
9920
9921 // Delegate to script
9922 return "script";
9923 }
9924 });
9925
9926
9927
9928
9929 // data: string of html
9930 // context (optional): If specified, the fragment will be created in this context, defaults to document
9931 // keepScripts (optional): If true, will include scripts passed in the html string
9932 jQuery.parseHTML = function( data, context, keepScripts ) {
9933 if ( !data || typeof data !== "string" ) {
9934 return null;
9935 }
9936 if ( typeof context === "boolean" ) {
9937 keepScripts = context;
9938 context = false;
9939 }
9940 context = context || document;
9941
9942 var parsed = rsingleTag.exec( data ),
9943 scripts = !keepScripts && [];
9944
9945 // Single tag
9946 if ( parsed ) {
9947 return [ context.createElement( parsed[1] ) ];
9948 }
9949
9950 parsed = jQuery.buildFragment( [ data ], context, scripts );
9951
9952 if ( scripts && scripts.length ) {
9953 jQuery( scripts ).remove();
9954 }
9955
9956 return jQuery.merge( [], parsed.childNodes );
9957 };
9958
9959
9960 // Keep a copy of the old load method
9961 var _load = jQuery.fn.load;
9962
9963 /**
9964 * Load a url into a page
9965 */
9966 jQuery.fn.load = function( url, params, callback ) {
9967 if ( typeof url !== "string" && _load ) {
9968 return _load.apply( this, arguments );
9969 }
9970
9971 var selector, response, type,
9972 self = this,
9973 off = url.indexOf(" ");
9974
9975 if ( off >= 0 ) {
9976 selector = jQuery.trim( url.slice( off, url.length ) );
9977 url = url.slice( 0, off );
9978 }
9979
9980 // If it's a function
9981 if ( jQuery.isFunction( params ) ) {
9982
9983 // We assume that it's the callback
9984 callback = params;
9985 params = undefined;
9986
9987 // Otherwise, build a param string
9988 } else if ( params && typeof params === "object" ) {
9989 type = "POST";
9990 }
9991
9992 // If we have elements to modify, make the request
9993 if ( self.length > 0 ) {
9994 jQuery.ajax({
9995 url: url,
9996
9997 // if "type" variable is undefined, then "GET" method will be used
9998 type: type,
9999 dataType: "html",
10000 data: params
10001 }).done(function( responseText ) {
10002
10003 // Save response for use in complete callback
10004 response = arguments;
10005
10006 self.html( selector ?
10007
10008 // If a selector was specified, locate the right elements in a dummy div
10009 // Exclude scripts to avoid IE 'Permission Denied' errors
10010 jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
10011
10012 // Otherwise use the full result
10013 responseText );
10014
10015 }).complete( callback && function( jqXHR, status ) {
10016 self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
10017 });
10018 }
10019
10020 return this;
10021 };
10022
10023
10024
10025
10026 // Attach a bunch of functions for handling common AJAX events
10027 jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
10028 jQuery.fn[ type ] = function( fn ) {
10029 return this.on( type, fn );
10030 };
10031 });
10032
10033
10034
10035
10036 jQuery.expr.filters.animated = function( elem ) {
10037 return jQuery.grep(jQuery.timers, function( fn ) {
10038 return elem === fn.elem;
10039 }).length;
10040 };
10041
10042
10043
10044
10045
10046 var docElem = window.document.documentElement;
10047
10048 /**
10049 * Gets a window from an element
10050 */
10051 function getWindow( elem ) {
10052 return jQuery.isWindow( elem ) ?
10053 elem :
10054 elem.nodeType === 9 ?
10055 elem.defaultView || elem.parentWindow :
10056 false;
10057 }
10058
10059 jQuery.offset = {
10060 setOffset: function( elem, options, i ) {
10061 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
10062 position = jQuery.css( elem, "position" ),
10063 curElem = jQuery( elem ),
10064 props = {};
10065
10066 // set position first, in-case top/left are set even on static elem
10067 if ( position === "static" ) {
10068 elem.style.position = "relative";
10069 }
10070
10071 curOffset = curElem.offset();
10072 curCSSTop = jQuery.css( elem, "top" );
10073 curCSSLeft = jQuery.css( elem, "left" );
10074 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
10075 jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
10076
10077 // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
10078 if ( calculatePosition ) {
10079 curPosition = curElem.position();
10080 curTop = curPosition.top;
10081 curLeft = curPosition.left;
10082 } else {
10083 curTop = parseFloat( curCSSTop ) || 0;
10084 curLeft = parseFloat( curCSSLeft ) || 0;
10085 }
10086
10087 if ( jQuery.isFunction( options ) ) {
10088 options = options.call( elem, i, curOffset );
10089 }
10090
10091 if ( options.top != null ) {
10092 props.top = ( options.top - curOffset.top ) + curTop;
10093 }
10094 if ( options.left != null ) {
10095 props.left = ( options.left - curOffset.left ) + curLeft;
10096 }
10097
10098 if ( "using" in options ) {
10099 options.using.call( elem, props );
10100 } else {
10101 curElem.css( props );
10102 }
10103 }
10104 };
10105
10106 jQuery.fn.extend({
10107 offset: function( options ) {
10108 if ( arguments.length ) {
10109 return options === undefined ?
10110 this :
10111 this.each(function( i ) {
10112 jQuery.offset.setOffset( this, options, i );
10113 });
10114 }
10115
10116 var docElem, win,
10117 box = { top: 0, left: 0 },
10118 elem = this[ 0 ],
10119 doc = elem && elem.ownerDocument;
10120
10121 if ( !doc ) {
10122 return;
10123 }
10124
10125 docElem = doc.documentElement;
10126
10127 // Make sure it's not a disconnected DOM node
10128 if ( !jQuery.contains( docElem, elem ) ) {
10129 return box;
10130 }
10131
10132 // If we don't have gBCR, just use 0,0 rather than error
10133 // BlackBerry 5, iOS 3 (original iPhone)
10134 if ( typeof elem.getBoundingClientRect !== strundefined ) {
10135 box = elem.getBoundingClientRect();
10136 }
10137 win = getWindow( doc );
10138 return {
10139 top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
10140 left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
10141 };
10142 },
10143
10144 position: function() {
10145 if ( !this[ 0 ] ) {
10146 return;
10147 }
10148
10149 var offsetParent, offset,
10150 parentOffset = { top: 0, left: 0 },
10151 elem = this[ 0 ];
10152
10153 // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
10154 if ( jQuery.css( elem, "position" ) === "fixed" ) {
10155 // we assume that getBoundingClientRect is available when computed position is fixed
10156 offset = elem.getBoundingClientRect();
10157 } else {
10158 // Get *real* offsetParent
10159 offsetParent = this.offsetParent();
10160
10161 // Get correct offsets
10162 offset = this.offset();
10163 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
10164 parentOffset = offsetParent.offset();
10165 }
10166
10167 // Add offsetParent borders
10168 parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
10169 parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
10170 }
10171
10172 // Subtract parent offsets and element margins
10173 // note: when an element has margin: auto the offsetLeft and marginLeft
10174 // are the same in Safari causing offset.left to incorrectly be 0
10175 return {
10176 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
10177 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
10178 };
10179 },
10180
10181 offsetParent: function() {
10182 return this.map(function() {
10183 var offsetParent = this.offsetParent || docElem;
10184
10185 while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
10186 offsetParent = offsetParent.offsetParent;
10187 }
10188 return offsetParent || docElem;
10189 });
10190 }
10191 });
10192
10193 // Create scrollLeft and scrollTop methods
10194 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
10195 var top = /Y/.test( prop );
10196
10197 jQuery.fn[ method ] = function( val ) {
10198 return access( this, function( elem, method, val ) {
10199 var win = getWindow( elem );
10200
10201 if ( val === undefined ) {
10202 return win ? (prop in win) ? win[ prop ] :
10203 win.document.documentElement[ method ] :
10204 elem[ method ];
10205 }
10206
10207 if ( win ) {
10208 win.scrollTo(
10209 !top ? val : jQuery( win ).scrollLeft(),
10210 top ? val : jQuery( win ).scrollTop()
10211 );
10212
10213 } else {
10214 elem[ method ] = val;
10215 }
10216 }, method, val, arguments.length, null );
10217 };
10218 });
10219
10220 // Add the top/left cssHooks using jQuery.fn.position
10221 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
10222 // getComputedStyle returns percent when specified for top/left/bottom/right
10223 // rather than make the css module depend on the offset module, we just check for it here
10224 jQuery.each( [ "top", "left" ], function( i, prop ) {
10225 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
10226 function( elem, computed ) {
10227 if ( computed ) {
10228 computed = curCSS( elem, prop );
10229 // if curCSS returns percentage, fallback to offset
10230 return rnumnonpx.test( computed ) ?
10231 jQuery( elem ).position()[ prop ] + "px" :
10232 computed;
10233 }
10234 }
10235 );
10236 });
10237
10238
10239 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10240 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
10241 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
10242 // margin is only for outerHeight, outerWidth
10243 jQuery.fn[ funcName ] = function( margin, value ) {
10244 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
10245 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
10246
10247 return access( this, function( elem, type, value ) {
10248 var doc;
10249
10250 if ( jQuery.isWindow( elem ) ) {
10251 // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
10252 // isn't a whole lot we can do. See pull request at this URL for discussion:
10253 // https://github.com/jquery/jquery/pull/764
10254 return elem.document.documentElement[ "client" + name ];
10255 }
10256
10257 // Get document width or height
10258 if ( elem.nodeType === 9 ) {
10259 doc = elem.documentElement;
10260
10261 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
10262 // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
10263 return Math.max(
10264 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
10265 elem.body[ "offset" + name ], doc[ "offset" + name ],
10266 doc[ "client" + name ]
10267 );
10268 }
10269
10270 return value === undefined ?
10271 // Get width or height on the element, requesting but not forcing parseFloat
10272 jQuery.css( elem, type, extra ) :
10273
10274 // Set width or height on the element
10275 jQuery.style( elem, type, value, extra );
10276 }, type, chainable ? margin : undefined, chainable, null );
10277 };
10278 });
10279 });
10280
10281
10282 // The number of elements contained in the matched element set
10283 jQuery.fn.size = function() {
10284 return this.length;
10285 };
10286
10287 jQuery.fn.andSelf = jQuery.fn.addBack;
10288
10289
10290
10291
10292 // Register as a named AMD module, since jQuery can be concatenated with other
10293 // files that may use define, but not via a proper concatenation script that
10294 // understands anonymous AMD modules. A named AMD is safest and most robust
10295 // way to register. Lowercase jquery is used because AMD module names are
10296 // derived from file names, and jQuery is normally delivered in a lowercase
10297 // file name. Do this after creating the global so that if an AMD module wants
10298 // to call noConflict to hide this version of jQuery, it will work.
10299
10300 // Note that for maximum portability, libraries that are not jQuery should
10301 // declare themselves as anonymous modules, and avoid setting a global if an
10302 // AMD loader is present. jQuery is a special case. For more information, see
10303 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10304
10305 if ( typeof define === "function" && define.amd ) {
10306 define( "jquery", [], function() {
10307 return jQuery;
10308 });
10309 }
10310
10311
10312
10313
10314 var
10315 // Map over jQuery in case of overwrite
10316 _jQuery = window.jQuery,
10317
10318 // Map over the $ in case of overwrite
10319 _$ = window.$;
10320
10321 jQuery.noConflict = function( deep ) {
10322 if ( window.$ === jQuery ) {
10323 window.$ = _$;
10324 }
10325
10326 if ( deep && window.jQuery === jQuery ) {
10327 window.jQuery = _jQuery;
10328 }
10329
10330 return jQuery;
10331 };
10332
10333 // Expose jQuery and $ identifiers, even in
10334 // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10335 // and CommonJS for browser emulators (#13566)
10336 if ( typeof noGlobal === strundefined ) {
10337 window.jQuery = window.$ = jQuery;
10338 }
10339
10340
10341
10342
10343 return jQuery;
10344
10345 }));
+0
-7157
docs/_themes/lucuma/static/scripts/lodash.js less more
0 /**
1 * @license
2 * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
3 * Build: `lodash -o ./dist/lodash.compat.js`
4 * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
5 * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
6 * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
7 * Available under MIT license <http://lodash.com/license>
8 */
9 ;(function() {
10
11 /** Used as a safe reference for `undefined` in pre ES5 environments */
12 var undefined;
13
14 /** Used to pool arrays and objects used internally */
15 var arrayPool = [],
16 objectPool = [];
17
18 /** Used to generate unique IDs */
19 var idCounter = 0;
20
21 /** Used internally to indicate various things */
22 var indicatorObject = {};
23
24 /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
25 var keyPrefix = +new Date + '';
26
27 /** Used as the size when optimizations are enabled for large arrays */
28 var largeArraySize = 75;
29
30 /** Used as the max size of the `arrayPool` and `objectPool` */
31 var maxPoolSize = 40;
32
33 /** Used to detect and test whitespace */
34 var whitespace = (
35 // whitespace
36 ' \t\x0B\f\xA0\ufeff' +
37
38 // line terminators
39 '\n\r\u2028\u2029' +
40
41 // unicode category "Zs" space separators
42 '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
43 );
44
45 /** Used to match empty string literals in compiled template source */
46 var reEmptyStringLeading = /\b__p \+= '';/g,
47 reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
48 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
49
50 /**
51 * Used to match ES6 template delimiters
52 * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
53 */
54 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
55
56 /** Used to match regexp flags from their coerced string values */
57 var reFlags = /\w*$/;
58
59 /** Used to detected named functions */
60 var reFuncName = /^\s*function[ \n\r\t]+\w/;
61
62 /** Used to match "interpolate" template delimiters */
63 var reInterpolate = /<%=([\s\S]+?)%>/g;
64
65 /** Used to match leading whitespace and zeros to be removed */
66 var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');
67
68 /** Used to ensure capturing order of template delimiters */
69 var reNoMatch = /($^)/;
70
71 /** Used to detect functions containing a `this` reference */
72 var reThis = /\bthis\b/;
73
74 /** Used to match unescaped characters in compiled string literals */
75 var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
76
77 /** Used to assign default `context` object properties */
78 var contextProps = [
79 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object',
80 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',
81 'parseInt', 'setTimeout'
82 ];
83
84 /** Used to fix the JScript [[DontEnum]] bug */
85 var shadowedProps = [
86 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
87 'toLocaleString', 'toString', 'valueOf'
88 ];
89
90 /** Used to make template sourceURLs easier to identify */
91 var templateCounter = 0;
92
93 /** `Object#toString` result shortcuts */
94 var argsClass = '[object Arguments]',
95 arrayClass = '[object Array]',
96 boolClass = '[object Boolean]',
97 dateClass = '[object Date]',
98 errorClass = '[object Error]',
99 funcClass = '[object Function]',
100 numberClass = '[object Number]',
101 objectClass = '[object Object]',
102 regexpClass = '[object RegExp]',
103 stringClass = '[object String]';
104
105 /** Used to identify object classifications that `_.clone` supports */
106 var cloneableClasses = {};
107 cloneableClasses[funcClass] = false;
108 cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
109 cloneableClasses[boolClass] = cloneableClasses[dateClass] =
110 cloneableClasses[numberClass] = cloneableClasses[objectClass] =
111 cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
112
113 /** Used as an internal `_.debounce` options object */
114 var debounceOptions = {
115 'leading': false,
116 'maxWait': 0,
117 'trailing': false
118 };
119
120 /** Used as the property descriptor for `__bindData__` */
121 var descriptor = {
122 'configurable': false,
123 'enumerable': false,
124 'value': null,
125 'writable': false
126 };
127
128 /** Used as the data object for `iteratorTemplate` */
129 var iteratorData = {
130 'args': '',
131 'array': null,
132 'bottom': '',
133 'firstArg': '',
134 'init': '',
135 'keys': null,
136 'loop': '',
137 'shadowedProps': null,
138 'support': null,
139 'top': '',
140 'useHas': false
141 };
142
143 /** Used to determine if values are of the language type Object */
144 var objectTypes = {
145 'boolean': false,
146 'function': true,
147 'object': true,
148 'number': false,
149 'string': false,
150 'undefined': false
151 };
152
153 /** Used to escape characters for inclusion in compiled string literals */
154 var stringEscapes = {
155 '\\': '\\',
156 "'": "'",
157 '\n': 'n',
158 '\r': 'r',
159 '\t': 't',
160 '\u2028': 'u2028',
161 '\u2029': 'u2029'
162 };
163
164 /** Used as a reference to the global object */
165 var root = (objectTypes[typeof window] && window) || this;
166
167 /** Detect free variable `exports` */
168 var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
169
170 /** Detect free variable `module` */
171 var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
172
173 /** Detect the popular CommonJS extension `module.exports` */
174 var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
175
176 /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
177 var freeGlobal = objectTypes[typeof global] && global;
178 if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
179 root = freeGlobal;
180 }
181
182 /*--------------------------------------------------------------------------*/
183
184 /**
185 * The base implementation of `_.indexOf` without support for binary searches
186 * or `fromIndex` constraints.
187 *
188 * @private
189 * @param {Array} array The array to search.
190 * @param {*} value The value to search for.
191 * @param {number} [fromIndex=0] The index to search from.
192 * @returns {number} Returns the index of the matched value or `-1`.
193 */
194 function baseIndexOf(array, value, fromIndex) {
195 var index = (fromIndex || 0) - 1,
196 length = array ? array.length : 0;
197
198 while (++index < length) {
199 if (array[index] === value) {
200 return index;
201 }
202 }
203 return -1;
204 }
205
206 /**
207 * An implementation of `_.contains` for cache objects that mimics the return
208 * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.
209 *
210 * @private
211 * @param {Object} cache The cache object to inspect.
212 * @param {*} value The value to search for.
213 * @returns {number} Returns `0` if `value` is found, else `-1`.
214 */
215 function cacheIndexOf(cache, value) {
216 var type = typeof value;
217 cache = cache.cache;
218
219 if (type == 'boolean' || value == null) {
220 return cache[value] ? 0 : -1;
221 }
222 if (type != 'number' && type != 'string') {
223 type = 'object';
224 }
225 var key = type == 'number' ? value : keyPrefix + value;
226 cache = (cache = cache[type]) && cache[key];
227
228 return type == 'object'
229 ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)
230 : (cache ? 0 : -1);
231 }
232
233 /**
234 * Adds a given value to the corresponding cache object.
235 *
236 * @private
237 * @param {*} value The value to add to the cache.
238 */
239 function cachePush(value) {
240 var cache = this.cache,
241 type = typeof value;
242
243 if (type == 'boolean' || value == null) {
244 cache[value] = true;
245 } else {
246 if (type != 'number' && type != 'string') {
247 type = 'object';
248 }
249 var key = type == 'number' ? value : keyPrefix + value,
250 typeCache = cache[type] || (cache[type] = {});
251
252 if (type == 'object') {
253 (typeCache[key] || (typeCache[key] = [])).push(value);
254 } else {
255 typeCache[key] = true;
256 }
257 }
258 }
259
260 /**
261 * Used by `_.max` and `_.min` as the default callback when a given
262 * collection is a string value.
263 *
264 * @private
265 * @param {string} value The character to inspect.
266 * @returns {number} Returns the code unit of given character.
267 */
268 function charAtCallback(value) {
269 return value.charCodeAt(0);
270 }
271
272 /**
273 * Used by `sortBy` to compare transformed `collection` elements, stable sorting
274 * them in ascending order.
275 *
276 * @private
277 * @param {Object} a The object to compare to `b`.
278 * @param {Object} b The object to compare to `a`.
279 * @returns {number} Returns the sort order indicator of `1` or `-1`.
280 */
281 function compareAscending(a, b) {
282 var ac = a.criteria,
283 bc = b.criteria,
284 index = -1,
285 length = ac.length;
286
287 while (++index < length) {
288 var value = ac[index],
289 other = bc[index];
290
291 if (value !== other) {
292 if (value > other || typeof value == 'undefined') {
293 return 1;
294 }
295 if (value < other || typeof other == 'undefined') {
296 return -1;
297 }
298 }
299 }
300 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
301 // that causes it, under certain circumstances, to return the same value for
302 // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
303 //
304 // This also ensures a stable sort in V8 and other engines.
305 // See http://code.google.com/p/v8/issues/detail?id=90
306 return a.index - b.index;
307 }
308
309 /**
310 * Creates a cache object to optimize linear searches of large arrays.
311 *
312 * @private
313 * @param {Array} [array=[]] The array to search.
314 * @returns {null|Object} Returns the cache object or `null` if caching should not be used.
315 */
316 function createCache(array) {
317 var index = -1,
318 length = array.length,
319 first = array[0],
320 mid = array[(length / 2) | 0],
321 last = array[length - 1];
322
323 if (first && typeof first == 'object' &&
324 mid && typeof mid == 'object' && last && typeof last == 'object') {
325 return false;
326 }
327 var cache = getObject();
328 cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;
329
330 var result = getObject();
331 result.array = array;
332 result.cache = cache;
333 result.push = cachePush;
334
335 while (++index < length) {
336 result.push(array[index]);
337 }
338 return result;
339 }
340
341 /**
342 * Used by `template` to escape characters for inclusion in compiled
343 * string literals.
344 *
345 * @private
346 * @param {string} match The matched character to escape.
347 * @returns {string} Returns the escaped character.
348 */
349 function escapeStringChar(match) {
350 return '\\' + stringEscapes[match];
351 }
352
353 /**
354 * Gets an array from the array pool or creates a new one if the pool is empty.
355 *
356 * @private
357 * @returns {Array} The array from the pool.
358 */
359 function getArray() {
360 return arrayPool.pop() || [];
361 }
362
363 /**
364 * Gets an object from the object pool or creates a new one if the pool is empty.
365 *
366 * @private
367 * @returns {Object} The object from the pool.
368 */
369 function getObject() {
370 return objectPool.pop() || {
371 'array': null,
372 'cache': null,
373 'criteria': null,
374 'false': false,
375 'index': 0,
376 'null': false,
377 'number': null,
378 'object': null,
379 'push': null,
380 'string': null,
381 'true': false,
382 'undefined': false,
383 'value': null
384 };
385 }
386
387 /**
388 * Checks if `value` is a DOM node in IE < 9.
389 *
390 * @private
391 * @param {*} value The value to check.
392 * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`.
393 */
394 function isNode(value) {
395 // IE < 9 presents DOM nodes as `Object` objects except they have `toString`
396 // methods that are `typeof` "string" and still can coerce nodes to strings
397 return typeof value.toString != 'function' && typeof (value + '') == 'string';
398 }
399
400 /**
401 * Releases the given array back to the array pool.
402 *
403 * @private
404 * @param {Array} [array] The array to release.
405 */
406 function releaseArray(array) {
407 array.length = 0;
408 if (arrayPool.length < maxPoolSize) {
409 arrayPool.push(array);
410 }
411 }
412
413 /**
414 * Releases the given object back to the object pool.
415 *
416 * @private
417 * @param {Object} [object] The object to release.
418 */
419 function releaseObject(object) {
420 var cache = object.cache;
421 if (cache) {
422 releaseObject(cache);
423 }
424 object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;
425 if (objectPool.length < maxPoolSize) {
426 objectPool.push(object);
427 }
428 }
429
430 /**
431 * Slices the `collection` from the `start` index up to, but not including,
432 * the `end` index.
433 *
434 * Note: This function is used instead of `Array#slice` to support node lists
435 * in IE < 9 and to ensure dense arrays are returned.
436 *
437 * @private
438 * @param {Array|Object|string} collection The collection to slice.
439 * @param {number} start The start index.
440 * @param {number} end The end index.
441 * @returns {Array} Returns the new array.
442 */
443 function slice(array, start, end) {
444 start || (start = 0);
445 if (typeof end == 'undefined') {
446 end = array ? array.length : 0;
447 }
448 var index = -1,
449 length = end - start || 0,
450 result = Array(length < 0 ? 0 : length);
451
452 while (++index < length) {
453 result[index] = array[start + index];
454 }
455 return result;
456 }
457
458 /*--------------------------------------------------------------------------*/
459
460 /**
461 * Create a new `lodash` function using the given context object.
462 *
463 * @static
464 * @memberOf _
465 * @category Utilities
466 * @param {Object} [context=root] The context object.
467 * @returns {Function} Returns the `lodash` function.
468 */
469 function runInContext(context) {
470 // Avoid issues with some ES3 environments that attempt to use values, named
471 // after built-in constructors like `Object`, for the creation of literals.
472 // ES5 clears this up by stating that literals must use built-in constructors.
473 // See http://es5.github.io/#x11.1.5.
474 context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
475
476 /** Native constructor references */
477 var Array = context.Array,
478 Boolean = context.Boolean,
479 Date = context.Date,
480 Error = context.Error,
481 Function = context.Function,
482 Math = context.Math,
483 Number = context.Number,
484 Object = context.Object,
485 RegExp = context.RegExp,
486 String = context.String,
487 TypeError = context.TypeError;
488
489 /**
490 * Used for `Array` method references.
491 *
492 * Normally `Array.prototype` would suffice, however, using an array literal
493 * avoids issues in Narwhal.
494 */
495 var arrayRef = [];
496
497 /** Used for native method references */
498 var errorProto = Error.prototype,
499 objectProto = Object.prototype,
500 stringProto = String.prototype;
501
502 /** Used to restore the original `_` reference in `noConflict` */
503 var oldDash = context._;
504
505 /** Used to resolve the internal [[Class]] of values */
506 var toString = objectProto.toString;
507
508 /** Used to detect if a method is native */
509 var reNative = RegExp('^' +
510 String(toString)
511 .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
512 .replace(/toString| for [^\]]+/g, '.*?') + '$'
513 );
514
515 /** Native method shortcuts */
516 var ceil = Math.ceil,
517 clearTimeout = context.clearTimeout,
518 floor = Math.floor,
519 fnToString = Function.prototype.toString,
520 getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
521 hasOwnProperty = objectProto.hasOwnProperty,
522 push = arrayRef.push,
523 propertyIsEnumerable = objectProto.propertyIsEnumerable,
524 setTimeout = context.setTimeout,
525 splice = arrayRef.splice,
526 unshift = arrayRef.unshift;
527
528 /** Used to set meta data on functions */
529 var defineProperty = (function() {
530 // IE 8 only accepts DOM elements
531 try {
532 var o = {},
533 func = isNative(func = Object.defineProperty) && func,
534 result = func(o, o, o) && func;
535 } catch(e) { }
536 return result;
537 }());
538
539 /* Native method shortcuts for methods with the same name as other `lodash` methods */
540 var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,
541 nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,
542 nativeIsFinite = context.isFinite,
543 nativeIsNaN = context.isNaN,
544 nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,
545 nativeMax = Math.max,
546 nativeMin = Math.min,
547 nativeParseInt = context.parseInt,
548 nativeRandom = Math.random;
549
550 /** Used to lookup a built-in constructor by [[Class]] */
551 var ctorByClass = {};
552 ctorByClass[arrayClass] = Array;
553 ctorByClass[boolClass] = Boolean;
554 ctorByClass[dateClass] = Date;
555 ctorByClass[funcClass] = Function;
556 ctorByClass[objectClass] = Object;
557 ctorByClass[numberClass] = Number;
558 ctorByClass[regexpClass] = RegExp;
559 ctorByClass[stringClass] = String;
560
561 /** Used to avoid iterating non-enumerable properties in IE < 9 */
562 var nonEnumProps = {};
563 nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
564 nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true };
565 nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true };
566 nonEnumProps[objectClass] = { 'constructor': true };
567
568 (function() {
569 var length = shadowedProps.length;
570 while (length--) {
571 var key = shadowedProps[length];
572 for (var className in nonEnumProps) {
573 if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) {
574 nonEnumProps[className][key] = false;
575 }
576 }
577 }
578 }());
579
580 /*--------------------------------------------------------------------------*/
581
582 /**
583 * Creates a `lodash` object which wraps the given value to enable intuitive
584 * method chaining.
585 *
586 * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
587 * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
588 * and `unshift`
589 *
590 * Chaining is supported in custom builds as long as the `value` method is
591 * implicitly or explicitly included in the build.
592 *
593 * The chainable wrapper functions are:
594 * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
595 * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
596 * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
597 * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
598 * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
599 * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
600 * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
601 * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
602 * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
603 * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
604 * and `zip`
605 *
606 * The non-chainable wrapper functions are:
607 * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
608 * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,
609 * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
610 * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,
611 * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,
612 * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,
613 * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,
614 * `template`, `unescape`, `uniqueId`, and `value`
615 *
616 * The wrapper functions `first` and `last` return wrapped values when `n` is
617 * provided, otherwise they return unwrapped values.
618 *
619 * Explicit chaining can be enabled by using the `_.chain` method.
620 *
621 * @name _
622 * @constructor
623 * @category Chaining
624 * @param {*} value The value to wrap in a `lodash` instance.
625 * @returns {Object} Returns a `lodash` instance.
626 * @example
627 *
628 * var wrapped = _([1, 2, 3]);
629 *
630 * // returns an unwrapped value
631 * wrapped.reduce(function(sum, num) {
632 * return sum + num;
633 * });
634 * // => 6
635 *
636 * // returns a wrapped value
637 * var squares = wrapped.map(function(num) {
638 * return num * num;
639 * });
640 *
641 * _.isArray(squares);
642 * // => false
643 *
644 * _.isArray(squares.value());
645 * // => true
646 */
647 function lodash(value) {
648 // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
649 return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))
650 ? value
651 : new lodashWrapper(value);
652 }
653
654 /**
655 * A fast path for creating `lodash` wrapper objects.
656 *
657 * @private
658 * @param {*} value The value to wrap in a `lodash` instance.
659 * @param {boolean} chainAll A flag to enable chaining for all methods
660 * @returns {Object} Returns a `lodash` instance.
661 */
662 function lodashWrapper(value, chainAll) {
663 this.__chain__ = !!chainAll;
664 this.__wrapped__ = value;
665 }
666 // ensure `new lodashWrapper` is an instance of `lodash`
667 lodashWrapper.prototype = lodash.prototype;
668
669 /**
670 * An object used to flag environments features.
671 *
672 * @static
673 * @memberOf _
674 * @type Object
675 */
676 var support = lodash.support = {};
677
678 (function() {
679 var ctor = function() { this.x = 1; },
680 object = { '0': 1, 'length': 1 },
681 props = [];
682
683 ctor.prototype = { 'valueOf': 1, 'y': 1 };
684 for (var key in new ctor) { props.push(key); }
685 for (key in arguments) { }
686
687 /**
688 * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
689 *
690 * @memberOf _.support
691 * @type boolean
692 */
693 support.argsClass = toString.call(arguments) == argsClass;
694
695 /**
696 * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
697 *
698 * @memberOf _.support
699 * @type boolean
700 */
701 support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
702
703 /**
704 * Detect if `name` or `message` properties of `Error.prototype` are
705 * enumerable by default. (IE < 9, Safari < 5.1)
706 *
707 * @memberOf _.support
708 * @type boolean
709 */
710 support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name');
711
712 /**
713 * Detect if `prototype` properties are enumerable by default.
714 *
715 * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
716 * (if the prototype or a property on the prototype has been set)
717 * incorrectly sets a function's `prototype` property [[Enumerable]]
718 * value to `true`.
719 *
720 * @memberOf _.support
721 * @type boolean
722 */
723 support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype');
724
725 /**
726 * Detect if functions can be decompiled by `Function#toString`
727 * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
728 *
729 * @memberOf _.support
730 * @type boolean
731 */
732 support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);
733
734 /**
735 * Detect if `Function#name` is supported (all but IE).
736 *
737 * @memberOf _.support
738 * @type boolean
739 */
740 support.funcNames = typeof Function.name == 'string';
741
742 /**
743 * Detect if `arguments` object indexes are non-enumerable
744 * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).
745 *
746 * @memberOf _.support
747 * @type boolean
748 */
749 support.nonEnumArgs = key != 0;
750
751 /**
752 * Detect if properties shadowing those on `Object.prototype` are non-enumerable.
753 *
754 * In IE < 9 an objects own properties, shadowing non-enumerable ones, are
755 * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug).
756 *
757 * @memberOf _.support
758 * @type boolean
759 */
760 support.nonEnumShadows = !/valueOf/.test(props);
761
762 /**
763 * Detect if own properties are iterated after inherited properties (all but IE < 9).
764 *
765 * @memberOf _.support
766 * @type boolean
767 */
768 support.ownLast = props[0] != 'x';
769
770 /**
771 * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
772 *
773 * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()`
774 * and `splice()` functions that fail to remove the last element, `value[0]`,
775 * of array-like objects even though the `length` property is set to `0`.
776 * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()`
777 * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9.
778 *
779 * @memberOf _.support
780 * @type boolean
781 */
782 support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]);
783
784 /**
785 * Detect lack of support for accessing string characters by index.
786 *
787 * IE < 8 can't access characters by index and IE 8 can only access
788 * characters by index on string literals.
789 *
790 * @memberOf _.support
791 * @type boolean
792 */
793 support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
794
795 /**
796 * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9)
797 * and that the JS engine errors when attempting to coerce an object to
798 * a string without a `toString` function.
799 *
800 * @memberOf _.support
801 * @type boolean
802 */
803 try {
804 support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));
805 } catch(e) {
806 support.nodeClass = true;
807 }
808 }(1));
809
810 /**
811 * By default, the template delimiters used by Lo-Dash are similar to those in
812 * embedded Ruby (ERB). Change the following template settings to use alternative
813 * delimiters.
814 *
815 * @static
816 * @memberOf _
817 * @type Object
818 */
819 lodash.templateSettings = {
820
821 /**
822 * Used to detect `data` property values to be HTML-escaped.
823 *
824 * @memberOf _.templateSettings
825 * @type RegExp
826 */
827 'escape': /<%-([\s\S]+?)%>/g,
828
829 /**
830 * Used to detect code to be evaluated.
831 *
832 * @memberOf _.templateSettings
833 * @type RegExp
834 */
835 'evaluate': /<%([\s\S]+?)%>/g,
836
837 /**
838 * Used to detect `data` property values to inject.
839 *
840 * @memberOf _.templateSettings
841 * @type RegExp
842 */
843 'interpolate': reInterpolate,
844
845 /**
846 * Used to reference the data object in the template text.
847 *
848 * @memberOf _.templateSettings
849 * @type string
850 */
851 'variable': '',
852
853 /**
854 * Used to import variables into the compiled template.
855 *
856 * @memberOf _.templateSettings
857 * @type Object
858 */
859 'imports': {
860
861 /**
862 * A reference to the `lodash` function.
863 *
864 * @memberOf _.templateSettings.imports
865 * @type Function
866 */
867 '_': lodash
868 }
869 };
870
871 /*--------------------------------------------------------------------------*/
872
873 /**
874 * The template used to create iterator functions.
875 *
876 * @private
877 * @param {Object} data The data object used to populate the text.
878 * @returns {string} Returns the interpolated text.
879 */
880 var iteratorTemplate = function(obj) {
881
882 var __p = 'var index, iterable = ' +
883 (obj.firstArg) +
884 ', result = ' +
885 (obj.init) +
886 ';\nif (!iterable) return result;\n' +
887 (obj.top) +
888 ';';
889 if (obj.array) {
890 __p += '\nvar length = iterable.length; index = -1;\nif (' +
891 (obj.array) +
892 ') { ';
893 if (support.unindexedChars) {
894 __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } ';
895 }
896 __p += '\n while (++index < length) {\n ' +
897 (obj.loop) +
898 ';\n }\n}\nelse { ';
899 } else if (support.nonEnumArgs) {
900 __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' +
901 (obj.loop) +
902 ';\n }\n } else { ';
903 }
904
905 if (support.enumPrototypes) {
906 __p += '\n var skipProto = typeof iterable == \'function\';\n ';
907 }
908
909 if (support.enumErrorProps) {
910 __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n ';
911 }
912
913 var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); }
914
915 if (obj.useHas && obj.keys) {
916 __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n';
917 if (conditions.length) {
918 __p += ' if (' +
919 (conditions.join(' && ')) +
920 ') {\n ';
921 }
922 __p +=
923 (obj.loop) +
924 '; ';
925 if (conditions.length) {
926 __p += '\n }';
927 }
928 __p += '\n } ';
929 } else {
930 __p += '\n for (index in iterable) {\n';
931 if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) {
932 __p += ' if (' +
933 (conditions.join(' && ')) +
934 ') {\n ';
935 }
936 __p +=
937 (obj.loop) +
938 '; ';
939 if (conditions.length) {
940 __p += '\n }';
941 }
942 __p += '\n } ';
943 if (support.nonEnumShadows) {
944 __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n ';
945 for (k = 0; k < 7; k++) {
946 __p += '\n index = \'' +
947 (obj.shadowedProps[k]) +
948 '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))';
949 if (!obj.useHas) {
950 __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])';
951 }
952 __p += ') {\n ' +
953 (obj.loop) +
954 ';\n } ';
955 }
956 __p += '\n } ';
957 }
958
959 }
960
961 if (obj.array || support.nonEnumArgs) {
962 __p += '\n}';
963 }
964 __p +=
965 (obj.bottom) +
966 ';\nreturn result';
967
968 return __p
969 };
970
971 /*--------------------------------------------------------------------------*/
972
973 /**
974 * The base implementation of `_.bind` that creates the bound function and
975 * sets its meta data.
976 *
977 * @private
978 * @param {Array} bindData The bind data array.
979 * @returns {Function} Returns the new bound function.
980 */
981 function baseBind(bindData) {
982 var func = bindData[0],
983 partialArgs = bindData[2],
984 thisArg = bindData[4];
985
986 function bound() {
987 // `Function#bind` spec
988 // http://es5.github.io/#x15.3.4.5
989 if (partialArgs) {
990 // avoid `arguments` object deoptimizations by using `slice` instead
991 // of `Array.prototype.slice.call` and not assigning `arguments` to a
992 // variable as a ternary expression
993 var args = slice(partialArgs);
994 push.apply(args, arguments);
995 }
996 // mimic the constructor's `return` behavior
997 // http://es5.github.io/#x13.2.2
998 if (this instanceof bound) {
999 // ensure `new bound` is an instance of `func`
1000 var thisBinding = baseCreate(func.prototype),
1001 result = func.apply(thisBinding, args || arguments);
1002 return isObject(result) ? result : thisBinding;
1003 }
1004 return func.apply(thisArg, args || arguments);
1005 }
1006 setBindData(bound, bindData);
1007 return bound;
1008 }
1009
1010 /**
1011 * The base implementation of `_.clone` without argument juggling or support
1012 * for `thisArg` binding.
1013 *
1014 * @private
1015 * @param {*} value The value to clone.
1016 * @param {boolean} [isDeep=false] Specify a deep clone.
1017 * @param {Function} [callback] The function to customize cloning values.
1018 * @param {Array} [stackA=[]] Tracks traversed source objects.
1019 * @param {Array} [stackB=[]] Associates clones with source counterparts.
1020 * @returns {*} Returns the cloned value.
1021 */
1022 function baseClone(value, isDeep, callback, stackA, stackB) {
1023 if (callback) {
1024 var result = callback(value);
1025 if (typeof result != 'undefined') {
1026 return result;
1027 }
1028 }
1029 // inspect [[Class]]
1030 var isObj = isObject(value);
1031 if (isObj) {
1032 var className = toString.call(value);
1033 if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
1034 return value;
1035 }
1036 var ctor = ctorByClass[className];
1037 switch (className) {
1038 case boolClass:
1039 case dateClass:
1040 return new ctor(+value);
1041
1042 case numberClass:
1043 case stringClass:
1044 return new ctor(value);
1045
1046 case regexpClass:
1047 result = ctor(value.source, reFlags.exec(value));
1048 result.lastIndex = value.lastIndex;
1049 return result;
1050 }
1051 } else {
1052 return value;
1053 }
1054 var isArr = isArray(value);
1055 if (isDeep) {
1056 // check for circular references and return corresponding clone
1057 var initedStack = !stackA;
1058 stackA || (stackA = getArray());
1059 stackB || (stackB = getArray());
1060
1061 var length = stackA.length;
1062 while (length--) {
1063 if (stackA[length] == value) {
1064 return stackB[length];
1065 }
1066 }
1067 result = isArr ? ctor(value.length) : {};
1068 }
1069 else {
1070 result = isArr ? slice(value) : assign({}, value);
1071 }
1072 // add array properties assigned by `RegExp#exec`
1073 if (isArr) {
1074 if (hasOwnProperty.call(value, 'index')) {
1075 result.index = value.index;
1076 }
1077 if (hasOwnProperty.call(value, 'input')) {
1078 result.input = value.input;
1079 }
1080 }
1081 // exit for shallow clone
1082 if (!isDeep) {
1083 return result;
1084 }
1085 // add the source value to the stack of traversed objects
1086 // and associate it with its clone
1087 stackA.push(value);
1088 stackB.push(result);
1089
1090 // recursively populate clone (susceptible to call stack limits)
1091 (isArr ? baseEach : forOwn)(value, function(objValue, key) {
1092 result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);
1093 });
1094
1095 if (initedStack) {
1096 releaseArray(stackA);
1097 releaseArray(stackB);
1098 }
1099 return result;
1100 }
1101
1102 /**
1103 * The base implementation of `_.create` without support for assigning
1104 * properties to the created object.
1105 *
1106 * @private
1107 * @param {Object} prototype The object to inherit from.
1108 * @returns {Object} Returns the new object.
1109 */
1110 function baseCreate(prototype, properties) {
1111 return isObject(prototype) ? nativeCreate(prototype) : {};
1112 }
1113 // fallback for browsers without `Object.create`
1114 if (!nativeCreate) {
1115 baseCreate = (function() {
1116 function Object() {}
1117 return function(prototype) {
1118 if (isObject(prototype)) {
1119 Object.prototype = prototype;
1120 var result = new Object;
1121 Object.prototype = null;
1122 }
1123 return result || context.Object();
1124 };
1125 }());
1126 }
1127
1128 /**
1129 * The base implementation of `_.createCallback` without support for creating
1130 * "_.pluck" or "_.where" style callbacks.
1131 *
1132 * @private
1133 * @param {*} [func=identity] The value to convert to a callback.
1134 * @param {*} [thisArg] The `this` binding of the created callback.
1135 * @param {number} [argCount] The number of arguments the callback accepts.
1136 * @returns {Function} Returns a callback function.
1137 */
1138 function baseCreateCallback(func, thisArg, argCount) {
1139 if (typeof func != 'function') {
1140 return identity;
1141 }
1142 // exit early for no `thisArg` or already bound by `Function#bind`
1143 if (typeof thisArg == 'undefined' || !('prototype' in func)) {
1144 return func;
1145 }
1146 var bindData = func.__bindData__;
1147 if (typeof bindData == 'undefined') {
1148 if (support.funcNames) {
1149 bindData = !func.name;
1150 }
1151 bindData = bindData || !support.funcDecomp;
1152 if (!bindData) {
1153 var source = fnToString.call(func);
1154 if (!support.funcNames) {
1155 bindData = !reFuncName.test(source);
1156 }
1157 if (!bindData) {
1158 // checks if `func` references the `this` keyword and stores the result
1159 bindData = reThis.test(source);
1160 setBindData(func, bindData);
1161 }
1162 }
1163 }
1164 // exit early if there are no `this` references or `func` is bound
1165 if (bindData === false || (bindData !== true && bindData[1] & 1)) {
1166 return func;
1167 }
1168 switch (argCount) {
1169 case 1: return function(value) {
1170 return func.call(thisArg, value);
1171 };
1172 case 2: return function(a, b) {
1173 return func.call(thisArg, a, b);
1174 };
1175 case 3: return function(value, index, collection) {
1176 return func.call(thisArg, value, index, collection);
1177 };
1178 case 4: return function(accumulator, value, index, collection) {
1179 return func.call(thisArg, accumulator, value, index, collection);
1180 };
1181 }
1182 return bind(func, thisArg);
1183 }
1184
1185 /**
1186 * The base implementation of `createWrapper` that creates the wrapper and
1187 * sets its meta data.
1188 *
1189 * @private
1190 * @param {Array} bindData The bind data array.
1191 * @returns {Function} Returns the new function.
1192 */
1193 function baseCreateWrapper(bindData) {
1194 var func = bindData[0],
1195 bitmask = bindData[1],
1196 partialArgs = bindData[2],
1197 partialRightArgs = bindData[3],
1198 thisArg = bindData[4],
1199 arity = bindData[5];
1200
1201 var isBind = bitmask & 1,
1202 isBindKey = bitmask & 2,
1203 isCurry = bitmask & 4,
1204 isCurryBound = bitmask & 8,
1205 key = func;
1206
1207 function bound() {
1208 var thisBinding = isBind ? thisArg : this;
1209 if (partialArgs) {
1210 var args = slice(partialArgs);
1211 push.apply(args, arguments);
1212 }
1213 if (partialRightArgs || isCurry) {
1214 args || (args = slice(arguments));
1215 if (partialRightArgs) {
1216 push.apply(args, partialRightArgs);
1217 }
1218 if (isCurry && args.length < arity) {
1219 bitmask |= 16 & ~32;
1220 return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
1221 }
1222 }
1223 args || (args = arguments);
1224 if (isBindKey) {
1225 func = thisBinding[key];
1226 }
1227 if (this instanceof bound) {
1228 thisBinding = baseCreate(func.prototype);
1229 var result = func.apply(thisBinding, args);
1230 return isObject(result) ? result : thisBinding;
1231 }
1232 return func.apply(thisBinding, args);
1233 }
1234 setBindData(bound, bindData);
1235 return bound;
1236 }
1237
1238 /**
1239 * The base implementation of `_.difference` that accepts a single array
1240 * of values to exclude.
1241 *
1242 * @private
1243 * @param {Array} array The array to process.
1244 * @param {Array} [values] The array of values to exclude.
1245 * @returns {Array} Returns a new array of filtered values.
1246 */
1247 function baseDifference(array, values) {
1248 var index = -1,
1249 indexOf = getIndexOf(),
1250 length = array ? array.length : 0,
1251 isLarge = length >= largeArraySize && indexOf === baseIndexOf,
1252 result = [];
1253
1254 if (isLarge) {
1255 var cache = createCache(values);
1256 if (cache) {
1257 indexOf = cacheIndexOf;
1258 values = cache;
1259 } else {
1260 isLarge = false;
1261 }
1262 }
1263 while (++index < length) {
1264 var value = array[index];
1265 if (indexOf(values, value) < 0) {
1266 result.push(value);
1267 }
1268 }
1269 if (isLarge) {
1270 releaseObject(values);
1271 }
1272 return result;
1273 }
1274
1275 /**
1276 * The base implementation of `_.flatten` without support for callback
1277 * shorthands or `thisArg` binding.
1278 *
1279 * @private
1280 * @param {Array} array The array to flatten.
1281 * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
1282 * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
1283 * @param {number} [fromIndex=0] The index to start from.
1284 * @returns {Array} Returns a new flattened array.
1285 */
1286 function baseFlatten(array, isShallow, isStrict, fromIndex) {
1287 var index = (fromIndex || 0) - 1,
1288 length = array ? array.length : 0,
1289 result = [];
1290
1291 while (++index < length) {
1292 var value = array[index];
1293
1294 if (value && typeof value == 'object' && typeof value.length == 'number'
1295 && (isArray(value) || isArguments(value))) {
1296 // recursively flatten arrays (susceptible to call stack limits)
1297 if (!isShallow) {
1298 value = baseFlatten(value, isShallow, isStrict);
1299 }
1300 var valIndex = -1,
1301 valLength = value.length,
1302 resIndex = result.length;
1303
1304 result.length += valLength;
1305 while (++valIndex < valLength) {
1306 result[resIndex++] = value[valIndex];
1307 }
1308 } else if (!isStrict) {
1309 result.push(value);
1310 }
1311 }
1312 return result;
1313 }
1314
1315 /**
1316 * The base implementation of `_.isEqual`, without support for `thisArg` binding,
1317 * that allows partial "_.where" style comparisons.
1318 *
1319 * @private
1320 * @param {*} a The value to compare.
1321 * @param {*} b The other value to compare.
1322 * @param {Function} [callback] The function to customize comparing values.
1323 * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.
1324 * @param {Array} [stackA=[]] Tracks traversed `a` objects.
1325 * @param {Array} [stackB=[]] Tracks traversed `b` objects.
1326 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1327 */
1328 function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
1329 // used to indicate that when comparing objects, `a` has at least the properties of `b`
1330 if (callback) {
1331 var result = callback(a, b);
1332 if (typeof result != 'undefined') {
1333 return !!result;
1334 }
1335 }
1336 // exit early for identical values
1337 if (a === b) {
1338 // treat `+0` vs. `-0` as not equal
1339 return a !== 0 || (1 / a == 1 / b);
1340 }
1341 var type = typeof a,
1342 otherType = typeof b;
1343
1344 // exit early for unlike primitive values
1345 if (a === a &&
1346 !(a && objectTypes[type]) &&
1347 !(b && objectTypes[otherType])) {
1348 return false;
1349 }
1350 // exit early for `null` and `undefined` avoiding ES3's Function#call behavior
1351 // http://es5.github.io/#x15.3.4.4
1352 if (a == null || b == null) {
1353 return a === b;
1354 }
1355 // compare [[Class]] names
1356 var className = toString.call(a),
1357 otherClass = toString.call(b);
1358
1359 if (className == argsClass) {
1360 className = objectClass;
1361 }
1362 if (otherClass == argsClass) {
1363 otherClass = objectClass;
1364 }
1365 if (className != otherClass) {
1366 return false;
1367 }
1368 switch (className) {
1369 case boolClass:
1370 case dateClass:
1371 // coerce dates and booleans to numbers, dates to milliseconds and booleans
1372 // to `1` or `0` treating invalid dates coerced to `NaN` as not equal
1373 return +a == +b;
1374
1375 case numberClass:
1376 // treat `NaN` vs. `NaN` as equal
1377 return (a != +a)
1378 ? b != +b
1379 // but treat `+0` vs. `-0` as not equal
1380 : (a == 0 ? (1 / a == 1 / b) : a == +b);
1381
1382 case regexpClass:
1383 case stringClass:
1384 // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)
1385 // treat string primitives and their corresponding object instances as equal
1386 return a == String(b);
1387 }
1388 var isArr = className == arrayClass;
1389 if (!isArr) {
1390 // unwrap any `lodash` wrapped values
1391 var aWrapped = hasOwnProperty.call(a, '__wrapped__'),
1392 bWrapped = hasOwnProperty.call(b, '__wrapped__');
1393
1394 if (aWrapped || bWrapped) {
1395 return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);
1396 }
1397 // exit for functions and DOM nodes
1398 if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) {
1399 return false;
1400 }
1401 // in older versions of Opera, `arguments` objects have `Array` constructors
1402 var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor,
1403 ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor;
1404
1405 // non `Object` object instances with different constructors are not equal
1406 if (ctorA != ctorB &&
1407 !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
1408 ('constructor' in a && 'constructor' in b)
1409 ) {
1410 return false;
1411 }
1412 }
1413 // assume cyclic structures are equal
1414 // the algorithm for detecting cyclic structures is adapted from ES 5.1
1415 // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)
1416 var initedStack = !stackA;
1417 stackA || (stackA = getArray());
1418 stackB || (stackB = getArray());
1419
1420 var length = stackA.length;
1421 while (length--) {
1422 if (stackA[length] == a) {
1423 return stackB[length] == b;
1424 }
1425 }
1426 var size = 0;
1427 result = true;
1428
1429 // add `a` and `b` to the stack of traversed objects
1430 stackA.push(a);
1431 stackB.push(b);
1432
1433 // recursively compare objects and arrays (susceptible to call stack limits)
1434 if (isArr) {
1435 // compare lengths to determine if a deep comparison is necessary
1436 length = a.length;
1437 size = b.length;
1438 result = size == length;
1439
1440 if (result || isWhere) {
1441 // deep compare the contents, ignoring non-numeric properties
1442 while (size--) {
1443 var index = length,
1444 value = b[size];
1445
1446 if (isWhere) {
1447 while (index--) {
1448 if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {
1449 break;
1450 }
1451 }
1452 } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {
1453 break;
1454 }
1455 }
1456 }
1457 }
1458 else {
1459 // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`
1460 // which, in this case, is more costly
1461 forIn(b, function(value, key, b) {
1462 if (hasOwnProperty.call(b, key)) {
1463 // count the number of properties.
1464 size++;
1465 // deep compare each property value.
1466 return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));
1467 }
1468 });
1469
1470 if (result && !isWhere) {
1471 // ensure both objects have the same number of properties
1472 forIn(a, function(value, key, a) {
1473 if (hasOwnProperty.call(a, key)) {
1474 // `size` will be `-1` if `a` has more properties than `b`
1475 return (result = --size > -1);
1476 }
1477 });
1478 }
1479 }
1480 stackA.pop();
1481 stackB.pop();
1482
1483 if (initedStack) {
1484 releaseArray(stackA);
1485 releaseArray(stackB);
1486 }
1487 return result;
1488 }
1489
1490 /**
1491 * The base implementation of `_.merge` without argument juggling or support
1492 * for `thisArg` binding.
1493 *
1494 * @private
1495 * @param {Object} object The destination object.
1496 * @param {Object} source The source object.
1497 * @param {Function} [callback] The function to customize merging properties.
1498 * @param {Array} [stackA=[]] Tracks traversed source objects.
1499 * @param {Array} [stackB=[]] Associates values with source counterparts.
1500 */
1501 function baseMerge(object, source, callback, stackA, stackB) {
1502 (isArray(source) ? forEach : forOwn)(source, function(source, key) {
1503 var found,
1504 isArr,
1505 result = source,
1506 value = object[key];
1507
1508 if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
1509 // avoid merging previously merged cyclic sources
1510 var stackLength = stackA.length;
1511 while (stackLength--) {
1512 if ((found = stackA[stackLength] == source)) {
1513 value = stackB[stackLength];
1514 break;
1515 }
1516 }
1517 if (!found) {
1518 var isShallow;
1519 if (callback) {
1520 result = callback(value, source);
1521 if ((isShallow = typeof result != 'undefined')) {
1522 value = result;
1523 }
1524 }
1525 if (!isShallow) {
1526 value = isArr
1527 ? (isArray(value) ? value : [])
1528 : (isPlainObject(value) ? value : {});
1529 }
1530 // add `source` and associated `value` to the stack of traversed objects
1531 stackA.push(source);
1532 stackB.push(value);
1533
1534 // recursively merge objects and arrays (susceptible to call stack limits)
1535 if (!isShallow) {
1536 baseMerge(value, source, callback, stackA, stackB);
1537 }
1538 }
1539 }
1540 else {
1541 if (callback) {
1542 result = callback(value, source);
1543 if (typeof result == 'undefined') {
1544 result = source;
1545 }
1546 }
1547 if (typeof result != 'undefined') {
1548 value = result;
1549 }
1550 }
1551 object[key] = value;
1552 });
1553 }
1554
1555 /**
1556 * The base implementation of `_.random` without argument juggling or support
1557 * for returning floating-point numbers.
1558 *
1559 * @private
1560 * @param {number} min The minimum possible value.
1561 * @param {number} max The maximum possible value.
1562 * @returns {number} Returns a random number.
1563 */
1564 function baseRandom(min, max) {
1565 return min + floor(nativeRandom() * (max - min + 1));
1566 }
1567
1568 /**
1569 * The base implementation of `_.uniq` without support for callback shorthands
1570 * or `thisArg` binding.
1571 *
1572 * @private
1573 * @param {Array} array The array to process.
1574 * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
1575 * @param {Function} [callback] The function called per iteration.
1576 * @returns {Array} Returns a duplicate-value-free array.
1577 */
1578 function baseUniq(array, isSorted, callback) {
1579 var index = -1,
1580 indexOf = getIndexOf(),
1581 length = array ? array.length : 0,
1582 result = [];
1583
1584 var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,
1585 seen = (callback || isLarge) ? getArray() : result;
1586
1587 if (isLarge) {
1588 var cache = createCache(seen);
1589 indexOf = cacheIndexOf;
1590 seen = cache;
1591 }
1592 while (++index < length) {
1593 var value = array[index],
1594 computed = callback ? callback(value, index, array) : value;
1595
1596 if (isSorted
1597 ? !index || seen[seen.length - 1] !== computed
1598 : indexOf(seen, computed) < 0
1599 ) {
1600 if (callback || isLarge) {
1601 seen.push(computed);
1602 }
1603 result.push(value);
1604 }
1605 }
1606 if (isLarge) {
1607 releaseArray(seen.array);
1608 releaseObject(seen);
1609 } else if (callback) {
1610 releaseArray(seen);
1611 }
1612 return result;
1613 }
1614
1615 /**
1616 * Creates a function that aggregates a collection, creating an object composed
1617 * of keys generated from the results of running each element of the collection
1618 * through a callback. The given `setter` function sets the keys and values
1619 * of the composed object.
1620 *
1621 * @private
1622 * @param {Function} setter The setter function.
1623 * @returns {Function} Returns the new aggregator function.
1624 */
1625 function createAggregator(setter) {
1626 return function(collection, callback, thisArg) {
1627 var result = {};
1628 callback = lodash.createCallback(callback, thisArg, 3);
1629
1630 if (isArray(collection)) {
1631 var index = -1,
1632 length = collection.length;
1633
1634 while (++index < length) {
1635 var value = collection[index];
1636 setter(result, value, callback(value, index, collection), collection);
1637 }
1638 } else {
1639 baseEach(collection, function(value, key, collection) {
1640 setter(result, value, callback(value, key, collection), collection);
1641 });
1642 }
1643 return result;
1644 };
1645 }
1646
1647 /**
1648 * Creates a function that, when called, either curries or invokes `func`
1649 * with an optional `this` binding and partially applied arguments.
1650 *
1651 * @private
1652 * @param {Function|string} func The function or method name to reference.
1653 * @param {number} bitmask The bitmask of method flags to compose.
1654 * The bitmask may be composed of the following flags:
1655 * 1 - `_.bind`
1656 * 2 - `_.bindKey`
1657 * 4 - `_.curry`
1658 * 8 - `_.curry` (bound)
1659 * 16 - `_.partial`
1660 * 32 - `_.partialRight`
1661 * @param {Array} [partialArgs] An array of arguments to prepend to those
1662 * provided to the new function.
1663 * @param {Array} [partialRightArgs] An array of arguments to append to those
1664 * provided to the new function.
1665 * @param {*} [thisArg] The `this` binding of `func`.
1666 * @param {number} [arity] The arity of `func`.
1667 * @returns {Function} Returns the new function.
1668 */
1669 function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
1670 var isBind = bitmask & 1,
1671 isBindKey = bitmask & 2,
1672 isCurry = bitmask & 4,
1673 isCurryBound = bitmask & 8,
1674 isPartial = bitmask & 16,
1675 isPartialRight = bitmask & 32;
1676
1677 if (!isBindKey && !isFunction(func)) {
1678 throw new TypeError;
1679 }
1680 if (isPartial && !partialArgs.length) {
1681 bitmask &= ~16;
1682 isPartial = partialArgs = false;
1683 }
1684 if (isPartialRight && !partialRightArgs.length) {
1685 bitmask &= ~32;
1686 isPartialRight = partialRightArgs = false;
1687 }
1688 var bindData = func && func.__bindData__;
1689 if (bindData && bindData !== true) {
1690 // clone `bindData`
1691 bindData = slice(bindData);
1692 if (bindData[2]) {
1693 bindData[2] = slice(bindData[2]);
1694 }
1695 if (bindData[3]) {
1696 bindData[3] = slice(bindData[3]);
1697 }
1698 // set `thisBinding` is not previously bound
1699 if (isBind && !(bindData[1] & 1)) {
1700 bindData[4] = thisArg;
1701 }
1702 // set if previously bound but not currently (subsequent curried functions)
1703 if (!isBind && bindData[1] & 1) {
1704 bitmask |= 8;
1705 }
1706 // set curried arity if not yet set
1707 if (isCurry && !(bindData[1] & 4)) {
1708 bindData[5] = arity;
1709 }
1710 // append partial left arguments
1711 if (isPartial) {
1712 push.apply(bindData[2] || (bindData[2] = []), partialArgs);
1713 }
1714 // append partial right arguments
1715 if (isPartialRight) {
1716 unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
1717 }
1718 // merge flags
1719 bindData[1] |= bitmask;
1720 return createWrapper.apply(null, bindData);
1721 }
1722 // fast path for `_.bind`
1723 var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
1724 return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
1725 }
1726
1727 /**
1728 * Creates compiled iteration functions.
1729 *
1730 * @private
1731 * @param {...Object} [options] The compile options object(s).
1732 * @param {string} [options.array] Code to determine if the iterable is an array or array-like.
1733 * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop.
1734 * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration.
1735 * @param {string} [options.args] A comma separated string of iteration function arguments.
1736 * @param {string} [options.top] Code to execute before the iteration branches.
1737 * @param {string} [options.loop] Code to execute in the object loop.
1738 * @param {string} [options.bottom] Code to execute after the iteration branches.
1739 * @returns {Function} Returns the compiled function.
1740 */
1741 function createIterator() {
1742 // data properties
1743 iteratorData.shadowedProps = shadowedProps;
1744
1745 // iterator options
1746 iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';
1747 iteratorData.init = 'iterable';
1748 iteratorData.useHas = true;
1749
1750 // merge options into a template data object
1751 for (var object, index = 0; object = arguments[index]; index++) {
1752 for (var key in object) {
1753 iteratorData[key] = object[key];
1754 }
1755 }
1756 var args = iteratorData.args;
1757 iteratorData.firstArg = /^[^,]+/.exec(args)[0];
1758
1759 // create the function factory
1760 var factory = Function(
1761 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +
1762 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +
1763 'objectTypes, nonEnumProps, stringClass, stringProto, toString',
1764 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}'
1765 );
1766
1767 // return the compiled function
1768 return factory(
1769 baseCreateCallback, errorClass, errorProto, hasOwnProperty,
1770 indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,
1771 objectTypes, nonEnumProps, stringClass, stringProto, toString
1772 );
1773 }
1774
1775 /**
1776 * Used by `escape` to convert characters to HTML entities.
1777 *
1778 * @private
1779 * @param {string} match The matched character to escape.
1780 * @returns {string} Returns the escaped character.
1781 */
1782 function escapeHtmlChar(match) {
1783 return htmlEscapes[match];
1784 }
1785
1786 /**
1787 * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
1788 * customized, this method returns the custom method, otherwise it returns
1789 * the `baseIndexOf` function.
1790 *
1791 * @private
1792 * @returns {Function} Returns the "indexOf" function.
1793 */
1794 function getIndexOf() {
1795 var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;
1796 return result;
1797 }
1798
1799 /**
1800 * Checks if `value` is a native function.
1801 *
1802 * @private
1803 * @param {*} value The value to check.
1804 * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.
1805 */
1806 function isNative(value) {
1807 return typeof value == 'function' && reNative.test(value);
1808 }
1809
1810 /**
1811 * Sets `this` binding data on a given function.
1812 *
1813 * @private
1814 * @param {Function} func The function to set data on.
1815 * @param {Array} value The data array to set.
1816 */
1817 var setBindData = !defineProperty ? noop : function(func, value) {
1818 descriptor.value = value;
1819 defineProperty(func, '__bindData__', descriptor);
1820 };
1821
1822 /**
1823 * A fallback implementation of `isPlainObject` which checks if a given value
1824 * is an object created by the `Object` constructor, assuming objects created
1825 * by the `Object` constructor have no inherited enumerable properties and that
1826 * there are no `Object.prototype` extensions.
1827 *
1828 * @private
1829 * @param {*} value The value to check.
1830 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
1831 */
1832 function shimIsPlainObject(value) {
1833 var ctor,
1834 result;
1835
1836 // avoid non Object objects, `arguments` objects, and DOM elements
1837 if (!(value && toString.call(value) == objectClass) ||
1838 (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) ||
1839 (!support.argsClass && isArguments(value)) ||
1840 (!support.nodeClass && isNode(value))) {
1841 return false;
1842 }
1843 // IE < 9 iterates inherited properties before own properties. If the first
1844 // iterated property is an object's own property then there are no inherited
1845 // enumerable properties.
1846 if (support.ownLast) {
1847 forIn(value, function(value, key, object) {
1848 result = hasOwnProperty.call(object, key);
1849 return false;
1850 });
1851 return result !== false;
1852 }
1853 // In most environments an object's own properties are iterated before
1854 // its inherited properties. If the last iterated property is an object's
1855 // own property then there are no inherited enumerable properties.
1856 forIn(value, function(value, key) {
1857 result = key;
1858 });
1859 return typeof result == 'undefined' || hasOwnProperty.call(value, result);
1860 }
1861
1862 /**
1863 * Used by `unescape` to convert HTML entities to characters.
1864 *
1865 * @private
1866 * @param {string} match The matched character to unescape.
1867 * @returns {string} Returns the unescaped character.
1868 */
1869 function unescapeHtmlChar(match) {
1870 return htmlUnescapes[match];
1871 }
1872
1873 /*--------------------------------------------------------------------------*/
1874
1875 /**
1876 * Checks if `value` is an `arguments` object.
1877 *
1878 * @static
1879 * @memberOf _
1880 * @category Objects
1881 * @param {*} value The value to check.
1882 * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.
1883 * @example
1884 *
1885 * (function() { return _.isArguments(arguments); })(1, 2, 3);
1886 * // => true
1887 *
1888 * _.isArguments([1, 2, 3]);
1889 * // => false
1890 */
1891 function isArguments(value) {
1892 return value && typeof value == 'object' && typeof value.length == 'number' &&
1893 toString.call(value) == argsClass || false;
1894 }
1895 // fallback for browsers that can't detect `arguments` objects by [[Class]]
1896 if (!support.argsClass) {
1897 isArguments = function(value) {
1898 return value && typeof value == 'object' && typeof value.length == 'number' &&
1899 hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
1900 };
1901 }
1902
1903 /**
1904 * Checks if `value` is an array.
1905 *
1906 * @static
1907 * @memberOf _
1908 * @type Function
1909 * @category Objects
1910 * @param {*} value The value to check.
1911 * @returns {boolean} Returns `true` if the `value` is an array, else `false`.
1912 * @example
1913 *
1914 * (function() { return _.isArray(arguments); })();
1915 * // => false
1916 *
1917 * _.isArray([1, 2, 3]);
1918 * // => true
1919 */
1920 var isArray = nativeIsArray || function(value) {
1921 return value && typeof value == 'object' && typeof value.length == 'number' &&
1922 toString.call(value) == arrayClass || false;
1923 };
1924
1925 /**
1926 * A fallback implementation of `Object.keys` which produces an array of the
1927 * given object's own enumerable property names.
1928 *
1929 * @private
1930 * @type Function
1931 * @param {Object} object The object to inspect.
1932 * @returns {Array} Returns an array of property names.
1933 */
1934 var shimKeys = createIterator({
1935 'args': 'object',
1936 'init': '[]',
1937 'top': 'if (!(objectTypes[typeof object])) return result',
1938 'loop': 'result.push(index)'
1939 });
1940
1941 /**
1942 * Creates an array composed of the own enumerable property names of an object.
1943 *
1944 * @static
1945 * @memberOf _
1946 * @category Objects
1947 * @param {Object} object The object to inspect.
1948 * @returns {Array} Returns an array of property names.
1949 * @example
1950 *
1951 * _.keys({ 'one': 1, 'two': 2, 'three': 3 });
1952 * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)
1953 */
1954 var keys = !nativeKeys ? shimKeys : function(object) {
1955 if (!isObject(object)) {
1956 return [];
1957 }
1958 if ((support.enumPrototypes && typeof object == 'function') ||
1959 (support.nonEnumArgs && object.length && isArguments(object))) {
1960 return shimKeys(object);
1961 }
1962 return nativeKeys(object);
1963 };
1964
1965 /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */
1966 var eachIteratorOptions = {
1967 'args': 'collection, callback, thisArg',
1968 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)",
1969 'array': "typeof length == 'number'",
1970 'keys': keys,
1971 'loop': 'if (callback(iterable[index], index, collection) === false) return result'
1972 };
1973
1974 /** Reusable iterator options for `assign` and `defaults` */
1975 var defaultsIteratorOptions = {
1976 'args': 'object, source, guard',
1977 'top':
1978 'var args = arguments,\n' +
1979 ' argsIndex = 0,\n' +
1980 " argsLength = typeof guard == 'number' ? 2 : args.length;\n" +
1981 'while (++argsIndex < argsLength) {\n' +
1982 ' iterable = args[argsIndex];\n' +
1983 ' if (iterable && objectTypes[typeof iterable]) {',
1984 'keys': keys,
1985 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
1986 'bottom': ' }\n}'
1987 };
1988
1989 /** Reusable iterator options for `forIn` and `forOwn` */
1990 var forOwnIteratorOptions = {
1991 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top,
1992 'array': false
1993 };
1994
1995 /**
1996 * Used to convert characters to HTML entities:
1997 *
1998 * Though the `>` character is escaped for symmetry, characters like `>` and `/`
1999 * don't require escaping in HTML and have no special meaning unless they're part
2000 * of a tag or an unquoted attribute value.
2001 * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")
2002 */
2003 var htmlEscapes = {
2004 '&': '&amp;',
2005 '<': '&lt;',
2006 '>': '&gt;',
2007 '"': '&quot;',
2008 "'": '&#39;'
2009 };
2010
2011 /** Used to convert HTML entities to characters */
2012 var htmlUnescapes = invert(htmlEscapes);
2013
2014 /** Used to match HTML entities and HTML characters */
2015 var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),
2016 reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');
2017
2018 /**
2019 * A function compiled to iterate `arguments` objects, arrays, objects, and
2020 * strings consistenly across environments, executing the callback for each
2021 * element in the collection. The callback is bound to `thisArg` and invoked
2022 * with three arguments; (value, index|key, collection). Callbacks may exit
2023 * iteration early by explicitly returning `false`.
2024 *
2025 * @private
2026 * @type Function
2027 * @param {Array|Object|string} collection The collection to iterate over.
2028 * @param {Function} [callback=identity] The function called per iteration.
2029 * @param {*} [thisArg] The `this` binding of `callback`.
2030 * @returns {Array|Object|string} Returns `collection`.
2031 */
2032 var baseEach = createIterator(eachIteratorOptions);
2033
2034 /*--------------------------------------------------------------------------*/
2035
2036 /**
2037 * Assigns own enumerable properties of source object(s) to the destination
2038 * object. Subsequent sources will overwrite property assignments of previous
2039 * sources. If a callback is provided it will be executed to produce the
2040 * assigned values. The callback is bound to `thisArg` and invoked with two
2041 * arguments; (objectValue, sourceValue).
2042 *
2043 * @static
2044 * @memberOf _
2045 * @type Function
2046 * @alias extend
2047 * @category Objects
2048 * @param {Object} object The destination object.
2049 * @param {...Object} [source] The source objects.
2050 * @param {Function} [callback] The function to customize assigning values.
2051 * @param {*} [thisArg] The `this` binding of `callback`.
2052 * @returns {Object} Returns the destination object.
2053 * @example
2054 *
2055 * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
2056 * // => { 'name': 'fred', 'employer': 'slate' }
2057 *
2058 * var defaults = _.partialRight(_.assign, function(a, b) {
2059 * return typeof a == 'undefined' ? b : a;
2060 * });
2061 *
2062 * var object = { 'name': 'barney' };
2063 * defaults(object, { 'name': 'fred', 'employer': 'slate' });
2064 * // => { 'name': 'barney', 'employer': 'slate' }
2065 */
2066 var assign = createIterator(defaultsIteratorOptions, {
2067 'top':
2068 defaultsIteratorOptions.top.replace(';',
2069 ';\n' +
2070 "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" +
2071 ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' +
2072 "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" +
2073 ' callback = args[--argsLength];\n' +
2074 '}'
2075 ),
2076 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'
2077 });
2078
2079 /**
2080 * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
2081 * be cloned, otherwise they will be assigned by reference. If a callback
2082 * is provided it will be executed to produce the cloned values. If the
2083 * callback returns `undefined` cloning will be handled by the method instead.
2084 * The callback is bound to `thisArg` and invoked with one argument; (value).
2085 *
2086 * @static
2087 * @memberOf _
2088 * @category Objects
2089 * @param {*} value The value to clone.
2090 * @param {boolean} [isDeep=false] Specify a deep clone.
2091 * @param {Function} [callback] The function to customize cloning values.
2092 * @param {*} [thisArg] The `this` binding of `callback`.
2093 * @returns {*} Returns the cloned value.
2094 * @example
2095 *
2096 * var characters = [
2097 * { 'name': 'barney', 'age': 36 },
2098 * { 'name': 'fred', 'age': 40 }
2099 * ];
2100 *
2101 * var shallow = _.clone(characters);
2102 * shallow[0] === characters[0];
2103 * // => true
2104 *
2105 * var deep = _.clone(characters, true);
2106 * deep[0] === characters[0];
2107 * // => false
2108 *
2109 * _.mixin({
2110 * 'clone': _.partialRight(_.clone, function(value) {
2111 * return _.isElement(value) ? value.cloneNode(false) : undefined;
2112 * })
2113 * });
2114 *
2115 * var clone = _.clone(document.body);
2116 * clone.childNodes.length;
2117 * // => 0
2118 */
2119 function clone(value, isDeep, callback, thisArg) {
2120 // allows working with "Collections" methods without using their `index`
2121 // and `collection` arguments for `isDeep` and `callback`
2122 if (typeof isDeep != 'boolean' && isDeep != null) {
2123 thisArg = callback;
2124 callback = isDeep;
2125 isDeep = false;
2126 }
2127 return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
2128 }
2129
2130 /**
2131 * Creates a deep clone of `value`. If a callback is provided it will be
2132 * executed to produce the cloned values. If the callback returns `undefined`
2133 * cloning will be handled by the method instead. The callback is bound to
2134 * `thisArg` and invoked with one argument; (value).
2135 *
2136 * Note: This method is loosely based on the structured clone algorithm. Functions
2137 * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and
2138 * objects created by constructors other than `Object` are cloned to plain `Object` objects.
2139 * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.
2140 *
2141 * @static
2142 * @memberOf _
2143 * @category Objects
2144 * @param {*} value The value to deep clone.
2145 * @param {Function} [callback] The function to customize cloning values.
2146 * @param {*} [thisArg] The `this` binding of `callback`.
2147 * @returns {*} Returns the deep cloned value.
2148 * @example
2149 *
2150 * var characters = [
2151 * { 'name': 'barney', 'age': 36 },
2152 * { 'name': 'fred', 'age': 40 }
2153 * ];
2154 *
2155 * var deep = _.cloneDeep(characters);
2156 * deep[0] === characters[0];
2157 * // => false
2158 *
2159 * var view = {
2160 * 'label': 'docs',
2161 * 'node': element
2162 * };
2163 *
2164 * var clone = _.cloneDeep(view, function(value) {
2165 * return _.isElement(value) ? value.cloneNode(true) : undefined;
2166 * });
2167 *
2168 * clone.node == view.node;
2169 * // => false
2170 */
2171 function cloneDeep(value, callback, thisArg) {
2172 return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));
2173 }
2174
2175 /**
2176 * Creates an object that inherits from the given `prototype` object. If a
2177 * `properties` object is provided its own enumerable properties are assigned
2178 * to the created object.
2179 *
2180 * @static
2181 * @memberOf _
2182 * @category Objects
2183 * @param {Object} prototype The object to inherit from.
2184 * @param {Object} [properties] The properties to assign to the object.
2185 * @returns {Object} Returns the new object.
2186 * @example
2187 *
2188 * function Shape() {
2189 * this.x = 0;
2190 * this.y = 0;
2191 * }
2192 *
2193 * function Circle() {
2194 * Shape.call(this);
2195 * }
2196 *
2197 * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
2198 *
2199 * var circle = new Circle;
2200 * circle instanceof Circle;
2201 * // => true
2202 *
2203 * circle instanceof Shape;
2204 * // => true
2205 */
2206 function create(prototype, properties) {
2207 var result = baseCreate(prototype);
2208 return properties ? assign(result, properties) : result;
2209 }
2210
2211 /**
2212 * Assigns own enumerable properties of source object(s) to the destination
2213 * object for all destination properties that resolve to `undefined`. Once a
2214 * property is set, additional defaults of the same property will be ignored.
2215 *
2216 * @static
2217 * @memberOf _
2218 * @type Function
2219 * @category Objects
2220 * @param {Object} object The destination object.
2221 * @param {...Object} [source] The source objects.
2222 * @param- {Object} [guard] Allows working with `_.reduce` without using its
2223 * `key` and `object` arguments as sources.
2224 * @returns {Object} Returns the destination object.
2225 * @example
2226 *
2227 * var object = { 'name': 'barney' };
2228 * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
2229 * // => { 'name': 'barney', 'employer': 'slate' }
2230 */
2231 var defaults = createIterator(defaultsIteratorOptions);
2232
2233 /**
2234 * This method is like `_.findIndex` except that it returns the key of the
2235 * first element that passes the callback check, instead of the element itself.
2236 *
2237 * If a property name is provided for `callback` the created "_.pluck" style
2238 * callback will return the property value of the given element.
2239 *
2240 * If an object is provided for `callback` the created "_.where" style callback
2241 * will return `true` for elements that have the properties of the given object,
2242 * else `false`.
2243 *
2244 * @static
2245 * @memberOf _
2246 * @category Objects
2247 * @param {Object} object The object to search.
2248 * @param {Function|Object|string} [callback=identity] The function called per
2249 * iteration. If a property name or object is provided it will be used to
2250 * create a "_.pluck" or "_.where" style callback, respectively.
2251 * @param {*} [thisArg] The `this` binding of `callback`.
2252 * @returns {string|undefined} Returns the key of the found element, else `undefined`.
2253 * @example
2254 *
2255 * var characters = {
2256 * 'barney': { 'age': 36, 'blocked': false },
2257 * 'fred': { 'age': 40, 'blocked': true },
2258 * 'pebbles': { 'age': 1, 'blocked': false }
2259 * };
2260 *
2261 * _.findKey(characters, function(chr) {
2262 * return chr.age < 40;
2263 * });
2264 * // => 'barney' (property order is not guaranteed across environments)
2265 *
2266 * // using "_.where" callback shorthand
2267 * _.findKey(characters, { 'age': 1 });
2268 * // => 'pebbles'
2269 *
2270 * // using "_.pluck" callback shorthand
2271 * _.findKey(characters, 'blocked');
2272 * // => 'fred'
2273 */
2274 function findKey(object, callback, thisArg) {
2275 var result;
2276 callback = lodash.createCallback(callback, thisArg, 3);
2277 forOwn(object, function(value, key, object) {
2278 if (callback(value, key, object)) {
2279 result = key;
2280 return false;
2281 }
2282 });
2283 return result;
2284 }
2285
2286 /**
2287 * This method is like `_.findKey` except that it iterates over elements
2288 * of a `collection` in the opposite order.
2289 *
2290 * If a property name is provided for `callback` the created "_.pluck" style
2291 * callback will return the property value of the given element.
2292 *
2293 * If an object is provided for `callback` the created "_.where" style callback
2294 * will return `true` for elements that have the properties of the given object,
2295 * else `false`.
2296 *
2297 * @static
2298 * @memberOf _
2299 * @category Objects
2300 * @param {Object} object The object to search.
2301 * @param {Function|Object|string} [callback=identity] The function called per
2302 * iteration. If a property name or object is provided it will be used to
2303 * create a "_.pluck" or "_.where" style callback, respectively.
2304 * @param {*} [thisArg] The `this` binding of `callback`.
2305 * @returns {string|undefined} Returns the key of the found element, else `undefined`.
2306 * @example
2307 *
2308 * var characters = {
2309 * 'barney': { 'age': 36, 'blocked': true },
2310 * 'fred': { 'age': 40, 'blocked': false },
2311 * 'pebbles': { 'age': 1, 'blocked': true }
2312 * };
2313 *
2314 * _.findLastKey(characters, function(chr) {
2315 * return chr.age < 40;
2316 * });
2317 * // => returns `pebbles`, assuming `_.findKey` returns `barney`
2318 *
2319 * // using "_.where" callback shorthand
2320 * _.findLastKey(characters, { 'age': 40 });
2321 * // => 'fred'
2322 *
2323 * // using "_.pluck" callback shorthand
2324 * _.findLastKey(characters, 'blocked');
2325 * // => 'pebbles'
2326 */
2327 function findLastKey(object, callback, thisArg) {
2328 var result;
2329 callback = lodash.createCallback(callback, thisArg, 3);
2330 forOwnRight(object, function(value, key, object) {
2331 if (callback(value, key, object)) {
2332 result = key;
2333 return false;
2334 }
2335 });
2336 return result;
2337 }
2338
2339 /**
2340 * Iterates over own and inherited enumerable properties of an object,
2341 * executing the callback for each property. The callback is bound to `thisArg`
2342 * and invoked with three arguments; (value, key, object). Callbacks may exit
2343 * iteration early by explicitly returning `false`.
2344 *
2345 * @static
2346 * @memberOf _
2347 * @type Function
2348 * @category Objects
2349 * @param {Object} object The object to iterate over.
2350 * @param {Function} [callback=identity] The function called per iteration.
2351 * @param {*} [thisArg] The `this` binding of `callback`.
2352 * @returns {Object} Returns `object`.
2353 * @example
2354 *
2355 * function Shape() {
2356 * this.x = 0;
2357 * this.y = 0;
2358 * }
2359 *
2360 * Shape.prototype.move = function(x, y) {
2361 * this.x += x;
2362 * this.y += y;
2363 * };
2364 *
2365 * _.forIn(new Shape, function(value, key) {
2366 * console.log(key);
2367 * });
2368 * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
2369 */
2370 var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {
2371 'useHas': false
2372 });
2373
2374 /**
2375 * This method is like `_.forIn` except that it iterates over elements
2376 * of a `collection` in the opposite order.
2377 *
2378 * @static
2379 * @memberOf _
2380 * @category Objects
2381 * @param {Object} object The object to iterate over.
2382 * @param {Function} [callback=identity] The function called per iteration.
2383 * @param {*} [thisArg] The `this` binding of `callback`.
2384 * @returns {Object} Returns `object`.
2385 * @example
2386 *
2387 * function Shape() {
2388 * this.x = 0;
2389 * this.y = 0;
2390 * }
2391 *
2392 * Shape.prototype.move = function(x, y) {
2393 * this.x += x;
2394 * this.y += y;
2395 * };
2396 *
2397 * _.forInRight(new Shape, function(value, key) {
2398 * console.log(key);
2399 * });
2400 * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
2401 */
2402 function forInRight(object, callback, thisArg) {
2403 var pairs = [];
2404
2405 forIn(object, function(value, key) {
2406 pairs.push(key, value);
2407 });
2408
2409 var length = pairs.length;
2410 callback = baseCreateCallback(callback, thisArg, 3);
2411 while (length--) {
2412 if (callback(pairs[length--], pairs[length], object) === false) {
2413 break;
2414 }
2415 }
2416 return object;
2417 }
2418
2419 /**
2420 * Iterates over own enumerable properties of an object, executing the callback
2421 * for each property. The callback is bound to `thisArg` and invoked with three
2422 * arguments; (value, key, object). Callbacks may exit iteration early by
2423 * explicitly returning `false`.
2424 *
2425 * @static
2426 * @memberOf _
2427 * @type Function
2428 * @category Objects
2429 * @param {Object} object The object to iterate over.
2430 * @param {Function} [callback=identity] The function called per iteration.
2431 * @param {*} [thisArg] The `this` binding of `callback`.
2432 * @returns {Object} Returns `object`.
2433 * @example
2434 *
2435 * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
2436 * console.log(key);
2437 * });
2438 * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)
2439 */
2440 var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);
2441
2442 /**
2443 * This method is like `_.forOwn` except that it iterates over elements
2444 * of a `collection` in the opposite order.
2445 *
2446 * @static
2447 * @memberOf _
2448 * @category Objects
2449 * @param {Object} object The object to iterate over.
2450 * @param {Function} [callback=identity] The function called per iteration.
2451 * @param {*} [thisArg] The `this` binding of `callback`.
2452 * @returns {Object} Returns `object`.
2453 * @example
2454 *
2455 * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
2456 * console.log(key);
2457 * });
2458 * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
2459 */
2460 function forOwnRight(object, callback, thisArg) {
2461 var props = keys(object),
2462 length = props.length;
2463
2464 callback = baseCreateCallback(callback, thisArg, 3);
2465 while (length--) {
2466 var key = props[length];
2467 if (callback(object[key], key, object) === false) {
2468 break;
2469 }
2470 }
2471 return object;
2472 }
2473
2474 /**
2475 * Creates a sorted array of property names of all enumerable properties,
2476 * own and inherited, of `object` that have function values.
2477 *
2478 * @static
2479 * @memberOf _
2480 * @alias methods
2481 * @category Objects
2482 * @param {Object} object The object to inspect.
2483 * @returns {Array} Returns an array of property names that have function values.
2484 * @example
2485 *
2486 * _.functions(_);
2487 * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]
2488 */
2489 function functions(object) {
2490 var result = [];
2491 forIn(object, function(value, key) {
2492 if (isFunction(value)) {
2493 result.push(key);
2494 }
2495 });
2496 return result.sort();
2497 }
2498
2499 /**
2500 * Checks if the specified property name exists as a direct property of `object`,
2501 * instead of an inherited property.
2502 *
2503 * @static
2504 * @memberOf _
2505 * @category Objects
2506 * @param {Object} object The object to inspect.
2507 * @param {string} key The name of the property to check.
2508 * @returns {boolean} Returns `true` if key is a direct property, else `false`.
2509 * @example
2510 *
2511 * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
2512 * // => true
2513 */
2514 function has(object, key) {
2515 return object ? hasOwnProperty.call(object, key) : false;
2516 }
2517
2518 /**
2519 * Creates an object composed of the inverted keys and values of the given object.
2520 *
2521 * @static
2522 * @memberOf _
2523 * @category Objects
2524 * @param {Object} object The object to invert.
2525 * @returns {Object} Returns the created inverted object.
2526 * @example
2527 *
2528 * _.invert({ 'first': 'fred', 'second': 'barney' });
2529 * // => { 'fred': 'first', 'barney': 'second' }
2530 */
2531 function invert(object) {
2532 var index = -1,
2533 props = keys(object),
2534 length = props.length,
2535 result = {};
2536
2537 while (++index < length) {
2538 var key = props[index];
2539 result[object[key]] = key;
2540 }
2541 return result;
2542 }
2543
2544 /**
2545 * Checks if `value` is a boolean value.
2546 *
2547 * @static
2548 * @memberOf _
2549 * @category Objects
2550 * @param {*} value The value to check.
2551 * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.
2552 * @example
2553 *
2554 * _.isBoolean(null);
2555 * // => false
2556 */
2557 function isBoolean(value) {
2558 return value === true || value === false ||
2559 value && typeof value == 'object' && toString.call(value) == boolClass || false;
2560 }
2561
2562 /**
2563 * Checks if `value` is a date.
2564 *
2565 * @static
2566 * @memberOf _
2567 * @category Objects
2568 * @param {*} value The value to check.
2569 * @returns {boolean} Returns `true` if the `value` is a date, else `false`.
2570 * @example
2571 *
2572 * _.isDate(new Date);
2573 * // => true
2574 */
2575 function isDate(value) {
2576 return value && typeof value == 'object' && toString.call(value) == dateClass || false;
2577 }
2578
2579 /**
2580 * Checks if `value` is a DOM element.
2581 *
2582 * @static
2583 * @memberOf _
2584 * @category Objects
2585 * @param {*} value The value to check.
2586 * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.
2587 * @example
2588 *
2589 * _.isElement(document.body);
2590 * // => true
2591 */
2592 function isElement(value) {
2593 return value && value.nodeType === 1 || false;
2594 }
2595
2596 /**
2597 * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
2598 * length of `0` and objects with no own enumerable properties are considered
2599 * "empty".
2600 *
2601 * @static
2602 * @memberOf _
2603 * @category Objects
2604 * @param {Array|Object|string} value The value to inspect.
2605 * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
2606 * @example
2607 *
2608 * _.isEmpty([1, 2, 3]);
2609 * // => false
2610 *
2611 * _.isEmpty({});
2612 * // => true
2613 *
2614 * _.isEmpty('');
2615 * // => true
2616 */
2617 function isEmpty(value) {
2618 var result = true;
2619 if (!value) {
2620 return result;
2621 }
2622 var className = toString.call(value),
2623 length = value.length;
2624
2625 if ((className == arrayClass || className == stringClass ||
2626 (support.argsClass ? className == argsClass : isArguments(value))) ||
2627 (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {
2628 return !length;
2629 }
2630 forOwn(value, function() {
2631 return (result = false);
2632 });
2633 return result;
2634 }
2635
2636 /**
2637 * Performs a deep comparison between two values to determine if they are
2638 * equivalent to each other. If a callback is provided it will be executed
2639 * to compare values. If the callback returns `undefined` comparisons will
2640 * be handled by the method instead. The callback is bound to `thisArg` and
2641 * invoked with two arguments; (a, b).
2642 *
2643 * @static
2644 * @memberOf _
2645 * @category Objects
2646 * @param {*} a The value to compare.
2647 * @param {*} b The other value to compare.
2648 * @param {Function} [callback] The function to customize comparing values.
2649 * @param {*} [thisArg] The `this` binding of `callback`.
2650 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2651 * @example
2652 *
2653 * var object = { 'name': 'fred' };
2654 * var copy = { 'name': 'fred' };
2655 *
2656 * object == copy;
2657 * // => false
2658 *
2659 * _.isEqual(object, copy);
2660 * // => true
2661 *
2662 * var words = ['hello', 'goodbye'];
2663 * var otherWords = ['hi', 'goodbye'];
2664 *
2665 * _.isEqual(words, otherWords, function(a, b) {
2666 * var reGreet = /^(?:hello|hi)$/i,
2667 * aGreet = _.isString(a) && reGreet.test(a),
2668 * bGreet = _.isString(b) && reGreet.test(b);
2669 *
2670 * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
2671 * });
2672 * // => true
2673 */
2674 function isEqual(a, b, callback, thisArg) {
2675 return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));
2676 }
2677
2678 /**
2679 * Checks if `value` is, or can be coerced to, a finite number.
2680 *
2681 * Note: This is not the same as native `isFinite` which will return true for
2682 * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.
2683 *
2684 * @static
2685 * @memberOf _
2686 * @category Objects
2687 * @param {*} value The value to check.
2688 * @returns {boolean} Returns `true` if the `value` is finite, else `false`.
2689 * @example
2690 *
2691 * _.isFinite(-101);
2692 * // => true
2693 *
2694 * _.isFinite('10');
2695 * // => true
2696 *
2697 * _.isFinite(true);
2698 * // => false
2699 *
2700 * _.isFinite('');
2701 * // => false
2702 *
2703 * _.isFinite(Infinity);
2704 * // => false
2705 */
2706 function isFinite(value) {
2707 return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));
2708 }
2709
2710 /**
2711 * Checks if `value` is a function.
2712 *
2713 * @static
2714 * @memberOf _
2715 * @category Objects
2716 * @param {*} value The value to check.
2717 * @returns {boolean} Returns `true` if the `value` is a function, else `false`.
2718 * @example
2719 *
2720 * _.isFunction(_);
2721 * // => true
2722 */
2723 function isFunction(value) {
2724 return typeof value == 'function';
2725 }
2726 // fallback for older versions of Chrome and Safari
2727 if (isFunction(/x/)) {
2728 isFunction = function(value) {
2729 return typeof value == 'function' && toString.call(value) == funcClass;
2730 };
2731 }
2732
2733 /**
2734 * Checks if `value` is the language type of Object.
2735 * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
2736 *
2737 * @static
2738 * @memberOf _
2739 * @category Objects
2740 * @param {*} value The value to check.
2741 * @returns {boolean} Returns `true` if the `value` is an object, else `false`.
2742 * @example
2743 *
2744 * _.isObject({});
2745 * // => true
2746 *
2747 * _.isObject([1, 2, 3]);
2748 * // => true
2749 *
2750 * _.isObject(1);
2751 * // => false
2752 */
2753 function isObject(value) {
2754 // check if the value is the ECMAScript language type of Object
2755 // http://es5.github.io/#x8
2756 // and avoid a V8 bug
2757 // http://code.google.com/p/v8/issues/detail?id=2291
2758 return !!(value && objectTypes[typeof value]);
2759 }
2760
2761 /**
2762 * Checks if `value` is `NaN`.
2763 *
2764 * Note: This is not the same as native `isNaN` which will return `true` for
2765 * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.
2766 *
2767 * @static
2768 * @memberOf _
2769 * @category Objects
2770 * @param {*} value The value to check.
2771 * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.
2772 * @example
2773 *
2774 * _.isNaN(NaN);
2775 * // => true
2776 *
2777 * _.isNaN(new Number(NaN));
2778 * // => true
2779 *
2780 * isNaN(undefined);
2781 * // => true
2782 *
2783 * _.isNaN(undefined);
2784 * // => false
2785 */
2786 function isNaN(value) {
2787 // `NaN` as a primitive is the only value that is not equal to itself
2788 // (perform the [[Class]] check first to avoid errors with some host objects in IE)
2789 return isNumber(value) && value != +value;
2790 }
2791
2792 /**
2793 * Checks if `value` is `null`.
2794 *
2795 * @static
2796 * @memberOf _
2797 * @category Objects
2798 * @param {*} value The value to check.
2799 * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.
2800 * @example
2801 *
2802 * _.isNull(null);
2803 * // => true
2804 *
2805 * _.isNull(undefined);
2806 * // => false
2807 */
2808 function isNull(value) {
2809 return value === null;
2810 }
2811
2812 /**
2813 * Checks if `value` is a number.
2814 *
2815 * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.
2816 *
2817 * @static
2818 * @memberOf _
2819 * @category Objects
2820 * @param {*} value The value to check.
2821 * @returns {boolean} Returns `true` if the `value` is a number, else `false`.
2822 * @example
2823 *
2824 * _.isNumber(8.4 * 5);
2825 * // => true
2826 */
2827 function isNumber(value) {
2828 return typeof value == 'number' ||
2829 value && typeof value == 'object' && toString.call(value) == numberClass || false;
2830 }
2831
2832 /**
2833 * Checks if `value` is an object created by the `Object` constructor.
2834 *
2835 * @static
2836 * @memberOf _
2837 * @category Objects
2838 * @param {*} value The value to check.
2839 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
2840 * @example
2841 *
2842 * function Shape() {
2843 * this.x = 0;
2844 * this.y = 0;
2845 * }
2846 *
2847 * _.isPlainObject(new Shape);
2848 * // => false
2849 *
2850 * _.isPlainObject([1, 2, 3]);
2851 * // => false
2852 *
2853 * _.isPlainObject({ 'x': 0, 'y': 0 });
2854 * // => true
2855 */
2856 var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {
2857 if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) {
2858 return false;
2859 }
2860 var valueOf = value.valueOf,
2861 objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);
2862
2863 return objProto
2864 ? (value == objProto || getPrototypeOf(value) == objProto)
2865 : shimIsPlainObject(value);
2866 };
2867
2868 /**
2869 * Checks if `value` is a regular expression.
2870 *
2871 * @static
2872 * @memberOf _
2873 * @category Objects
2874 * @param {*} value The value to check.
2875 * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
2876 * @example
2877 *
2878 * _.isRegExp(/fred/);
2879 * // => true
2880 */
2881 function isRegExp(value) {
2882 return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
2883 }
2884
2885 /**
2886 * Checks if `value` is a string.
2887 *
2888 * @static
2889 * @memberOf _
2890 * @category Objects
2891 * @param {*} value The value to check.
2892 * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
2893 * @example
2894 *
2895 * _.isString('fred');
2896 * // => true
2897 */
2898 function isString(value) {
2899 return typeof value == 'string' ||
2900 value && typeof value == 'object' && toString.call(value) == stringClass || false;
2901 }
2902
2903 /**
2904 * Checks if `value` is `undefined`.
2905 *
2906 * @static
2907 * @memberOf _
2908 * @category Objects
2909 * @param {*} value The value to check.
2910 * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.
2911 * @example
2912 *
2913 * _.isUndefined(void 0);
2914 * // => true
2915 */
2916 function isUndefined(value) {
2917 return typeof value == 'undefined';
2918 }
2919
2920 /**
2921 * Creates an object with the same keys as `object` and values generated by
2922 * running each own enumerable property of `object` through the callback.
2923 * The callback is bound to `thisArg` and invoked with three arguments;
2924 * (value, key, object).
2925 *
2926 * If a property name is provided for `callback` the created "_.pluck" style
2927 * callback will return the property value of the given element.
2928 *
2929 * If an object is provided for `callback` the created "_.where" style callback
2930 * will return `true` for elements that have the properties of the given object,
2931 * else `false`.
2932 *
2933 * @static
2934 * @memberOf _
2935 * @category Objects
2936 * @param {Object} object The object to iterate over.
2937 * @param {Function|Object|string} [callback=identity] The function called
2938 * per iteration. If a property name or object is provided it will be used
2939 * to create a "_.pluck" or "_.where" style callback, respectively.
2940 * @param {*} [thisArg] The `this` binding of `callback`.
2941 * @returns {Array} Returns a new object with values of the results of each `callback` execution.
2942 * @example
2943 *
2944 * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
2945 * // => { 'a': 3, 'b': 6, 'c': 9 }
2946 *
2947 * var characters = {
2948 * 'fred': { 'name': 'fred', 'age': 40 },
2949 * 'pebbles': { 'name': 'pebbles', 'age': 1 }
2950 * };
2951 *
2952 * // using "_.pluck" callback shorthand
2953 * _.mapValues(characters, 'age');
2954 * // => { 'fred': 40, 'pebbles': 1 }
2955 */
2956 function mapValues(object, callback, thisArg) {
2957 var result = {};
2958 callback = lodash.createCallback(callback, thisArg, 3);
2959
2960 forOwn(object, function(value, key, object) {
2961 result[key] = callback(value, key, object);
2962 });
2963 return result;
2964 }
2965
2966 /**
2967 * Recursively merges own enumerable properties of the source object(s), that
2968 * don't resolve to `undefined` into the destination object. Subsequent sources
2969 * will overwrite property assignments of previous sources. If a callback is
2970 * provided it will be executed to produce the merged values of the destination
2971 * and source properties. If the callback returns `undefined` merging will
2972 * be handled by the method instead. The callback is bound to `thisArg` and
2973 * invoked with two arguments; (objectValue, sourceValue).
2974 *
2975 * @static
2976 * @memberOf _
2977 * @category Objects
2978 * @param {Object} object The destination object.
2979 * @param {...Object} [source] The source objects.
2980 * @param {Function} [callback] The function to customize merging properties.
2981 * @param {*} [thisArg] The `this` binding of `callback`.
2982 * @returns {Object} Returns the destination object.
2983 * @example
2984 *
2985 * var names = {
2986 * 'characters': [
2987 * { 'name': 'barney' },
2988 * { 'name': 'fred' }
2989 * ]
2990 * };
2991 *
2992 * var ages = {
2993 * 'characters': [
2994 * { 'age': 36 },
2995 * { 'age': 40 }
2996 * ]
2997 * };
2998 *
2999 * _.merge(names, ages);
3000 * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }
3001 *
3002 * var food = {
3003 * 'fruits': ['apple'],
3004 * 'vegetables': ['beet']
3005 * };
3006 *
3007 * var otherFood = {
3008 * 'fruits': ['banana'],
3009 * 'vegetables': ['carrot']
3010 * };
3011 *
3012 * _.merge(food, otherFood, function(a, b) {
3013 * return _.isArray(a) ? a.concat(b) : undefined;
3014 * });
3015 * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }
3016 */
3017 function merge(object) {
3018 var args = arguments,
3019 length = 2;
3020
3021 if (!isObject(object)) {
3022 return object;
3023 }
3024 // allows working with `_.reduce` and `_.reduceRight` without using
3025 // their `index` and `collection` arguments
3026 if (typeof args[2] != 'number') {
3027 length = args.length;
3028 }
3029 if (length > 3 && typeof args[length - 2] == 'function') {
3030 var callback = baseCreateCallback(args[--length - 1], args[length--], 2);
3031 } else if (length > 2 && typeof args[length - 1] == 'function') {
3032 callback = args[--length];
3033 }
3034 var sources = slice(arguments, 1, length),
3035 index = -1,
3036 stackA = getArray(),
3037 stackB = getArray();
3038
3039 while (++index < length) {
3040 baseMerge(object, sources[index], callback, stackA, stackB);
3041 }
3042 releaseArray(stackA);
3043 releaseArray(stackB);
3044 return object;
3045 }
3046
3047 /**
3048 * Creates a shallow clone of `object` excluding the specified properties.
3049 * Property names may be specified as individual arguments or as arrays of
3050 * property names. If a callback is provided it will be executed for each
3051 * property of `object` omitting the properties the callback returns truey
3052 * for. The callback is bound to `thisArg` and invoked with three arguments;
3053 * (value, key, object).
3054 *
3055 * @static
3056 * @memberOf _
3057 * @category Objects
3058 * @param {Object} object The source object.
3059 * @param {Function|...string|string[]} [callback] The properties to omit or the
3060 * function called per iteration.
3061 * @param {*} [thisArg] The `this` binding of `callback`.
3062 * @returns {Object} Returns an object without the omitted properties.
3063 * @example
3064 *
3065 * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
3066 * // => { 'name': 'fred' }
3067 *
3068 * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
3069 * return typeof value == 'number';
3070 * });
3071 * // => { 'name': 'fred' }
3072 */
3073 function omit(object, callback, thisArg) {
3074 var result = {};
3075 if (typeof callback != 'function') {
3076 var props = [];
3077 forIn(object, function(value, key) {
3078 props.push(key);
3079 });
3080 props = baseDifference(props, baseFlatten(arguments, true, false, 1));
3081
3082 var index = -1,
3083 length = props.length;
3084
3085 while (++index < length) {
3086 var key = props[index];
3087 result[key] = object[key];
3088 }
3089 } else {
3090 callback = lodash.createCallback(callback, thisArg, 3);
3091 forIn(object, function(value, key, object) {
3092 if (!callback(value, key, object)) {
3093 result[key] = value;
3094 }
3095 });
3096 }
3097 return result;
3098 }
3099
3100 /**
3101 * Creates a two dimensional array of an object's key-value pairs,
3102 * i.e. `[[key1, value1], [key2, value2]]`.
3103 *
3104 * @static
3105 * @memberOf _
3106 * @category Objects
3107 * @param {Object} object The object to inspect.
3108 * @returns {Array} Returns new array of key-value pairs.
3109 * @example
3110 *
3111 * _.pairs({ 'barney': 36, 'fred': 40 });
3112 * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
3113 */
3114 function pairs(object) {
3115 var index = -1,
3116 props = keys(object),
3117 length = props.length,
3118 result = Array(length);
3119
3120 while (++index < length) {
3121 var key = props[index];
3122 result[index] = [key, object[key]];
3123 }
3124 return result;
3125 }
3126
3127 /**
3128 * Creates a shallow clone of `object` composed of the specified properties.
3129 * Property names may be specified as individual arguments or as arrays of
3130 * property names. If a callback is provided it will be executed for each
3131 * property of `object` picking the properties the callback returns truey
3132 * for. The callback is bound to `thisArg` and invoked with three arguments;
3133 * (value, key, object).
3134 *
3135 * @static
3136 * @memberOf _
3137 * @category Objects
3138 * @param {Object} object The source object.
3139 * @param {Function|...string|string[]} [callback] The function called per
3140 * iteration or property names to pick, specified as individual property
3141 * names or arrays of property names.
3142 * @param {*} [thisArg] The `this` binding of `callback`.
3143 * @returns {Object} Returns an object composed of the picked properties.
3144 * @example
3145 *
3146 * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
3147 * // => { 'name': 'fred' }
3148 *
3149 * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
3150 * return key.charAt(0) != '_';
3151 * });
3152 * // => { 'name': 'fred' }
3153 */
3154 function pick(object, callback, thisArg) {
3155 var result = {};
3156 if (typeof callback != 'function') {
3157 var index = -1,
3158 props = baseFlatten(arguments, true, false, 1),
3159 length = isObject(object) ? props.length : 0;
3160
3161 while (++index < length) {
3162 var key = props[index];
3163 if (key in object) {
3164 result[key] = object[key];
3165 }
3166 }
3167 } else {
3168 callback = lodash.createCallback(callback, thisArg, 3);
3169 forIn(object, function(value, key, object) {
3170 if (callback(value, key, object)) {
3171 result[key] = value;
3172 }
3173 });
3174 }
3175 return result;
3176 }
3177
3178 /**
3179 * An alternative to `_.reduce` this method transforms `object` to a new
3180 * `accumulator` object which is the result of running each of its own
3181 * enumerable properties through a callback, with each callback execution
3182 * potentially mutating the `accumulator` object. The callback is bound to
3183 * `thisArg` and invoked with four arguments; (accumulator, value, key, object).
3184 * Callbacks may exit iteration early by explicitly returning `false`.
3185 *
3186 * @static
3187 * @memberOf _
3188 * @category Objects
3189 * @param {Array|Object} object The object to iterate over.
3190 * @param {Function} [callback=identity] The function called per iteration.
3191 * @param {*} [accumulator] The custom accumulator value.
3192 * @param {*} [thisArg] The `this` binding of `callback`.
3193 * @returns {*} Returns the accumulated value.
3194 * @example
3195 *
3196 * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {
3197 * num *= num;
3198 * if (num % 2) {
3199 * return result.push(num) < 3;
3200 * }
3201 * });
3202 * // => [1, 9, 25]
3203 *
3204 * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
3205 * result[key] = num * 3;
3206 * });
3207 * // => { 'a': 3, 'b': 6, 'c': 9 }
3208 */
3209 function transform(object, callback, accumulator, thisArg) {
3210 var isArr = isArray(object);
3211 if (accumulator == null) {
3212 if (isArr) {
3213 accumulator = [];
3214 } else {
3215 var ctor = object && object.constructor,
3216 proto = ctor && ctor.prototype;
3217
3218 accumulator = baseCreate(proto);
3219 }
3220 }
3221 if (callback) {
3222 callback = lodash.createCallback(callback, thisArg, 4);
3223 (isArr ? baseEach : forOwn)(object, function(value, index, object) {
3224 return callback(accumulator, value, index, object);
3225 });
3226 }
3227 return accumulator;
3228 }
3229
3230 /**
3231 * Creates an array composed of the own enumerable property values of `object`.
3232 *
3233 * @static
3234 * @memberOf _
3235 * @category Objects
3236 * @param {Object} object The object to inspect.
3237 * @returns {Array} Returns an array of property values.
3238 * @example
3239 *
3240 * _.values({ 'one': 1, 'two': 2, 'three': 3 });
3241 * // => [1, 2, 3] (property order is not guaranteed across environments)
3242 */
3243 function values(object) {
3244 var index = -1,
3245 props = keys(object),
3246 length = props.length,
3247 result = Array(length);
3248
3249 while (++index < length) {
3250 result[index] = object[props[index]];
3251 }
3252 return result;
3253 }
3254
3255 /*--------------------------------------------------------------------------*/
3256
3257 /**
3258 * Creates an array of elements from the specified indexes, or keys, of the
3259 * `collection`. Indexes may be specified as individual arguments or as arrays
3260 * of indexes.
3261 *
3262 * @static
3263 * @memberOf _
3264 * @category Collections
3265 * @param {Array|Object|string} collection The collection to iterate over.
3266 * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`
3267 * to retrieve, specified as individual indexes or arrays of indexes.
3268 * @returns {Array} Returns a new array of elements corresponding to the
3269 * provided indexes.
3270 * @example
3271 *
3272 * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
3273 * // => ['a', 'c', 'e']
3274 *
3275 * _.at(['fred', 'barney', 'pebbles'], 0, 2);
3276 * // => ['fred', 'pebbles']
3277 */
3278 function at(collection) {
3279 var args = arguments,
3280 index = -1,
3281 props = baseFlatten(args, true, false, 1),
3282 length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,
3283 result = Array(length);
3284
3285 if (support.unindexedChars && isString(collection)) {
3286 collection = collection.split('');
3287 }
3288 while(++index < length) {
3289 result[index] = collection[props[index]];
3290 }
3291 return result;
3292 }
3293
3294 /**
3295 * Checks if a given value is present in a collection using strict equality
3296 * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the
3297 * offset from the end of the collection.
3298 *
3299 * @static
3300 * @memberOf _
3301 * @alias include
3302 * @category Collections
3303 * @param {Array|Object|string} collection The collection to iterate over.
3304 * @param {*} target The value to check for.
3305 * @param {number} [fromIndex=0] The index to search from.
3306 * @returns {boolean} Returns `true` if the `target` element is found, else `false`.
3307 * @example
3308 *
3309 * _.contains([1, 2, 3], 1);
3310 * // => true
3311 *
3312 * _.contains([1, 2, 3], 1, 2);
3313 * // => false
3314 *
3315 * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
3316 * // => true
3317 *
3318 * _.contains('pebbles', 'eb');
3319 * // => true
3320 */
3321 function contains(collection, target, fromIndex) {
3322 var index = -1,
3323 indexOf = getIndexOf(),
3324 length = collection ? collection.length : 0,
3325 result = false;
3326
3327 fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;
3328 if (isArray(collection)) {
3329 result = indexOf(collection, target, fromIndex) > -1;
3330 } else if (typeof length == 'number') {
3331 result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;
3332 } else {
3333 baseEach(collection, function(value) {
3334 if (++index >= fromIndex) {
3335 return !(result = value === target);
3336 }
3337 });
3338 }
3339 return result;
3340 }
3341
3342 /**
3343 * Creates an object composed of keys generated from the results of running
3344 * each element of `collection` through the callback. The corresponding value
3345 * of each key is the number of times the key was returned by the callback.
3346 * The callback is bound to `thisArg` and invoked with three arguments;
3347 * (value, index|key, collection).
3348 *
3349 * If a property name is provided for `callback` the created "_.pluck" style
3350 * callback will return the property value of the given element.
3351 *
3352 * If an object is provided for `callback` the created "_.where" style callback
3353 * will return `true` for elements that have the properties of the given object,
3354 * else `false`.
3355 *
3356 * @static
3357 * @memberOf _
3358 * @category Collections
3359 * @param {Array|Object|string} collection The collection to iterate over.
3360 * @param {Function|Object|string} [callback=identity] The function called
3361 * per iteration. If a property name or object is provided it will be used
3362 * to create a "_.pluck" or "_.where" style callback, respectively.
3363 * @param {*} [thisArg] The `this` binding of `callback`.
3364 * @returns {Object} Returns the composed aggregate object.
3365 * @example
3366 *
3367 * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
3368 * // => { '4': 1, '6': 2 }
3369 *
3370 * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
3371 * // => { '4': 1, '6': 2 }
3372 *
3373 * _.countBy(['one', 'two', 'three'], 'length');
3374 * // => { '3': 2, '5': 1 }
3375 */
3376 var countBy = createAggregator(function(result, value, key) {
3377 (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);
3378 });
3379
3380 /**
3381 * Checks if the given callback returns truey value for **all** elements of
3382 * a collection. The callback is bound to `thisArg` and invoked with three
3383 * arguments; (value, index|key, collection).
3384 *
3385 * If a property name is provided for `callback` the created "_.pluck" style
3386 * callback will return the property value of the given element.
3387 *
3388 * If an object is provided for `callback` the created "_.where" style callback
3389 * will return `true` for elements that have the properties of the given object,
3390 * else `false`.
3391 *
3392 * @static
3393 * @memberOf _
3394 * @alias all
3395 * @category Collections
3396 * @param {Array|Object|string} collection The collection to iterate over.
3397 * @param {Function|Object|string} [callback=identity] The function called
3398 * per iteration. If a property name or object is provided it will be used
3399 * to create a "_.pluck" or "_.where" style callback, respectively.
3400 * @param {*} [thisArg] The `this` binding of `callback`.
3401 * @returns {boolean} Returns `true` if all elements passed the callback check,
3402 * else `false`.
3403 * @example
3404 *
3405 * _.every([true, 1, null, 'yes']);
3406 * // => false
3407 *
3408 * var characters = [
3409 * { 'name': 'barney', 'age': 36 },
3410 * { 'name': 'fred', 'age': 40 }
3411 * ];
3412 *
3413 * // using "_.pluck" callback shorthand
3414 * _.every(characters, 'age');
3415 * // => true
3416 *
3417 * // using "_.where" callback shorthand
3418 * _.every(characters, { 'age': 36 });
3419 * // => false
3420 */
3421 function every(collection, callback, thisArg) {
3422 var result = true;
3423 callback = lodash.createCallback(callback, thisArg, 3);
3424
3425 if (isArray(collection)) {
3426 var index = -1,
3427 length = collection.length;
3428
3429 while (++index < length) {
3430 if (!(result = !!callback(collection[index], index, collection))) {
3431 break;
3432 }
3433 }
3434 } else {
3435 baseEach(collection, function(value, index, collection) {
3436 return (result = !!callback(value, index, collection));
3437 });
3438 }
3439 return result;
3440 }
3441
3442 /**
3443 * Iterates over elements of a collection, returning an array of all elements
3444 * the callback returns truey for. The callback is bound to `thisArg` and
3445 * invoked with three arguments; (value, index|key, collection).
3446 *
3447 * If a property name is provided for `callback` the created "_.pluck" style
3448 * callback will return the property value of the given element.
3449 *
3450 * If an object is provided for `callback` the created "_.where" style callback
3451 * will return `true` for elements that have the properties of the given object,
3452 * else `false`.
3453 *
3454 * @static
3455 * @memberOf _
3456 * @alias select
3457 * @category Collections
3458 * @param {Array|Object|string} collection The collection to iterate over.
3459 * @param {Function|Object|string} [callback=identity] The function called
3460 * per iteration. If a property name or object is provided it will be used
3461 * to create a "_.pluck" or "_.where" style callback, respectively.
3462 * @param {*} [thisArg] The `this` binding of `callback`.
3463 * @returns {Array} Returns a new array of elements that passed the callback check.
3464 * @example
3465 *
3466 * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
3467 * // => [2, 4, 6]
3468 *
3469 * var characters = [
3470 * { 'name': 'barney', 'age': 36, 'blocked': false },
3471 * { 'name': 'fred', 'age': 40, 'blocked': true }
3472 * ];
3473 *
3474 * // using "_.pluck" callback shorthand
3475 * _.filter(characters, 'blocked');
3476 * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
3477 *
3478 * // using "_.where" callback shorthand
3479 * _.filter(characters, { 'age': 36 });
3480 * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
3481 */
3482 function filter(collection, callback, thisArg) {
3483 var result = [];
3484 callback = lodash.createCallback(callback, thisArg, 3);
3485
3486 if (isArray(collection)) {
3487 var index = -1,
3488 length = collection.length;
3489
3490 while (++index < length) {
3491 var value = collection[index];
3492 if (callback(value, index, collection)) {
3493 result.push(value);
3494 }
3495 }
3496 } else {
3497 baseEach(collection, function(value, index, collection) {
3498 if (callback(value, index, collection)) {
3499 result.push(value);
3500 }
3501 });
3502 }
3503 return result;
3504 }
3505
3506 /**
3507 * Iterates over elements of a collection, returning the first element that
3508 * the callback returns truey for. The callback is bound to `thisArg` and
3509 * invoked with three arguments; (value, index|key, collection).
3510 *
3511 * If a property name is provided for `callback` the created "_.pluck" style
3512 * callback will return the property value of the given element.
3513 *
3514 * If an object is provided for `callback` the created "_.where" style callback
3515 * will return `true` for elements that have the properties of the given object,
3516 * else `false`.
3517 *
3518 * @static
3519 * @memberOf _
3520 * @alias detect, findWhere
3521 * @category Collections
3522 * @param {Array|Object|string} collection The collection to iterate over.
3523 * @param {Function|Object|string} [callback=identity] The function called
3524 * per iteration. If a property name or object is provided it will be used
3525 * to create a "_.pluck" or "_.where" style callback, respectively.
3526 * @param {*} [thisArg] The `this` binding of `callback`.
3527 * @returns {*} Returns the found element, else `undefined`.
3528 * @example
3529 *
3530 * var characters = [
3531 * { 'name': 'barney', 'age': 36, 'blocked': false },
3532 * { 'name': 'fred', 'age': 40, 'blocked': true },
3533 * { 'name': 'pebbles', 'age': 1, 'blocked': false }
3534 * ];
3535 *
3536 * _.find(characters, function(chr) {
3537 * return chr.age < 40;
3538 * });
3539 * // => { 'name': 'barney', 'age': 36, 'blocked': false }
3540 *
3541 * // using "_.where" callback shorthand
3542 * _.find(characters, { 'age': 1 });
3543 * // => { 'name': 'pebbles', 'age': 1, 'blocked': false }
3544 *
3545 * // using "_.pluck" callback shorthand
3546 * _.find(characters, 'blocked');
3547 * // => { 'name': 'fred', 'age': 40, 'blocked': true }
3548 */
3549 function find(collection, callback, thisArg) {
3550 callback = lodash.createCallback(callback, thisArg, 3);
3551
3552 if (isArray(collection)) {
3553 var index = -1,
3554 length = collection.length;
3555
3556 while (++index < length) {
3557 var value = collection[index];
3558 if (callback(value, index, collection)) {
3559 return value;
3560 }
3561 }
3562 } else {
3563 var result;
3564 baseEach(collection, function(value, index, collection) {
3565 if (callback(value, index, collection)) {
3566 result = value;
3567 return false;
3568 }
3569 });
3570 return result;
3571 }
3572 }
3573
3574 /**
3575 * This method is like `_.find` except that it iterates over elements
3576 * of a `collection` from right to left.
3577 *
3578 * @static
3579 * @memberOf _
3580 * @category Collections
3581 * @param {Array|Object|string} collection The collection to iterate over.
3582 * @param {Function|Object|string} [callback=identity] The function called
3583 * per iteration. If a property name or object is provided it will be used
3584 * to create a "_.pluck" or "_.where" style callback, respectively.
3585 * @param {*} [thisArg] The `this` binding of `callback`.
3586 * @returns {*} Returns the found element, else `undefined`.
3587 * @example
3588 *
3589 * _.findLast([1, 2, 3, 4], function(num) {
3590 * return num % 2 == 1;
3591 * });
3592 * // => 3
3593 */
3594 function findLast(collection, callback, thisArg) {
3595 var result;
3596 callback = lodash.createCallback(callback, thisArg, 3);
3597 forEachRight(collection, function(value, index, collection) {
3598 if (callback(value, index, collection)) {
3599 result = value;
3600 return false;
3601 }
3602 });
3603 return result;
3604 }
3605
3606 /**
3607 * Iterates over elements of a collection, executing the callback for each
3608 * element. The callback is bound to `thisArg` and invoked with three arguments;
3609 * (value, index|key, collection). Callbacks may exit iteration early by
3610 * explicitly returning `false`.
3611 *
3612 * Note: As with other "Collections" methods, objects with a `length` property
3613 * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
3614 * may be used for object iteration.
3615 *
3616 * @static
3617 * @memberOf _
3618 * @alias each
3619 * @category Collections
3620 * @param {Array|Object|string} collection The collection to iterate over.
3621 * @param {Function} [callback=identity] The function called per iteration.
3622 * @param {*} [thisArg] The `this` binding of `callback`.
3623 * @returns {Array|Object|string} Returns `collection`.
3624 * @example
3625 *
3626 * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
3627 * // => logs each number and returns '1,2,3'
3628 *
3629 * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
3630 * // => logs each number and returns the object (property order is not guaranteed across environments)
3631 */
3632 function forEach(collection, callback, thisArg) {
3633 if (callback && typeof thisArg == 'undefined' && isArray(collection)) {
3634 var index = -1,
3635 length = collection.length;
3636
3637 while (++index < length) {
3638 if (callback(collection[index], index, collection) === false) {
3639 break;
3640 }
3641 }
3642 } else {
3643 baseEach(collection, callback, thisArg);
3644 }
3645 return collection;
3646 }
3647
3648 /**
3649 * This method is like `_.forEach` except that it iterates over elements
3650 * of a `collection` from right to left.
3651 *
3652 * @static
3653 * @memberOf _
3654 * @alias eachRight
3655 * @category Collections
3656 * @param {Array|Object|string} collection The collection to iterate over.
3657 * @param {Function} [callback=identity] The function called per iteration.
3658 * @param {*} [thisArg] The `this` binding of `callback`.
3659 * @returns {Array|Object|string} Returns `collection`.
3660 * @example
3661 *
3662 * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');
3663 * // => logs each number from right to left and returns '3,2,1'
3664 */
3665 function forEachRight(collection, callback, thisArg) {
3666 var iterable = collection,
3667 length = collection ? collection.length : 0;
3668
3669 callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);
3670 if (isArray(collection)) {
3671 while (length--) {
3672 if (callback(collection[length], length, collection) === false) {
3673 break;
3674 }
3675 }
3676 } else {
3677 if (typeof length != 'number') {
3678 var props = keys(collection);
3679 length = props.length;
3680 } else if (support.unindexedChars && isString(collection)) {
3681 iterable = collection.split('');
3682 }
3683 baseEach(collection, function(value, key, collection) {
3684 key = props ? props[--length] : --length;
3685 return callback(iterable[key], key, collection);
3686 });
3687 }
3688 return collection;
3689 }
3690
3691 /**
3692 * Creates an object composed of keys generated from the results of running
3693 * each element of a collection through the callback. The corresponding value
3694 * of each key is an array of the elements responsible for generating the key.
3695 * The callback is bound to `thisArg` and invoked with three arguments;
3696 * (value, index|key, collection).
3697 *
3698 * If a property name is provided for `callback` the created "_.pluck" style
3699 * callback will return the property value of the given element.
3700 *
3701 * If an object is provided for `callback` the created "_.where" style callback
3702 * will return `true` for elements that have the properties of the given object,
3703 * else `false`
3704 *
3705 * @static
3706 * @memberOf _
3707 * @category Collections
3708 * @param {Array|Object|string} collection The collection to iterate over.
3709 * @param {Function|Object|string} [callback=identity] The function called
3710 * per iteration. If a property name or object is provided it will be used
3711 * to create a "_.pluck" or "_.where" style callback, respectively.
3712 * @param {*} [thisArg] The `this` binding of `callback`.
3713 * @returns {Object} Returns the composed aggregate object.
3714 * @example
3715 *
3716 * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
3717 * // => { '4': [4.2], '6': [6.1, 6.4] }
3718 *
3719 * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
3720 * // => { '4': [4.2], '6': [6.1, 6.4] }
3721 *
3722 * // using "_.pluck" callback shorthand
3723 * _.groupBy(['one', 'two', 'three'], 'length');
3724 * // => { '3': ['one', 'two'], '5': ['three'] }
3725 */
3726 var groupBy = createAggregator(function(result, value, key) {
3727 (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);
3728 });
3729
3730 /**
3731 * Creates an object composed of keys generated from the results of running
3732 * each element of the collection through the given callback. The corresponding
3733 * value of each key is the last element responsible for generating the key.
3734 * The callback is bound to `thisArg` and invoked with three arguments;
3735 * (value, index|key, collection).
3736 *
3737 * If a property name is provided for `callback` the created "_.pluck" style
3738 * callback will return the property value of the given element.
3739 *
3740 * If an object is provided for `callback` the created "_.where" style callback
3741 * will return `true` for elements that have the properties of the given object,
3742 * else `false`.
3743 *
3744 * @static
3745 * @memberOf _
3746 * @category Collections
3747 * @param {Array|Object|string} collection The collection to iterate over.
3748 * @param {Function|Object|string} [callback=identity] The function called
3749 * per iteration. If a property name or object is provided it will be used
3750 * to create a "_.pluck" or "_.where" style callback, respectively.
3751 * @param {*} [thisArg] The `this` binding of `callback`.
3752 * @returns {Object} Returns the composed aggregate object.
3753 * @example
3754 *
3755 * var keys = [
3756 * { 'dir': 'left', 'code': 97 },
3757 * { 'dir': 'right', 'code': 100 }
3758 * ];
3759 *
3760 * _.indexBy(keys, 'dir');
3761 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
3762 *
3763 * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
3764 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
3765 *
3766 * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
3767 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
3768 */
3769 var indexBy = createAggregator(function(result, value, key) {
3770 result[key] = value;
3771 });
3772
3773 /**
3774 * Invokes the method named by `methodName` on each element in the `collection`
3775 * returning an array of the results of each invoked method. Additional arguments
3776 * will be provided to each invoked method. If `methodName` is a function it
3777 * will be invoked for, and `this` bound to, each element in the `collection`.
3778 *
3779 * @static
3780 * @memberOf _
3781 * @category Collections
3782 * @param {Array|Object|string} collection The collection to iterate over.
3783 * @param {Function|string} methodName The name of the method to invoke or
3784 * the function invoked per iteration.
3785 * @param {...*} [arg] Arguments to invoke the method with.
3786 * @returns {Array} Returns a new array of the results of each invoked method.
3787 * @example
3788 *
3789 * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
3790 * // => [[1, 5, 7], [1, 2, 3]]
3791 *
3792 * _.invoke([123, 456], String.prototype.split, '');
3793 * // => [['1', '2', '3'], ['4', '5', '6']]
3794 */
3795 function invoke(collection, methodName) {
3796 var args = slice(arguments, 2),
3797 index = -1,
3798 isFunc = typeof methodName == 'function',
3799 length = collection ? collection.length : 0,
3800 result = Array(typeof length == 'number' ? length : 0);
3801
3802 forEach(collection, function(value) {
3803 result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);
3804 });
3805 return result;
3806 }
3807
3808 /**
3809 * Creates an array of values by running each element in the collection
3810 * through the callback. The callback is bound to `thisArg` and invoked with
3811 * three arguments; (value, index|key, collection).
3812 *
3813 * If a property name is provided for `callback` the created "_.pluck" style
3814 * callback will return the property value of the given element.
3815 *
3816 * If an object is provided for `callback` the created "_.where" style callback
3817 * will return `true` for elements that have the properties of the given object,
3818 * else `false`.
3819 *
3820 * @static
3821 * @memberOf _
3822 * @alias collect
3823 * @category Collections
3824 * @param {Array|Object|string} collection The collection to iterate over.
3825 * @param {Function|Object|string} [callback=identity] The function called
3826 * per iteration. If a property name or object is provided it will be used
3827 * to create a "_.pluck" or "_.where" style callback, respectively.
3828 * @param {*} [thisArg] The `this` binding of `callback`.
3829 * @returns {Array} Returns a new array of the results of each `callback` execution.
3830 * @example
3831 *
3832 * _.map([1, 2, 3], function(num) { return num * 3; });
3833 * // => [3, 6, 9]
3834 *
3835 * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
3836 * // => [3, 6, 9] (property order is not guaranteed across environments)
3837 *
3838 * var characters = [
3839 * { 'name': 'barney', 'age': 36 },
3840 * { 'name': 'fred', 'age': 40 }
3841 * ];
3842 *
3843 * // using "_.pluck" callback shorthand
3844 * _.map(characters, 'name');
3845 * // => ['barney', 'fred']
3846 */
3847 function map(collection, callback, thisArg) {
3848 var index = -1,
3849 length = collection ? collection.length : 0,
3850 result = Array(typeof length == 'number' ? length : 0);
3851
3852 callback = lodash.createCallback(callback, thisArg, 3);
3853 if (isArray(collection)) {
3854 while (++index < length) {
3855 result[index] = callback(collection[index], index, collection);
3856 }
3857 } else {
3858 baseEach(collection, function(value, key, collection) {
3859 result[++index] = callback(value, key, collection);
3860 });
3861 }
3862 return result;
3863 }
3864
3865 /**
3866 * Retrieves the maximum value of a collection. If the collection is empty or
3867 * falsey `-Infinity` is returned. If a callback is provided it will be executed
3868 * for each value in the collection to generate the criterion by which the value
3869 * is ranked. The callback is bound to `thisArg` and invoked with three
3870 * arguments; (value, index, collection).
3871 *
3872 * If a property name is provided for `callback` the created "_.pluck" style
3873 * callback will return the property value of the given element.
3874 *
3875 * If an object is provided for `callback` the created "_.where" style callback
3876 * will return `true` for elements that have the properties of the given object,
3877 * else `false`.
3878 *
3879 * @static
3880 * @memberOf _
3881 * @category Collections
3882 * @param {Array|Object|string} collection The collection to iterate over.
3883 * @param {Function|Object|string} [callback=identity] The function called
3884 * per iteration. If a property name or object is provided it will be used
3885 * to create a "_.pluck" or "_.where" style callback, respectively.
3886 * @param {*} [thisArg] The `this` binding of `callback`.
3887 * @returns {*} Returns the maximum value.
3888 * @example
3889 *
3890 * _.max([4, 2, 8, 6]);
3891 * // => 8
3892 *
3893 * var characters = [
3894 * { 'name': 'barney', 'age': 36 },
3895 * { 'name': 'fred', 'age': 40 }
3896 * ];
3897 *
3898 * _.max(characters, function(chr) { return chr.age; });
3899 * // => { 'name': 'fred', 'age': 40 };
3900 *
3901 * // using "_.pluck" callback shorthand
3902 * _.max(characters, 'age');
3903 * // => { 'name': 'fred', 'age': 40 };
3904 */
3905 function max(collection, callback, thisArg) {
3906 var computed = -Infinity,
3907 result = computed;
3908
3909 // allows working with functions like `_.map` without using
3910 // their `index` argument as a callback
3911 if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
3912 callback = null;
3913 }
3914 if (callback == null && isArray(collection)) {
3915 var index = -1,
3916 length = collection.length;
3917
3918 while (++index < length) {
3919 var value = collection[index];
3920 if (value > result) {
3921 result = value;
3922 }
3923 }
3924 } else {
3925 callback = (callback == null && isString(collection))
3926 ? charAtCallback
3927 : lodash.createCallback(callback, thisArg, 3);
3928
3929 baseEach(collection, function(value, index, collection) {
3930 var current = callback(value, index, collection);
3931 if (current > computed) {
3932 computed = current;
3933 result = value;
3934 }
3935 });
3936 }
3937 return result;
3938 }
3939
3940 /**
3941 * Retrieves the minimum value of a collection. If the collection is empty or
3942 * falsey `Infinity` is returned. If a callback is provided it will be executed
3943 * for each value in the collection to generate the criterion by which the value
3944 * is ranked. The callback is bound to `thisArg` and invoked with three
3945 * arguments; (value, index, collection).
3946 *
3947 * If a property name is provided for `callback` the created "_.pluck" style
3948 * callback will return the property value of the given element.
3949 *
3950 * If an object is provided for `callback` the created "_.where" style callback
3951 * will return `true` for elements that have the properties of the given object,
3952 * else `false`.
3953 *
3954 * @static
3955 * @memberOf _
3956 * @category Collections
3957 * @param {Array|Object|string} collection The collection to iterate over.
3958 * @param {Function|Object|string} [callback=identity] The function called
3959 * per iteration. If a property name or object is provided it will be used
3960 * to create a "_.pluck" or "_.where" style callback, respectively.
3961 * @param {*} [thisArg] The `this` binding of `callback`.
3962 * @returns {*} Returns the minimum value.
3963 * @example
3964 *
3965 * _.min([4, 2, 8, 6]);
3966 * // => 2
3967 *
3968 * var characters = [
3969 * { 'name': 'barney', 'age': 36 },
3970 * { 'name': 'fred', 'age': 40 }
3971 * ];
3972 *
3973 * _.min(characters, function(chr) { return chr.age; });
3974 * // => { 'name': 'barney', 'age': 36 };
3975 *
3976 * // using "_.pluck" callback shorthand
3977 * _.min(characters, 'age');
3978 * // => { 'name': 'barney', 'age': 36 };
3979 */
3980 function min(collection, callback, thisArg) {
3981 var computed = Infinity,
3982 result = computed;
3983
3984 // allows working with functions like `_.map` without using
3985 // their `index` argument as a callback
3986 if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
3987 callback = null;
3988 }
3989 if (callback == null && isArray(collection)) {
3990 var index = -1,
3991 length = collection.length;
3992
3993 while (++index < length) {
3994 var value = collection[index];
3995 if (value < result) {
3996 result = value;
3997 }
3998 }
3999 } else {
4000 callback = (callback == null && isString(collection))
4001 ? charAtCallback
4002 : lodash.createCallback(callback, thisArg, 3);
4003
4004 baseEach(collection, function(value, index, collection) {
4005 var current = callback(value, index, collection);
4006 if (current < computed) {
4007 computed = current;
4008 result = value;
4009 }
4010 });
4011 }
4012 return result;
4013 }
4014
4015 /**
4016 * Retrieves the value of a specified property from all elements in the collection.
4017 *
4018 * @static
4019 * @memberOf _
4020 * @type Function
4021 * @category Collections
4022 * @param {Array|Object|string} collection The collection to iterate over.
4023 * @param {string} property The name of the property to pluck.
4024 * @returns {Array} Returns a new array of property values.
4025 * @example
4026 *
4027 * var characters = [
4028 * { 'name': 'barney', 'age': 36 },
4029 * { 'name': 'fred', 'age': 40 }
4030 * ];
4031 *
4032 * _.pluck(characters, 'name');
4033 * // => ['barney', 'fred']
4034 */
4035 var pluck = map;
4036
4037 /**
4038 * Reduces a collection to a value which is the accumulated result of running
4039 * each element in the collection through the callback, where each successive
4040 * callback execution consumes the return value of the previous execution. If
4041 * `accumulator` is not provided the first element of the collection will be
4042 * used as the initial `accumulator` value. The callback is bound to `thisArg`
4043 * and invoked with four arguments; (accumulator, value, index|key, collection).
4044 *
4045 * @static
4046 * @memberOf _
4047 * @alias foldl, inject
4048 * @category Collections
4049 * @param {Array|Object|string} collection The collection to iterate over.
4050 * @param {Function} [callback=identity] The function called per iteration.
4051 * @param {*} [accumulator] Initial value of the accumulator.
4052 * @param {*} [thisArg] The `this` binding of `callback`.
4053 * @returns {*} Returns the accumulated value.
4054 * @example
4055 *
4056 * var sum = _.reduce([1, 2, 3], function(sum, num) {
4057 * return sum + num;
4058 * });
4059 * // => 6
4060 *
4061 * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {
4062 * result[key] = num * 3;
4063 * return result;
4064 * }, {});
4065 * // => { 'a': 3, 'b': 6, 'c': 9 }
4066 */
4067 function reduce(collection, callback, accumulator, thisArg) {
4068 var noaccum = arguments.length < 3;
4069 callback = lodash.createCallback(callback, thisArg, 4);
4070
4071 if (isArray(collection)) {
4072 var index = -1,
4073 length = collection.length;
4074
4075 if (noaccum) {
4076 accumulator = collection[++index];
4077 }
4078 while (++index < length) {
4079 accumulator = callback(accumulator, collection[index], index, collection);
4080 }
4081 } else {
4082 baseEach(collection, function(value, index, collection) {
4083 accumulator = noaccum
4084 ? (noaccum = false, value)
4085 : callback(accumulator, value, index, collection)
4086 });
4087 }
4088 return accumulator;
4089 }
4090
4091 /**
4092 * This method is like `_.reduce` except that it iterates over elements
4093 * of a `collection` from right to left.
4094 *
4095 * @static
4096 * @memberOf _
4097 * @alias foldr
4098 * @category Collections
4099 * @param {Array|Object|string} collection The collection to iterate over.
4100 * @param {Function} [callback=identity] The function called per iteration.
4101 * @param {*} [accumulator] Initial value of the accumulator.
4102 * @param {*} [thisArg] The `this` binding of `callback`.
4103 * @returns {*} Returns the accumulated value.
4104 * @example
4105 *
4106 * var list = [[0, 1], [2, 3], [4, 5]];
4107 * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
4108 * // => [4, 5, 2, 3, 0, 1]
4109 */
4110 function reduceRight(collection, callback, accumulator, thisArg) {
4111 var noaccum = arguments.length < 3;
4112 callback = lodash.createCallback(callback, thisArg, 4);
4113 forEachRight(collection, function(value, index, collection) {
4114 accumulator = noaccum
4115 ? (noaccum = false, value)
4116 : callback(accumulator, value, index, collection);
4117 });
4118 return accumulator;
4119 }
4120
4121 /**
4122 * The opposite of `_.filter` this method returns the elements of a
4123 * collection that the callback does **not** return truey for.
4124 *
4125 * If a property name is provided for `callback` the created "_.pluck" style
4126 * callback will return the property value of the given element.
4127 *
4128 * If an object is provided for `callback` the created "_.where" style callback
4129 * will return `true` for elements that have the properties of the given object,
4130 * else `false`.
4131 *
4132 * @static
4133 * @memberOf _
4134 * @category Collections
4135 * @param {Array|Object|string} collection The collection to iterate over.
4136 * @param {Function|Object|string} [callback=identity] The function called
4137 * per iteration. If a property name or object is provided it will be used
4138 * to create a "_.pluck" or "_.where" style callback, respectively.
4139 * @param {*} [thisArg] The `this` binding of `callback`.
4140 * @returns {Array} Returns a new array of elements that failed the callback check.
4141 * @example
4142 *
4143 * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
4144 * // => [1, 3, 5]
4145 *
4146 * var characters = [
4147 * { 'name': 'barney', 'age': 36, 'blocked': false },
4148 * { 'name': 'fred', 'age': 40, 'blocked': true }
4149 * ];
4150 *
4151 * // using "_.pluck" callback shorthand
4152 * _.reject(characters, 'blocked');
4153 * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
4154 *
4155 * // using "_.where" callback shorthand
4156 * _.reject(characters, { 'age': 36 });
4157 * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
4158 */
4159 function reject(collection, callback, thisArg) {
4160 callback = lodash.createCallback(callback, thisArg, 3);
4161 return filter(collection, function(value, index, collection) {
4162 return !callback(value, index, collection);
4163 });
4164 }
4165
4166 /**
4167 * Retrieves a random element or `n` random elements from a collection.
4168 *
4169 * @static
4170 * @memberOf _
4171 * @category Collections
4172 * @param {Array|Object|string} collection The collection to sample.
4173 * @param {number} [n] The number of elements to sample.
4174 * @param- {Object} [guard] Allows working with functions like `_.map`
4175 * without using their `index` arguments as `n`.
4176 * @returns {Array} Returns the random sample(s) of `collection`.
4177 * @example
4178 *
4179 * _.sample([1, 2, 3, 4]);
4180 * // => 2
4181 *
4182 * _.sample([1, 2, 3, 4], 2);
4183 * // => [3, 1]
4184 */
4185 function sample(collection, n, guard) {
4186 if (collection && typeof collection.length != 'number') {
4187 collection = values(collection);
4188 } else if (support.unindexedChars && isString(collection)) {
4189 collection = collection.split('');
4190 }
4191 if (n == null || guard) {
4192 return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
4193 }
4194 var result = shuffle(collection);
4195 result.length = nativeMin(nativeMax(0, n), result.length);
4196 return result;
4197 }
4198
4199 /**
4200 * Creates an array of shuffled values, using a version of the Fisher-Yates
4201 * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
4202 *
4203 * @static
4204 * @memberOf _
4205 * @category Collections
4206 * @param {Array|Object|string} collection The collection to shuffle.
4207 * @returns {Array} Returns a new shuffled collection.
4208 * @example
4209 *
4210 * _.shuffle([1, 2, 3, 4, 5, 6]);
4211 * // => [4, 1, 6, 3, 5, 2]
4212 */
4213 function shuffle(collection) {
4214 var index = -1,
4215 length = collection ? collection.length : 0,
4216 result = Array(typeof length == 'number' ? length : 0);
4217
4218 forEach(collection, function(value) {
4219 var rand = baseRandom(0, ++index);
4220 result[index] = result[rand];
4221 result[rand] = value;
4222 });
4223 return result;
4224 }
4225
4226 /**
4227 * Gets the size of the `collection` by returning `collection.length` for arrays
4228 * and array-like objects or the number of own enumerable properties for objects.
4229 *
4230 * @static
4231 * @memberOf _
4232 * @category Collections
4233 * @param {Array|Object|string} collection The collection to inspect.
4234 * @returns {number} Returns `collection.length` or number of own enumerable properties.
4235 * @example
4236 *
4237 * _.size([1, 2]);
4238 * // => 2
4239 *
4240 * _.size({ 'one': 1, 'two': 2, 'three': 3 });
4241 * // => 3
4242 *
4243 * _.size('pebbles');
4244 * // => 7
4245 */
4246 function size(collection) {
4247 var length = collection ? collection.length : 0;
4248 return typeof length == 'number' ? length : keys(collection).length;
4249 }
4250
4251 /**
4252 * Checks if the callback returns a truey value for **any** element of a
4253 * collection. The function returns as soon as it finds a passing value and
4254 * does not iterate over the entire collection. The callback is bound to
4255 * `thisArg` and invoked with three arguments; (value, index|key, collection).
4256 *
4257 * If a property name is provided for `callback` the created "_.pluck" style
4258 * callback will return the property value of the given element.
4259 *
4260 * If an object is provided for `callback` the created "_.where" style callback
4261 * will return `true` for elements that have the properties of the given object,
4262 * else `false`.
4263 *
4264 * @static
4265 * @memberOf _
4266 * @alias any
4267 * @category Collections
4268 * @param {Array|Object|string} collection The collection to iterate over.
4269 * @param {Function|Object|string} [callback=identity] The function called
4270 * per iteration. If a property name or object is provided it will be used
4271 * to create a "_.pluck" or "_.where" style callback, respectively.
4272 * @param {*} [thisArg] The `this` binding of `callback`.
4273 * @returns {boolean} Returns `true` if any element passed the callback check,
4274 * else `false`.
4275 * @example
4276 *
4277 * _.some([null, 0, 'yes', false], Boolean);
4278 * // => true
4279 *
4280 * var characters = [
4281 * { 'name': 'barney', 'age': 36, 'blocked': false },
4282 * { 'name': 'fred', 'age': 40, 'blocked': true }
4283 * ];
4284 *
4285 * // using "_.pluck" callback shorthand
4286 * _.some(characters, 'blocked');
4287 * // => true
4288 *
4289 * // using "_.where" callback shorthand
4290 * _.some(characters, { 'age': 1 });
4291 * // => false
4292 */
4293 function some(collection, callback, thisArg) {
4294 var result;
4295 callback = lodash.createCallback(callback, thisArg, 3);
4296
4297 if (isArray(collection)) {
4298 var index = -1,
4299 length = collection.length;
4300
4301 while (++index < length) {
4302 if ((result = callback(collection[index], index, collection))) {
4303 break;
4304 }
4305 }
4306 } else {
4307 baseEach(collection, function(value, index, collection) {
4308 return !(result = callback(value, index, collection));
4309 });
4310 }
4311 return !!result;
4312 }
4313
4314 /**
4315 * Creates an array of elements, sorted in ascending order by the results of
4316 * running each element in a collection through the callback. This method
4317 * performs a stable sort, that is, it will preserve the original sort order
4318 * of equal elements. The callback is bound to `thisArg` and invoked with
4319 * three arguments; (value, index|key, collection).
4320 *
4321 * If a property name is provided for `callback` the created "_.pluck" style
4322 * callback will return the property value of the given element.
4323 *
4324 * If an array of property names is provided for `callback` the collection
4325 * will be sorted by each property value.
4326 *
4327 * If an object is provided for `callback` the created "_.where" style callback
4328 * will return `true` for elements that have the properties of the given object,
4329 * else `false`.
4330 *
4331 * @static
4332 * @memberOf _
4333 * @category Collections
4334 * @param {Array|Object|string} collection The collection to iterate over.
4335 * @param {Array|Function|Object|string} [callback=identity] The function called
4336 * per iteration. If a property name or object is provided it will be used
4337 * to create a "_.pluck" or "_.where" style callback, respectively.
4338 * @param {*} [thisArg] The `this` binding of `callback`.
4339 * @returns {Array} Returns a new array of sorted elements.
4340 * @example
4341 *
4342 * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
4343 * // => [3, 1, 2]
4344 *
4345 * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
4346 * // => [3, 1, 2]
4347 *
4348 * var characters = [
4349 * { 'name': 'barney', 'age': 36 },
4350 * { 'name': 'fred', 'age': 40 },
4351 * { 'name': 'barney', 'age': 26 },
4352 * { 'name': 'fred', 'age': 30 }
4353 * ];
4354 *
4355 * // using "_.pluck" callback shorthand
4356 * _.map(_.sortBy(characters, 'age'), _.values);
4357 * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
4358 *
4359 * // sorting by multiple properties
4360 * _.map(_.sortBy(characters, ['name', 'age']), _.values);
4361 * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
4362 */
4363 function sortBy(collection, callback, thisArg) {
4364 var index = -1,
4365 isArr = isArray(callback),
4366 length = collection ? collection.length : 0,
4367 result = Array(typeof length == 'number' ? length : 0);
4368
4369 if (!isArr) {
4370 callback = lodash.createCallback(callback, thisArg, 3);
4371 }
4372 forEach(collection, function(value, key, collection) {
4373 var object = result[++index] = getObject();
4374 if (isArr) {
4375 object.criteria = map(callback, function(key) { return value[key]; });
4376 } else {
4377 (object.criteria = getArray())[0] = callback(value, key, collection);
4378 }
4379 object.index = index;
4380 object.value = value;
4381 });
4382
4383 length = result.length;
4384 result.sort(compareAscending);
4385 while (length--) {
4386 var object = result[length];
4387 result[length] = object.value;
4388 if (!isArr) {
4389 releaseArray(object.criteria);
4390 }
4391 releaseObject(object);
4392 }
4393 return result;
4394 }
4395
4396 /**
4397 * Converts the `collection` to an array.
4398 *
4399 * @static
4400 * @memberOf _
4401 * @category Collections
4402 * @param {Array|Object|string} collection The collection to convert.
4403 * @returns {Array} Returns the new converted array.
4404 * @example
4405 *
4406 * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
4407 * // => [2, 3, 4]
4408 */
4409 function toArray(collection) {
4410 if (collection && typeof collection.length == 'number') {
4411 return (support.unindexedChars && isString(collection))
4412 ? collection.split('')
4413 : slice(collection);
4414 }
4415 return values(collection);
4416 }
4417
4418 /**
4419 * Performs a deep comparison of each element in a `collection` to the given
4420 * `properties` object, returning an array of all elements that have equivalent
4421 * property values.
4422 *
4423 * @static
4424 * @memberOf _
4425 * @type Function
4426 * @category Collections
4427 * @param {Array|Object|string} collection The collection to iterate over.
4428 * @param {Object} props The object of property values to filter by.
4429 * @returns {Array} Returns a new array of elements that have the given properties.
4430 * @example
4431 *
4432 * var characters = [
4433 * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
4434 * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
4435 * ];
4436 *
4437 * _.where(characters, { 'age': 36 });
4438 * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
4439 *
4440 * _.where(characters, { 'pets': ['dino'] });
4441 * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
4442 */
4443 var where = filter;
4444
4445 /*--------------------------------------------------------------------------*/
4446
4447 /**
4448 * Creates an array with all falsey values removed. The values `false`, `null`,
4449 * `0`, `""`, `undefined`, and `NaN` are all falsey.
4450 *
4451 * @static
4452 * @memberOf _
4453 * @category Arrays
4454 * @param {Array} array The array to compact.
4455 * @returns {Array} Returns a new array of filtered values.
4456 * @example
4457 *
4458 * _.compact([0, 1, false, 2, '', 3]);
4459 * // => [1, 2, 3]
4460 */
4461 function compact(array) {
4462 var index = -1,
4463 length = array ? array.length : 0,
4464 result = [];
4465
4466 while (++index < length) {
4467 var value = array[index];
4468 if (value) {
4469 result.push(value);
4470 }
4471 }
4472 return result;
4473 }
4474
4475 /**
4476 * Creates an array excluding all values of the provided arrays using strict
4477 * equality for comparisons, i.e. `===`.
4478 *
4479 * @static
4480 * @memberOf _
4481 * @category Arrays
4482 * @param {Array} array The array to process.
4483 * @param {...Array} [values] The arrays of values to exclude.
4484 * @returns {Array} Returns a new array of filtered values.
4485 * @example
4486 *
4487 * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
4488 * // => [1, 3, 4]
4489 */
4490 function difference(array) {
4491 return baseDifference(array, baseFlatten(arguments, true, true, 1));
4492 }
4493
4494 /**
4495 * This method is like `_.find` except that it returns the index of the first
4496 * element that passes the callback check, instead of the element itself.
4497 *
4498 * If a property name is provided for `callback` the created "_.pluck" style
4499 * callback will return the property value of the given element.
4500 *
4501 * If an object is provided for `callback` the created "_.where" style callback
4502 * will return `true` for elements that have the properties of the given object,
4503 * else `false`.
4504 *
4505 * @static
4506 * @memberOf _
4507 * @category Arrays
4508 * @param {Array} array The array to search.
4509 * @param {Function|Object|string} [callback=identity] The function called
4510 * per iteration. If a property name or object is provided it will be used
4511 * to create a "_.pluck" or "_.where" style callback, respectively.
4512 * @param {*} [thisArg] The `this` binding of `callback`.
4513 * @returns {number} Returns the index of the found element, else `-1`.
4514 * @example
4515 *
4516 * var characters = [
4517 * { 'name': 'barney', 'age': 36, 'blocked': false },
4518 * { 'name': 'fred', 'age': 40, 'blocked': true },
4519 * { 'name': 'pebbles', 'age': 1, 'blocked': false }
4520 * ];
4521 *
4522 * _.findIndex(characters, function(chr) {
4523 * return chr.age < 20;
4524 * });
4525 * // => 2
4526 *
4527 * // using "_.where" callback shorthand
4528 * _.findIndex(characters, { 'age': 36 });
4529 * // => 0
4530 *
4531 * // using "_.pluck" callback shorthand
4532 * _.findIndex(characters, 'blocked');
4533 * // => 1
4534 */
4535 function findIndex(array, callback, thisArg) {
4536 var index = -1,
4537 length = array ? array.length : 0;
4538
4539 callback = lodash.createCallback(callback, thisArg, 3);
4540 while (++index < length) {
4541 if (callback(array[index], index, array)) {
4542 return index;
4543 }
4544 }
4545 return -1;
4546 }
4547
4548 /**
4549 * This method is like `_.findIndex` except that it iterates over elements
4550 * of a `collection` from right to left.
4551 *
4552 * If a property name is provided for `callback` the created "_.pluck" style
4553 * callback will return the property value of the given element.
4554 *
4555 * If an object is provided for `callback` the created "_.where" style callback
4556 * will return `true` for elements that have the properties of the given object,
4557 * else `false`.
4558 *
4559 * @static
4560 * @memberOf _
4561 * @category Arrays
4562 * @param {Array} array The array to search.
4563 * @param {Function|Object|string} [callback=identity] The function called
4564 * per iteration. If a property name or object is provided it will be used
4565 * to create a "_.pluck" or "_.where" style callback, respectively.
4566 * @param {*} [thisArg] The `this` binding of `callback`.
4567 * @returns {number} Returns the index of the found element, else `-1`.
4568 * @example
4569 *
4570 * var characters = [
4571 * { 'name': 'barney', 'age': 36, 'blocked': true },
4572 * { 'name': 'fred', 'age': 40, 'blocked': false },
4573 * { 'name': 'pebbles', 'age': 1, 'blocked': true }
4574 * ];
4575 *
4576 * _.findLastIndex(characters, function(chr) {
4577 * return chr.age > 30;
4578 * });
4579 * // => 1
4580 *
4581 * // using "_.where" callback shorthand
4582 * _.findLastIndex(characters, { 'age': 36 });
4583 * // => 0
4584 *
4585 * // using "_.pluck" callback shorthand
4586 * _.findLastIndex(characters, 'blocked');
4587 * // => 2
4588 */
4589 function findLastIndex(array, callback, thisArg) {
4590 var length = array ? array.length : 0;
4591 callback = lodash.createCallback(callback, thisArg, 3);
4592 while (length--) {
4593 if (callback(array[length], length, array)) {
4594 return length;
4595 }
4596 }
4597 return -1;
4598 }
4599
4600 /**
4601 * Gets the first element or first `n` elements of an array. If a callback
4602 * is provided elements at the beginning of the array are returned as long
4603 * as the callback returns truey. The callback is bound to `thisArg` and
4604 * invoked with three arguments; (value, index, array).
4605 *
4606 * If a property name is provided for `callback` the created "_.pluck" style
4607 * callback will return the property value of the given element.
4608 *
4609 * If an object is provided for `callback` the created "_.where" style callback
4610 * will return `true` for elements that have the properties of the given object,
4611 * else `false`.
4612 *
4613 * @static
4614 * @memberOf _
4615 * @alias head, take
4616 * @category Arrays
4617 * @param {Array} array The array to query.
4618 * @param {Function|Object|number|string} [callback] The function called
4619 * per element or the number of elements to return. If a property name or
4620 * object is provided it will be used to create a "_.pluck" or "_.where"
4621 * style callback, respectively.
4622 * @param {*} [thisArg] The `this` binding of `callback`.
4623 * @returns {*} Returns the first element(s) of `array`.
4624 * @example
4625 *
4626 * _.first([1, 2, 3]);
4627 * // => 1
4628 *
4629 * _.first([1, 2, 3], 2);
4630 * // => [1, 2]
4631 *
4632 * _.first([1, 2, 3], function(num) {
4633 * return num < 3;
4634 * });
4635 * // => [1, 2]
4636 *
4637 * var characters = [
4638 * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
4639 * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
4640 * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
4641 * ];
4642 *
4643 * // using "_.pluck" callback shorthand
4644 * _.first(characters, 'blocked');
4645 * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
4646 *
4647 * // using "_.where" callback shorthand
4648 * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
4649 * // => ['barney', 'fred']
4650 */
4651 function first(array, callback, thisArg) {
4652 var n = 0,
4653 length = array ? array.length : 0;
4654
4655 if (typeof callback != 'number' && callback != null) {
4656 var index = -1;
4657 callback = lodash.createCallback(callback, thisArg, 3);
4658 while (++index < length && callback(array[index], index, array)) {
4659 n++;
4660 }
4661 } else {
4662 n = callback;
4663 if (n == null || thisArg) {
4664 return array ? array[0] : undefined;
4665 }
4666 }
4667 return slice(array, 0, nativeMin(nativeMax(0, n), length));
4668 }
4669
4670 /**
4671 * Flattens a nested array (the nesting can be to any depth). If `isShallow`
4672 * is truey, the array will only be flattened a single level. If a callback
4673 * is provided each element of the array is passed through the callback before
4674 * flattening. The callback is bound to `thisArg` and invoked with three
4675 * arguments; (value, index, array).
4676 *
4677 * If a property name is provided for `callback` the created "_.pluck" style
4678 * callback will return the property value of the given element.
4679 *
4680 * If an object is provided for `callback` the created "_.where" style callback
4681 * will return `true` for elements that have the properties of the given object,
4682 * else `false`.
4683 *
4684 * @static
4685 * @memberOf _
4686 * @category Arrays
4687 * @param {Array} array The array to flatten.
4688 * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
4689 * @param {Function|Object|string} [callback=identity] The function called
4690 * per iteration. If a property name or object is provided it will be used
4691 * to create a "_.pluck" or "_.where" style callback, respectively.
4692 * @param {*} [thisArg] The `this` binding of `callback`.
4693 * @returns {Array} Returns a new flattened array.
4694 * @example
4695 *
4696 * _.flatten([1, [2], [3, [[4]]]]);
4697 * // => [1, 2, 3, 4];
4698 *
4699 * _.flatten([1, [2], [3, [[4]]]], true);
4700 * // => [1, 2, 3, [[4]]];
4701 *
4702 * var characters = [
4703 * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
4704 * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
4705 * ];
4706 *
4707 * // using "_.pluck" callback shorthand
4708 * _.flatten(characters, 'pets');
4709 * // => ['hoppy', 'baby puss', 'dino']
4710 */
4711 function flatten(array, isShallow, callback, thisArg) {
4712 // juggle arguments
4713 if (typeof isShallow != 'boolean' && isShallow != null) {
4714 thisArg = callback;
4715 callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;
4716 isShallow = false;
4717 }
4718 if (callback != null) {
4719 array = map(array, callback, thisArg);
4720 }
4721 return baseFlatten(array, isShallow);
4722 }
4723
4724 /**
4725 * Gets the index at which the first occurrence of `value` is found using
4726 * strict equality for comparisons, i.e. `===`. If the array is already sorted
4727 * providing `true` for `fromIndex` will run a faster binary search.
4728 *
4729 * @static
4730 * @memberOf _
4731 * @category Arrays
4732 * @param {Array} array The array to search.
4733 * @param {*} value The value to search for.
4734 * @param {boolean|number} [fromIndex=0] The index to search from or `true`
4735 * to perform a binary search on a sorted array.
4736 * @returns {number} Returns the index of the matched value or `-1`.
4737 * @example
4738 *
4739 * _.indexOf([1, 2, 3, 1, 2, 3], 2);
4740 * // => 1
4741 *
4742 * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
4743 * // => 4
4744 *
4745 * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
4746 * // => 2
4747 */
4748 function indexOf(array, value, fromIndex) {
4749 if (typeof fromIndex == 'number') {
4750 var length = array ? array.length : 0;
4751 fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);
4752 } else if (fromIndex) {
4753 var index = sortedIndex(array, value);
4754 return array[index] === value ? index : -1;
4755 }
4756 return baseIndexOf(array, value, fromIndex);
4757 }
4758
4759 /**
4760 * Gets all but the last element or last `n` elements of an array. If a
4761 * callback is provided elements at the end of the array are excluded from
4762 * the result as long as the callback returns truey. The callback is bound
4763 * to `thisArg` and invoked with three arguments; (value, index, array).
4764 *
4765 * If a property name is provided for `callback` the created "_.pluck" style
4766 * callback will return the property value of the given element.
4767 *
4768 * If an object is provided for `callback` the created "_.where" style callback
4769 * will return `true` for elements that have the properties of the given object,
4770 * else `false`.
4771 *
4772 * @static
4773 * @memberOf _
4774 * @category Arrays
4775 * @param {Array} array The array to query.
4776 * @param {Function|Object|number|string} [callback=1] The function called
4777 * per element or the number of elements to exclude. If a property name or
4778 * object is provided it will be used to create a "_.pluck" or "_.where"
4779 * style callback, respectively.
4780 * @param {*} [thisArg] The `this` binding of `callback`.
4781 * @returns {Array} Returns a slice of `array`.
4782 * @example
4783 *
4784 * _.initial([1, 2, 3]);
4785 * // => [1, 2]
4786 *
4787 * _.initial([1, 2, 3], 2);
4788 * // => [1]
4789 *
4790 * _.initial([1, 2, 3], function(num) {
4791 * return num > 1;
4792 * });
4793 * // => [1]
4794 *
4795 * var characters = [
4796 * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
4797 * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
4798 * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
4799 * ];
4800 *
4801 * // using "_.pluck" callback shorthand
4802 * _.initial(characters, 'blocked');
4803 * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]
4804 *
4805 * // using "_.where" callback shorthand
4806 * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
4807 * // => ['barney', 'fred']
4808 */
4809 function initial(array, callback, thisArg) {
4810 var n = 0,
4811 length = array ? array.length : 0;
4812
4813 if (typeof callback != 'number' && callback != null) {
4814 var index = length;
4815 callback = lodash.createCallback(callback, thisArg, 3);
4816 while (index-- && callback(array[index], index, array)) {
4817 n++;
4818 }
4819 } else {
4820 n = (callback == null || thisArg) ? 1 : callback || n;
4821 }
4822 return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
4823 }
4824
4825 /**
4826 * Creates an array of unique values present in all provided arrays using
4827 * strict equality for comparisons, i.e. `===`.
4828 *
4829 * @static
4830 * @memberOf _
4831 * @category Arrays
4832 * @param {...Array} [array] The arrays to inspect.
4833 * @returns {Array} Returns an array of shared values.
4834 * @example
4835 *
4836 * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);
4837 * // => [1, 2]
4838 */
4839 function intersection() {
4840 var args = [],
4841 argsIndex = -1,
4842 argsLength = arguments.length,
4843 caches = getArray(),
4844 indexOf = getIndexOf(),
4845 trustIndexOf = indexOf === baseIndexOf,
4846 seen = getArray();
4847
4848 while (++argsIndex < argsLength) {
4849 var value = arguments[argsIndex];
4850 if (isArray(value) || isArguments(value)) {
4851 args.push(value);
4852 caches.push(trustIndexOf && value.length >= largeArraySize &&
4853 createCache(argsIndex ? args[argsIndex] : seen));
4854 }
4855 }
4856 var array = args[0],
4857 index = -1,
4858 length = array ? array.length : 0,
4859 result = [];
4860
4861 outer:
4862 while (++index < length) {
4863 var cache = caches[0];
4864 value = array[index];
4865
4866 if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {
4867 argsIndex = argsLength;
4868 (cache || seen).push(value);
4869 while (--argsIndex) {
4870 cache = caches[argsIndex];
4871 if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {
4872 continue outer;
4873 }
4874 }
4875 result.push(value);
4876 }
4877 }
4878 while (argsLength--) {
4879 cache = caches[argsLength];
4880 if (cache) {
4881 releaseObject(cache);
4882 }
4883 }
4884 releaseArray(caches);
4885 releaseArray(seen);
4886 return result;
4887 }
4888
4889 /**
4890 * Gets the last element or last `n` elements of an array. If a callback is
4891 * provided elements at the end of the array are returned as long as the
4892 * callback returns truey. The callback is bound to `thisArg` and invoked
4893 * with three arguments; (value, index, array).
4894 *
4895 * If a property name is provided for `callback` the created "_.pluck" style
4896 * callback will return the property value of the given element.
4897 *
4898 * If an object is provided for `callback` the created "_.where" style callback
4899 * will return `true` for elements that have the properties of the given object,
4900 * else `false`.
4901 *
4902 * @static
4903 * @memberOf _
4904 * @category Arrays
4905 * @param {Array} array The array to query.
4906 * @param {Function|Object|number|string} [callback] The function called
4907 * per element or the number of elements to return. If a property name or
4908 * object is provided it will be used to create a "_.pluck" or "_.where"
4909 * style callback, respectively.
4910 * @param {*} [thisArg] The `this` binding of `callback`.
4911 * @returns {*} Returns the last element(s) of `array`.
4912 * @example
4913 *
4914 * _.last([1, 2, 3]);
4915 * // => 3
4916 *
4917 * _.last([1, 2, 3], 2);
4918 * // => [2, 3]
4919 *
4920 * _.last([1, 2, 3], function(num) {
4921 * return num > 1;
4922 * });
4923 * // => [2, 3]
4924 *
4925 * var characters = [
4926 * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
4927 * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
4928 * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
4929 * ];
4930 *
4931 * // using "_.pluck" callback shorthand
4932 * _.pluck(_.last(characters, 'blocked'), 'name');
4933 * // => ['fred', 'pebbles']
4934 *
4935 * // using "_.where" callback shorthand
4936 * _.last(characters, { 'employer': 'na' });
4937 * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
4938 */
4939 function last(array, callback, thisArg) {
4940 var n = 0,
4941 length = array ? array.length : 0;
4942
4943 if (typeof callback != 'number' && callback != null) {
4944 var index = length;
4945 callback = lodash.createCallback(callback, thisArg, 3);
4946 while (index-- && callback(array[index], index, array)) {
4947 n++;
4948 }
4949 } else {
4950 n = callback;
4951 if (n == null || thisArg) {
4952 return array ? array[length - 1] : undefined;
4953 }
4954 }
4955 return slice(array, nativeMax(0, length - n));
4956 }
4957
4958 /**
4959 * Gets the index at which the last occurrence of `value` is found using strict
4960 * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
4961 * as the offset from the end of the collection.
4962 *
4963 * If a property name is provided for `callback` the created "_.pluck" style
4964 * callback will return the property value of the given element.
4965 *
4966 * If an object is provided for `callback` the created "_.where" style callback
4967 * will return `true` for elements that have the properties of the given object,
4968 * else `false`.
4969 *
4970 * @static
4971 * @memberOf _
4972 * @category Arrays
4973 * @param {Array} array The array to search.
4974 * @param {*} value The value to search for.
4975 * @param {number} [fromIndex=array.length-1] The index to search from.
4976 * @returns {number} Returns the index of the matched value or `-1`.
4977 * @example
4978 *
4979 * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
4980 * // => 4
4981 *
4982 * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
4983 * // => 1
4984 */
4985 function lastIndexOf(array, value, fromIndex) {
4986 var index = array ? array.length : 0;
4987 if (typeof fromIndex == 'number') {
4988 index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;
4989 }
4990 while (index--) {
4991 if (array[index] === value) {
4992 return index;
4993 }
4994 }
4995 return -1;
4996 }
4997
4998 /**
4999 * Removes all provided values from the given array using strict equality for
5000 * comparisons, i.e. `===`.
5001 *
5002 * @static
5003 * @memberOf _
5004 * @category Arrays
5005 * @param {Array} array The array to modify.
5006 * @param {...*} [value] The values to remove.
5007 * @returns {Array} Returns `array`.
5008 * @example
5009 *
5010 * var array = [1, 2, 3, 1, 2, 3];
5011 * _.pull(array, 2, 3);
5012 * console.log(array);
5013 * // => [1, 1]
5014 */
5015 function pull(array) {
5016 var args = arguments,
5017 argsIndex = 0,
5018 argsLength = args.length,
5019 length = array ? array.length : 0;
5020
5021 while (++argsIndex < argsLength) {
5022 var index = -1,
5023 value = args[argsIndex];
5024 while (++index < length) {
5025 if (array[index] === value) {
5026 splice.call(array, index--, 1);
5027 length--;
5028 }
5029 }
5030 }
5031 return array;
5032 }
5033
5034 /**
5035 * Creates an array of numbers (positive and/or negative) progressing from
5036 * `start` up to but not including `end`. If `start` is less than `stop` a
5037 * zero-length range is created unless a negative `step` is specified.
5038 *
5039 * @static
5040 * @memberOf _
5041 * @category Arrays
5042 * @param {number} [start=0] The start of the range.
5043 * @param {number} end The end of the range.
5044 * @param {number} [step=1] The value to increment or decrement by.
5045 * @returns {Array} Returns a new range array.
5046 * @example
5047 *
5048 * _.range(4);
5049 * // => [0, 1, 2, 3]
5050 *
5051 * _.range(1, 5);
5052 * // => [1, 2, 3, 4]
5053 *
5054 * _.range(0, 20, 5);
5055 * // => [0, 5, 10, 15]
5056 *
5057 * _.range(0, -4, -1);
5058 * // => [0, -1, -2, -3]
5059 *
5060 * _.range(1, 4, 0);
5061 * // => [1, 1, 1]
5062 *
5063 * _.range(0);
5064 * // => []
5065 */
5066 function range(start, end, step) {
5067 start = +start || 0;
5068 step = typeof step == 'number' ? step : (+step || 1);
5069
5070 if (end == null) {
5071 end = start;
5072 start = 0;
5073 }
5074 // use `Array(length)` so engines like Chakra and V8 avoid slower modes
5075 // http://youtu.be/XAqIpGU8ZZk#t=17m25s
5076 var index = -1,
5077 length = nativeMax(0, ceil((end - start) / (step || 1))),
5078 result = Array(length);
5079
5080 while (++index < length) {
5081 result[index] = start;
5082 start += step;
5083 }
5084 return result;
5085 }
5086
5087 /**
5088 * Removes all elements from an array that the callback returns truey for
5089 * and returns an array of removed elements. The callback is bound to `thisArg`
5090 * and invoked with three arguments; (value, index, array).
5091 *
5092 * If a property name is provided for `callback` the created "_.pluck" style
5093 * callback will return the property value of the given element.
5094 *
5095 * If an object is provided for `callback` the created "_.where" style callback
5096 * will return `true` for elements that have the properties of the given object,
5097 * else `false`.
5098 *
5099 * @static
5100 * @memberOf _
5101 * @category Arrays
5102 * @param {Array} array The array to modify.
5103 * @param {Function|Object|string} [callback=identity] The function called
5104 * per iteration. If a property name or object is provided it will be used
5105 * to create a "_.pluck" or "_.where" style callback, respectively.
5106 * @param {*} [thisArg] The `this` binding of `callback`.
5107 * @returns {Array} Returns a new array of removed elements.
5108 * @example
5109 *
5110 * var array = [1, 2, 3, 4, 5, 6];
5111 * var evens = _.remove(array, function(num) { return num % 2 == 0; });
5112 *
5113 * console.log(array);
5114 * // => [1, 3, 5]
5115 *
5116 * console.log(evens);
5117 * // => [2, 4, 6]
5118 */
5119 function remove(array, callback, thisArg) {
5120 var index = -1,
5121 length = array ? array.length : 0,
5122 result = [];
5123
5124 callback = lodash.createCallback(callback, thisArg, 3);
5125 while (++index < length) {
5126 var value = array[index];
5127 if (callback(value, index, array)) {
5128 result.push(value);
5129 splice.call(array, index--, 1);
5130 length--;
5131 }
5132 }
5133 return result;
5134 }
5135
5136 /**
5137 * The opposite of `_.initial` this method gets all but the first element or
5138 * first `n` elements of an array. If a callback function is provided elements
5139 * at the beginning of the array are excluded from the result as long as the
5140 * callback returns truey. The callback is bound to `thisArg` and invoked
5141 * with three arguments; (value, index, array).
5142 *
5143 * If a property name is provided for `callback` the created "_.pluck" style
5144 * callback will return the property value of the given element.
5145 *
5146 * If an object is provided for `callback` the created "_.where" style callback
5147 * will return `true` for elements that have the properties of the given object,
5148 * else `false`.
5149 *
5150 * @static
5151 * @memberOf _
5152 * @alias drop, tail
5153 * @category Arrays
5154 * @param {Array} array The array to query.
5155 * @param {Function|Object|number|string} [callback=1] The function called
5156 * per element or the number of elements to exclude. If a property name or
5157 * object is provided it will be used to create a "_.pluck" or "_.where"
5158 * style callback, respectively.
5159 * @param {*} [thisArg] The `this` binding of `callback`.
5160 * @returns {Array} Returns a slice of `array`.
5161 * @example
5162 *
5163 * _.rest([1, 2, 3]);
5164 * // => [2, 3]
5165 *
5166 * _.rest([1, 2, 3], 2);
5167 * // => [3]
5168 *
5169 * _.rest([1, 2, 3], function(num) {
5170 * return num < 3;
5171 * });
5172 * // => [3]
5173 *
5174 * var characters = [
5175 * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
5176 * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
5177 * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
5178 * ];
5179 *
5180 * // using "_.pluck" callback shorthand
5181 * _.pluck(_.rest(characters, 'blocked'), 'name');
5182 * // => ['fred', 'pebbles']
5183 *
5184 * // using "_.where" callback shorthand
5185 * _.rest(characters, { 'employer': 'slate' });
5186 * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
5187 */
5188 function rest(array, callback, thisArg) {
5189 if (typeof callback != 'number' && callback != null) {
5190 var n = 0,
5191 index = -1,
5192 length = array ? array.length : 0;
5193
5194 callback = lodash.createCallback(callback, thisArg, 3);
5195 while (++index < length && callback(array[index], index, array)) {
5196 n++;
5197 }
5198 } else {
5199 n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
5200 }
5201 return slice(array, n);
5202 }
5203
5204 /**
5205 * Uses a binary search to determine the smallest index at which a value
5206 * should be inserted into a given sorted array in order to maintain the sort
5207 * order of the array. If a callback is provided it will be executed for
5208 * `value` and each element of `array` to compute their sort ranking. The
5209 * callback is bound to `thisArg` and invoked with one argument; (value).
5210 *
5211 * If a property name is provided for `callback` the created "_.pluck" style
5212 * callback will return the property value of the given element.
5213 *
5214 * If an object is provided for `callback` the created "_.where" style callback
5215 * will return `true` for elements that have the properties of the given object,
5216 * else `false`.
5217 *
5218 * @static
5219 * @memberOf _
5220 * @category Arrays
5221 * @param {Array} array The array to inspect.
5222 * @param {*} value The value to evaluate.
5223 * @param {Function|Object|string} [callback=identity] The function called
5224 * per iteration. If a property name or object is provided it will be used
5225 * to create a "_.pluck" or "_.where" style callback, respectively.
5226 * @param {*} [thisArg] The `this` binding of `callback`.
5227 * @returns {number} Returns the index at which `value` should be inserted
5228 * into `array`.
5229 * @example
5230 *
5231 * _.sortedIndex([20, 30, 50], 40);
5232 * // => 2
5233 *
5234 * // using "_.pluck" callback shorthand
5235 * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
5236 * // => 2
5237 *
5238 * var dict = {
5239 * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
5240 * };
5241 *
5242 * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
5243 * return dict.wordToNumber[word];
5244 * });
5245 * // => 2
5246 *
5247 * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
5248 * return this.wordToNumber[word];
5249 * }, dict);
5250 * // => 2
5251 */
5252 function sortedIndex(array, value, callback, thisArg) {
5253 var low = 0,
5254 high = array ? array.length : low;
5255
5256 // explicitly reference `identity` for better inlining in Firefox
5257 callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;
5258 value = callback(value);
5259
5260 while (low < high) {
5261 var mid = (low + high) >>> 1;
5262 (callback(array[mid]) < value)
5263 ? low = mid + 1
5264 : high = mid;
5265 }
5266 return low;
5267 }
5268
5269 /**
5270 * Creates an array of unique values, in order, of the provided arrays using
5271 * strict equality for comparisons, i.e. `===`.
5272 *
5273 * @static
5274 * @memberOf _
5275 * @category Arrays
5276 * @param {...Array} [array] The arrays to inspect.
5277 * @returns {Array} Returns an array of combined values.
5278 * @example
5279 *
5280 * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);
5281 * // => [1, 2, 3, 5, 4]
5282 */
5283 function union() {
5284 return baseUniq(baseFlatten(arguments, true, true));
5285 }
5286
5287 /**
5288 * Creates a duplicate-value-free version of an array using strict equality
5289 * for comparisons, i.e. `===`. If the array is sorted, providing
5290 * `true` for `isSorted` will use a faster algorithm. If a callback is provided
5291 * each element of `array` is passed through the callback before uniqueness
5292 * is computed. The callback is bound to `thisArg` and invoked with three
5293 * arguments; (value, index, array).
5294 *
5295 * If a property name is provided for `callback` the created "_.pluck" style
5296 * callback will return the property value of the given element.
5297 *
5298 * If an object is provided for `callback` the created "_.where" style callback
5299 * will return `true` for elements that have the properties of the given object,
5300 * else `false`.
5301 *
5302 * @static
5303 * @memberOf _
5304 * @alias unique
5305 * @category Arrays
5306 * @param {Array} array The array to process.
5307 * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.
5308 * @param {Function|Object|string} [callback=identity] The function called
5309 * per iteration. If a property name or object is provided it will be used
5310 * to create a "_.pluck" or "_.where" style callback, respectively.
5311 * @param {*} [thisArg] The `this` binding of `callback`.
5312 * @returns {Array} Returns a duplicate-value-free array.
5313 * @example
5314 *
5315 * _.uniq([1, 2, 1, 3, 1]);
5316 * // => [1, 2, 3]
5317 *
5318 * _.uniq([1, 1, 2, 2, 3], true);
5319 * // => [1, 2, 3]
5320 *
5321 * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });
5322 * // => ['A', 'b', 'C']
5323 *
5324 * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
5325 * // => [1, 2.5, 3]
5326 *
5327 * // using "_.pluck" callback shorthand
5328 * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
5329 * // => [{ 'x': 1 }, { 'x': 2 }]
5330 */
5331 function uniq(array, isSorted, callback, thisArg) {
5332 // juggle arguments
5333 if (typeof isSorted != 'boolean' && isSorted != null) {
5334 thisArg = callback;
5335 callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
5336 isSorted = false;
5337 }
5338 if (callback != null) {
5339 callback = lodash.createCallback(callback, thisArg, 3);
5340 }
5341 return baseUniq(array, isSorted, callback);
5342 }
5343
5344 /**
5345 * Creates an array excluding all provided values using strict equality for
5346 * comparisons, i.e. `===`.
5347 *
5348 * @static
5349 * @memberOf _
5350 * @category Arrays
5351 * @param {Array} array The array to filter.
5352 * @param {...*} [value] The values to exclude.
5353 * @returns {Array} Returns a new array of filtered values.
5354 * @example
5355 *
5356 * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
5357 * // => [2, 3, 4]
5358 */
5359 function without(array) {
5360 return baseDifference(array, slice(arguments, 1));
5361 }
5362
5363 /**
5364 * Creates an array that is the symmetric difference of the provided arrays.
5365 * See http://en.wikipedia.org/wiki/Symmetric_difference.
5366 *
5367 * @static
5368 * @memberOf _
5369 * @category Arrays
5370 * @param {...Array} [array] The arrays to inspect.
5371 * @returns {Array} Returns an array of values.
5372 * @example
5373 *
5374 * _.xor([1, 2, 3], [5, 2, 1, 4]);
5375 * // => [3, 5, 4]
5376 *
5377 * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);
5378 * // => [1, 4, 5]
5379 */
5380 function xor() {
5381 var index = -1,
5382 length = arguments.length;
5383
5384 while (++index < length) {
5385 var array = arguments[index];
5386 if (isArray(array) || isArguments(array)) {
5387 var result = result
5388 ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))
5389 : array;
5390 }
5391 }
5392 return result || [];
5393 }
5394
5395 /**
5396 * Creates an array of grouped elements, the first of which contains the first
5397 * elements of the given arrays, the second of which contains the second
5398 * elements of the given arrays, and so on.
5399 *
5400 * @static
5401 * @memberOf _
5402 * @alias unzip
5403 * @category Arrays
5404 * @param {...Array} [array] Arrays to process.
5405 * @returns {Array} Returns a new array of grouped elements.
5406 * @example
5407 *
5408 * _.zip(['fred', 'barney'], [30, 40], [true, false]);
5409 * // => [['fred', 30, true], ['barney', 40, false]]
5410 */
5411 function zip() {
5412 var array = arguments.length > 1 ? arguments : arguments[0],
5413 index = -1,
5414 length = array ? max(pluck(array, 'length')) : 0,
5415 result = Array(length < 0 ? 0 : length);
5416
5417 while (++index < length) {
5418 result[index] = pluck(array, index);
5419 }
5420 return result;
5421 }
5422
5423 /**
5424 * Creates an object composed from arrays of `keys` and `values`. Provide
5425 * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`
5426 * or two arrays, one of `keys` and one of corresponding `values`.
5427 *
5428 * @static
5429 * @memberOf _
5430 * @alias object
5431 * @category Arrays
5432 * @param {Array} keys The array of keys.
5433 * @param {Array} [values=[]] The array of values.
5434 * @returns {Object} Returns an object composed of the given keys and
5435 * corresponding values.
5436 * @example
5437 *
5438 * _.zipObject(['fred', 'barney'], [30, 40]);
5439 * // => { 'fred': 30, 'barney': 40 }
5440 */
5441 function zipObject(keys, values) {
5442 var index = -1,
5443 length = keys ? keys.length : 0,
5444 result = {};
5445
5446 if (!values && length && !isArray(keys[0])) {
5447 values = [];
5448 }
5449 while (++index < length) {
5450 var key = keys[index];
5451 if (values) {
5452 result[key] = values[index];
5453 } else if (key) {
5454 result[key[0]] = key[1];
5455 }
5456 }
5457 return result;
5458 }
5459
5460 /*--------------------------------------------------------------------------*/
5461
5462 /**
5463 * Creates a function that executes `func`, with the `this` binding and
5464 * arguments of the created function, only after being called `n` times.
5465 *
5466 * @static
5467 * @memberOf _
5468 * @category Functions
5469 * @param {number} n The number of times the function must be called before
5470 * `func` is executed.
5471 * @param {Function} func The function to restrict.
5472 * @returns {Function} Returns the new restricted function.
5473 * @example
5474 *
5475 * var saves = ['profile', 'settings'];
5476 *
5477 * var done = _.after(saves.length, function() {
5478 * console.log('Done saving!');
5479 * });
5480 *
5481 * _.forEach(saves, function(type) {
5482 * asyncSave({ 'type': type, 'complete': done });
5483 * });
5484 * // => logs 'Done saving!', after all saves have completed
5485 */
5486 function after(n, func) {
5487 if (!isFunction(func)) {
5488 throw new TypeError;
5489 }
5490 return function() {
5491 if (--n < 1) {
5492 return func.apply(this, arguments);
5493 }
5494 };
5495 }
5496
5497 /**
5498 * Creates a function that, when called, invokes `func` with the `this`
5499 * binding of `thisArg` and prepends any additional `bind` arguments to those
5500 * provided to the bound function.
5501 *
5502 * @static
5503 * @memberOf _
5504 * @category Functions
5505 * @param {Function} func The function to bind.
5506 * @param {*} [thisArg] The `this` binding of `func`.
5507 * @param {...*} [arg] Arguments to be partially applied.
5508 * @returns {Function} Returns the new bound function.
5509 * @example
5510 *
5511 * var func = function(greeting) {
5512 * return greeting + ' ' + this.name;
5513 * };
5514 *
5515 * func = _.bind(func, { 'name': 'fred' }, 'hi');
5516 * func();
5517 * // => 'hi fred'
5518 */
5519 function bind(func, thisArg) {
5520 return arguments.length > 2
5521 ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
5522 : createWrapper(func, 1, null, null, thisArg);
5523 }
5524
5525 /**
5526 * Binds methods of an object to the object itself, overwriting the existing
5527 * method. Method names may be specified as individual arguments or as arrays
5528 * of method names. If no method names are provided all the function properties
5529 * of `object` will be bound.
5530 *
5531 * @static
5532 * @memberOf _
5533 * @category Functions
5534 * @param {Object} object The object to bind and assign the bound methods to.
5535 * @param {...string} [methodName] The object method names to
5536 * bind, specified as individual method names or arrays of method names.
5537 * @returns {Object} Returns `object`.
5538 * @example
5539 *
5540 * var view = {
5541 * 'label': 'docs',
5542 * 'onClick': function() { console.log('clicked ' + this.label); }
5543 * };
5544 *
5545 * _.bindAll(view);
5546 * jQuery('#docs').on('click', view.onClick);
5547 * // => logs 'clicked docs', when the button is clicked
5548 */
5549 function bindAll(object) {
5550 var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),
5551 index = -1,
5552 length = funcs.length;
5553
5554 while (++index < length) {
5555 var key = funcs[index];
5556 object[key] = createWrapper(object[key], 1, null, null, object);
5557 }
5558 return object;
5559 }
5560
5561 /**
5562 * Creates a function that, when called, invokes the method at `object[key]`
5563 * and prepends any additional `bindKey` arguments to those provided to the bound
5564 * function. This method differs from `_.bind` by allowing bound functions to
5565 * reference methods that will be redefined or don't yet exist.
5566 * See http://michaux.ca/articles/lazy-function-definition-pattern.
5567 *
5568 * @static
5569 * @memberOf _
5570 * @category Functions
5571 * @param {Object} object The object the method belongs to.
5572 * @param {string} key The key of the method.
5573 * @param {...*} [arg] Arguments to be partially applied.
5574 * @returns {Function} Returns the new bound function.
5575 * @example
5576 *
5577 * var object = {
5578 * 'name': 'fred',
5579 * 'greet': function(greeting) {
5580 * return greeting + ' ' + this.name;
5581 * }
5582 * };
5583 *
5584 * var func = _.bindKey(object, 'greet', 'hi');
5585 * func();
5586 * // => 'hi fred'
5587 *
5588 * object.greet = function(greeting) {
5589 * return greeting + 'ya ' + this.name + '!';
5590 * };
5591 *
5592 * func();
5593 * // => 'hiya fred!'
5594 */
5595 function bindKey(object, key) {
5596 return arguments.length > 2
5597 ? createWrapper(key, 19, slice(arguments, 2), null, object)
5598 : createWrapper(key, 3, null, null, object);
5599 }
5600
5601 /**
5602 * Creates a function that is the composition of the provided functions,
5603 * where each function consumes the return value of the function that follows.
5604 * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
5605 * Each function is executed with the `this` binding of the composed function.
5606 *
5607 * @static
5608 * @memberOf _
5609 * @category Functions
5610 * @param {...Function} [func] Functions to compose.
5611 * @returns {Function} Returns the new composed function.
5612 * @example
5613 *
5614 * var realNameMap = {
5615 * 'pebbles': 'penelope'
5616 * };
5617 *
5618 * var format = function(name) {
5619 * name = realNameMap[name.toLowerCase()] || name;
5620 * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
5621 * };
5622 *
5623 * var greet = function(formatted) {
5624 * return 'Hiya ' + formatted + '!';
5625 * };
5626 *
5627 * var welcome = _.compose(greet, format);
5628 * welcome('pebbles');
5629 * // => 'Hiya Penelope!'
5630 */
5631 function compose() {
5632 var funcs = arguments,
5633 length = funcs.length;
5634
5635 while (length--) {
5636 if (!isFunction(funcs[length])) {
5637 throw new TypeError;
5638 }
5639 }
5640 return function() {
5641 var args = arguments,
5642 length = funcs.length;
5643
5644 while (length--) {
5645 args = [funcs[length].apply(this, args)];
5646 }
5647 return args[0];
5648 };
5649 }
5650
5651 /**
5652 * Creates a function which accepts one or more arguments of `func` that when
5653 * invoked either executes `func` returning its result, if all `func` arguments
5654 * have been provided, or returns a function that accepts one or more of the
5655 * remaining `func` arguments, and so on. The arity of `func` can be specified
5656 * if `func.length` is not sufficient.
5657 *
5658 * @static
5659 * @memberOf _
5660 * @category Functions
5661 * @param {Function} func The function to curry.
5662 * @param {number} [arity=func.length] The arity of `func`.
5663 * @returns {Function} Returns the new curried function.
5664 * @example
5665 *
5666 * var curried = _.curry(function(a, b, c) {
5667 * console.log(a + b + c);
5668 * });
5669 *
5670 * curried(1)(2)(3);
5671 * // => 6
5672 *
5673 * curried(1, 2)(3);
5674 * // => 6
5675 *
5676 * curried(1, 2, 3);
5677 * // => 6
5678 */
5679 function curry(func, arity) {
5680 arity = typeof arity == 'number' ? arity : (+arity || func.length);
5681 return createWrapper(func, 4, null, null, null, arity);
5682 }
5683
5684 /**
5685 * Creates a function that will delay the execution of `func` until after
5686 * `wait` milliseconds have elapsed since the last time it was invoked.
5687 * Provide an options object to indicate that `func` should be invoked on
5688 * the leading and/or trailing edge of the `wait` timeout. Subsequent calls
5689 * to the debounced function will return the result of the last `func` call.
5690 *
5691 * Note: If `leading` and `trailing` options are `true` `func` will be called
5692 * on the trailing edge of the timeout only if the the debounced function is
5693 * invoked more than once during the `wait` timeout.
5694 *
5695 * @static
5696 * @memberOf _
5697 * @category Functions
5698 * @param {Function} func The function to debounce.
5699 * @param {number} wait The number of milliseconds to delay.
5700 * @param {Object} [options] The options object.
5701 * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.
5702 * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.
5703 * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
5704 * @returns {Function} Returns the new debounced function.
5705 * @example
5706 *
5707 * // avoid costly calculations while the window size is in flux
5708 * var lazyLayout = _.debounce(calculateLayout, 150);
5709 * jQuery(window).on('resize', lazyLayout);
5710 *
5711 * // execute `sendMail` when the click event is fired, debouncing subsequent calls
5712 * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
5713 * 'leading': true,
5714 * 'trailing': false
5715 * });
5716 *
5717 * // ensure `batchLog` is executed once after 1 second of debounced calls
5718 * var source = new EventSource('/stream');
5719 * source.addEventListener('message', _.debounce(batchLog, 250, {
5720 * 'maxWait': 1000
5721 * }, false);
5722 */
5723 function debounce(func, wait, options) {
5724 var args,
5725 maxTimeoutId,
5726 result,
5727 stamp,
5728 thisArg,
5729 timeoutId,
5730 trailingCall,
5731 lastCalled = 0,
5732 maxWait = false,
5733 trailing = true;
5734
5735 if (!isFunction(func)) {
5736 throw new TypeError;
5737 }
5738 wait = nativeMax(0, wait) || 0;
5739 if (options === true) {
5740 var leading = true;
5741 trailing = false;
5742 } else if (isObject(options)) {
5743 leading = options.leading;
5744 maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);
5745 trailing = 'trailing' in options ? options.trailing : trailing;
5746 }
5747 var delayed = function() {
5748 var remaining = wait - (now() - stamp);
5749 if (remaining <= 0) {
5750 if (maxTimeoutId) {
5751 clearTimeout(maxTimeoutId);
5752 }
5753 var isCalled = trailingCall;
5754 maxTimeoutId = timeoutId = trailingCall = undefined;
5755 if (isCalled) {
5756 lastCalled = now();
5757 result = func.apply(thisArg, args);
5758 if (!timeoutId && !maxTimeoutId) {
5759 args = thisArg = null;
5760 }
5761 }
5762 } else {
5763 timeoutId = setTimeout(delayed, remaining);
5764 }
5765 };
5766
5767 var maxDelayed = function() {
5768 if (timeoutId) {
5769 clearTimeout(timeoutId);
5770 }
5771 maxTimeoutId = timeoutId = trailingCall = undefined;
5772 if (trailing || (maxWait !== wait)) {
5773 lastCalled = now();
5774 result = func.apply(thisArg, args);
5775 if (!timeoutId && !maxTimeoutId) {
5776 args = thisArg = null;
5777 }
5778 }
5779 };
5780
5781 return function() {
5782 args = arguments;
5783 stamp = now();
5784 thisArg = this;
5785 trailingCall = trailing && (timeoutId || !leading);
5786
5787 if (maxWait === false) {
5788 var leadingCall = leading && !timeoutId;
5789 } else {
5790 if (!maxTimeoutId && !leading) {
5791 lastCalled = stamp;
5792 }
5793 var remaining = maxWait - (stamp - lastCalled),
5794 isCalled = remaining <= 0;
5795
5796 if (isCalled) {
5797 if (maxTimeoutId) {
5798 maxTimeoutId = clearTimeout(maxTimeoutId);
5799 }
5800 lastCalled = stamp;
5801 result = func.apply(thisArg, args);
5802 }
5803 else if (!maxTimeoutId) {
5804 maxTimeoutId = setTimeout(maxDelayed, remaining);
5805 }
5806 }
5807 if (isCalled && timeoutId) {
5808 timeoutId = clearTimeout(timeoutId);
5809 }
5810 else if (!timeoutId && wait !== maxWait) {
5811 timeoutId = setTimeout(delayed, wait);
5812 }
5813 if (leadingCall) {
5814 isCalled = true;
5815 result = func.apply(thisArg, args);
5816 }
5817 if (isCalled && !timeoutId && !maxTimeoutId) {
5818 args = thisArg = null;
5819 }
5820 return result;
5821 };
5822 }
5823
5824 /**
5825 * Defers executing the `func` function until the current call stack has cleared.
5826 * Additional arguments will be provided to `func` when it is invoked.
5827 *
5828 * @static
5829 * @memberOf _
5830 * @category Functions
5831 * @param {Function} func The function to defer.
5832 * @param {...*} [arg] Arguments to invoke the function with.
5833 * @returns {number} Returns the timer id.
5834 * @example
5835 *
5836 * _.defer(function(text) { console.log(text); }, 'deferred');
5837 * // logs 'deferred' after one or more milliseconds
5838 */
5839 function defer(func) {
5840 if (!isFunction(func)) {
5841 throw new TypeError;
5842 }
5843 var args = slice(arguments, 1);
5844 return setTimeout(function() { func.apply(undefined, args); }, 1);
5845 }
5846
5847 /**
5848 * Executes the `func` function after `wait` milliseconds. Additional arguments
5849 * will be provided to `func` when it is invoked.
5850 *
5851 * @static
5852 * @memberOf _
5853 * @category Functions
5854 * @param {Function} func The function to delay.
5855 * @param {number} wait The number of milliseconds to delay execution.
5856 * @param {...*} [arg] Arguments to invoke the function with.
5857 * @returns {number} Returns the timer id.
5858 * @example
5859 *
5860 * _.delay(function(text) { console.log(text); }, 1000, 'later');
5861 * // => logs 'later' after one second
5862 */
5863 function delay(func, wait) {
5864 if (!isFunction(func)) {
5865 throw new TypeError;
5866 }
5867 var args = slice(arguments, 2);
5868 return setTimeout(function() { func.apply(undefined, args); }, wait);
5869 }
5870
5871 /**
5872 * Creates a function that memoizes the result of `func`. If `resolver` is
5873 * provided it will be used to determine the cache key for storing the result
5874 * based on the arguments provided to the memoized function. By default, the
5875 * first argument provided to the memoized function is used as the cache key.
5876 * The `func` is executed with the `this` binding of the memoized function.
5877 * The result cache is exposed as the `cache` property on the memoized function.
5878 *
5879 * @static
5880 * @memberOf _
5881 * @category Functions
5882 * @param {Function} func The function to have its output memoized.
5883 * @param {Function} [resolver] A function used to resolve the cache key.
5884 * @returns {Function} Returns the new memoizing function.
5885 * @example
5886 *
5887 * var fibonacci = _.memoize(function(n) {
5888 * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
5889 * });
5890 *
5891 * fibonacci(9)
5892 * // => 34
5893 *
5894 * var data = {
5895 * 'fred': { 'name': 'fred', 'age': 40 },
5896 * 'pebbles': { 'name': 'pebbles', 'age': 1 }
5897 * };
5898 *
5899 * // modifying the result cache
5900 * var get = _.memoize(function(name) { return data[name]; }, _.identity);
5901 * get('pebbles');
5902 * // => { 'name': 'pebbles', 'age': 1 }
5903 *
5904 * get.cache.pebbles.name = 'penelope';
5905 * get('pebbles');
5906 * // => { 'name': 'penelope', 'age': 1 }
5907 */
5908 function memoize(func, resolver) {
5909 if (!isFunction(func)) {
5910 throw new TypeError;
5911 }
5912 var memoized = function() {
5913 var cache = memoized.cache,
5914 key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];
5915
5916 return hasOwnProperty.call(cache, key)
5917 ? cache[key]
5918 : (cache[key] = func.apply(this, arguments));
5919 }
5920 memoized.cache = {};
5921 return memoized;
5922 }
5923
5924 /**
5925 * Creates a function that is restricted to execute `func` once. Repeat calls to
5926 * the function will return the value of the first call. The `func` is executed
5927 * with the `this` binding of the created function.
5928 *
5929 * @static
5930 * @memberOf _
5931 * @category Functions
5932 * @param {Function} func The function to restrict.
5933 * @returns {Function} Returns the new restricted function.
5934 * @example
5935 *
5936 * var initialize = _.once(createApplication);
5937 * initialize();
5938 * initialize();
5939 * // `initialize` executes `createApplication` once
5940 */
5941 function once(func) {
5942 var ran,
5943 result;
5944
5945 if (!isFunction(func)) {
5946 throw new TypeError;
5947 }
5948 return function() {
5949 if (ran) {
5950 return result;
5951 }
5952 ran = true;
5953 result = func.apply(this, arguments);
5954
5955 // clear the `func` variable so the function may be garbage collected
5956 func = null;
5957 return result;
5958 };
5959 }
5960
5961 /**
5962 * Creates a function that, when called, invokes `func` with any additional
5963 * `partial` arguments prepended to those provided to the new function. This
5964 * method is similar to `_.bind` except it does **not** alter the `this` binding.
5965 *
5966 * @static
5967 * @memberOf _
5968 * @category Functions
5969 * @param {Function} func The function to partially apply arguments to.
5970 * @param {...*} [arg] Arguments to be partially applied.
5971 * @returns {Function} Returns the new partially applied function.
5972 * @example
5973 *
5974 * var greet = function(greeting, name) { return greeting + ' ' + name; };
5975 * var hi = _.partial(greet, 'hi');
5976 * hi('fred');
5977 * // => 'hi fred'
5978 */
5979 function partial(func) {
5980 return createWrapper(func, 16, slice(arguments, 1));
5981 }
5982
5983 /**
5984 * This method is like `_.partial` except that `partial` arguments are
5985 * appended to those provided to the new function.
5986 *
5987 * @static
5988 * @memberOf _
5989 * @category Functions
5990 * @param {Function} func The function to partially apply arguments to.
5991 * @param {...*} [arg] Arguments to be partially applied.
5992 * @returns {Function} Returns the new partially applied function.
5993 * @example
5994 *
5995 * var defaultsDeep = _.partialRight(_.merge, _.defaults);
5996 *
5997 * var options = {
5998 * 'variable': 'data',
5999 * 'imports': { 'jq': $ }
6000 * };
6001 *
6002 * defaultsDeep(options, _.templateSettings);
6003 *
6004 * options.variable
6005 * // => 'data'
6006 *
6007 * options.imports
6008 * // => { '_': _, 'jq': $ }
6009 */
6010 function partialRight(func) {
6011 return createWrapper(func, 32, null, slice(arguments, 1));
6012 }
6013
6014 /**
6015 * Creates a function that, when executed, will only call the `func` function
6016 * at most once per every `wait` milliseconds. Provide an options object to
6017 * indicate that `func` should be invoked on the leading and/or trailing edge
6018 * of the `wait` timeout. Subsequent calls to the throttled function will
6019 * return the result of the last `func` call.
6020 *
6021 * Note: If `leading` and `trailing` options are `true` `func` will be called
6022 * on the trailing edge of the timeout only if the the throttled function is
6023 * invoked more than once during the `wait` timeout.
6024 *
6025 * @static
6026 * @memberOf _
6027 * @category Functions
6028 * @param {Function} func The function to throttle.
6029 * @param {number} wait The number of milliseconds to throttle executions to.
6030 * @param {Object} [options] The options object.
6031 * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.
6032 * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.
6033 * @returns {Function} Returns the new throttled function.
6034 * @example
6035 *
6036 * // avoid excessively updating the position while scrolling
6037 * var throttled = _.throttle(updatePosition, 100);
6038 * jQuery(window).on('scroll', throttled);
6039 *
6040 * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes
6041 * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
6042 * 'trailing': false
6043 * }));
6044 */
6045 function throttle(func, wait, options) {
6046 var leading = true,
6047 trailing = true;
6048
6049 if (!isFunction(func)) {
6050 throw new TypeError;
6051 }
6052 if (options === false) {
6053 leading = false;
6054 } else if (isObject(options)) {
6055 leading = 'leading' in options ? options.leading : leading;
6056 trailing = 'trailing' in options ? options.trailing : trailing;
6057 }
6058 debounceOptions.leading = leading;
6059 debounceOptions.maxWait = wait;
6060 debounceOptions.trailing = trailing;
6061
6062 return debounce(func, wait, debounceOptions);
6063 }
6064
6065 /**
6066 * Creates a function that provides `value` to the wrapper function as its
6067 * first argument. Additional arguments provided to the function are appended
6068 * to those provided to the wrapper function. The wrapper is executed with
6069 * the `this` binding of the created function.
6070 *
6071 * @static
6072 * @memberOf _
6073 * @category Functions
6074 * @param {*} value The value to wrap.
6075 * @param {Function} wrapper The wrapper function.
6076 * @returns {Function} Returns the new function.
6077 * @example
6078 *
6079 * var p = _.wrap(_.escape, function(func, text) {
6080 * return '<p>' + func(text) + '</p>';
6081 * });
6082 *
6083 * p('Fred, Wilma, & Pebbles');
6084 * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
6085 */
6086 function wrap(value, wrapper) {
6087 return createWrapper(wrapper, 16, [value]);
6088 }
6089
6090 /*--------------------------------------------------------------------------*/
6091
6092 /**
6093 * Creates a function that returns `value`.
6094 *
6095 * @static
6096 * @memberOf _
6097 * @category Utilities
6098 * @param {*} value The value to return from the new function.
6099 * @returns {Function} Returns the new function.
6100 * @example
6101 *
6102 * var object = { 'name': 'fred' };
6103 * var getter = _.constant(object);
6104 * getter() === object;
6105 * // => true
6106 */
6107 function constant(value) {
6108 return function() {
6109 return value;
6110 };
6111 }
6112
6113 /**
6114 * Produces a callback bound to an optional `thisArg`. If `func` is a property
6115 * name the created callback will return the property value for a given element.
6116 * If `func` is an object the created callback will return `true` for elements
6117 * that contain the equivalent object properties, otherwise it will return `false`.
6118 *
6119 * @static
6120 * @memberOf _
6121 * @category Utilities
6122 * @param {*} [func=identity] The value to convert to a callback.
6123 * @param {*} [thisArg] The `this` binding of the created callback.
6124 * @param {number} [argCount] The number of arguments the callback accepts.
6125 * @returns {Function} Returns a callback function.
6126 * @example
6127 *
6128 * var characters = [
6129 * { 'name': 'barney', 'age': 36 },
6130 * { 'name': 'fred', 'age': 40 }
6131 * ];
6132 *
6133 * // wrap to create custom callback shorthands
6134 * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {
6135 * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);
6136 * return !match ? func(callback, thisArg) : function(object) {
6137 * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];
6138 * };
6139 * });
6140 *
6141 * _.filter(characters, 'age__gt38');
6142 * // => [{ 'name': 'fred', 'age': 40 }]
6143 */
6144 function createCallback(func, thisArg, argCount) {
6145 var type = typeof func;
6146 if (func == null || type == 'function') {
6147 return baseCreateCallback(func, thisArg, argCount);
6148 }
6149 // handle "_.pluck" style callback shorthands
6150 if (type != 'object') {
6151 return property(func);
6152 }
6153 var props = keys(func),
6154 key = props[0],
6155 a = func[key];
6156
6157 // handle "_.where" style callback shorthands
6158 if (props.length == 1 && a === a && !isObject(a)) {
6159 // fast path the common case of providing an object with a single
6160 // property containing a primitive value
6161 return function(object) {
6162 var b = object[key];
6163 return a === b && (a !== 0 || (1 / a == 1 / b));
6164 };
6165 }
6166 return function(object) {
6167 var length = props.length,
6168 result = false;
6169
6170 while (length--) {
6171 if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {
6172 break;
6173 }
6174 }
6175 return result;
6176 };
6177 }
6178
6179 /**
6180 * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their
6181 * corresponding HTML entities.
6182 *
6183 * @static
6184 * @memberOf _
6185 * @category Utilities
6186 * @param {string} string The string to escape.
6187 * @returns {string} Returns the escaped string.
6188 * @example
6189 *
6190 * _.escape('Fred, Wilma, & Pebbles');
6191 * // => 'Fred, Wilma, &amp; Pebbles'
6192 */
6193 function escape(string) {
6194 return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
6195 }
6196
6197 /**
6198 * This method returns the first argument provided to it.
6199 *
6200 * @static
6201 * @memberOf _
6202 * @category Utilities
6203 * @param {*} value Any value.
6204 * @returns {*} Returns `value`.
6205 * @example
6206 *
6207 * var object = { 'name': 'fred' };
6208 * _.identity(object) === object;
6209 * // => true
6210 */
6211 function identity(value) {
6212 return value;
6213 }
6214
6215 /**
6216 * Adds function properties of a source object to the destination object.
6217 * If `object` is a function methods will be added to its prototype as well.
6218 *
6219 * @static
6220 * @memberOf _
6221 * @category Utilities
6222 * @param {Function|Object} [object=lodash] object The destination object.
6223 * @param {Object} source The object of functions to add.
6224 * @param {Object} [options] The options object.
6225 * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.
6226 * @example
6227 *
6228 * function capitalize(string) {
6229 * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
6230 * }
6231 *
6232 * _.mixin({ 'capitalize': capitalize });
6233 * _.capitalize('fred');
6234 * // => 'Fred'
6235 *
6236 * _('fred').capitalize().value();
6237 * // => 'Fred'
6238 *
6239 * _.mixin({ 'capitalize': capitalize }, { 'chain': false });
6240 * _('fred').capitalize();
6241 * // => 'Fred'
6242 */
6243 function mixin(object, source, options) {
6244 var chain = true,
6245 methodNames = source && functions(source);
6246
6247 if (!source || (!options && !methodNames.length)) {
6248 if (options == null) {
6249 options = source;
6250 }
6251 ctor = lodashWrapper;
6252 source = object;
6253 object = lodash;
6254 methodNames = functions(source);
6255 }
6256 if (options === false) {
6257 chain = false;
6258 } else if (isObject(options) && 'chain' in options) {
6259 chain = options.chain;
6260 }
6261 var ctor = object,
6262 isFunc = isFunction(ctor);
6263
6264 forEach(methodNames, function(methodName) {
6265 var func = object[methodName] = source[methodName];
6266 if (isFunc) {
6267 ctor.prototype[methodName] = function() {
6268 var chainAll = this.__chain__,
6269 value = this.__wrapped__,
6270 args = [value];
6271
6272 push.apply(args, arguments);
6273 var result = func.apply(object, args);
6274 if (chain || chainAll) {
6275 if (value === result && isObject(result)) {
6276 return this;
6277 }
6278 result = new ctor(result);
6279 result.__chain__ = chainAll;
6280 }
6281 return result;
6282 };
6283 }
6284 });
6285 }
6286
6287 /**
6288 * Reverts the '_' variable to its previous value and returns a reference to
6289 * the `lodash` function.
6290 *
6291 * @static
6292 * @memberOf _
6293 * @category Utilities
6294 * @returns {Function} Returns the `lodash` function.
6295 * @example
6296 *
6297 * var lodash = _.noConflict();
6298 */
6299 function noConflict() {
6300 context._ = oldDash;
6301 return this;
6302 }
6303
6304 /**
6305 * A no-operation function.
6306 *
6307 * @static
6308 * @memberOf _
6309 * @category Utilities
6310 * @example
6311 *
6312 * var object = { 'name': 'fred' };
6313 * _.noop(object) === undefined;
6314 * // => true
6315 */
6316 function noop() {
6317 // no operation performed
6318 }
6319
6320 /**
6321 * Gets the number of milliseconds that have elapsed since the Unix epoch
6322 * (1 January 1970 00:00:00 UTC).
6323 *
6324 * @static
6325 * @memberOf _
6326 * @category Utilities
6327 * @example
6328 *
6329 * var stamp = _.now();
6330 * _.defer(function() { console.log(_.now() - stamp); });
6331 * // => logs the number of milliseconds it took for the deferred function to be called
6332 */
6333 var now = isNative(now = Date.now) && now || function() {
6334 return new Date().getTime();
6335 };
6336
6337 /**
6338 * Converts the given value into an integer of the specified radix.
6339 * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
6340 * `value` is a hexadecimal, in which case a `radix` of `16` is used.
6341 *
6342 * Note: This method avoids differences in native ES3 and ES5 `parseInt`
6343 * implementations. See http://es5.github.io/#E.
6344 *
6345 * @static
6346 * @memberOf _
6347 * @category Utilities
6348 * @param {string} value The value to parse.
6349 * @param {number} [radix] The radix used to interpret the value to parse.
6350 * @returns {number} Returns the new integer value.
6351 * @example
6352 *
6353 * _.parseInt('08');
6354 * // => 8
6355 */
6356 var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {
6357 // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`
6358 return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);
6359 };
6360
6361 /**
6362 * Creates a "_.pluck" style function, which returns the `key` value of a
6363 * given object.
6364 *
6365 * @static
6366 * @memberOf _
6367 * @category Utilities
6368 * @param {string} key The name of the property to retrieve.
6369 * @returns {Function} Returns the new function.
6370 * @example
6371 *
6372 * var characters = [
6373 * { 'name': 'fred', 'age': 40 },
6374 * { 'name': 'barney', 'age': 36 }
6375 * ];
6376 *
6377 * var getName = _.property('name');
6378 *
6379 * _.map(characters, getName);
6380 * // => ['barney', 'fred']
6381 *
6382 * _.sortBy(characters, getName);
6383 * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }]
6384 */
6385 function property(key) {
6386 return function(object) {
6387 return object[key];
6388 };
6389 }
6390
6391 /**
6392 * Produces a random number between `min` and `max` (inclusive). If only one
6393 * argument is provided a number between `0` and the given number will be
6394 * returned. If `floating` is truey or either `min` or `max` are floats a
6395 * floating-point number will be returned instead of an integer.
6396 *
6397 * @static
6398 * @memberOf _
6399 * @category Utilities
6400 * @param {number} [min=0] The minimum possible value.
6401 * @param {number} [max=1] The maximum possible value.
6402 * @param {boolean} [floating=false] Specify returning a floating-point number.
6403 * @returns {number} Returns a random number.
6404 * @example
6405 *
6406 * _.random(0, 5);
6407 * // => an integer between 0 and 5
6408 *
6409 * _.random(5);
6410 * // => also an integer between 0 and 5
6411 *
6412 * _.random(5, true);
6413 * // => a floating-point number between 0 and 5
6414 *
6415 * _.random(1.2, 5.2);
6416 * // => a floating-point number between 1.2 and 5.2
6417 */
6418 function random(min, max, floating) {
6419 var noMin = min == null,
6420 noMax = max == null;
6421
6422 if (floating == null) {
6423 if (typeof min == 'boolean' && noMax) {
6424 floating = min;
6425 min = 1;
6426 }
6427 else if (!noMax && typeof max == 'boolean') {
6428 floating = max;
6429 noMax = true;
6430 }
6431 }
6432 if (noMin && noMax) {
6433 max = 1;
6434 }
6435 min = +min || 0;
6436 if (noMax) {
6437 max = min;
6438 min = 0;
6439 } else {
6440 max = +max || 0;
6441 }
6442 if (floating || min % 1 || max % 1) {
6443 var rand = nativeRandom();
6444 return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);
6445 }
6446 return baseRandom(min, max);
6447 }
6448
6449 /**
6450 * Resolves the value of property `key` on `object`. If `key` is a function
6451 * it will be invoked with the `this` binding of `object` and its result returned,
6452 * else the property value is returned. If `object` is falsey then `undefined`
6453 * is returned.
6454 *
6455 * @static
6456 * @memberOf _
6457 * @category Utilities
6458 * @param {Object} object The object to inspect.
6459 * @param {string} key The name of the property to resolve.
6460 * @returns {*} Returns the resolved value.
6461 * @example
6462 *
6463 * var object = {
6464 * 'cheese': 'crumpets',
6465 * 'stuff': function() {
6466 * return 'nonsense';
6467 * }
6468 * };
6469 *
6470 * _.result(object, 'cheese');
6471 * // => 'crumpets'
6472 *
6473 * _.result(object, 'stuff');
6474 * // => 'nonsense'
6475 */
6476 function result(object, key) {
6477 if (object) {
6478 var value = object[key];
6479 return isFunction(value) ? object[key]() : value;
6480 }
6481 }
6482
6483 /**
6484 * A micro-templating method that handles arbitrary delimiters, preserves
6485 * whitespace, and correctly escapes quotes within interpolated code.
6486 *
6487 * Note: In the development build, `_.template` utilizes sourceURLs for easier
6488 * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
6489 *
6490 * For more information on precompiling templates see:
6491 * http://lodash.com/custom-builds
6492 *
6493 * For more information on Chrome extension sandboxes see:
6494 * http://developer.chrome.com/stable/extensions/sandboxingEval.html
6495 *
6496 * @static
6497 * @memberOf _
6498 * @category Utilities
6499 * @param {string} text The template text.
6500 * @param {Object} data The data object used to populate the text.
6501 * @param {Object} [options] The options object.
6502 * @param {RegExp} [options.escape] The "escape" delimiter.
6503 * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
6504 * @param {Object} [options.imports] An object to import into the template as local variables.
6505 * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
6506 * @param {string} [sourceURL] The sourceURL of the template's compiled source.
6507 * @param {string} [variable] The data object variable name.
6508 * @returns {Function|string} Returns a compiled function when no `data` object
6509 * is given, else it returns the interpolated text.
6510 * @example
6511 *
6512 * // using the "interpolate" delimiter to create a compiled template
6513 * var compiled = _.template('hello <%= name %>');
6514 * compiled({ 'name': 'fred' });
6515 * // => 'hello fred'
6516 *
6517 * // using the "escape" delimiter to escape HTML in data property values
6518 * _.template('<b><%- value %></b>', { 'value': '<script>' });
6519 * // => '<b>&lt;script&gt;</b>'
6520 *
6521 * // using the "evaluate" delimiter to generate HTML
6522 * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
6523 * _.template(list, { 'people': ['fred', 'barney'] });
6524 * // => '<li>fred</li><li>barney</li>'
6525 *
6526 * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
6527 * _.template('hello ${ name }', { 'name': 'pebbles' });
6528 * // => 'hello pebbles'
6529 *
6530 * // using the internal `print` function in "evaluate" delimiters
6531 * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
6532 * // => 'hello barney!'
6533 *
6534 * // using a custom template delimiters
6535 * _.templateSettings = {
6536 * 'interpolate': /{{([\s\S]+?)}}/g
6537 * };
6538 *
6539 * _.template('hello {{ name }}!', { 'name': 'mustache' });
6540 * // => 'hello mustache!'
6541 *
6542 * // using the `imports` option to import jQuery
6543 * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
6544 * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
6545 * // => '<li>fred</li><li>barney</li>'
6546 *
6547 * // using the `sourceURL` option to specify a custom sourceURL for the template
6548 * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
6549 * compiled(data);
6550 * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
6551 *
6552 * // using the `variable` option to ensure a with-statement isn't used in the compiled template
6553 * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
6554 * compiled.source;
6555 * // => function(data) {
6556 * var __t, __p = '', __e = _.escape;
6557 * __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
6558 * return __p;
6559 * }
6560 *
6561 * // using the `source` property to inline compiled templates for meaningful
6562 * // line numbers in error messages and a stack trace
6563 * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
6564 * var JST = {\
6565 * "main": ' + _.template(mainText).source + '\
6566 * };\
6567 * ');
6568 */
6569 function template(text, data, options) {
6570 // based on John Resig's `tmpl` implementation
6571 // http://ejohn.org/blog/javascript-micro-templating/
6572 // and Laura Doktorova's doT.js
6573 // https://github.com/olado/doT
6574 var settings = lodash.templateSettings;
6575 text = String(text || '');
6576
6577 // avoid missing dependencies when `iteratorTemplate` is not defined
6578 options = defaults({}, options, settings);
6579
6580 var imports = defaults({}, options.imports, settings.imports),
6581 importsKeys = keys(imports),
6582 importsValues = values(imports);
6583
6584 var isEvaluating,
6585 index = 0,
6586 interpolate = options.interpolate || reNoMatch,
6587 source = "__p += '";
6588
6589 // compile the regexp to match each delimiter
6590 var reDelimiters = RegExp(
6591 (options.escape || reNoMatch).source + '|' +
6592 interpolate.source + '|' +
6593 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
6594 (options.evaluate || reNoMatch).source + '|$'
6595 , 'g');
6596
6597 text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
6598 interpolateValue || (interpolateValue = esTemplateValue);
6599
6600 // escape characters that cannot be included in string literals
6601 source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
6602
6603 // replace delimiters with snippets
6604 if (escapeValue) {
6605 source += "' +\n__e(" + escapeValue + ") +\n'";
6606 }
6607 if (evaluateValue) {
6608 isEvaluating = true;
6609 source += "';\n" + evaluateValue + ";\n__p += '";
6610 }
6611 if (interpolateValue) {
6612 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
6613 }
6614 index = offset + match.length;
6615
6616 // the JS engine embedded in Adobe products requires returning the `match`
6617 // string in order to produce the correct `offset` value
6618 return match;
6619 });
6620
6621 source += "';\n";
6622
6623 // if `variable` is not specified, wrap a with-statement around the generated
6624 // code to add the data object to the top of the scope chain
6625 var variable = options.variable,
6626 hasVariable = variable;
6627
6628 if (!hasVariable) {
6629 variable = 'obj';
6630 source = 'with (' + variable + ') {\n' + source + '\n}\n';
6631 }
6632 // cleanup code by stripping empty strings
6633 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
6634 .replace(reEmptyStringMiddle, '$1')
6635 .replace(reEmptyStringTrailing, '$1;');
6636
6637 // frame code as the function body
6638 source = 'function(' + variable + ') {\n' +
6639 (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
6640 "var __t, __p = '', __e = _.escape" +
6641 (isEvaluating
6642 ? ', __j = Array.prototype.join;\n' +
6643 "function print() { __p += __j.call(arguments, '') }\n"
6644 : ';\n'
6645 ) +
6646 source +
6647 'return __p\n}';
6648
6649 // Use a sourceURL for easier debugging.
6650 // http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
6651 var sourceURL = '\n/*\n//# sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\n*/';
6652
6653 try {
6654 var result = Function(importsKeys, 'return ' + source + sourceURL).apply(undefined, importsValues);
6655 } catch(e) {
6656 e.source = source;
6657 throw e;
6658 }
6659 if (data) {
6660 return result(data);
6661 }
6662 // provide the compiled function's source by its `toString` method, in
6663 // supported environments, or the `source` property as a convenience for
6664 // inlining compiled templates during the build process
6665 result.source = source;
6666 return result;
6667 }
6668
6669 /**
6670 * Executes the callback `n` times, returning an array of the results
6671 * of each callback execution. The callback is bound to `thisArg` and invoked
6672 * with one argument; (index).
6673 *
6674 * @static
6675 * @memberOf _
6676 * @category Utilities
6677 * @param {number} n The number of times to execute the callback.
6678 * @param {Function} callback The function called per iteration.
6679 * @param {*} [thisArg] The `this` binding of `callback`.
6680 * @returns {Array} Returns an array of the results of each `callback` execution.
6681 * @example
6682 *
6683 * var diceRolls = _.times(3, _.partial(_.random, 1, 6));
6684 * // => [3, 6, 4]
6685 *
6686 * _.times(3, function(n) { mage.castSpell(n); });
6687 * // => calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively
6688 *
6689 * _.times(3, function(n) { this.cast(n); }, mage);
6690 * // => also calls `mage.castSpell(n)` three times
6691 */
6692 function times(n, callback, thisArg) {
6693 n = (n = +n) > -1 ? n : 0;
6694 var index = -1,
6695 result = Array(n);
6696
6697 callback = baseCreateCallback(callback, thisArg, 1);
6698 while (++index < n) {
6699 result[index] = callback(index);
6700 }
6701 return result;
6702 }
6703
6704 /**
6705 * The inverse of `_.escape` this method converts the HTML entities
6706 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
6707 * corresponding characters.
6708 *
6709 * @static
6710 * @memberOf _
6711 * @category Utilities
6712 * @param {string} string The string to unescape.
6713 * @returns {string} Returns the unescaped string.
6714 * @example
6715 *
6716 * _.unescape('Fred, Barney &amp; Pebbles');
6717 * // => 'Fred, Barney & Pebbles'
6718 */
6719 function unescape(string) {
6720 return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
6721 }
6722
6723 /**
6724 * Generates a unique ID. If `prefix` is provided the ID will be appended to it.
6725 *
6726 * @static
6727 * @memberOf _
6728 * @category Utilities
6729 * @param {string} [prefix] The value to prefix the ID with.
6730 * @returns {string} Returns the unique ID.
6731 * @example
6732 *
6733 * _.uniqueId('contact_');
6734 * // => 'contact_104'
6735 *
6736 * _.uniqueId();
6737 * // => '105'
6738 */
6739 function uniqueId(prefix) {
6740 var id = ++idCounter;
6741 return String(prefix == null ? '' : prefix) + id;
6742 }
6743
6744 /*--------------------------------------------------------------------------*/
6745
6746 /**
6747 * Creates a `lodash` object that wraps the given value with explicit
6748 * method chaining enabled.
6749 *
6750 * @static
6751 * @memberOf _
6752 * @category Chaining
6753 * @param {*} value The value to wrap.
6754 * @returns {Object} Returns the wrapper object.
6755 * @example
6756 *
6757 * var characters = [
6758 * { 'name': 'barney', 'age': 36 },
6759 * { 'name': 'fred', 'age': 40 },
6760 * { 'name': 'pebbles', 'age': 1 }
6761 * ];
6762 *
6763 * var youngest = _.chain(characters)
6764 * .sortBy('age')
6765 * .map(function(chr) { return chr.name + ' is ' + chr.age; })
6766 * .first()
6767 * .value();
6768 * // => 'pebbles is 1'
6769 */
6770 function chain(value) {
6771 value = new lodashWrapper(value);
6772 value.__chain__ = true;
6773 return value;
6774 }
6775
6776 /**
6777 * Invokes `interceptor` with the `value` as the first argument and then
6778 * returns `value`. The purpose of this method is to "tap into" a method
6779 * chain in order to perform operations on intermediate results within
6780 * the chain.
6781 *
6782 * @static
6783 * @memberOf _
6784 * @category Chaining
6785 * @param {*} value The value to provide to `interceptor`.
6786 * @param {Function} interceptor The function to invoke.
6787 * @returns {*} Returns `value`.
6788 * @example
6789 *
6790 * _([1, 2, 3, 4])
6791 * .tap(function(array) { array.pop(); })
6792 * .reverse()
6793 * .value();
6794 * // => [3, 2, 1]
6795 */
6796 function tap(value, interceptor) {
6797 interceptor(value);
6798 return value;
6799 }
6800
6801 /**
6802 * Enables explicit method chaining on the wrapper object.
6803 *
6804 * @name chain
6805 * @memberOf _
6806 * @category Chaining
6807 * @returns {*} Returns the wrapper object.
6808 * @example
6809 *
6810 * var characters = [
6811 * { 'name': 'barney', 'age': 36 },
6812 * { 'name': 'fred', 'age': 40 }
6813 * ];
6814 *
6815 * // without explicit chaining
6816 * _(characters).first();
6817 * // => { 'name': 'barney', 'age': 36 }
6818 *
6819 * // with explicit chaining
6820 * _(characters).chain()
6821 * .first()
6822 * .pick('age')
6823 * .value();
6824 * // => { 'age': 36 }
6825 */
6826 function wrapperChain() {
6827 this.__chain__ = true;
6828 return this;
6829 }
6830
6831 /**
6832 * Produces the `toString` result of the wrapped value.
6833 *
6834 * @name toString
6835 * @memberOf _
6836 * @category Chaining
6837 * @returns {string} Returns the string result.
6838 * @example
6839 *
6840 * _([1, 2, 3]).toString();
6841 * // => '1,2,3'
6842 */
6843 function wrapperToString() {
6844 return String(this.__wrapped__);
6845 }
6846
6847 /**
6848 * Extracts the wrapped value.
6849 *
6850 * @name valueOf
6851 * @memberOf _
6852 * @alias value
6853 * @category Chaining
6854 * @returns {*} Returns the wrapped value.
6855 * @example
6856 *
6857 * _([1, 2, 3]).valueOf();
6858 * // => [1, 2, 3]
6859 */
6860 function wrapperValueOf() {
6861 return this.__wrapped__;
6862 }
6863
6864 /*--------------------------------------------------------------------------*/
6865
6866 // add functions that return wrapped values when chaining
6867 lodash.after = after;
6868 lodash.assign = assign;
6869 lodash.at = at;
6870 lodash.bind = bind;
6871 lodash.bindAll = bindAll;
6872 lodash.bindKey = bindKey;
6873 lodash.chain = chain;
6874 lodash.compact = compact;
6875 lodash.compose = compose;
6876 lodash.constant = constant;
6877 lodash.countBy = countBy;
6878 lodash.create = create;
6879 lodash.createCallback = createCallback;
6880 lodash.curry = curry;
6881 lodash.debounce = debounce;
6882 lodash.defaults = defaults;
6883 lodash.defer = defer;
6884 lodash.delay = delay;
6885 lodash.difference = difference;
6886 lodash.filter = filter;
6887 lodash.flatten = flatten;
6888 lodash.forEach = forEach;
6889 lodash.forEachRight = forEachRight;
6890 lodash.forIn = forIn;
6891 lodash.forInRight = forInRight;
6892 lodash.forOwn = forOwn;
6893 lodash.forOwnRight = forOwnRight;
6894 lodash.functions = functions;
6895 lodash.groupBy = groupBy;
6896 lodash.indexBy = indexBy;
6897 lodash.initial = initial;
6898 lodash.intersection = intersection;
6899 lodash.invert = invert;
6900 lodash.invoke = invoke;
6901 lodash.keys = keys;
6902 lodash.map = map;
6903 lodash.mapValues = mapValues;
6904 lodash.max = max;
6905 lodash.memoize = memoize;
6906 lodash.merge = merge;
6907 lodash.min = min;
6908 lodash.omit = omit;
6909 lodash.once = once;
6910 lodash.pairs = pairs;
6911 lodash.partial = partial;
6912 lodash.partialRight = partialRight;
6913 lodash.pick = pick;
6914 lodash.pluck = pluck;
6915 lodash.property = property;
6916 lodash.pull = pull;
6917 lodash.range = range;
6918 lodash.reject = reject;
6919 lodash.remove = remove;
6920 lodash.rest = rest;
6921 lodash.shuffle = shuffle;
6922 lodash.sortBy = sortBy;
6923 lodash.tap = tap;
6924 lodash.throttle = throttle;
6925 lodash.times = times;
6926 lodash.toArray = toArray;
6927 lodash.transform = transform;
6928 lodash.union = union;
6929 lodash.uniq = uniq;
6930 lodash.values = values;
6931 lodash.where = where;
6932 lodash.without = without;
6933 lodash.wrap = wrap;
6934 lodash.xor = xor;
6935 lodash.zip = zip;
6936 lodash.zipObject = zipObject;
6937
6938 // add aliases
6939 lodash.collect = map;
6940 lodash.drop = rest;
6941 lodash.each = forEach;
6942 lodash.eachRight = forEachRight;
6943 lodash.extend = assign;
6944 lodash.methods = functions;
6945 lodash.object = zipObject;
6946 lodash.select = filter;
6947 lodash.tail = rest;
6948 lodash.unique = uniq;
6949 lodash.unzip = zip;
6950
6951 // add functions to `lodash.prototype`
6952 mixin(lodash);
6953
6954 /*--------------------------------------------------------------------------*/
6955
6956 // add functions that return unwrapped values when chaining
6957 lodash.clone = clone;
6958 lodash.cloneDeep = cloneDeep;
6959 lodash.contains = contains;
6960 lodash.escape = escape;
6961 lodash.every = every;
6962 lodash.find = find;
6963 lodash.findIndex = findIndex;
6964 lodash.findKey = findKey;
6965 lodash.findLast = findLast;
6966 lodash.findLastIndex = findLastIndex;
6967 lodash.findLastKey = findLastKey;
6968 lodash.has = has;
6969 lodash.identity = identity;
6970 lodash.indexOf = indexOf;
6971 lodash.isArguments = isArguments;
6972 lodash.isArray = isArray;
6973 lodash.isBoolean = isBoolean;
6974 lodash.isDate = isDate;
6975 lodash.isElement = isElement;
6976 lodash.isEmpty = isEmpty;
6977 lodash.isEqual = isEqual;
6978 lodash.isFinite = isFinite;
6979 lodash.isFunction = isFunction;
6980 lodash.isNaN = isNaN;
6981 lodash.isNull = isNull;
6982 lodash.isNumber = isNumber;
6983 lodash.isObject = isObject;
6984 lodash.isPlainObject = isPlainObject;
6985 lodash.isRegExp = isRegExp;
6986 lodash.isString = isString;
6987 lodash.isUndefined = isUndefined;
6988 lodash.lastIndexOf = lastIndexOf;
6989 lodash.mixin = mixin;
6990 lodash.noConflict = noConflict;
6991 lodash.noop = noop;
6992 lodash.now = now;
6993 lodash.parseInt = parseInt;
6994 lodash.random = random;
6995 lodash.reduce = reduce;
6996 lodash.reduceRight = reduceRight;
6997 lodash.result = result;
6998 lodash.runInContext = runInContext;
6999 lodash.size = size;
7000 lodash.some = some;
7001 lodash.sortedIndex = sortedIndex;
7002 lodash.template = template;
7003 lodash.unescape = unescape;
7004 lodash.uniqueId = uniqueId;
7005
7006 // add aliases
7007 lodash.all = every;
7008 lodash.any = some;
7009 lodash.detect = find;
7010 lodash.findWhere = find;
7011 lodash.foldl = reduce;
7012 lodash.foldr = reduceRight;
7013 lodash.include = contains;
7014 lodash.inject = reduce;
7015
7016 mixin(function() {
7017 var source = {}
7018 forOwn(lodash, function(func, methodName) {
7019 if (!lodash.prototype[methodName]) {
7020 source[methodName] = func;
7021 }
7022 });
7023 return source;
7024 }(), false);
7025
7026 /*--------------------------------------------------------------------------*/
7027
7028 // add functions capable of returning wrapped and unwrapped values when chaining
7029 lodash.first = first;
7030 lodash.last = last;
7031 lodash.sample = sample;
7032
7033 // add aliases
7034 lodash.take = first;
7035 lodash.head = first;
7036
7037 forOwn(lodash, function(func, methodName) {
7038 var callbackable = methodName !== 'sample';
7039 if (!lodash.prototype[methodName]) {
7040 lodash.prototype[methodName]= function(n, guard) {
7041 var chainAll = this.__chain__,
7042 result = func(this.__wrapped__, n, guard);
7043
7044 return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function')))
7045 ? result
7046 : new lodashWrapper(result, chainAll);
7047 };
7048 }
7049 });
7050
7051 /*--------------------------------------------------------------------------*/
7052
7053 /**
7054 * The semantic version number.
7055 *
7056 * @static
7057 * @memberOf _
7058 * @type string
7059 */
7060 lodash.VERSION = '2.4.1';
7061
7062 // add "Chaining" functions to the wrapper
7063 lodash.prototype.chain = wrapperChain;
7064 lodash.prototype.toString = wrapperToString;
7065 lodash.prototype.value = wrapperValueOf;
7066 lodash.prototype.valueOf = wrapperValueOf;
7067
7068 // add `Array` functions that return unwrapped values
7069 baseEach(['join', 'pop', 'shift'], function(methodName) {
7070 var func = arrayRef[methodName];
7071 lodash.prototype[methodName] = function() {
7072 var chainAll = this.__chain__,
7073 result = func.apply(this.__wrapped__, arguments);
7074
7075 return chainAll
7076 ? new lodashWrapper(result, chainAll)
7077 : result;
7078 };
7079 });
7080
7081 // add `Array` functions that return the existing wrapped value
7082 baseEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {
7083 var func = arrayRef[methodName];
7084 lodash.prototype[methodName] = function() {
7085 func.apply(this.__wrapped__, arguments);
7086 return this;
7087 };
7088 });
7089
7090 // add `Array` functions that return new wrapped values
7091 baseEach(['concat', 'slice', 'splice'], function(methodName) {
7092 var func = arrayRef[methodName];
7093 lodash.prototype[methodName] = function() {
7094 return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__);
7095 };
7096 });
7097
7098 // avoid array-like object bugs with `Array#shift` and `Array#splice`
7099 // in IE < 9, Firefox < 10, Narwhal, and RingoJS
7100 if (!support.spliceObjects) {
7101 baseEach(['pop', 'shift', 'splice'], function(methodName) {
7102 var func = arrayRef[methodName],
7103 isSplice = methodName == 'splice';
7104
7105 lodash.prototype[methodName] = function() {
7106 var chainAll = this.__chain__,
7107 value = this.__wrapped__,
7108 result = func.apply(value, arguments);
7109
7110 if (value.length === 0) {
7111 delete value[0];
7112 }
7113 return (chainAll || isSplice)
7114 ? new lodashWrapper(result, chainAll)
7115 : result;
7116 };
7117 });
7118 }
7119
7120 return lodash;
7121 }
7122
7123 /*--------------------------------------------------------------------------*/
7124
7125 // expose Lo-Dash
7126 var _ = runInContext();
7127
7128 // some AMD build optimizers like r.js check for condition patterns like the following:
7129 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
7130 // Expose Lo-Dash to the global object even when an AMD loader is present in
7131 // case Lo-Dash is loaded with a RequireJS shim config.
7132 // See http://requirejs.org/docs/api.html#config-shim
7133 root._ = _;
7134
7135 // define as an anonymous module so, through path mapping, it can be
7136 // referenced as the "underscore" module
7137 define(function() {
7138 return _;
7139 });
7140 }
7141 // check for `exports` after `define` in case a build optimizer adds an `exports` object
7142 else if (freeExports && freeModule) {
7143 // in Node.js or RingoJS
7144 if (moduleExports) {
7145 (freeModule.exports = _)._ = _;
7146 }
7147 // in Narwhal or Rhino -require
7148 else {
7149 freeExports._ = _;
7150 }
7151 }
7152 else {
7153 // in a browser or Rhino
7154 root._ = _;
7155 }
7156 }.call(this));
+0
-2060
docs/_themes/lucuma/static/scripts/magnific-popup.js less more
0 /*! Magnific Popup - v1.0.0 - 2015-01-03
1 * http://dimsemenov.com/plugins/magnific-popup/
2 * Copyright (c) 2015 Dmitry Semenov; */
3 ;(function (factory) {
4 if (typeof define === 'function' && define.amd) {
5 // AMD. Register as an anonymous module.
6 define(['jquery'], factory);
7 } else if (typeof exports === 'object') {
8 // Node/CommonJS
9 factory(require('jquery'));
10 } else {
11 // Browser globals
12 factory(window.jQuery || window.Zepto);
13 }
14 }(function($) {
15
16 /*>>core*/
17 /**
18 *
19 * Magnific Popup Core JS file
20 *
21 */
22
23
24 /**
25 * Private static constants
26 */
27 var CLOSE_EVENT = 'Close',
28 BEFORE_CLOSE_EVENT = 'BeforeClose',
29 AFTER_CLOSE_EVENT = 'AfterClose',
30 BEFORE_APPEND_EVENT = 'BeforeAppend',
31 MARKUP_PARSE_EVENT = 'MarkupParse',
32 OPEN_EVENT = 'Open',
33 CHANGE_EVENT = 'Change',
34 NS = 'mfp',
35 EVENT_NS = '.' + NS,
36 READY_CLASS = 'mfp-ready',
37 REMOVING_CLASS = 'mfp-removing',
38 PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
39
40
41 /**
42 * Private vars
43 */
44 /*jshint -W079 */
45 var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
46 MagnificPopup = function(){},
47 _isJQ = !!(window.jQuery),
48 _prevStatus,
49 _window = $(window),
50 _document,
51 _prevContentType,
52 _wrapClasses,
53 _currPopupType;
54
55
56 /**
57 * Private functions
58 */
59 var _mfpOn = function(name, f) {
60 mfp.ev.on(NS + name + EVENT_NS, f);
61 },
62 _getEl = function(className, appendTo, html, raw) {
63 var el = document.createElement('div');
64 el.className = 'mfp-'+className;
65 if(html) {
66 el.innerHTML = html;
67 }
68 if(!raw) {
69 el = $(el);
70 if(appendTo) {
71 el.appendTo(appendTo);
72 }
73 } else if(appendTo) {
74 appendTo.appendChild(el);
75 }
76 return el;
77 },
78 _mfpTrigger = function(e, data) {
79 mfp.ev.triggerHandler(NS + e, data);
80
81 if(mfp.st.callbacks) {
82 // converts "mfpEventName" to "eventName" callback and triggers it if it's present
83 e = e.charAt(0).toLowerCase() + e.slice(1);
84 if(mfp.st.callbacks[e]) {
85 mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
86 }
87 }
88 },
89 _getCloseBtn = function(type) {
90 if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
91 mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
92 _currPopupType = type;
93 }
94 return mfp.currTemplate.closeBtn;
95 },
96 // Initialize Magnific Popup only when called at least once
97 _checkInstance = function() {
98 if(!$.magnificPopup.instance) {
99 /*jshint -W020 */
100 mfp = new MagnificPopup();
101 mfp.init();
102 $.magnificPopup.instance = mfp;
103 }
104 },
105 // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
106 supportsTransitions = function() {
107 var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
108 v = ['ms','O','Moz','Webkit']; // 'v' for vendor
109
110 if( s['transition'] !== undefined ) {
111 return true;
112 }
113
114 while( v.length ) {
115 if( v.pop() + 'Transition' in s ) {
116 return true;
117 }
118 }
119
120 return false;
121 };
122
123
124
125 /**
126 * Public functions
127 */
128 MagnificPopup.prototype = {
129
130 constructor: MagnificPopup,
131
132 /**
133 * Initializes Magnific Popup plugin.
134 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
135 */
136 init: function() {
137 var appVersion = navigator.appVersion;
138 mfp.isIE7 = appVersion.indexOf("MSIE 7.") !== -1;
139 mfp.isIE8 = appVersion.indexOf("MSIE 8.") !== -1;
140 mfp.isLowIE = mfp.isIE7 || mfp.isIE8;
141 mfp.isAndroid = (/android/gi).test(appVersion);
142 mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
143 mfp.supportsTransition = supportsTransitions();
144
145 // We disable fixed positioned lightbox on devices that don't handle it nicely.
146 // If you know a better way of detecting this - let me know.
147 mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
148 _document = $(document);
149
150 mfp.popupsCache = {};
151 },
152
153 /**
154 * Opens popup
155 * @param data [description]
156 */
157 open: function(data) {
158
159 var i;
160
161 if(data.isObj === false) {
162 // convert jQuery collection to array to avoid conflicts later
163 mfp.items = data.items.toArray();
164
165 mfp.index = 0;
166 var items = data.items,
167 item;
168 for(i = 0; i < items.length; i++) {
169 item = items[i];
170 if(item.parsed) {
171 item = item.el[0];
172 }
173 if(item === data.el[0]) {
174 mfp.index = i;
175 break;
176 }
177 }
178 } else {
179 mfp.items = $.isArray(data.items) ? data.items : [data.items];
180 mfp.index = data.index || 0;
181 }
182
183 // if popup is already opened - we just update the content
184 if(mfp.isOpen) {
185 mfp.updateItemHTML();
186 return;
187 }
188
189 mfp.types = [];
190 _wrapClasses = '';
191 if(data.mainEl && data.mainEl.length) {
192 mfp.ev = data.mainEl.eq(0);
193 } else {
194 mfp.ev = _document;
195 }
196
197 if(data.key) {
198 if(!mfp.popupsCache[data.key]) {
199 mfp.popupsCache[data.key] = {};
200 }
201 mfp.currTemplate = mfp.popupsCache[data.key];
202 } else {
203 mfp.currTemplate = {};
204 }
205
206
207
208 mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data );
209 mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
210
211 if(mfp.st.modal) {
212 mfp.st.closeOnContentClick = false;
213 mfp.st.closeOnBgClick = false;
214 mfp.st.showCloseBtn = false;
215 mfp.st.enableEscapeKey = false;
216 }
217
218
219 // Building markup
220 // main containers are created only once
221 if(!mfp.bgOverlay) {
222
223 // Dark overlay
224 mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
225 mfp.close();
226 });
227
228 mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
229 if(mfp._checkIfClose(e.target)) {
230 mfp.close();
231 }
232 });
233
234 mfp.container = _getEl('container', mfp.wrap);
235 }
236
237 mfp.contentContainer = _getEl('content');
238 if(mfp.st.preloader) {
239 mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
240 }
241
242
243 // Initializing modules
244 var modules = $.magnificPopup.modules;
245 for(i = 0; i < modules.length; i++) {
246 var n = modules[i];
247 n = n.charAt(0).toUpperCase() + n.slice(1);
248 mfp['init'+n].call(mfp);
249 }
250 _mfpTrigger('BeforeOpen');
251
252
253 if(mfp.st.showCloseBtn) {
254 // Close button
255 if(!mfp.st.closeBtnInside) {
256 mfp.wrap.append( _getCloseBtn() );
257 } else {
258 _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
259 values.close_replaceWith = _getCloseBtn(item.type);
260 });
261 _wrapClasses += ' mfp-close-btn-in';
262 }
263 }
264
265 if(mfp.st.alignTop) {
266 _wrapClasses += ' mfp-align-top';
267 }
268
269
270
271 if(mfp.fixedContentPos) {
272 mfp.wrap.css({
273 overflow: mfp.st.overflowY,
274 overflowX: 'hidden',
275 overflowY: mfp.st.overflowY
276 });
277 } else {
278 mfp.wrap.css({
279 top: _window.scrollTop(),
280 position: 'absolute'
281 });
282 }
283 if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
284 mfp.bgOverlay.css({
285 height: _document.height(),
286 position: 'absolute'
287 });
288 }
289
290
291
292 if(mfp.st.enableEscapeKey) {
293 // Close on ESC key
294 _document.on('keyup' + EVENT_NS, function(e) {
295 if(e.keyCode === 27) {
296 mfp.close();
297 }
298 });
299 }
300
301 _window.on('resize' + EVENT_NS, function() {
302 mfp.updateSize();
303 });
304
305
306 if(!mfp.st.closeOnContentClick) {
307 _wrapClasses += ' mfp-auto-cursor';
308 }
309
310 if(_wrapClasses)
311 mfp.wrap.addClass(_wrapClasses);
312
313
314 // this triggers recalculation of layout, so we get it once to not to trigger twice
315 var windowHeight = mfp.wH = _window.height();
316
317
318 var windowStyles = {};
319
320 if( mfp.fixedContentPos ) {
321 if(mfp._hasScrollBar(windowHeight)){
322 var s = mfp._getScrollbarSize();
323 if(s) {
324 windowStyles.marginRight = s;
325 }
326 }
327 }
328
329 if(mfp.fixedContentPos) {
330 if(!mfp.isIE7) {
331 windowStyles.overflow = 'hidden';
332 } else {
333 // ie7 double-scroll bug
334 $('body, html').css('overflow', 'hidden');
335 }
336 }
337
338
339
340 var classesToadd = mfp.st.mainClass;
341 if(mfp.isIE7) {
342 classesToadd += ' mfp-ie7';
343 }
344 if(classesToadd) {
345 mfp._addClassToMFP( classesToadd );
346 }
347
348 // add content
349 mfp.updateItemHTML();
350
351 _mfpTrigger('BuildControls');
352
353 // remove scrollbar, add margin e.t.c
354 $('html').css(windowStyles);
355
356 // add everything to DOM
357 mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
358
359 // Save last focused element
360 mfp._lastFocusedEl = document.activeElement;
361
362 // Wait for next cycle to allow CSS transition
363 setTimeout(function() {
364
365 if(mfp.content) {
366 mfp._addClassToMFP(READY_CLASS);
367 mfp._setFocus();
368 } else {
369 // if content is not defined (not loaded e.t.c) we add class only for BG
370 mfp.bgOverlay.addClass(READY_CLASS);
371 }
372
373 // Trap the focus in popup
374 _document.on('focusin' + EVENT_NS, mfp._onFocusIn);
375
376 }, 16);
377
378 mfp.isOpen = true;
379 mfp.updateSize(windowHeight);
380 _mfpTrigger(OPEN_EVENT);
381
382 return data;
383 },
384
385 /**
386 * Closes the popup
387 */
388 close: function() {
389 if(!mfp.isOpen) return;
390 _mfpTrigger(BEFORE_CLOSE_EVENT);
391
392 mfp.isOpen = false;
393 // for CSS3 animation
394 if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {
395 mfp._addClassToMFP(REMOVING_CLASS);
396 setTimeout(function() {
397 mfp._close();
398 }, mfp.st.removalDelay);
399 } else {
400 mfp._close();
401 }
402 },
403
404 /**
405 * Helper for close() function
406 */
407 _close: function() {
408 _mfpTrigger(CLOSE_EVENT);
409
410 var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
411
412 mfp.bgOverlay.detach();
413 mfp.wrap.detach();
414 mfp.container.empty();
415
416 if(mfp.st.mainClass) {
417 classesToRemove += mfp.st.mainClass + ' ';
418 }
419
420 mfp._removeClassFromMFP(classesToRemove);
421
422 if(mfp.fixedContentPos) {
423 var windowStyles = {marginRight: ''};
424 if(mfp.isIE7) {
425 $('body, html').css('overflow', '');
426 } else {
427 windowStyles.overflow = '';
428 }
429 $('html').css(windowStyles);
430 }
431
432 _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
433 mfp.ev.off(EVENT_NS);
434
435 // clean up DOM elements that aren't removed
436 mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
437 mfp.bgOverlay.attr('class', 'mfp-bg');
438 mfp.container.attr('class', 'mfp-container');
439
440 // remove close button from target element
441 if(mfp.st.showCloseBtn &&
442 (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
443 if(mfp.currTemplate.closeBtn)
444 mfp.currTemplate.closeBtn.detach();
445 }
446
447
448 if(mfp._lastFocusedEl) {
449 $(mfp._lastFocusedEl).focus(); // put tab focus back
450 }
451 mfp.currItem = null;
452 mfp.content = null;
453 mfp.currTemplate = null;
454 mfp.prevHeight = 0;
455
456 _mfpTrigger(AFTER_CLOSE_EVENT);
457 },
458
459 updateSize: function(winHeight) {
460
461 if(mfp.isIOS) {
462 // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
463 var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
464 var height = window.innerHeight * zoomLevel;
465 mfp.wrap.css('height', height);
466 mfp.wH = height;
467 } else {
468 mfp.wH = winHeight || _window.height();
469 }
470 // Fixes #84: popup incorrectly positioned with position:relative on body
471 if(!mfp.fixedContentPos) {
472 mfp.wrap.css('height', mfp.wH);
473 }
474
475 _mfpTrigger('Resize');
476
477 },
478
479 /**
480 * Set content of popup based on current index
481 */
482 updateItemHTML: function() {
483 var item = mfp.items[mfp.index];
484
485 // Detach and perform modifications
486 mfp.contentContainer.detach();
487
488 if(mfp.content)
489 mfp.content.detach();
490
491 if(!item.parsed) {
492 item = mfp.parseEl( mfp.index );
493 }
494
495 var type = item.type;
496
497 _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
498 // BeforeChange event works like so:
499 // _mfpOn('BeforeChange', function(e, prevType, newType) { });
500
501 mfp.currItem = item;
502
503
504
505
506
507 if(!mfp.currTemplate[type]) {
508 var markup = mfp.st[type] ? mfp.st[type].markup : false;
509
510 // allows to modify markup
511 _mfpTrigger('FirstMarkupParse', markup);
512
513 if(markup) {
514 mfp.currTemplate[type] = $(markup);
515 } else {
516 // if there is no markup found we just define that template is parsed
517 mfp.currTemplate[type] = true;
518 }
519 }
520
521 if(_prevContentType && _prevContentType !== item.type) {
522 mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
523 }
524
525 var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
526 mfp.appendContent(newContent, type);
527
528 item.preloaded = true;
529
530 _mfpTrigger(CHANGE_EVENT, item);
531 _prevContentType = item.type;
532
533 // Append container back after its content changed
534 mfp.container.prepend(mfp.contentContainer);
535
536 _mfpTrigger('AfterChange');
537 },
538
539
540 /**
541 * Set HTML content of popup
542 */
543 appendContent: function(newContent, type) {
544 mfp.content = newContent;
545
546 if(newContent) {
547 if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
548 mfp.currTemplate[type] === true) {
549 // if there is no markup, we just append close button element inside
550 if(!mfp.content.find('.mfp-close').length) {
551 mfp.content.append(_getCloseBtn());
552 }
553 } else {
554 mfp.content = newContent;
555 }
556 } else {
557 mfp.content = '';
558 }
559
560 _mfpTrigger(BEFORE_APPEND_EVENT);
561 mfp.container.addClass('mfp-'+type+'-holder');
562
563 mfp.contentContainer.append(mfp.content);
564 },
565
566
567
568
569 /**
570 * Creates Magnific Popup data object based on given data
571 * @param {int} index Index of item to parse
572 */
573 parseEl: function(index) {
574 var item = mfp.items[index],
575 type;
576
577 if(item.tagName) {
578 item = { el: $(item) };
579 } else {
580 type = item.type;
581 item = { data: item, src: item.src };
582 }
583
584 if(item.el) {
585 var types = mfp.types;
586
587 // check for 'mfp-TYPE' class
588 for(var i = 0; i < types.length; i++) {
589 if( item.el.hasClass('mfp-'+types[i]) ) {
590 type = types[i];
591 break;
592 }
593 }
594
595 item.src = item.el.attr('data-mfp-src');
596 if(!item.src) {
597 item.src = item.el.attr('href');
598 }
599 }
600
601 item.type = type || mfp.st.type || 'inline';
602 item.index = index;
603 item.parsed = true;
604 mfp.items[index] = item;
605 _mfpTrigger('ElementParse', item);
606
607 return mfp.items[index];
608 },
609
610
611 /**
612 * Initializes single popup or a group of popups
613 */
614 addGroup: function(el, options) {
615 var eHandler = function(e) {
616 e.mfpEl = this;
617 mfp._openClick(e, el, options);
618 };
619
620 if(!options) {
621 options = {};
622 }
623
624 var eName = 'click.magnificPopup';
625 options.mainEl = el;
626
627 if(options.items) {
628 options.isObj = true;
629 el.off(eName).on(eName, eHandler);
630 } else {
631 options.isObj = false;
632 if(options.delegate) {
633 el.off(eName).on(eName, options.delegate , eHandler);
634 } else {
635 options.items = el;
636 el.off(eName).on(eName, eHandler);
637 }
638 }
639 },
640 _openClick: function(e, el, options) {
641 var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
642
643
644 if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey ) ) {
645 return;
646 }
647
648 var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
649
650 if(disableOn) {
651 if($.isFunction(disableOn)) {
652 if( !disableOn.call(mfp) ) {
653 return true;
654 }
655 } else { // else it's number
656 if( _window.width() < disableOn ) {
657 return true;
658 }
659 }
660 }
661
662 if(e.type) {
663 e.preventDefault();
664
665 // This will prevent popup from closing if element is inside and popup is already opened
666 if(mfp.isOpen) {
667 e.stopPropagation();
668 }
669 }
670
671
672 options.el = $(e.mfpEl);
673 if(options.delegate) {
674 options.items = el.find(options.delegate);
675 }
676 mfp.open(options);
677 },
678
679
680 /**
681 * Updates text on preloader
682 */
683 updateStatus: function(status, text) {
684
685 if(mfp.preloader) {
686 if(_prevStatus !== status) {
687 mfp.container.removeClass('mfp-s-'+_prevStatus);
688 }
689
690 if(!text && status === 'loading') {
691 text = mfp.st.tLoading;
692 }
693
694 var data = {
695 status: status,
696 text: text
697 };
698 // allows to modify status
699 _mfpTrigger('UpdateStatus', data);
700
701 status = data.status;
702 text = data.text;
703
704 mfp.preloader.html(text);
705
706 mfp.preloader.find('a').on('click', function(e) {
707 e.stopImmediatePropagation();
708 });
709
710 mfp.container.addClass('mfp-s-'+status);
711 _prevStatus = status;
712 }
713 },
714
715
716 /*
717 "Private" helpers that aren't private at all
718 */
719 // Check to close popup or not
720 // "target" is an element that was clicked
721 _checkIfClose: function(target) {
722
723 if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
724 return;
725 }
726
727 var closeOnContent = mfp.st.closeOnContentClick;
728 var closeOnBg = mfp.st.closeOnBgClick;
729
730 if(closeOnContent && closeOnBg) {
731 return true;
732 } else {
733
734 // We close the popup if click is on close button or on preloader. Or if there is no content.
735 if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
736 return true;
737 }
738
739 // if click is outside the content
740 if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {
741 if(closeOnBg) {
742 // last check, if the clicked element is in DOM, (in case it's removed onclick)
743 if( $.contains(document, target) ) {
744 return true;
745 }
746 }
747 } else if(closeOnContent) {
748 return true;
749 }
750
751 }
752 return false;
753 },
754 _addClassToMFP: function(cName) {
755 mfp.bgOverlay.addClass(cName);
756 mfp.wrap.addClass(cName);
757 },
758 _removeClassFromMFP: function(cName) {
759 this.bgOverlay.removeClass(cName);
760 mfp.wrap.removeClass(cName);
761 },
762 _hasScrollBar: function(winHeight) {
763 return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
764 },
765 _setFocus: function() {
766 (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
767 },
768 _onFocusIn: function(e) {
769 if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
770 mfp._setFocus();
771 return false;
772 }
773 },
774 _parseMarkup: function(template, values, item) {
775 var arr;
776 if(item.data) {
777 values = $.extend(item.data, values);
778 }
779 _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
780
781 $.each(values, function(key, value) {
782 if(value === undefined || value === false) {
783 return true;
784 }
785 arr = key.split('_');
786 if(arr.length > 1) {
787 var el = template.find(EVENT_NS + '-'+arr[0]);
788
789 if(el.length > 0) {
790 var attr = arr[1];
791 if(attr === 'replaceWith') {
792 if(el[0] !== value[0]) {
793 el.replaceWith(value);
794 }
795 } else if(attr === 'img') {
796 if(el.is('img')) {
797 el.attr('src', value);
798 } else {
799 el.replaceWith( '<img src="'+value+'" class="' + el.attr('class') + '" />' );
800 }
801 } else {
802 el.attr(arr[1], value);
803 }
804 }
805
806 } else {
807 template.find(EVENT_NS + '-'+key).html(value);
808 }
809 });
810 },
811
812 _getScrollbarSize: function() {
813 // thx David
814 if(mfp.scrollbarSize === undefined) {
815 var scrollDiv = document.createElement("div");
816 scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
817 document.body.appendChild(scrollDiv);
818 mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
819 document.body.removeChild(scrollDiv);
820 }
821 return mfp.scrollbarSize;
822 }
823
824 }; /* MagnificPopup core prototype end */
825
826
827
828
829 /**
830 * Public static functions
831 */
832 $.magnificPopup = {
833 instance: null,
834 proto: MagnificPopup.prototype,
835 modules: [],
836
837 open: function(options, index) {
838 _checkInstance();
839
840 if(!options) {
841 options = {};
842 } else {
843 options = $.extend(true, {}, options);
844 }
845
846
847 options.isObj = true;
848 options.index = index || 0;
849 return this.instance.open(options);
850 },
851
852 close: function() {
853 return $.magnificPopup.instance && $.magnificPopup.instance.close();
854 },
855
856 registerModule: function(name, module) {
857 if(module.options) {
858 $.magnificPopup.defaults[name] = module.options;
859 }
860 $.extend(this.proto, module.proto);
861 this.modules.push(name);
862 },
863
864 defaults: {
865
866 // Info about options is in docs:
867 // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
868
869 disableOn: 0,
870
871 key: null,
872
873 midClick: false,
874
875 mainClass: '',
876
877 preloader: true,
878
879 focus: '', // CSS selector of input to focus after popup is opened
880
881 closeOnContentClick: false,
882
883 closeOnBgClick: true,
884
885 closeBtnInside: true,
886
887 showCloseBtn: true,
888
889 enableEscapeKey: true,
890
891 modal: false,
892
893 alignTop: false,
894
895 removalDelay: 0,
896
897 prependTo: null,
898
899 fixedContentPos: 'auto',
900
901 fixedBgPos: 'auto',
902
903 overflowY: 'auto',
904
905 closeMarkup: '<button title="%title%" type="button" class="mfp-close">&times;</button>',
906
907 tClose: 'Close (Esc)',
908
909 tLoading: 'Loading...'
910
911 }
912 };
913
914
915
916 $.fn.magnificPopup = function(options) {
917 _checkInstance();
918
919 var jqEl = $(this);
920
921 // We call some API method of first param is a string
922 if (typeof options === "string" ) {
923
924 if(options === 'open') {
925 var items,
926 itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
927 index = parseInt(arguments[1], 10) || 0;
928
929 if(itemOpts.items) {
930 items = itemOpts.items[index];
931 } else {
932 items = jqEl;
933 if(itemOpts.delegate) {
934 items = items.find(itemOpts.delegate);
935 }
936 items = items.eq( index );
937 }
938 mfp._openClick({mfpEl:items}, jqEl, itemOpts);
939 } else {
940 if(mfp.isOpen)
941 mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
942 }
943
944 } else {
945 // clone options obj
946 options = $.extend(true, {}, options);
947
948 /*
949 * As Zepto doesn't support .data() method for objects
950 * and it works only in normal browsers
951 * we assign "options" object directly to the DOM element. FTW!
952 */
953 if(_isJQ) {
954 jqEl.data('magnificPopup', options);
955 } else {
956 jqEl[0].magnificPopup = options;
957 }
958
959 mfp.addGroup(jqEl, options);
960
961 }
962 return jqEl;
963 };
964
965
966 //Quick benchmark
967 /*
968 var start = performance.now(),
969 i,
970 rounds = 1000;
971
972 for(i = 0; i < rounds; i++) {
973
974 }
975 console.log('Test #1:', performance.now() - start);
976
977 start = performance.now();
978 for(i = 0; i < rounds; i++) {
979
980 }
981 console.log('Test #2:', performance.now() - start);
982 */
983
984
985 /*>>core*/
986
987 /*>>inline*/
988
989 var INLINE_NS = 'inline',
990 _hiddenClass,
991 _inlinePlaceholder,
992 _lastInlineElement,
993 _putInlineElementsBack = function() {
994 if(_lastInlineElement) {
995 _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
996 _lastInlineElement = null;
997 }
998 };
999
1000 $.magnificPopup.registerModule(INLINE_NS, {
1001 options: {
1002 hiddenClass: 'hide', // will be appended with `mfp-` prefix
1003 markup: '',
1004 tNotFound: 'Content not found'
1005 },
1006 proto: {
1007
1008 initInline: function() {
1009 mfp.types.push(INLINE_NS);
1010
1011 _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
1012 _putInlineElementsBack();
1013 });
1014 },
1015
1016 getInline: function(item, template) {
1017
1018 _putInlineElementsBack();
1019
1020 if(item.src) {
1021 var inlineSt = mfp.st.inline,
1022 el = $(item.src);
1023
1024 if(el.length) {
1025
1026 // If target element has parent - we replace it with placeholder and put it back after popup is closed
1027 var parent = el[0].parentNode;
1028 if(parent && parent.tagName) {
1029 if(!_inlinePlaceholder) {
1030 _hiddenClass = inlineSt.hiddenClass;
1031 _inlinePlaceholder = _getEl(_hiddenClass);
1032 _hiddenClass = 'mfp-'+_hiddenClass;
1033 }
1034 // replace target inline element with placeholder
1035 _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
1036 }
1037
1038 mfp.updateStatus('ready');
1039 } else {
1040 mfp.updateStatus('error', inlineSt.tNotFound);
1041 el = $('<div>');
1042 }
1043
1044 item.inlineElement = el;
1045 return el;
1046 }
1047
1048 mfp.updateStatus('ready');
1049 mfp._parseMarkup(template, {}, item);
1050 return template;
1051 }
1052 }
1053 });
1054
1055 /*>>inline*/
1056
1057 /*>>ajax*/
1058 var AJAX_NS = 'ajax',
1059 _ajaxCur,
1060 _removeAjaxCursor = function() {
1061 if(_ajaxCur) {
1062 $(document.body).removeClass(_ajaxCur);
1063 }
1064 },
1065 _destroyAjaxRequest = function() {
1066 _removeAjaxCursor();
1067 if(mfp.req) {
1068 mfp.req.abort();
1069 }
1070 };
1071
1072 $.magnificPopup.registerModule(AJAX_NS, {
1073
1074 options: {
1075 settings: null,
1076 cursor: 'mfp-ajax-cur',
1077 tError: '<a href="%url%">The content</a> could not be loaded.'
1078 },
1079
1080 proto: {
1081 initAjax: function() {
1082 mfp.types.push(AJAX_NS);
1083 _ajaxCur = mfp.st.ajax.cursor;
1084
1085 _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
1086 _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
1087 },
1088 getAjax: function(item) {
1089
1090 if(_ajaxCur) {
1091 $(document.body).addClass(_ajaxCur);
1092 }
1093
1094 mfp.updateStatus('loading');
1095
1096 var opts = $.extend({
1097 url: item.src,
1098 success: function(data, textStatus, jqXHR) {
1099 var temp = {
1100 data:data,
1101 xhr:jqXHR
1102 };
1103
1104 _mfpTrigger('ParseAjax', temp);
1105
1106 mfp.appendContent( $(temp.data), AJAX_NS );
1107
1108 item.finished = true;
1109
1110 _removeAjaxCursor();
1111
1112 mfp._setFocus();
1113
1114 setTimeout(function() {
1115 mfp.wrap.addClass(READY_CLASS);
1116 }, 16);
1117
1118 mfp.updateStatus('ready');
1119
1120 _mfpTrigger('AjaxContentAdded');
1121 },
1122 error: function() {
1123 _removeAjaxCursor();
1124 item.finished = item.loadError = true;
1125 mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
1126 }
1127 }, mfp.st.ajax.settings);
1128
1129 mfp.req = $.ajax(opts);
1130
1131 return '';
1132 }
1133 }
1134 });
1135
1136
1137
1138
1139
1140
1141
1142 /*>>ajax*/
1143
1144 /*>>image*/
1145 var _imgInterval,
1146 _getTitle = function(item) {
1147 if(item.data && item.data.title !== undefined)
1148 return item.data.title;
1149
1150 var src = mfp.st.image.titleSrc;
1151
1152 if(src) {
1153 if($.isFunction(src)) {
1154 return src.call(mfp, item);
1155 } else if(item.el) {
1156 return item.el.attr(src) || '';
1157 }
1158 }
1159 return '';
1160 };
1161
1162 $.magnificPopup.registerModule('image', {
1163
1164 options: {
1165 markup: '<div class="mfp-figure">'+
1166 '<div class="mfp-close"></div>'+
1167 '<figure>'+
1168 '<div class="mfp-img"></div>'+
1169 '<figcaption>'+
1170 '<div class="mfp-bottom-bar">'+
1171 '<div class="mfp-title"></div>'+
1172 '<div class="mfp-counter"></div>'+
1173 '</div>'+
1174 '</figcaption>'+
1175 '</figure>'+
1176 '</div>',
1177 cursor: 'mfp-zoom-out-cur',
1178 titleSrc: 'title',
1179 verticalFit: true,
1180 tError: '<a href="%url%">The image</a> could not be loaded.'
1181 },
1182
1183 proto: {
1184 initImage: function() {
1185 var imgSt = mfp.st.image,
1186 ns = '.image';
1187
1188 mfp.types.push('image');
1189
1190 _mfpOn(OPEN_EVENT+ns, function() {
1191 if(mfp.currItem.type === 'image' && imgSt.cursor) {
1192 $(document.body).addClass(imgSt.cursor);
1193 }
1194 });
1195
1196 _mfpOn(CLOSE_EVENT+ns, function() {
1197 if(imgSt.cursor) {
1198 $(document.body).removeClass(imgSt.cursor);
1199 }
1200 _window.off('resize' + EVENT_NS);
1201 });
1202
1203 _mfpOn('Resize'+ns, mfp.resizeImage);
1204 if(mfp.isLowIE) {
1205 _mfpOn('AfterChange', mfp.resizeImage);
1206 }
1207 },
1208 resizeImage: function() {
1209 var item = mfp.currItem;
1210 if(!item || !item.img) return;
1211
1212 if(mfp.st.image.verticalFit) {
1213 var decr = 0;
1214 // fix box-sizing in ie7/8
1215 if(mfp.isLowIE) {
1216 decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
1217 }
1218 item.img.css('max-height', mfp.wH-decr);
1219 }
1220 },
1221 _onImageHasSize: function(item) {
1222 if(item.img) {
1223
1224 item.hasSize = true;
1225
1226 if(_imgInterval) {
1227 clearInterval(_imgInterval);
1228 }
1229
1230 item.isCheckingImgSize = false;
1231
1232 _mfpTrigger('ImageHasSize', item);
1233
1234 if(item.imgHidden) {
1235 if(mfp.content)
1236 mfp.content.removeClass('mfp-loading');
1237
1238 item.imgHidden = false;
1239 }
1240
1241 }
1242 },
1243
1244 /**
1245 * Function that loops until the image has size to display elements that rely on it asap
1246 */
1247 findImageSize: function(item) {
1248
1249 var counter = 0,
1250 img = item.img[0],
1251 mfpSetInterval = function(delay) {
1252
1253 if(_imgInterval) {
1254 clearInterval(_imgInterval);
1255 }
1256 // decelerating interval that checks for size of an image
1257 _imgInterval = setInterval(function() {
1258 if(img.naturalWidth > 0) {
1259 mfp._onImageHasSize(item);
1260 return;
1261 }
1262
1263 if(counter > 200) {
1264 clearInterval(_imgInterval);
1265 }
1266
1267 counter++;
1268 if(counter === 3) {
1269 mfpSetInterval(10);
1270 } else if(counter === 40) {
1271 mfpSetInterval(50);
1272 } else if(counter === 100) {
1273 mfpSetInterval(500);
1274 }
1275 }, delay);
1276 };
1277
1278 mfpSetInterval(1);
1279 },
1280
1281 getImage: function(item, template) {
1282
1283 var guard = 0,
1284
1285 // image load complete handler
1286 onLoadComplete = function() {
1287 if(item) {
1288 if (item.img[0].complete) {
1289 item.img.off('.mfploader');
1290
1291 if(item === mfp.currItem){
1292 mfp._onImageHasSize(item);
1293
1294 mfp.updateStatus('ready');
1295 }
1296
1297 item.hasSize = true;
1298 item.loaded = true;
1299
1300 _mfpTrigger('ImageLoadComplete');
1301
1302 }
1303 else {
1304 // if image complete check fails 200 times (20 sec), we assume that there was an error.
1305 guard++;
1306 if(guard < 200) {
1307 setTimeout(onLoadComplete,100);
1308 } else {
1309 onLoadError();
1310 }
1311 }
1312 }
1313 },
1314
1315 // image error handler
1316 onLoadError = function() {
1317 if(item) {
1318 item.img.off('.mfploader');
1319 if(item === mfp.currItem){
1320 mfp._onImageHasSize(item);
1321 mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
1322 }
1323
1324 item.hasSize = true;
1325 item.loaded = true;
1326 item.loadError = true;
1327 }
1328 },
1329 imgSt = mfp.st.image;
1330
1331
1332 var el = template.find('.mfp-img');
1333 if(el.length) {
1334 var img = document.createElement('img');
1335 img.className = 'mfp-img';
1336 if(item.el && item.el.find('img').length) {
1337 img.alt = item.el.find('img').attr('alt');
1338 }
1339 item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
1340 img.src = item.src;
1341
1342 // without clone() "error" event is not firing when IMG is replaced by new IMG
1343 // TODO: find a way to avoid such cloning
1344 if(el.is('img')) {
1345 item.img = item.img.clone();
1346 }
1347
1348 img = item.img[0];
1349 if(img.naturalWidth > 0) {
1350 item.hasSize = true;
1351 } else if(!img.width) {
1352 item.hasSize = false;
1353 }
1354 }
1355
1356 mfp._parseMarkup(template, {
1357 title: _getTitle(item),
1358 img_replaceWith: item.img
1359 }, item);
1360
1361 mfp.resizeImage();
1362
1363 if(item.hasSize) {
1364 if(_imgInterval) clearInterval(_imgInterval);
1365
1366 if(item.loadError) {
1367 template.addClass('mfp-loading');
1368 mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
1369 } else {
1370 template.removeClass('mfp-loading');
1371 mfp.updateStatus('ready');
1372 }
1373 return template;
1374 }
1375
1376 mfp.updateStatus('loading');
1377 item.loading = true;
1378
1379 if(!item.hasSize) {
1380 item.imgHidden = true;
1381 template.addClass('mfp-loading');
1382 mfp.findImageSize(item);
1383 }
1384
1385 return template;
1386 }
1387 }
1388 });
1389
1390
1391
1392 /*>>image*/
1393
1394 /*>>zoom*/
1395 var hasMozTransform,
1396 getHasMozTransform = function() {
1397 if(hasMozTransform === undefined) {
1398 hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
1399 }
1400 return hasMozTransform;
1401 };
1402
1403 $.magnificPopup.registerModule('zoom', {
1404
1405 options: {
1406 enabled: false,
1407 easing: 'ease-in-out',
1408 duration: 300,
1409 opener: function(element) {
1410 return element.is('img') ? element : element.find('img');
1411 }
1412 },
1413
1414 proto: {
1415
1416 initZoom: function() {
1417 var zoomSt = mfp.st.zoom,
1418 ns = '.zoom',
1419 image;
1420
1421 if(!zoomSt.enabled || !mfp.supportsTransition) {
1422 return;
1423 }
1424
1425 var duration = zoomSt.duration,
1426 getElToAnimate = function(image) {
1427 var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
1428 transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
1429 cssObj = {
1430 position: 'fixed',
1431 zIndex: 9999,
1432 left: 0,
1433 top: 0,
1434 '-webkit-backface-visibility': 'hidden'
1435 },
1436 t = 'transition';
1437
1438 cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
1439
1440 newImg.css(cssObj);
1441 return newImg;
1442 },
1443 showMainContent = function() {
1444 mfp.content.css('visibility', 'visible');
1445 },
1446 openTimeout,
1447 animatedImg;
1448
1449 _mfpOn('BuildControls'+ns, function() {
1450 if(mfp._allowZoom()) {
1451
1452 clearTimeout(openTimeout);
1453 mfp.content.css('visibility', 'hidden');
1454
1455 // Basically, all code below does is clones existing image, puts in on top of the current one and animated it
1456
1457 image = mfp._getItemToZoom();
1458
1459 if(!image) {
1460 showMainContent();
1461 return;
1462 }
1463
1464 animatedImg = getElToAnimate(image);
1465
1466 animatedImg.css( mfp._getOffset() );
1467
1468 mfp.wrap.append(animatedImg);
1469
1470 openTimeout = setTimeout(function() {
1471 animatedImg.css( mfp._getOffset( true ) );
1472 openTimeout = setTimeout(function() {
1473
1474 showMainContent();
1475
1476 setTimeout(function() {
1477 animatedImg.remove();
1478 image = animatedImg = null;
1479 _mfpTrigger('ZoomAnimationEnded');
1480 }, 16); // avoid blink when switching images
1481
1482 }, duration); // this timeout equals animation duration
1483
1484 }, 16); // by adding this timeout we avoid short glitch at the beginning of animation
1485
1486
1487 // Lots of timeouts...
1488 }
1489 });
1490 _mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
1491 if(mfp._allowZoom()) {
1492
1493 clearTimeout(openTimeout);
1494
1495 mfp.st.removalDelay = duration;
1496
1497 if(!image) {
1498 image = mfp._getItemToZoom();
1499 if(!image) {
1500 return;
1501 }
1502 animatedImg = getElToAnimate(image);
1503 }
1504
1505
1506 animatedImg.css( mfp._getOffset(true) );
1507 mfp.wrap.append(animatedImg);
1508 mfp.content.css('visibility', 'hidden');
1509
1510 setTimeout(function() {
1511 animatedImg.css( mfp._getOffset() );
1512 }, 16);
1513 }
1514
1515 });
1516
1517 _mfpOn(CLOSE_EVENT+ns, function() {
1518 if(mfp._allowZoom()) {
1519 showMainContent();
1520 if(animatedImg) {
1521 animatedImg.remove();
1522 }
1523 image = null;
1524 }
1525 });
1526 },
1527
1528 _allowZoom: function() {
1529 return mfp.currItem.type === 'image';
1530 },
1531
1532 _getItemToZoom: function() {
1533 if(mfp.currItem.hasSize) {
1534 return mfp.currItem.img;
1535 } else {
1536 return false;
1537 }
1538 },
1539
1540 // Get element postion relative to viewport
1541 _getOffset: function(isLarge) {
1542 var el;
1543 if(isLarge) {
1544 el = mfp.currItem.img;
1545 } else {
1546 el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
1547 }
1548
1549 var offset = el.offset();
1550 var paddingTop = parseInt(el.css('padding-top'),10);
1551 var paddingBottom = parseInt(el.css('padding-bottom'),10);
1552 offset.top -= ( $(window).scrollTop() - paddingTop );
1553
1554
1555 /*
1556
1557 Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
1558
1559 */
1560 var obj = {
1561 width: el.width(),
1562 // fix Zepto height+padding issue
1563 height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
1564 };
1565
1566 // I hate to do this, but there is no another option
1567 if( getHasMozTransform() ) {
1568 obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
1569 } else {
1570 obj.left = offset.left;
1571 obj.top = offset.top;
1572 }
1573 return obj;
1574 }
1575
1576 }
1577 });
1578
1579
1580
1581 /*>>zoom*/
1582
1583 /*>>iframe*/
1584
1585 var IFRAME_NS = 'iframe',
1586 _emptyPage = '//about:blank',
1587
1588 _fixIframeBugs = function(isShowing) {
1589 if(mfp.currTemplate[IFRAME_NS]) {
1590 var el = mfp.currTemplate[IFRAME_NS].find('iframe');
1591 if(el.length) {
1592 // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
1593 if(!isShowing) {
1594 el[0].src = _emptyPage;
1595 }
1596
1597 // IE8 black screen bug fix
1598 if(mfp.isIE8) {
1599 el.css('display', isShowing ? 'block' : 'none');
1600 }
1601 }
1602 }
1603 };
1604
1605 $.magnificPopup.registerModule(IFRAME_NS, {
1606
1607 options: {
1608 markup: '<div class="mfp-iframe-scaler">'+
1609 '<div class="mfp-close"></div>'+
1610 '<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
1611 '</div>',
1612
1613 srcAction: 'iframe_src',
1614
1615 // we don't care and support only one default type of URL by default
1616 patterns: {
1617 youtube: {
1618 index: 'youtube.com',
1619 id: 'v=',
1620 src: '//www.youtube.com/embed/%id%?autoplay=1'
1621 },
1622 vimeo: {
1623 index: 'vimeo.com/',
1624 id: '/',
1625 src: '//player.vimeo.com/video/%id%?autoplay=1'
1626 },
1627 gmaps: {
1628 index: '//maps.google.',
1629 src: '%id%&output=embed'
1630 }
1631 }
1632 },
1633
1634 proto: {
1635 initIframe: function() {
1636 mfp.types.push(IFRAME_NS);
1637
1638 _mfpOn('BeforeChange', function(e, prevType, newType) {
1639 if(prevType !== newType) {
1640 if(prevType === IFRAME_NS) {
1641 _fixIframeBugs(); // iframe if removed
1642 } else if(newType === IFRAME_NS) {
1643 _fixIframeBugs(true); // iframe is showing
1644 }
1645 }// else {
1646 // iframe source is switched, don't do anything
1647 //}
1648 });
1649
1650 _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
1651 _fixIframeBugs();
1652 });
1653 },
1654
1655 getIframe: function(item, template) {
1656 var embedSrc = item.src;
1657 var iframeSt = mfp.st.iframe;
1658
1659 $.each(iframeSt.patterns, function() {
1660 if(embedSrc.indexOf( this.index ) > -1) {
1661 if(this.id) {
1662 if(typeof this.id === 'string') {
1663 embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
1664 } else {
1665 embedSrc = this.id.call( this, embedSrc );
1666 }
1667 }
1668 embedSrc = this.src.replace('%id%', embedSrc );
1669 return false; // break;
1670 }
1671 });
1672
1673 var dataObj = {};
1674 if(iframeSt.srcAction) {
1675 dataObj[iframeSt.srcAction] = embedSrc;
1676 }
1677 mfp._parseMarkup(template, dataObj, item);
1678
1679 mfp.updateStatus('ready');
1680
1681 return template;
1682 }
1683 }
1684 });
1685
1686
1687
1688 /*>>iframe*/
1689
1690 /*>>gallery*/
1691 /**
1692 * Get looped index depending on number of slides
1693 */
1694 var _getLoopedId = function(index) {
1695 var numSlides = mfp.items.length;
1696 if(index > numSlides - 1) {
1697 return index - numSlides;
1698 } else if(index < 0) {
1699 return numSlides + index;
1700 }
1701 return index;
1702 },
1703 _replaceCurrTotal = function(text, curr, total) {
1704 return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
1705 };
1706
1707 $.magnificPopup.registerModule('gallery', {
1708
1709 options: {
1710 enabled: false,
1711 arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
1712 preload: [0,2],
1713 navigateByImgClick: true,
1714 arrows: true,
1715
1716 tPrev: 'Previous (Left arrow key)',
1717 tNext: 'Next (Right arrow key)',
1718 tCounter: '%curr% of %total%'
1719 },
1720
1721 proto: {
1722 initGallery: function() {
1723
1724 var gSt = mfp.st.gallery,
1725 ns = '.mfp-gallery',
1726 supportsFastClick = Boolean($.fn.mfpFastClick);
1727
1728 mfp.direction = true; // true - next, false - prev
1729
1730 if(!gSt || !gSt.enabled ) return false;
1731
1732 _wrapClasses += ' mfp-gallery';
1733
1734 _mfpOn(OPEN_EVENT+ns, function() {
1735
1736 if(gSt.navigateByImgClick) {
1737 mfp.wrap.on('click'+ns, '.mfp-img', function() {
1738 if(mfp.items.length > 1) {
1739 mfp.next();
1740 return false;
1741 }
1742 });
1743 }
1744
1745 _document.on('keydown'+ns, function(e) {
1746 if (e.keyCode === 37) {
1747 mfp.prev();
1748 } else if (e.keyCode === 39) {
1749 mfp.next();
1750 }
1751 });
1752 });
1753
1754 _mfpOn('UpdateStatus'+ns, function(e, data) {
1755 if(data.text) {
1756 data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
1757 }
1758 });
1759
1760 _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
1761 var l = mfp.items.length;
1762 values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
1763 });
1764
1765 _mfpOn('BuildControls' + ns, function() {
1766 if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
1767 var markup = gSt.arrowMarkup,
1768 arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
1769 arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
1770
1771 var eName = supportsFastClick ? 'mfpFastClick' : 'click';
1772 arrowLeft[eName](function() {
1773 mfp.prev();
1774 });
1775 arrowRight[eName](function() {
1776 mfp.next();
1777 });
1778
1779 // Polyfill for :before and :after (adds elements with classes mfp-a and mfp-b)
1780 if(mfp.isIE7) {
1781 _getEl('b', arrowLeft[0], false, true);
1782 _getEl('a', arrowLeft[0], false, true);
1783 _getEl('b', arrowRight[0], false, true);
1784 _getEl('a', arrowRight[0], false, true);
1785 }
1786
1787 mfp.container.append(arrowLeft.add(arrowRight));
1788 }
1789 });
1790
1791 _mfpOn(CHANGE_EVENT+ns, function() {
1792 if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
1793
1794 mfp._preloadTimeout = setTimeout(function() {
1795 mfp.preloadNearbyImages();
1796 mfp._preloadTimeout = null;
1797 }, 16);
1798 });
1799
1800
1801 _mfpOn(CLOSE_EVENT+ns, function() {
1802 _document.off(ns);
1803 mfp.wrap.off('click'+ns);
1804
1805 if(mfp.arrowLeft && supportsFastClick) {
1806 mfp.arrowLeft.add(mfp.arrowRight).destroyMfpFastClick();
1807 }
1808 mfp.arrowRight = mfp.arrowLeft = null;
1809 });
1810
1811 },
1812 next: function() {
1813 mfp.direction = true;
1814 mfp.index = _getLoopedId(mfp.index + 1);
1815 mfp.updateItemHTML();
1816 },
1817 prev: function() {
1818 mfp.direction = false;
1819 mfp.index = _getLoopedId(mfp.index - 1);
1820 mfp.updateItemHTML();
1821 },
1822 goTo: function(newIndex) {
1823 mfp.direction = (newIndex >= mfp.index);
1824 mfp.index = newIndex;
1825 mfp.updateItemHTML();
1826 },
1827 preloadNearbyImages: function() {
1828 var p = mfp.st.gallery.preload,
1829 preloadBefore = Math.min(p[0], mfp.items.length),
1830 preloadAfter = Math.min(p[1], mfp.items.length),
1831 i;
1832
1833 for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
1834 mfp._preloadItem(mfp.index+i);
1835 }
1836 for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
1837 mfp._preloadItem(mfp.index-i);
1838 }
1839 },
1840 _preloadItem: function(index) {
1841 index = _getLoopedId(index);
1842
1843 if(mfp.items[index].preloaded) {
1844 return;
1845 }
1846
1847 var item = mfp.items[index];
1848 if(!item.parsed) {
1849 item = mfp.parseEl( index );
1850 }
1851
1852 _mfpTrigger('LazyLoad', item);
1853
1854 if(item.type === 'image') {
1855 item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
1856 item.hasSize = true;
1857 }).on('error.mfploader', function() {
1858 item.hasSize = true;
1859 item.loadError = true;
1860 _mfpTrigger('LazyLoadError', item);
1861 }).attr('src', item.src);
1862 }
1863
1864
1865 item.preloaded = true;
1866 }
1867 }
1868 });
1869
1870 /*
1871 Touch Support that might be implemented some day
1872
1873 addSwipeGesture: function() {
1874 var startX,
1875 moved,
1876 multipleTouches;
1877
1878 return;
1879
1880 var namespace = '.mfp',
1881 addEventNames = function(pref, down, move, up, cancel) {
1882 mfp._tStart = pref + down + namespace;
1883 mfp._tMove = pref + move + namespace;
1884 mfp._tEnd = pref + up + namespace;
1885 mfp._tCancel = pref + cancel + namespace;
1886 };
1887
1888 if(window.navigator.msPointerEnabled) {
1889 addEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');
1890 } else if('ontouchstart' in window) {
1891 addEventNames('touch', 'start', 'move', 'end', 'cancel');
1892 } else {
1893 return;
1894 }
1895 _window.on(mfp._tStart, function(e) {
1896 var oE = e.originalEvent;
1897 multipleTouches = moved = false;
1898 startX = oE.pageX || oE.changedTouches[0].pageX;
1899 }).on(mfp._tMove, function(e) {
1900 if(e.originalEvent.touches.length > 1) {
1901 multipleTouches = e.originalEvent.touches.length;
1902 } else {
1903 //e.preventDefault();
1904 moved = true;
1905 }
1906 }).on(mfp._tEnd + ' ' + mfp._tCancel, function(e) {
1907 if(moved && !multipleTouches) {
1908 var oE = e.originalEvent,
1909 diff = startX - (oE.pageX || oE.changedTouches[0].pageX);
1910
1911 if(diff > 20) {
1912 mfp.next();
1913 } else if(diff < -20) {
1914 mfp.prev();
1915 }
1916 }
1917 });
1918 },
1919 */
1920
1921
1922 /*>>gallery*/
1923
1924 /*>>retina*/
1925
1926 var RETINA_NS = 'retina';
1927
1928 $.magnificPopup.registerModule(RETINA_NS, {
1929 options: {
1930 replaceSrc: function(item) {
1931 return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
1932 },
1933 ratio: 1 // Function or number. Set to 1 to disable.
1934 },
1935 proto: {
1936 initRetina: function() {
1937 if(window.devicePixelRatio > 1) {
1938
1939 var st = mfp.st.retina,
1940 ratio = st.ratio;
1941
1942 ratio = !isNaN(ratio) ? ratio : ratio();
1943
1944 if(ratio > 1) {
1945 _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
1946 item.img.css({
1947 'max-width': item.img[0].naturalWidth / ratio,
1948 'width': '100%'
1949 });
1950 });
1951 _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
1952 item.src = st.replaceSrc(item, ratio);
1953 });
1954 }
1955 }
1956
1957 }
1958 }
1959 });
1960
1961 /*>>retina*/
1962
1963 /*>>fastclick*/
1964 /**
1965 * FastClick event implementation. (removes 300ms delay on touch devices)
1966 * Based on https://developers.google.com/mobile/articles/fast_buttons
1967 *
1968 * You may use it outside the Magnific Popup by calling just:
1969 *
1970 * $('.your-el').mfpFastClick(function() {
1971 * console.log('Clicked!');
1972 * });
1973 *
1974 * To unbind:
1975 * $('.your-el').destroyMfpFastClick();
1976 *
1977 *
1978 * Note that it's a very basic and simple implementation, it blocks ghost click on the same element where it was bound.
1979 * If you need something more advanced, use plugin by FT Labs https://github.com/ftlabs/fastclick
1980 *
1981 */
1982
1983 (function() {
1984 var ghostClickDelay = 1000,
1985 supportsTouch = 'ontouchstart' in window,
1986 unbindTouchMove = function() {
1987 _window.off('touchmove'+ns+' touchend'+ns);
1988 },
1989 eName = 'mfpFastClick',
1990 ns = '.'+eName;
1991
1992
1993 // As Zepto.js doesn't have an easy way to add custom events (like jQuery), so we implement it in this way
1994 $.fn.mfpFastClick = function(callback) {
1995
1996 return $(this).each(function() {
1997
1998 var elem = $(this),
1999 lock;
2000
2001 if( supportsTouch ) {
2002
2003 var timeout,
2004 startX,
2005 startY,
2006 pointerMoved,
2007 point,
2008 numPointers;
2009
2010 elem.on('touchstart' + ns, function(e) {
2011 pointerMoved = false;
2012 numPointers = 1;
2013
2014 point = e.originalEvent ? e.originalEvent.touches[0] : e.touches[0];
2015 startX = point.clientX;
2016 startY = point.clientY;
2017
2018 _window.on('touchmove'+ns, function(e) {
2019 point = e.originalEvent ? e.originalEvent.touches : e.touches;
2020 numPointers = point.length;
2021 point = point[0];
2022 if (Math.abs(point.clientX - startX) > 10 ||
2023 Math.abs(point.clientY - startY) > 10) {
2024 pointerMoved = true;
2025 unbindTouchMove();
2026 }
2027 }).on('touchend'+ns, function(e) {
2028 unbindTouchMove();
2029 if(pointerMoved || numPointers > 1) {
2030 return;
2031 }
2032 lock = true;
2033 e.preventDefault();
2034 clearTimeout(timeout);
2035 timeout = setTimeout(function() {
2036 lock = false;
2037 }, ghostClickDelay);
2038 callback();
2039 });
2040 });
2041
2042 }
2043
2044 elem.on('click' + ns, function() {
2045 if(!lock) {
2046 callback();
2047 }
2048 });
2049 });
2050 };
2051
2052 $.fn.destroyMfpFastClick = function() {
2053 $(this).off('touchstart' + ns + ' click' + ns);
2054 if(supportsTouch) _window.off('touchmove'+ns+' touchend'+ns);
2055 };
2056 })();
2057
2058 /*>>fastclick*/
2059 _checkInstance(); }));
+0
-43
docs/_themes/lucuma/static/scripts/main.js less more
0 function setupDropdowns(e){
1 $(document).on('click', '[data-toggle="dropdown"]', function(e){
2 e.preventDefault();
3 e.stopPropagation();
4 setupDropdown(this);
5 });
6 }
7 setupDropdowns();
8
9 function setupDropdown(dd){
10 var $dd = $(dd);
11 var targetSel = $dd.attr('href');
12 var $target = $(targetSel);
13 if ($target.is(':visible')){
14 $target.slideUp();
15 } else {
16 $target.slideDown();
17 }
18 }
19
20 function setupPopup($section){
21 $section.magnificPopup({
22 delegate: 'a.image-reference',
23 type: 'image',
24 gallery: {
25 enabled: true
26 },
27 zoom: {
28 enabled: true,
29 duration: 300,
30 easing: 'ease-in-out'
31 }
32 });
33 }
34
35 function setupPopups(){
36 // Each section is a separate gallery in this way
37 $('.section a.image-reference').closest('.section').each(function(){
38 var $section = $(this);
39 setupPopup($section);
40 });
41 }
42 setupPopups();
+0
-4
docs/_themes/lucuma/static/scripts/picturefill.min.js less more
0 /*! Picturefill - v2.3.1 - 2015-04-09
1 * http://scottjehl.github.io/picturefill
2 * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */
3 window.matchMedia||(window.matchMedia=function(){"use strict";var a=window.styleMedia||window.media;if(!a){var b=document.createElement("style"),c=document.getElementsByTagName("script")[0],d=null;b.type="text/css",b.id="matchmediajs-test",c.parentNode.insertBefore(b,c),d="getComputedStyle"in window&&window.getComputedStyle(b,null)||b.currentStyle,a={matchMedium:function(a){var c="@media "+a+"{ #matchmediajs-test { width: 1px; } }";return b.styleSheet?b.styleSheet.cssText=c:b.textContent=c,"1px"===d.width}}}return function(b){return{matches:a.matchMedium(b||"all"),media:b||"all"}}}()),function(a,b,c){"use strict";function d(b){"object"==typeof module&&"object"==typeof module.exports?module.exports=b:"function"==typeof define&&define.amd&&define("picturefill",function(){return b}),"object"==typeof a&&(a.picturefill=b)}function e(a){var b,c,d,e,f,i=a||{};b=i.elements||g.getAllElements();for(var j=0,k=b.length;k>j;j++)if(c=b[j],d=c.parentNode,e=void 0,f=void 0,"IMG"===c.nodeName.toUpperCase()&&(c[g.ns]||(c[g.ns]={}),i.reevaluate||!c[g.ns].evaluated)){if(d&&"PICTURE"===d.nodeName.toUpperCase()){if(g.removeVideoShim(d),e=g.getMatch(c,d),e===!1)continue}else e=void 0;(d&&"PICTURE"===d.nodeName.toUpperCase()||!g.sizesSupported&&c.srcset&&h.test(c.srcset))&&g.dodgeSrcset(c),e?(f=g.processSourceSet(e),g.applyBestCandidate(f,c)):(f=g.processSourceSet(c),(void 0===c.srcset||c[g.ns].srcset)&&g.applyBestCandidate(f,c)),c[g.ns].evaluated=!0}}function f(){function c(){clearTimeout(d),d=setTimeout(h,60)}g.initTypeDetects(),e();var d,f=setInterval(function(){return e(),/^loaded|^i|^c/.test(b.readyState)?void clearInterval(f):void 0},250),h=function(){e({reevaluate:!0})};a.addEventListener?a.addEventListener("resize",c,!1):a.attachEvent&&a.attachEvent("onresize",c)}if(a.HTMLPictureElement)return void d(function(){});b.createElement("picture");var g=a.picturefill||{},h=/\s+\+?\d+(e\d+)?w/;g.ns="picturefill",function(){g.srcsetSupported="srcset"in c,g.sizesSupported="sizes"in c,g.curSrcSupported="currentSrc"in c}(),g.trim=function(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")},g.makeUrl=function(){var a=b.createElement("a");return function(b){return a.href=b,a.href}}(),g.restrictsMixedContent=function(){return"https:"===a.location.protocol},g.matchesMedia=function(b){return a.matchMedia&&a.matchMedia(b).matches},g.getDpr=function(){return a.devicePixelRatio||1},g.getWidthFromLength=function(a){var c;if(!a||a.indexOf("%")>-1!=!1||!(parseFloat(a)>0||a.indexOf("calc(")>-1))return!1;a=a.replace("vw","%"),g.lengthEl||(g.lengthEl=b.createElement("div"),g.lengthEl.style.cssText="border:0;display:block;font-size:1em;left:0;margin:0;padding:0;position:absolute;visibility:hidden",g.lengthEl.className="helper-from-picturefill-js"),g.lengthEl.style.width="0px";try{g.lengthEl.style.width=a}catch(d){}return b.body.appendChild(g.lengthEl),c=g.lengthEl.offsetWidth,0>=c&&(c=!1),b.body.removeChild(g.lengthEl),c},g.detectTypeSupport=function(b,c){var d=new a.Image;return d.onerror=function(){g.types[b]=!1,e()},d.onload=function(){g.types[b]=1===d.width,e()},d.src=c,"pending"},g.types=g.types||{},g.initTypeDetects=function(){g.types["image/jpeg"]=!0,g.types["image/gif"]=!0,g.types["image/png"]=!0,g.types["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),g.types["image/webp"]=g.detectTypeSupport("image/webp","data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=")},g.verifyTypeSupport=function(a){var b=a.getAttribute("type");if(null===b||""===b)return!0;var c=g.types[b];return"string"==typeof c&&"pending"!==c?(g.types[b]=g.detectTypeSupport(b,c),"pending"):"function"==typeof c?(c(),"pending"):c},g.parseSize=function(a){var b=/(\([^)]+\))?\s*(.+)/g.exec(a);return{media:b&&b[1],length:b&&b[2]}},g.findWidthFromSourceSize=function(c){for(var d,e=g.trim(c).split(/\s*,\s*/),f=0,h=e.length;h>f;f++){var i=e[f],j=g.parseSize(i),k=j.length,l=j.media;if(k&&(!l||g.matchesMedia(l))&&(d=g.getWidthFromLength(k)))break}return d||Math.max(a.innerWidth||0,b.documentElement.clientWidth)},g.parseSrcset=function(a){for(var b=[];""!==a;){a=a.replace(/^\s+/g,"");var c,d=a.search(/\s/g),e=null;if(-1!==d){c=a.slice(0,d);var f=c.slice(-1);if((","===f||""===c)&&(c=c.replace(/,+$/,""),e=""),a=a.slice(d+1),null===e){var g=a.indexOf(",");-1!==g?(e=a.slice(0,g),a=a.slice(g+1)):(e=a,a="")}}else c=a,a="";(c||e)&&b.push({url:c,descriptor:e})}return b},g.parseDescriptor=function(a,b){var c,d=b||"100vw",e=a&&a.replace(/(^\s+|\s+$)/g,""),f=g.findWidthFromSourceSize(d);if(e)for(var h=e.split(" "),i=h.length-1;i>=0;i--){var j=h[i],k=j&&j.slice(j.length-1);if("h"!==k&&"w"!==k||g.sizesSupported){if("x"===k){var l=j&&parseFloat(j,10);c=l&&!isNaN(l)?l:1}}else c=parseFloat(parseInt(j,10)/f)}return c||1},g.getCandidatesFromSourceSet=function(a,b){for(var c=g.parseSrcset(a),d=[],e=0,f=c.length;f>e;e++){var h=c[e];d.push({url:h.url,resolution:g.parseDescriptor(h.descriptor,b)})}return d},g.dodgeSrcset=function(a){a.srcset&&(a[g.ns].srcset=a.srcset,a.srcset="",a.setAttribute("data-pfsrcset",a[g.ns].srcset))},g.processSourceSet=function(a){var b=a.getAttribute("srcset"),c=a.getAttribute("sizes"),d=[];return"IMG"===a.nodeName.toUpperCase()&&a[g.ns]&&a[g.ns].srcset&&(b=a[g.ns].srcset),b&&(d=g.getCandidatesFromSourceSet(b,c)),d},g.backfaceVisibilityFix=function(a){var b=a.style||{},c="webkitBackfaceVisibility"in b,d=b.zoom;c&&(b.zoom=".999",c=a.offsetWidth,b.zoom=d)},g.setIntrinsicSize=function(){var c={},d=function(a,b,c){b&&a.setAttribute("width",parseInt(b/c,10))};return function(e,f){var h;e[g.ns]&&!a.pfStopIntrinsicSize&&(void 0===e[g.ns].dims&&(e[g.ns].dims=e.getAttribute("width")||e.getAttribute("height")),e[g.ns].dims||(f.url in c?d(e,c[f.url],f.resolution):(h=b.createElement("img"),h.onload=function(){if(c[f.url]=h.width,!c[f.url])try{b.body.appendChild(h),c[f.url]=h.width||h.offsetWidth,b.body.removeChild(h)}catch(a){}e.src===f.url&&d(e,c[f.url],f.resolution),e=null,h.onload=null,h=null},h.src=f.url)))}}(),g.applyBestCandidate=function(a,b){var c,d,e;a.sort(g.ascendingSort),d=a.length,e=a[d-1];for(var f=0;d>f;f++)if(c=a[f],c.resolution>=g.getDpr()){e=c;break}e&&(e.url=g.makeUrl(e.url),b.src!==e.url&&(g.restrictsMixedContent()&&"http:"===e.url.substr(0,"http:".length).toLowerCase()?void 0!==window.console&&console.warn("Blocked mixed content image "+e.url):(b.src=e.url,g.curSrcSupported||(b.currentSrc=b.src),g.backfaceVisibilityFix(b))),g.setIntrinsicSize(b,e))},g.ascendingSort=function(a,b){return a.resolution-b.resolution},g.removeVideoShim=function(a){var b=a.getElementsByTagName("video");if(b.length){for(var c=b[0],d=c.getElementsByTagName("source");d.length;)a.insertBefore(d[0],c);c.parentNode.removeChild(c)}},g.getAllElements=function(){for(var a=[],c=b.getElementsByTagName("img"),d=0,e=c.length;e>d;d++){var f=c[d];("PICTURE"===f.parentNode.nodeName.toUpperCase()||null!==f.getAttribute("srcset")||f[g.ns]&&null!==f[g.ns].srcset)&&a.push(f)}return a},g.getMatch=function(a,b){for(var c,d=b.childNodes,e=0,f=d.length;f>e;e++){var h=d[e];if(1===h.nodeType){if(h===a)return c;if("SOURCE"===h.nodeName.toUpperCase()){null!==h.getAttribute("src")&&void 0!==typeof console&&console.warn("The `src` attribute is invalid on `picture` `source` element; instead, use `srcset`.");var i=h.getAttribute("media");if(h.getAttribute("srcset")&&(!i||g.matchesMedia(i))){var j=g.verifyTypeSupport(h);if(j===!0){c=h;break}if("pending"===j)return!1}}}}return c},f(),e._=g,d(e)}(window,window.document,new window.Image);
+0
-442
docs/_themes/lucuma/static/scripts/searchtools.js_t less more
0 /*
1 * searchtools.js_t
2 * ~~~~~~~~~~~~~~~~
3 *
4 * Sphinx JavaScript utilties for the full-text search.
5 *
6 * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
7 * :license: BSD, see LICENSE for details.
8 *
9 */
10
11 {{ search_language_stemming_code|safe }}
12
13 {% if search_scorer_tool %}
14 {{ search_scorer_tool|safe }}
15 {% else %}
16 /**
17 * Simple result scoring code.
18 */
19 var Scorer = {
20 // Implement the following function to further tweak the score for each result
21 // The function takes a result array [filename, title, anchor, descr, score]
22 // and returns the new score.
23 /*
24 score: function(result) {
25 return result[4];
26 },
27 */
28
29 // query matches the full name of an object
30 objNameMatch: 11,
31 // or matches in the last dotted part of the object name
32 objPartialMatch: 6,
33 // Additive scores depending on the priority of the object
34 objPrio: {0: 15, // used to be importantResults
35 1: 5, // used to be objectResults
36 2: -5}, // used to be unimportantResults
37 // Used when the priority is not in the mapping.
38 objPrioDefault: 0,
39
40 // query found in title
41 title: 15,
42 // query found in terms
43 term: 5
44 };
45 {% endif %}
46
47 /**
48 * Search Module
49 */
50 var Search = {
51
52 _index : null,
53 _queued_query : null,
54 _pulse_status : -1,
55
56 init : function() {
57 var params = $.getQueryParameters();
58 if (params.q) {
59 var query = params.q[0];
60 $('input[name="q"]').val(query);
61 this.performSearch(query);
62 }
63 },
64
65 loadIndex : function(url) {
66 $.ajax({type: "GET", url: url, data: null,
67 dataType: "script", cache: true,
68 complete: function(jqxhr, textstatus) {
69 if (textstatus != "success") {
70 document.getElementById("searchindexloader").src = url;
71 }
72 }});
73 },
74
75 setIndex : function(index) {
76 var q;
77 this._index = index;
78 if ((q = this._queued_query) !== null) {
79 this._queued_query = null;
80 Search.query(q);
81 }
82 },
83
84 hasIndex : function() {
85 return this._index !== null;
86 },
87
88 deferQuery : function(query) {
89 this._queued_query = query;
90 },
91
92 stopPulse : function() {
93 this._pulse_status = 0;
94 },
95
96 startPulse : function() {
97 if (this._pulse_status >= 0)
98 return;
99 function pulse() {
100 var i;
101 Search._pulse_status = (Search._pulse_status + 1) % 4;
102 var dotString = '';
103 for (i = 0; i < Search._pulse_status; i++)
104 dotString += '.';
105 Search.dots.text(dotString);
106 if (Search._pulse_status > -1)
107 window.setTimeout(pulse, 500);
108 }
109 pulse();
110 },
111
112 /**
113 * perform a search for something (or wait until index is loaded)
114 */
115 performSearch : function(query) {
116 // create the required interface elements
117 this.out = $('#search-results');
118 this.title = $('<h2>' + _('searching') + '</h2>').appendTo(this.out);
119 this.dots = $('<span></span>').appendTo(this.title);
120 this.status = $('<p style="display: none"></p>').appendTo(this.out);
121 this.output = $('<ul class="search"/>').appendTo(this.out);
122
123 $('#search-progress').text(_('preparing_search'));
124 this.startPulse();
125
126 // index already loaded, the browser was quick!
127 if (this.hasIndex())
128 this.query(query);
129 else
130 this.deferQuery(query);
131 },
132
133 /**
134 * execute search (requires search index to be loaded)
135 */
136 query : function(query) {
137 var i;
138 var stopwords = {{ search_language_stop_words }};
139
140 // stem the searchterms and add them to the correct list
141 var stemmer = new Stemmer();
142 var searchterms = [];
143 var excluded = [];
144 var hlterms = [];
145 var tmp = query.split(/\s+/);
146 var objectterms = [];
147 for (i = 0; i < tmp.length; i++) {
148 if (tmp[i] !== "") {
149 objectterms.push(tmp[i].toLowerCase());
150 }
151
152 if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
153 tmp[i] === "") {
154 // skip this "word"
155 continue;
156 }
157 // stem the word
158 var word = stemmer.stemWord(tmp[i].toLowerCase());
159 var toAppend;
160 // select the correct list
161 if (word[0] == '-') {
162 toAppend = excluded;
163 word = word.substr(1);
164 }
165 else {
166 toAppend = searchterms;
167 hlterms.push(tmp[i].toLowerCase());
168 }
169 // only add if not already in the list
170 if (!$u.contains(toAppend, word))
171 toAppend.push(word);
172 }
173 var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
174
175 // console.debug('SEARCH: searching for:');
176 // console.info('required: ', searchterms);
177 // console.info('excluded: ', excluded);
178
179 // prepare search
180 var terms = this._index.terms;
181 var titleterms = this._index.titleterms;
182
183 // array of [filename, title, anchor, descr, score]
184 var results = [];
185 $('#search-progress').empty();
186
187 // lookup as object
188 for (i = 0; i < objectterms.length; i++) {
189 var others = [].concat(objectterms.slice(0, i),
190 objectterms.slice(i+1, objectterms.length));
191 results = results.concat(this.performObjectSearch(objectterms[i], others));
192 }
193
194 // lookup as search terms in fulltext
195 results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
196 .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
197
198 // let the scorer override scores with a custom scoring function
199 if (Scorer.score) {
200 for (i = 0; i < results.length; i++)
201 results[i][4] = Scorer.score(results[i]);
202 }
203
204 // now sort the results by score (in opposite order of appearance, since the
205 // display function below uses pop() to retrieve items) and then
206 // alphabetically
207 results.sort(function(a, b) {
208 var left = a[4];
209 var right = b[4];
210 if (left > right) {
211 return 1;
212 } else if (left < right) {
213 return -1;
214 } else {
215 // same score: sort alphabetically
216 left = a[1].toLowerCase();
217 right = b[1].toLowerCase();
218 return (left > right) ? -1 : ((left < right) ? 1 : 0);
219 }
220 });
221
222 // for debugging
223 //Search.lastresults = results.slice(); // a copy
224 //console.info('search results:', Search.lastresults);
225
226 // print the results
227 var resultCount = results.length;
228 function displayNextItem() {
229 // results left, load the summary and display it
230 if (results.length) {
231 var item = results.pop();
232 var listItem = $('<li style="display:none"></li>');
233 if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
234 // dirhtml builder
235 var dirname = item[0] + '/';
236 if (dirname.match(/\/index\/$/)) {
237 dirname = dirname.substring(0, dirname.length-6);
238 } else if (dirname == 'index/') {
239 dirname = '';
240 }
241 listItem.append($('<a/>').attr('href',
242 DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
243 highlightstring + item[2]).html(item[1]));
244 } else {
245 // normal html builders
246 listItem.append($('<a/>').attr('href',
247 item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
248 highlightstring + item[2]).html(item[1]));
249 }
250 if (item[3]) {
251 listItem.append($('<span> (' + item[3] + ')</span>'));
252 Search.output.append(listItem);
253 listItem.slideDown(5, function() {
254 displayNextItem();
255 });
256 } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
257 $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
258 dataType: "text",
259 complete: function(jqxhr, textstatus) {
260 var data = jqxhr.responseText;
261 if (data !== '') {
262 listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
263 }
264 Search.output.append(listItem);
265 listItem.slideDown(5, function() {
266 displayNextItem();
267 });
268 }});
269 } else {
270 // no source available, just display title
271 Search.output.append(listItem);
272 listItem.slideDown(5, function() {
273 displayNextItem();
274 });
275 }
276 }
277 // search finished, update title and status message
278 else {
279 Search.stopPulse();
280 Search.title.text(_('search_results'));
281 if (!resultCount)
282 Search.status.text(_('search_results_no_results'));
283 else
284 Search.status.text(_('search_results found %s').replace('%s', resultCount));
285 Search.status.fadeIn(500);
286 }
287 }
288 displayNextItem();
289 },
290
291 /**
292 * search for object names
293 */
294 performObjectSearch : function(object, otherterms) {
295 var filenames = this._index.filenames;
296 var objects = this._index.objects;
297 var objnames = this._index.objnames;
298 var titles = this._index.titles;
299
300 var i;
301 var results = [];
302
303 for (var prefix in objects) {
304 for (var name in objects[prefix]) {
305 var fullname = (prefix ? prefix + '.' : '') + name;
306 if (fullname.toLowerCase().indexOf(object) > -1) {
307 var score = 0;
308 var parts = fullname.split('.');
309 // check for different match types: exact matches of full name or
310 // "last name" (i.e. last dotted part)
311 if (fullname == object || parts[parts.length - 1] == object) {
312 score += Scorer.objNameMatch;
313 // matches in last name
314 } else if (parts[parts.length - 1].indexOf(object) > -1) {
315 score += Scorer.objPartialMatch;
316 }
317 var match = objects[prefix][name];
318 var objname = objnames[match[1]][2];
319 var title = titles[match[0]];
320 // If more than one term searched for, we require other words to be
321 // found in the name/title/description
322 if (otherterms.length > 0) {
323 var haystack = (prefix + ' ' + name + ' ' +
324 objname + ' ' + title).toLowerCase();
325 var allfound = true;
326 for (i = 0; i < otherterms.length; i++) {
327 if (haystack.indexOf(otherterms[i]) == -1) {
328 allfound = false;
329 break;
330 }
331 }
332 if (!allfound) {
333 continue;
334 }
335 }
336 var descr = objname + ', ' + _('search_result_in') + ' ' + title;
337
338 var anchor = match[3];
339 if (anchor === '')
340 anchor = fullname;
341 else if (anchor == '-')
342 anchor = objnames[match[1]][1] + '-' + fullname;
343 // add custom score for some objects according to scorer
344 if (Scorer.objPrio.hasOwnProperty(match[2])) {
345 score += Scorer.objPrio[match[2]];
346 } else {
347 score += Scorer.objPrioDefault;
348 }
349 results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
350 }
351 }
352 }
353
354 return results;
355 },
356
357 /**
358 * search for full-text terms in the index
359 */
360 performTermsSearch : function(searchterms, excluded, terms, score) {
361 var filenames = this._index.filenames;
362 var titles = this._index.titles;
363
364 var i, j, file, files;
365 var fileMap = {};
366 var results = [];
367
368 // perform the search on the required terms
369 for (i = 0; i < searchterms.length; i++) {
370 var word = searchterms[i];
371 // no match but word was a required one
372 if ((files = terms[word]) === undefined)
373 break;
374 if (files.length === undefined) {
375 files = [files];
376 }
377 // create the mapping
378 for (j = 0; j < files.length; j++) {
379 file = files[j];
380 if (file in fileMap)
381 fileMap[file].push(word);
382 else
383 fileMap[file] = [word];
384 }
385 }
386
387 // now check if the files don't contain excluded terms
388 for (file in fileMap) {
389 var valid = true;
390
391 // check if all requirements are matched
392 if (fileMap[file].length != searchterms.length)
393 continue;
394
395 // ensure that none of the excluded terms is in the search result
396 for (i = 0; i < excluded.length; i++) {
397 if (terms[excluded[i]] == file ||
398 $u.contains(terms[excluded[i]] || [], file)) {
399 valid = false;
400 break;
401 }
402 }
403
404 // if we have still a valid result we can add it to the result list
405 if (valid) {
406 results.push([filenames[file], titles[file], '', null, score]);
407 }
408 }
409 return results;
410 },
411
412 /**
413 * helper function to return a node containing the
414 * search summary for a given text. keywords is a list
415 * of stemmed words, hlwords is the list of normal, unstemmed
416 * words. the first one is used to find the occurance, the
417 * latter for highlighting it.
418 */
419 makeSearchSummary : function(text, keywords, hlwords) {
420 var textLower = text.toLowerCase();
421 var start = 0;
422 $.each(keywords, function() {
423 var i = textLower.indexOf(this.toLowerCase());
424 if (i > -1)
425 start = i;
426 });
427 start = Math.max(start - 120, 0);
428 var excerpt = ((start > 0) ? '...' : '') +
429 $.trim(text.substr(start, 240)) +
430 ((start + 240 - text.length) ? '...' : '');
431 var rv = $('<div class="context"></div>').text(excerpt);
432 $.each(hlwords, function() {
433 rv = rv.highlightText(this, 'highlighted');
434 });
435 return rv;
436 }
437 };
438
439 $(document).ready(function() {
440 Search.init();
441 });
+0
-113
docs/_themes/lucuma/static/styles/button.css less more
0
1 .button {
2 display: inline-block;
3 color: #191919;
4 background: #F5F5F5;
5 border: 1px solid #dcdcdc;
6 border-radius: 1px;
7 font-family: "ProximaNovaRegular", "Helvetica Neue", Helvetica, Arial, sans-serif;
8 font-size: 17px;
9 text-shadow: 0 1px 0 #fff;
10 cursor: pointer;
11 padding: 8px 18px;
12 text-align: center;
13 -webkit-appearance: none;
14 -webkit-box-sizing: border-box;
15 -moz-box-sizing: border-box;
16 box-sizing: border-box;
17 -webkit-user-select: none;
18 -moz-user-select: none;
19 -ms-user-select: none;
20 user-select: none;
21 -webkit-transition: background 0.2s cubic-bezier(0.86, 0, 0.07, 1);
22 -moz-transition: background 0.2s cubic-bezier(0.86, 0, 0.07, 1);
23 transition: background 0.2s cubic-bezier(0.86, 0, 0.07, 1)
24 }
25
26 .button:hover {
27 background: #f0f0f0;
28 color: #191919
29 }
30
31 .button:active {
32 background: #f0f0f0;
33 position: relative;
34 top: 1px;
35 color: #191919;
36 box-shadow: inset 0 0 8px #e1e1e1
37 }
38
39 .button-primary {
40 color: #fff;
41 background: #96BF48;
42 border: 1px solid #8bb43f;
43 text-shadow: 0 1px 0 #80a53a
44 }
45
46 .button-primary:hover {
47 background: #a1c65b;
48 color: #fff
49 }
50
51 .button-primary:active {
52 background: #a1c65b;
53 color: #fff;
54 box-shadow: inset 0 0 8px #80a53a
55 }
56
57 .button-secondary {
58 color: #fff;
59 background: #479CCf;
60 border: 1px solid #3793cb;
61 text-shadow: 0 1px 0 #3188bc
62 }
63
64 .button-secondary:hover {
65 background: #5ba7d4;
66 color: #fff
67 }
68
69 .button-secondary:active {
70 background: #5ba7d4;
71 color: #fff;
72 box-shadow: inset 0 0 8px #3188bc
73 }
74
75 .button-destroy {
76 color: #fff;
77 background: #BA4747;
78 border: 1px solid #ac4141;
79 text-shadow: 0 1px 0 #9d3b3b
80 }
81
82 .button-destroy:hover {
83 background: #c15a5a;
84 color: #fff
85 }
86
87 .button-destroy:active {
88 background: #c15a5a;
89 color: #fff;
90 box-shadow: inset 0 0 8px #9d3b3b
91 }
92
93 .button-small {
94 padding: 3px 15px;
95 font-size: 14px;
96 border-radius: 1px;
97 height: 33px
98 }
99
100 .button-large {
101 font-size: 24px
102 }
103
104 .button-disabled {
105 opacity: 0.65;
106 cursor: default;
107 pointer-events: none
108 }
109
110 .button-block {
111 display: block
112 }
+0
-1566
docs/_themes/lucuma/static/styles/font-awesome.css less more
0 /*!
1 * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
2 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
3 */
4 /* FONT PATH
5 * -------------------------- */
6 @font-face {
7 font-family: 'FontAwesome';
8 src: url('../fonts/fontawesome-webfont.eot?v=4.1.0');
9 src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
10 font-weight: normal;
11 font-style: normal;
12 }
13 .fa {
14 display: inline-block;
15 font-family: FontAwesome;
16 font-style: normal;
17 font-weight: normal;
18 line-height: 1;
19 -webkit-font-smoothing: antialiased;
20 -moz-osx-font-smoothing: grayscale;
21 }
22 /* makes the font 33% larger relative to the icon container */
23 .fa-lg {
24 font-size: 1.33333333em;
25 line-height: 0.75em;
26 vertical-align: -15%;
27 }
28 .fa-2x {
29 font-size: 2em;
30 }
31 .fa-3x {
32 font-size: 3em;
33 }
34 .fa-4x {
35 font-size: 4em;
36 }
37 .fa-5x {
38 font-size: 5em;
39 }
40 .fa-fw {
41 width: 1.28571429em;
42 text-align: center;
43 }
44 .fa-ul {
45 padding-left: 0;
46 margin-left: 2.14285714em;
47 list-style-type: none;
48 }
49 .fa-ul > li {
50 position: relative;
51 }
52 .fa-li {
53 position: absolute;
54 left: -2.14285714em;
55 width: 2.14285714em;
56 top: 0.14285714em;
57 text-align: center;
58 }
59 .fa-li.fa-lg {
60 left: -1.85714286em;
61 }
62 .fa-border {
63 padding: .2em .25em .15em;
64 border: solid 0.08em #eeeeee;
65 border-radius: .1em;
66 }
67 .pull-right {
68 float: right;
69 }
70 .pull-left {
71 float: left;
72 }
73 .fa.pull-left {
74 margin-right: .3em;
75 }
76 .fa.pull-right {
77 margin-left: .3em;
78 }
79 .fa-spin {
80 -webkit-animation: spin 2s infinite linear;
81 -moz-animation: spin 2s infinite linear;
82 -o-animation: spin 2s infinite linear;
83 animation: spin 2s infinite linear;
84 }
85 @-moz-keyframes spin {
86 0% {
87 -moz-transform: rotate(0deg);
88 }
89 100% {
90 -moz-transform: rotate(359deg);
91 }
92 }
93 @-webkit-keyframes spin {
94 0% {
95 -webkit-transform: rotate(0deg);
96 }
97 100% {
98 -webkit-transform: rotate(359deg);
99 }
100 }
101 @-o-keyframes spin {
102 0% {
103 -o-transform: rotate(0deg);
104 }
105 100% {
106 -o-transform: rotate(359deg);
107 }
108 }
109 @keyframes spin {
110 0% {
111 -webkit-transform: rotate(0deg);
112 transform: rotate(0deg);
113 }
114 100% {
115 -webkit-transform: rotate(359deg);
116 transform: rotate(359deg);
117 }
118 }
119 .fa-rotate-90 {
120 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
121 -webkit-transform: rotate(90deg);
122 -moz-transform: rotate(90deg);
123 -ms-transform: rotate(90deg);
124 -o-transform: rotate(90deg);
125 transform: rotate(90deg);
126 }
127 .fa-rotate-180 {
128 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
129 -webkit-transform: rotate(180deg);
130 -moz-transform: rotate(180deg);
131 -ms-transform: rotate(180deg);
132 -o-transform: rotate(180deg);
133 transform: rotate(180deg);
134 }
135 .fa-rotate-270 {
136 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
137 -webkit-transform: rotate(270deg);
138 -moz-transform: rotate(270deg);
139 -ms-transform: rotate(270deg);
140 -o-transform: rotate(270deg);
141 transform: rotate(270deg);
142 }
143 .fa-flip-horizontal {
144 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
145 -webkit-transform: scale(-1, 1);
146 -moz-transform: scale(-1, 1);
147 -ms-transform: scale(-1, 1);
148 -o-transform: scale(-1, 1);
149 transform: scale(-1, 1);
150 }
151 .fa-flip-vertical {
152 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
153 -webkit-transform: scale(1, -1);
154 -moz-transform: scale(1, -1);
155 -ms-transform: scale(1, -1);
156 -o-transform: scale(1, -1);
157 transform: scale(1, -1);
158 }
159 .fa-stack {
160 position: relative;
161 display: inline-block;
162 width: 2em;
163 height: 2em;
164 line-height: 2em;
165 vertical-align: middle;
166 }
167 .fa-stack-1x,
168 .fa-stack-2x {
169 position: absolute;
170 left: 0;
171 width: 100%;
172 text-align: center;
173 }
174 .fa-stack-1x {
175 line-height: inherit;
176 }
177 .fa-stack-2x {
178 font-size: 2em;
179 }
180 .fa-inverse {
181 color: #ffffff;
182 }
183 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
184 readers do not read off random characters that represent icons */
185 .fa-glass:before {
186 content: "\f000";
187 }
188 .fa-music:before {
189 content: "\f001";
190 }
191 .fa-search:before {
192 content: "\f002";
193 }
194 .fa-envelope-o:before {
195 content: "\f003";
196 }
197 .fa-heart:before {
198 content: "\f004";
199 }
200 .fa-star:before {
201 content: "\f005";
202 }
203 .fa-star-o:before {
204 content: "\f006";
205 }
206 .fa-user:before {
207 content: "\f007";
208 }
209 .fa-film:before {
210 content: "\f008";
211 }
212 .fa-th-large:before {
213 content: "\f009";
214 }
215 .fa-th:before {
216 content: "\f00a";
217 }
218 .fa-th-list:before {
219 content: "\f00b";
220 }
221 .fa-check:before {
222 content: "\f00c";
223 }
224 .fa-times:before {
225 content: "\f00d";
226 }
227 .fa-search-plus:before {
228 content: "\f00e";
229 }
230 .fa-search-minus:before {
231 content: "\f010";
232 }
233 .fa-power-off:before {
234 content: "\f011";
235 }
236 .fa-signal:before {
237 content: "\f012";
238 }
239 .fa-gear:before,
240 .fa-cog:before {
241 content: "\f013";
242 }
243 .fa-trash-o:before {
244 content: "\f014";
245 }
246 .fa-home:before {
247 content: "\f015";
248 }
249 .fa-file-o:before {
250 content: "\f016";
251 }
252 .fa-clock-o:before {
253 content: "\f017";
254 }
255 .fa-road:before {
256 content: "\f018";
257 }
258 .fa-download:before {
259 content: "\f019";
260 }
261 .fa-arrow-circle-o-down:before {
262 content: "\f01a";
263 }
264 .fa-arrow-circle-o-up:before {
265 content: "\f01b";
266 }
267 .fa-inbox:before {
268 content: "\f01c";
269 }
270 .fa-play-circle-o:before {
271 content: "\f01d";
272 }
273 .fa-rotate-right:before,
274 .fa-repeat:before {
275 content: "\f01e";
276 }
277 .fa-refresh:before {
278 content: "\f021";
279 }
280 .fa-list-alt:before {
281 content: "\f022";
282 }
283 .fa-lock:before {
284 content: "\f023";
285 }
286 .fa-flag:before {
287 content: "\f024";
288 }
289 .fa-headphones:before {
290 content: "\f025";
291 }
292 .fa-volume-off:before {
293 content: "\f026";
294 }
295 .fa-volume-down:before {
296 content: "\f027";
297 }
298 .fa-volume-up:before {
299 content: "\f028";
300 }
301 .fa-qrcode:before {
302 content: "\f029";
303 }
304 .fa-barcode:before {
305 content: "\f02a";
306 }
307 .fa-tag:before {
308 content: "\f02b";
309 }
310 .fa-tags:before {
311 content: "\f02c";
312 }
313 .fa-book:before {
314 content: "\f02d";
315 }
316 .fa-bookmark:before {
317 content: "\f02e";
318 }
319 .fa-print:before {
320 content: "\f02f";
321 }
322 .fa-camera:before {
323 content: "\f030";
324 }
325 .fa-font:before {
326 content: "\f031";
327 }
328 .fa-bold:before {
329 content: "\f032";
330 }
331 .fa-italic:before {
332 content: "\f033";
333 }
334 .fa-text-height:before {
335 content: "\f034";
336 }
337 .fa-text-width:before {
338 content: "\f035";
339 }
340 .fa-align-left:before {
341 content: "\f036";
342 }
343 .fa-align-center:before {
344 content: "\f037";
345 }
346 .fa-align-right:before {
347 content: "\f038";
348 }
349 .fa-align-justify:before {
350 content: "\f039";
351 }
352 .fa-list:before {
353 content: "\f03a";
354 }
355 .fa-dedent:before,
356 .fa-outdent:before {
357 content: "\f03b";
358 }
359 .fa-indent:before {
360 content: "\f03c";
361 }
362 .fa-video-camera:before {
363 content: "\f03d";
364 }
365 .fa-photo:before,
366 .fa-image:before,
367 .fa-picture-o:before {
368 content: "\f03e";
369 }
370 .fa-pencil:before {
371 content: "\f040";
372 }
373 .fa-map-marker:before {
374 content: "\f041";
375 }
376 .fa-adjust:before {
377 content: "\f042";
378 }
379 .fa-tint:before {
380 content: "\f043";
381 }
382 .fa-edit:before,
383 .fa-pencil-square-o:before {
384 content: "\f044";
385 }
386 .fa-share-square-o:before {
387 content: "\f045";
388 }
389 .fa-check-square-o:before {
390 content: "\f046";
391 }
392 .fa-arrows:before {
393 content: "\f047";
394 }
395 .fa-step-backward:before {
396 content: "\f048";
397 }
398 .fa-fast-backward:before {
399 content: "\f049";
400 }
401 .fa-backward:before {
402 content: "\f04a";
403 }
404 .fa-play:before {
405 content: "\f04b";
406 }
407 .fa-pause:before {
408 content: "\f04c";
409 }
410 .fa-stop:before {
411 content: "\f04d";
412 }
413 .fa-forward:before {
414 content: "\f04e";
415 }
416 .fa-fast-forward:before {
417 content: "\f050";
418 }
419 .fa-step-forward:before {
420 content: "\f051";
421 }
422 .fa-eject:before {
423 content: "\f052";
424 }
425 .fa-chevron-left:before {
426 content: "\f053";
427 }
428 .fa-chevron-right:before {
429 content: "\f054";
430 }
431 .fa-plus-circle:before {
432 content: "\f055";
433 }
434 .fa-minus-circle:before {
435 content: "\f056";
436 }
437 .fa-times-circle:before {
438 content: "\f057";
439 }
440 .fa-check-circle:before {
441 content: "\f058";
442 }
443 .fa-question-circle:before {
444 content: "\f059";
445 }
446 .fa-info-circle:before {
447 content: "\f05a";
448 }
449 .fa-crosshairs:before {
450 content: "\f05b";
451 }
452 .fa-times-circle-o:before {
453 content: "\f05c";
454 }
455 .fa-check-circle-o:before {
456 content: "\f05d";
457 }
458 .fa-ban:before {
459 content: "\f05e";
460 }
461 .fa-arrow-left:before {
462 content: "\f060";
463 }
464 .fa-arrow-right:before {
465 content: "\f061";
466 }
467 .fa-arrow-up:before {
468 content: "\f062";
469 }
470 .fa-arrow-down:before {
471 content: "\f063";
472 }
473 .fa-mail-forward:before,
474 .fa-share:before {
475 content: "\f064";
476 }
477 .fa-expand:before {
478 content: "\f065";
479 }
480 .fa-compress:before {
481 content: "\f066";
482 }
483 .fa-plus:before {
484 content: "\f067";
485 }
486 .fa-minus:before {
487 content: "\f068";
488 }
489 .fa-asterisk:before {
490 content: "\f069";
491 }
492 .fa-exclamation-circle:before {
493 content: "\f06a";
494 }
495 .fa-gift:before {
496 content: "\f06b";
497 }
498 .fa-leaf:before {
499 content: "\f06c";
500 }
501 .fa-fire:before {
502 content: "\f06d";
503 }
504 .fa-eye:before {
505 content: "\f06e";
506 }
507 .fa-eye-slash:before {
508 content: "\f070";
509 }
510 .fa-warning:before,
511 .fa-exclamation-triangle:before {
512 content: "\f071";
513 }
514 .fa-plane:before {
515 content: "\f072";
516 }
517 .fa-calendar:before {
518 content: "\f073";
519 }
520 .fa-random:before {
521 content: "\f074";
522 }
523 .fa-comment:before {
524 content: "\f075";
525 }
526 .fa-magnet:before {
527 content: "\f076";
528 }
529 .fa-chevron-up:before {
530 content: "\f077";
531 }
532 .fa-chevron-down:before {
533 content: "\f078";
534 }
535 .fa-retweet:before {
536 content: "\f079";
537 }
538 .fa-shopping-cart:before {
539 content: "\f07a";
540 }
541 .fa-folder:before {
542 content: "\f07b";
543 }
544 .fa-folder-open:before {
545 content: "\f07c";
546 }
547 .fa-arrows-v:before {
548 content: "\f07d";
549 }
550 .fa-arrows-h:before {
551 content: "\f07e";
552 }
553 .fa-bar-chart-o:before {
554 content: "\f080";
555 }
556 .fa-twitter-square:before {
557 content: "\f081";
558 }
559 .fa-facebook-square:before {
560 content: "\f082";
561 }
562 .fa-camera-retro:before {
563 content: "\f083";
564 }
565 .fa-key:before {
566 content: "\f084";
567 }
568 .fa-gears:before,
569 .fa-cogs:before {
570 content: "\f085";
571 }
572 .fa-comments:before {
573 content: "\f086";
574 }
575 .fa-thumbs-o-up:before {
576 content: "\f087";
577 }
578 .fa-thumbs-o-down:before {
579 content: "\f088";
580 }
581 .fa-star-half:before {
582 content: "\f089";
583 }
584 .fa-heart-o:before {
585 content: "\f08a";
586 }
587 .fa-sign-out:before {
588 content: "\f08b";
589 }
590 .fa-linkedin-square:before {
591 content: "\f08c";
592 }
593 .fa-thumb-tack:before {
594 content: "\f08d";
595 }
596 .fa-external-link:before {
597 content: "\f08e";
598 }
599 .fa-sign-in:before {
600 content: "\f090";
601 }
602 .fa-trophy:before {
603 content: "\f091";
604 }
605 .fa-github-square:before {
606 content: "\f092";
607 }
608 .fa-upload:before {
609 content: "\f093";
610 }
611 .fa-lemon-o:before {
612 content: "\f094";
613 }
614 .fa-phone:before {
615 content: "\f095";
616 }
617 .fa-square-o:before {
618 content: "\f096";
619 }
620 .fa-bookmark-o:before {
621 content: "\f097";
622 }
623 .fa-phone-square:before {
624 content: "\f098";
625 }
626 .fa-twitter:before {
627 content: "\f099";
628 }
629 .fa-facebook:before {
630 content: "\f09a";
631 }
632 .fa-github:before {
633 content: "\f09b";
634 }
635 .fa-unlock:before {
636 content: "\f09c";
637 }
638 .fa-credit-card:before {
639 content: "\f09d";
640 }
641 .fa-rss:before {
642 content: "\f09e";
643 }
644 .fa-hdd-o:before {
645 content: "\f0a0";
646 }
647 .fa-bullhorn:before {
648 content: "\f0a1";
649 }
650 .fa-bell:before {
651 content: "\f0f3";
652 }
653 .fa-certificate:before {
654 content: "\f0a3";
655 }
656 .fa-hand-o-right:before {
657 content: "\f0a4";
658 }
659 .fa-hand-o-left:before {
660 content: "\f0a5";
661 }
662 .fa-hand-o-up:before {
663 content: "\f0a6";
664 }
665 .fa-hand-o-down:before {
666 content: "\f0a7";
667 }
668 .fa-arrow-circle-left:before {
669 content: "\f0a8";
670 }
671 .fa-arrow-circle-right:before {
672 content: "\f0a9";
673 }
674 .fa-arrow-circle-up:before {
675 content: "\f0aa";
676 }
677 .fa-arrow-circle-down:before {
678 content: "\f0ab";
679 }
680 .fa-globe:before {
681 content: "\f0ac";
682 }
683 .fa-wrench:before {
684 content: "\f0ad";
685 }
686 .fa-tasks:before {
687 content: "\f0ae";
688 }
689 .fa-filter:before {
690 content: "\f0b0";
691 }
692 .fa-briefcase:before {
693 content: "\f0b1";
694 }
695 .fa-arrows-alt:before {
696 content: "\f0b2";
697 }
698 .fa-group:before,
699 .fa-users:before {
700 content: "\f0c0";
701 }
702 .fa-chain:before,
703 .fa-link:before {
704 content: "\f0c1";
705 }
706 .fa-cloud:before {
707 content: "\f0c2";
708 }
709 .fa-flask:before {
710 content: "\f0c3";
711 }
712 .fa-cut:before,
713 .fa-scissors:before {
714 content: "\f0c4";
715 }
716 .fa-copy:before,
717 .fa-files-o:before {
718 content: "\f0c5";
719 }
720 .fa-paperclip:before {
721 content: "\f0c6";
722 }
723 .fa-save:before,
724 .fa-floppy-o:before {
725 content: "\f0c7";
726 }
727 .fa-square:before {
728 content: "\f0c8";
729 }
730 .fa-navicon:before,
731 .fa-reorder:before,
732 .fa-bars:before {
733 content: "\f0c9";
734 }
735 .fa-list-ul:before {
736 content: "\f0ca";
737 }
738 .fa-list-ol:before {
739 content: "\f0cb";
740 }
741 .fa-strikethrough:before {
742 content: "\f0cc";
743 }
744 .fa-underline:before {
745 content: "\f0cd";
746 }
747 .fa-table:before {
748 content: "\f0ce";
749 }
750 .fa-magic:before {
751 content: "\f0d0";
752 }
753 .fa-truck:before {
754 content: "\f0d1";
755 }
756 .fa-pinterest:before {
757 content: "\f0d2";
758 }
759 .fa-pinterest-square:before {
760 content: "\f0d3";
761 }
762 .fa-google-plus-square:before {
763 content: "\f0d4";
764 }
765 .fa-google-plus:before {
766 content: "\f0d5";
767 }
768 .fa-money:before {
769 content: "\f0d6";
770 }
771 .fa-caret-down:before {
772 content: "\f0d7";
773 }
774 .fa-caret-up:before {
775 content: "\f0d8";
776 }
777 .fa-caret-left:before {
778 content: "\f0d9";
779 }
780 .fa-caret-right:before {
781 content: "\f0da";
782 }
783 .fa-columns:before {
784 content: "\f0db";
785 }
786 .fa-unsorted:before,
787 .fa-sort:before {
788 content: "\f0dc";
789 }
790 .fa-sort-down:before,
791 .fa-sort-desc:before {
792 content: "\f0dd";
793 }
794 .fa-sort-up:before,
795 .fa-sort-asc:before {
796 content: "\f0de";
797 }
798 .fa-envelope:before {
799 content: "\f0e0";
800 }
801 .fa-linkedin:before {
802 content: "\f0e1";
803 }
804 .fa-rotate-left:before,
805 .fa-undo:before {
806 content: "\f0e2";
807 }
808 .fa-legal:before,
809 .fa-gavel:before {
810 content: "\f0e3";
811 }
812 .fa-dashboard:before,
813 .fa-tachometer:before {
814 content: "\f0e4";
815 }
816 .fa-comment-o:before {
817 content: "\f0e5";
818 }
819 .fa-comments-o:before {
820 content: "\f0e6";
821 }
822 .fa-flash:before,
823 .fa-bolt:before {
824 content: "\f0e7";
825 }
826 .fa-sitemap:before {
827 content: "\f0e8";
828 }
829 .fa-umbrella:before {
830 content: "\f0e9";
831 }
832 .fa-paste:before,
833 .fa-clipboard:before {
834 content: "\f0ea";
835 }
836 .fa-lightbulb-o:before {
837 content: "\f0eb";
838 }
839 .fa-exchange:before {
840 content: "\f0ec";
841 }
842 .fa-cloud-download:before {
843 content: "\f0ed";
844 }
845 .fa-cloud-upload:before {
846 content: "\f0ee";
847 }
848 .fa-user-md:before {
849 content: "\f0f0";
850 }
851 .fa-stethoscope:before {
852 content: "\f0f1";
853 }
854 .fa-suitcase:before {
855 content: "\f0f2";
856 }
857 .fa-bell-o:before {
858 content: "\f0a2";
859 }
860 .fa-coffee:before {
861 content: "\f0f4";
862 }
863 .fa-cutlery:before {
864 content: "\f0f5";
865 }
866 .fa-file-text-o:before {
867 content: "\f0f6";
868 }
869 .fa-building-o:before {
870 content: "\f0f7";
871 }
872 .fa-hospital-o:before {
873 content: "\f0f8";
874 }
875 .fa-ambulance:before {
876 content: "\f0f9";
877 }
878 .fa-medkit:before {
879 content: "\f0fa";
880 }
881 .fa-fighter-jet:before {
882 content: "\f0fb";
883 }
884 .fa-beer:before {
885 content: "\f0fc";
886 }
887 .fa-h-square:before {
888 content: "\f0fd";
889 }
890 .fa-plus-square:before {
891 content: "\f0fe";
892 }
893 .fa-angle-double-left:before {
894 content: "\f100";
895 }
896 .fa-angle-double-right:before {
897 content: "\f101";
898 }
899 .fa-angle-double-up:before {
900 content: "\f102";
901 }
902 .fa-angle-double-down:before {
903 content: "\f103";
904 }
905 .fa-angle-left:before {
906 content: "\f104";
907 }
908 .fa-angle-right:before {
909 content: "\f105";
910 }
911 .fa-angle-up:before {
912 content: "\f106";
913 }
914 .fa-angle-down:before {
915 content: "\f107";
916 }
917 .fa-desktop:before {
918 content: "\f108";
919 }
920 .fa-laptop:before {
921 content: "\f109";
922 }
923 .fa-tablet:before {
924 content: "\f10a";
925 }
926 .fa-mobile-phone:before,
927 .fa-mobile:before {
928 content: "\f10b";
929 }
930 .fa-circle-o:before {
931 content: "\f10c";
932 }
933 .fa-quote-left:before {
934 content: "\f10d";
935 }
936 .fa-quote-right:before {
937 content: "\f10e";
938 }
939 .fa-spinner:before {
940 content: "\f110";
941 }
942 .fa-circle:before {
943 content: "\f111";
944 }
945 .fa-mail-reply:before,
946 .fa-reply:before {
947 content: "\f112";
948 }
949 .fa-github-alt:before {
950 content: "\f113";
951 }
952 .fa-folder-o:before {
953 content: "\f114";
954 }
955 .fa-folder-open-o:before {
956 content: "\f115";
957 }
958 .fa-smile-o:before {
959 content: "\f118";
960 }
961 .fa-frown-o:before {
962 content: "\f119";
963 }
964 .fa-meh-o:before {
965 content: "\f11a";
966 }
967 .fa-gamepad:before {
968 content: "\f11b";
969 }
970 .fa-keyboard-o:before {
971 content: "\f11c";
972 }
973 .fa-flag-o:before {
974 content: "\f11d";
975 }
976 .fa-flag-checkered:before {
977 content: "\f11e";
978 }
979 .fa-terminal:before {
980 content: "\f120";
981 }
982 .fa-code:before {
983 content: "\f121";
984 }
985 .fa-mail-reply-all:before,
986 .fa-reply-all:before {
987 content: "\f122";
988 }
989 .fa-star-half-empty:before,
990 .fa-star-half-full:before,
991 .fa-star-half-o:before {
992 content: "\f123";
993 }
994 .fa-location-arrow:before {
995 content: "\f124";
996 }
997 .fa-crop:before {
998 content: "\f125";
999 }
1000 .fa-code-fork:before {
1001 content: "\f126";
1002 }
1003 .fa-unlink:before,
1004 .fa-chain-broken:before {
1005 content: "\f127";
1006 }
1007 .fa-question:before {
1008 content: "\f128";
1009 }
1010 .fa-info:before {
1011 content: "\f129";
1012 }
1013 .fa-exclamation:before {
1014 content: "\f12a";
1015 }
1016 .fa-superscript:before {
1017 content: "\f12b";
1018 }
1019 .fa-subscript:before {
1020 content: "\f12c";
1021 }
1022 .fa-eraser:before {
1023 content: "\f12d";
1024 }
1025 .fa-puzzle-piece:before {
1026 content: "\f12e";
1027 }
1028 .fa-microphone:before {
1029 content: "\f130";
1030 }
1031 .fa-microphone-slash:before {
1032 content: "\f131";
1033 }
1034 .fa-shield:before {
1035 content: "\f132";
1036 }
1037 .fa-calendar-o:before {
1038 content: "\f133";
1039 }
1040 .fa-fire-extinguisher:before {
1041 content: "\f134";
1042 }
1043 .fa-rocket:before {
1044 content: "\f135";
1045 }
1046 .fa-maxcdn:before {
1047 content: "\f136";
1048 }
1049 .fa-chevron-circle-left:before {
1050 content: "\f137";
1051 }
1052 .fa-chevron-circle-right:before {
1053 content: "\f138";
1054 }
1055 .fa-chevron-circle-up:before {
1056 content: "\f139";
1057 }
1058 .fa-chevron-circle-down:before {
1059 content: "\f13a";
1060 }
1061 .fa-html5:before {
1062 content: "\f13b";
1063 }
1064 .fa-css3:before {
1065 content: "\f13c";
1066 }
1067 .fa-anchor:before {
1068 content: "\f13d";
1069 }
1070 .fa-unlock-alt:before {
1071 content: "\f13e";
1072 }
1073 .fa-bullseye:before {
1074 content: "\f140";
1075 }
1076 .fa-ellipsis-h:before {
1077 content: "\f141";
1078 }
1079 .fa-ellipsis-v:before {
1080 content: "\f142";
1081 }
1082 .fa-rss-square:before {
1083 content: "\f143";
1084 }
1085 .fa-play-circle:before {
1086 content: "\f144";
1087 }
1088 .fa-ticket:before {
1089 content: "\f145";
1090 }
1091 .fa-minus-square:before {
1092 content: "\f146";
1093 }
1094 .fa-minus-square-o:before {
1095 content: "\f147";
1096 }
1097 .fa-level-up:before {
1098 content: "\f148";
1099 }
1100 .fa-level-down:before {
1101 content: "\f149";
1102 }
1103 .fa-check-square:before {
1104 content: "\f14a";
1105 }
1106 .fa-pencil-square:before {
1107 content: "\f14b";
1108 }
1109 .fa-external-link-square:before {
1110 content: "\f14c";
1111 }
1112 .fa-share-square:before {
1113 content: "\f14d";
1114 }
1115 .fa-compass:before {
1116 content: "\f14e";
1117 }
1118 .fa-toggle-down:before,
1119 .fa-caret-square-o-down:before {
1120 content: "\f150";
1121 }
1122 .fa-toggle-up:before,
1123 .fa-caret-square-o-up:before {
1124 content: "\f151";
1125 }
1126 .fa-toggle-right:before,
1127 .fa-caret-square-o-right:before {
1128 content: "\f152";
1129 }
1130 .fa-euro:before,
1131 .fa-eur:before {
1132 content: "\f153";
1133 }
1134 .fa-gbp:before {
1135 content: "\f154";
1136 }
1137 .fa-dollar:before,
1138 .fa-usd:before {
1139 content: "\f155";
1140 }
1141 .fa-rupee:before,
1142 .fa-inr:before {
1143 content: "\f156";
1144 }
1145 .fa-cny:before,
1146 .fa-rmb:before,
1147 .fa-yen:before,
1148 .fa-jpy:before {
1149 content: "\f157";
1150 }
1151 .fa-ruble:before,
1152 .fa-rouble:before,
1153 .fa-rub:before {
1154 content: "\f158";
1155 }
1156 .fa-won:before,
1157 .fa-krw:before {
1158 content: "\f159";
1159 }
1160 .fa-bitcoin:before,
1161 .fa-btc:before {
1162 content: "\f15a";
1163 }
1164 .fa-file:before {
1165 content: "\f15b";
1166 }
1167 .fa-file-text:before {
1168 content: "\f15c";
1169 }
1170 .fa-sort-alpha-asc:before {
1171 content: "\f15d";
1172 }
1173 .fa-sort-alpha-desc:before {
1174 content: "\f15e";
1175 }
1176 .fa-sort-amount-asc:before {
1177 content: "\f160";
1178 }
1179 .fa-sort-amount-desc:before {
1180 content: "\f161";
1181 }
1182 .fa-sort-numeric-asc:before {
1183 content: "\f162";
1184 }
1185 .fa-sort-numeric-desc:before {
1186 content: "\f163";
1187 }
1188 .fa-thumbs-up:before {
1189 content: "\f164";
1190 }
1191 .fa-thumbs-down:before {
1192 content: "\f165";
1193 }
1194 .fa-youtube-square:before {
1195 content: "\f166";
1196 }
1197 .fa-youtube:before {
1198 content: "\f167";
1199 }
1200 .fa-xing:before {
1201 content: "\f168";
1202 }
1203 .fa-xing-square:before {
1204 content: "\f169";
1205 }
1206 .fa-youtube-play:before {
1207 content: "\f16a";
1208 }
1209 .fa-dropbox:before {
1210 content: "\f16b";
1211 }
1212 .fa-stack-overflow:before {
1213 content: "\f16c";
1214 }
1215 .fa-instagram:before {
1216 content: "\f16d";
1217 }
1218 .fa-flickr:before {
1219 content: "\f16e";
1220 }
1221 .fa-adn:before {
1222 content: "\f170";
1223 }
1224 .fa-bitbucket:before {
1225 content: "\f171";
1226 }
1227 .fa-bitbucket-square:before {
1228 content: "\f172";
1229 }
1230 .fa-tumblr:before {
1231 content: "\f173";
1232 }
1233 .fa-tumblr-square:before {
1234 content: "\f174";
1235 }
1236 .fa-long-arrow-down:before {
1237 content: "\f175";
1238 }
1239 .fa-long-arrow-up:before {
1240 content: "\f176";
1241 }
1242 .fa-long-arrow-left:before {
1243 content: "\f177";
1244 }
1245 .fa-long-arrow-right:before {
1246 content: "\f178";
1247 }
1248 .fa-apple:before {
1249 content: "\f179";
1250 }
1251 .fa-windows:before {
1252 content: "\f17a";
1253 }
1254 .fa-android:before {
1255 content: "\f17b";
1256 }
1257 .fa-linux:before {
1258 content: "\f17c";
1259 }
1260 .fa-dribbble:before {
1261 content: "\f17d";
1262 }
1263 .fa-skype:before {
1264 content: "\f17e";
1265 }
1266 .fa-foursquare:before {
1267 content: "\f180";
1268 }
1269 .fa-trello:before {
1270 content: "\f181";
1271 }
1272 .fa-female:before {
1273 content: "\f182";
1274 }
1275 .fa-male:before {
1276 content: "\f183";
1277 }
1278 .fa-gittip:before {
1279 content: "\f184";
1280 }
1281 .fa-sun-o:before {
1282 content: "\f185";
1283 }
1284 .fa-moon-o:before {
1285 content: "\f186";
1286 }
1287 .fa-archive:before {
1288 content: "\f187";
1289 }
1290 .fa-bug:before {
1291 content: "\f188";
1292 }
1293 .fa-vk:before {
1294 content: "\f189";
1295 }
1296 .fa-weibo:before {
1297 content: "\f18a";
1298 }
1299 .fa-renren:before {
1300 content: "\f18b";
1301 }
1302 .fa-pagelines:before {
1303 content: "\f18c";
1304 }
1305 .fa-stack-exchange:before {
1306 content: "\f18d";
1307 }
1308 .fa-arrow-circle-o-right:before {
1309 content: "\f18e";
1310 }
1311 .fa-arrow-circle-o-left:before {
1312 content: "\f190";
1313 }
1314 .fa-toggle-left:before,
1315 .fa-caret-square-o-left:before {
1316 content: "\f191";
1317 }
1318 .fa-dot-circle-o:before {
1319 content: "\f192";
1320 }
1321 .fa-wheelchair:before {
1322 content: "\f193";
1323 }
1324 .fa-vimeo-square:before {
1325 content: "\f194";
1326 }
1327 .fa-turkish-lira:before,
1328 .fa-try:before {
1329 content: "\f195";
1330 }
1331 .fa-plus-square-o:before {
1332 content: "\f196";
1333 }
1334 .fa-space-shuttle:before {
1335 content: "\f197";
1336 }
1337 .fa-slack:before {
1338 content: "\f198";
1339 }
1340 .fa-envelope-square:before {
1341 content: "\f199";
1342 }
1343 .fa-wordpress:before {
1344 content: "\f19a";
1345 }
1346 .fa-openid:before {
1347 content: "\f19b";
1348 }
1349 .fa-institution:before,
1350 .fa-bank:before,
1351 .fa-university:before {
1352 content: "\f19c";
1353 }
1354 .fa-mortar-board:before,
1355 .fa-graduation-cap:before {
1356 content: "\f19d";
1357 }
1358 .fa-yahoo:before {
1359 content: "\f19e";
1360 }
1361 .fa-google:before {
1362 content: "\f1a0";
1363 }
1364 .fa-reddit:before {
1365 content: "\f1a1";
1366 }
1367 .fa-reddit-square:before {
1368 content: "\f1a2";
1369 }
1370 .fa-stumbleupon-circle:before {
1371 content: "\f1a3";
1372 }
1373 .fa-stumbleupon:before {
1374 content: "\f1a4";
1375 }
1376 .fa-delicious:before {
1377 content: "\f1a5";
1378 }
1379 .fa-digg:before {
1380 content: "\f1a6";
1381 }
1382 .fa-pied-piper-square:before,
1383 .fa-pied-piper:before {
1384 content: "\f1a7";
1385 }
1386 .fa-pied-piper-alt:before {
1387 content: "\f1a8";
1388 }
1389 .fa-drupal:before {
1390 content: "\f1a9";
1391 }
1392 .fa-joomla:before {
1393 content: "\f1aa";
1394 }
1395 .fa-language:before {
1396 content: "\f1ab";
1397 }
1398 .fa-fax:before {
1399 content: "\f1ac";
1400 }
1401 .fa-building:before {
1402 content: "\f1ad";
1403 }
1404 .fa-child:before {
1405 content: "\f1ae";
1406 }
1407 .fa-paw:before {
1408 content: "\f1b0";
1409 }
1410 .fa-spoon:before {
1411 content: "\f1b1";
1412 }
1413 .fa-cube:before {
1414 content: "\f1b2";
1415 }
1416 .fa-cubes:before {
1417 content: "\f1b3";
1418 }
1419 .fa-behance:before {
1420 content: "\f1b4";
1421 }
1422 .fa-behance-square:before {
1423 content: "\f1b5";
1424 }
1425 .fa-steam:before {
1426 content: "\f1b6";
1427 }
1428 .fa-steam-square:before {
1429 content: "\f1b7";
1430 }
1431 .fa-recycle:before {
1432 content: "\f1b8";
1433 }
1434 .fa-automobile:before,
1435 .fa-car:before {
1436 content: "\f1b9";
1437 }
1438 .fa-cab:before,
1439 .fa-taxi:before {
1440 content: "\f1ba";
1441 }
1442 .fa-tree:before {
1443 content: "\f1bb";
1444 }
1445 .fa-spotify:before {
1446 content: "\f1bc";
1447 }
1448 .fa-deviantart:before {
1449 content: "\f1bd";
1450 }
1451 .fa-soundcloud:before {
1452 content: "\f1be";
1453 }
1454 .fa-database:before {
1455 content: "\f1c0";
1456 }
1457 .fa-file-pdf-o:before {
1458 content: "\f1c1";
1459 }
1460 .fa-file-word-o:before {
1461 content: "\f1c2";
1462 }
1463 .fa-file-excel-o:before {
1464 content: "\f1c3";
1465 }
1466 .fa-file-powerpoint-o:before {
1467 content: "\f1c4";
1468 }
1469 .fa-file-photo-o:before,
1470 .fa-file-picture-o:before,
1471 .fa-file-image-o:before {
1472 content: "\f1c5";
1473 }
1474 .fa-file-zip-o:before,
1475 .fa-file-archive-o:before {
1476 content: "\f1c6";
1477 }
1478 .fa-file-sound-o:before,
1479 .fa-file-audio-o:before {
1480 content: "\f1c7";
1481 }
1482 .fa-file-movie-o:before,
1483 .fa-file-video-o:before {
1484 content: "\f1c8";
1485 }
1486 .fa-file-code-o:before {
1487 content: "\f1c9";
1488 }
1489 .fa-vine:before {
1490 content: "\f1ca";
1491 }
1492 .fa-codepen:before {
1493 content: "\f1cb";
1494 }
1495 .fa-jsfiddle:before {
1496 content: "\f1cc";
1497 }
1498 .fa-life-bouy:before,
1499 .fa-life-saver:before,
1500 .fa-support:before,
1501 .fa-life-ring:before {
1502 content: "\f1cd";
1503 }
1504 .fa-circle-o-notch:before {
1505 content: "\f1ce";
1506 }
1507 .fa-ra:before,
1508 .fa-rebel:before {
1509 content: "\f1d0";
1510 }
1511 .fa-ge:before,
1512 .fa-empire:before {
1513 content: "\f1d1";
1514 }
1515 .fa-git-square:before {
1516 content: "\f1d2";
1517 }
1518 .fa-git:before {
1519 content: "\f1d3";
1520 }
1521 .fa-hacker-news:before {
1522 content: "\f1d4";
1523 }
1524 .fa-tencent-weibo:before {
1525 content: "\f1d5";
1526 }
1527 .fa-qq:before {
1528 content: "\f1d6";
1529 }
1530 .fa-wechat:before,
1531 .fa-weixin:before {
1532 content: "\f1d7";
1533 }
1534 .fa-send:before,
1535 .fa-paper-plane:before {
1536 content: "\f1d8";
1537 }
1538 .fa-send-o:before,
1539 .fa-paper-plane-o:before {
1540 content: "\f1d9";
1541 }
1542 .fa-history:before {
1543 content: "\f1da";
1544 }
1545 .fa-circle-thin:before {
1546 content: "\f1db";
1547 }
1548 .fa-header:before {
1549 content: "\f1dc";
1550 }
1551 .fa-paragraph:before {
1552 content: "\f1dd";
1553 }
1554 .fa-sliders:before {
1555 content: "\f1de";
1556 }
1557 .fa-share-alt:before {
1558 content: "\f1e0";
1559 }
1560 .fa-share-alt-square:before {
1561 content: "\f1e1";
1562 }
1563 .fa-bomb:before {
1564 content: "\f1e2";
1565 }
+0
-374
docs/_themes/lucuma/static/styles/magnific-popup.css less more
0 /* Magnific Popup CSS */
1 .mfp-bg {
2 top: 0;
3 left: 0;
4 width: 100%;
5 height: 100%;
6 z-index: 1042;
7 overflow: hidden;
8 position: fixed;
9 background: #0b0b0b;
10 opacity: 0.8;
11 filter: alpha(opacity=80); }
12
13 .mfp-wrap {
14 top: 0;
15 left: 0;
16 width: 100%;
17 height: 100%;
18 z-index: 1043;
19 position: fixed;
20 outline: none !important;
21 -webkit-backface-visibility: hidden; }
22
23 .mfp-container {
24 text-align: center;
25 position: absolute;
26 width: 100%;
27 height: 100%;
28 left: 0;
29 top: 0;
30 padding: 0 8px;
31 -webkit-box-sizing: border-box;
32 -moz-box-sizing: border-box;
33 box-sizing: border-box; }
34
35 .mfp-container:before {
36 content: '';
37 display: inline-block;
38 height: 100%;
39 vertical-align: middle; }
40
41 .mfp-align-top .mfp-container:before {
42 display: none; }
43
44 .mfp-content {
45 position: relative;
46 display: inline-block;
47 vertical-align: middle;
48 margin: 0 auto;
49 text-align: left;
50 z-index: 1045; }
51
52 .mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content {
53 width: 100%;
54 cursor: auto; }
55
56 .mfp-ajax-cur {
57 cursor: progress; }
58
59 .mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
60 cursor: -moz-zoom-out;
61 cursor: -webkit-zoom-out;
62 cursor: zoom-out; }
63
64 .mfp-zoom {
65 cursor: pointer;
66 cursor: -webkit-zoom-in;
67 cursor: -moz-zoom-in;
68 cursor: zoom-in; }
69
70 .mfp-auto-cursor .mfp-content {
71 cursor: auto; }
72
73 .mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter {
74 -webkit-user-select: none;
75 -moz-user-select: none;
76 user-select: none; }
77
78 .mfp-loading.mfp-figure {
79 display: none; }
80
81 .mfp-hide {
82 display: none !important; }
83
84 .mfp-preloader {
85 color: #CCC;
86 position: absolute;
87 top: 50%;
88 width: auto;
89 text-align: center;
90 margin-top: -0.8em;
91 left: 8px;
92 right: 8px;
93 z-index: 1044; }
94 .mfp-preloader a {
95 color: #CCC; }
96 .mfp-preloader a:hover {
97 color: #FFF; }
98
99 .mfp-s-ready .mfp-preloader {
100 display: none; }
101
102 .mfp-s-error .mfp-content {
103 display: none; }
104
105 button.mfp-close, button.mfp-arrow {
106 overflow: visible;
107 cursor: pointer;
108 background: transparent;
109 border: 0;
110 -webkit-appearance: none;
111 display: block;
112 outline: none;
113 padding: 0;
114 z-index: 1046;
115 -webkit-box-shadow: none;
116 box-shadow: none; }
117 button::-moz-focus-inner {
118 padding: 0;
119 border: 0; }
120
121 .mfp-close {
122 width: 44px;
123 height: 44px;
124 line-height: 44px;
125 position: absolute;
126 right: 0;
127 top: 0;
128 text-decoration: none;
129 text-align: center;
130 opacity: 0.65;
131 filter: alpha(opacity=65);
132 padding: 0 0 18px 10px;
133 color: #FFF;
134 font-style: normal;
135 font-size: 28px;
136 font-family: Arial, Baskerville, monospace; }
137 .mfp-close:hover, .mfp-close:focus {
138 opacity: 1;
139 filter: alpha(opacity=100); }
140 .mfp-close:active {
141 top: 1px; }
142
143 .mfp-close-btn-in .mfp-close {
144 color: #333; }
145
146 .mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close {
147 color: #FFF;
148 right: -6px;
149 text-align: right;
150 padding-right: 6px;
151 width: 100%; }
152
153 .mfp-counter {
154 position: absolute;
155 top: 0;
156 right: 0;
157 color: #CCC;
158 font-size: 12px;
159 line-height: 18px;
160 white-space: nowrap; }
161
162 .mfp-arrow {
163 position: absolute;
164 opacity: 0.65;
165 filter: alpha(opacity=65);
166 margin: 0;
167 top: 50%;
168 margin-top: -55px;
169 padding: 0;
170 width: 90px;
171 height: 110px;
172 -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
173 .mfp-arrow:active {
174 margin-top: -54px; }
175 .mfp-arrow:hover, .mfp-arrow:focus {
176 opacity: 1;
177 filter: alpha(opacity=100); }
178 .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a {
179 content: '';
180 display: block;
181 width: 0;
182 height: 0;
183 position: absolute;
184 left: 0;
185 top: 0;
186 margin-top: 35px;
187 margin-left: 35px;
188 border: medium inset transparent; }
189 .mfp-arrow:after, .mfp-arrow .mfp-a {
190 border-top-width: 13px;
191 border-bottom-width: 13px;
192 top: 8px; }
193 .mfp-arrow:before, .mfp-arrow .mfp-b {
194 border-top-width: 21px;
195 border-bottom-width: 21px;
196 opacity: 0.7; }
197
198 .mfp-arrow-left {
199 left: 0; }
200 .mfp-arrow-left:after, .mfp-arrow-left .mfp-a {
201 border-right: 17px solid #FFF;
202 margin-left: 31px; }
203 .mfp-arrow-left:before, .mfp-arrow-left .mfp-b {
204 margin-left: 25px;
205 border-right: 27px solid #3F3F3F; }
206
207 .mfp-arrow-right {
208 right: 0; }
209 .mfp-arrow-right:after, .mfp-arrow-right .mfp-a {
210 border-left: 17px solid #FFF;
211 margin-left: 39px; }
212 .mfp-arrow-right:before, .mfp-arrow-right .mfp-b {
213 border-left: 27px solid #3F3F3F; }
214
215 .mfp-iframe-holder {
216 padding-top: 40px;
217 padding-bottom: 40px; }
218 .mfp-iframe-holder .mfp-content {
219 line-height: 0;
220 width: 100%;
221 max-width: 900px; }
222 .mfp-iframe-holder .mfp-close {
223 top: -40px; }
224
225 .mfp-iframe-scaler {
226 width: 100%;
227 height: 0;
228 overflow: hidden;
229 padding-top: 56.25%; }
230 .mfp-iframe-scaler iframe {
231 position: absolute;
232 display: block;
233 top: 0;
234 left: 0;
235 width: 100%;
236 height: 100%;
237 box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
238 background: #000; }
239
240 /* Main image in popup */
241 img.mfp-img {
242 width: auto;
243 max-width: 100%;
244 height: auto;
245 display: block;
246 line-height: 0;
247 -webkit-box-sizing: border-box;
248 -moz-box-sizing: border-box;
249 box-sizing: border-box;
250 padding: 40px 0 40px;
251 margin: 0 auto; }
252
253 /* The shadow behind the image */
254 .mfp-figure {
255 line-height: 0; }
256 .mfp-figure:after {
257 content: '';
258 position: absolute;
259 left: 0;
260 top: 40px;
261 bottom: 40px;
262 display: block;
263 right: 0;
264 width: auto;
265 height: auto;
266 z-index: -1;
267 box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
268 background: #444; }
269 .mfp-figure small {
270 color: #BDBDBD;
271 display: block;
272 font-size: 12px;
273 line-height: 14px; }
274 .mfp-figure figure {
275 margin: 0; }
276
277 .mfp-bottom-bar {
278 margin-top: -36px;
279 position: absolute;
280 top: 100%;
281 left: 0;
282 width: 100%;
283 cursor: auto; }
284
285 .mfp-title {
286 text-align: left;
287 line-height: 18px;
288 color: #F3F3F3;
289 word-wrap: break-word;
290 padding-right: 36px; }
291
292 .mfp-image-holder .mfp-content {
293 max-width: 100%; }
294
295 .mfp-gallery .mfp-image-holder .mfp-figure {
296 cursor: pointer; }
297
298 @media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
299 /**
300 * Remove all paddings around the image on small screen
301 */
302 .mfp-img-mobile .mfp-image-holder {
303 padding-left: 0;
304 padding-right: 0; }
305 .mfp-img-mobile img.mfp-img {
306 padding: 0; }
307 .mfp-img-mobile .mfp-figure:after {
308 top: 0;
309 bottom: 0; }
310 .mfp-img-mobile .mfp-figure small {
311 display: inline;
312 margin-left: 5px; }
313 .mfp-img-mobile .mfp-bottom-bar {
314 background: rgba(0, 0, 0, 0.6);
315 bottom: 0;
316 margin: 0;
317 top: auto;
318 padding: 3px 5px;
319 position: fixed;
320 -webkit-box-sizing: border-box;
321 -moz-box-sizing: border-box;
322 box-sizing: border-box; }
323 .mfp-img-mobile .mfp-bottom-bar:empty {
324 padding: 0; }
325 .mfp-img-mobile .mfp-counter {
326 right: 5px;
327 top: 3px; }
328 .mfp-img-mobile .mfp-close {
329 top: 0;
330 right: 0;
331 width: 35px;
332 height: 35px;
333 line-height: 35px;
334 background: rgba(0, 0, 0, 0.6);
335 position: fixed;
336 text-align: center;
337 padding: 0; }
338 }
339
340 @media all and (max-width: 900px) {
341 .mfp-arrow {
342 -webkit-transform: scale(0.75);
343 transform: scale(0.75); }
344
345 .mfp-arrow-left {
346 -webkit-transform-origin: 0;
347 transform-origin: 0; }
348
349 .mfp-arrow-right {
350 -webkit-transform-origin: 100%;
351 transform-origin: 100%; }
352
353 .mfp-container {
354 padding-left: 6px;
355 padding-right: 6px; }
356 }
357
358 .mfp-ie7 .mfp-img {
359 padding: 0; }
360 .mfp-ie7 .mfp-bottom-bar {
361 width: 600px;
362 left: 50%;
363 margin-left: -300px;
364 margin-top: 5px;
365 padding-bottom: 5px; }
366 .mfp-ie7 .mfp-container {
367 padding: 0; }
368 .mfp-ie7 .mfp-content {
369 padding-top: 44px; }
370 .mfp-ie7 .mfp-close {
371 top: 0;
372 right: 0;
373 padding-top: 0; }
+0
-417
docs/_themes/lucuma/static/styles/main.css less more
0 *, *:before, *:after {
1 -moz-box-sizing: border-box;
2 -webkit-box-sizing: border-box;
3 box-sizing: border-box;
4 outline: none;
5 }
6
7 html,
8 body {
9 height: 100%;
10 min-width: 312px;
11 background-color: #ffffff;
12 }
13
14 .wrapper {
15 margin: 0 auto;
16 max-width: 900px;
17 padding: 0 14px;
18 position: relative;
19 }
20
21 .wrapper .section p {
22 overflow-x: hidden;
23 }
24
25 a img {
26 border: none;
27 }
28
29 input,
30 button,
31 select,
32 textarea {
33 font-family: inherit;
34 font-size: inherit;
35 line-height: inherit;
36 }
37
38 .clearfix:before,
39 .clearfix:after,
40 .nav:before,
41 .nav:after,
42 .pager:before,
43 .pager:after {
44 content: " ";
45 display: table;
46 }
47
48 .clearfix:after,
49 .nav:after,
50 .pager:after {
51 clear: both;
52 }
53
54 .pull-right {
55 float: right !important;
56 }
57
58 .pull-left {
59 float: left !important;
60 }
61
62 .hide {
63 display: none !important;
64 }
65
66 .show {
67 display: block !important;
68 }
69
70 .invisible {
71 visibility: hidden;
72 }
73
74 .hidden {
75 display: none !important;
76 visibility: hidden !important;
77 }
78
79 label {
80 font-weight: bold;
81 }
82
83 fieldset {
84 padding: 20px;
85 margin: 0 0 20px 0;
86 border: 1px solid #ccc;
87 }
88
89 legend {
90 font-weight: bold;
91 font-size: 17px;
92 }
93
94 input.text,
95 input.title,
96 textarea,
97 select {
98 margin: 7px 0;
99 border: 1px solid #bbb;
100 }
101
102 table {
103 margin: 0 0 20px;
104 border: 2px solid #CCC;
105 background: #FFF;
106 border-collapse: collapse;
107 }
108
109 table th,
110 table td {
111 padding: 4px 14px;
112 border: 1px solid #CCC;
113 border-collapse: collapse;
114 }
115
116 table th {
117 border-bottom: 2px solid #CCC;
118 background: #EEE;
119 font-weight: bold;
120 padding: 7px 14px;
121 }
122
123 img {
124 max-width: 100%;
125 }
126
127 header {
128 padding: 20px 0 10px;
129 /*border-bottom: 1px solid #ddd;*/
130 margin-bottom: 10px;
131 }
132
133 header h1 {
134 float: left;
135 /*background: url(../images/authocode-logo.png) no-repeat;*/
136 /*text-indent: -9999em;*/
137 height: 100%;
138 margin: 0;
139 padding: 0;
140 line-height: 1.2;
141 color: black;
142 }
143
144 header h1 a,
145 header h1 a:hover,
146 header h1 a:visited {
147 color: #aaa;
148 display: block;
149 font-size: 18px;
150 line-height: 40px;
151 padding: 10px 0;
152 text-align: left;
153 text-decoration: none;
154 font-family: ProximaNovaLight;
155 }
156 header h1 a:hover {
157 color: #222;
158 }
159
160 header h1 a small {
161 font-size: smaller;
162 display: block;
163 font-size: 20px;
164 }
165
166 header .nav {
167 float: right;
168 list-style-type: none;
169 margin: 0;
170 padding: 0;
171 }
172
173 header .nav li {
174 display: inline-block;
175 position: relative;
176 }
177
178 header .nav .nav-item {
179 color: #444;
180 text-decoration: none;
181 padding: 10px;
182 display: block;
183 }
184
185 header .nav .nav-item .fa {
186 font-size: 18px;
187 }
188
189 header .nav .search-form {
190 display: inline-block;
191 padding: 10px;
192 }
193
194 header .nav .search-form input {
195 color: #444;
196 border-radius: 4px;
197 border: 1px solid #aaa;
198 width: 220px;
199 padding: 2px 40px 2px 2px;
200 -moz-transition: width 0.5s;
201 -webkit-transition: width 0.5s;
202 transition: width 0.5s;
203 }
204
205 @media (min-width: 580px) {
206 header .nav .search-form input:focus {
207 width: 340px;
208 }
209 }
210
211 header .nav .search-form button {
212 color: #444;
213 background-position: center center;
214 background-repeat: no-repeat;
215 width: 40px;
216 background-color: transparent;
217 border: none;
218 margin-left: -44px;
219 }
220
221 header h1.logo a,
222 header h1.logo a:hover,
223 header h1.logo a:visited {
224 background-color: transparent;
225 color: #444;
226 font-family: Arial, sans-serif;
227 display: block;
228 font-size: 14px;
229 font-weight: bold;
230 line-height: 40px;
231 padding-left: 0;
232 text-align: left;
233 text-decoration: none;
234 }
235 header h1.logo a:hover {
236 color: #111;
237 }
238 header h1.logo a img {
239 max-height: 32px;
240 vertical-align: middle;
241 }
242 }
243
244 #main {
245 padding-top: 20px;
246 }
247
248 #toc {
249 float: right;
250 width: 270px;
251 padding: 10px 20px;
252 border: 1px solid #ddd;
253 background-color: white;
254 margin: 0 0 40px 40px;
255 font-size: 13px;
256 clear: right;
257 }
258
259 #toc h3 {
260 font-size: 15px;
261 margin: 5px 0 15px;
262 padding: 0;
263 }
264
265 #toc ul {
266 margin: 5px 0 16px 8px;
267 padding: 0;
268 }
269
270 #toc > ul {
271 margin-left: 0
272 }
273
274 #toc ul li {
275 padding: 0;
276 margin: 0;
277 list-style-type: none;
278 font-size: 13px;
279 font-weight: normal;
280 }
281
282 #toc ul li ul {
283 margin: 5px 0 5px 8px;
284 }
285
286 #toc ul li ul li {
287 list-style-type: square;
288 list-style-position: outside;
289 margin-left: 10px;
290 }
291
292 #toc ul li a {
293 padding: 7px 0 4px 0;
294 display: inline-block;
295 text-decoration: none;
296 }
297
298 #toc ul li.current {
299 border-top: 1px solid #eee;
300 border-bottom: 1px solid #eee;
301 padding: 14px 20px;
302 margin: 10px -20px;
303 background: #f0f0f0;
304 box-shadow: #aaa 1px 1px 8px;
305 }
306
307 @media (max-width: 767px) {
308 #toc {
309 display: none;
310 float: none;
311 width: 100%;
312 margin: -30px 0 0;
313 }
314 }
315
316 @media (min-width: 768px) {
317 #toc {
318 display: block !important;
319 }
320 }
321
322 @media (min-width: 1080px) {
323 #toc {
324 margin-right: -90px;
325 width: 280px;
326 }
327 }
328
329 footer {
330 color: #666;
331 font-size: 12px;
332 padding: 0;
333 margin: 40px 0 0 0;
334 }
335
336 footer nav {
337 padding: 15px 0;
338 border-top: 1px solid #ddd;
339 border-bottom: 1px solid #ddd;
340 }
341
342 footer nav p {
343 margin: 10px 0;
344 }
345
346 footer .credits {
347 padding: 15px 0;
348 }
349
350 footer .credits p {
351 margin: 5px 0;
352 }
353
354 footer a,
355 footer a:visited,
356 footer a:link {
357 padding: 1px;
358 color: #333;
359 }
360
361 footer a:hover {
362 color: #000;
363 }
364
365 #sponsored_by {
366 text-align: center;
367 margin: 20px 0px;
368 }
369
370 #sponsored_by img {
371 vertical-align: -7px;
372 margin: 0 7px;
373 }
374
375 .figure {
376 margin: 20px 0 30px;
377 border: none;
378 }
379
380 .figure a.image-reference {
381 text-decoration: none;
382 border: none;
383 }
384
385 .caption {
386 font-style: italic;
387 font-size: small;
388 color: #444;
389 padding: 10px;
390 margin: 5px;
391 }
392
393 body.search #searchbox {
394 display: none !important;
395 }
396
397 #searchbox-body input {
398 padding: 8px 4px;
399 border-radius: 4px;
400 font-size: 15px;
401 width: 80%;
402 }
403
404 .highlight-link {
405 position: absolute;
406 top: 44px;
407 left: 10px;
408 font-size: 13px;
409 }
410
411 #search-progress {
412 font-size: 12px;
413 display: block;
414 color: #999;
415 padding: 7px 2px!important;
416 }
+0
-427
docs/_themes/lucuma/static/styles/normalize.css less more
0 /*! normalize.css v3.0.1 | MIT License | git.io/normalize */
1
2 /**
3 * 1. Set default font family to sans-serif.
4 * 2. Prevent iOS text size adjust after orientation change, without disabling
5 * user zoom.
6 */
7
8 html {
9 font-family: sans-serif; /* 1 */
10 -ms-text-size-adjust: 100%; /* 2 */
11 -webkit-text-size-adjust: 100%; /* 2 */
12 }
13
14 /**
15 * Remove default margin.
16 */
17
18 body {
19 margin: 0;
20 }
21
22 /* HTML5 display definitions
23 ========================================================================== */
24
25 /**
26 * Correct `block` display not defined for any HTML5 element in IE 8/9.
27 * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
28 * Correct `block` display not defined for `main` in IE 11.
29 */
30
31 article,
32 aside,
33 details,
34 figcaption,
35 figure,
36 footer,
37 header,
38 hgroup,
39 main,
40 nav,
41 section,
42 summary {
43 display: block;
44 }
45
46 /**
47 * 1. Correct `inline-block` display not defined in IE 8/9.
48 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
49 */
50
51 audio,
52 canvas,
53 progress,
54 video {
55 display: inline-block; /* 1 */
56 vertical-align: baseline; /* 2 */
57 }
58
59 /**
60 * Prevent modern browsers from displaying `audio` without controls.
61 * Remove excess height in iOS 5 devices.
62 */
63
64 audio:not([controls]) {
65 display: none;
66 height: 0;
67 }
68
69 /**
70 * Address `[hidden]` styling not present in IE 8/9/10.
71 * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
72 */
73
74 [hidden],
75 template {
76 display: none;
77 }
78
79 /* Links
80 ========================================================================== */
81
82 /**
83 * Remove the gray background color from active links in IE 10.
84 */
85
86 a {
87 background: transparent;
88 }
89
90 /**
91 * Improve readability when focused and also mouse hovered in all browsers.
92 */
93
94 a:active,
95 a:hover {
96 outline: 0;
97 }
98
99 /* Text-level semantics
100 ========================================================================== */
101
102 /**
103 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
104 */
105
106 abbr[title] {
107 border-bottom: 1px dotted;
108 }
109
110 /**
111 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
112 */
113
114 b,
115 strong {
116 font-weight: bold;
117 }
118
119 /**
120 * Address styling not present in Safari and Chrome.
121 */
122
123 dfn {
124 font-style: italic;
125 }
126
127 /**
128 * Address variable `h1` font-size and margin within `section` and `article`
129 * contexts in Firefox 4+, Safari, and Chrome.
130 */
131
132 h1 {
133 font-size: 2em;
134 margin: 0.67em 0;
135 }
136
137 /**
138 * Address styling not present in IE 8/9.
139 */
140
141 mark {
142 background: #ff0;
143 color: #000;
144 }
145
146 /**
147 * Address inconsistent and variable font size in all browsers.
148 */
149
150 small {
151 font-size: 80%;
152 }
153
154 /**
155 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
156 */
157
158 sub,
159 sup {
160 font-size: 75%;
161 line-height: 0;
162 position: relative;
163 vertical-align: baseline;
164 }
165
166 sup {
167 top: -0.5em;
168 }
169
170 sub {
171 bottom: -0.25em;
172 }
173
174 /* Embedded content
175 ========================================================================== */
176
177 /**
178 * Remove border when inside `a` element in IE 8/9/10.
179 */
180
181 img {
182 border: 0;
183 }
184
185 /**
186 * Correct overflow not hidden in IE 9/10/11.
187 */
188
189 svg:not(:root) {
190 overflow: hidden;
191 }
192
193 /* Grouping content
194 ========================================================================== */
195
196 /**
197 * Address margin not present in IE 8/9 and Safari.
198 */
199
200 figure {
201 margin: 1em 40px;
202 }
203
204 /**
205 * Address differences between Firefox and other browsers.
206 */
207
208 hr {
209 -moz-box-sizing: content-box;
210 box-sizing: content-box;
211 height: 0;
212 }
213
214 /**
215 * Contain overflow in all browsers.
216 */
217
218 pre {
219 overflow: auto;
220 }
221
222 /**
223 * Address odd `em`-unit font size rendering in all browsers.
224 */
225
226 code,
227 kbd,
228 pre,
229 samp {
230 font-family: monospace, monospace;
231 font-size: 1em;
232 }
233
234 /* Forms
235 ========================================================================== */
236
237 /**
238 * Known limitation: by default, Chrome and Safari on OS X allow very limited
239 * styling of `select`, unless a `border` property is set.
240 */
241
242 /**
243 * 1. Correct color not being inherited.
244 * Known issue: affects color of disabled elements.
245 * 2. Correct font properties not being inherited.
246 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
247 */
248
249 button,
250 input,
251 optgroup,
252 select,
253 textarea {
254 color: inherit; /* 1 */
255 font: inherit; /* 2 */
256 margin: 0; /* 3 */
257 }
258
259 /**
260 * Address `overflow` set to `hidden` in IE 8/9/10/11.
261 */
262
263 button {
264 overflow: visible;
265 }
266
267 /**
268 * Address inconsistent `text-transform` inheritance for `button` and `select`.
269 * All other form control elements do not inherit `text-transform` values.
270 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
271 * Correct `select` style inheritance in Firefox.
272 */
273
274 button,
275 select {
276 text-transform: none;
277 }
278
279 /**
280 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
281 * and `video` controls.
282 * 2. Correct inability to style clickable `input` types in iOS.
283 * 3. Improve usability and consistency of cursor style between image-type
284 * `input` and others.
285 */
286
287 button,
288 html input[type="button"], /* 1 */
289 input[type="reset"],
290 input[type="submit"] {
291 -webkit-appearance: button; /* 2 */
292 cursor: pointer; /* 3 */
293 }
294
295 /**
296 * Re-set default cursor for disabled elements.
297 */
298
299 button[disabled],
300 html input[disabled] {
301 cursor: default;
302 }
303
304 /**
305 * Remove inner padding and border in Firefox 4+.
306 */
307
308 button::-moz-focus-inner,
309 input::-moz-focus-inner {
310 border: 0;
311 padding: 0;
312 }
313
314 /**
315 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
316 * the UA stylesheet.
317 */
318
319 input {
320 line-height: normal;
321 }
322
323 /**
324 * It's recommended that you don't attempt to style these elements.
325 * Firefox's implementation doesn't respect box-sizing, padding, or width.
326 *
327 * 1. Address box sizing set to `content-box` in IE 8/9/10.
328 * 2. Remove excess padding in IE 8/9/10.
329 */
330
331 input[type="checkbox"],
332 input[type="radio"] {
333 box-sizing: border-box; /* 1 */
334 padding: 0; /* 2 */
335 }
336
337 /**
338 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
339 * `font-size` values of the `input`, it causes the cursor style of the
340 * decrement button to change from `default` to `text`.
341 */
342
343 input[type="number"]::-webkit-inner-spin-button,
344 input[type="number"]::-webkit-outer-spin-button {
345 height: auto;
346 }
347
348 /**
349 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
350 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
351 * (include `-moz` to future-proof).
352 */
353
354 input[type="search"] {
355 -webkit-appearance: textfield; /* 1 */
356 -moz-box-sizing: content-box;
357 -webkit-box-sizing: content-box; /* 2 */
358 box-sizing: content-box;
359 }
360
361 /**
362 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
363 * Safari (but not Chrome) clips the cancel button when the search input has
364 * padding (and `textfield` appearance).
365 */
366
367 input[type="search"]::-webkit-search-cancel-button,
368 input[type="search"]::-webkit-search-decoration {
369 -webkit-appearance: none;
370 }
371
372 /**
373 * Define consistent border, margin, and padding.
374 */
375
376 fieldset {
377 border: 1px solid #c0c0c0;
378 margin: 0 2px;
379 padding: 0.35em 0.625em 0.75em;
380 }
381
382 /**
383 * 1. Correct `color` not being inherited in IE 8/9/10/11.
384 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
385 */
386
387 legend {
388 border: 0; /* 1 */
389 padding: 0; /* 2 */
390 }
391
392 /**
393 * Remove default vertical scrollbar in IE 8/9/10/11.
394 */
395
396 textarea {
397 overflow: auto;
398 }
399
400 /**
401 * Don't inherit the `font-weight` (applied by a rule above).
402 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
403 */
404
405 optgroup {
406 font-weight: bold;
407 }
408
409 /* Tables
410 ========================================================================== */
411
412 /**
413 * Remove most spacing between table cells.
414 */
415
416 table {
417 border-collapse: collapse;
418 border-spacing: 0;
419 border: none;
420 }
421
422 td,
423 th {
424 padding: 0;
425 border: none;
426 }
+0
-19
docs/_themes/lucuma/static/styles/print.css less more
0 @media print {
1
2 header .nav,
3 #toc {
4 display: none;
5 }
6
7 body {
8 font-size: 14px;
9 }
10 blockquote {
11 font-size: 15px;
12 }
13 .admonition, .note, .warning {
14 font-size: 14px;
15 page-break-inside:avoid;
16 }
17
18 }
+0
-126
docs/_themes/lucuma/static/styles/pygments.css less more
0 /* */
1 pre .hll { background-color: #ffffcc }
2 pre { background: #f0f0f0; }
3 pre .c { color: #60a0b0; font-style: italic } /* Comment */
4 pre .err { border: 1px solid #FF0000 } /* Error */
5 pre .k { color: #007020; font-weight: bold } /* Keyword */
6 pre .o { color: #666666 } /* Operator */
7 pre .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
8 pre .cp { color: #007020 } /* Comment.Preproc */
9 pre .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
10 pre .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
11 pre .gd { color: #A00000 } /* Generic.Deleted */
12 pre .ge { font-style: italic } /* Generic.Emph */
13 pre .gr { color: #FF0000 } /* Generic.Error */
14 pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */
15 pre .gi { color: #00A000 } /* Generic.Inserted */
16 pre .go { color: #888888 } /* Generic.Output */
17 pre .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
18 pre .gs { font-weight: bold } /* Generic.Strong */
19 pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
20 pre .gt { color: #0044DD } /* Generic.Traceback */
21 pre .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
22 pre .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
23 pre .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
24 pre .kp { color: #007020 } /* Keyword.Pseudo */
25 pre .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
26 pre .kt { color: #902000 } /* Keyword.Type */
27 pre .m { color: #40a070 } /* Literal.Number */
28 pre .s { color: #4070a0 } /* Literal.String */
29 pre .na { color: #4070a0 } /* Name.Attribute */
30 pre .nb { color: #007020 } /* Name.Builtin */
31 pre .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
32 pre .no { color: #60add5 } /* Name.Constant */
33 pre .nd { color: #555555; font-weight: bold } /* Name.Decorator */
34 pre .ni { color: #d55537; font-weight: bold } /* Name.Entity */
35 pre .ne { color: #007020 } /* Name.Exception */
36 pre .nf { color: #06287e } /* Name.Function */
37 pre .nl { color: #002070; font-weight: bold } /* Name.Label */
38 pre .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
39 pre .nt { color: #062873; font-weight: bold } /* Name.Tag */
40 pre .nv { color: #bb60d5 } /* Name.Variable */
41 pre .ow { color: #007020; font-weight: bold } /* Operator.Word */
42 pre .w { color: #bbbbbb } /* Text.Whitespace */
43 pre .mf { color: #40a070 } /* Literal.Number.Float */
44 pre .mh { color: #40a070 } /* Literal.Number.Hex */
45 pre .mi { color: #40a070 } /* Literal.Number.Integer */
46 pre .mo { color: #40a070 } /* Literal.Number.Oct */
47 pre .sb { color: #4070a0 } /* Literal.String.Backtick */
48 pre .sc { color: #4070a0 } /* Literal.String.Char */
49 pre .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
50 pre .s2 { color: #4070a0 } /* Literal.String.Double */
51 pre .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
52 pre .sh { color: #4070a0 } /* Literal.String.Heredoc */
53 pre .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
54 pre .sx { color: #c65d09 } /* Literal.String.Other */
55 pre .sr { color: #235388 } /* Literal.String.Regex */
56 pre .s1 { color: #4070a0 } /* Literal.String.Single */
57 pre .ss { color: #517918 } /* Literal.String.Symbol */
58 pre .bp { color: #007020 } /* Name.Builtin.Pseudo */
59 pre .vc { color: #bb60d5 } /* Name.Variable.Class */
60 pre .vg { color: #bb60d5 } /* Name.Variable.Global */
61 pre .vi { color: #bb60d5 } /* Name.Variable.Instance */
62 pre .il { color: #40a070 } /* Literal.Number.Integer.Long */
63
64 .highlight pre .hll { background-color: #ffffcc }
65 .highlight pre { background: #f0f0f0; }
66 .highlight pre .c { color: #60a0b0; font-style: italic } /* Comment */
67 .highlight pre .err { border: 1px solid #FF0000 } /* Error */
68 .highlight pre .k { color: #007020; font-weight: bold } /* Keyword */
69 .highlight pre .o { color: #666666 } /* Operator */
70 .highlight pre .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
71 .highlight pre .cp { color: #007020 } /* Comment.Preproc */
72 .highlight pre .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
73 .highlight pre .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
74 .highlight pre .gd { color: #A00000 } /* Generic.Deleted */
75 .highlight pre .ge { font-style: italic } /* Generic.Emph */
76 .highlight pre .gr { color: #FF0000 } /* Generic.Error */
77 .highlight pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */
78 .highlight pre .gi { color: #00A000 } /* Generic.Inserted */
79 .highlight pre .go { color: #888888 } /* Generic.Output */
80 .highlight pre .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
81 .highlight pre .gs { font-weight: bold } /* Generic.Strong */
82 .highlight pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
83 .highlight pre .gt { color: #0044DD } /* Generic.Traceback */
84 .highlight pre .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
85 .highlight pre .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
86 .highlight pre .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
87 .highlight pre .kp { color: #007020 } /* Keyword.Pseudo */
88 .highlight pre .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
89 .highlight pre .kt { color: #902000 } /* Keyword.Type */
90 .highlight pre .m { color: #40a070 } /* Literal.Number */
91 .highlight pre .s { color: #4070a0 } /* Literal.String */
92 .highlight pre .na { color: #4070a0 } /* Name.Attribute */
93 .highlight pre .nb { color: #007020 } /* Name.Builtin */
94 .highlight pre .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
95 .highlight pre .no { color: #60add5 } /* Name.Constant */
96 .highlight pre .nd { color: #555555; font-weight: bold } /* Name.Decorator */
97 .highlight pre .ni { color: #d55537; font-weight: bold } /* Name.Entity */
98 .highlight pre .ne { color: #007020 } /* Name.Exception */
99 .highlight pre .nf { color: #06287e } /* Name.Function */
100 .highlight pre .nl { color: #002070; font-weight: bold } /* Name.Label */
101 .highlight pre .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
102 .highlight pre .nt { color: #062873; font-weight: bold } /* Name.Tag */
103 .highlight pre .nv { color: #bb60d5 } /* Name.Variable */
104 .highlight pre .ow { color: #007020; font-weight: bold } /* Operator.Word */
105 .highlight pre .w { color: #bbbbbb } /* Text.Whitespace */
106 .highlight pre .mf { color: #40a070 } /* Literal.Number.Float */
107 .highlight pre .mh { color: #40a070 } /* Literal.Number.Hex */
108 .highlight pre .mi { color: #40a070 } /* Literal.Number.Integer */
109 .highlight pre .mo { color: #40a070 } /* Literal.Number.Oct */
110 .highlight pre .sb { color: #4070a0 } /* Literal.String.Backtick */
111 .highlight pre .sc { color: #4070a0 } /* Literal.String.Char */
112 .highlight pre .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
113 .highlight pre .s2 { color: #4070a0 } /* Literal.String.Double */
114 .highlight pre .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
115 .highlight pre .sh { color: #4070a0 } /* Literal.String.Heredoc */
116 .highlight pre .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
117 .highlight pre .sx { color: #c65d09 } /* Literal.String.Other */
118 .highlight pre .sr { color: #235388 } /* Literal.String.Regex */
119 .highlight pre .s1 { color: #4070a0 } /* Literal.String.Single */
120 .highlight pre .ss { color: #517918 } /* Literal.String.Symbol */
121 .highlight pre .bp { color: #007020 } /* Name.Builtin.Pseudo */
122 .highlight pre .vc { color: #bb60d5 } /* Name.Variable.Class */
123 .highlight pre .vg { color: #bb60d5 } /* Name.Variable.Global */
124 .highlight pre .vi { color: #bb60d5 } /* Name.Variable.Instance */
125 .highlight pre .il { color: #40a070 } /* Literal.Number.Integer.Long */
+0
-136
docs/_themes/lucuma/static/styles/responsive.css less more
0 .visible-xs,
1 .visible-sm,
2 .visible-md,
3 .visible-lg {
4 display: none !important;
5 }
6
7 @media (max-width: 450px) {
8 header h1 {
9 display: block;
10 width: 100%;
11 }
12 }
13
14 @media (max-width: 767px) {
15 .visible-xs {
16 display: block !important;
17 }
18 table.visible-xs {
19 display: table;
20 }
21 tr.visible-xs {
22 display: table-row !important;
23 }
24 th.visible-xs,
25 td.visible-xs {
26 display: table-cell !important;
27 }
28 }
29
30 @media (min-width: 768px) and (max-width: 991px) {
31 .visible-sm {
32 display: block !important;
33 }
34 table.visible-sm {
35 display: table;
36 }
37 tr.visible-sm {
38 display: table-row !important;
39 }
40 th.visible-sm,
41 td.visible-sm {
42 display: table-cell !important;
43 }
44 }
45
46 @media (min-width: 992px) {
47 header .nav {
48 margin-right: -15px;
49 }
50 #toc-large {
51 right: -11px;
52 }
53 }
54
55 @media (min-width: 992px) and (max-width: 1199px) {
56 .visible-md {
57 display: block !important;
58 }
59 table.visible-md {
60 display: table;
61 }
62 tr.visible-md {
63 display: table-row !important;
64 }
65 th.visible-md,
66 td.visible-md {
67 display: table-cell !important;
68 }
69 }
70
71 @media (min-width: 1200px) {
72 .visible-lg {
73 display: block !important;
74 }
75 table.visible-lg {
76 display: table;
77 }
78 tr.visible-lg {
79 display: table-row !important;
80 }
81 th.visible-lg,
82 td.visible-lg {
83 display: table-cell !important;
84 }
85 }
86
87 @media (max-width: 767px) {
88 .hidden-xs {
89 display: none !important;
90 }
91 }
92
93 @media (min-width: 768px) and (max-width: 991px) {
94 .hidden-sm {
95 display: none !important;
96 }
97 }
98
99 @media (min-width: 992px) and (max-width: 1199px) {
100 .hidden-md {
101 display: none !important;
102 }
103 }
104
105 @media (min-width: 1200px) {
106 .hidden-lg {
107 display: none !important;
108 }
109 }
110
111 .visible-print {
112 display: none !important;
113 }
114
115 @media print {
116 .visible-print {
117 display: block !important;
118 }
119 table.visible-print {
120 display: table;
121 }
122 tr.visible-print {
123 display: table-row !important;
124 }
125 th.visible-print,
126 td.visible-print {
127 display: table-cell !important;
128 }
129 }
130
131 @media print {
132 .hidden-print {
133 display: none !important;
134 }
135 }
+0
-951
docs/_themes/lucuma/static/styles/type.css less more
0 @font-face {
1 font-family: 'ProximaNovaLight';
2 src: url(../fonts/proximanova-light-webfont.eot);
3 src: url(../fonts/proximanova-light-webfont.eot) format("embedded-opentype"),
4 url(../fonts/proximanova-light-webfont.woff) format("woff"),
5 url(../fonts/proximanova-light-webfont.woff2) format("woff2"),
6 url(../fonts/proximanova-light-webfont.ttf) format("truetype"),
7 url(../fonts/proximanova-light-webfont.svg#ProximaNovaLight) format("svg");
8 font-weight: normal;
9 font-style: normal;
10 }
11
12 @font-face {
13 font-family: 'ProximaNovaLight';
14 src: url(../fonts/proximanova-lightitalic-webfont.eot);
15 src: url(../fonts/proximanova-lightitalic-webfont.eot) format("embedded-opentype"),
16 url(../fonts/proximanova-lightitalic-webfont.woff) format("woff"),
17 url(../fonts/proximanova-lightitalic-webfont.woff2) format("woff2"),
18 url(../fonts/proximanova-lightitalic-webfont.ttf) format("truetype"),
19 url(../fonts/proximanova-lightitalic-webfont.svg#ProximaNovaLight) format("svg");
20 font-style: italic;
21 }
22
23 @font-face {
24 font-family: 'ProximaNovaRegular';
25 src: url(../fonts/proximanova-regular-webfont.eot);
26 src: url(../fonts/proximanova-regular-webfont.eot) format("embedded-opentype"),
27 url(../fonts/proximanova-regular-webfont.woff) format("woff"),
28 url(../fonts/proximanova-regular-webfont.woff2) format("woff2"),
29 url(../fonts/proximanova-regular-webfont.ttf) format("truetype"),
30 url(../fonts/proximanova-regular-webfont.svg#ProximaNovaRegular) format("svg");
31 }
32
33 @font-face {
34 font-family: 'ProximaNovaSemiBold';
35 src: url(../fonts/proximanova-semibold-webfont.eot);
36 src: url(../fonts/proximanova-semibold-webfont.eot) format("embedded-opentype"),
37 url(../fonts/proximanova-semibold-webfont.woff) format("woff"),
38 url(../fonts/proximanova-semibold-webfont.woff2) format("woff2"),
39 url(../fonts/proximanova-semibold-webfont.ttf) format("truetype"),
40 url(../fonts/proximanova-semibold-webfont.svg#ProximaNovaSemiBold) format("svg");
41 font-weight: bold;
42 }
43
44 html {
45 font-family: "ProximaNovaLight", sans-serif;
46 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
47 }
48
49 strong,
50 b {
51 font-family: "ProximaNovaRegular", sans-serif;
52 }
53
54 body {
55 font-size: 16px;
56 line-height: 1.5;
57 color: #333333;
58 }
59
60 header {
61 color: #444;
62 font-size: 15px;
63 }
64
65 h1, h2, h3, h4, h5, h6,
66 .h1, .h2, .h3, .h4, .h5, .h6 {
67 font-family: inherit;
68 font-weight: 500;
69 line-height: 1.1;
70 color: inherit;
71 }
72
73 h1 small, h2 small, h3 small, h4 small, h5 small, h6 small,
74 .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small,
75 h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small,
76 .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
77 font-weight: normal;
78 line-height: 1;
79 color: #999999;
80 }
81
82 h1 small, .h1 small,
83 h2 small, .h2 small,
84 h3 small, .h3 small,
85 h1 .small, .h1 .small,
86 h2 .small, .h2 .small,
87 h3 .small, .h3 .small {
88 font-size: 65%;
89 }
90
91 h4 small, .h4 small,
92 h5 small, .h5 small,
93 h6 small, .h6 small,
94 h4 .small, .h4 .small,
95 h5 .small, .h5 .small,
96 h6 .small, .h6 .small {
97 font-size: 75%;
98 }
99
100 h1, h2, h3, h4, h5, h6 {
101 margin-bottom: 10px;
102 font-weight: 300;
103 position: relative;
104 z-index: 0;
105 font-family: "ProximaNovaSemiBold", sans-serif;
106 color: #575757
107 }
108
109 h2, h3 {
110 margin: 48px 0 24px 0;
111 }
112
113 h2 {
114 font-size: 24px;
115 color: #AC6B03
116 }
117
118 h4 {
119 color: #575757;
120 font-style: italic;
121 border-bottom: 0
122 }
123
124 h1 + h2,
125 h2 + h2,
126 h3 + h2,
127 h4 + h2,
128 h5 + h2,
129 h6 + h2 {
130 padding: 48px 0 0 0;
131 margin: 48px 0 24px 0
132 }
133
134 hr + h2,
135 hr + h3 {
136 padding: 48px 0 0 0;
137 margin: 48px 0 24px 0;
138 background: none
139 }
140
141 h1 + h3,
142 h2 + h3,
143 h3 + h3,
144 h4 + h3,
145 h5 + h3,
146 h6 + h3 {
147 padding: 48px 0 0 0;
148 margin: 48px 0 24px 0
149 }
150
151 p {
152 margin: 0 0 20px;
153 }
154
155 .lead {
156 margin-bottom: 20px;
157 font-size: 17px;
158 font-weight: 200;
159 line-height: 1.4;
160 border-bottom: 1px solid #eee;
161 padding-bottom: 15px
162 }
163
164 .lead strong,
165 .lead em {
166 font-family: "ProximaNovaRegular", sans-serif;
167 }
168
169 @media (min-width: 768px) {
170 .lead {
171 font-size: 18px;
172 }
173 }
174
175 small,
176 .small {
177 font-size: 85%;
178 }
179
180 cite {
181 font-style: normal;
182 }
183
184 a {
185 color: #428bca;
186 text-decoration: none;
187 border-bottom: 1px dotted;
188 }
189
190 a:hover {
191 color: #3071a9;
192 }
193
194 header a,
195 #page-toc a,
196 #sponsored_by a {
197 border: none;
198 }
199
200 .text-success {
201 color: #3c763d;
202 }
203
204 a.text-success:hover {
205 color: #2b542c;
206 }
207
208 .text-info {
209 color: #31708f;
210 }
211
212 a.text-info:hover {
213 color: #245269;
214 }
215
216 .text-warning {
217 color: #8a6d3b;
218 }
219
220 a.text-warning:hover {
221 color: #66512c;
222 }
223
224 .text-danger {
225 color: #a94442;
226 }
227
228 a.text-danger:hover {
229 color: #843534;
230 }
231
232 .bg-primary {
233 color: #fff;
234 background-color: #428bca;
235 }
236
237 a.bg-primary:hover {
238 background-color: #3071a9;
239 }
240
241 .bg-success {
242 background-color: #dff0d8;
243 }
244
245 a.bg-success:hover {
246 background-color: #c1e2b3;
247 }
248
249 .bg-info {
250 background-color: #d9edf7;
251 }
252
253 a.bg-info:hover {
254 background-color: #afd9ee;
255 }
256
257 .bg-warning {
258 background-color: #fcf8e3;
259 }
260
261 a.bg-warning:hover {
262 background-color: #f7ecb5;
263 }
264
265 .bg-danger {
266 background-color: #f2dede;
267 }
268
269 a.bg-danger:hover {
270 background-color: #e4b9b9;
271 }
272
273 .page-header {
274 padding-bottom: 9px;
275 margin: 40px 0 20px;
276 border-bottom: 1px solid #eeeeee;
277 }
278
279 ul,
280 ol {
281 margin-top: 0;
282 margin-bottom: 10px;
283 }
284
285 ul ul,
286 ol ul,
287 ul ol,
288 ol ol {
289 margin-bottom: 0;
290 }
291
292 .list-unstyled {
293 padding-left: 0;
294 list-style: none;
295 }
296
297 .list-inline {
298 padding-left: 0;
299 list-style: none;
300 margin-left: -5px;
301 }
302
303 .list-inline > li {
304 display: inline-block;
305 padding-left: 5px;
306 padding-right: 5px;
307 }
308
309 dl {
310 margin-top: 0;
311 margin-bottom: 20px;
312 }
313
314 dt,
315 dd {
316 line-height: 1.42857143;
317 }
318
319 dt {
320 font-weight: bold;
321 }
322
323 dd {
324 margin-left: 0;
325 }
326
327 @media (min-width: 768px) {
328 .dl-horizontal dt {
329 float: left;
330 width: 160px;
331 clear: left;
332 text-align: right;
333 overflow: hidden;
334 text-overflow: ellipsis;
335 white-space: nowrap;
336 }
337 .dl-horizontal dd {
338 margin-left: 180px;
339 }
340 }
341
342 abbr[title],
343 abbr[data-original-title] {
344 cursor: help;
345 border-bottom: 1px dotted #999999;
346 }
347
348 .initialism {
349 font-size: 90%;
350 text-transform: uppercase;
351 }
352
353 blockquote {
354 padding: 10px 20px;
355 margin: 0 0 20px;
356 font-size: 17.5px;
357 border-left: 5px solid #eeeeee;
358 }
359
360 blockquote p:last-child,
361 blockquote ul:last-child,
362 blockquote ol:last-child {
363 margin-bottom: 0;
364 }
365
366 blockquote footer,
367 blockquote small,
368 blockquote .small {
369 display: block;
370 font-size: 80%;
371 line-height: 1.42857143;
372 color: #999999;
373 }
374
375 blockquote footer:before,
376 blockquote small:before,
377 blockquote .small:before {
378 content: '\2014 \00A0';
379 }
380
381 .blockquote-reverse,
382 blockquote.pull-right {
383 padding-right: 15px;
384 padding-left: 0;
385 border-right: 5px solid #eeeeee;
386 border-left: 0;
387 text-align: right;
388 }
389
390 .blockquote-reverse footer:before,
391 blockquote.pull-right footer:before,
392 .blockquote-reverse small:before,
393 blockquote.pull-right small:before,
394 .blockquote-reverse .small:before,
395 blockquote.pull-right .small:before {
396 content: '';
397 }
398
399 .blockquote-reverse footer:after,
400 blockquote.pull-right footer:after,
401 .blockquote-reverse small:after,
402 blockquote.pull-right small:after,
403 .blockquote-reverse .small:after,
404 blockquote.pull-right .small:after {
405 content: '\00A0 \2014';
406 }
407
408 blockquote:before,
409 blockquote:after {
410 content: "";
411 }
412
413 address {
414 margin-bottom: 20px;
415 font-style: normal;
416 line-height: 1.42857143;
417 }
418
419
420 /* -- search page ----------------------------------------------------------- */
421
422 ul.search {
423 margin: 10px 0 0 20px;
424 padding: 0;
425 }
426
427 ul.search li {
428 padding: 5px 0 5px 20px;
429 background-image: url(file.png);
430 background-repeat: no-repeat;
431 background-position: 0 7px;
432 }
433
434 ul.search li a {
435 font-weight: bold;
436 }
437
438 ul.search li div.context {
439 color: #888;
440 margin: 2px 0 0 30px;
441 text-align: left;
442 }
443
444 ul.keywordmatches li.goodmatch a {
445 font-weight: bold;
446 }
447
448
449 /* -- index page ------------------------------------------------------------ */
450
451 table.contentstable {
452 width: 90%;
453 }
454
455 table.contentstable p.biglink {
456 line-height: 150%;
457 }
458
459 a.biglink {
460 font-size: 1.3em;
461 }
462
463 span.linkdescr {
464 font-style: italic;
465 padding-top: 5px;
466 font-size: 90%;
467 }
468
469
470 /* -- general index --------------------------------------------------------- */
471
472 table.indextable {
473 width: 100%;
474 }
475
476 table.indextable td {
477 text-align: left;
478 vertical-align: top;
479 }
480
481 table.indextable dl,
482 table.indextable dd {
483 margin-top: 0;
484 margin-bottom: 0;
485 }
486
487 table.indextable tr.pcap {
488 height: 10px;
489 }
490
491 table.indextable tr.cap {
492 margin-top: 10px;
493 background-color: #f2f2f2;
494 }
495
496 img.toggler {
497 margin-right: 3px;
498 margin-top: 3px;
499 cursor: pointer;
500 }
501
502 div.modindex-jumpbox {
503 border-top: 1px solid #ddd;
504 border-bottom: 1px solid #ddd;
505 margin: 1em 0 1em 0;
506 padding: 0.4em;
507 }
508
509 div.genindex-jumpbox {
510 border-top: 1px solid #ddd;
511 border-bottom: 1px solid #ddd;
512 margin: 1em 0 1em 0;
513 padding: 0.4em;
514 }
515
516
517 /* -- general body styles --------------------------------------------------- */
518
519 a.headerlink,
520 a.headerlink:hover {
521 font-size: 16px;
522 padding: 0 8px;
523 color: #666;
524 display: inline-block;
525 text-decoration: none;
526 font-weight: normal;
527 font-style: normal;
528 border: none;
529 visibility: hidden;
530 vertical-align: middle;
531 }
532
533 h1:hover > a.headerlink,
534 h2:hover > a.headerlink,
535 h3:hover > a.headerlink,
536 h4:hover > a.headerlink,
537 h5:hover > a.headerlink,
538 h6:hover > a.headerlink,
539 dt:hover > a.headerlink {
540 visibility: visible;
541 }
542
543 div.body p.caption {
544 text-align: inherit;
545 }
546
547 div.body td {
548 text-align: left;
549 }
550
551 .field-list ul {
552 padding-left: 1em;
553 }
554
555 .first {
556 margin-top: 0 !important;
557 }
558
559 p.rubric {
560 margin-top: 30px;
561 font-weight: bold;
562 }
563
564 img.align-left,
565 .figure.align-left,
566 object.align-left {
567 clear: left;
568 float: left;
569 margin-right: 1em;
570 }
571
572 img.align-right,
573 .figure.align-right,
574 object.align-right {
575 clear: right;
576 float: right;
577 margin-left: 1em;
578 }
579
580 img.align-center,
581 .figure.align-center,
582 object.align-center {
583 display: block;
584 margin-left: auto;
585 margin-right: auto;
586 }
587
588 .align-left {
589 text-align: left;
590 }
591
592 .align-center {
593 text-align: center;
594 }
595
596 .align-right {
597 text-align: right;
598 }
599
600
601 /* -- topics ---------------------------------------------------------------- */
602
603 div.topic {
604 border: 1px solid #ccc;
605 padding: 7px 7px 0 7px;
606 margin: 10px 0 10px 0;
607 }
608
609 p.topic-title {
610 font-size: 1.1em;
611 font-weight: bold;
612 margin-top: 10px;
613 }
614
615
616 /* -- admonitions ----------------------------------------------------------- */
617
618 .admonition {
619 background: #fafafa;
620 border: 1px solid #ddd;
621 padding: 10px 15px 5px;
622 margin: 10px 0 15px;
623 position: relative;
624 clear: both;
625 font-size: 15px;
626 }
627
628 .admonition:after {
629 content: '';
630 display: block;
631 width: 36px;
632 height: 54px;
633 position: absolute;
634 top: 3px;
635 left: -21px;
636 background-color: transparent;
637 background-repeat: no-repeat;
638 }
639
640 .admonition-title {
641 display: none;
642 }
643
644 .admonition p {
645 margin-bottom: 1em;
646 }
647
648 .admonition dt {
649 font-weight: bold;
650 }
651
652 .admonition dl {
653 margin-bottom: 0;
654 }
655
656 .admonition pre,
657 .admonition code {
658 font-size: 14px;
659 }
660
661 .admonition.warning {
662 background-color: #f9d9d8;
663 border: none;
664 padding: 1.25em 1.25em 0.25em 32px;
665 margin: 0.25em 0 1.5em 22px;
666 }
667
668 .admonition.warning:after {
669 background-image: url(../images/tab-warning.gif);
670 }
671
672 .admonition.note {
673 background-color: #d5e9f6;
674 border: none;
675 padding: 1em 1em 0.25em 32px;
676 margin: 0.25em 0 1.5em 22px;
677 }
678
679 .admonition.note:after {
680 background-image: url(../images/tab-info.gif);
681 }
682
683 .admonition.tip {
684 background-color: #FFFFD6;
685 border: none;
686 padding: 1em 1em 0.25em 32px;
687 margin: 0.25em 0 1.5em 22px;
688 }
689
690 .admonition.tip:after {
691 background-image: url(../images/tab-tip.gif);
692 }
693
694
695 /* -- tables ---------------------------------------------------------------- */
696
697 table.docutils {
698 border: 0;
699 border-collapse: collapse;
700 }
701
702 table.docutils td,
703 table.docutils th {
704 padding: 1px 8px 1px 5px;
705 border-top: 0;
706 border-left: 0;
707 border-right: 0;
708 border-bottom: 1px solid #aaa;
709 }
710
711 table.field-list td,
712 table.field-list th {
713 border: 0 !important;
714 }
715
716 table.footnote td,
717 table.footnote th {
718 border: 0 !important;
719 font-size: smaller;
720 }
721
722 th {
723 text-align: left;
724 padding-right: 5px;
725 }
726
727 table.citation {
728 border-left: solid 1px gray;
729 margin-left: 1px;
730 }
731
732 table.citation td {
733 border-bottom: none;
734 }
735
736
737 /* -- other body styles ----------------------------------------------------- */
738
739 ol.arabic {
740 list-style: decimal;
741 }
742
743 ol.loweralpha {
744 list-style: lower-alpha;
745 }
746
747 ol.upperalpha {
748 list-style: upper-alpha;
749 }
750
751 ol.lowerroman {
752 list-style: lower-roman;
753 }
754
755 ol.upperroman {
756 list-style: upper-roman;
757 }
758
759 dl {
760 margin-bottom: 15px;
761 }
762
763 dd p {
764 margin-top: 0px;
765 }
766
767 dd ul,
768 dd table {
769 margin-bottom: 10px;
770 }
771
772 dd {
773 margin-top: 3px;
774 margin-bottom: 10px;
775 margin-left: 30px;
776 }
777
778 dt:target,
779 .highlighted {
780 background-color: #fbe54e;
781 }
782
783 dl.glossary dt {
784 font-weight: bold;
785 font-size: 1.1em;
786 }
787
788 .field-list ul {
789 margin: 0;
790 padding-left: 1em;
791 }
792
793 .field-list p {
794 margin: 0;
795 }
796
797 .optional {
798 font-size: 1.3em;
799 }
800
801 .versionmodified {
802 font-style: italic;
803 }
804
805 .system-message {
806 background-color: #fda;
807 padding: 5px;
808 border: 3px solid red;
809 }
810
811 a.footnote-reference {
812 font-size: 70%;
813 position: relative;
814 top: -.75em;
815 }
816
817 .footnote:target {
818 background-color: #fafad1;
819 }
820
821 .line-block {
822 display: block;
823 margin-top: 1em;
824 margin-bottom: 1em;
825 }
826
827 .line-block .line-block {
828 margin-top: 0;
829 margin-bottom: 0;
830 margin-left: 1.5em;
831 }
832
833 .guilabel,
834 .menuselection {
835 font-family: sans-serif;
836 }
837
838 .accelerator {
839 text-decoration: underline;
840 }
841
842 .classifier {
843 font-style: oblique;
844 }
845
846 abbr,
847 acronym {
848 border-bottom: dotted 1px;
849 cursor: help;
850 }
851
852
853 /* -- code displays --------------------------------------------------------- */
854
855 pre,
856 code {
857 font-size: 14px;
858 font-family: "Monaco", "Menlo", "Consolas", monospace;
859 line-height: 1.5;
860 margin: 20px 0;
861 overflow: auto;
862 color: #222;
863 padding: 5px 10px;
864 min-width: 300px;
865 }
866
867 pre,
868 tt,
869 code,
870 .note > p {
871 white-space: -moz-pre-wrap;
872 white-space: pre-wrap;
873 }
874
875 td.linenos pre {
876 padding: 5px 0px;
877 border: 0;
878 background-color: transparent;
879 color: #aaa;
880 }
881
882 table.highlighttable {
883 margin-left: 0.5em;
884 }
885
886 table.highlighttable td {
887 padding: 0 0.5em 0 0.5em;
888 }
889
890 code.docutils.literal {
891 margin: 0;
892 padding: 1px 2px;
893 background-color: #F5F5F5;
894 font-size: 85%;
895 font-weight: bold;
896 }
897
898 tt.descname {
899 background-color: transparent;
900 font-weight: bold;
901 font-size: 1.2em;
902 }
903
904 tt.descclassname {
905 background-color: transparent;
906 }
907
908 tt.xref,
909 a tt {
910 background-color: transparent;
911 font-weight: bold;
912 }
913
914 h1 tt,
915 h2 tt,
916 h3 tt,
917 h4 tt,
918 h5 tt,
919 h6 tt {
920 background-color: transparent;
921 }
922
923 .viewcode-link {
924 float: right;
925 }
926
927 .viewcode-back {
928 float: right;
929 font-family: sans-serif;
930 }
931
932 div.viewcode-block:target {
933 margin: -1px -10px;
934 padding: 0 10px;
935 }
936
937
938 /* -- math display ---------------------------------------------------------- */
939
940 img.math {
941 vertical-align: middle;
942 }
943
944 div.body div.math p {
945 text-align: center;
946 }
947
948 span.eqno {
949 float: right;
950 }
+0
-17
docs/_themes/lucuma/static/translations.js_t less more
0 {% import 'locale-'+language+'_t' as t -%}
1 Documentation.addTranslations({
2 "locale": "es",
3 "plural_expr": "(n != 1)",
4 "messages": {
5 "permalink_header": "{{ t.permalink_header }}",
6 "permalink_definition": "{{ t.permalink_definition }}",
7 "hide_search_matches": "{{ t.hide_search_matches }}",
8 "searching": "{{ t.searching }}",
9 "preparing_search": "{{ t.preparing_search }}",
10 "search_results found %s": "{{ t.search_results_x_found }}",
11 "search_result_in": "{{ t.search_result_in }}",
12 "search_results": "{{ t.t_search_results_title }}",
13 "search_results_no_results": "{{ t.search_results_no_results }}",
14 "": ""
15 }
16 });
+0
-3
docs/_themes/lucuma/theme.conf less more
0 [theme]
1 inherit = none
2 stylesheet = main.css
+0
-6
docs/_themes/lucuma/toc.html less more
0 {% import 'locale-'+language+'_t' as t -%}
1 <div id="toc">
2 <h3>{{ t.nav_index }}</h3>
3 <a class="nav-item" href="{{ pathto('index') }}">{{ t.nav_home }}</a>
4 {{ toctree(maxdepth=3) }}
5 </div>
6969 # ...
7070
7171 .. warning::
72 You should always set ``strict=True`` (either as a ``class Meta`` option or in the Schema's constructor) when passing a schema to webargs. This will ensure that the parser's error handler is invoked when expected.
72 If you're using marshmallow 2, you should always set ``strict=True`` (either as a ``class Meta`` option or in the Schema's constructor) when passing a schema to webargs. This will ensure that the parser's error handler is invoked when expected.
7373
7474 .. warning::
7575 Any `Schema <marshmallow.Schema>` passed to `use_kwargs <webargs.core.Parser.use_kwargs>` MUST deserialize to a dictionary of data. Keep this in mind when writing `post_load <marshmallow.decorators.post_load>` methods.
362362 ----------
363363
364364 - See the :doc:`Framework Support <framework_support>` page for framework-specific guides.
365 - For example applications, check out the `examples <https://github.com/sloria/webargs/tree/dev/examples>`_ directory.
365 - For example applications, check out the `examples <https://github.com/marshmallow-code/webargs/tree/dev/examples>`_ directory.
11 import datetime as dt
22 import sys
33 import os
4 import sphinx_typlog_theme
45
56 # If extensions (or modules to document with autodoc) are in another directory,
67 # add these directories to sys.path here. If the directory is relative to the
1011
1112 extensions = [
1213 "sphinx.ext.autodoc",
14 "sphinx.ext.viewcode",
1315 "sphinx.ext.intersphinx",
14 "sphinx.ext.viewcode",
1516 "sphinx_issues",
1617 ]
1718
1819 primary_domain = "py"
1920 default_role = "py:obj"
2021
21 issues_github_path = "sloria/webargs"
22 github_user = "marshmallow-code"
23 github_repo = "webargs"
24
25 issues_github_path = "{}/{}".format(github_user, github_repo)
2226
2327 intersphinx_mapping = {
2428 "python": ("http://python.readthedocs.io/en/latest/", None),
3135 language = "en"
3236
3337 html_domain_indices = False
34 templates_path = ["_templates"]
3538 source_suffix = ".rst"
3639 project = u"webargs"
37 copyright = u"2014-{0:Y}".format(dt.datetime.utcnow())
40 copyright = u"2014-{0:%Y}, Steven Loria and contributors".format(dt.datetime.utcnow())
3841 version = release = webargs.__version__
42 templates_path = ["_templates"]
3943 exclude_patterns = ["_build"]
4044
4145 # THEME
4246
4347 # Add any paths that contain custom themes here, relative to this directory.
44 html_theme_path = ["./_themes"]
45 html_theme = "lucuma"
46 templates_path = ["_templates"]
48 html_theme = "sphinx_typlog_theme"
49 html_theme_path = [sphinx_typlog_theme.get_path()]
50 html_static_path = ["_static"]
51
52 html_theme_options = {
53 "color": "#268bd2",
54 "logo_name": "webargs",
55 "description": "Declarative parsing and validation of HTTP request objects.",
56 "github_user": github_user,
57 "github_repo": github_repo,
58 }
4759
4860 html_context = {
49 "project": project,
50 "author": "Steven Loria",
51 "author_url": "http://stevenloria.com",
52 "github": "https://github.com/sloria/webargs",
53 "seo_description": "A friendly library for parsing HTTP request arguments.",
54 "license": "MIT Licensed",
61 "tidelift_url": (
62 "https://tidelift.com/subscription/pkg/pypi-webargs"
63 "?utm_source=pypi-webargs&utm_medium=referral&utm_campaign=docs"
64 ),
65 "donate_url": "https://opencollective.com/marshmallow",
5566 }
67
68 html_sidebars = {
69 "**": [
70 "logo.html",
71 "github.html",
72 "globaltoc.html",
73 "donate.html",
74 "searchbox.html",
75 "sponsors.html",
76 ]
77 }
78
79
80 def setup(app):
81 app.add_stylesheet("css/extra.css")
3131 ++++++++++++++
3232
3333 Webargs uses Flask's ``abort`` function to raise an ``HTTPException`` when a validation error occurs.
34 If you use the ``Flask.errorhandler`` method to handle errors, you can access validation messages from the ``data`` attribute of an error.
34 If you use the ``Flask.errorhandler`` method to handle errors, you can access validation messages from the ``messages`` attribute of
35 the attached ``ValidationError``.
3536
3637 Here is an example error handler that returns validation messages to the client as JSON.
3738
3940
4041 from flask import jsonify
4142
42
43 # Return validation errors as JSON
4344 @app.errorhandler(422)
44 def handle_unprocessable_entity(err):
45 # webargs attaches additional metadata to the `data` attribute
46 exc = getattr(err, "exc")
45 def handle_validation_error(err):
46 exc = getattr(err, "exc", None)
4747 if exc:
48 # Get validations from the ValidationError object
48 headers = err.data["headers"]
4949 messages = exc.messages
5050 else:
51 messages = ["Invalid request"]
52 return jsonify({"messages": messages}), 422
51 headers = None
52 messages = ["Invalid request."]
53 if headers:
54 return jsonify({"errors": messages}), err.code, headers
55 else:
56 return jsonify({"errors": messages}), err.code
5357
5458 URL Matches
5559 +++++++++++
0 :orphan:
1
20 =======
31 webargs
42 =======
53
6 .. container:: lead
7
8 A friendly library for parsing HTTP request arguments.
9
10
114 Release v\ |version|. (:doc:`Changelog <changelog>`)
125
13 webargs is a Python library for parsing HTTP request arguments, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp.
6 webargs is a Python library for parsing and validating HTTP request objects, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp.
147
158
169 .. code-block:: python
8073
8174 pip install -U webargs
8275
83 Ready to get started? Go on to the :doc:`Quickstart tutorial <quickstart>` or check out some `examples <https://github.com/sloria/webargs/tree/dev/examples>`_.
76 Ready to get started? Go on to the :doc:`Quickstart tutorial <quickstart>` or check out some `examples <https://github.com/marshmallow-code/webargs/tree/dev/examples>`_.
8477
8578 User Guide
8679 ----------
1919
2020 ::
2121
22 $ pip install -U git+https://github.com/sloria/webargs.git@dev
22 $ pip install -U git+https://github.com/marshmallow-code/webargs.git@dev
149149
150150 You may pass a list of validators to the ``validate`` parameter.
151151
152 .. note::
153
154 You may pass an HTTP status code to `ValidationError <webargs.core.ValidationError>`.
155
156 .. code-block:: python
157
158 def must_exist_in_db(val):
159 if not User.query.get(val):
160 # Optionally pass a status_code
161 raise ValidationError('User does not exist', status_code=404)
162
163 argmap = {
164 'id': fields.Int(validate=must_exist_in_db)
165 }
166
167152 The full arguments dictionary can also be validated by passing ``validate`` to :meth:`Parser.parse <webargs.core.Parser.parse>`, :meth:`Parser.use_args <webargs.core.Parser.use_args>`, :meth:`Parser.use_kwargs <webargs.core.Parser.use_kwargs>`.
168153
169154
199184
200185
201186 @parser.error_handler
202 def handle_error(error, req, schema):
187 def handle_error(error, req, schema, status_code, headers):
203188 raise CustomError(error.messages)
204189
205190 Nesting Fields
226211
227212 - Go on to :doc:`Advanced Usage <advanced>` to learn how to add custom location handlers, use marshmallow Schemas, and more.
228213 - See the :doc:`Framework Support <framework_support>` page for framework-specific guides.
229 - For example applications, check out the `examples <https://github.com/sloria/webargs/tree/dev/examples>`_ directory.
214 - For example applications, check out the `examples <https://github.com/marshmallow-code/webargs/tree/dev/examples>`_ directory.
0 -r ../dev-requirements-py3.txt
1 sphinx==1.3.6 # pyup: ignore
2 sphinx-issues==1.0.0
0 -e '.[frameworks]'
1 Sphinx==1.8.3
2 sphinx-issues==1.2.0
3 # TODO: Use PyPI release of sphinx-typlog-theme after latest changes are released
4 git+https://github.com/typlog/sphinx-typlog-theme.git@45a71b3cd99c7550e5999042504d3b9c83b68791
4242
4343
4444 @route("/", methods=["GET"])
45 def index(name: fields.Str(missing="Friend")):
45 def index(name: fields.Str(missing="Friend")): # noqa: E252
4646 return {"message": "Hello, {}!".format(name)}
4747
4848
4949 @route("/add", methods=["POST"])
50 def add(x: fields.Float(required=True), y: fields.Float(required=True)):
50 def add(x: fields.Float(required=True), y: fields.Float(required=True)): # noqa: E252
5151 return {"result": x + y}
5252
5353
6565
6666
6767 @route("/users/<int:user_id>", methods=["POST"])
68 def user_detail(user_id, name: fields.Str(required=True)) -> UserSchema():
68 def user_detail(user_id, name: fields.Str(required=True)) -> UserSchema(): # noqa: E252
6969 user = User(id=user_id, name=name)
7070 return user
7171
7272
7373 # Return validation errors as JSON
7474 @app.errorhandler(422)
75 @app.errorhandler(400)
7576 def handle_validation_error(err):
76 exc = err.exc
77 return jsonify({"errors": exc.messages}), 422
77 exc = getattr(err, "exc", None)
78 if exc:
79 headers = err.data["headers"]
80 messages = exc.messages
81 else:
82 headers = None
83 messages = ["Invalid request."]
84 if headers:
85 return jsonify({"errors": messages}), err.code, headers
86 else:
87 return jsonify({"errors": messages}), err.code
7888
7989
8090 if __name__ == "__main__":
6262
6363 # Return validation errors as JSON
6464 @app.errorhandler(422)
65 @app.errorhandler(400)
6566 def handle_validation_error(err):
66 exc = err.exc
67 return jsonify({"errors": exc.messages}), 422
67 exc = getattr(err, "exc", None)
68 if exc:
69 headers = err.data["headers"]
70 messages = exc.messages
71 else:
72 headers = None
73 messages = ["Invalid request."]
74 if headers:
75 return jsonify({"errors": messages}), err.code, headers
76 else:
77 return jsonify({"errors": messages}), err.code
6878
6979
7080 if __name__ == "__main__":
6969
7070 # This error handler is necessary for usage with Flask-RESTful
7171 @parser.error_handler
72 def handle_request_parsing_error(err, req):
72 def handle_request_parsing_error(err, req, schema, error_status_code, error_headers):
7373 """webargs error handler that uses Flask-RESTful's abort function to return
7474 a JSON error response to the client.
7575 """
76 abort(422, errors=err.messages)
76 abort(error_status_code, errors=err.messages)
7777
7878
7979 if __name__ == "__main__":
7575 config.add_route("dateadd", "/dateadd")
7676 config.scan(__name__)
7777 app = config.make_wsgi_app()
78 server = make_server("0.0.0.0", 5001, app)
78 port = 5001
79 server = make_server("0.0.0.0", port, app)
80 print("Serving on port {}".format(port))
7981 server.serve_forever()
0 python-dateutil==2.7.3
0 python-dateutil==2.7.5
11 Flask
22 bottle
33 tornado
123123
124124 # Return validation errors as JSON
125125 @app.errorhandler(422)
126 @app.errorhandler(400)
126127 def handle_validation_error(err):
127 exc = err.data["exc"]
128 return jsonify({"errors": exc.messages}), 422
128 exc = getattr(err, "exc", None)
129 if exc:
130 headers = err.data["headers"]
131 messages = exc.messages
132 else:
133 headers = None
134 messages = ["Invalid request."]
135 if headers:
136 return jsonify({"errors": messages}), err.code, headers
137 else:
138 return jsonify({"errors": messages}), err.code
129139
130140
131141 if __name__ == "__main__":
2727 etype, exc, traceback = kwargs["exc_info"]
2828 if hasattr(exc, "messages"):
2929 self.write({"errors": exc.messages})
30 if getattr(exc, "headers", None):
31 for name, val in exc.headers.items():
32 self.set_header(name, val)
3033 self.finish()
3134
3235
7982 [(r"/", HelloHandler), (r"/add", AdderHandler), (r"/dateadd", DateAddHandler)],
8083 debug=True,
8184 )
82 app.listen(5001)
85 port = 5001
86 app.listen(port)
87 print("Serving on port {}".format(port))
8388 tornado.ioloop.IOLoop.instance().start()
11 universal = 1
22
33 [flake8]
4 ignore = E203, E266, E501, W503, E302
4 ignore = E203, E266, E501, W503, E302, W504
55 max-line-length = 100
66 max-complexity = 18
77 select = B,C,E,F,W,T4,B9
88 exclude = .git,.ropeproject,.tox,build,env,venv,__pycache__
9
10 [tool:pytest]
11 filterwarnings =
12 ignore::webargs.core.RemovedInWebargs5Warning
11 import re
22 from setuptools import setup, find_packages
33
4 # Requirements
5 REQUIREMENTS = ["marshmallow>=2.15.0"]
4 INSTALL_REQUIRES = ["marshmallow>=2.15.2"]
5 FRAMEWORKS = [
6 "Flask>=0.12.2",
7 "Django>=1.11.16",
8 "bottle>=0.12.13",
9 "tornado>=4.5.2",
10 "pyramid>=1.8.5",
11 "webapp2>=3.0.0b1",
12 "falcon>=1.3.0",
13 'aiohttp>=3.0.0; python_version >= "3.5"',
14 ]
15 EXTRAS_REQUIRE = {
16 "frameworks": FRAMEWORKS,
17 "tests": [
18 "pytest",
19 "mock",
20 "webtest==2.0.32",
21 'webtest-aiohttp==2.0.0; python_version >= "3.5"',
22 'pytest-aiohttp>=0.3.0; python_version >= "3.5"',
23 ]
24 + FRAMEWORKS,
25 "lint": [
26 "flake8==3.6.0",
27 'flake8-bugbear==18.8.0; python_version >= "3.5"',
28 "pre-commit==1.13.0",
29 ],
30 }
31 EXTRAS_REQUIRE["dev"] = EXTRAS_REQUIRE["tests"] + EXTRAS_REQUIRE["lint"] + ["tox"]
632
733
834 def find_version(fname):
3561 name="webargs",
3662 version=__version__,
3763 description=(
38 "A friendly library for parsing and validating HTTP request arguments, "
64 "Declarative parsing and validation of HTTP request objects, "
3965 "with built-in support for popular web frameworks, including "
4066 "Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp."
4167 ),
4268 long_description=read("README.rst"),
4369 author="Steven Loria",
4470 author_email="[email protected]",
45 url="https://github.com/sloria/webargs",
71 url="https://github.com/marshmallow-code/webargs",
4672 packages=find_packages(exclude=("test*", "examples")),
4773 package_dir={"webargs": "webargs"},
48 install_requires=REQUIREMENTS,
74 install_requires=INSTALL_REQUIRES,
75 extras_require=EXTRAS_REQUIRE,
4976 license="MIT",
5077 zip_safe=False,
5178 keywords=(
75102 "Programming Language :: Python :: 3",
76103 "Programming Language :: Python :: 3.5",
77104 "Programming Language :: Python :: 3.6",
105 "Programming Language :: Python :: 3.7",
78106 "Programming Language :: Python :: Implementation :: CPython",
79107 "Programming Language :: Python :: Implementation :: PyPy",
80108 "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
81109 "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
82110 ],
83111 test_suite="tests",
112 project_urls={
113 "Changelog": "https://webargs.readthedocs.io/en/latest/changelog.html",
114 "Issues": "https://github.com/marshmallow-code/webargs/issues",
115 "Funding": "https://opencollective.com/marshmallow",
116 "Tidelift": "https://tidelift.com/subscription/pkg/pypi-webargs?utm_source=pypi-marshmallow&utm_medium=pypi", # noqa
117 },
84118 )
+0
-124
tasks.py less more
0 # -*- coding: utf-8 -*-
1 import os
2 import sys
3 import webbrowser
4
5 from invoke import task
6
7 docs_dir = "docs"
8 build_dir = os.path.join(docs_dir, "_build")
9
10
11 @task
12 def test(ctx, syntax=True, coverage=False, browse=False):
13 import pytest
14
15 if syntax:
16 precommit(ctx)
17 flake(ctx)
18 args = []
19 if coverage:
20 args.extend(["--cov=webargs", "--cov-report=term", "--cov-report=html"])
21
22 ignores = []
23 if sys.version_info < (3,):
24 ignores += [
25 os.path.join("tests", "test_aiohttpparser.py"),
26 os.path.join("tests", "test_aiohttpparser_async_functions.py"),
27 ]
28 if ignores:
29 for each in ignores:
30 args.append("--ignore={0}".format(each))
31 retcode = pytest.main(args)
32 if coverage and browse:
33 webbrowser.open_new_tab(os.path.join("htmlcov", "index.html"))
34 sys.exit(retcode)
35
36
37 @task
38 def precommit(ctx):
39 ctx.run("pre-commit run --all-files --show-diff-on-failure", echo=True)
40
41
42 @task
43 def flake(ctx):
44 """Run flake8 on codebase."""
45 cmd = "flake8 ."
46 excludes = []
47 if sys.version_info < (3,):
48 excludes += [
49 os.path.join("webargs", "async_decorators.py"),
50 os.path.join("tests", "test_aiohttpparser_async_functions.py"),
51 os.path.join("tests", "apps", "aiohttp_app.py"),
52 os.path.join("tests", "test_aiohttparser.py"),
53 os.path.join("webargs", "asyncparser.py"),
54 os.path.join("webargs", "aiohttpparser.py"),
55 os.path.join("examples", "annotations_example.py"),
56 "build",
57 ]
58 if excludes:
59 cmd += " --exclude={0}".format(",".join(excludes))
60 ctx.run(cmd, echo=True)
61
62
63 @task
64 def clean(ctx):
65 ctx.run("rm -rf build")
66 ctx.run("rm -rf dist")
67 ctx.run("rm -rf webargs.egg-info")
68 clean_docs(ctx)
69 print("Cleaned up.")
70
71
72 @task
73 def readme(ctx, browse=False):
74 ctx.run("rst2html.py README.rst > README.html")
75 if browse:
76 webbrowser.open_new_tab("README.html")
77
78
79 @task
80 def clean_docs(ctx):
81 ctx.run("rm -rf %s" % build_dir)
82
83
84 @task
85 def browse_docs(ctx):
86 path = os.path.join(build_dir, "index.html")
87 webbrowser.open_new_tab(path)
88
89
90 def build_docs(ctx, browse):
91 ctx.run("sphinx-build %s %s" % (docs_dir, build_dir), echo=True)
92 if browse:
93 browse_docs(ctx)
94
95
96 @task
97 def docs(ctx, clean=False, browse=False, watch=False):
98 """Build the docs."""
99 if clean:
100 clean_docs(ctx)
101 if watch:
102 watch_docs(ctx, browse=browse)
103 else:
104 build_docs(ctx, browse=browse)
105
106
107 @task
108 def watch_docs(ctx, browse=False):
109 """Run build the docs when a file changes."""
110 try:
111 import sphinx_autobuild # noqa
112 except ImportError:
113 print("ERROR: watch task requires the sphinx_autobuild package.")
114 print("Install it with:")
115 print(" pip install sphinx-autobuild")
116 sys.exit(1)
117 ctx.run(
118 "sphinx-autobuild {0} {1} {2} -z webargs".format(
119 "--open-browser" if browse else "", docs_dir, build_dir
120 ),
121 echo=True,
122 pty=True,
123 )
7070 @use_kwargs({"value": fields.Int()})
7171 async def echo_use_kwargs_with_path_param(request, value):
7272 return json_response({"value": value})
73
74
75 @use_args({"page": fields.Int(), "q": fields.Int()}, locations=("query",))
76 @use_args({"name": fields.Str()}, locations=("json",))
77 async def echo_use_args_multiple(request, query_parsed, json_parsed):
78 return json_response({"query_parsed": query_parsed, "json_parsed": json_parsed})
7379
7480
7581 async def always_error(request):
192198 "/echo_use_kwargs_with_path_param/{name}",
193199 echo_use_kwargs_with_path_param,
194200 )
201 add_route(app, ["POST"], "/echo_use_args_multiple", echo_use_args_multiple)
195202 add_route(app, ["GET", "POST"], "/error", always_error)
196203 add_route(app, ["GET", "POST"], "/error400", error400)
197204 add_route(app, ["GET"], "/error_invalid", error_invalid)
183183 @app.errorhandler(422)
184184 def handle_validation_error(err):
185185 assert isinstance(err.data["schema"], ma.Schema)
186 return J({"errors": err.exc.messages}), 422
186 return J({"errors": err.exc.messages}), err.code
+0
-188
tests/common.py less more
0 # -*- coding: utf-8 -*-
1 import json
2
3 import pytest
4 import webtest
5
6 from webargs.core import MARSHMALLOW_VERSION_INFO
7
8
9 class CommonTestCase(object):
10 """Base test class that defines test methods for common functionality across all
11 parsers. Subclasses must define `create_app`, which returns a WSGI-like app.
12 """
13
14 def create_app(self):
15 """Return a WSGI app"""
16 raise NotImplementedError("Must define create_app()")
17
18 def create_testapp(self, app):
19 return webtest.TestApp(app)
20
21 def before_create_app(self):
22 pass
23
24 def after_create_app(self):
25 pass
26
27 @pytest.fixture(scope="class")
28 def testapp(self):
29 self.before_create_app()
30 yield self.create_testapp(self.create_app())
31 self.after_create_app()
32
33 def test_parse_querystring_args(self, testapp):
34 assert testapp.get("/echo?name=Fred").json == {"name": "Fred"}
35
36 def test_parse_querystring_with_query_location_specified(self, testapp):
37 assert testapp.get("/echo_query?name=Steve").json == {"name": "Steve"}
38
39 def test_parse_form(self, testapp):
40 assert testapp.post("/echo", {"name": "Joe"}).json == {"name": "Joe"}
41
42 def test_parse_json(self, testapp):
43 assert testapp.post_json("/echo", {"name": "Fred"}).json == {"name": "Fred"}
44
45 def test_parse_querystring_default(self, testapp):
46 assert testapp.get("/echo").json == {"name": "World"}
47
48 def test_parse_json_default(self, testapp):
49 assert testapp.post_json("/echo", {}).json == {"name": "World"}
50
51 def test_parse_json_with_charset(self, testapp):
52 res = testapp.post(
53 "/echo",
54 json.dumps({"name": "Steve"}),
55 content_type="application/json;charset=UTF-8",
56 )
57 assert res.json == {"name": "Steve"}
58
59 def test_parse_json_with_vendor_media_type(self, testapp):
60 res = testapp.post(
61 "/echo",
62 json.dumps({"name": "Steve"}),
63 content_type="application/vnd.api+json;charset=UTF-8",
64 )
65 assert res.json == {"name": "Steve"}
66
67 def test_parse_json_ignores_extra_data(self, testapp):
68 assert testapp.post_json("/echo", {"extra": "data"}).json == {"name": "World"}
69
70 def test_parse_json_blank(self, testapp):
71 assert testapp.post_json("/echo", None).json == {"name": "World"}
72
73 def test_parse_json_ignore_unexpected_int(self, testapp):
74 assert testapp.post_json("/echo", 1).json == {"name": "World"}
75
76 def test_parse_json_ignore_unexpected_list(self, testapp):
77 assert testapp.post_json("/echo", [{"extra": "data"}]).json == {"name": "World"}
78
79 def test_parse_json_many_schema_invalid_input(self, testapp):
80 res = testapp.post_json(
81 "/echo_many_schema", [{"name": "a"}], expect_errors=True
82 )
83 assert res.status_code == 422
84
85 def test_parse_json_many_schema(self, testapp):
86 res = testapp.post_json("/echo_many_schema", [{"extra": "data"}]).json
87 assert res == [{"name": "World"}]
88
89 def test_parse_json_many_schema_ignore_malformed_data(self, testapp):
90 assert testapp.post_json("/echo_many_schema", {"extra": "data"}).json == []
91
92 def test_parsing_form_default(self, testapp):
93 assert testapp.post("/echo", {}).json == {"name": "World"}
94
95 def test_parse_querystring_multiple(self, testapp):
96 expected = {"name": ["steve", "Loria"]}
97 assert testapp.get("/echo_multi?name=steve&name=Loria").json == expected
98
99 def test_parse_form_multiple(self, testapp):
100 expected = {"name": ["steve", "Loria"]}
101 assert (
102 testapp.post("/echo_multi", {"name": ["steve", "Loria"]}).json == expected
103 )
104
105 def test_parse_json_list(self, testapp):
106 expected = {"name": ["Steve"]}
107 assert testapp.post_json("/echo_multi", {"name": "Steve"}).json == expected
108
109 def test_parse_json_with_nonascii_chars(self, testapp):
110 text = u"øˆƒ£ºº∆ƒˆ∆"
111 assert testapp.post_json("/echo", {"name": text}).json == {"name": text}
112
113 def test_validation_error_returns_422_response(self, testapp):
114 res = testapp.post("/echo", {"name": "b"}, expect_errors=True)
115 assert res.status_code == 422
116
117 def test_user_validation_error_returns_422_response_by_default(self, testapp):
118 res = testapp.post_json("/error", {"text": "foo"}, expect_errors=True)
119 assert res.status_code == 422
120
121 @pytest.mark.skipif(
122 MARSHMALLOW_VERSION_INFO < (2, 7),
123 reason="status_code only works in marshmallow>=2.7",
124 )
125 def test_user_validation_error_with_status_code(self, testapp):
126 res = testapp.post_json("/error400", {"text": "foo"}, expect_errors=True)
127 assert res.status_code == 400
128
129 def test_use_args_decorator(self, testapp):
130 assert testapp.get("/echo_use_args?name=Fred").json == {"name": "Fred"}
131
132 def test_use_args_with_path_param(self, testapp):
133 url = "/echo_use_args_with_path_param/foo"
134 res = testapp.get(url + "?value=42")
135 assert res.json == {"value": 42}
136
137 def test_use_args_with_validation(self, testapp):
138 result = testapp.post("/echo_use_args_validated", {"value": 43})
139 assert result.status_code == 200
140 result = testapp.post(
141 "/echo_use_args_validated", {"value": 41}, expect_errors=True
142 )
143 assert result.status_code == 422
144
145 def test_use_kwargs_decorator(self, testapp):
146 assert testapp.get("/echo_use_kwargs?name=Fred").json == {"name": "Fred"}
147
148 def test_use_kwargs_with_path_param(self, testapp):
149 url = "/echo_use_kwargs_with_path_param/foo"
150 res = testapp.get(url + "?value=42")
151 assert res.json == {"value": 42}
152
153 def test_parsing_headers(self, testapp):
154 res = testapp.get("/echo_headers", headers={"name": "Fred"})
155 assert res.json == {"name": "Fred"}
156
157 def test_parsing_cookies(self, testapp):
158 testapp.set_cookie("name", "Steve")
159 res = testapp.get("/echo_cookie")
160 assert res.json == {"name": "Steve"}
161
162 def test_parse_nested_json(self, testapp):
163 res = testapp.post_json(
164 "/echo_nested", {"name": {"first": "Steve", "last": "Loria"}}
165 )
166 assert res.json == {"name": {"first": "Steve", "last": "Loria"}}
167
168 def test_parse_nested_many_json(self, testapp):
169 in_data = {"users": [{"id": 1, "name": "foo"}, {"id": 2, "name": "bar"}]}
170 res = testapp.post_json("/echo_nested_many", in_data)
171 assert res.json == in_data
172
173 # Regression test for https://github.com/sloria/webargs/issues/120
174 def test_parse_nested_many_missing(self, testapp):
175 in_data = {}
176 res = testapp.post_json("/echo_nested_many", in_data)
177 assert res.json == {}
178
179 def test_parse_json_if_no_json(self, testapp):
180 res = testapp.post("/echo")
181 assert res.json == {"name": "World"}
182
183 def test_parse_files(self, testapp):
184 res = testapp.post(
185 "/echo_file", {"myfile": webtest.Upload("README.rst", b"data")}
186 )
187 assert res.json == {"myfile": "data"}
+0
-65
tests/test_aiohttpparser.py less more
0 # -*- coding: utf-8 -*-
1
2 import asyncio
3 import webtest_aiohttp
4 import pytest
5
6 from webargs.core import MARSHMALLOW_VERSION_INFO
7 from tests.common import CommonTestCase
8 from tests.apps.aiohttp_app import create_app
9
10
11 class TestAIOHTTPParser(CommonTestCase):
12 def create_app(self):
13 return create_app()
14
15 def create_testapp(self, app):
16 loop = asyncio.get_event_loop()
17 self.loop = loop
18 return webtest_aiohttp.TestApp(app, loop=loop)
19
20 def after_create_app(self):
21 self.loop.close()
22
23 @pytest.mark.skip(reason="files location not supported for aiohttpparser")
24 def test_parse_files(self, testapp):
25 pass
26
27 def test_parse_match_info(self, testapp):
28 assert testapp.get("/echo_match_info/42").json == {"mymatch": 42}
29
30 def test_use_args_on_method_handler(self, testapp):
31 assert testapp.get("/echo_method").json == {"name": "World"}
32 assert testapp.get("/echo_method?name=Steve").json == {"name": "Steve"}
33 assert testapp.get("/echo_method_view").json == {"name": "World"}
34 assert testapp.get("/echo_method_view?name=Steve").json == {"name": "Steve"}
35
36 def test_invalid_status_code_passed_to_validation_error(self, testapp):
37 res = testapp.get("/error_invalid?text=foo", expect_errors=True)
38 assert res.status_code == 500
39
40 # regression test for https://github.com/sloria/webargs/issues/165
41 def test_multiple_args(self, testapp):
42 res = testapp.post_json(
43 "/echo_multiple_args", {"first": "1", "last": "2", "_ignore": 0}
44 )
45 assert res.json == {"first": "1", "last": "2"}
46
47 # regression test for https://github.com/sloria/webargs/issues/145
48 def test_nested_many_with_data_key(self, testapp):
49 res = testapp.post_json("/echo_nested_many_data_key", {"x_field": [{"id": 42}]})
50 # https://github.com/marshmallow-code/marshmallow/pull/714
51 if MARSHMALLOW_VERSION_INFO[0] < 3:
52 assert res.json == {"x_field": [{"id": 42}]}
53
54 res = testapp.post_json("/echo_nested_many_data_key", {"X-Field": [{"id": 24}]})
55 assert res.json == {"x_field": [{"id": 24}]}
56
57 res = testapp.post_json("/echo_nested_many_data_key", {})
58 assert res.json == {}
59
60 def test_schema_as_kwargs_view(self, testapp):
61 assert testapp.get("/echo_use_schema_as_kwargs").json == {"name": "World"}
62 assert testapp.get("/echo_use_schema_as_kwargs?name=Chandler").json == {
63 "name": "Chandler"
64 }
+0
-57
tests/test_aiohttpparser_async_functions.py less more
0 import pytest
1 import webtest_aiohttp
2 from aiohttp.web import Application, json_response
3
4 from webargs import fields
5 from webargs.aiohttpparser import parser, use_args, use_kwargs
6
7 ##### Test app handlers #####
8
9 hello_args = {"name": fields.Str(missing="World", validate=lambda n: len(n) >= 3)}
10
11
12 async def echo_parse(request):
13 parsed = await parser.parse(hello_args, request)
14 return json_response(parsed)
15
16
17 @use_args(hello_args)
18 async def echo_use_args(request, args):
19 return json_response(args)
20
21
22 @use_kwargs(hello_args)
23 async def echo_use_kwargs(request, name):
24 return json_response({"name": name})
25
26
27 ##### Fixtures #####
28
29
30 @pytest.fixture()
31 def app():
32 app_ = Application()
33 app_.router.add_route("GET", "/echo", echo_parse)
34 app_.router.add_route("GET", "/echo_use_args", echo_use_args)
35 app_.router.add_route("GET", "/echo_use_kwargs", echo_use_kwargs)
36 return app_
37
38
39 @pytest.fixture()
40 def testapp(app, loop):
41 return webtest_aiohttp.TestApp(app, loop=loop)
42
43
44 ##### Tests #####
45
46
47 def test_async_parse(testapp):
48 assert testapp.get("/echo?name=Steve").json == {"name": "Steve"}
49
50
51 def test_async_use_args(testapp):
52 assert testapp.get("/echo_use_args?name=Steve").json == {"name": "Steve"}
53
54
55 def test_async_use_kwargs(testapp):
56 assert testapp.get("/echo_use_kwargs?name=Steve").json == {"name": "Steve"}
00 import pytest
11
22 from .apps.bottle_app import app
3 from .common import CommonTestCase
3 from webargs.testing import CommonTestCase
44
55
66 class TestBottleParser(CommonTestCase):
11 import itertools
22 import mock
33 import sys
4 import datetime
45
56 import pytest
67 from marshmallow import Schema, post_load, class_registry, validates_schema
1213 from webargs.core import (
1314 Parser,
1415 get_value,
16 dict2schema,
1517 argmap2schema,
1618 is_json,
1719 get_mimetype,
2022
2123
2224 strict_kwargs = {"strict": True} if MARSHMALLOW_VERSION_INFO[0] < 3 else {}
25
26
27 class MockHTTPError(Exception):
28 def __init__(self, status_code, headers):
29 self.status_code = status_code
30 self.headers = headers
31 super(MockHTTPError, self).__init__(self, "HTTP Error occurred")
2332
2433
2534 class MockRequestParser(Parser):
122131 assert exc.status_code == 422
123132
124133
125 # https://github.com/sloria/webargs/issues/180#issuecomment-394869645
134 # https://github.com/marshmallow-code/webargs/issues/180#issuecomment-394869645
126135 def test_overriding_default_status_code(web_request):
127136 class MockRequestParserThatReturns400s(MockRequestParser):
128137 DEFAULT_VALIDATION_STATUS = 400
169178 assert excinfo.value.messages["foo"][0] == "Missing data for required field."
170179
171180
172 # Regression test for https://github.com/sloria/webargs/issues/107
181 # Regression test for https://github.com/marshmallow-code/webargs/issues/107
173182 def test_parse_list_allow_none(parser, web_request):
174183 web_request.json = {"foo": None}
175184 args = {"foo": fields.List(fields.Field(allow_none=True), allow_none=True)}
393402 parser.parse(args, web_request, locations=("json",))
394403
395404 assert "We need foo" in excinfo.value.messages["foo"]
396 assert "foo" in excinfo.value.field_names
405 if MARSHMALLOW_VERSION_INFO[0] < 3:
406 assert "foo" in excinfo.value.field_names
397407
398408
399409 def test_required_with_custom_error_and_validation_error(web_request):
411421 parser.parse(args, web_request, locations=("json",))
412422
413423 assert "foo required length is 3" in excinfo.value.args[0]["foo"]
414 assert "foo" in excinfo.value.field_names
424 if MARSHMALLOW_VERSION_INFO[0] < 3:
425 assert "foo" in excinfo.value.field_names
415426
416427
417428 def test_full_input_validator_receives_nonascii_input(web_request):
437448 assert get_value({"foo": 42}, "foo", False) == 42
438449 assert get_value({"foo": 42}, "bar", False) is missing
439450 assert get_value({"foos": ["a", "b"]}, "foos", True) == ["a", "b"]
440 # https://github.com/sloria/webargs/pull/30
451 # https://github.com/marshmallow-code/webargs/pull/30
441452 assert get_value({"foos": ["a", "b"]}, "bar", True) is missing
442453
443454
473484 assert parsed == {"content_type": "application/json"}
474485
475486
476 # https://github.com/sloria/webargs/issues/118
487 # https://github.com/marshmallow-code/webargs/issues/118
477488 @pytest.mark.skipif(
478489 MARSHMALLOW_VERSION_INFO[0] >= 3, reason="Behaviour changed in marshmallow 3"
479490 )
526537 def test_parse_nested_with_missing_key_and_data_key(web_request):
527538 parser = MockRequestParser()
528539
529 web_request.json = {"nested_arg": {"payload": "OK"}}
540 web_request.json = {"nested_arg": {}}
530541 data_key_kwargs = {
531542 "load_from" if (MARSHMALLOW_VERSION_INFO[0] < 3) else "data_key": "miss"
532543 }
601612 assert viewfunc() == {"json": {"username": "foo"}, "query": {"page": 42}}
602613
603614
604 def test_use_args_doesnt_change_docstring(parser):
605 @parser.use_args({"val": fields.Int()})
606 def viewfunc(args):
607 """View docstring"""
608 pass
609
610 assert viewfunc.__doc__ == "View docstring"
611
612
613 def test_use_kwargs_doesnt_change_docstring(parser):
614 @parser.use_kwargs({"val": fields.Int()})
615 def viewfunc(val):
615 @pytest.mark.parametrize("decorator_name", ["use_args", "use_kwargs"])
616 def test_decorators_dont_change_docstring(parser, decorator_name):
617 decorator = getattr(parser, decorator_name)
618
619 @decorator({"val": fields.Int()})
620 def viewfunc(*args, **kwargs):
616621 """View docstring"""
617622 pass
618623
701706 strict = True
702707
703708 def test_passing_schema_to_parse(self, parser, web_request):
704 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
709 web_request.json = {"email": "[email protected]", "password": "bar"}
705710
706711 result = parser.parse(self.UserSchema(**strict_kwargs), web_request)
707712
709714
710715 def test_use_args_can_be_passed_a_schema(self, web_request, parser):
711716
712 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
717 web_request.json = {"email": "[email protected]", "password": "bar"}
713718
714719 @parser.use_args(self.UserSchema(**strict_kwargs), web_request)
715720 def viewfunc(args):
718723 assert viewfunc() == {"email": "[email protected]", "password": "bar"}
719724
720725 def test_passing_schema_factory_to_parse(self, parser, web_request):
721 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
726 web_request.json = {"email": "[email protected]", "password": "bar"}
722727
723728 def factory(req):
724729 assert req is web_request
729734 assert result == {"email": "[email protected]", "password": "bar"}
730735
731736 def test_use_args_can_be_passed_a_schema_factory(self, web_request, parser):
732 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
737 web_request.json = {"email": "[email protected]", "password": "bar"}
733738
734739 def factory(req):
735740 assert req is web_request
743748
744749 def test_use_kwargs_can_be_passed_a_schema(self, web_request, parser):
745750
746 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
751 web_request.json = {"email": "[email protected]", "password": "bar"}
747752
748753 @parser.use_kwargs(self.UserSchema(**strict_kwargs), web_request)
749754 def viewfunc(email, password):
752757 assert viewfunc() == {"email": "[email protected]", "password": "bar"}
753758
754759 def test_use_kwargs_can_be_passed_a_schema_factory(self, web_request, parser):
755 web_request.json = {"id": 12, "email": "[email protected]", "password": "bar"}
760 web_request.json = {"email": "[email protected]", "password": "bar"}
756761
757762 def factory(req):
758763 assert req is web_request
782787 assert "strict=True" in str(warning.message)
783788
784789 def test_use_kwargs_stacked(self, web_request, parser):
785 web_request.json = {
786 "id": 12,
787 "email": "[email protected]",
788 "password": "bar",
789 "page": 42,
790 }
790 web_request.json = {"email": "[email protected]", "password": "bar", "page": 42}
791791
792792 @parser.use_kwargs({"page": fields.Int()}, web_request)
793793 @parser.use_kwargs(self.UserSchema(**strict_kwargs), web_request)
796796
797797 assert viewfunc() == {"email": "[email protected]", "password": "bar", "page": 42}
798798
799 # Regression test for https://github.com/sloria/webargs/issues/146
799 # Regression test for https://github.com/marshmallow-code/webargs/issues/146
800800 def test_parse_does_not_add_missing_values_to_schema_validator(
801801 self, web_request, parser
802802 ):
856856 assert viewfunc() == {"username": "foo", "password": missing}
857857
858858
859 # https://github.com/marshmallow-code/webargs/issues/252
860 def test_use_kwargs_force_all_false(web_request, parser):
861 user_args = {"username": fields.Str(required=True), "password": fields.Str()}
862 web_request.json = {"username": "foo"}
863
864 @parser.use_kwargs(user_args, web_request, force_all=False)
865 def viewfunc(username, **kwargs):
866 assert "password" not in kwargs
867 return {"username": username}
868
869 assert viewfunc() == {"username": "foo"}
870
871 class MySchema(Schema):
872 username = fields.Str(required=True)
873 password = fields.Str()
874
875 web_request.json = {"username": "sloria"}
876
877 # https://github.com/marshmallow-code/webargs/pull/307#issuecomment-441139909
878 @parser.use_kwargs(MySchema(partial=True), web_request, force_all=False)
879 def viewfunc2(username, **kwargs):
880 assert "password" not in kwargs
881 return {"username": username}
882
883 assert viewfunc2() == {"username": "sloria"}
884
885
859886 def test_delimited_list_default_delimiter(web_request, parser):
860887 web_request.json = {"ids": "1,2,3"}
861 schema_cls = argmap2schema({"ids": fields.DelimitedList(fields.Int())})
888 schema_cls = dict2schema({"ids": fields.DelimitedList(fields.Int())})
862889 schema = schema_cls()
863890
864891 parsed = parser.parse(schema, web_request)
871898
872899 def test_delimited_list_as_string(web_request, parser):
873900 web_request.json = {"ids": "1,2,3"}
874 schema_cls = argmap2schema(
901 schema_cls = dict2schema(
875902 {"ids": fields.DelimitedList(fields.Int(), as_string=True)}
876903 )
877904 schema = schema_cls()
884911 assert data["ids"] == "1,2,3"
885912
886913
914 def test_delimited_list_as_string_v2(web_request, parser):
915 web_request.json = {"dates": "2018-11-01,2018-11-02"}
916 schema_cls = dict2schema(
917 {
918 "dates": fields.DelimitedList(
919 fields.DateTime(format="%Y-%m-%d"), as_string=True
920 )
921 }
922 )
923 schema = schema_cls()
924
925 parsed = parser.parse(schema, web_request)
926 assert parsed["dates"] == [
927 datetime.datetime(2018, 11, 1),
928 datetime.datetime(2018, 11, 2),
929 ]
930
931 dumped = schema.dump(parsed)
932 data = dumped.data if MARSHMALLOW_VERSION_INFO[0] < 3 else dumped
933 assert data["dates"] == "2018-11-01,2018-11-02"
934
935
887936 def test_delimited_list_custom_delimiter(web_request, parser):
888937 web_request.json = {"ids": "1|2|3"}
889 schema_cls = argmap2schema(
890 {"ids": fields.DelimitedList(fields.Int(), delimiter="|")}
891 )
938 schema_cls = dict2schema({"ids": fields.DelimitedList(fields.Int(), delimiter="|")})
892939 schema = schema_cls()
893940
894941 parsed = parser.parse(schema, web_request)
897944
898945 def test_delimited_list_load_list(web_request, parser):
899946 web_request.json = {"ids": [1, 2, 3]}
900 schema_cls = argmap2schema({"ids": fields.DelimitedList(fields.Int())})
947 schema_cls = dict2schema({"ids": fields.DelimitedList(fields.Int())})
901948 schema = schema_cls()
902949
903950 parsed = parser.parse(schema, web_request)
904951 assert parsed["ids"] == [1, 2, 3]
905952
906953
907 # Regresion test for https://github.com/sloria/webargs/issues/149
954 # Regresion test for https://github.com/marshmallow-code/webargs/issues/149
908955 def test_delimited_list_passed_invalid_type(web_request, parser):
909956 web_request.json = {"ids": 1}
910 schema_cls = argmap2schema({"ids": fields.DelimitedList(fields.Int())})
957 schema_cls = dict2schema({"ids": fields.DelimitedList(fields.Int())})
911958 schema = schema_cls()
912959
913960 with pytest.raises(ValidationError) as excinfo:
9571004
9581005
9591006 class TestValidationError:
960 def test_can_store_status_code(self):
961 err = ValidationError("foo", status_code=401)
1007 def test_status_code_is_deprecated(self):
1008 with pytest.warns(DeprecationWarning):
1009 err = ValidationError("foo", status_code=401)
9621010 assert err.status_code == 401
9631011
964 def test_can_store_headers(self):
965 err = ValidationError("foo", headers={"X-Food-Header": "pizza"})
1012 def test_headers_is_deprecated(self):
1013 with pytest.warns(DeprecationWarning):
1014 err = ValidationError("foo", headers={"X-Food-Header": "pizza"})
9661015 assert err.headers == {"X-Food-Header": "pizza"}
9671016
9681017 def test_str(self):
9901039 parser.parse(args, web_request)
9911040
9921041
993 def test_argmap2schema():
1042 def test_dict2schema():
9941043 data_key_kwargs = {
9951044 "load_from" if (MARSHMALLOW_VERSION_INFO[0] < 3) else "data_key": "content-type"
9961045 }
10011050 "content_type": fields.Str(**data_key_kwargs),
10021051 }
10031052
1004 schema_cls = argmap2schema(argmap)
1053 schema_cls = dict2schema(argmap)
10051054 assert issubclass(schema_cls, Schema)
10061055
10071056 schema = schema_cls()
10131062 assert schema.opts.strict is True
10141063
10151064
1016 # Regression test for https://github.com/sloria/webargs/issues/101
1017 @pytest.mark.skipif(
1018 MARSHMALLOW_VERSION_INFO < (2, 7, 1), reason="will only work on marshmallow>=2.7.1"
1019 )
1020 def test_argmap2schema_doesnt_add_to_class_registry():
1065 # Regression test for https://github.com/marshmallow-code/webargs/issues/101
1066 def test_dict2schema_doesnt_add_to_class_registry():
10211067 old_n_entries = len(
10221068 list(
10231069 itertools.chain(
10261072 )
10271073 )
10281074 argmap = {"id": fields.Field()}
1029 argmap2schema(argmap)
1030 argmap2schema(argmap)
1075 dict2schema(argmap)
1076 dict2schema(argmap)
10311077 new_n_entries = len(
10321078 list(
10331079 itertools.chain(
10381084 assert new_n_entries == old_n_entries
10391085
10401086
1041 def test_argmap2schema_with_nesting():
1087 def test_dict2schema_with_nesting():
10421088 argmap = {"nest": fields.Nested({"foo": fields.Field()})}
1043 schema_cls = argmap2schema(argmap)
1089 schema_cls = dict2schema(argmap)
10441090 assert issubclass(schema_cls, Schema)
10451091 schema = schema_cls()
10461092 assert "nest" in schema.fields
10481094 assert "foo" in schema.fields["nest"].schema.fields
10491095
10501096
1097 def test_argmap2schema_is_deprecated():
1098 with pytest.warns(DeprecationWarning):
1099 argmap2schema({"arg": fields.Str()})
1100
1101
10511102 def test_is_json():
10521103 assert is_json(None) is False
10531104 assert is_json("application/json") is True
10591110 assert get_mimetype("application/json") == "application/json"
10601111 assert get_mimetype("application/json;charset=utf8") == "application/json"
10611112 assert get_mimetype(None) is None
1113
1114
1115 class MockRequestParserWithErrorHandler(MockRequestParser):
1116 def handle_error(
1117 self, error, req, schema, error_status_code=None, error_headers=None
1118 ):
1119 assert isinstance(error, ValidationError)
1120 assert isinstance(schema, Schema)
1121 raise MockHTTPError(error_status_code, error_headers)
1122
1123
1124 def test_parse_with_error_status_code_and_headers(web_request):
1125 parser = MockRequestParserWithErrorHandler()
1126 web_request.json = {"foo": 42}
1127 args = {"foo": fields.Field(validate=lambda x: False)}
1128 with pytest.raises(MockHTTPError) as excinfo:
1129 parser.parse(
1130 args, web_request, error_status_code=418, error_headers={"X-Foo": "bar"}
1131 )
1132 error = excinfo.value
1133 assert error.status_code == 418
1134 assert error.headers == {"X-Foo": "bar"}
33 import pytest
44 from tests.apps.django_app.base.wsgi import application
55
6 from tests.common import CommonTestCase
6 from webargs.testing import CommonTestCase
77
88
99 class TestDjangoParser(CommonTestCase):
00 # -*- coding: utf-8 -*-
11 import pytest
22
3 from tests.common import CommonTestCase
3 from webargs.testing import CommonTestCase
44 from tests.apps.falcon_app import create_app
55
66
1111 from webargs.core import MARSHMALLOW_VERSION_INFO
1212
1313 from .apps.flask_app import app
14 from .common import CommonTestCase
14 from webargs.testing import CommonTestCase
1515
1616
1717 class TestFlaskParser(CommonTestCase):
4343 res = testapp.post("/echo_use_kwargs_missing", {"username": "foo"})
4444 assert res.json == {"username": "foo"}
4545
46 # regression test for https://github.com/sloria/webargs/issues/145
46 # regression test for https://github.com/marshmallow-code/webargs/issues/145
4747 def test_nested_many_with_data_key(self, testapp):
4848 res = testapp.post_json("/echo_nested_many_data_key", {"x_field": [{"id": 42}]})
4949 # https://github.com/marshmallow-code/marshmallow/pull/714
0 # -*- coding: utf-8 -*-
1
2 import asyncio
3 import webtest
4 import webtest_aiohttp
5 import pytest
6
7 from io import BytesIO
8 from webargs.core import MARSHMALLOW_VERSION_INFO
9 from webargs.testing import CommonTestCase
10 from tests.apps.aiohttp_app import create_app
11
12
13 class TestAIOHTTPParser(CommonTestCase):
14 def create_app(self):
15 return create_app()
16
17 def create_testapp(self, app):
18 loop = asyncio.get_event_loop()
19 self.loop = loop
20 return webtest_aiohttp.TestApp(app, loop=loop)
21
22 def after_create_app(self):
23 self.loop.close()
24
25 @pytest.mark.skip(reason="files location not supported for aiohttpparser")
26 def test_parse_files(self, testapp):
27 pass
28
29 def test_parse_match_info(self, testapp):
30 assert testapp.get("/echo_match_info/42").json == {"mymatch": 42}
31
32 def test_use_args_on_method_handler(self, testapp):
33 assert testapp.get("/echo_method").json == {"name": "World"}
34 assert testapp.get("/echo_method?name=Steve").json == {"name": "Steve"}
35 assert testapp.get("/echo_method_view").json == {"name": "World"}
36 assert testapp.get("/echo_method_view?name=Steve").json == {"name": "Steve"}
37
38 def test_invalid_status_code_passed_to_validation_error(self, testapp):
39 res = testapp.get("/error_invalid?text=foo", expect_errors=True)
40 assert res.status_code == 500
41
42 # regression test for https://github.com/marshmallow-code/webargs/issues/165
43 def test_multiple_args(self, testapp):
44 res = testapp.post_json(
45 "/echo_multiple_args", {"first": "1", "last": "2", "_ignore": 0}
46 )
47 assert res.json == {"first": "1", "last": "2"}
48
49 # regression test for https://github.com/marshmallow-code/webargs/issues/145
50 def test_nested_many_with_data_key(self, testapp):
51 res = testapp.post_json("/echo_nested_many_data_key", {"x_field": [{"id": 42}]})
52 # https://github.com/marshmallow-code/marshmallow/pull/714
53 if MARSHMALLOW_VERSION_INFO[0] < 3:
54 assert res.json == {"x_field": [{"id": 42}]}
55
56 res = testapp.post_json("/echo_nested_many_data_key", {"X-Field": [{"id": 24}]})
57 assert res.json == {"x_field": [{"id": 24}]}
58
59 res = testapp.post_json("/echo_nested_many_data_key", {})
60 assert res.json == {}
61
62 def test_schema_as_kwargs_view(self, testapp):
63 assert testapp.get("/echo_use_schema_as_kwargs").json == {"name": "World"}
64 assert testapp.get("/echo_use_schema_as_kwargs?name=Chandler").json == {
65 "name": "Chandler"
66 }
67
68 # https://github.com/marshmallow-code/webargs/pull/297
69 def test_empty_json_body(self, testapp):
70 environ = {"CONTENT_TYPE": "application/json", "wsgi.input": BytesIO(b"")}
71 req = webtest.TestRequest.blank("/echo", environ)
72 resp = testapp.do_request(req)
73 assert resp.json == {"name": "World"}
74
75 def test_use_args_multiple(self, testapp):
76 res = testapp.post_json(
77 "/echo_use_args_multiple?page=2&q=10", {"name": "Steve"}
78 )
79 assert res.json == {
80 "query_parsed": {"page": 2, "q": 10},
81 "json_parsed": {"name": "Steve"},
82 }
0 import pytest
1 import webtest_aiohttp
2 from aiohttp.web import Application, json_response
3
4 from webargs import fields
5 from webargs.aiohttpparser import parser, use_args, use_kwargs
6
7 ##### Test app handlers #####
8
9 hello_args = {"name": fields.Str(missing="World", validate=lambda n: len(n) >= 3)}
10
11
12 async def echo_parse(request):
13 parsed = await parser.parse(hello_args, request)
14 return json_response(parsed)
15
16
17 @use_args(hello_args)
18 async def echo_use_args(request, args):
19 return json_response(args)
20
21
22 @use_kwargs(hello_args)
23 async def echo_use_kwargs(request, name):
24 return json_response({"name": name})
25
26
27 ##### Fixtures #####
28
29
30 @pytest.fixture()
31 def app():
32 app_ = Application()
33 app_.router.add_route("GET", "/echo", echo_parse)
34 app_.router.add_route("GET", "/echo_use_args", echo_use_args)
35 app_.router.add_route("GET", "/echo_use_kwargs", echo_use_kwargs)
36 return app_
37
38
39 @pytest.fixture()
40 def testapp(app, loop):
41 return webtest_aiohttp.TestApp(app, loop=loop)
42
43
44 ##### Tests #####
45
46
47 def test_async_parse(testapp):
48 assert testapp.get("/echo?name=Steve").json == {"name": "Steve"}
49
50
51 def test_async_use_args(testapp):
52 assert testapp.get("/echo_use_args?name=Steve").json == {"name": "Steve"}
53
54
55 def test_async_use_kwargs(testapp):
56 assert testapp.get("/echo_use_kwargs?name=Steve").json == {"name": "Steve"}
00 # -*- coding: utf-8 -*-
1 from .common import CommonTestCase
1 from webargs.testing import CommonTestCase
22
33
44 class TestPyramidParser(CommonTestCase):
3030 assert get_value({"foo": 42}, "foo", field) == 42
3131 assert get_value({"foo": 42}, "bar", field) is missing
3232 assert get_value({"foos": ["a", "b"]}, "foos", multifield) == ["a", "b"]
33 # https://github.com/sloria/webargs/pull/30
33 # https://github.com/marshmallow-code/webargs/pull/30
3434 assert get_value({"foos": ["a", "b"]}, "bar", multifield) is missing
3535
3636
00 [tox]
1 envlist =py27,py35,py36,py37
1 envlist=
2 lint
3 py{27,35,36,37}-marshmallow{2,3}
4 docs
5
26 [testenv]
3 deps=
4 -rdev-requirements.txt
5 {py34,py35,py36,py37}: -rdev-requirements-py3.txt
6 commands=
7 invoke test
7 extras = tests
8 deps =
9 marshmallow2: marshmallow==2.15.2
10 marshmallow3: marshmallow>=3.0.0a1,<4.0.0
11 commands =
12 py27: pytest --ignore=tests/test_py3/ {posargs}
13 py{35,36,37}: pytest {posargs}
14
15 [testenv:lint]
16 extras = lint
17 commands = pre-commit run --all-files --show-diff-on-failure
18
19 [testenv:docs]
20 deps = -rdocs/requirements.txt
21 extras =
22 commands = sphinx-build docs/ docs/_build {posargs}
23
24 ; Below tasks are for development only (not run in CI)
25
26 [testenv:watch-docs]
27 deps =
28 -rdocs/requirements.txt
29 sphinx-autobuild
30 extras =
31 commands = sphinx-autobuild --open-browser docs/ docs/_build {posargs} -z webargs
32
33 [testenv:watch-readme]
34 deps = restview
35 skip_install = true
36 commands = restview README.rst
33 # Make marshmallow's validation functions importable from webargs
44 from marshmallow import validate
55
6 from webargs.core import argmap2schema, WebargsError, ValidationError
6 from webargs.core import argmap2schema, dict2schema, WebargsError, ValidationError
77 from webargs import fields
88
9 __version__ = "4.0.0"
9 __version__ = "4.4.1"
1010 __author__ = "Steven Loria"
1111 __license__ = "MIT"
1212
1313
1414 __all__ = (
15 "dict2schema",
1516 "argmap2schema",
1617 "WebargsError",
1718 "ValidationError",
9696 if json_data is None:
9797 if not (req.body_exists and is_json_request(req)):
9898 return core.missing
99 self._cache["json"] = json_data = await req.json()
99 try:
100 json_data = await req.json()
101 except json.JSONDecodeError as e:
102 if e.doc == "":
103 return core.missing
104 else:
105 raise e
106 self._cache["json"] = json_data
100107 return core.get_value(json_data, name, field, allow_many_nested=True)
101108
102109 def parse_headers(self, req, name, field):
121128 """Get request object from a handler function or method. Used internally by
122129 ``use_args`` and ``use_kwargs``.
123130 """
124 if len(args) > 1:
125 req = args[1]
126 else:
127 if isinstance(args[0], web.View):
128 req = args[0].request
129 else:
130 req = args[0]
131 req = None
132 for arg in args:
133 if isinstance(arg, web.Request):
134 req = arg
135 break
136 elif isinstance(arg, web.View):
137 req = arg.request
138 break
131139 assert isinstance(req, web.Request), "Request argument not found for handler"
132140 return req
133141
134 def handle_error(self, error, req, schema):
142 def handle_error(self, error, req, schema, error_status_code, error_headers):
135143 """Handle ValidationErrors and return a JSON response of error messages to the client."""
136 error_class = exception_map.get(error.status_code)
144 error_class = exception_map.get(error_status_code or error.status_code)
137145 if not error_class:
138146 raise LookupError("No exception for {0}".format(error.status_code))
147 headers = error_headers or error.headers
139148 raise error_class(
140149 body=json.dumps(error.messages).encode("utf-8"),
150 headers=headers,
141151 content_type="application/json",
142152 )
143153
33 import collections
44 import functools
55 import inspect
6 import warnings
67
78 import marshmallow as ma
89 from marshmallow.utils import missing
910
1011 from webargs import core
12 from webargs.core import RemovedInWebargs5Warning
1113
1214
1315 class AsyncParser(core.Parser):
5658
5759 # TODO: Lots of duplication from core.Parser here. Rethink.
5860 async def parse(
59 self, argmap, req=None, locations=None, validate=None, force_all=False
61 self,
62 argmap,
63 req=None,
64 locations=None,
65 validate=None,
66 force_all=False,
67 error_status_code=None,
68 error_headers=None,
6069 ):
6170 """Coroutine variant of `webargs.core.Parser`.
6271
7584 data = result.data if core.MARSHMALLOW_VERSION_INFO[0] < 3 else result
7685 self._validate_arguments(data, validators)
7786 except ma.exceptions.ValidationError as error:
78 self._on_validation_error(error, req, schema)
87 self._on_validation_error(
88 error, req, schema, error_status_code, error_headers
89 )
7990 finally:
8091 self.clear_cache()
8192 if force_all:
93 warnings.warn(
94 "Missing arguments will no longer be added to the parsed arguments "
95 "dictionary in version 5.0.0. Pass force_all=False for the new behavior.",
96 RemovedInWebargs5Warning,
97 )
8298 core.fill_in_missing_args(data, schema)
8399 return data
84100
85101 def use_args(
86 self, argmap, req=None, locations=None, as_kwargs=False, validate=None
102 self,
103 argmap,
104 req=None,
105 locations=None,
106 as_kwargs=False,
107 validate=None,
108 force_all=None,
109 error_status_code=None,
110 error_headers=None,
87111 ):
88112 """Decorator that injects parsed arguments into a view function or method.
89113
91115 """
92116 locations = locations or self.locations
93117 request_obj = req
118 force_all_ = force_all if force_all is not None else as_kwargs
94119 # Optimization: If argmap is passed as a dictionary, we only need
95120 # to generate a Schema once
96121 if isinstance(argmap, collections.Mapping):
97 argmap = core.argmap2schema(argmap)()
122 argmap = core.dict2schema(argmap)()
98123
99124 def decorator(func):
100125 req_ = request_obj
104129 @functools.wraps(func)
105130 async def wrapper(*args, **kwargs):
106131 req_obj = req_
107
108 # if as_kwargs is passed, must include all args
109 force_all = as_kwargs
110132
111133 if not req_obj:
112134 req_obj = self.get_request_from_view_args(func, args, kwargs)
116138 req=req_obj,
117139 locations=locations,
118140 validate=validate,
119 force_all=force_all,
141 force_all=force_all_,
142 error_status_code=error_status_code,
143 error_headers=error_headers,
120144 )
121145 if as_kwargs:
122146 kwargs.update(parsed_args)
131155 @functools.wraps(func)
132156 def wrapper(*args, **kwargs):
133157 req_obj = req_
134
135 # if as_kwargs is passed, must include all args
136 force_all = as_kwargs
137158
138159 if not req_obj:
139160 req_obj = self.get_request_from_view_args(func, args, kwargs)
143164 req=req_obj,
144165 locations=locations,
145166 validate=validate,
146 force_all=force_all,
167 force_all=force_all_,
168 error_status_code=error_status_code,
169 error_headers=error_headers,
147170 )
148171 if as_kwargs:
149172 kwargs.update(parsed_args)
5656 """Pull a file from the request."""
5757 return core.get_value(req.files, name, field)
5858
59 def handle_error(self, error, req, schema):
59 def handle_error(self, error, req, schema, error_status_code, error_headers):
6060 """Handles errors during parsing. Aborts the current request with a
6161 400 error.
6262 """
63 status_code = getattr(error, "status_code", self.DEFAULT_VALIDATION_STATUS)
64 headers = getattr(error, "headers", {})
63 status_code = error_status_code or getattr(
64 error, "status_code", self.DEFAULT_VALIDATION_STATUS
65 )
66 headers = error_headers or getattr(error, "headers", {})
6567 raise bottle.HTTPError(
6668 status=status_code, body=error.messages, headers=headers, exception=error
6769 )
55 import inspect
66 import logging
77 import warnings
8 from distutils.version import LooseVersion
89
910 try:
1011 import simplejson as json
2122 __all__ = [
2223 "WebargsError",
2324 "ValidationError",
24 "argmap2schema",
25 "dict2schema",
2526 "is_multiple",
2627 "Parser",
2728 "get_value",
2930 "parse_json",
3031 ]
3132
32 MARSHMALLOW_VERSION_INFO = tuple(
33 [int(part) for part in ma.__version__.split(".") if part.isdigit()]
34 )
33
34 # Copied from marshmallow.utils
35 def _signature(func):
36 if hasattr(inspect, "signature"):
37 return list(inspect.signature(func).parameters.keys())
38 if hasattr(func, "__self__"):
39 # Remove bound arg to match inspect.signature()
40 return inspect.getargspec(func).args[1:]
41 # All args are unbound
42 return inspect.getargspec(func).args
43
44
45 def get_func_args(func):
46 """Given a callable, return a tuple of argument names. Handles
47 `functools.partial` objects and class-based callables.
48 """
49 if isinstance(func, functools.partial):
50 return _signature(func.func)
51 if inspect.isfunction(func) or inspect.ismethod(func):
52 return _signature(func)
53 # Callable class
54 return _signature(func.__call__)
55
56
57 MARSHMALLOW_VERSION_INFO = tuple(LooseVersion(ma.__version__).version)
3558
3659 DEFAULT_VALIDATION_STATUS = 422
60
61
62 class RemovedInWebargs5Warning(DeprecationWarning):
63 pass
3764
3865
3966 class WebargsError(Exception):
4370
4471
4572 class ValidationError(WebargsError, ma.exceptions.ValidationError):
46 """Raised when validation fails on user input. Same as
47 `marshmallow.ValidationError`, with the addition of the ``status_code`` and
48 ``headers`` arguments.
73 """Raised when validation fails on user input.
74
75 .. versionchanged:: 4.2.0
76 status_code and headers arguments are deprecated. Pass
77 error_status_code and error_headers to `Parser.parse`,
78 `Parser.use_args`, and `Parser.use_kwargs` instead.
4979 """
5080
51 def __init__(
52 self, message, status_code=DEFAULT_VALIDATION_STATUS, headers=None, **kwargs
53 ):
54 self.status_code = status_code
81 def __init__(self, message, status_code=None, headers=None, **kwargs):
82 if status_code is not None:
83 warnings.warn(
84 "The status_code argument to ValidationError is deprecated "
85 "and will be removed in 5.0.0. "
86 "Pass error_status_code to Parser.parse, Parser.use_args, "
87 "or Parser.use_kwargs instead.",
88 RemovedInWebargs5Warning,
89 )
90 self.status_code = status_code or DEFAULT_VALIDATION_STATUS
91 if headers is not None:
92 warnings.warn(
93 "The headers argument to ValidationError is deprecated "
94 "and will be removed in 5.0.0. "
95 "Pass error_headers to Parser.parse, Parser.use_args, "
96 "or Parser.use_kwargs instead.",
97 RemovedInWebargs5Warning,
98 )
5599 self.headers = headers
56100 ma.exceptions.ValidationError.__init__(
57101 self, message, status_code=status_code, headers=headers, **kwargs
92136 return ret
93137
94138
95 def argmap2schema(argmap):
96 """Generate a `marshmallow.Schema` class given a dictionary of argument
97 names to `Fields <marshmallow.fields.Field>`.
139 def dict2schema(dct):
140 """Generate a `marshmallow.Schema` class given a dictionary of
141 `Fields <marshmallow.fields.Field>`.
98142 """
99 attrs = argmap.copy()
143 attrs = dct.copy()
100144 if MARSHMALLOW_VERSION_INFO[0] < 3:
101145
102146 class Meta(object):
104148
105149 attrs["Meta"] = Meta
106150 return type(str(""), (ma.Schema,), attrs)
151
152
153 def argmap2schema(argmap):
154 warnings.warn(
155 "argmap2schema is deprecated. Use dict2schema instead.",
156 RemovedInWebargs5Warning,
157 )
158 return dict2schema(argmap)
107159
108160
109161 def is_multiple(field):
316368 parsed[argname] = parsed_value
317369 return parsed
318370
319 def _on_validation_error(self, error, req, schema):
371 def _on_validation_error(
372 self, error, req, schema, error_status_code, error_headers
373 ):
320374 if isinstance(error, ma.exceptions.ValidationError) and not isinstance(
321375 error, ValidationError
322376 ):
323377 # Raise a webargs error instead
324378 kwargs = getattr(error, "kwargs", {})
325 kwargs["field_names"] = error.field_names
326379 kwargs["data"] = error.data
327380 if MARSHMALLOW_VERSION_INFO[0] < 3:
328381 kwargs["fields"] = error.fields
382 kwargs["field_names"] = error.field_names
383 else:
384 kwargs["field_name"] = error.field_name
329385 if "status_code" not in kwargs:
330386 kwargs["status_code"] = self.DEFAULT_VALIDATION_STATUS
331387 error = ValidationError(error.messages, **kwargs)
332388 if self.error_callback:
333 self.error_callback(error, req, schema)
389 if len(get_func_args(self.error_callback)) > 3:
390 self.error_callback(
391 error, req, schema, error_status_code, error_headers
392 )
393 else: # Backwards compat with webargs<=4.2.0
394 warnings.warn(
395 "Error handler functions should include error_status_code and "
396 "error_headers args, or include **kwargs in the signature",
397 DeprecationWarning,
398 )
399 self.error_callback(error, req, schema)
334400 else:
335 self.handle_error(error, req, schema)
401 if len(get_func_args(self.handle_error)) > 3:
402 self.handle_error(error, req, schema, error_status_code, error_headers)
403 else:
404 warnings.warn(
405 "handle_error methods should include error_status_code and "
406 "error_headers args, or include **kwargs in the signature",
407 DeprecationWarning,
408 )
409 self.handle_error(error, req, schema)
336410
337411 def _validate_arguments(self, data, validators):
338412 for validator in validators:
356430 elif callable(argmap):
357431 schema = argmap(req)
358432 else:
359 schema = argmap2schema(argmap)()
433 schema = dict2schema(argmap)()
360434 if MARSHMALLOW_VERSION_INFO[0] < 3 and not schema.strict:
361435 warnings.warn(
362436 "It is highly recommended that you set strict=True on your schema "
365439 )
366440 return schema
367441
368 def parse(self, argmap, req=None, locations=None, validate=None, force_all=False):
442 def parse(
443 self,
444 argmap,
445 req=None,
446 locations=None,
447 validate=None,
448 force_all=False,
449 error_status_code=None,
450 error_headers=None,
451 ):
369452 """Main request parsing method.
370453
371454 :param argmap: Either a `marshmallow.Schema`, a `dict`
378461 :param callable validate: Validation function or list of validation functions
379462 that receives the dictionary of parsed arguments. Validator either returns a
380463 boolean or raises a :exc:`ValidationError`.
464 :param bool force_all: If `True`, missing arguments will be replaced with
465 `missing <marshmallow.utils.missing>`.
466 :param int error_status_code: Status code passed to error handler functions when
467 a `ValidationError` is raised.
468 :param dict error_headers: Headers passed to error handler functions when a
469 a `ValidationError` is raised.
381470
382471 :return: A dictionary of parsed arguments
383472 """
392481 data = result.data if MARSHMALLOW_VERSION_INFO[0] < 3 else result
393482 self._validate_arguments(data, validators)
394483 except ma.exceptions.ValidationError as error:
395 self._on_validation_error(error, req, schema)
484 self._on_validation_error(
485 error, req, schema, error_status_code, error_headers
486 )
396487 finally:
397488 self.clear_cache()
398489 if force_all:
490 warnings.warn(
491 "Missing arguments will no longer be added to the parsed arguments "
492 "dictionary in version 5.0.0. Pass force_all=False for the new behavior.",
493 RemovedInWebargs5Warning,
494 )
399495 fill_in_missing_args(data, schema)
400496 return data
401497
425521 return None
426522
427523 def use_args(
428 self, argmap, req=None, locations=None, as_kwargs=False, validate=None
524 self,
525 argmap,
526 req=None,
527 locations=None,
528 as_kwargs=False,
529 validate=None,
530 force_all=None,
531 error_status_code=None,
532 error_headers=None,
429533 ):
430534 """Decorator that injects parsed arguments into a view function or method.
431535
444548 :param callable validate: Validation function that receives the dictionary
445549 of parsed arguments. If the function returns ``False``, the parser
446550 will raise a :exc:`ValidationError`.
551 :param bool force_all: If `True`, missing arguments will be included
552 in the parsed arguments dictionary with the ``missing`` value.
553 If `False`, missing values will be omitted. If `None`, fall back
554 to the value of ``as_kwargs``.
555 :param int error_status_code: Status code passed to error handler functions when
556 a `ValidationError` is raised.
557 :param dict error_headers: Headers passed to error handler functions when a
558 a `ValidationError` is raised.
447559 """
448560 locations = locations or self.locations
449561 request_obj = req
450562 # Optimization: If argmap is passed as a dictionary, we only need
451563 # to generate a Schema once
452564 if isinstance(argmap, collections.Mapping):
453 argmap = argmap2schema(argmap)()
565 argmap = dict2schema(argmap)()
454566
455567 def decorator(func):
456568 req_ = request_obj
569 force_all_ = force_all if force_all is not None else as_kwargs
457570
458571 @functools.wraps(func)
459572 def wrapper(*args, **kwargs):
460573 req_obj = req_
461
462 # if as_kwargs is passed, must include all args
463 force_all = as_kwargs
464574
465575 if not req_obj:
466576 req_obj = self.get_request_from_view_args(func, args, kwargs)
470580 req=req_obj,
471581 locations=locations,
472582 validate=validate,
473 force_all=force_all,
583 force_all=force_all_,
584 error_status_code=error_status_code,
585 error_headers=error_headers,
474586 )
475587 if as_kwargs:
476588 kwargs.update(parsed_args)
528640
529641 def error_handler(self, func):
530642 """Decorator that registers a custom error handling function. The
531 function should received the raised error, request object, and the
532 `marshmallow.Schema` instance used to parse the request. Overrides
643 function should receive the raised error, request object,
644 `marshmallow.Schema` instance used to parse the request, error status code,
645 and headers to use for the error response. Overrides
533646 the parser's ``handle_error`` method.
534647
535648 Example: ::
544657
545658
546659 @parser.error_handler
547 def handle_error(error, req, schema):
660 def handle_error(error, req, schema, status_code, headers):
548661 raise CustomError(error.messages)
549662
550663 :param callable func: The error callback to register.
590703 """
591704 return missing
592705
593 def handle_error(self, error, req, schema):
706 def handle_error(
707 self, error, req, schema, error_status_code=None, error_headers=None
708 ):
594709 """Called if an error occurs while parsing args. By default, just logs and
595710 raises ``error``.
596711 """
139139 "Parsing files not yet supported by {0}".format(self.__class__.__name__)
140140 )
141141
142 def handle_error(self, error, req, schema):
142 def handle_error(self, error, req, schema, error_status_code, error_headers):
143143 """Handles errors during parsing."""
144 status = status_map.get(error.status_code)
144 status = status_map.get(error_status_code or error.status_code)
145145 if status is None:
146146 raise LookupError("Status code {0} not supported".format(error.status_code))
147 raise HTTPError(status, errors=error.messages)
147 raise HTTPError(status, errors=error.messages, headers=error_headers)
148148
149149
150150 parser = FalconParser()
1616 """
1717 import marshmallow as ma
1818
19 from webargs.core import argmap2schema
19 from webargs.core import dict2schema
2020
2121 __all__ = ["Nested", "DelimitedList"]
2222 # Expose all fields from marshmallow.fields.
3434
3535 def __init__(self, nested, *args, **kwargs):
3636 if isinstance(nested, dict):
37 nested = argmap2schema(nested)
37 nested = dict2schema(nested)
3838 super(Nested, self).__init__(nested, *args, **kwargs)
3939
4040
5757 def _serialize(self, value, attr, obj):
5858 ret = super(DelimitedList, self)._serialize(value, attr, obj)
5959 if self.as_string:
60 return self.delimiter.join(format(each) for each in value)
60 return self.delimiter.join(format(each) for each in ret)
6161 return ret
6262
6363 def _deserialize(self, value, attr, data):
9292 """Pull a file from the request."""
9393 return core.get_value(req.files, name, field)
9494
95 def handle_error(self, error, req, schema):
95 def handle_error(self, error, req, schema, error_status_code, error_headers):
9696 """Handles errors during parsing. Aborts the current HTTP request and
9797 responds with a 422 error.
9898 """
99 status_code = getattr(error, "status_code", self.DEFAULT_VALIDATION_STATUS)
100 abort(status_code, exc=error, messages=error.messages, schema=schema)
99 status_code = error_status_code or getattr(
100 error, "status_code", self.DEFAULT_VALIDATION_STATUS
101 )
102 headers = error_headers or getattr(error, "headers", None)
103 abort(
104 status_code,
105 exc=error,
106 messages=error.messages,
107 schema=schema,
108 headers=headers,
109 )
101110
102111 def get_default_request(self):
103112 """Override to use Flask's thread-local request objec by default"""
7272 """Pull a value from the request's `matchdict`."""
7373 return core.get_value(req.matchdict, name, field)
7474
75 def handle_error(self, error, req, schema):
75 def handle_error(self, error, req, schema, error_status_code, error_headers):
7676 """Handles errors during parsing. Aborts the current HTTP request and
7777 responds with a 400 error.
7878 """
79 status_code = getattr(error, "status_code", 422)
80 raise exception_response(status_code, detail=text_type(error))
79 status_code = error_status_code or getattr(error, "status_code", 422)
80 raise exception_response(
81 status_code, detail=text_type(error), headers=error_headers
82 )
8183
8284 def use_args(
8385 self,
8688 locations=core.Parser.DEFAULT_LOCATIONS,
8789 as_kwargs=False,
8890 validate=None,
91 force_all=None,
92 error_status_code=None,
93 error_headers=None,
8994 ):
9095 """Decorator that injects parsed arguments into a view callable.
9196 Supports the *Class-based View* pattern where `request` is saved as an instance
100105 :param callable validate: Validation function that receives the dictionary
101106 of parsed arguments. If the function returns ``False``, the parser
102107 will raise a :exc:`ValidationError`.
108 :param bool force_all: If `True`, missing arguments will be included
109 in the parsed arguments dictionary with the ``missing`` value.
110 If `False`, missing values will be omitted. If `None`, fall back
111 to the value of ``as_kwargs``.
112 :param int error_status_code: Status code passed to error handler functions when
113 a `ValidationError` is raised.
114 :param dict error_headers: Headers passed to error handler functions when a
115 a `ValidationError` is raised.
103116 """
104117 locations = locations or self.locations
105118 # Optimization: If argmap is passed as a dictionary, we only need
106119 # to generate a Schema once
107120 if isinstance(argmap, collections.Mapping):
108 argmap = core.argmap2schema(argmap)()
121 argmap = core.dict2schema(argmap)()
109122
110123 def decorator(func):
124 force_all_ = force_all if force_all is not None else as_kwargs
125
111126 @functools.wraps(func)
112127 def wrapper(obj, *args, **kwargs):
113128 # The first argument is either `self` or `request`
121136 req=request,
122137 locations=locations,
123138 validate=validate,
124 force_all=as_kwargs,
139 force_all=force_all_,
140 error_status_code=error_status_code,
141 error_headers=error_headers,
125142 )
126143 if as_kwargs:
127144 kwargs.update(parsed_args)
0 # -*- coding: utf-8 -*-
1 """Utilities for testing. Includes a base test class
2 for testing parsers.
3
4 .. warning::
5
6 Methods and functions in this module may change without
7 warning and without a major version change.
8 """
9 import json
10
11 import pytest
12 import webtest
13
14 from webargs.core import MARSHMALLOW_VERSION_INFO
15
16
17 class CommonTestCase(object):
18 """Base test class that defines test methods for common functionality across all
19 parsers. Subclasses must define `create_app`, which returns a WSGI-like app.
20 """
21
22 def create_app(self):
23 """Return a WSGI app"""
24 raise NotImplementedError("Must define create_app()")
25
26 def create_testapp(self, app):
27 return webtest.TestApp(app)
28
29 def before_create_app(self):
30 pass
31
32 def after_create_app(self):
33 pass
34
35 @pytest.fixture(scope="class")
36 def testapp(self):
37 self.before_create_app()
38 yield self.create_testapp(self.create_app())
39 self.after_create_app()
40
41 def test_parse_querystring_args(self, testapp):
42 assert testapp.get("/echo?name=Fred").json == {"name": "Fred"}
43
44 def test_parse_querystring_with_query_location_specified(self, testapp):
45 assert testapp.get("/echo_query?name=Steve").json == {"name": "Steve"}
46
47 def test_parse_form(self, testapp):
48 assert testapp.post("/echo", {"name": "Joe"}).json == {"name": "Joe"}
49
50 def test_parse_json(self, testapp):
51 assert testapp.post_json("/echo", {"name": "Fred"}).json == {"name": "Fred"}
52
53 def test_parse_querystring_default(self, testapp):
54 assert testapp.get("/echo").json == {"name": "World"}
55
56 def test_parse_json_default(self, testapp):
57 assert testapp.post_json("/echo", {}).json == {"name": "World"}
58
59 def test_parse_json_with_charset(self, testapp):
60 res = testapp.post(
61 "/echo",
62 json.dumps({"name": "Steve"}),
63 content_type="application/json;charset=UTF-8",
64 )
65 assert res.json == {"name": "Steve"}
66
67 def test_parse_json_with_vendor_media_type(self, testapp):
68 res = testapp.post(
69 "/echo",
70 json.dumps({"name": "Steve"}),
71 content_type="application/vnd.api+json;charset=UTF-8",
72 )
73 assert res.json == {"name": "Steve"}
74
75 def test_parse_json_ignores_extra_data(self, testapp):
76 assert testapp.post_json("/echo", {"extra": "data"}).json == {"name": "World"}
77
78 def test_parse_json_blank(self, testapp):
79 assert testapp.post_json("/echo", None).json == {"name": "World"}
80
81 def test_parse_json_ignore_unexpected_int(self, testapp):
82 assert testapp.post_json("/echo", 1).json == {"name": "World"}
83
84 def test_parse_json_ignore_unexpected_list(self, testapp):
85 assert testapp.post_json("/echo", [{"extra": "data"}]).json == {"name": "World"}
86
87 def test_parse_json_many_schema_invalid_input(self, testapp):
88 res = testapp.post_json(
89 "/echo_many_schema", [{"name": "a"}], expect_errors=True
90 )
91 assert res.status_code == 422
92
93 def test_parse_json_many_schema(self, testapp):
94 res = testapp.post_json("/echo_many_schema", [{"name": "Steve"}]).json
95 assert res == [{"name": "Steve"}]
96
97 def test_parse_json_many_schema_ignore_malformed_data(self, testapp):
98 assert testapp.post_json("/echo_many_schema", {"extra": "data"}).json == []
99
100 def test_parsing_form_default(self, testapp):
101 assert testapp.post("/echo", {}).json == {"name": "World"}
102
103 def test_parse_querystring_multiple(self, testapp):
104 expected = {"name": ["steve", "Loria"]}
105 assert testapp.get("/echo_multi?name=steve&name=Loria").json == expected
106
107 def test_parse_form_multiple(self, testapp):
108 expected = {"name": ["steve", "Loria"]}
109 assert (
110 testapp.post("/echo_multi", {"name": ["steve", "Loria"]}).json == expected
111 )
112
113 def test_parse_json_list(self, testapp):
114 expected = {"name": ["Steve"]}
115 assert testapp.post_json("/echo_multi", {"name": "Steve"}).json == expected
116
117 def test_parse_json_with_nonascii_chars(self, testapp):
118 text = u"øˆƒ£ºº∆ƒˆ∆"
119 assert testapp.post_json("/echo", {"name": text}).json == {"name": text}
120
121 def test_validation_error_returns_422_response(self, testapp):
122 res = testapp.post("/echo", {"name": "b"}, expect_errors=True)
123 assert res.status_code == 422
124
125 def test_user_validation_error_returns_422_response_by_default(self, testapp):
126 res = testapp.post_json("/error", {"text": "foo"}, expect_errors=True)
127 assert res.status_code == 422
128
129 @pytest.mark.skipif(
130 MARSHMALLOW_VERSION_INFO < (2, 7),
131 reason="status_code only works in marshmallow>=2.7",
132 )
133 def test_user_validation_error_with_status_code(self, testapp):
134 res = testapp.post_json("/error400", {"text": "foo"}, expect_errors=True)
135 assert res.status_code == 400
136
137 def test_use_args_decorator(self, testapp):
138 assert testapp.get("/echo_use_args?name=Fred").json == {"name": "Fred"}
139
140 def test_use_args_with_path_param(self, testapp):
141 url = "/echo_use_args_with_path_param/foo"
142 res = testapp.get(url + "?value=42")
143 assert res.json == {"value": 42}
144
145 def test_use_args_with_validation(self, testapp):
146 result = testapp.post("/echo_use_args_validated", {"value": 43})
147 assert result.status_code == 200
148 result = testapp.post(
149 "/echo_use_args_validated", {"value": 41}, expect_errors=True
150 )
151 assert result.status_code == 422
152
153 def test_use_kwargs_decorator(self, testapp):
154 assert testapp.get("/echo_use_kwargs?name=Fred").json == {"name": "Fred"}
155
156 def test_use_kwargs_with_path_param(self, testapp):
157 url = "/echo_use_kwargs_with_path_param/foo"
158 res = testapp.get(url + "?value=42")
159 assert res.json == {"value": 42}
160
161 def test_parsing_headers(self, testapp):
162 res = testapp.get("/echo_headers", headers={"name": "Fred"})
163 assert res.json == {"name": "Fred"}
164
165 def test_parsing_cookies(self, testapp):
166 testapp.set_cookie("name", "Steve")
167 res = testapp.get("/echo_cookie")
168 assert res.json == {"name": "Steve"}
169
170 def test_parse_nested_json(self, testapp):
171 res = testapp.post_json(
172 "/echo_nested", {"name": {"first": "Steve", "last": "Loria"}}
173 )
174 assert res.json == {"name": {"first": "Steve", "last": "Loria"}}
175
176 def test_parse_nested_many_json(self, testapp):
177 in_data = {"users": [{"id": 1, "name": "foo"}, {"id": 2, "name": "bar"}]}
178 res = testapp.post_json("/echo_nested_many", in_data)
179 assert res.json == in_data
180
181 # Regression test for https://github.com/marshmallow-code/webargs/issues/120
182 def test_parse_nested_many_missing(self, testapp):
183 in_data = {}
184 res = testapp.post_json("/echo_nested_many", in_data)
185 assert res.json == {}
186
187 def test_parse_json_if_no_json(self, testapp):
188 res = testapp.post("/echo")
189 assert res.json == {"name": "World"}
190
191 def test_parse_files(self, testapp):
192 res = testapp.post(
193 "/echo_file", {"myfile": webtest.Upload("README.rst", b"data")}
194 )
195 assert res.json == {"myfile": "data"}
2525
2626 def __init__(self, *args, **kwargs):
2727 self.messages = kwargs.pop("messages", {})
28 self.headers = kwargs.pop("headers", None)
2829 super(HTTPError, self).__init__(*args, **kwargs)
2930
3031
112113 """Pull a file from the request."""
113114 return get_value(req.files, name, field)
114115
115 def handle_error(self, error, req, schema):
116 def handle_error(self, error, req, schema, error_status_code, error_headers):
116117 """Handles errors during parsing. Raises a `tornado.web.HTTPError`
117118 with a 400 error.
118119 """
119 status_code = getattr(error, "status_code", core.DEFAULT_VALIDATION_STATUS)
120 status_code = error_status_code or getattr(
121 error, "status_code", core.DEFAULT_VALIDATION_STATUS
122 )
120123 if status_code == 422:
121124 reason = "Unprocessable Entity"
122125 else:
126129 log_message=str(error.messages),
127130 reason=reason,
128131 messages=error.messages,
132 headers=error_headers,
129133 )
130134
131135 def get_request_from_view_args(self, view, args, kwargs):