--- a/.hgignore Mon Oct 15 17:01:50 2012 +0200
+++ b/.hgignore Mon Dec 10 10:47:14 2012 +0100
@@ -54,4 +54,6 @@
syntax: regexp
^script/lib/tweetstream/dist$
syntax: regexp
-^script/lib/tweetstream/tweetstream\.egg-info$
\ No newline at end of file
+^script/lib/tweetstream/tweetstream\.egg-info$
+syntax: regexp
+^script/virtualenv/script/env$
\ No newline at end of file
--- a/.pydevproject Mon Oct 15 17:01:50 2012 +0200
+++ b/.pydevproject Mon Dec 10 10:47:14 2012 +0100
@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?>
-
-<pydev_project>
+<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_tl</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/tweet_live/script/lib</path>
<path>/tweet_live/script/lib/tweetstream</path>
Binary file script/virtualenv/res/anyjson.tar.gz has changed
Binary file script/virtualenv/res/distribute-0.6.14.tar.gz has changed
Binary file script/virtualenv/res/httplib2-0.6.0.tar.gz has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/res/lib/lib_create_env.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,317 @@
+import sys
+import os
+import os.path
+import shutil
+import tarfile
+import zipfile
+import urllib
+import platform
+import patch
+import struct
+import glob
+import re
+
+join = os.path.join
+system_str = platform.system()
+
+URLS = {
+ #'': {'setup': '', 'url':'', 'local':''},
+ 'DISTRIBUTE': {'setup': 'distribute', 'url':'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz', 'local':"distribute-0.6.32.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'ANYJSON': {'setup': 'anyjson', 'url':'http://pypi.python.org/packages/source/a/anyjson/anyjson-0.3.3.tar.gz', 'local':"anyjson-0.3.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'OAUTH2': { 'setup': 'python-oauth2', 'url':"https://github.com/simplegeo/python-oauth2/tarball/hudson-python-oauth2-211", 'local':"python-oauth2-1.5-211.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'HTTPLIB2': { 'setup': 'httplib2', 'url':'http://pypi.python.org/packages/source/h/httplib2/httplib2-0.7.7.tar.gz', 'local':"httplib2-0.7.7.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'LOCKFILE': {'setup': 'lockfile', 'url':'http://code.google.com/p/pylockfile/downloads/detail?name=lockfile-0.9.1.tar.gz', 'local':"lockfile-0.9.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'DAEMON': {'setup': 'python-daemon', 'url':'http://pypi.python.org/packages/source/p/python-daemon/python-daemon-1.5.5.tar.gz', 'local':"python-daemon-1.5.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'DATEUTIL': {'setup': 'python-dateutil', 'url':'http://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz', 'local':"python-dateutil-2.1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'PYTZ': {'setup': 'pytz', 'url':'http://pypi.python.org/packages/source/p/pytz/pytz-2012h.tar.bz2', 'local':"pytz-2012h.tar.bz2", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'SIMPLEJSON': {'setup': 'simplejson', 'url':'http://pypi.python.org/packages/source/s/simplejson/simplejson-2.6.2.tar.gz', 'local':"simplejson-2.6.2.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'SQLALCHEMY': {'setup': 'sqlalchemy', 'url':'http://downloads.sourceforge.net/project/sqlalchemy/sqlalchemy/0.8.0b1/SQLAlchemy-0.8.0b1.tar.gz?r=http%3A%2F%2Fwww.sqlalchemy.org%2Fdownload.html&ts=1355091775&use_mirror=ignum', 'local':"SQLAlchemy-0.8.0b1.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'TWEEPY': {'setup': 'tweepy', 'url':'https://github.com/tweepy/tweepy/archive/1.12.tar.gz', 'local':"tweepy-1.12.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'TWITTER': {'setup': 'twitter', 'url':'http://pypi.python.org/packages/source/t/twitter/twitter-1.9.0.tar.gz', 'local':"twitter-1.9.0.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'TWITTER-TEXT': {'setup': 'twitter-text', 'url':'https://github.com/dryan/twitter-text-py/archive/master.tar.gz', 'local':"twitter-text-1.0.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'REQUESTS': {'setup': 'requests', 'url':'https://github.com/kennethreitz/requests/tarball/master', 'local':"requests-v0.14.2.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+}
+
+if system_str == 'Windows':
+
+ URLS.update({
+ 'PSYCOPG2': {'setup': 'psycopg2','url': 'psycopg2-2.4.5.win32-py2.7-pg9.1.3-release.zip', 'local':"psycopg2-2.4.5.win32-py2.7-pg9.1.3-release.zip", 'install': {'method': 'install_psycopg2', 'option_str': None, 'dict_extra_env': None}},
+ 'LXML': {'setup': 'lxml', 'url': 'http://pypi.python.org/packages/2.7/l/lxml/lxml-2.3-py2.7-win32.egg', 'local':"lxml-2.3-py2.7-win32.egg", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
+ })
+else:
+ if system_str == "Darwin":
+ lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.8.0', 'LIBXSLT_VERSION': '1.1.28', 'LIBICONV_VERSION': '1.14'}
+ lxml_method = 'pip'
+ else:
+ lxml_options = None
+ lxml_method = 'pip'
+
+ URLS.update({
+ 'PSYCOPG2': {'setup': 'psycopg2','url': 'http://www.psycopg.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.5.tar.gz', 'local':"psycopg2-2.4.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'LXML': {'setup': 'lxml', 'url':"lxml-3.0.1.tar.gz", 'local':"lxml-3.0.1.tar.gz", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
+ })
+
+
+class ResourcesEnv(object):
+
+ def __init__(self, src_base, urls, normal_installs):
+ self.src_base = src_base
+ self.URLS = {}
+ self.__init_url(urls)
+ self.NORMAL_INSTALL = normal_installs
+
+ def get_src_base_path(self, fpath):
+ return os.path.abspath(os.path.join(self.src_base, fpath)).replace("\\","/")
+
+ def __add_package_def(self, key, dict):
+ self.URLS[key] = dict
+
+ def __init_url(self, urls):
+ for key, url_dict in urls.items():
+ url_dict_copy = url_dict.copy()
+ if not url_dict['url'].startswith("http://"):
+ url_dict_copy['url'] = self.get_src_base_path(url_dict['url'])
+ url_dict_copy['local'] = self.get_src_base_path(url_dict['local'])
+
+ self.__add_package_def(key, url_dict_copy )
+
+def ensure_dir(dir, logger):
+ if not os.path.exists(dir):
+ logger.notify('Creating directory %s' % dir)
+ os.makedirs(dir)
+
+def extend_parser(parser):
+ parser.add_option(
+ '--index-url',
+ metavar='INDEX_URL',
+ dest='index_url',
+ default='http://pypi.python.org/simple/',
+ help='base URL of Python Package Index')
+ parser.add_option(
+ '--type-install',
+ metavar='type_install',
+ dest='type_install',
+ help='type install : local, url, setup - default : local')
+ parser.add_option(
+ '--ignore-packages',
+ metavar='ignore_packages',
+ dest='ignore_packages',
+ default=None,
+ help='list of comma separated keys for package to ignore')
+
+def install_psycopg2(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
+ psycopg2_src = os.path.join(src_dir,"psycopg2.zip")
+ shutil.copy(res_env.URLS['PSYCOPG2'][res_source_key], psycopg2_src)
+ #extract psycopg2
+ zf = zipfile.ZipFile(psycopg2_src)
+ psycopg2_base_path = os.path.join(src_dir,"psycopg2")
+ zf.extractall(psycopg2_base_path)
+ zf.close()
+
+ psycopg2_src_path = os.path.join(psycopg2_base_path, os.listdir(psycopg2_base_path)[0])
+ shutil.copytree(os.path.join(psycopg2_src_path, 'psycopg2'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'psycopg2')))
+ shutil.copy(os.path.join(psycopg2_src_path, 'psycopg2-2.4.5-py2.7.egg-info'), os.path.abspath(os.path.join(home_dir, 'Lib/site-packages', 'site-packages')))
+
+
+def install_mysql(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
+
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', res_env.URLS['MYSQL'][res_source_key]]
+ if option_str :
+ args.insert(4,option_str)
+ call_subprocess(args,
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=filter_python_develop,
+ show_stdout=True,
+ extra_env=extra_env)
+
+ mysqlconfig_output = []
+
+ call_subprocess(['mysql_config', '--libmysqld-libs'],
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=lambda line: mysqlconfig_output.append(line),
+ show_stdout=True)
+
+ mysqlconfig_output = "".join(mysqlconfig_output)
+ m = re.search("\-L[\'\"]?([\w\/]+)[\'\"]?", mysqlconfig_output)
+ if m:
+ repdylibpath = m.group(1)
+ else:
+ repdylibpath = '/usr/local/mysql/lib'
+
+ dyliblist = glob.glob(repdylibpath+"/libmysqlclient.*.dylib")
+ def key_func(s):
+ m = re.match(repdylibpath+"/libmysqlclient\.([\d]+)\.dylib", s)
+ if m:
+ return int(m.group(1))
+ else:
+ return sys.maxint
+ dyliblist.sort(key=key_func)
+
+ if dyliblist:
+ dylibpath = dyliblist[0]
+ else:
+ dylibpath = '/usr/local/mysql/lib/libmysqlclient.18.dylib'
+
+ dylibname = os.path.basename(dylibpath)
+ sopath = os.path.join(os.path.abspath(lib_dir), 'site-packages', '_mysql.so')
+
+ call_subprocess(['install_name_tool', '-change', dylibname, dylibpath, sopath],
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=filter_python_develop,
+ show_stdout=True)
+
+
+def gen_install_comp_lib(lib_name, lib_key, configure_options=[]):
+
+ def install_lib(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop):
+ lib_src = os.path.join(src_dir,lib_name+".tar.gz")
+ shutil.copy(res_env.URLS[lib_key][res_source_key], lib_src)
+ tf = tarfile.open(lib_src,'r:gz')
+ lib_base_path = os.path.join(src_dir, lib_name)
+ logger.notify("Extract %s to %s " % (lib_name,lib_base_path))
+ tf.extractall(lib_base_path)
+ tf.close()
+
+ lib_src_path = os.path.join(lib_base_path, os.listdir(lib_base_path)[0])
+
+ logger.notify(libname + " configure")
+ call_subprocess(['configure', '--prefix='+os.path.abspath(home_dir)] + configure_options,
+ cwd=os.path.abspath(lib_src_path),
+ filter_stdout=filter_python_develop,
+ show_stdout=True)
+
+ logger.notify(libname + " make")
+ call_subprocess(['make'],
+ cwd=os.path.abspath(lib_src_path),
+ filter_stdout=filter_python_develop,
+ show_stdout=True)
+
+ logger.notify(libname + "make install")
+ call_subprocess(['make', 'install'],
+ cwd=os.path.abspath(lib_src_path),
+ filter_stdout=filter_python_develop,
+ show_stdout=True)
+ return install_lib
+
+install_libjpeg = gen_install_comp_lib("libjpeg", "LIBJPEG", ['--enable-shared'])
+install_zlib = gen_install_comp_lib("zlib", "ZLIB", [])
+
+
+
+
+
+def lib_generate_install_methods(path_locations, src_base, Logger, call_subprocess, normal_installs, options_to_add=None, urls= None):
+
+ all_urls = URLS.copy()
+ if urls is not None:
+ all_urls.update(urls)
+
+ res_env = ResourcesEnv(src_base, all_urls, normal_installs)
+
+ def filter_python_develop(line):
+ if not line.strip():
+ return Logger.DEBUG
+ for prefix in ['Searching for', 'Reading ', 'Best match: ', 'Processing ',
+ 'Moving ', 'Adding ', 'running ', 'writing ', 'Creating ',
+ 'creating ', 'Copying ']:
+ if line.startswith(prefix):
+ return Logger.DEBUG
+ return Logger.NOTIFY
+
+
+ def normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess):
+ logger.notify("Install %s from %s with %s" % (key,res_env.URLS[key][res_source_key],method))
+ if method == 'pip':
+ if sys.platform == 'win32':
+ args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'pip')), 'install', res_env.URLS[key][res_source_key]]
+ else:
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', res_env.URLS[key][res_source_key]]
+ if option_str :
+ args.insert(4,option_str)
+ call_subprocess(args,
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=filter_python_develop,
+ show_stdout=True,
+ extra_env=extra_env)
+ else:
+ if sys.platform == 'win32':
+ args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'easy_install')), res_env.URLS[key][res_source_key]]
+ else:
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'easy_install')), res_env.URLS[key][res_source_key]]
+ if option_str :
+ args.insert(1,option_str)
+ call_subprocess(args,
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=filter_python_develop,
+ show_stdout=True,
+ extra_env=extra_env)
+
+
+ def after_install(options, home_dir):
+
+ global logger
+
+ verbosity = options.verbose - options.quiet
+ logger = Logger([(Logger.level_for_integer(2-verbosity), sys.stdout)])
+
+
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+ base_dir = os.path.dirname(home_dir)
+ src_dir = os.path.join(home_dir, 'src')
+ tmp_dir = os.path.join(home_dir, 'tmp')
+ ensure_dir(src_dir, logger)
+ ensure_dir(tmp_dir, logger)
+ system_str = platform.system()
+
+ res_source_key = getattr(options, 'type_install') if hasattr(options, 'type_install') else 'local' #.get('type_install', 'local')
+ if res_source_key is None:
+ res_source_key = local
+
+ ignore_packages = []
+
+ if system_str == 'Windows':
+ default_install_options = {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}
+ else:
+ default_install_options = {'method': 'pip', 'option_str': None, 'dict_extra_env': None}
+
+ if options.ignore_packages :
+ ignore_packages = options.ignore_packages.split(",")
+
+ logger.indent += 2
+ try:
+ for key in res_env.NORMAL_INSTALL:
+ if key not in res_env.URLS:
+ logger.notify("%s not found in def : passing" % (key,))
+ install_options = res_env.URLS[key].get('install', None)
+ if install_options is None:
+ install_options = default_install_options
+ method = install_options.get('method', default_install_options['method'])
+ option_str = install_options.get('option_str', default_install_options['option_str'])
+ extra_env = install_options.get('dict_extra_env', default_install_options['dict_extra_env'])
+ #isinstance(lst, (list, tuple))
+ if key not in ignore_packages:
+ if callable(method):
+ method(option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop)
+ elif method in globals() and callable(globals()[method]) and method not in ['pip', 'easy_install']:
+ globals()[method](option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop)
+ else:
+ normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess)
+
+ logger.notify("Clear source dir")
+ shutil.rmtree(src_dir)
+
+ finally:
+ logger.indent -= 2
+ script_dir = join(base_dir, bin_dir)
+ logger.notify('Run "%s Package" to install new packages that provide builds'
+ % join(script_dir, 'easy_install'))
+
+ def adjust_options(options, args):
+ if not options_to_add:
+ pass
+ for opt in options_to_add:
+ test_opt = opt.split('=',1)[0]
+ if not hasattr(options,test_opt) or getattr(options, test_opt) is None:
+ setattr(options, test_opt,opt.split('=',1)[1] if "=" in opt else True)
+
+ return adjust_options, extend_parser, after_install
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/res/lib/patch.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,589 @@
+""" Patch utility to apply unified diffs
+
+ Brute-force line-by-line non-recursive parsing
+
+ Copyright (c) 2008-2010 anatoly techtonik
+ Available under the terms of MIT license
+
+ Project home: http://code.google.com/p/python-patch/
+
+
+ $Id: patch.py 76 2010-04-08 19:10:21Z techtonik $
+ $HeadURL: https://python-patch.googlecode.com/svn/trunk/patch.py $
+"""
+
+__author__ = "techtonik.rainforce.org"
+__version__ = "10.04"
+
+import copy
+import logging
+import re
+# cStringIO doesn't support unicode in 2.5
+from StringIO import StringIO
+from logging import debug, info, warning
+
+from os.path import exists, isfile, abspath
+from os import unlink
+
+
+#------------------------------------------------
+# Logging is controlled by "python_patch" logger
+
+debugmode = False
+
+logger = logging.getLogger("python_patch")
+loghandler = logging.StreamHandler()
+logger.addHandler(loghandler)
+
+debug = logger.debug
+info = logger.info
+warning = logger.warning
+
+#: disable library logging by default
+logger.setLevel(logging.CRITICAL)
+
+#------------------------------------------------
+
+
+def fromfile(filename):
+ """ Parse patch file and return Patch() object
+ """
+
+ info("reading patch from file %s" % filename)
+ fp = open(filename, "rb")
+ patch = Patch(fp)
+ fp.close()
+ return patch
+
+
+def fromstring(s):
+ """ Parse text string and return Patch() object
+ """
+
+ return Patch(
+ StringIO.StringIO(s)
+ )
+
+
+
+class HunkInfo(object):
+ """ Parsed hunk data container (hunk starts with @@ -R +R @@) """
+
+ def __init__(self):
+ self.startsrc=None #: line count starts with 1
+ self.linessrc=None
+ self.starttgt=None
+ self.linestgt=None
+ self.invalid=False
+ self.text=[]
+
+ def copy(self):
+ return copy.copy(self)
+
+# def apply(self, estream):
+# """ write hunk data into enumerable stream
+# return strings one by one until hunk is
+# over
+#
+# enumerable stream are tuples (lineno, line)
+# where lineno starts with 0
+# """
+# pass
+
+
+
+class Patch(object):
+
+ def __init__(self, stream=None):
+
+ # define Patch data members
+ # table with a row for every source file
+
+ #: list of source filenames
+ self.source=None
+ self.target=None
+ #: list of lists of hunks
+ self.hunks=None
+ #: file endings statistics for every hunk
+ self.hunkends=None
+
+ if stream:
+ self.parse(stream)
+
+ def copy(self):
+ return copy.copy(self)
+
+ def parse(self, stream):
+ """ parse unified diff """
+ self.source = []
+ self.target = []
+ self.hunks = []
+ self.hunkends = []
+
+ # define possible file regions that will direct the parser flow
+ header = False # comments before the patch body
+ filenames = False # lines starting with --- and +++
+
+ hunkhead = False # @@ -R +R @@ sequence
+ hunkbody = False #
+ hunkskip = False # skipping invalid hunk mode
+
+ header = True
+ lineends = dict(lf=0, crlf=0, cr=0)
+ nextfileno = 0
+ nexthunkno = 0 #: even if index starts with 0 user messages number hunks from 1
+
+ # hunkinfo holds parsed values, hunkactual - calculated
+ hunkinfo = HunkInfo()
+ hunkactual = dict(linessrc=None, linestgt=None)
+
+ fe = enumerate(stream)
+ for lineno, line in fe:
+
+ # analyze state
+ if header and line.startswith("--- "):
+ header = False
+ # switch to filenames state
+ filenames = True
+ #: skip hunkskip and hunkbody code until you read definition of hunkhead
+ if hunkbody:
+ # process line first
+ if re.match(r"^[- \+\\]", line):
+ # gather stats about line endings
+ if line.endswith("\r\n"):
+ self.hunkends[nextfileno-1]["crlf"] += 1
+ elif line.endswith("\n"):
+ self.hunkends[nextfileno-1]["lf"] += 1
+ elif line.endswith("\r"):
+ self.hunkends[nextfileno-1]["cr"] += 1
+
+ if line.startswith("-"):
+ hunkactual["linessrc"] += 1
+ elif line.startswith("+"):
+ hunkactual["linestgt"] += 1
+ elif not line.startswith("\\"):
+ hunkactual["linessrc"] += 1
+ hunkactual["linestgt"] += 1
+ hunkinfo.text.append(line)
+ # todo: handle \ No newline cases
+ else:
+ warning("invalid hunk no.%d at %d for target file %s" % (nexthunkno, lineno+1, self.target[nextfileno-1]))
+ # add hunk status node
+ self.hunks[nextfileno-1].append(hunkinfo.copy())
+ self.hunks[nextfileno-1][nexthunkno-1]["invalid"] = True
+ # switch to hunkskip state
+ hunkbody = False
+ hunkskip = True
+
+ # check exit conditions
+ if hunkactual["linessrc"] > hunkinfo.linessrc or hunkactual["linestgt"] > hunkinfo.linestgt:
+ warning("extra hunk no.%d lines at %d for target %s" % (nexthunkno, lineno+1, self.target[nextfileno-1]))
+ # add hunk status node
+ self.hunks[nextfileno-1].append(hunkinfo.copy())
+ self.hunks[nextfileno-1][nexthunkno-1]["invalid"] = True
+ # switch to hunkskip state
+ hunkbody = False
+ hunkskip = True
+ elif hunkinfo.linessrc == hunkactual["linessrc"] and hunkinfo.linestgt == hunkactual["linestgt"]:
+ self.hunks[nextfileno-1].append(hunkinfo.copy())
+ # switch to hunkskip state
+ hunkbody = False
+ hunkskip = True
+
+ # detect mixed window/unix line ends
+ ends = self.hunkends[nextfileno-1]
+ if ((ends["cr"]!=0) + (ends["crlf"]!=0) + (ends["lf"]!=0)) > 1:
+ warning("inconsistent line ends in patch hunks for %s" % self.source[nextfileno-1])
+ if debugmode:
+ debuglines = dict(ends)
+ debuglines.update(file=self.target[nextfileno-1], hunk=nexthunkno)
+ debug("crlf: %(crlf)d lf: %(lf)d cr: %(cr)d\t - file: %(file)s hunk: %(hunk)d" % debuglines)
+
+ if hunkskip:
+ match = re.match("^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))?", line)
+ if match:
+ # switch to hunkhead state
+ hunkskip = False
+ hunkhead = True
+ elif line.startswith("--- "):
+ # switch to filenames state
+ hunkskip = False
+ filenames = True
+ if debugmode and len(self.source) > 0:
+ debug("- %2d hunks for %s" % (len(self.hunks[nextfileno-1]), self.source[nextfileno-1]))
+
+ if filenames:
+ if line.startswith("--- "):
+ if nextfileno in self.source:
+ warning("skipping invalid patch for %s" % self.source[nextfileno])
+ del self.source[nextfileno]
+ # double source filename line is encountered
+ # attempt to restart from this second line
+ re_filename = "^--- ([^\t]+)"
+ match = re.match(re_filename, line)
+ # todo: support spaces in filenames
+ if match:
+ self.source.append(match.group(1).strip())
+ else:
+ warning("skipping invalid filename at line %d" % lineno)
+ # switch back to header state
+ filenames = False
+ header = True
+ elif not line.startswith("+++ "):
+ if nextfileno in self.source:
+ warning("skipping invalid patch with no target for %s" % self.source[nextfileno])
+ del self.source[nextfileno]
+ else:
+ # this should be unreachable
+ warning("skipping invalid target patch")
+ filenames = False
+ header = True
+ else:
+ if nextfileno in self.target:
+ warning("skipping invalid patch - double target at line %d" % lineno)
+ del self.source[nextfileno]
+ del self.target[nextfileno]
+ nextfileno -= 1
+ # double target filename line is encountered
+ # switch back to header state
+ filenames = False
+ header = True
+ else:
+ re_filename = "^\+\+\+ ([^\t]+)"
+ match = re.match(re_filename, line)
+ if not match:
+ warning("skipping invalid patch - no target filename at line %d" % lineno)
+ # switch back to header state
+ filenames = False
+ header = True
+ else:
+ self.target.append(match.group(1).strip())
+ nextfileno += 1
+ # switch to hunkhead state
+ filenames = False
+ hunkhead = True
+ nexthunkno = 0
+ self.hunks.append([])
+ self.hunkends.append(lineends.copy())
+ continue
+
+ if hunkhead:
+ match = re.match("^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))?", line)
+ if not match:
+ if nextfileno-1 not in self.hunks:
+ warning("skipping invalid patch with no hunks for file %s" % self.target[nextfileno-1])
+ # switch to header state
+ hunkhead = False
+ header = True
+ continue
+ else:
+ # switch to header state
+ hunkhead = False
+ header = True
+ else:
+ hunkinfo.startsrc = int(match.group(1))
+ hunkinfo.linessrc = 1
+ if match.group(3): hunkinfo.linessrc = int(match.group(3))
+ hunkinfo.starttgt = int(match.group(4))
+ hunkinfo.linestgt = 1
+ if match.group(6): hunkinfo.linestgt = int(match.group(6))
+ hunkinfo.invalid = False
+ hunkinfo.text = []
+
+ hunkactual["linessrc"] = hunkactual["linestgt"] = 0
+
+ # switch to hunkbody state
+ hunkhead = False
+ hunkbody = True
+ nexthunkno += 1
+ continue
+ else:
+ if not hunkskip:
+ warning("patch file incomplete - %s" % filename)
+ # sys.exit(?)
+ else:
+ # duplicated message when an eof is reached
+ if debugmode and len(self.source) > 0:
+ debug("- %2d hunks for %s" % (len(self.hunks[nextfileno-1]), self.source[nextfileno-1]))
+
+ info("total files: %d total hunks: %d" % (len(self.source), sum(len(hset) for hset in self.hunks)))
+
+
+ def apply(self):
+ """ apply parsed patch """
+
+ total = len(self.source)
+ for fileno, filename in enumerate(self.source):
+
+ f2patch = filename
+ if not exists(f2patch):
+ f2patch = self.target[fileno]
+ if not exists(f2patch):
+ warning("source/target file does not exist\n--- %s\n+++ %s" % (filename, f2patch))
+ continue
+ if not isfile(f2patch):
+ warning("not a file - %s" % f2patch)
+ continue
+ filename = f2patch
+
+ info("processing %d/%d:\t %s" % (fileno+1, total, filename))
+
+ # validate before patching
+ f2fp = open(filename)
+ hunkno = 0
+ hunk = self.hunks[fileno][hunkno]
+ hunkfind = []
+ hunkreplace = []
+ validhunks = 0
+ canpatch = False
+ for lineno, line in enumerate(f2fp):
+ if lineno+1 < hunk.startsrc:
+ continue
+ elif lineno+1 == hunk.startsrc:
+ hunkfind = [x[1:].rstrip("\r\n") for x in hunk.text if x[0] in " -"]
+ hunkreplace = [x[1:].rstrip("\r\n") for x in hunk.text if x[0] in " +"]
+ #pprint(hunkreplace)
+ hunklineno = 0
+
+ # todo \ No newline at end of file
+
+ # check hunks in source file
+ if lineno+1 < hunk.startsrc+len(hunkfind)-1:
+ if line.rstrip("\r\n") == hunkfind[hunklineno]:
+ hunklineno+=1
+ else:
+ debug("hunk no.%d doesn't match source file %s" % (hunkno+1, filename))
+ # file may be already patched, but we will check other hunks anyway
+ hunkno += 1
+ if hunkno < len(self.hunks[fileno]):
+ hunk = self.hunks[fileno][hunkno]
+ continue
+ else:
+ break
+
+ # check if processed line is the last line
+ if lineno+1 == hunk.startsrc+len(hunkfind)-1:
+ debug("file %s hunk no.%d -- is ready to be patched" % (filename, hunkno+1))
+ hunkno+=1
+ validhunks+=1
+ if hunkno < len(self.hunks[fileno]):
+ hunk = self.hunks[fileno][hunkno]
+ else:
+ if validhunks == len(self.hunks[fileno]):
+ # patch file
+ canpatch = True
+ break
+ else:
+ if hunkno < len(self.hunks[fileno]):
+ warning("premature end of source file %s at hunk %d" % (filename, hunkno+1))
+
+ f2fp.close()
+
+ if validhunks < len(self.hunks[fileno]):
+ if self._match_file_hunks(filename, self.hunks[fileno]):
+ warning("already patched %s" % filename)
+ else:
+ warning("source file is different - %s" % filename)
+ if canpatch:
+ backupname = filename+".orig"
+ if exists(backupname):
+ warning("can't backup original file to %s - aborting" % backupname)
+ else:
+ import shutil
+ shutil.move(filename, backupname)
+ if self.write_hunks(backupname, filename, self.hunks[fileno]):
+ warning("successfully patched %s" % filename)
+ unlink(backupname)
+ else:
+ warning("error patching file %s" % filename)
+ shutil.copy(filename, filename+".invalid")
+ warning("invalid version is saved to %s" % filename+".invalid")
+ # todo: proper rejects
+ shutil.move(backupname, filename)
+
+ # todo: check for premature eof
+
+
+ def can_patch(self, filename):
+ """ Check if specified filename can be patched. Returns None if file can
+ not be found among source filenames. False if patch can not be applied
+ clearly. True otherwise.
+
+ :returns: True, False or None
+ """
+ idx = self._get_file_idx(filename, source=True)
+ if idx == None:
+ return None
+ return self._match_file_hunks(filename, self.hunks[idx])
+
+
+ def _match_file_hunks(self, filepath, hunks):
+ matched = True
+ fp = open(abspath(filepath))
+
+ class NoMatch(Exception):
+ pass
+
+ lineno = 1
+ line = fp.readline()
+ hno = None
+ try:
+ for hno, h in enumerate(hunks):
+ # skip to first line of the hunk
+ while lineno < h.starttgt:
+ if not len(line): # eof
+ debug("check failed - premature eof before hunk: %d" % (hno+1))
+ raise NoMatch
+ line = fp.readline()
+ lineno += 1
+ for hline in h.text:
+ if hline.startswith("-"):
+ continue
+ if not len(line):
+ debug("check failed - premature eof on hunk: %d" % (hno+1))
+ # todo: \ No newline at the end of file
+ raise NoMatch
+ if line.rstrip("\r\n") != hline[1:].rstrip("\r\n"):
+ debug("file is not patched - failed hunk: %d" % (hno+1))
+ raise NoMatch
+ line = fp.readline()
+ lineno += 1
+
+ except NoMatch:
+ matched = False
+ # todo: display failed hunk, i.e. expected/found
+
+ fp.close()
+ return matched
+
+
+ def patch_stream(self, instream, hunks):
+ """ Generator that yields stream patched with hunks iterable
+
+ Converts lineends in hunk lines to the best suitable format
+ autodetected from input
+ """
+
+ # todo: At the moment substituted lineends may not be the same
+ # at the start and at the end of patching. Also issue a
+ # warning/throw about mixed lineends (is it really needed?)
+
+ hunks = iter(hunks)
+
+ srclineno = 1
+
+ lineends = {'\n':0, '\r\n':0, '\r':0}
+ def get_line():
+ """
+ local utility function - return line from source stream
+ collecting line end statistics on the way
+ """
+ line = instream.readline()
+ # 'U' mode works only with text files
+ if line.endswith("\r\n"):
+ lineends["\r\n"] += 1
+ elif line.endswith("\n"):
+ lineends["\n"] += 1
+ elif line.endswith("\r"):
+ lineends["\r"] += 1
+ return line
+
+ for hno, h in enumerate(hunks):
+ debug("hunk %d" % (hno+1))
+ # skip to line just before hunk starts
+ while srclineno < h.startsrc:
+ yield get_line()
+ srclineno += 1
+
+ for hline in h.text:
+ # todo: check \ No newline at the end of file
+ if hline.startswith("-") or hline.startswith("\\"):
+ get_line()
+ srclineno += 1
+ continue
+ else:
+ if not hline.startswith("+"):
+ get_line()
+ srclineno += 1
+ line2write = hline[1:]
+ # detect if line ends are consistent in source file
+ if sum([bool(lineends[x]) for x in lineends]) == 1:
+ newline = [x for x in lineends if lineends[x] != 0][0]
+ yield line2write.rstrip("\r\n")+newline
+ else: # newlines are mixed
+ yield line2write
+
+ for line in instream:
+ yield line
+
+
+ def write_hunks(self, srcname, tgtname, hunks):
+ src = open(srcname, "rb")
+ tgt = open(tgtname, "wb")
+
+ debug("processing target file %s" % tgtname)
+
+ tgt.writelines(self.patch_stream(src, hunks))
+
+ tgt.close()
+ src.close()
+ return True
+
+
+ def _get_file_idx(self, filename, source=None):
+ """ Detect index of given filename within patch.
+
+ :param filename:
+ :param source: search filename among sources (True),
+ targets (False), or both (None)
+ :returns: int or None
+ """
+ filename = abspath(filename)
+ if source == True or source == None:
+ for i,fnm in enumerate(self.source):
+ if filename == abspath(fnm):
+ return i
+ if source == False or source == None:
+ for i,fnm in enumerate(self.target):
+ if filename == abspath(fnm):
+ return i
+
+
+
+
+from optparse import OptionParser
+from os.path import exists
+import sys
+
+if __name__ == "__main__":
+ opt = OptionParser(usage="%prog [options] unipatch-file", version="python-patch %s" % __version__)
+ opt.add_option("--debug", action="store_true", dest="debugmode", help="debug mode")
+ (options, args) = opt.parse_args()
+
+ if not args:
+ opt.print_version()
+ opt.print_help()
+ sys.exit()
+ debugmode = options.debugmode
+ patchfile = args[0]
+ if not exists(patchfile) or not isfile(patchfile):
+ sys.exit("patch file does not exist - %s" % patchfile)
+
+
+ if debugmode:
+ loglevel = logging.DEBUG
+ logformat = "%(levelname)8s %(message)s"
+ else:
+ loglevel = logging.INFO
+ logformat = "%(message)s"
+ logger.setLevel(loglevel)
+ loghandler.setFormatter(logging.Formatter(logformat))
+
+
+
+ patch = fromfile(patchfile)
+ #pprint(patch)
+ patch.apply()
+
+ # todo: document and test line ends handling logic - patch.py detects proper line-endings
+ # for inserted hunks and issues a warning if patched file has incosistent line ends
Binary file script/virtualenv/res/lockfile-0.9.1.tar.gz has changed
Binary file script/virtualenv/res/lxml-2.2.8.tar.gz has changed
Binary file script/virtualenv/res/psycopg2-2.4.2.tar.gz has changed
Binary file script/virtualenv/res/python-daemon-1.5.5.tar.gz has changed
Binary file script/virtualenv/res/python-dateutil-1.5.tar.gz has changed
Binary file script/virtualenv/res/python-oauth2.tar.gz has changed
Binary file script/virtualenv/res/pytz-2010o.tar.gz has changed
Binary file script/virtualenv/res/simplejson-2.1.2.tar.gz has changed
Binary file script/virtualenv/res/src/SQLAlchemy-0.8.0b1.tar.gz has changed
Binary file script/virtualenv/res/src/anyjson-0.3.3.tar.gz has changed
Binary file script/virtualenv/res/src/distribute-0.6.32.tar.gz has changed
Binary file script/virtualenv/res/src/httplib2-0.7.7.tar.gz has changed
Binary file script/virtualenv/res/src/lockfile-0.9.1.tar.gz has changed
Binary file script/virtualenv/res/src/lxml-3.0.1.tar.gz has changed
Binary file script/virtualenv/res/src/psycopg2-2.4.5.tar.gz has changed
Binary file script/virtualenv/res/src/python-daemon-1.5.5.tar.gz has changed
Binary file script/virtualenv/res/src/python-dateutil-2.1.tar.gz has changed
Binary file script/virtualenv/res/src/python-oauth2-1.5-211.tar.gz has changed
Binary file script/virtualenv/res/src/pytz-2012h.tar.bz2 has changed
Binary file script/virtualenv/res/src/requests-v0.14.2.tar.gz has changed
Binary file script/virtualenv/res/src/simplejson-2.6.2.tar.gz has changed
Binary file script/virtualenv/res/src/tweepy-1.12.tar.gz has changed
Binary file script/virtualenv/res/src/twitter-1.9.0.tar.gz has changed
Binary file script/virtualenv/res/src/twitter-text-1.0.4.tar.gz has changed
Binary file script/virtualenv/res/tweepy.tar.gz has changed
Binary file script/virtualenv/res/twitter-text.tar.gz has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/script/create_python_env.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,65 @@
+"""
+Call this like ``python create_python_env.py``; it will
+refresh the project-boot.py script
+
+-prerequisite:
+
+- virtualenv
+- distribute
+- psycopg2 requires the PostgreSQL libpq libraries and the pg_config utility
+
+- python project-boot.py --distribute --no-site-packages --index-url=http://pypi.websushi.org/ --clear --type-install=local --ignore-packages=MYSQL <path_to_venv>
+- python project-boot.py --no-site-packages --clear --ignore-packages=MYSQL --type-install=local <path_to_venv>
+- For Linux :
+python project-boot.py --unzip-setuptools --no-site-packages --index-url=http://pypi.websushi.org/ --clear --type-install=local <path_to_venv>
+
+Probleme avec mysql :
+
+sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/dev/workspace/platform/virtualenv/web/env/venv_platform/lib/python2.7/site-packages/_mysql.so
+
+"""
+
+import os
+import subprocess
+import re
+import sys
+
+
+here = os.path.dirname(os.path.abspath(__file__))
+base_dir = here
+script_name = os.path.join(base_dir, 'project-boot.py')
+
+import virtualenv
+
+src_base = os.path.abspath(os.path.join(here,"..","res","src")).replace("\\","/")
+lib_path = os.path.abspath(os.path.join(here,"..","res","lib")).replace("\\","/")
+patch_path = os.path.abspath(os.path.join(here,"res","patch")).replace("\\","/")
+
+
+EXTRA_TEXT = "import sys\n"
+EXTRA_TEXT += "sys.path.append('%s')\n" % (lib_path)
+EXTRA_TEXT += "sys.path.append('%s')\n" % (os.path.abspath(os.path.join(here,"res")).replace("\\","/"))
+EXTRA_TEXT += "from res_create_env import generate_install_methods\n"
+EXTRA_TEXT += "adjust_options, extend_parser, after_install = generate_install_methods(path_locations, '%s', Logger, call_subprocess)\n" % (src_base)
+
+def main():
+ python_version = ".".join(map(str,sys.version_info[0:2]))
+ text = virtualenv.create_bootstrap_script(EXTRA_TEXT, python_version=python_version)
+ if os.path.exists(script_name):
+ f = open(script_name)
+ cur_text = f.read()
+ f.close()
+ else:
+ cur_text = ''
+ print 'Updating %s' % script_name
+ if cur_text == 'text':
+ print 'No update'
+ else:
+ print 'Script changed; updating...'
+ f = open(script_name, 'w')
+ f.write(text)
+ f.close()
+
+if __name__ == '__main__':
+ main()
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/script/project-boot.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,2571 @@
+#!/usr/bin/env python2.7
+## WARNING: This file is generated
+#!/usr/bin/env python
+"""Create a "virtual" Python installation
+"""
+
+# If you change the version here, change it in setup.py
+# and docs/conf.py as well.
+__version__ = "1.8.4" # following best practices
+virtualenv_version = __version__ # legacy, again
+
+import base64
+import sys
+import os
+import codecs
+import optparse
+import re
+import shutil
+import logging
+import tempfile
+import zlib
+import errno
+import glob
+import distutils.sysconfig
+from distutils.util import strtobool
+import struct
+import subprocess
+
+if sys.version_info < (2, 5):
+ print('ERROR: %s' % sys.exc_info()[1])
+ print('ERROR: this script requires Python 2.5 or greater.')
+ sys.exit(101)
+
+try:
+ set
+except NameError:
+ from sets import Set as set
+try:
+ basestring
+except NameError:
+ basestring = str
+
+try:
+ import ConfigParser
+except ImportError:
+ import configparser as ConfigParser
+
+join = os.path.join
+py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
+
+is_jython = sys.platform.startswith('java')
+is_pypy = hasattr(sys, 'pypy_version_info')
+is_win = (sys.platform == 'win32')
+is_cygwin = (sys.platform == 'cygwin')
+is_darwin = (sys.platform == 'darwin')
+abiflags = getattr(sys, 'abiflags', '')
+
+user_dir = os.path.expanduser('~')
+if is_win:
+ default_storage_dir = os.path.join(user_dir, 'virtualenv')
+else:
+ default_storage_dir = os.path.join(user_dir, '.virtualenv')
+default_config_file = os.path.join(default_storage_dir, 'virtualenv.ini')
+
+if is_pypy:
+ expected_exe = 'pypy'
+elif is_jython:
+ expected_exe = 'jython'
+else:
+ expected_exe = 'python'
+
+
+REQUIRED_MODULES = ['os', 'posix', 'posixpath', 'nt', 'ntpath', 'genericpath',
+ 'fnmatch', 'locale', 'encodings', 'codecs',
+ 'stat', 'UserDict', 'readline', 'copy_reg', 'types',
+ 're', 'sre', 'sre_parse', 'sre_constants', 'sre_compile',
+ 'zlib']
+
+REQUIRED_FILES = ['lib-dynload', 'config']
+
+majver, minver = sys.version_info[:2]
+if majver == 2:
+ if minver >= 6:
+ REQUIRED_MODULES.extend(['warnings', 'linecache', '_abcoll', 'abc'])
+ if minver >= 7:
+ REQUIRED_MODULES.extend(['_weakrefset'])
+ if minver <= 3:
+ REQUIRED_MODULES.extend(['sets', '__future__'])
+elif majver == 3:
+ # Some extra modules are needed for Python 3, but different ones
+ # for different versions.
+ REQUIRED_MODULES.extend(['_abcoll', 'warnings', 'linecache', 'abc', 'io',
+ '_weakrefset', 'copyreg', 'tempfile', 'random',
+ '__future__', 'collections', 'keyword', 'tarfile',
+ 'shutil', 'struct', 'copy', 'tokenize', 'token',
+ 'functools', 'heapq', 'bisect', 'weakref',
+ 'reprlib'])
+ if minver >= 2:
+ REQUIRED_FILES[-1] = 'config-%s' % majver
+ if minver == 3:
+ import sysconfig
+ platdir = sysconfig.get_config_var('PLATDIR')
+ REQUIRED_FILES.append(platdir)
+ # The whole list of 3.3 modules is reproduced below - the current
+ # uncommented ones are required for 3.3 as of now, but more may be
+ # added as 3.3 development continues.
+ REQUIRED_MODULES.extend([
+ #"aifc",
+ #"antigravity",
+ #"argparse",
+ #"ast",
+ #"asynchat",
+ #"asyncore",
+ "base64",
+ #"bdb",
+ #"binhex",
+ #"bisect",
+ #"calendar",
+ #"cgi",
+ #"cgitb",
+ #"chunk",
+ #"cmd",
+ #"codeop",
+ #"code",
+ #"colorsys",
+ #"_compat_pickle",
+ #"compileall",
+ #"concurrent",
+ #"configparser",
+ #"contextlib",
+ #"cProfile",
+ #"crypt",
+ #"csv",
+ #"ctypes",
+ #"curses",
+ #"datetime",
+ #"dbm",
+ #"decimal",
+ #"difflib",
+ #"dis",
+ #"doctest",
+ #"dummy_threading",
+ "_dummy_thread",
+ #"email",
+ #"filecmp",
+ #"fileinput",
+ #"formatter",
+ #"fractions",
+ #"ftplib",
+ #"functools",
+ #"getopt",
+ #"getpass",
+ #"gettext",
+ #"glob",
+ #"gzip",
+ "hashlib",
+ #"heapq",
+ "hmac",
+ #"html",
+ #"http",
+ #"idlelib",
+ #"imaplib",
+ #"imghdr",
+ "imp",
+ "importlib",
+ #"inspect",
+ #"json",
+ #"lib2to3",
+ #"logging",
+ #"macpath",
+ #"macurl2path",
+ #"mailbox",
+ #"mailcap",
+ #"_markupbase",
+ #"mimetypes",
+ #"modulefinder",
+ #"multiprocessing",
+ #"netrc",
+ #"nntplib",
+ #"nturl2path",
+ #"numbers",
+ #"opcode",
+ #"optparse",
+ #"os2emxpath",
+ #"pdb",
+ #"pickle",
+ #"pickletools",
+ #"pipes",
+ #"pkgutil",
+ #"platform",
+ #"plat-linux2",
+ #"plistlib",
+ #"poplib",
+ #"pprint",
+ #"profile",
+ #"pstats",
+ #"pty",
+ #"pyclbr",
+ #"py_compile",
+ #"pydoc_data",
+ #"pydoc",
+ #"_pyio",
+ #"queue",
+ #"quopri",
+ #"reprlib",
+ "rlcompleter",
+ #"runpy",
+ #"sched",
+ #"shelve",
+ #"shlex",
+ #"smtpd",
+ #"smtplib",
+ #"sndhdr",
+ #"socket",
+ #"socketserver",
+ #"sqlite3",
+ #"ssl",
+ #"stringprep",
+ #"string",
+ #"_strptime",
+ #"subprocess",
+ #"sunau",
+ #"symbol",
+ #"symtable",
+ #"sysconfig",
+ #"tabnanny",
+ #"telnetlib",
+ #"test",
+ #"textwrap",
+ #"this",
+ #"_threading_local",
+ #"threading",
+ #"timeit",
+ #"tkinter",
+ #"tokenize",
+ #"token",
+ #"traceback",
+ #"trace",
+ #"tty",
+ #"turtledemo",
+ #"turtle",
+ #"unittest",
+ #"urllib",
+ #"uuid",
+ #"uu",
+ #"wave",
+ #"weakref",
+ #"webbrowser",
+ #"wsgiref",
+ #"xdrlib",
+ #"xml",
+ #"xmlrpc",
+ #"zipfile",
+ ])
+
+if is_pypy:
+ # these are needed to correctly display the exceptions that may happen
+ # during the bootstrap
+ REQUIRED_MODULES.extend(['traceback', 'linecache'])
+
+class Logger(object):
+
+ """
+ Logging object for use in command-line script. Allows ranges of
+ levels, to avoid some redundancy of displayed information.
+ """
+
+ DEBUG = logging.DEBUG
+ INFO = logging.INFO
+ NOTIFY = (logging.INFO+logging.WARN)/2
+ WARN = WARNING = logging.WARN
+ ERROR = logging.ERROR
+ FATAL = logging.FATAL
+
+ LEVELS = [DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL]
+
+ def __init__(self, consumers):
+ self.consumers = consumers
+ self.indent = 0
+ self.in_progress = None
+ self.in_progress_hanging = False
+
+ def debug(self, msg, *args, **kw):
+ self.log(self.DEBUG, msg, *args, **kw)
+ def info(self, msg, *args, **kw):
+ self.log(self.INFO, msg, *args, **kw)
+ def notify(self, msg, *args, **kw):
+ self.log(self.NOTIFY, msg, *args, **kw)
+ def warn(self, msg, *args, **kw):
+ self.log(self.WARN, msg, *args, **kw)
+ def error(self, msg, *args, **kw):
+ self.log(self.ERROR, msg, *args, **kw)
+ def fatal(self, msg, *args, **kw):
+ self.log(self.FATAL, msg, *args, **kw)
+ def log(self, level, msg, *args, **kw):
+ if args:
+ if kw:
+ raise TypeError(
+ "You may give positional or keyword arguments, not both")
+ args = args or kw
+ rendered = None
+ for consumer_level, consumer in self.consumers:
+ if self.level_matches(level, consumer_level):
+ if (self.in_progress_hanging
+ and consumer in (sys.stdout, sys.stderr)):
+ self.in_progress_hanging = False
+ sys.stdout.write('\n')
+ sys.stdout.flush()
+ if rendered is None:
+ if args:
+ rendered = msg % args
+ else:
+ rendered = msg
+ rendered = ' '*self.indent + rendered
+ if hasattr(consumer, 'write'):
+ consumer.write(rendered+'\n')
+ else:
+ consumer(rendered)
+
+ def start_progress(self, msg):
+ assert not self.in_progress, (
+ "Tried to start_progress(%r) while in_progress %r"
+ % (msg, self.in_progress))
+ if self.level_matches(self.NOTIFY, self._stdout_level()):
+ sys.stdout.write(msg)
+ sys.stdout.flush()
+ self.in_progress_hanging = True
+ else:
+ self.in_progress_hanging = False
+ self.in_progress = msg
+
+ def end_progress(self, msg='done.'):
+ assert self.in_progress, (
+ "Tried to end_progress without start_progress")
+ if self.stdout_level_matches(self.NOTIFY):
+ if not self.in_progress_hanging:
+ # Some message has been printed out since start_progress
+ sys.stdout.write('...' + self.in_progress + msg + '\n')
+ sys.stdout.flush()
+ else:
+ sys.stdout.write(msg + '\n')
+ sys.stdout.flush()
+ self.in_progress = None
+ self.in_progress_hanging = False
+
+ def show_progress(self):
+ """If we are in a progress scope, and no log messages have been
+ shown, write out another '.'"""
+ if self.in_progress_hanging:
+ sys.stdout.write('.')
+ sys.stdout.flush()
+
+ def stdout_level_matches(self, level):
+ """Returns true if a message at this level will go to stdout"""
+ return self.level_matches(level, self._stdout_level())
+
+ def _stdout_level(self):
+ """Returns the level that stdout runs at"""
+ for level, consumer in self.consumers:
+ if consumer is sys.stdout:
+ return level
+ return self.FATAL
+
+ def level_matches(self, level, consumer_level):
+ """
+ >>> l = Logger([])
+ >>> l.level_matches(3, 4)
+ False
+ >>> l.level_matches(3, 2)
+ True
+ >>> l.level_matches(slice(None, 3), 3)
+ False
+ >>> l.level_matches(slice(None, 3), 2)
+ True
+ >>> l.level_matches(slice(1, 3), 1)
+ True
+ >>> l.level_matches(slice(2, 3), 1)
+ False
+ """
+ if isinstance(level, slice):
+ start, stop = level.start, level.stop
+ if start is not None and start > consumer_level:
+ return False
+ if stop is not None and stop <= consumer_level:
+ return False
+ return True
+ else:
+ return level >= consumer_level
+
+ #@classmethod
+ def level_for_integer(cls, level):
+ levels = cls.LEVELS
+ if level < 0:
+ return levels[0]
+ if level >= len(levels):
+ return levels[-1]
+ return levels[level]
+
+ level_for_integer = classmethod(level_for_integer)
+
+# create a silent logger just to prevent this from being undefined
+# will be overridden with requested verbosity main() is called.
+logger = Logger([(Logger.LEVELS[-1], sys.stdout)])
+
+def mkdir(path):
+ if not os.path.exists(path):
+ logger.info('Creating %s', path)
+ os.makedirs(path)
+ else:
+ logger.info('Directory %s already exists', path)
+
+def copyfileordir(src, dest):
+ if os.path.isdir(src):
+ shutil.copytree(src, dest, True)
+ else:
+ shutil.copy2(src, dest)
+
+def copyfile(src, dest, symlink=True):
+ if not os.path.exists(src):
+ # Some bad symlink in the src
+ logger.warn('Cannot find file %s (bad symlink)', src)
+ return
+ if os.path.exists(dest):
+ logger.debug('File %s already exists', dest)
+ return
+ if not os.path.exists(os.path.dirname(dest)):
+ logger.info('Creating parent directories for %s' % os.path.dirname(dest))
+ os.makedirs(os.path.dirname(dest))
+ if not os.path.islink(src):
+ srcpath = os.path.abspath(src)
+ else:
+ srcpath = os.readlink(src)
+ if symlink and hasattr(os, 'symlink') and not is_win:
+ logger.info('Symlinking %s', dest)
+ try:
+ os.symlink(srcpath, dest)
+ except (OSError, NotImplementedError):
+ logger.info('Symlinking failed, copying to %s', dest)
+ copyfileordir(src, dest)
+ else:
+ logger.info('Copying to %s', dest)
+ copyfileordir(src, dest)
+
+def writefile(dest, content, overwrite=True):
+ if not os.path.exists(dest):
+ logger.info('Writing %s', dest)
+ f = open(dest, 'wb')
+ f.write(content.encode('utf-8'))
+ f.close()
+ return
+ else:
+ f = open(dest, 'rb')
+ c = f.read()
+ f.close()
+ if c != content.encode("utf-8"):
+ if not overwrite:
+ logger.notify('File %s exists with different content; not overwriting', dest)
+ return
+ logger.notify('Overwriting %s with new content', dest)
+ f = open(dest, 'wb')
+ f.write(content.encode('utf-8'))
+ f.close()
+ else:
+ logger.info('Content %s already in place', dest)
+
+def rmtree(dir):
+ if os.path.exists(dir):
+ logger.notify('Deleting tree %s', dir)
+ shutil.rmtree(dir)
+ else:
+ logger.info('Do not need to delete %s; already gone', dir)
+
+def make_exe(fn):
+ if hasattr(os, 'chmod'):
+ oldmode = os.stat(fn).st_mode & 0xFFF # 0o7777
+ newmode = (oldmode | 0x16D) & 0xFFF # 0o555, 0o7777
+ os.chmod(fn, newmode)
+ logger.info('Changed mode of %s to %s', fn, oct(newmode))
+
+def _find_file(filename, dirs):
+ for dir in reversed(dirs):
+ files = glob.glob(os.path.join(dir, filename))
+ if files and os.path.isfile(files[0]):
+ return True, files[0]
+ return False, filename
+
+def _install_req(py_executable, unzip=False, distribute=False,
+ search_dirs=None, never_download=False):
+
+ if search_dirs is None:
+ search_dirs = file_search_dirs()
+
+ if not distribute:
+ egg_path = 'setuptools-*-py%s.egg' % sys.version[:3]
+ found, egg_path = _find_file(egg_path, search_dirs)
+ project_name = 'setuptools'
+ bootstrap_script = EZ_SETUP_PY
+ tgz_path = None
+ else:
+ # Look for a distribute egg (these are not distributed by default,
+ # but can be made available by the user)
+ egg_path = 'distribute-*-py%s.egg' % sys.version[:3]
+ found, egg_path = _find_file(egg_path, search_dirs)
+ project_name = 'distribute'
+ if found:
+ tgz_path = None
+ bootstrap_script = DISTRIBUTE_FROM_EGG_PY
+ else:
+ # Fall back to sdist
+ # NB: egg_path is not None iff tgz_path is None
+ # iff bootstrap_script is a generic setup script accepting
+ # the standard arguments.
+ egg_path = None
+ tgz_path = 'distribute-*.tar.gz'
+ found, tgz_path = _find_file(tgz_path, search_dirs)
+ bootstrap_script = DISTRIBUTE_SETUP_PY
+
+ if is_jython and os._name == 'nt':
+ # Jython's .bat sys.executable can't handle a command line
+ # argument with newlines
+ fd, ez_setup = tempfile.mkstemp('.py')
+ os.write(fd, bootstrap_script)
+ os.close(fd)
+ cmd = [py_executable, ez_setup]
+ else:
+ cmd = [py_executable, '-c', bootstrap_script]
+ if unzip and egg_path:
+ cmd.append('--always-unzip')
+ env = {}
+ remove_from_env = ['__PYVENV_LAUNCHER__']
+ if logger.stdout_level_matches(logger.DEBUG) and egg_path:
+ cmd.append('-v')
+
+ old_chdir = os.getcwd()
+ if egg_path is not None and os.path.exists(egg_path):
+ logger.info('Using existing %s egg: %s' % (project_name, egg_path))
+ cmd.append(egg_path)
+ if os.environ.get('PYTHONPATH'):
+ env['PYTHONPATH'] = egg_path + os.path.pathsep + os.environ['PYTHONPATH']
+ else:
+ env['PYTHONPATH'] = egg_path
+ elif tgz_path is not None and os.path.exists(tgz_path):
+ # Found a tgz source dist, let's chdir
+ logger.info('Using existing %s egg: %s' % (project_name, tgz_path))
+ os.chdir(os.path.dirname(tgz_path))
+ # in this case, we want to be sure that PYTHONPATH is unset (not
+ # just empty, really unset), else CPython tries to import the
+ # site.py that it's in virtualenv_support
+ remove_from_env.append('PYTHONPATH')
+ elif never_download:
+ logger.fatal("Can't find any local distributions of %s to install "
+ "and --never-download is set. Either re-run virtualenv "
+ "without the --never-download option, or place a %s "
+ "distribution (%s) in one of these "
+ "locations: %r" % (project_name, project_name,
+ egg_path or tgz_path,
+ search_dirs))
+ sys.exit(1)
+ elif egg_path:
+ logger.info('No %s egg found; downloading' % project_name)
+ cmd.extend(['--always-copy', '-U', project_name])
+ else:
+ logger.info('No %s tgz found; downloading' % project_name)
+ logger.start_progress('Installing %s...' % project_name)
+ logger.indent += 2
+ cwd = None
+ if project_name == 'distribute':
+ env['DONT_PATCH_SETUPTOOLS'] = 'true'
+
+ def _filter_ez_setup(line):
+ return filter_ez_setup(line, project_name)
+
+ if not os.access(os.getcwd(), os.W_OK):
+ cwd = tempfile.mkdtemp()
+ if tgz_path is not None and os.path.exists(tgz_path):
+ # the current working dir is hostile, let's copy the
+ # tarball to a temp dir
+ target = os.path.join(cwd, os.path.split(tgz_path)[-1])
+ shutil.copy(tgz_path, target)
+ try:
+ call_subprocess(cmd, show_stdout=False,
+ filter_stdout=_filter_ez_setup,
+ extra_env=env,
+ remove_from_env=remove_from_env,
+ cwd=cwd)
+ finally:
+ logger.indent -= 2
+ logger.end_progress()
+ if cwd is not None:
+ shutil.rmtree(cwd)
+ if os.getcwd() != old_chdir:
+ os.chdir(old_chdir)
+ if is_jython and os._name == 'nt':
+ os.remove(ez_setup)
+
+def file_search_dirs():
+ here = os.path.dirname(os.path.abspath(__file__))
+ dirs = ['.', here,
+ join(here, 'virtualenv_support')]
+ if os.path.splitext(os.path.dirname(__file__))[0] != 'virtualenv':
+ # Probably some boot script; just in case virtualenv is installed...
+ try:
+ import virtualenv
+ except ImportError:
+ pass
+ else:
+ dirs.append(os.path.join(os.path.dirname(virtualenv.__file__), 'virtualenv_support'))
+ return [d for d in dirs if os.path.isdir(d)]
+
+def install_setuptools(py_executable, unzip=False,
+ search_dirs=None, never_download=False):
+ _install_req(py_executable, unzip,
+ search_dirs=search_dirs, never_download=never_download)
+
+def install_distribute(py_executable, unzip=False,
+ search_dirs=None, never_download=False):
+ _install_req(py_executable, unzip, distribute=True,
+ search_dirs=search_dirs, never_download=never_download)
+
+_pip_re = re.compile(r'^pip-.*(zip|tar.gz|tar.bz2|tgz|tbz)$', re.I)
+def install_pip(py_executable, search_dirs=None, never_download=False):
+ if search_dirs is None:
+ search_dirs = file_search_dirs()
+
+ filenames = []
+ for dir in search_dirs:
+ filenames.extend([join(dir, fn) for fn in os.listdir(dir)
+ if _pip_re.search(fn)])
+ filenames = [(os.path.basename(filename).lower(), i, filename) for i, filename in enumerate(filenames)]
+ filenames.sort()
+ filenames = [filename for basename, i, filename in filenames]
+ if not filenames:
+ filename = 'pip'
+ else:
+ filename = filenames[-1]
+ easy_install_script = 'easy_install'
+ if is_win:
+ easy_install_script = 'easy_install-script.py'
+ # There's two subtle issues here when invoking easy_install.
+ # 1. On unix-like systems the easy_install script can *only* be executed
+ # directly if its full filesystem path is no longer than 78 characters.
+ # 2. A work around to [1] is to use the `python path/to/easy_install foo`
+ # pattern, but that breaks if the path contains non-ASCII characters, as
+ # you can't put the file encoding declaration before the shebang line.
+ # The solution is to use Python's -x flag to skip the first line of the
+ # script (and any ASCII decoding errors that may have occurred in that line)
+ cmd = [py_executable, '-x', join(os.path.dirname(py_executable), easy_install_script), filename]
+ # jython and pypy don't yet support -x
+ if is_jython or is_pypy:
+ cmd.remove('-x')
+ if filename == 'pip':
+ if never_download:
+ logger.fatal("Can't find any local distributions of pip to install "
+ "and --never-download is set. Either re-run virtualenv "
+ "without the --never-download option, or place a pip "
+ "source distribution (zip/tar.gz/tar.bz2) in one of these "
+ "locations: %r" % search_dirs)
+ sys.exit(1)
+ logger.info('Installing pip from network...')
+ else:
+ logger.info('Installing existing %s distribution: %s' % (
+ os.path.basename(filename), filename))
+ logger.start_progress('Installing pip...')
+ logger.indent += 2
+ def _filter_setup(line):
+ return filter_ez_setup(line, 'pip')
+ try:
+ call_subprocess(cmd, show_stdout=False,
+ filter_stdout=_filter_setup)
+ finally:
+ logger.indent -= 2
+ logger.end_progress()
+
+def filter_ez_setup(line, project_name='setuptools'):
+ if not line.strip():
+ return Logger.DEBUG
+ if project_name == 'distribute':
+ for prefix in ('Extracting', 'Now working', 'Installing', 'Before',
+ 'Scanning', 'Setuptools', 'Egg', 'Already',
+ 'running', 'writing', 'reading', 'installing',
+ 'creating', 'copying', 'byte-compiling', 'removing',
+ 'Processing'):
+ if line.startswith(prefix):
+ return Logger.DEBUG
+ return Logger.DEBUG
+ for prefix in ['Reading ', 'Best match', 'Processing setuptools',
+ 'Copying setuptools', 'Adding setuptools',
+ 'Installing ', 'Installed ']:
+ if line.startswith(prefix):
+ return Logger.DEBUG
+ return Logger.INFO
+
+
+class UpdatingDefaultsHelpFormatter(optparse.IndentedHelpFormatter):
+ """
+ Custom help formatter for use in ConfigOptionParser that updates
+ the defaults before expanding them, allowing them to show up correctly
+ in the help listing
+ """
+ def expand_default(self, option):
+ if self.parser is not None:
+ self.parser.update_defaults(self.parser.defaults)
+ return optparse.IndentedHelpFormatter.expand_default(self, option)
+
+
+class ConfigOptionParser(optparse.OptionParser):
+ """
+ Custom option parser which updates its defaults by by checking the
+ configuration files and environmental variables
+ """
+ def __init__(self, *args, **kwargs):
+ self.config = ConfigParser.RawConfigParser()
+ self.files = self.get_config_files()
+ self.config.read(self.files)
+ optparse.OptionParser.__init__(self, *args, **kwargs)
+
+ def get_config_files(self):
+ config_file = os.environ.get('VIRTUALENV_CONFIG_FILE', False)
+ if config_file and os.path.exists(config_file):
+ return [config_file]
+ return [default_config_file]
+
+ def update_defaults(self, defaults):
+ """
+ Updates the given defaults with values from the config files and
+ the environ. Does a little special handling for certain types of
+ options (lists).
+ """
+ # Then go and look for the other sources of configuration:
+ config = {}
+ # 1. config files
+ config.update(dict(self.get_config_section('virtualenv')))
+ # 2. environmental variables
+ config.update(dict(self.get_environ_vars()))
+ # Then set the options with those values
+ for key, val in config.items():
+ key = key.replace('_', '-')
+ if not key.startswith('--'):
+ key = '--%s' % key # only prefer long opts
+ option = self.get_option(key)
+ if option is not None:
+ # ignore empty values
+ if not val:
+ continue
+ # handle multiline configs
+ if option.action == 'append':
+ val = val.split()
+ else:
+ option.nargs = 1
+ if option.action == 'store_false':
+ val = not strtobool(val)
+ elif option.action in ('store_true', 'count'):
+ val = strtobool(val)
+ try:
+ val = option.convert_value(key, val)
+ except optparse.OptionValueError:
+ e = sys.exc_info()[1]
+ print("An error occured during configuration: %s" % e)
+ sys.exit(3)
+ defaults[option.dest] = val
+ return defaults
+
+ def get_config_section(self, name):
+ """
+ Get a section of a configuration
+ """
+ if self.config.has_section(name):
+ return self.config.items(name)
+ return []
+
+ def get_environ_vars(self, prefix='VIRTUALENV_'):
+ """
+ Returns a generator with all environmental vars with prefix VIRTUALENV
+ """
+ for key, val in os.environ.items():
+ if key.startswith(prefix):
+ yield (key.replace(prefix, '').lower(), val)
+
+ def get_default_values(self):
+ """
+ Overridding to make updating the defaults after instantiation of
+ the option parser possible, update_defaults() does the dirty work.
+ """
+ if not self.process_default_values:
+ # Old, pre-Optik 1.5 behaviour.
+ return optparse.Values(self.defaults)
+
+ defaults = self.update_defaults(self.defaults.copy()) # ours
+ for option in self._get_all_options():
+ default = defaults.get(option.dest)
+ if isinstance(default, basestring):
+ opt_str = option.get_opt_string()
+ defaults[option.dest] = option.check_value(opt_str, default)
+ return optparse.Values(defaults)
+
+
+def main():
+ parser = ConfigOptionParser(
+ version=virtualenv_version,
+ usage="%prog [OPTIONS] DEST_DIR",
+ formatter=UpdatingDefaultsHelpFormatter())
+
+ parser.add_option(
+ '-v', '--verbose',
+ action='count',
+ dest='verbose',
+ default=0,
+ help="Increase verbosity")
+
+ parser.add_option(
+ '-q', '--quiet',
+ action='count',
+ dest='quiet',
+ default=0,
+ help='Decrease verbosity')
+
+ parser.add_option(
+ '-p', '--python',
+ dest='python',
+ metavar='PYTHON_EXE',
+ help='The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 '
+ 'interpreter to create the new environment. The default is the interpreter that '
+ 'virtualenv was installed with (%s)' % sys.executable)
+
+ parser.add_option(
+ '--clear',
+ dest='clear',
+ action='store_true',
+ help="Clear out the non-root install and start from scratch")
+
+ parser.set_defaults(system_site_packages=False)
+ parser.add_option(
+ '--no-site-packages',
+ dest='system_site_packages',
+ action='store_false',
+ help="Don't give access to the global site-packages dir to the "
+ "virtual environment (default)")
+
+ parser.add_option(
+ '--system-site-packages',
+ dest='system_site_packages',
+ action='store_true',
+ help="Give access to the global site-packages dir to the "
+ "virtual environment")
+
+ parser.add_option(
+ '--unzip-setuptools',
+ dest='unzip_setuptools',
+ action='store_true',
+ help="Unzip Setuptools or Distribute when installing it")
+
+ parser.add_option(
+ '--relocatable',
+ dest='relocatable',
+ action='store_true',
+ help='Make an EXISTING virtualenv environment relocatable. '
+ 'This fixes up scripts and makes all .pth files relative')
+
+ parser.add_option(
+ '--distribute', '--use-distribute', # the second option is for legacy reasons here. Hi Kenneth!
+ dest='use_distribute',
+ action='store_true',
+ help='Use Distribute instead of Setuptools. Set environ variable '
+ 'VIRTUALENV_DISTRIBUTE to make it the default ')
+
+ parser.add_option(
+ '--setuptools',
+ dest='use_distribute',
+ action='store_false',
+ help='Use Setuptools instead of Distribute. Set environ variable '
+ 'VIRTUALENV_SETUPTOOLS to make it the default ')
+
+ # Set this to True to use distribute by default, even in Python 2.
+ parser.set_defaults(use_distribute=False)
+
+ default_search_dirs = file_search_dirs()
+ parser.add_option(
+ '--extra-search-dir',
+ dest="search_dirs",
+ action="append",
+ default=default_search_dirs,
+ help="Directory to look for setuptools/distribute/pip distributions in. "
+ "You can add any number of additional --extra-search-dir paths.")
+
+ parser.add_option(
+ '--never-download',
+ dest="never_download",
+ action="store_true",
+ help="Never download anything from the network. Instead, virtualenv will fail "
+ "if local distributions of setuptools/distribute/pip are not present.")
+
+ parser.add_option(
+ '--prompt',
+ dest='prompt',
+ help='Provides an alternative prompt prefix for this environment')
+
+ if 'extend_parser' in globals():
+ extend_parser(parser)
+
+ options, args = parser.parse_args()
+
+ global logger
+
+ if 'adjust_options' in globals():
+ adjust_options(options, args)
+
+ verbosity = options.verbose - options.quiet
+ logger = Logger([(Logger.level_for_integer(2 - verbosity), sys.stdout)])
+
+ if options.python and not os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
+ env = os.environ.copy()
+ interpreter = resolve_interpreter(options.python)
+ if interpreter == sys.executable:
+ logger.warn('Already using interpreter %s' % interpreter)
+ else:
+ logger.notify('Running virtualenv with interpreter %s' % interpreter)
+ env['VIRTUALENV_INTERPRETER_RUNNING'] = 'true'
+ file = __file__
+ if file.endswith('.pyc'):
+ file = file[:-1]
+ popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
+ raise SystemExit(popen.wait())
+
+ # Force --distribute on Python 3, since setuptools is not available.
+ if majver > 2:
+ options.use_distribute = True
+
+ if os.environ.get('PYTHONDONTWRITEBYTECODE') and not options.use_distribute:
+ print(
+ "The PYTHONDONTWRITEBYTECODE environment variable is "
+ "not compatible with setuptools. Either use --distribute "
+ "or unset PYTHONDONTWRITEBYTECODE.")
+ sys.exit(2)
+ if not args:
+ print('You must provide a DEST_DIR')
+ parser.print_help()
+ sys.exit(2)
+ if len(args) > 1:
+ print('There must be only one argument: DEST_DIR (you gave %s)' % (
+ ' '.join(args)))
+ parser.print_help()
+ sys.exit(2)
+
+ home_dir = args[0]
+
+ if os.environ.get('WORKING_ENV'):
+ logger.fatal('ERROR: you cannot run virtualenv while in a workingenv')
+ logger.fatal('Please deactivate your workingenv, then re-run this script')
+ sys.exit(3)
+
+ if 'PYTHONHOME' in os.environ:
+ logger.warn('PYTHONHOME is set. You *must* activate the virtualenv before using it')
+ del os.environ['PYTHONHOME']
+
+ if options.relocatable:
+ make_environment_relocatable(home_dir)
+ return
+
+ create_environment(home_dir,
+ site_packages=options.system_site_packages,
+ clear=options.clear,
+ unzip_setuptools=options.unzip_setuptools,
+ use_distribute=options.use_distribute,
+ prompt=options.prompt,
+ search_dirs=options.search_dirs,
+ never_download=options.never_download)
+ if 'after_install' in globals():
+ after_install(options, home_dir)
+
+def call_subprocess(cmd, show_stdout=True,
+ filter_stdout=None, cwd=None,
+ raise_on_returncode=True, extra_env=None,
+ remove_from_env=None):
+ cmd_parts = []
+ for part in cmd:
+ if len(part) > 45:
+ part = part[:20]+"..."+part[-20:]
+ if ' ' in part or '\n' in part or '"' in part or "'" in part:
+ part = '"%s"' % part.replace('"', '\\"')
+ if hasattr(part, 'decode'):
+ try:
+ part = part.decode(sys.getdefaultencoding())
+ except UnicodeDecodeError:
+ part = part.decode(sys.getfilesystemencoding())
+ cmd_parts.append(part)
+ cmd_desc = ' '.join(cmd_parts)
+ if show_stdout:
+ stdout = None
+ else:
+ stdout = subprocess.PIPE
+ logger.debug("Running command %s" % cmd_desc)
+ if extra_env or remove_from_env:
+ env = os.environ.copy()
+ if extra_env:
+ env.update(extra_env)
+ if remove_from_env:
+ for varname in remove_from_env:
+ env.pop(varname, None)
+ else:
+ env = None
+ try:
+ proc = subprocess.Popen(
+ cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout,
+ cwd=cwd, env=env)
+ except Exception:
+ e = sys.exc_info()[1]
+ logger.fatal(
+ "Error %s while executing command %s" % (e, cmd_desc))
+ raise
+ all_output = []
+ if stdout is not None:
+ stdout = proc.stdout
+ encoding = sys.getdefaultencoding()
+ fs_encoding = sys.getfilesystemencoding()
+ while 1:
+ line = stdout.readline()
+ try:
+ line = line.decode(encoding)
+ except UnicodeDecodeError:
+ line = line.decode(fs_encoding)
+ if not line:
+ break
+ line = line.rstrip()
+ all_output.append(line)
+ if filter_stdout:
+ level = filter_stdout(line)
+ if isinstance(level, tuple):
+ level, line = level
+ logger.log(level, line)
+ if not logger.stdout_level_matches(level):
+ logger.show_progress()
+ else:
+ logger.info(line)
+ else:
+ proc.communicate()
+ proc.wait()
+ if proc.returncode:
+ if raise_on_returncode:
+ if all_output:
+ logger.notify('Complete output from command %s:' % cmd_desc)
+ logger.notify('\n'.join(all_output) + '\n----------------------------------------')
+ raise OSError(
+ "Command %s failed with error code %s"
+ % (cmd_desc, proc.returncode))
+ else:
+ logger.warn(
+ "Command %s had error code %s"
+ % (cmd_desc, proc.returncode))
+
+
+def create_environment(home_dir, site_packages=False, clear=False,
+ unzip_setuptools=False, use_distribute=False,
+ prompt=None, search_dirs=None, never_download=False):
+ """
+ Creates a new environment in ``home_dir``.
+
+ If ``site_packages`` is true, then the global ``site-packages/``
+ directory will be on the path.
+
+ If ``clear`` is true (default False) then the environment will
+ first be cleared.
+ """
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+
+ py_executable = os.path.abspath(install_python(
+ home_dir, lib_dir, inc_dir, bin_dir,
+ site_packages=site_packages, clear=clear))
+
+ install_distutils(home_dir)
+
+ if use_distribute:
+ install_distribute(py_executable, unzip=unzip_setuptools,
+ search_dirs=search_dirs, never_download=never_download)
+ else:
+ install_setuptools(py_executable, unzip=unzip_setuptools,
+ search_dirs=search_dirs, never_download=never_download)
+
+ install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
+
+ install_activate(home_dir, bin_dir, prompt)
+
+def is_executable_file(fpath):
+ return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+def path_locations(home_dir):
+ """Return the path locations for the environment (where libraries are,
+ where scripts go, etc)"""
+ # XXX: We'd use distutils.sysconfig.get_python_inc/lib but its
+ # prefix arg is broken: http://bugs.python.org/issue3386
+ if is_win:
+ # Windows has lots of problems with executables with spaces in
+ # the name; this function will remove them (using the ~1
+ # format):
+ mkdir(home_dir)
+ if ' ' in home_dir:
+ import ctypes
+ GetShortPathName = ctypes.windll.kernel32.GetShortPathNameW
+ size = max(len(home_dir)+1, 256)
+ buf = ctypes.create_unicode_buffer(size)
+ try:
+ u = unicode
+ except NameError:
+ u = str
+ ret = GetShortPathName(u(home_dir), buf, size)
+ if not ret:
+ print('Error: the path "%s" has a space in it' % home_dir)
+ print('We could not determine the short pathname for it.')
+ print('Exiting.')
+ sys.exit(3)
+ home_dir = str(buf.value)
+ lib_dir = join(home_dir, 'Lib')
+ inc_dir = join(home_dir, 'Include')
+ bin_dir = join(home_dir, 'Scripts')
+ if is_jython:
+ lib_dir = join(home_dir, 'Lib')
+ inc_dir = join(home_dir, 'Include')
+ bin_dir = join(home_dir, 'bin')
+ elif is_pypy:
+ lib_dir = home_dir
+ inc_dir = join(home_dir, 'include')
+ bin_dir = join(home_dir, 'bin')
+ elif not is_win:
+ lib_dir = join(home_dir, 'lib', py_version)
+ multiarch_exec = '/usr/bin/multiarch-platform'
+ if is_executable_file(multiarch_exec):
+ # In Mageia (2) and Mandriva distros the include dir must be like:
+ # virtualenv/include/multiarch-x86_64-linux/python2.7
+ # instead of being virtualenv/include/python2.7
+ p = subprocess.Popen(multiarch_exec, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = p.communicate()
+ # stdout.strip is needed to remove newline character
+ inc_dir = join(home_dir, 'include', stdout.strip(), py_version + abiflags)
+ else:
+ inc_dir = join(home_dir, 'include', py_version + abiflags)
+ bin_dir = join(home_dir, 'bin')
+ return home_dir, lib_dir, inc_dir, bin_dir
+
+
+def change_prefix(filename, dst_prefix):
+ prefixes = [sys.prefix]
+
+ if is_darwin:
+ prefixes.extend((
+ os.path.join("/Library/Python", sys.version[:3], "site-packages"),
+ os.path.join(sys.prefix, "Extras", "lib", "python"),
+ os.path.join("~", "Library", "Python", sys.version[:3], "site-packages"),
+ # Python 2.6 no-frameworks
+ os.path.join("~", ".local", "lib","python", sys.version[:3], "site-packages"),
+ # System Python 2.7 on OSX Mountain Lion
+ os.path.join("~", "Library", "Python", sys.version[:3], "lib", "python", "site-packages")))
+
+ if hasattr(sys, 'real_prefix'):
+ prefixes.append(sys.real_prefix)
+ if hasattr(sys, 'base_prefix'):
+ prefixes.append(sys.base_prefix)
+ prefixes = list(map(os.path.expanduser, prefixes))
+ prefixes = list(map(os.path.abspath, prefixes))
+ # Check longer prefixes first so we don't split in the middle of a filename
+ prefixes = sorted(prefixes, key=len, reverse=True)
+ filename = os.path.abspath(filename)
+ for src_prefix in prefixes:
+ if filename.startswith(src_prefix):
+ _, relpath = filename.split(src_prefix, 1)
+ if src_prefix != os.sep: # sys.prefix == "/"
+ assert relpath[0] == os.sep
+ relpath = relpath[1:]
+ return join(dst_prefix, relpath)
+ assert False, "Filename %s does not start with any of these prefixes: %s" % \
+ (filename, prefixes)
+
+def copy_required_modules(dst_prefix):
+ import imp
+ # If we are running under -p, we need to remove the current
+ # directory from sys.path temporarily here, so that we
+ # definitely get the modules from the site directory of
+ # the interpreter we are running under, not the one
+ # virtualenv.py is installed under (which might lead to py2/py3
+ # incompatibility issues)
+ _prev_sys_path = sys.path
+ if os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
+ sys.path = sys.path[1:]
+ try:
+ for modname in REQUIRED_MODULES:
+ if modname in sys.builtin_module_names:
+ logger.info("Ignoring built-in bootstrap module: %s" % modname)
+ continue
+ try:
+ f, filename, _ = imp.find_module(modname)
+ except ImportError:
+ logger.info("Cannot import bootstrap module: %s" % modname)
+ else:
+ if f is not None:
+ f.close()
+ # special-case custom readline.so on OS X:
+ if modname == 'readline' and sys.platform == 'darwin' and not filename.endswith(join('lib-dynload', 'readline.so')):
+ dst_filename = join(dst_prefix, 'lib', 'python%s' % sys.version[:3], 'readline.so')
+ else:
+ dst_filename = change_prefix(filename, dst_prefix)
+ copyfile(filename, dst_filename)
+ if filename.endswith('.pyc'):
+ pyfile = filename[:-1]
+ if os.path.exists(pyfile):
+ copyfile(pyfile, dst_filename[:-1])
+ finally:
+ sys.path = _prev_sys_path
+
+
+def subst_path(prefix_path, prefix, home_dir):
+ prefix_path = os.path.normpath(prefix_path)
+ prefix = os.path.normpath(prefix)
+ home_dir = os.path.normpath(home_dir)
+ if not prefix_path.startswith(prefix):
+ logger.warn('Path not in prefix %r %r', prefix_path, prefix)
+ return
+ return prefix_path.replace(prefix, home_dir, 1)
+
+
+def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear):
+ """Install just the base environment, no distutils patches etc"""
+ if sys.executable.startswith(bin_dir):
+ print('Please use the *system* python to run this script')
+ return
+
+ if clear:
+ rmtree(lib_dir)
+ ## FIXME: why not delete it?
+ ## Maybe it should delete everything with #!/path/to/venv/python in it
+ logger.notify('Not deleting %s', bin_dir)
+
+ if hasattr(sys, 'real_prefix'):
+ logger.notify('Using real prefix %r' % sys.real_prefix)
+ prefix = sys.real_prefix
+ elif hasattr(sys, 'base_prefix'):
+ logger.notify('Using base prefix %r' % sys.base_prefix)
+ prefix = sys.base_prefix
+ else:
+ prefix = sys.prefix
+ mkdir(lib_dir)
+ fix_lib64(lib_dir)
+ stdlib_dirs = [os.path.dirname(os.__file__)]
+ if is_win:
+ stdlib_dirs.append(join(os.path.dirname(stdlib_dirs[0]), 'DLLs'))
+ elif is_darwin:
+ stdlib_dirs.append(join(stdlib_dirs[0], 'site-packages'))
+ if hasattr(os, 'symlink'):
+ logger.info('Symlinking Python bootstrap modules')
+ else:
+ logger.info('Copying Python bootstrap modules')
+ logger.indent += 2
+ try:
+ # copy required files...
+ for stdlib_dir in stdlib_dirs:
+ if not os.path.isdir(stdlib_dir):
+ continue
+ for fn in os.listdir(stdlib_dir):
+ bn = os.path.splitext(fn)[0]
+ if fn != 'site-packages' and bn in REQUIRED_FILES:
+ copyfile(join(stdlib_dir, fn), join(lib_dir, fn))
+ # ...and modules
+ copy_required_modules(home_dir)
+ finally:
+ logger.indent -= 2
+ mkdir(join(lib_dir, 'site-packages'))
+ import site
+ site_filename = site.__file__
+ if site_filename.endswith('.pyc'):
+ site_filename = site_filename[:-1]
+ elif site_filename.endswith('$py.class'):
+ site_filename = site_filename.replace('$py.class', '.py')
+ site_filename_dst = change_prefix(site_filename, home_dir)
+ site_dir = os.path.dirname(site_filename_dst)
+ writefile(site_filename_dst, SITE_PY)
+ writefile(join(site_dir, 'orig-prefix.txt'), prefix)
+ site_packages_filename = join(site_dir, 'no-global-site-packages.txt')
+ if not site_packages:
+ writefile(site_packages_filename, '')
+
+ if is_pypy or is_win:
+ stdinc_dir = join(prefix, 'include')
+ else:
+ stdinc_dir = join(prefix, 'include', py_version + abiflags)
+ if os.path.exists(stdinc_dir):
+ copyfile(stdinc_dir, inc_dir)
+ else:
+ logger.debug('No include dir %s' % stdinc_dir)
+
+ platinc_dir = distutils.sysconfig.get_python_inc(plat_specific=1)
+ if platinc_dir != stdinc_dir:
+ platinc_dest = distutils.sysconfig.get_python_inc(
+ plat_specific=1, prefix=home_dir)
+ if platinc_dir == platinc_dest:
+ # Do platinc_dest manually due to a CPython bug;
+ # not http://bugs.python.org/issue3386 but a close cousin
+ platinc_dest = subst_path(platinc_dir, prefix, home_dir)
+ if platinc_dest:
+ # PyPy's stdinc_dir and prefix are relative to the original binary
+ # (traversing virtualenvs), whereas the platinc_dir is relative to
+ # the inner virtualenv and ignores the prefix argument.
+ # This seems more evolved than designed.
+ copyfile(platinc_dir, platinc_dest)
+
+ # pypy never uses exec_prefix, just ignore it
+ if sys.exec_prefix != prefix and not is_pypy:
+ if is_win:
+ exec_dir = join(sys.exec_prefix, 'lib')
+ elif is_jython:
+ exec_dir = join(sys.exec_prefix, 'Lib')
+ else:
+ exec_dir = join(sys.exec_prefix, 'lib', py_version)
+ for fn in os.listdir(exec_dir):
+ copyfile(join(exec_dir, fn), join(lib_dir, fn))
+
+ if is_jython:
+ # Jython has either jython-dev.jar and javalib/ dir, or just
+ # jython.jar
+ for name in 'jython-dev.jar', 'javalib', 'jython.jar':
+ src = join(prefix, name)
+ if os.path.exists(src):
+ copyfile(src, join(home_dir, name))
+ # XXX: registry should always exist after Jython 2.5rc1
+ src = join(prefix, 'registry')
+ if os.path.exists(src):
+ copyfile(src, join(home_dir, 'registry'), symlink=False)
+ copyfile(join(prefix, 'cachedir'), join(home_dir, 'cachedir'),
+ symlink=False)
+
+ mkdir(bin_dir)
+ py_executable = join(bin_dir, os.path.basename(sys.executable))
+ if 'Python.framework' in prefix:
+ # OS X framework builds cause validation to break
+ # https://github.com/pypa/virtualenv/issues/322
+ if os.environ.get('__PYVENV_LAUNCHER__'):
+ os.unsetenv('__PYVENV_LAUNCHER__')
+ if re.search(r'/Python(?:-32|-64)*$', py_executable):
+ # The name of the python executable is not quite what
+ # we want, rename it.
+ py_executable = os.path.join(
+ os.path.dirname(py_executable), 'python')
+
+ logger.notify('New %s executable in %s', expected_exe, py_executable)
+ pcbuild_dir = os.path.dirname(sys.executable)
+ pyd_pth = os.path.join(lib_dir, 'site-packages', 'virtualenv_builddir_pyd.pth')
+ if is_win and os.path.exists(os.path.join(pcbuild_dir, 'build.bat')):
+ logger.notify('Detected python running from build directory %s', pcbuild_dir)
+ logger.notify('Writing .pth file linking to build directory for *.pyd files')
+ writefile(pyd_pth, pcbuild_dir)
+ else:
+ pcbuild_dir = None
+ if os.path.exists(pyd_pth):
+ logger.info('Deleting %s (not Windows env or not build directory python)' % pyd_pth)
+ os.unlink(pyd_pth)
+
+ if sys.executable != py_executable:
+ ## FIXME: could I just hard link?
+ executable = sys.executable
+ if is_cygwin and os.path.exists(executable + '.exe'):
+ # Cygwin misreports sys.executable sometimes
+ executable += '.exe'
+ py_executable += '.exe'
+ logger.info('Executable actually exists in %s' % executable)
+ shutil.copyfile(executable, py_executable)
+ make_exe(py_executable)
+ if is_win or is_cygwin:
+ pythonw = os.path.join(os.path.dirname(sys.executable), 'pythonw.exe')
+ if os.path.exists(pythonw):
+ logger.info('Also created pythonw.exe')
+ shutil.copyfile(pythonw, os.path.join(os.path.dirname(py_executable), 'pythonw.exe'))
+ python_d = os.path.join(os.path.dirname(sys.executable), 'python_d.exe')
+ python_d_dest = os.path.join(os.path.dirname(py_executable), 'python_d.exe')
+ if os.path.exists(python_d):
+ logger.info('Also created python_d.exe')
+ shutil.copyfile(python_d, python_d_dest)
+ elif os.path.exists(python_d_dest):
+ logger.info('Removed python_d.exe as it is no longer at the source')
+ os.unlink(python_d_dest)
+ # we need to copy the DLL to enforce that windows will load the correct one.
+ # may not exist if we are cygwin.
+ py_executable_dll = 'python%s%s.dll' % (
+ sys.version_info[0], sys.version_info[1])
+ py_executable_dll_d = 'python%s%s_d.dll' % (
+ sys.version_info[0], sys.version_info[1])
+ pythondll = os.path.join(os.path.dirname(sys.executable), py_executable_dll)
+ pythondll_d = os.path.join(os.path.dirname(sys.executable), py_executable_dll_d)
+ pythondll_d_dest = os.path.join(os.path.dirname(py_executable), py_executable_dll_d)
+ if os.path.exists(pythondll):
+ logger.info('Also created %s' % py_executable_dll)
+ shutil.copyfile(pythondll, os.path.join(os.path.dirname(py_executable), py_executable_dll))
+ if os.path.exists(pythondll_d):
+ logger.info('Also created %s' % py_executable_dll_d)
+ shutil.copyfile(pythondll_d, pythondll_d_dest)
+ elif os.path.exists(pythondll_d_dest):
+ logger.info('Removed %s as the source does not exist' % pythondll_d_dest)
+ os.unlink(pythondll_d_dest)
+ if is_pypy:
+ # make a symlink python --> pypy-c
+ python_executable = os.path.join(os.path.dirname(py_executable), 'python')
+ if sys.platform in ('win32', 'cygwin'):
+ python_executable += '.exe'
+ logger.info('Also created executable %s' % python_executable)
+ copyfile(py_executable, python_executable)
+
+ if is_win:
+ for name in 'libexpat.dll', 'libpypy.dll', 'libpypy-c.dll', 'libeay32.dll', 'ssleay32.dll', 'sqlite.dll':
+ src = join(prefix, name)
+ if os.path.exists(src):
+ copyfile(src, join(bin_dir, name))
+
+ if os.path.splitext(os.path.basename(py_executable))[0] != expected_exe:
+ secondary_exe = os.path.join(os.path.dirname(py_executable),
+ expected_exe)
+ py_executable_ext = os.path.splitext(py_executable)[1]
+ if py_executable_ext == '.exe':
+ # python2.4 gives an extension of '.4' :P
+ secondary_exe += py_executable_ext
+ if os.path.exists(secondary_exe):
+ logger.warn('Not overwriting existing %s script %s (you must use %s)'
+ % (expected_exe, secondary_exe, py_executable))
+ else:
+ logger.notify('Also creating executable in %s' % secondary_exe)
+ shutil.copyfile(sys.executable, secondary_exe)
+ make_exe(secondary_exe)
+
+ if '.framework' in prefix:
+ if 'Python.framework' in prefix:
+ logger.debug('MacOSX Python framework detected')
+ # Make sure we use the the embedded interpreter inside
+ # the framework, even if sys.executable points to
+ # the stub executable in ${sys.prefix}/bin
+ # See http://groups.google.com/group/python-virtualenv/
+ # browse_thread/thread/17cab2f85da75951
+ original_python = os.path.join(
+ prefix, 'Resources/Python.app/Contents/MacOS/Python')
+ if 'EPD' in prefix:
+ logger.debug('EPD framework detected')
+ original_python = os.path.join(prefix, 'bin/python')
+ shutil.copy(original_python, py_executable)
+
+ # Copy the framework's dylib into the virtual
+ # environment
+ virtual_lib = os.path.join(home_dir, '.Python')
+
+ if os.path.exists(virtual_lib):
+ os.unlink(virtual_lib)
+ copyfile(
+ os.path.join(prefix, 'Python'),
+ virtual_lib)
+
+ # And then change the install_name of the copied python executable
+ try:
+ mach_o_change(py_executable,
+ os.path.join(prefix, 'Python'),
+ '@executable_path/../.Python')
+ except:
+ e = sys.exc_info()[1]
+ logger.warn("Could not call mach_o_change: %s. "
+ "Trying to call install_name_tool instead." % e)
+ try:
+ call_subprocess(
+ ["install_name_tool", "-change",
+ os.path.join(prefix, 'Python'),
+ '@executable_path/../.Python',
+ py_executable])
+ except:
+ logger.fatal("Could not call install_name_tool -- you must "
+ "have Apple's development tools installed")
+ raise
+
+ if not is_win:
+ # Ensure that 'python', 'pythonX' and 'pythonX.Y' all exist
+ py_exe_version_major = 'python%s' % sys.version_info[0]
+ py_exe_version_major_minor = 'python%s.%s' % (
+ sys.version_info[0], sys.version_info[1])
+ py_exe_no_version = 'python'
+ required_symlinks = [ py_exe_no_version, py_exe_version_major,
+ py_exe_version_major_minor ]
+
+ py_executable_base = os.path.basename(py_executable)
+
+ if py_executable_base in required_symlinks:
+ # Don't try to symlink to yourself.
+ required_symlinks.remove(py_executable_base)
+
+ for pth in required_symlinks:
+ full_pth = join(bin_dir, pth)
+ if os.path.exists(full_pth):
+ os.unlink(full_pth)
+ os.symlink(py_executable_base, full_pth)
+
+ if is_win and ' ' in py_executable:
+ # There's a bug with subprocess on Windows when using a first
+ # argument that has a space in it. Instead we have to quote
+ # the value:
+ py_executable = '"%s"' % py_executable
+ # NOTE: keep this check as one line, cmd.exe doesn't cope with line breaks
+ cmd = [py_executable, '-c', 'import sys;out=sys.stdout;'
+ 'getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))']
+ logger.info('Testing executable with %s %s "%s"' % tuple(cmd))
+ try:
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE)
+ proc_stdout, proc_stderr = proc.communicate()
+ except OSError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.EACCES:
+ logger.fatal('ERROR: The executable %s could not be run: %s' % (py_executable, e))
+ sys.exit(100)
+ else:
+ raise e
+
+ proc_stdout = proc_stdout.strip().decode("utf-8")
+ proc_stdout = os.path.normcase(os.path.abspath(proc_stdout))
+ norm_home_dir = os.path.normcase(os.path.abspath(home_dir))
+ if hasattr(norm_home_dir, 'decode'):
+ norm_home_dir = norm_home_dir.decode(sys.getfilesystemencoding())
+ if proc_stdout != norm_home_dir:
+ logger.fatal(
+ 'ERROR: The executable %s is not functioning' % py_executable)
+ logger.fatal(
+ 'ERROR: It thinks sys.prefix is %r (should be %r)'
+ % (proc_stdout, norm_home_dir))
+ logger.fatal(
+ 'ERROR: virtualenv is not compatible with this system or executable')
+ if is_win:
+ logger.fatal(
+ 'Note: some Windows users have reported this error when they '
+ 'installed Python for "Only this user" or have multiple '
+ 'versions of Python installed. Copying the appropriate '
+ 'PythonXX.dll to the virtualenv Scripts/ directory may fix '
+ 'this problem.')
+ sys.exit(100)
+ else:
+ logger.info('Got sys.prefix result: %r' % proc_stdout)
+
+ pydistutils = os.path.expanduser('~/.pydistutils.cfg')
+ if os.path.exists(pydistutils):
+ logger.notify('Please make sure you remove any previous custom paths from '
+ 'your %s file.' % pydistutils)
+ ## FIXME: really this should be calculated earlier
+
+ fix_local_scheme(home_dir)
+
+ if site_packages:
+ if os.path.exists(site_packages_filename):
+ logger.info('Deleting %s' % site_packages_filename)
+ os.unlink(site_packages_filename)
+
+ return py_executable
+
+
+def install_activate(home_dir, bin_dir, prompt=None):
+ home_dir = os.path.abspath(home_dir)
+ if is_win or is_jython and os._name == 'nt':
+ files = {
+ 'activate.bat': ACTIVATE_BAT,
+ 'deactivate.bat': DEACTIVATE_BAT,
+ 'activate.ps1': ACTIVATE_PS,
+ }
+
+ # MSYS needs paths of the form /c/path/to/file
+ drive, tail = os.path.splitdrive(home_dir.replace(os.sep, '/'))
+ home_dir_msys = (drive and "/%s%s" or "%s%s") % (drive[:1], tail)
+
+ # Run-time conditional enables (basic) Cygwin compatibility
+ home_dir_sh = ("""$(if [ "$OSTYPE" "==" "cygwin" ]; then cygpath -u '%s'; else echo '%s'; fi;)""" %
+ (home_dir, home_dir_msys))
+ files['activate'] = ACTIVATE_SH.replace('__VIRTUAL_ENV__', home_dir_sh)
+
+ else:
+ files = {'activate': ACTIVATE_SH}
+
+ # suppling activate.fish in addition to, not instead of, the
+ # bash script support.
+ files['activate.fish'] = ACTIVATE_FISH
+
+ # same for csh/tcsh support...
+ files['activate.csh'] = ACTIVATE_CSH
+
+ files['activate_this.py'] = ACTIVATE_THIS
+ if hasattr(home_dir, 'decode'):
+ home_dir = home_dir.decode(sys.getfilesystemencoding())
+ vname = os.path.basename(home_dir)
+ for name, content in files.items():
+ content = content.replace('__VIRTUAL_PROMPT__', prompt or '')
+ content = content.replace('__VIRTUAL_WINPROMPT__', prompt or '(%s)' % vname)
+ content = content.replace('__VIRTUAL_ENV__', home_dir)
+ content = content.replace('__VIRTUAL_NAME__', vname)
+ content = content.replace('__BIN_NAME__', os.path.basename(bin_dir))
+ writefile(os.path.join(bin_dir, name), content)
+
+def install_distutils(home_dir):
+ distutils_path = change_prefix(distutils.__path__[0], home_dir)
+ mkdir(distutils_path)
+ ## FIXME: maybe this prefix setting should only be put in place if
+ ## there's a local distutils.cfg with a prefix setting?
+ home_dir = os.path.abspath(home_dir)
+ ## FIXME: this is breaking things, removing for now:
+ #distutils_cfg = DISTUTILS_CFG + "\n[install]\nprefix=%s\n" % home_dir
+ writefile(os.path.join(distutils_path, '__init__.py'), DISTUTILS_INIT)
+ writefile(os.path.join(distutils_path, 'distutils.cfg'), DISTUTILS_CFG, overwrite=False)
+
+def fix_local_scheme(home_dir):
+ """
+ Platforms that use the "posix_local" install scheme (like Ubuntu with
+ Python 2.7) need to be given an additional "local" location, sigh.
+ """
+ try:
+ import sysconfig
+ except ImportError:
+ pass
+ else:
+ if sysconfig._get_default_scheme() == 'posix_local':
+ local_path = os.path.join(home_dir, 'local')
+ if not os.path.exists(local_path):
+ os.mkdir(local_path)
+ for subdir_name in os.listdir(home_dir):
+ if subdir_name == 'local':
+ continue
+ os.symlink(os.path.abspath(os.path.join(home_dir, subdir_name)), \
+ os.path.join(local_path, subdir_name))
+
+def fix_lib64(lib_dir):
+ """
+ Some platforms (particularly Gentoo on x64) put things in lib64/pythonX.Y
+ instead of lib/pythonX.Y. If this is such a platform we'll just create a
+ symlink so lib64 points to lib
+ """
+ if [p for p in distutils.sysconfig.get_config_vars().values()
+ if isinstance(p, basestring) and 'lib64' in p]:
+ logger.debug('This system uses lib64; symlinking lib64 to lib')
+ assert os.path.basename(lib_dir) == 'python%s' % sys.version[:3], (
+ "Unexpected python lib dir: %r" % lib_dir)
+ lib_parent = os.path.dirname(lib_dir)
+ top_level = os.path.dirname(lib_parent)
+ lib_dir = os.path.join(top_level, 'lib')
+ lib64_link = os.path.join(top_level, 'lib64')
+ assert os.path.basename(lib_parent) == 'lib', (
+ "Unexpected parent dir: %r" % lib_parent)
+ if os.path.lexists(lib64_link):
+ return
+ os.symlink('lib', lib64_link)
+
+def resolve_interpreter(exe):
+ """
+ If the executable given isn't an absolute path, search $PATH for the interpreter
+ """
+ if os.path.abspath(exe) != exe:
+ paths = os.environ.get('PATH', '').split(os.pathsep)
+ for path in paths:
+ if os.path.exists(os.path.join(path, exe)):
+ exe = os.path.join(path, exe)
+ break
+ if not os.path.exists(exe):
+ logger.fatal('The executable %s (from --python=%s) does not exist' % (exe, exe))
+ raise SystemExit(3)
+ if not is_executable(exe):
+ logger.fatal('The executable %s (from --python=%s) is not executable' % (exe, exe))
+ raise SystemExit(3)
+ return exe
+
+def is_executable(exe):
+ """Checks a file is executable"""
+ return os.access(exe, os.X_OK)
+
+############################################################
+## Relocating the environment:
+
+def make_environment_relocatable(home_dir):
+ """
+ Makes the already-existing environment use relative paths, and takes out
+ the #!-based environment selection in scripts.
+ """
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+ activate_this = os.path.join(bin_dir, 'activate_this.py')
+ if not os.path.exists(activate_this):
+ logger.fatal(
+ 'The environment doesn\'t have a file %s -- please re-run virtualenv '
+ 'on this environment to update it' % activate_this)
+ fixup_scripts(home_dir)
+ fixup_pth_and_egg_link(home_dir)
+ ## FIXME: need to fix up distutils.cfg
+
+OK_ABS_SCRIPTS = ['python', 'python%s' % sys.version[:3],
+ 'activate', 'activate.bat', 'activate_this.py']
+
+def fixup_scripts(home_dir):
+ # This is what we expect at the top of scripts:
+ shebang = '#!%s/bin/python' % os.path.normcase(os.path.abspath(home_dir))
+ # This is what we'll put:
+ new_shebang = '#!/usr/bin/env python%s' % sys.version[:3]
+ if is_win:
+ bin_suffix = 'Scripts'
+ else:
+ bin_suffix = 'bin'
+ bin_dir = os.path.join(home_dir, bin_suffix)
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+ for filename in os.listdir(bin_dir):
+ filename = os.path.join(bin_dir, filename)
+ if not os.path.isfile(filename):
+ # ignore subdirs, e.g. .svn ones.
+ continue
+ f = open(filename, 'rb')
+ try:
+ try:
+ lines = f.read().decode('utf-8').splitlines()
+ except UnicodeDecodeError:
+ # This is probably a binary program instead
+ # of a script, so just ignore it.
+ continue
+ finally:
+ f.close()
+ if not lines:
+ logger.warn('Script %s is an empty file' % filename)
+ continue
+ if not lines[0].strip().startswith(shebang):
+ if os.path.basename(filename) in OK_ABS_SCRIPTS:
+ logger.debug('Cannot make script %s relative' % filename)
+ elif lines[0].strip() == new_shebang:
+ logger.info('Script %s has already been made relative' % filename)
+ else:
+ logger.warn('Script %s cannot be made relative (it\'s not a normal script that starts with %s)'
+ % (filename, shebang))
+ continue
+ logger.notify('Making script %s relative' % filename)
+ script = relative_script([new_shebang] + lines[1:])
+ f = open(filename, 'wb')
+ f.write('\n'.join(script).encode('utf-8'))
+ f.close()
+
+def relative_script(lines):
+ "Return a script that'll work in a relocatable environment."
+ activate = "import os; activate_this=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'activate_this.py'); execfile(activate_this, dict(__file__=activate_this)); del os, activate_this"
+ # Find the last future statement in the script. If we insert the activation
+ # line before a future statement, Python will raise a SyntaxError.
+ activate_at = None
+ for idx, line in reversed(list(enumerate(lines))):
+ if line.split()[:3] == ['from', '__future__', 'import']:
+ activate_at = idx + 1
+ break
+ if activate_at is None:
+ # Activate after the shebang.
+ activate_at = 1
+ return lines[:activate_at] + ['', activate, ''] + lines[activate_at:]
+
+def fixup_pth_and_egg_link(home_dir, sys_path=None):
+ """Makes .pth and .egg-link files use relative paths"""
+ home_dir = os.path.normcase(os.path.abspath(home_dir))
+ if sys_path is None:
+ sys_path = sys.path
+ for path in sys_path:
+ if not path:
+ path = '.'
+ if not os.path.isdir(path):
+ continue
+ path = os.path.normcase(os.path.abspath(path))
+ if not path.startswith(home_dir):
+ logger.debug('Skipping system (non-environment) directory %s' % path)
+ continue
+ for filename in os.listdir(path):
+ filename = os.path.join(path, filename)
+ if filename.endswith('.pth'):
+ if not os.access(filename, os.W_OK):
+ logger.warn('Cannot write .pth file %s, skipping' % filename)
+ else:
+ fixup_pth_file(filename)
+ if filename.endswith('.egg-link'):
+ if not os.access(filename, os.W_OK):
+ logger.warn('Cannot write .egg-link file %s, skipping' % filename)
+ else:
+ fixup_egg_link(filename)
+
+def fixup_pth_file(filename):
+ lines = []
+ prev_lines = []
+ f = open(filename)
+ prev_lines = f.readlines()
+ f.close()
+ for line in prev_lines:
+ line = line.strip()
+ if (not line or line.startswith('#') or line.startswith('import ')
+ or os.path.abspath(line) != line):
+ lines.append(line)
+ else:
+ new_value = make_relative_path(filename, line)
+ if line != new_value:
+ logger.debug('Rewriting path %s as %s (in %s)' % (line, new_value, filename))
+ lines.append(new_value)
+ if lines == prev_lines:
+ logger.info('No changes to .pth file %s' % filename)
+ return
+ logger.notify('Making paths in .pth file %s relative' % filename)
+ f = open(filename, 'w')
+ f.write('\n'.join(lines) + '\n')
+ f.close()
+
+def fixup_egg_link(filename):
+ f = open(filename)
+ link = f.readline().strip()
+ f.close()
+ if os.path.abspath(link) != link:
+ logger.debug('Link in %s already relative' % filename)
+ return
+ new_link = make_relative_path(filename, link)
+ logger.notify('Rewriting link %s in %s as %s' % (link, filename, new_link))
+ f = open(filename, 'w')
+ f.write(new_link)
+ f.close()
+
+def make_relative_path(source, dest, dest_is_directory=True):
+ """
+ Make a filename relative, where the filename is dest, and it is
+ being referred to from the filename source.
+
+ >>> make_relative_path('/usr/share/something/a-file.pth',
+ ... '/usr/share/another-place/src/Directory')
+ '../another-place/src/Directory'
+ >>> make_relative_path('/usr/share/something/a-file.pth',
+ ... '/home/user/src/Directory')
+ '../../../home/user/src/Directory'
+ >>> make_relative_path('/usr/share/a-file.pth', '/usr/share/')
+ './'
+ """
+ source = os.path.dirname(source)
+ if not dest_is_directory:
+ dest_filename = os.path.basename(dest)
+ dest = os.path.dirname(dest)
+ dest = os.path.normpath(os.path.abspath(dest))
+ source = os.path.normpath(os.path.abspath(source))
+ dest_parts = dest.strip(os.path.sep).split(os.path.sep)
+ source_parts = source.strip(os.path.sep).split(os.path.sep)
+ while dest_parts and source_parts and dest_parts[0] == source_parts[0]:
+ dest_parts.pop(0)
+ source_parts.pop(0)
+ full_parts = ['..']*len(source_parts) + dest_parts
+ if not dest_is_directory:
+ full_parts.append(dest_filename)
+ if not full_parts:
+ # Special case for the current directory (otherwise it'd be '')
+ return './'
+ return os.path.sep.join(full_parts)
+
+
+
+############################################################
+## Bootstrap script creation:
+
+def create_bootstrap_script(extra_text, python_version=''):
+ """
+ Creates a bootstrap script, which is like this script but with
+ extend_parser, adjust_options, and after_install hooks.
+
+ This returns a string that (written to disk of course) can be used
+ as a bootstrap script with your own customizations. The script
+ will be the standard virtualenv.py script, with your extra text
+ added (your extra text should be Python code).
+
+ If you include these functions, they will be called:
+
+ ``extend_parser(optparse_parser)``:
+ You can add or remove options from the parser here.
+
+ ``adjust_options(options, args)``:
+ You can change options here, or change the args (if you accept
+ different kinds of arguments, be sure you modify ``args`` so it is
+ only ``[DEST_DIR]``).
+
+ ``after_install(options, home_dir)``:
+
+ After everything is installed, this function is called. This
+ is probably the function you are most likely to use. An
+ example would be::
+
+ def after_install(options, home_dir):
+ subprocess.call([join(home_dir, 'bin', 'easy_install'),
+ 'MyPackage'])
+ subprocess.call([join(home_dir, 'bin', 'my-package-script'),
+ 'setup', home_dir])
+
+ This example immediately installs a package, and runs a setup
+ script from that package.
+
+ If you provide something like ``python_version='2.5'`` then the
+ script will start with ``#!/usr/bin/env python2.5`` instead of
+ ``#!/usr/bin/env python``. You can use this when the script must
+ be run with a particular Python version.
+ """
+ filename = __file__
+ if filename.endswith('.pyc'):
+ filename = filename[:-1]
+ f = codecs.open(filename, 'r', encoding='utf-8')
+ content = f.read()
+ f.close()
+ py_exe = 'python%s' % python_version
+ content = (('#!/usr/bin/env %s\n' % py_exe)
+ + '## WARNING: This file is generated\n'
+ + content)
+ return content.replace('##EXT' 'END##', extra_text)
+
+import sys
+sys.path.append('/Users/ymh/dev/workspace/tweet_live/script/virtualenv/res/lib')
+sys.path.append('/Users/ymh/dev/workspace/tweet_live/script/virtualenv/script/res')
+from res_create_env import generate_install_methods
+adjust_options, extend_parser, after_install = generate_install_methods(path_locations, '/Users/ymh/dev/workspace/tweet_live/script/virtualenv/res/src', Logger, call_subprocess)
+
+
+def convert(s):
+ b = base64.b64decode(s.encode('ascii'))
+ return zlib.decompress(b).decode('utf-8')
+
+##file site.py
+SITE_PY = convert("""
+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
+CP4PNIke9w==
+""")
+
+##file ez_setup.py
+EZ_SETUP_PY = convert("""
+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
+qL7+C1AkCcw=
+""")
+
+##file distribute_from_egg.py
+DISTRIBUTE_FROM_EGG_PY = convert("""
+eJw9j8tqAzEMRfcG/4MgmxQyptkGusonZBmGoGTUGYFfWPKE6dfXTkM3gqt7rh47OKP3NMF3SQFW
+LlrRU1zhybpAxoKBlIqcrNnBdRjQP3GTocYfzmNrrCPQPN9iwzpxSQfQhWBi0cL3qtRtYIG/4Mv0
+KApY5hooqrOGQ05FQTaxptF9Fnx16Rq0XofjaE1XGXVxHIWK7j8P8EY/rHndLqQ1a0pe3COFgHFy
+hLLdWkDbi/DeEpCjNb3u/zccT2Ob8gtnwVyI
+""")
+
+##file distribute_setup.py
+DISTRIBUTE_SETUP_PY = convert("""
+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
+""")
+
+##file activate.sh
+ACTIVATE_SH = convert("""
+eJytVVFvokAQfudXTLEPtTlLeo9tvMSmJpq02hSvl7u2wRUG2QR2DSxSe7n/frOACEVNLlceRHa+
+nfl25pvZDswCnoDPQ4QoTRQsENIEPci4CsBMZBq7CAsuLOYqvmYKTTj3YxnBgiXBudGBjUzBZUJI
+BXEqgCvweIyuCjeG4eF2F5x14bcB9KQiQQWrjSddI1/oQIx6SYYeoFjzWIoIhYI1izlbhJjkKO7D
+M/QEmKfO9O7WeRo/zr4P7pyHwWxkwitcgwpQ5Ej96OX+PmiFwLeVjFUOrNYKaq1Nud3nR2n8nI2m
+k9H0friPTGVsUdptaxGrTEfpNVFEskxpXtUkkCkl1UNF9cgLBkx48J4EXyALuBtAwNYIjF5kcmUU
+abMKmMq1ULoiRbgsDEkTSsKSGFCJ6Z8vY/2xYiSacmtyAfCDdCNTVZoVF8vSTQOoEwSnOrngBkws
+MYGMBMg8/bMBLSYKS7pYEXP0PqT+ZmBT0Xuy+Pplj5yn4aM9nk72JD8/Wi+Gr98sD9eWSMOwkapD
+BbUv91XSvmyVkICt2tmXR4tWmrcUCsjWOpw87YidEC8i0gdTSOFhouJUNxR+4NYBG0MftoCTD9F7
+2rTtxG3oPwY1b2HncYwhrlmj6Wq924xtGDWqfdNxap+OYxplEurnMVo9RWks+rH8qKEtx7kZT5zJ
+4H7oOFclrN6uFe+d+nW2aIUsSgs/42EIPuOhXq+jEo3S6tX6w2ilNkDnIpHCWdEQhFgwj9pkk7FN
+l/y5eQvRSIQ5+TrL05lewxWpt/Lbhes5cJF3mLET1MGhcKCF+40tNWnUulxrpojwDo2sObdje3Bz
+N3QeHqf3D7OjEXMVV8LN3ZlvuzoWHqiUcNKHtwNd0IbvPGKYYM31nPKCgkUILw3KL+Y8l7aO1ArS
+Ad37nIU0fCj5NE5gQCuC5sOSu+UdI2NeXg/lFkQIlFpdWVaWZRfvqGiirC9o6liJ9FXGYrSY9mI1
+D/Ncozgn13vJvsznr7DnkJWXsyMH7e42ljdJ+aqNDF1bFnKWFLdj31xtaJYK6EXFgqmV/ymD/ROG
++n8O9H8f5vsGOWXsL1+1k3g=
+""")
+
+##file activate.fish
+ACTIVATE_FISH = convert("""
+eJyVVWFv2jAQ/c6vuBoqQVWC9nVSNVGVCaS2VC2rNLWVZZILWAs2s52wVvvxsyEJDrjbmgpK7PP5
+3bt3d22YLbmGlGcIq1wbmCPkGhPYcLMEEsGciwGLDS+YwSjlekngLFVyBe73GXSXxqw/DwbuTS8x
+yyKpFr1WG15lDjETQhpQuQBuIOEKY5O9tlppLqxHKSDByjVAPwEy+mXtCq5MzjIUBTCRgEKTKwFG
+gpBqxTLYXgN2myspVigMaYF92tZSowGZJf4mFExxNs9Qb614CgZtmH0BpEOn11f0cXI/+za8pnfD
+2ZjA1sg9zlV/8QvcMhxbNu0QwgYokn/d+n02nt6Opzcjcnx1vXcIoN74O4ymWQXmHURfJw9jenc/
+vbmb0enj6P5+cuVhqlKm3S0u2XRtRbA2QQAhV7VhBF0rsgUX9Ur1rBUXJgVSy8O751k8mzY5OrKH
+RW3eaQhYGTr8hrXO59ALhxQ83mCsDLAid3T72CCSdJhaFE+fXgicXAARUiR2WeVO37gH3oYHzFKo
+9k7CaPZ1UeNwH1tWuXA4uFKYYcEa8vaKqXl7q1UpygMPhFLvlVKyNzsSM3S2km7UBOl4xweUXk5u
+6e3wZmQ9leY1XE/Ili670tr9g/5POBBpGIJXCCF79L1siarl/dbESa8mD8PL61GpzqpzuMS7tqeB
+1YkALrRBloBMbR9yLcVx7frQAgUqR7NZIuzkEu110gbNit1enNs82Rx5utq7Z3prU78HFRgulqNC
+OTwbqJa9vkJFclQgZSjbKeBgSsUtCtt9D8OwAbIVJuewQdfvQRaoFE9wd1TmCuRG7OgJ1bVXGHc7
+z5WDL/WW36v2oi37CyVBak61+yPBA9C1qqGxzKQqZ0oPuocU9hpud0PIp8sDHkXR1HKkNlzjuUWA
+a0enFUyzOWZA4yXGP+ZMI3Tdt2OuqU/SO4q64526cPE0A7ZyW2PMbWZiZ5HamIZ2RcCKLXhcDl2b
+vXL+eccQoRzem80mekPDEiyiWK4GWqZmwxQOmPM0eIfgp1P9cqrBsewR2p/DPMtt+pfcYM+Ls2uh
+hALufTAdmGl8B1H3VPd2af8fQAc4PgqjlIBL9cGQqNpXaAwe3LrtVn8AkZTUxg==
+""")
+
+##file activate.csh
+ACTIVATE_CSH = convert("""
+eJx9VG1P2zAQ/u5fcYQKNgTNPtN1WxlIQ4KCUEGaxuQ6yYVYSuzKdhqVX7+zk3bpy5YPUXL3PPfc
+ne98DLNCWshliVDV1kGCUFvMoJGugMjq2qQIiVSxSJ1cCofD1BYRnOVGV0CfZ0N2DD91DalQSjsw
+tQLpIJMGU1euvPe7QeJlkKzgWixlhnAt4aoUVsLnLBiy5NtbJWQ5THX1ZciYKKWwkOFaE04dUm6D
+r/zh7pq/3D7Nnid3/HEy+wFHY/gEJydg0aFaQrBFgz1c5DG1IhTs+UZgsBC2GMFBlaeH+8dZXwcW
+VPvCjXdlAvCfQsE7al0+07XjZvrSCUevR5dnkVeKlFYZmUztG4BdzL2u9KyLVabTU0bdfg7a0hgs
+cSmUg6UwUiQl2iHrcbcVGNvPCiLOe7+cRwG13z9qRGgx2z6DHjfm/Op2yqeT+xvOLzs0PTKHDz2V
+tkckFHoQfQRXoGJAj9el0FyJCmEMhzgMS4sB7KPOE2ExoLcSieYwDvR+cP8cg11gKkVJc2wRcm1g
+QhYFlXiTaTfO2ki0fQoiFM4tLuO4aZrhOzqR4dIPcWx17hphMBY+Srwh7RTyN83XOWkcSPh1Pg/k
+TXX/jbJTbMtUmcxZ+/bbqOsy82suFQg/BhdSOTRhMNBHlUarCpU7JzBhmkKmRejKOQzayQe6MWoa
+n1wqWmuh6LZAaHxcdeqIlVLhIBJdO9/kbl0It2oEXQj+eGjJOuvOIR/YGRqvFhttUB2XTvLXYN2H
+37CBdbW2W7j2r2+VsCn0doVWcFG1/4y1VwBjfwAyoZhD
+""")
+
+##file activate.bat
+ACTIVATE_BAT = convert("""
+eJx9UdEKgjAUfW6wfxjiIH+hEDKUFHSKLCMI7kNOEkIf9P9pTJ3OLJ/03HPPPed4Es9XS9qqwqgT
+PbGKKOdXL4aAFS7A4gvAwgijuiKlqOpGlATS2NeMLE+TjJM9RkQ+SmqAXLrBo1LLIeLdiWlD6jZt
+r7VNubWkndkXaxg5GO3UaOOKS6drO3luDDiO5my3iA0YAKGzPRV1ack8cOdhysI0CYzIPzjSiH5X
+0QcvC8Lfaj0emsVKYF2rhL5L3fCkVjV76kShi59NHwDniAHzkgDgqBcwOgTMx+gDQQqXCw==
+""")
+
+##file deactivate.bat
+DEACTIVATE_BAT = convert("""
+eJxzSE3OyFfIT0vj4spMU0hJTcvMS01RiPf3cYkP8wwKCXX0iQ8I8vcNCFHQ4FIAguLUEgUliIit
+KhZlqkpcnCA1WKRsuTTxWBIZ4uHv5+Hv64piEVwU3TK4BNBCmHIcKvDb6xjigWIjkI9uF1AIu7dA
+akGGW7n6uXABALCXXUI=
+""")
+
+##file activate.ps1
+ACTIVATE_PS = convert("""
+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
+QastYw==
+""")
+
+##file distutils-init.py
+DISTUTILS_INIT = convert("""
+eJytV1uL4zYUfvevOE0ottuMW9q3gVDa3aUMXXbLMlDKMBiNrSTqOJKRlMxkf33PkXyRbGe7Dw2E
+UXTu37lpxLFV2oIyifAncxmOL0xLIfcG+gv80x9VW6maw7o/CANSWWBwFtqeWMPlGY6qPjV8A0bB
+C4eKSTgZ5LRgFeyErMEeOBhbN+Ipgeizhjtnhkn7DdyjuNLPoCS0l/ayQTG0djwZC08cLXozeMss
+aG5EzQ0IScpnWtHSTXuxByV/QCmxE7y+eS0uxWeoheaVVfqSJHiU7Mhhi6gULbOHorshkrEnKxpT
+0n3A8Y8SMpuwZx6aoix3ouFlmW8gHRSkeSJ2g7hU+kiHLDaQw3bmRDaTGfTnty7gPm0FHbIBg9U9
+oh1kZzAFLaue2R6htPCtAda2nGlDSUJ4PZBgCJBGVcwKTAMz/vJiLD+Oin5Z5QlvDPdulC6EsiyE
+NFzb7McNTKJzbJqzphx92VKRFY1idenzmq3K0emRcbWBD0ryqc4NZGmKOOOX9Pz5x+/l27tP797c
+f/z0d+4NruGNai8uAM0bfsYaw8itFk8ny41jsfpyO+BWlpqfhcG4yxLdi/0tQqoT4a8Vby382mt8
+p7XSo7aWGdPBc+b6utaBmCQ7rQKQoWtAuthQCiold2KfJIPTT8xwg9blPumc+YDZC/wYGdAyHpJk
+vUbHbHWAp5No6pK/WhhLEWrFjUwtPEv1Agf8YmnsuXUQYkeZoHm8ogP16gt2uHoxcEMdf2C6pmbw
+hUMsWGhanboh4IzzmsIpWs134jVPqD/c74bZHdY69UKKSn/+KfVhxLgUlToemayLMYQOqfEC61bh
+cbhwaqoGUzIyZRFHPmau5juaWqwRn3mpWmoEA5nhzS5gog/5jbcFQqOZvmBasZtwYlG93k5GEiyw
+buHhMWLjDarEGpMGB2LFs5nIJkhp/nUmZneFaRth++lieJtHepIvKgx6PJqIlD9X2j6pG1i9x3pZ
+5bHuCPFiirGHeO7McvoXkz786GaKVzC9DSpnOxJdc4xm6NSVq7lNEnKdVlnpu9BNYoKX2Iq3wvgh
+gGEUM66kK6j4NiyoneuPLSwaCWDxczgaolEWpiMyDVDb7dNuLAbriL8ig8mmeju31oNvQdpnvEPC
+1vAXbWacGRVrGt/uXN/gU0CDDwgooKRrHfTBb1/s9lYZ8ZqOBU0yLvpuP6+K9hLFsvIjeNhBi0KL
+MlOuWRn3FRwx5oHXjl0YImUx0+gLzjGchrgzca026ETmYJzPD+IpuKzNi8AFn048Thd63OdD86M6
+84zE8yQm0VqXdbbgvub2pKVnS76icBGdeTHHXTKspUmr4NYo/furFLKiMdQzFjHJNcdAnMhltBJK
+0/IKX3DVFqvPJ2dLE7bDBkH0l/PJ29074+F0CsGYOxsb7U3myTUncYfXqnLLfa6sJybX4g+hmcjO
+kMRBfA1JellfRRKJcyRpxdS4rIl6FdmQCWjo/o9Qz7yKffoP4JHjOvABcRn4CZIT2RH4jnxmfpVG
+qgLaAvQBNfuO6X0/Ux02nb4FKx3vgP+XnkX0QW9pLy/NsXgdN24dD3LxO2Nwil7Zlc1dqtP3d7/h
+kzp1/+7hGBuY4pk0XD/0Ao/oTe/XGrfyM773aB7iUhgkpy+dwAMalxMP0DrBcsVw/6p25+/hobP9
+GBknrWExDhLJ1bwt1NcCNblaFbMKCyvmX0PeRaQ=
+""")
+
+##file distutils.cfg
+DISTUTILS_CFG = convert("""
+eJxNj00KwkAMhfc9xYNuxe4Ft57AjYiUtDO1wXSmNJnK3N5pdSEEAu8nH6lxHVlRhtDHMPATA4uH
+xJ4EFmGbvfJiicSHFRzUSISMY6hq3GLCRLnIvSTnEefN0FIjw5tF0Hkk9Q5dRunBsVoyFi24aaLg
+9FDOlL0FPGluf4QjcInLlxd6f6rqkgPu/5nHLg0cXCscXoozRrP51DRT3j9QNl99AP53T2Q=
+""")
+
+##file activate_this.py
+ACTIVATE_THIS = convert("""
+eJyNU01v2zAMvetXEB4K21jmDOstQA4dMGCHbeihlyEIDMWmG62yJEiKE//7kXKdpN2KzYBt8euR
+fKSyLPs8wiEo8wh4wqZTGou4V6Hm0wJa1cSiTkJdr8+GsoTRHuCotBayiWqQEYGtMCgfD1KjGYBe
+5a3p0cRKiAe2NtLADikftnDco0ko/SFEVgEZ8aRC5GLux7i3BpSJ6J1H+i7A2CjiHq9z7JRZuuQq
+siwTIvpxJYCeuWaBpwZdhB+yxy/eWz+ZvVSU8C4E9FFZkyxFsvCT/ZzL8gcz9aXVE14Yyp2M+2W0
+y7n5mp0qN+avKXvbsyyzUqjeWR8hjGE+2iCE1W1tQ82hsCZN9UzlJr+/e/iab8WfqsmPI6pWeUPd
+FrMsd4H/55poeO9n54COhUs+sZNEzNtg/wanpjpuqHJaxs76HtZryI/K3H7KJ/KDIhqcbJ7kI4ar
+XL+sMgXnX0D+Te2Iy5xdP8yueSlQB/x/ED2BTAtyE3K4SYUN6AMNfbO63f4lBW3bUJPbTL+mjSxS
+PyRfJkZRgj+VbFv+EzHFi5pKwUEepa4JslMnwkowSRCXI+m5XvEOvtuBrxHdhLalG0JofYBok6qj
+YdN2dEngUlbC4PG60M1WEN0piu7Nq7on0mgyyUw3iV1etLo6r/81biWdQ9MWHFaePWZYaq+nmp+t
+s3az+sj7eA0jfgPfeoN1
+""")
+
+MH_MAGIC = 0xfeedface
+MH_CIGAM = 0xcefaedfe
+MH_MAGIC_64 = 0xfeedfacf
+MH_CIGAM_64 = 0xcffaedfe
+FAT_MAGIC = 0xcafebabe
+BIG_ENDIAN = '>'
+LITTLE_ENDIAN = '<'
+LC_LOAD_DYLIB = 0xc
+maxint = majver == 3 and getattr(sys, 'maxsize') or getattr(sys, 'maxint')
+
+
+class fileview(object):
+ """
+ A proxy for file-like objects that exposes a given view of a file.
+ Modified from macholib.
+ """
+
+ def __init__(self, fileobj, start=0, size=maxint):
+ if isinstance(fileobj, fileview):
+ self._fileobj = fileobj._fileobj
+ else:
+ self._fileobj = fileobj
+ self._start = start
+ self._end = start + size
+ self._pos = 0
+
+ def __repr__(self):
+ return '<fileview [%d, %d] %r>' % (
+ self._start, self._end, self._fileobj)
+
+ def tell(self):
+ return self._pos
+
+ def _checkwindow(self, seekto, op):
+ if not (self._start <= seekto <= self._end):
+ raise IOError("%s to offset %d is outside window [%d, %d]" % (
+ op, seekto, self._start, self._end))
+
+ def seek(self, offset, whence=0):
+ seekto = offset
+ if whence == os.SEEK_SET:
+ seekto += self._start
+ elif whence == os.SEEK_CUR:
+ seekto += self._start + self._pos
+ elif whence == os.SEEK_END:
+ seekto += self._end
+ else:
+ raise IOError("Invalid whence argument to seek: %r" % (whence,))
+ self._checkwindow(seekto, 'seek')
+ self._fileobj.seek(seekto)
+ self._pos = seekto - self._start
+
+ def write(self, bytes):
+ here = self._start + self._pos
+ self._checkwindow(here, 'write')
+ self._checkwindow(here + len(bytes), 'write')
+ self._fileobj.seek(here, os.SEEK_SET)
+ self._fileobj.write(bytes)
+ self._pos += len(bytes)
+
+ def read(self, size=maxint):
+ assert size >= 0
+ here = self._start + self._pos
+ self._checkwindow(here, 'read')
+ size = min(size, self._end - here)
+ self._fileobj.seek(here, os.SEEK_SET)
+ bytes = self._fileobj.read(size)
+ self._pos += len(bytes)
+ return bytes
+
+
+def read_data(file, endian, num=1):
+ """
+ Read a given number of 32-bits unsigned integers from the given file
+ with the given endianness.
+ """
+ res = struct.unpack(endian + 'L' * num, file.read(num * 4))
+ if len(res) == 1:
+ return res[0]
+ return res
+
+
+def mach_o_change(path, what, value):
+ """
+ Replace a given name (what) in any LC_LOAD_DYLIB command found in
+ the given binary with a new name (value), provided it's shorter.
+ """
+
+ def do_macho(file, bits, endian):
+ # Read Mach-O header (the magic number is assumed read by the caller)
+ cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags = read_data(file, endian, 6)
+ # 64-bits header has one more field.
+ if bits == 64:
+ read_data(file, endian)
+ # The header is followed by ncmds commands
+ for n in range(ncmds):
+ where = file.tell()
+ # Read command header
+ cmd, cmdsize = read_data(file, endian, 2)
+ if cmd == LC_LOAD_DYLIB:
+ # The first data field in LC_LOAD_DYLIB commands is the
+ # offset of the name, starting from the beginning of the
+ # command.
+ name_offset = read_data(file, endian)
+ file.seek(where + name_offset, os.SEEK_SET)
+ # Read the NUL terminated string
+ load = file.read(cmdsize - name_offset).decode()
+ load = load[:load.index('\0')]
+ # If the string is what is being replaced, overwrite it.
+ if load == what:
+ file.seek(where + name_offset, os.SEEK_SET)
+ file.write(value.encode() + '\0'.encode())
+ # Seek to the next command
+ file.seek(where + cmdsize, os.SEEK_SET)
+
+ def do_file(file, offset=0, size=maxint):
+ file = fileview(file, offset, size)
+ # Read magic number
+ magic = read_data(file, BIG_ENDIAN)
+ if magic == FAT_MAGIC:
+ # Fat binaries contain nfat_arch Mach-O binaries
+ nfat_arch = read_data(file, BIG_ENDIAN)
+ for n in range(nfat_arch):
+ # Read arch header
+ cputype, cpusubtype, offset, size, align = read_data(file, BIG_ENDIAN, 5)
+ do_file(file, offset, size)
+ elif magic == MH_MAGIC:
+ do_macho(file, 32, BIG_ENDIAN)
+ elif magic == MH_CIGAM:
+ do_macho(file, 32, LITTLE_ENDIAN)
+ elif magic == MH_MAGIC_64:
+ do_macho(file, 64, BIG_ENDIAN)
+ elif magic == MH_CIGAM_64:
+ do_macho(file, 64, LITTLE_ENDIAN)
+
+ assert(len(what) >= len(value))
+ do_file(open(path, 'r+b'))
+
+
+if __name__ == '__main__':
+ main()
+
+## TODO:
+## Copy python.exe.manifest
+## Monkeypatch distutils.sysconfig
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/script/res/res_create_env.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,34 @@
+import platform
+
+from lib_create_env import lib_generate_install_methods
+
+system_str = platform.system()
+
+
+INSTALLS = [ #(key,method, option_str, dict_extra_env)
+ 'HTTPLIB2',
+ 'OAUTH2',
+ 'LXML',
+ 'PSYCOPG2',
+ 'ANYJSON',
+ 'LOCKFILE',
+ 'DAEMON',
+ 'PYTZ',
+ 'DATEUTIL',
+ 'SIMPLEJSON',
+ 'SQLALCHEMY',
+ 'TWEEPY',
+ 'TWITTER',
+ 'TWITTER-TEXT',
+ 'REQUESTS',
+]
+
+if system_str == "Linux":
+ INSTALLS.insert(2, 'DISTRIBUTE')
+
+OPTIONS_TO_ADD = ['clear', 'type_install=local', 'unzip_setuptools']
+if system_str != 'Linux':
+ OPTIONS_TO_ADD.append('use_distribute')
+
+def generate_install_methods(path_locations, src_base, Logger, call_subprocess):
+ return lib_generate_install_methods(path_locations, src_base, Logger, call_subprocess, INSTALLS, OPTIONS_TO_ADD)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/virtualenv/script/virtualenv.py Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,2564 @@
+#!/usr/bin/env python
+"""Create a "virtual" Python installation
+"""
+
+# If you change the version here, change it in setup.py
+# and docs/conf.py as well.
+__version__ = "1.8.4" # following best practices
+virtualenv_version = __version__ # legacy, again
+
+import base64
+import sys
+import os
+import codecs
+import optparse
+import re
+import shutil
+import logging
+import tempfile
+import zlib
+import errno
+import glob
+import distutils.sysconfig
+from distutils.util import strtobool
+import struct
+import subprocess
+
+if sys.version_info < (2, 5):
+ print('ERROR: %s' % sys.exc_info()[1])
+ print('ERROR: this script requires Python 2.5 or greater.')
+ sys.exit(101)
+
+try:
+ set
+except NameError:
+ from sets import Set as set
+try:
+ basestring
+except NameError:
+ basestring = str
+
+try:
+ import ConfigParser
+except ImportError:
+ import configparser as ConfigParser
+
+join = os.path.join
+py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
+
+is_jython = sys.platform.startswith('java')
+is_pypy = hasattr(sys, 'pypy_version_info')
+is_win = (sys.platform == 'win32')
+is_cygwin = (sys.platform == 'cygwin')
+is_darwin = (sys.platform == 'darwin')
+abiflags = getattr(sys, 'abiflags', '')
+
+user_dir = os.path.expanduser('~')
+if is_win:
+ default_storage_dir = os.path.join(user_dir, 'virtualenv')
+else:
+ default_storage_dir = os.path.join(user_dir, '.virtualenv')
+default_config_file = os.path.join(default_storage_dir, 'virtualenv.ini')
+
+if is_pypy:
+ expected_exe = 'pypy'
+elif is_jython:
+ expected_exe = 'jython'
+else:
+ expected_exe = 'python'
+
+
+REQUIRED_MODULES = ['os', 'posix', 'posixpath', 'nt', 'ntpath', 'genericpath',
+ 'fnmatch', 'locale', 'encodings', 'codecs',
+ 'stat', 'UserDict', 'readline', 'copy_reg', 'types',
+ 're', 'sre', 'sre_parse', 'sre_constants', 'sre_compile',
+ 'zlib']
+
+REQUIRED_FILES = ['lib-dynload', 'config']
+
+majver, minver = sys.version_info[:2]
+if majver == 2:
+ if minver >= 6:
+ REQUIRED_MODULES.extend(['warnings', 'linecache', '_abcoll', 'abc'])
+ if minver >= 7:
+ REQUIRED_MODULES.extend(['_weakrefset'])
+ if minver <= 3:
+ REQUIRED_MODULES.extend(['sets', '__future__'])
+elif majver == 3:
+ # Some extra modules are needed for Python 3, but different ones
+ # for different versions.
+ REQUIRED_MODULES.extend(['_abcoll', 'warnings', 'linecache', 'abc', 'io',
+ '_weakrefset', 'copyreg', 'tempfile', 'random',
+ '__future__', 'collections', 'keyword', 'tarfile',
+ 'shutil', 'struct', 'copy', 'tokenize', 'token',
+ 'functools', 'heapq', 'bisect', 'weakref',
+ 'reprlib'])
+ if minver >= 2:
+ REQUIRED_FILES[-1] = 'config-%s' % majver
+ if minver == 3:
+ import sysconfig
+ platdir = sysconfig.get_config_var('PLATDIR')
+ REQUIRED_FILES.append(platdir)
+ # The whole list of 3.3 modules is reproduced below - the current
+ # uncommented ones are required for 3.3 as of now, but more may be
+ # added as 3.3 development continues.
+ REQUIRED_MODULES.extend([
+ #"aifc",
+ #"antigravity",
+ #"argparse",
+ #"ast",
+ #"asynchat",
+ #"asyncore",
+ "base64",
+ #"bdb",
+ #"binhex",
+ #"bisect",
+ #"calendar",
+ #"cgi",
+ #"cgitb",
+ #"chunk",
+ #"cmd",
+ #"codeop",
+ #"code",
+ #"colorsys",
+ #"_compat_pickle",
+ #"compileall",
+ #"concurrent",
+ #"configparser",
+ #"contextlib",
+ #"cProfile",
+ #"crypt",
+ #"csv",
+ #"ctypes",
+ #"curses",
+ #"datetime",
+ #"dbm",
+ #"decimal",
+ #"difflib",
+ #"dis",
+ #"doctest",
+ #"dummy_threading",
+ "_dummy_thread",
+ #"email",
+ #"filecmp",
+ #"fileinput",
+ #"formatter",
+ #"fractions",
+ #"ftplib",
+ #"functools",
+ #"getopt",
+ #"getpass",
+ #"gettext",
+ #"glob",
+ #"gzip",
+ "hashlib",
+ #"heapq",
+ "hmac",
+ #"html",
+ #"http",
+ #"idlelib",
+ #"imaplib",
+ #"imghdr",
+ "imp",
+ "importlib",
+ #"inspect",
+ #"json",
+ #"lib2to3",
+ #"logging",
+ #"macpath",
+ #"macurl2path",
+ #"mailbox",
+ #"mailcap",
+ #"_markupbase",
+ #"mimetypes",
+ #"modulefinder",
+ #"multiprocessing",
+ #"netrc",
+ #"nntplib",
+ #"nturl2path",
+ #"numbers",
+ #"opcode",
+ #"optparse",
+ #"os2emxpath",
+ #"pdb",
+ #"pickle",
+ #"pickletools",
+ #"pipes",
+ #"pkgutil",
+ #"platform",
+ #"plat-linux2",
+ #"plistlib",
+ #"poplib",
+ #"pprint",
+ #"profile",
+ #"pstats",
+ #"pty",
+ #"pyclbr",
+ #"py_compile",
+ #"pydoc_data",
+ #"pydoc",
+ #"_pyio",
+ #"queue",
+ #"quopri",
+ #"reprlib",
+ "rlcompleter",
+ #"runpy",
+ #"sched",
+ #"shelve",
+ #"shlex",
+ #"smtpd",
+ #"smtplib",
+ #"sndhdr",
+ #"socket",
+ #"socketserver",
+ #"sqlite3",
+ #"ssl",
+ #"stringprep",
+ #"string",
+ #"_strptime",
+ #"subprocess",
+ #"sunau",
+ #"symbol",
+ #"symtable",
+ #"sysconfig",
+ #"tabnanny",
+ #"telnetlib",
+ #"test",
+ #"textwrap",
+ #"this",
+ #"_threading_local",
+ #"threading",
+ #"timeit",
+ #"tkinter",
+ #"tokenize",
+ #"token",
+ #"traceback",
+ #"trace",
+ #"tty",
+ #"turtledemo",
+ #"turtle",
+ #"unittest",
+ #"urllib",
+ #"uuid",
+ #"uu",
+ #"wave",
+ #"weakref",
+ #"webbrowser",
+ #"wsgiref",
+ #"xdrlib",
+ #"xml",
+ #"xmlrpc",
+ #"zipfile",
+ ])
+
+if is_pypy:
+ # these are needed to correctly display the exceptions that may happen
+ # during the bootstrap
+ REQUIRED_MODULES.extend(['traceback', 'linecache'])
+
+class Logger(object):
+
+ """
+ Logging object for use in command-line script. Allows ranges of
+ levels, to avoid some redundancy of displayed information.
+ """
+
+ DEBUG = logging.DEBUG
+ INFO = logging.INFO
+ NOTIFY = (logging.INFO+logging.WARN)/2
+ WARN = WARNING = logging.WARN
+ ERROR = logging.ERROR
+ FATAL = logging.FATAL
+
+ LEVELS = [DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL]
+
+ def __init__(self, consumers):
+ self.consumers = consumers
+ self.indent = 0
+ self.in_progress = None
+ self.in_progress_hanging = False
+
+ def debug(self, msg, *args, **kw):
+ self.log(self.DEBUG, msg, *args, **kw)
+ def info(self, msg, *args, **kw):
+ self.log(self.INFO, msg, *args, **kw)
+ def notify(self, msg, *args, **kw):
+ self.log(self.NOTIFY, msg, *args, **kw)
+ def warn(self, msg, *args, **kw):
+ self.log(self.WARN, msg, *args, **kw)
+ def error(self, msg, *args, **kw):
+ self.log(self.ERROR, msg, *args, **kw)
+ def fatal(self, msg, *args, **kw):
+ self.log(self.FATAL, msg, *args, **kw)
+ def log(self, level, msg, *args, **kw):
+ if args:
+ if kw:
+ raise TypeError(
+ "You may give positional or keyword arguments, not both")
+ args = args or kw
+ rendered = None
+ for consumer_level, consumer in self.consumers:
+ if self.level_matches(level, consumer_level):
+ if (self.in_progress_hanging
+ and consumer in (sys.stdout, sys.stderr)):
+ self.in_progress_hanging = False
+ sys.stdout.write('\n')
+ sys.stdout.flush()
+ if rendered is None:
+ if args:
+ rendered = msg % args
+ else:
+ rendered = msg
+ rendered = ' '*self.indent + rendered
+ if hasattr(consumer, 'write'):
+ consumer.write(rendered+'\n')
+ else:
+ consumer(rendered)
+
+ def start_progress(self, msg):
+ assert not self.in_progress, (
+ "Tried to start_progress(%r) while in_progress %r"
+ % (msg, self.in_progress))
+ if self.level_matches(self.NOTIFY, self._stdout_level()):
+ sys.stdout.write(msg)
+ sys.stdout.flush()
+ self.in_progress_hanging = True
+ else:
+ self.in_progress_hanging = False
+ self.in_progress = msg
+
+ def end_progress(self, msg='done.'):
+ assert self.in_progress, (
+ "Tried to end_progress without start_progress")
+ if self.stdout_level_matches(self.NOTIFY):
+ if not self.in_progress_hanging:
+ # Some message has been printed out since start_progress
+ sys.stdout.write('...' + self.in_progress + msg + '\n')
+ sys.stdout.flush()
+ else:
+ sys.stdout.write(msg + '\n')
+ sys.stdout.flush()
+ self.in_progress = None
+ self.in_progress_hanging = False
+
+ def show_progress(self):
+ """If we are in a progress scope, and no log messages have been
+ shown, write out another '.'"""
+ if self.in_progress_hanging:
+ sys.stdout.write('.')
+ sys.stdout.flush()
+
+ def stdout_level_matches(self, level):
+ """Returns true if a message at this level will go to stdout"""
+ return self.level_matches(level, self._stdout_level())
+
+ def _stdout_level(self):
+ """Returns the level that stdout runs at"""
+ for level, consumer in self.consumers:
+ if consumer is sys.stdout:
+ return level
+ return self.FATAL
+
+ def level_matches(self, level, consumer_level):
+ """
+ >>> l = Logger([])
+ >>> l.level_matches(3, 4)
+ False
+ >>> l.level_matches(3, 2)
+ True
+ >>> l.level_matches(slice(None, 3), 3)
+ False
+ >>> l.level_matches(slice(None, 3), 2)
+ True
+ >>> l.level_matches(slice(1, 3), 1)
+ True
+ >>> l.level_matches(slice(2, 3), 1)
+ False
+ """
+ if isinstance(level, slice):
+ start, stop = level.start, level.stop
+ if start is not None and start > consumer_level:
+ return False
+ if stop is not None and stop <= consumer_level:
+ return False
+ return True
+ else:
+ return level >= consumer_level
+
+ #@classmethod
+ def level_for_integer(cls, level):
+ levels = cls.LEVELS
+ if level < 0:
+ return levels[0]
+ if level >= len(levels):
+ return levels[-1]
+ return levels[level]
+
+ level_for_integer = classmethod(level_for_integer)
+
+# create a silent logger just to prevent this from being undefined
+# will be overridden with requested verbosity main() is called.
+logger = Logger([(Logger.LEVELS[-1], sys.stdout)])
+
+def mkdir(path):
+ if not os.path.exists(path):
+ logger.info('Creating %s', path)
+ os.makedirs(path)
+ else:
+ logger.info('Directory %s already exists', path)
+
+def copyfileordir(src, dest):
+ if os.path.isdir(src):
+ shutil.copytree(src, dest, True)
+ else:
+ shutil.copy2(src, dest)
+
+def copyfile(src, dest, symlink=True):
+ if not os.path.exists(src):
+ # Some bad symlink in the src
+ logger.warn('Cannot find file %s (bad symlink)', src)
+ return
+ if os.path.exists(dest):
+ logger.debug('File %s already exists', dest)
+ return
+ if not os.path.exists(os.path.dirname(dest)):
+ logger.info('Creating parent directories for %s' % os.path.dirname(dest))
+ os.makedirs(os.path.dirname(dest))
+ if not os.path.islink(src):
+ srcpath = os.path.abspath(src)
+ else:
+ srcpath = os.readlink(src)
+ if symlink and hasattr(os, 'symlink') and not is_win:
+ logger.info('Symlinking %s', dest)
+ try:
+ os.symlink(srcpath, dest)
+ except (OSError, NotImplementedError):
+ logger.info('Symlinking failed, copying to %s', dest)
+ copyfileordir(src, dest)
+ else:
+ logger.info('Copying to %s', dest)
+ copyfileordir(src, dest)
+
+def writefile(dest, content, overwrite=True):
+ if not os.path.exists(dest):
+ logger.info('Writing %s', dest)
+ f = open(dest, 'wb')
+ f.write(content.encode('utf-8'))
+ f.close()
+ return
+ else:
+ f = open(dest, 'rb')
+ c = f.read()
+ f.close()
+ if c != content.encode("utf-8"):
+ if not overwrite:
+ logger.notify('File %s exists with different content; not overwriting', dest)
+ return
+ logger.notify('Overwriting %s with new content', dest)
+ f = open(dest, 'wb')
+ f.write(content.encode('utf-8'))
+ f.close()
+ else:
+ logger.info('Content %s already in place', dest)
+
+def rmtree(dir):
+ if os.path.exists(dir):
+ logger.notify('Deleting tree %s', dir)
+ shutil.rmtree(dir)
+ else:
+ logger.info('Do not need to delete %s; already gone', dir)
+
+def make_exe(fn):
+ if hasattr(os, 'chmod'):
+ oldmode = os.stat(fn).st_mode & 0xFFF # 0o7777
+ newmode = (oldmode | 0x16D) & 0xFFF # 0o555, 0o7777
+ os.chmod(fn, newmode)
+ logger.info('Changed mode of %s to %s', fn, oct(newmode))
+
+def _find_file(filename, dirs):
+ for dir in reversed(dirs):
+ files = glob.glob(os.path.join(dir, filename))
+ if files and os.path.isfile(files[0]):
+ return True, files[0]
+ return False, filename
+
+def _install_req(py_executable, unzip=False, distribute=False,
+ search_dirs=None, never_download=False):
+
+ if search_dirs is None:
+ search_dirs = file_search_dirs()
+
+ if not distribute:
+ egg_path = 'setuptools-*-py%s.egg' % sys.version[:3]
+ found, egg_path = _find_file(egg_path, search_dirs)
+ project_name = 'setuptools'
+ bootstrap_script = EZ_SETUP_PY
+ tgz_path = None
+ else:
+ # Look for a distribute egg (these are not distributed by default,
+ # but can be made available by the user)
+ egg_path = 'distribute-*-py%s.egg' % sys.version[:3]
+ found, egg_path = _find_file(egg_path, search_dirs)
+ project_name = 'distribute'
+ if found:
+ tgz_path = None
+ bootstrap_script = DISTRIBUTE_FROM_EGG_PY
+ else:
+ # Fall back to sdist
+ # NB: egg_path is not None iff tgz_path is None
+ # iff bootstrap_script is a generic setup script accepting
+ # the standard arguments.
+ egg_path = None
+ tgz_path = 'distribute-*.tar.gz'
+ found, tgz_path = _find_file(tgz_path, search_dirs)
+ bootstrap_script = DISTRIBUTE_SETUP_PY
+
+ if is_jython and os._name == 'nt':
+ # Jython's .bat sys.executable can't handle a command line
+ # argument with newlines
+ fd, ez_setup = tempfile.mkstemp('.py')
+ os.write(fd, bootstrap_script)
+ os.close(fd)
+ cmd = [py_executable, ez_setup]
+ else:
+ cmd = [py_executable, '-c', bootstrap_script]
+ if unzip and egg_path:
+ cmd.append('--always-unzip')
+ env = {}
+ remove_from_env = ['__PYVENV_LAUNCHER__']
+ if logger.stdout_level_matches(logger.DEBUG) and egg_path:
+ cmd.append('-v')
+
+ old_chdir = os.getcwd()
+ if egg_path is not None and os.path.exists(egg_path):
+ logger.info('Using existing %s egg: %s' % (project_name, egg_path))
+ cmd.append(egg_path)
+ if os.environ.get('PYTHONPATH'):
+ env['PYTHONPATH'] = egg_path + os.path.pathsep + os.environ['PYTHONPATH']
+ else:
+ env['PYTHONPATH'] = egg_path
+ elif tgz_path is not None and os.path.exists(tgz_path):
+ # Found a tgz source dist, let's chdir
+ logger.info('Using existing %s egg: %s' % (project_name, tgz_path))
+ os.chdir(os.path.dirname(tgz_path))
+ # in this case, we want to be sure that PYTHONPATH is unset (not
+ # just empty, really unset), else CPython tries to import the
+ # site.py that it's in virtualenv_support
+ remove_from_env.append('PYTHONPATH')
+ elif never_download:
+ logger.fatal("Can't find any local distributions of %s to install "
+ "and --never-download is set. Either re-run virtualenv "
+ "without the --never-download option, or place a %s "
+ "distribution (%s) in one of these "
+ "locations: %r" % (project_name, project_name,
+ egg_path or tgz_path,
+ search_dirs))
+ sys.exit(1)
+ elif egg_path:
+ logger.info('No %s egg found; downloading' % project_name)
+ cmd.extend(['--always-copy', '-U', project_name])
+ else:
+ logger.info('No %s tgz found; downloading' % project_name)
+ logger.start_progress('Installing %s...' % project_name)
+ logger.indent += 2
+ cwd = None
+ if project_name == 'distribute':
+ env['DONT_PATCH_SETUPTOOLS'] = 'true'
+
+ def _filter_ez_setup(line):
+ return filter_ez_setup(line, project_name)
+
+ if not os.access(os.getcwd(), os.W_OK):
+ cwd = tempfile.mkdtemp()
+ if tgz_path is not None and os.path.exists(tgz_path):
+ # the current working dir is hostile, let's copy the
+ # tarball to a temp dir
+ target = os.path.join(cwd, os.path.split(tgz_path)[-1])
+ shutil.copy(tgz_path, target)
+ try:
+ call_subprocess(cmd, show_stdout=False,
+ filter_stdout=_filter_ez_setup,
+ extra_env=env,
+ remove_from_env=remove_from_env,
+ cwd=cwd)
+ finally:
+ logger.indent -= 2
+ logger.end_progress()
+ if cwd is not None:
+ shutil.rmtree(cwd)
+ if os.getcwd() != old_chdir:
+ os.chdir(old_chdir)
+ if is_jython and os._name == 'nt':
+ os.remove(ez_setup)
+
+def file_search_dirs():
+ here = os.path.dirname(os.path.abspath(__file__))
+ dirs = ['.', here,
+ join(here, 'virtualenv_support')]
+ if os.path.splitext(os.path.dirname(__file__))[0] != 'virtualenv':
+ # Probably some boot script; just in case virtualenv is installed...
+ try:
+ import virtualenv
+ except ImportError:
+ pass
+ else:
+ dirs.append(os.path.join(os.path.dirname(virtualenv.__file__), 'virtualenv_support'))
+ return [d for d in dirs if os.path.isdir(d)]
+
+def install_setuptools(py_executable, unzip=False,
+ search_dirs=None, never_download=False):
+ _install_req(py_executable, unzip,
+ search_dirs=search_dirs, never_download=never_download)
+
+def install_distribute(py_executable, unzip=False,
+ search_dirs=None, never_download=False):
+ _install_req(py_executable, unzip, distribute=True,
+ search_dirs=search_dirs, never_download=never_download)
+
+_pip_re = re.compile(r'^pip-.*(zip|tar.gz|tar.bz2|tgz|tbz)$', re.I)
+def install_pip(py_executable, search_dirs=None, never_download=False):
+ if search_dirs is None:
+ search_dirs = file_search_dirs()
+
+ filenames = []
+ for dir in search_dirs:
+ filenames.extend([join(dir, fn) for fn in os.listdir(dir)
+ if _pip_re.search(fn)])
+ filenames = [(os.path.basename(filename).lower(), i, filename) for i, filename in enumerate(filenames)]
+ filenames.sort()
+ filenames = [filename for basename, i, filename in filenames]
+ if not filenames:
+ filename = 'pip'
+ else:
+ filename = filenames[-1]
+ easy_install_script = 'easy_install'
+ if is_win:
+ easy_install_script = 'easy_install-script.py'
+ # There's two subtle issues here when invoking easy_install.
+ # 1. On unix-like systems the easy_install script can *only* be executed
+ # directly if its full filesystem path is no longer than 78 characters.
+ # 2. A work around to [1] is to use the `python path/to/easy_install foo`
+ # pattern, but that breaks if the path contains non-ASCII characters, as
+ # you can't put the file encoding declaration before the shebang line.
+ # The solution is to use Python's -x flag to skip the first line of the
+ # script (and any ASCII decoding errors that may have occurred in that line)
+ cmd = [py_executable, '-x', join(os.path.dirname(py_executable), easy_install_script), filename]
+ # jython and pypy don't yet support -x
+ if is_jython or is_pypy:
+ cmd.remove('-x')
+ if filename == 'pip':
+ if never_download:
+ logger.fatal("Can't find any local distributions of pip to install "
+ "and --never-download is set. Either re-run virtualenv "
+ "without the --never-download option, or place a pip "
+ "source distribution (zip/tar.gz/tar.bz2) in one of these "
+ "locations: %r" % search_dirs)
+ sys.exit(1)
+ logger.info('Installing pip from network...')
+ else:
+ logger.info('Installing existing %s distribution: %s' % (
+ os.path.basename(filename), filename))
+ logger.start_progress('Installing pip...')
+ logger.indent += 2
+ def _filter_setup(line):
+ return filter_ez_setup(line, 'pip')
+ try:
+ call_subprocess(cmd, show_stdout=False,
+ filter_stdout=_filter_setup)
+ finally:
+ logger.indent -= 2
+ logger.end_progress()
+
+def filter_ez_setup(line, project_name='setuptools'):
+ if not line.strip():
+ return Logger.DEBUG
+ if project_name == 'distribute':
+ for prefix in ('Extracting', 'Now working', 'Installing', 'Before',
+ 'Scanning', 'Setuptools', 'Egg', 'Already',
+ 'running', 'writing', 'reading', 'installing',
+ 'creating', 'copying', 'byte-compiling', 'removing',
+ 'Processing'):
+ if line.startswith(prefix):
+ return Logger.DEBUG
+ return Logger.DEBUG
+ for prefix in ['Reading ', 'Best match', 'Processing setuptools',
+ 'Copying setuptools', 'Adding setuptools',
+ 'Installing ', 'Installed ']:
+ if line.startswith(prefix):
+ return Logger.DEBUG
+ return Logger.INFO
+
+
+class UpdatingDefaultsHelpFormatter(optparse.IndentedHelpFormatter):
+ """
+ Custom help formatter for use in ConfigOptionParser that updates
+ the defaults before expanding them, allowing them to show up correctly
+ in the help listing
+ """
+ def expand_default(self, option):
+ if self.parser is not None:
+ self.parser.update_defaults(self.parser.defaults)
+ return optparse.IndentedHelpFormatter.expand_default(self, option)
+
+
+class ConfigOptionParser(optparse.OptionParser):
+ """
+ Custom option parser which updates its defaults by by checking the
+ configuration files and environmental variables
+ """
+ def __init__(self, *args, **kwargs):
+ self.config = ConfigParser.RawConfigParser()
+ self.files = self.get_config_files()
+ self.config.read(self.files)
+ optparse.OptionParser.__init__(self, *args, **kwargs)
+
+ def get_config_files(self):
+ config_file = os.environ.get('VIRTUALENV_CONFIG_FILE', False)
+ if config_file and os.path.exists(config_file):
+ return [config_file]
+ return [default_config_file]
+
+ def update_defaults(self, defaults):
+ """
+ Updates the given defaults with values from the config files and
+ the environ. Does a little special handling for certain types of
+ options (lists).
+ """
+ # Then go and look for the other sources of configuration:
+ config = {}
+ # 1. config files
+ config.update(dict(self.get_config_section('virtualenv')))
+ # 2. environmental variables
+ config.update(dict(self.get_environ_vars()))
+ # Then set the options with those values
+ for key, val in config.items():
+ key = key.replace('_', '-')
+ if not key.startswith('--'):
+ key = '--%s' % key # only prefer long opts
+ option = self.get_option(key)
+ if option is not None:
+ # ignore empty values
+ if not val:
+ continue
+ # handle multiline configs
+ if option.action == 'append':
+ val = val.split()
+ else:
+ option.nargs = 1
+ if option.action == 'store_false':
+ val = not strtobool(val)
+ elif option.action in ('store_true', 'count'):
+ val = strtobool(val)
+ try:
+ val = option.convert_value(key, val)
+ except optparse.OptionValueError:
+ e = sys.exc_info()[1]
+ print("An error occured during configuration: %s" % e)
+ sys.exit(3)
+ defaults[option.dest] = val
+ return defaults
+
+ def get_config_section(self, name):
+ """
+ Get a section of a configuration
+ """
+ if self.config.has_section(name):
+ return self.config.items(name)
+ return []
+
+ def get_environ_vars(self, prefix='VIRTUALENV_'):
+ """
+ Returns a generator with all environmental vars with prefix VIRTUALENV
+ """
+ for key, val in os.environ.items():
+ if key.startswith(prefix):
+ yield (key.replace(prefix, '').lower(), val)
+
+ def get_default_values(self):
+ """
+ Overridding to make updating the defaults after instantiation of
+ the option parser possible, update_defaults() does the dirty work.
+ """
+ if not self.process_default_values:
+ # Old, pre-Optik 1.5 behaviour.
+ return optparse.Values(self.defaults)
+
+ defaults = self.update_defaults(self.defaults.copy()) # ours
+ for option in self._get_all_options():
+ default = defaults.get(option.dest)
+ if isinstance(default, basestring):
+ opt_str = option.get_opt_string()
+ defaults[option.dest] = option.check_value(opt_str, default)
+ return optparse.Values(defaults)
+
+
+def main():
+ parser = ConfigOptionParser(
+ version=virtualenv_version,
+ usage="%prog [OPTIONS] DEST_DIR",
+ formatter=UpdatingDefaultsHelpFormatter())
+
+ parser.add_option(
+ '-v', '--verbose',
+ action='count',
+ dest='verbose',
+ default=0,
+ help="Increase verbosity")
+
+ parser.add_option(
+ '-q', '--quiet',
+ action='count',
+ dest='quiet',
+ default=0,
+ help='Decrease verbosity')
+
+ parser.add_option(
+ '-p', '--python',
+ dest='python',
+ metavar='PYTHON_EXE',
+ help='The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 '
+ 'interpreter to create the new environment. The default is the interpreter that '
+ 'virtualenv was installed with (%s)' % sys.executable)
+
+ parser.add_option(
+ '--clear',
+ dest='clear',
+ action='store_true',
+ help="Clear out the non-root install and start from scratch")
+
+ parser.set_defaults(system_site_packages=False)
+ parser.add_option(
+ '--no-site-packages',
+ dest='system_site_packages',
+ action='store_false',
+ help="Don't give access to the global site-packages dir to the "
+ "virtual environment (default)")
+
+ parser.add_option(
+ '--system-site-packages',
+ dest='system_site_packages',
+ action='store_true',
+ help="Give access to the global site-packages dir to the "
+ "virtual environment")
+
+ parser.add_option(
+ '--unzip-setuptools',
+ dest='unzip_setuptools',
+ action='store_true',
+ help="Unzip Setuptools or Distribute when installing it")
+
+ parser.add_option(
+ '--relocatable',
+ dest='relocatable',
+ action='store_true',
+ help='Make an EXISTING virtualenv environment relocatable. '
+ 'This fixes up scripts and makes all .pth files relative')
+
+ parser.add_option(
+ '--distribute', '--use-distribute', # the second option is for legacy reasons here. Hi Kenneth!
+ dest='use_distribute',
+ action='store_true',
+ help='Use Distribute instead of Setuptools. Set environ variable '
+ 'VIRTUALENV_DISTRIBUTE to make it the default ')
+
+ parser.add_option(
+ '--setuptools',
+ dest='use_distribute',
+ action='store_false',
+ help='Use Setuptools instead of Distribute. Set environ variable '
+ 'VIRTUALENV_SETUPTOOLS to make it the default ')
+
+ # Set this to True to use distribute by default, even in Python 2.
+ parser.set_defaults(use_distribute=False)
+
+ default_search_dirs = file_search_dirs()
+ parser.add_option(
+ '--extra-search-dir',
+ dest="search_dirs",
+ action="append",
+ default=default_search_dirs,
+ help="Directory to look for setuptools/distribute/pip distributions in. "
+ "You can add any number of additional --extra-search-dir paths.")
+
+ parser.add_option(
+ '--never-download',
+ dest="never_download",
+ action="store_true",
+ help="Never download anything from the network. Instead, virtualenv will fail "
+ "if local distributions of setuptools/distribute/pip are not present.")
+
+ parser.add_option(
+ '--prompt',
+ dest='prompt',
+ help='Provides an alternative prompt prefix for this environment')
+
+ if 'extend_parser' in globals():
+ extend_parser(parser)
+
+ options, args = parser.parse_args()
+
+ global logger
+
+ if 'adjust_options' in globals():
+ adjust_options(options, args)
+
+ verbosity = options.verbose - options.quiet
+ logger = Logger([(Logger.level_for_integer(2 - verbosity), sys.stdout)])
+
+ if options.python and not os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
+ env = os.environ.copy()
+ interpreter = resolve_interpreter(options.python)
+ if interpreter == sys.executable:
+ logger.warn('Already using interpreter %s' % interpreter)
+ else:
+ logger.notify('Running virtualenv with interpreter %s' % interpreter)
+ env['VIRTUALENV_INTERPRETER_RUNNING'] = 'true'
+ file = __file__
+ if file.endswith('.pyc'):
+ file = file[:-1]
+ popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
+ raise SystemExit(popen.wait())
+
+ # Force --distribute on Python 3, since setuptools is not available.
+ if majver > 2:
+ options.use_distribute = True
+
+ if os.environ.get('PYTHONDONTWRITEBYTECODE') and not options.use_distribute:
+ print(
+ "The PYTHONDONTWRITEBYTECODE environment variable is "
+ "not compatible with setuptools. Either use --distribute "
+ "or unset PYTHONDONTWRITEBYTECODE.")
+ sys.exit(2)
+ if not args:
+ print('You must provide a DEST_DIR')
+ parser.print_help()
+ sys.exit(2)
+ if len(args) > 1:
+ print('There must be only one argument: DEST_DIR (you gave %s)' % (
+ ' '.join(args)))
+ parser.print_help()
+ sys.exit(2)
+
+ home_dir = args[0]
+
+ if os.environ.get('WORKING_ENV'):
+ logger.fatal('ERROR: you cannot run virtualenv while in a workingenv')
+ logger.fatal('Please deactivate your workingenv, then re-run this script')
+ sys.exit(3)
+
+ if 'PYTHONHOME' in os.environ:
+ logger.warn('PYTHONHOME is set. You *must* activate the virtualenv before using it')
+ del os.environ['PYTHONHOME']
+
+ if options.relocatable:
+ make_environment_relocatable(home_dir)
+ return
+
+ create_environment(home_dir,
+ site_packages=options.system_site_packages,
+ clear=options.clear,
+ unzip_setuptools=options.unzip_setuptools,
+ use_distribute=options.use_distribute,
+ prompt=options.prompt,
+ search_dirs=options.search_dirs,
+ never_download=options.never_download)
+ if 'after_install' in globals():
+ after_install(options, home_dir)
+
+def call_subprocess(cmd, show_stdout=True,
+ filter_stdout=None, cwd=None,
+ raise_on_returncode=True, extra_env=None,
+ remove_from_env=None):
+ cmd_parts = []
+ for part in cmd:
+ if len(part) > 45:
+ part = part[:20]+"..."+part[-20:]
+ if ' ' in part or '\n' in part or '"' in part or "'" in part:
+ part = '"%s"' % part.replace('"', '\\"')
+ if hasattr(part, 'decode'):
+ try:
+ part = part.decode(sys.getdefaultencoding())
+ except UnicodeDecodeError:
+ part = part.decode(sys.getfilesystemencoding())
+ cmd_parts.append(part)
+ cmd_desc = ' '.join(cmd_parts)
+ if show_stdout:
+ stdout = None
+ else:
+ stdout = subprocess.PIPE
+ logger.debug("Running command %s" % cmd_desc)
+ if extra_env or remove_from_env:
+ env = os.environ.copy()
+ if extra_env:
+ env.update(extra_env)
+ if remove_from_env:
+ for varname in remove_from_env:
+ env.pop(varname, None)
+ else:
+ env = None
+ try:
+ proc = subprocess.Popen(
+ cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout,
+ cwd=cwd, env=env)
+ except Exception:
+ e = sys.exc_info()[1]
+ logger.fatal(
+ "Error %s while executing command %s" % (e, cmd_desc))
+ raise
+ all_output = []
+ if stdout is not None:
+ stdout = proc.stdout
+ encoding = sys.getdefaultencoding()
+ fs_encoding = sys.getfilesystemencoding()
+ while 1:
+ line = stdout.readline()
+ try:
+ line = line.decode(encoding)
+ except UnicodeDecodeError:
+ line = line.decode(fs_encoding)
+ if not line:
+ break
+ line = line.rstrip()
+ all_output.append(line)
+ if filter_stdout:
+ level = filter_stdout(line)
+ if isinstance(level, tuple):
+ level, line = level
+ logger.log(level, line)
+ if not logger.stdout_level_matches(level):
+ logger.show_progress()
+ else:
+ logger.info(line)
+ else:
+ proc.communicate()
+ proc.wait()
+ if proc.returncode:
+ if raise_on_returncode:
+ if all_output:
+ logger.notify('Complete output from command %s:' % cmd_desc)
+ logger.notify('\n'.join(all_output) + '\n----------------------------------------')
+ raise OSError(
+ "Command %s failed with error code %s"
+ % (cmd_desc, proc.returncode))
+ else:
+ logger.warn(
+ "Command %s had error code %s"
+ % (cmd_desc, proc.returncode))
+
+
+def create_environment(home_dir, site_packages=False, clear=False,
+ unzip_setuptools=False, use_distribute=False,
+ prompt=None, search_dirs=None, never_download=False):
+ """
+ Creates a new environment in ``home_dir``.
+
+ If ``site_packages`` is true, then the global ``site-packages/``
+ directory will be on the path.
+
+ If ``clear`` is true (default False) then the environment will
+ first be cleared.
+ """
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+
+ py_executable = os.path.abspath(install_python(
+ home_dir, lib_dir, inc_dir, bin_dir,
+ site_packages=site_packages, clear=clear))
+
+ install_distutils(home_dir)
+
+ if use_distribute:
+ install_distribute(py_executable, unzip=unzip_setuptools,
+ search_dirs=search_dirs, never_download=never_download)
+ else:
+ install_setuptools(py_executable, unzip=unzip_setuptools,
+ search_dirs=search_dirs, never_download=never_download)
+
+ install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
+
+ install_activate(home_dir, bin_dir, prompt)
+
+def is_executable_file(fpath):
+ return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+def path_locations(home_dir):
+ """Return the path locations for the environment (where libraries are,
+ where scripts go, etc)"""
+ # XXX: We'd use distutils.sysconfig.get_python_inc/lib but its
+ # prefix arg is broken: http://bugs.python.org/issue3386
+ if is_win:
+ # Windows has lots of problems with executables with spaces in
+ # the name; this function will remove them (using the ~1
+ # format):
+ mkdir(home_dir)
+ if ' ' in home_dir:
+ import ctypes
+ GetShortPathName = ctypes.windll.kernel32.GetShortPathNameW
+ size = max(len(home_dir)+1, 256)
+ buf = ctypes.create_unicode_buffer(size)
+ try:
+ u = unicode
+ except NameError:
+ u = str
+ ret = GetShortPathName(u(home_dir), buf, size)
+ if not ret:
+ print('Error: the path "%s" has a space in it' % home_dir)
+ print('We could not determine the short pathname for it.')
+ print('Exiting.')
+ sys.exit(3)
+ home_dir = str(buf.value)
+ lib_dir = join(home_dir, 'Lib')
+ inc_dir = join(home_dir, 'Include')
+ bin_dir = join(home_dir, 'Scripts')
+ if is_jython:
+ lib_dir = join(home_dir, 'Lib')
+ inc_dir = join(home_dir, 'Include')
+ bin_dir = join(home_dir, 'bin')
+ elif is_pypy:
+ lib_dir = home_dir
+ inc_dir = join(home_dir, 'include')
+ bin_dir = join(home_dir, 'bin')
+ elif not is_win:
+ lib_dir = join(home_dir, 'lib', py_version)
+ multiarch_exec = '/usr/bin/multiarch-platform'
+ if is_executable_file(multiarch_exec):
+ # In Mageia (2) and Mandriva distros the include dir must be like:
+ # virtualenv/include/multiarch-x86_64-linux/python2.7
+ # instead of being virtualenv/include/python2.7
+ p = subprocess.Popen(multiarch_exec, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = p.communicate()
+ # stdout.strip is needed to remove newline character
+ inc_dir = join(home_dir, 'include', stdout.strip(), py_version + abiflags)
+ else:
+ inc_dir = join(home_dir, 'include', py_version + abiflags)
+ bin_dir = join(home_dir, 'bin')
+ return home_dir, lib_dir, inc_dir, bin_dir
+
+
+def change_prefix(filename, dst_prefix):
+ prefixes = [sys.prefix]
+
+ if is_darwin:
+ prefixes.extend((
+ os.path.join("/Library/Python", sys.version[:3], "site-packages"),
+ os.path.join(sys.prefix, "Extras", "lib", "python"),
+ os.path.join("~", "Library", "Python", sys.version[:3], "site-packages"),
+ # Python 2.6 no-frameworks
+ os.path.join("~", ".local", "lib","python", sys.version[:3], "site-packages"),
+ # System Python 2.7 on OSX Mountain Lion
+ os.path.join("~", "Library", "Python", sys.version[:3], "lib", "python", "site-packages")))
+
+ if hasattr(sys, 'real_prefix'):
+ prefixes.append(sys.real_prefix)
+ if hasattr(sys, 'base_prefix'):
+ prefixes.append(sys.base_prefix)
+ prefixes = list(map(os.path.expanduser, prefixes))
+ prefixes = list(map(os.path.abspath, prefixes))
+ # Check longer prefixes first so we don't split in the middle of a filename
+ prefixes = sorted(prefixes, key=len, reverse=True)
+ filename = os.path.abspath(filename)
+ for src_prefix in prefixes:
+ if filename.startswith(src_prefix):
+ _, relpath = filename.split(src_prefix, 1)
+ if src_prefix != os.sep: # sys.prefix == "/"
+ assert relpath[0] == os.sep
+ relpath = relpath[1:]
+ return join(dst_prefix, relpath)
+ assert False, "Filename %s does not start with any of these prefixes: %s" % \
+ (filename, prefixes)
+
+def copy_required_modules(dst_prefix):
+ import imp
+ # If we are running under -p, we need to remove the current
+ # directory from sys.path temporarily here, so that we
+ # definitely get the modules from the site directory of
+ # the interpreter we are running under, not the one
+ # virtualenv.py is installed under (which might lead to py2/py3
+ # incompatibility issues)
+ _prev_sys_path = sys.path
+ if os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
+ sys.path = sys.path[1:]
+ try:
+ for modname in REQUIRED_MODULES:
+ if modname in sys.builtin_module_names:
+ logger.info("Ignoring built-in bootstrap module: %s" % modname)
+ continue
+ try:
+ f, filename, _ = imp.find_module(modname)
+ except ImportError:
+ logger.info("Cannot import bootstrap module: %s" % modname)
+ else:
+ if f is not None:
+ f.close()
+ # special-case custom readline.so on OS X:
+ if modname == 'readline' and sys.platform == 'darwin' and not filename.endswith(join('lib-dynload', 'readline.so')):
+ dst_filename = join(dst_prefix, 'lib', 'python%s' % sys.version[:3], 'readline.so')
+ else:
+ dst_filename = change_prefix(filename, dst_prefix)
+ copyfile(filename, dst_filename)
+ if filename.endswith('.pyc'):
+ pyfile = filename[:-1]
+ if os.path.exists(pyfile):
+ copyfile(pyfile, dst_filename[:-1])
+ finally:
+ sys.path = _prev_sys_path
+
+
+def subst_path(prefix_path, prefix, home_dir):
+ prefix_path = os.path.normpath(prefix_path)
+ prefix = os.path.normpath(prefix)
+ home_dir = os.path.normpath(home_dir)
+ if not prefix_path.startswith(prefix):
+ logger.warn('Path not in prefix %r %r', prefix_path, prefix)
+ return
+ return prefix_path.replace(prefix, home_dir, 1)
+
+
+def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear):
+ """Install just the base environment, no distutils patches etc"""
+ if sys.executable.startswith(bin_dir):
+ print('Please use the *system* python to run this script')
+ return
+
+ if clear:
+ rmtree(lib_dir)
+ ## FIXME: why not delete it?
+ ## Maybe it should delete everything with #!/path/to/venv/python in it
+ logger.notify('Not deleting %s', bin_dir)
+
+ if hasattr(sys, 'real_prefix'):
+ logger.notify('Using real prefix %r' % sys.real_prefix)
+ prefix = sys.real_prefix
+ elif hasattr(sys, 'base_prefix'):
+ logger.notify('Using base prefix %r' % sys.base_prefix)
+ prefix = sys.base_prefix
+ else:
+ prefix = sys.prefix
+ mkdir(lib_dir)
+ fix_lib64(lib_dir)
+ stdlib_dirs = [os.path.dirname(os.__file__)]
+ if is_win:
+ stdlib_dirs.append(join(os.path.dirname(stdlib_dirs[0]), 'DLLs'))
+ elif is_darwin:
+ stdlib_dirs.append(join(stdlib_dirs[0], 'site-packages'))
+ if hasattr(os, 'symlink'):
+ logger.info('Symlinking Python bootstrap modules')
+ else:
+ logger.info('Copying Python bootstrap modules')
+ logger.indent += 2
+ try:
+ # copy required files...
+ for stdlib_dir in stdlib_dirs:
+ if not os.path.isdir(stdlib_dir):
+ continue
+ for fn in os.listdir(stdlib_dir):
+ bn = os.path.splitext(fn)[0]
+ if fn != 'site-packages' and bn in REQUIRED_FILES:
+ copyfile(join(stdlib_dir, fn), join(lib_dir, fn))
+ # ...and modules
+ copy_required_modules(home_dir)
+ finally:
+ logger.indent -= 2
+ mkdir(join(lib_dir, 'site-packages'))
+ import site
+ site_filename = site.__file__
+ if site_filename.endswith('.pyc'):
+ site_filename = site_filename[:-1]
+ elif site_filename.endswith('$py.class'):
+ site_filename = site_filename.replace('$py.class', '.py')
+ site_filename_dst = change_prefix(site_filename, home_dir)
+ site_dir = os.path.dirname(site_filename_dst)
+ writefile(site_filename_dst, SITE_PY)
+ writefile(join(site_dir, 'orig-prefix.txt'), prefix)
+ site_packages_filename = join(site_dir, 'no-global-site-packages.txt')
+ if not site_packages:
+ writefile(site_packages_filename, '')
+
+ if is_pypy or is_win:
+ stdinc_dir = join(prefix, 'include')
+ else:
+ stdinc_dir = join(prefix, 'include', py_version + abiflags)
+ if os.path.exists(stdinc_dir):
+ copyfile(stdinc_dir, inc_dir)
+ else:
+ logger.debug('No include dir %s' % stdinc_dir)
+
+ platinc_dir = distutils.sysconfig.get_python_inc(plat_specific=1)
+ if platinc_dir != stdinc_dir:
+ platinc_dest = distutils.sysconfig.get_python_inc(
+ plat_specific=1, prefix=home_dir)
+ if platinc_dir == platinc_dest:
+ # Do platinc_dest manually due to a CPython bug;
+ # not http://bugs.python.org/issue3386 but a close cousin
+ platinc_dest = subst_path(platinc_dir, prefix, home_dir)
+ if platinc_dest:
+ # PyPy's stdinc_dir and prefix are relative to the original binary
+ # (traversing virtualenvs), whereas the platinc_dir is relative to
+ # the inner virtualenv and ignores the prefix argument.
+ # This seems more evolved than designed.
+ copyfile(platinc_dir, platinc_dest)
+
+ # pypy never uses exec_prefix, just ignore it
+ if sys.exec_prefix != prefix and not is_pypy:
+ if is_win:
+ exec_dir = join(sys.exec_prefix, 'lib')
+ elif is_jython:
+ exec_dir = join(sys.exec_prefix, 'Lib')
+ else:
+ exec_dir = join(sys.exec_prefix, 'lib', py_version)
+ for fn in os.listdir(exec_dir):
+ copyfile(join(exec_dir, fn), join(lib_dir, fn))
+
+ if is_jython:
+ # Jython has either jython-dev.jar and javalib/ dir, or just
+ # jython.jar
+ for name in 'jython-dev.jar', 'javalib', 'jython.jar':
+ src = join(prefix, name)
+ if os.path.exists(src):
+ copyfile(src, join(home_dir, name))
+ # XXX: registry should always exist after Jython 2.5rc1
+ src = join(prefix, 'registry')
+ if os.path.exists(src):
+ copyfile(src, join(home_dir, 'registry'), symlink=False)
+ copyfile(join(prefix, 'cachedir'), join(home_dir, 'cachedir'),
+ symlink=False)
+
+ mkdir(bin_dir)
+ py_executable = join(bin_dir, os.path.basename(sys.executable))
+ if 'Python.framework' in prefix:
+ # OS X framework builds cause validation to break
+ # https://github.com/pypa/virtualenv/issues/322
+ if os.environ.get('__PYVENV_LAUNCHER__'):
+ os.unsetenv('__PYVENV_LAUNCHER__')
+ if re.search(r'/Python(?:-32|-64)*$', py_executable):
+ # The name of the python executable is not quite what
+ # we want, rename it.
+ py_executable = os.path.join(
+ os.path.dirname(py_executable), 'python')
+
+ logger.notify('New %s executable in %s', expected_exe, py_executable)
+ pcbuild_dir = os.path.dirname(sys.executable)
+ pyd_pth = os.path.join(lib_dir, 'site-packages', 'virtualenv_builddir_pyd.pth')
+ if is_win and os.path.exists(os.path.join(pcbuild_dir, 'build.bat')):
+ logger.notify('Detected python running from build directory %s', pcbuild_dir)
+ logger.notify('Writing .pth file linking to build directory for *.pyd files')
+ writefile(pyd_pth, pcbuild_dir)
+ else:
+ pcbuild_dir = None
+ if os.path.exists(pyd_pth):
+ logger.info('Deleting %s (not Windows env or not build directory python)' % pyd_pth)
+ os.unlink(pyd_pth)
+
+ if sys.executable != py_executable:
+ ## FIXME: could I just hard link?
+ executable = sys.executable
+ if is_cygwin and os.path.exists(executable + '.exe'):
+ # Cygwin misreports sys.executable sometimes
+ executable += '.exe'
+ py_executable += '.exe'
+ logger.info('Executable actually exists in %s' % executable)
+ shutil.copyfile(executable, py_executable)
+ make_exe(py_executable)
+ if is_win or is_cygwin:
+ pythonw = os.path.join(os.path.dirname(sys.executable), 'pythonw.exe')
+ if os.path.exists(pythonw):
+ logger.info('Also created pythonw.exe')
+ shutil.copyfile(pythonw, os.path.join(os.path.dirname(py_executable), 'pythonw.exe'))
+ python_d = os.path.join(os.path.dirname(sys.executable), 'python_d.exe')
+ python_d_dest = os.path.join(os.path.dirname(py_executable), 'python_d.exe')
+ if os.path.exists(python_d):
+ logger.info('Also created python_d.exe')
+ shutil.copyfile(python_d, python_d_dest)
+ elif os.path.exists(python_d_dest):
+ logger.info('Removed python_d.exe as it is no longer at the source')
+ os.unlink(python_d_dest)
+ # we need to copy the DLL to enforce that windows will load the correct one.
+ # may not exist if we are cygwin.
+ py_executable_dll = 'python%s%s.dll' % (
+ sys.version_info[0], sys.version_info[1])
+ py_executable_dll_d = 'python%s%s_d.dll' % (
+ sys.version_info[0], sys.version_info[1])
+ pythondll = os.path.join(os.path.dirname(sys.executable), py_executable_dll)
+ pythondll_d = os.path.join(os.path.dirname(sys.executable), py_executable_dll_d)
+ pythondll_d_dest = os.path.join(os.path.dirname(py_executable), py_executable_dll_d)
+ if os.path.exists(pythondll):
+ logger.info('Also created %s' % py_executable_dll)
+ shutil.copyfile(pythondll, os.path.join(os.path.dirname(py_executable), py_executable_dll))
+ if os.path.exists(pythondll_d):
+ logger.info('Also created %s' % py_executable_dll_d)
+ shutil.copyfile(pythondll_d, pythondll_d_dest)
+ elif os.path.exists(pythondll_d_dest):
+ logger.info('Removed %s as the source does not exist' % pythondll_d_dest)
+ os.unlink(pythondll_d_dest)
+ if is_pypy:
+ # make a symlink python --> pypy-c
+ python_executable = os.path.join(os.path.dirname(py_executable), 'python')
+ if sys.platform in ('win32', 'cygwin'):
+ python_executable += '.exe'
+ logger.info('Also created executable %s' % python_executable)
+ copyfile(py_executable, python_executable)
+
+ if is_win:
+ for name in 'libexpat.dll', 'libpypy.dll', 'libpypy-c.dll', 'libeay32.dll', 'ssleay32.dll', 'sqlite.dll':
+ src = join(prefix, name)
+ if os.path.exists(src):
+ copyfile(src, join(bin_dir, name))
+
+ if os.path.splitext(os.path.basename(py_executable))[0] != expected_exe:
+ secondary_exe = os.path.join(os.path.dirname(py_executable),
+ expected_exe)
+ py_executable_ext = os.path.splitext(py_executable)[1]
+ if py_executable_ext == '.exe':
+ # python2.4 gives an extension of '.4' :P
+ secondary_exe += py_executable_ext
+ if os.path.exists(secondary_exe):
+ logger.warn('Not overwriting existing %s script %s (you must use %s)'
+ % (expected_exe, secondary_exe, py_executable))
+ else:
+ logger.notify('Also creating executable in %s' % secondary_exe)
+ shutil.copyfile(sys.executable, secondary_exe)
+ make_exe(secondary_exe)
+
+ if '.framework' in prefix:
+ if 'Python.framework' in prefix:
+ logger.debug('MacOSX Python framework detected')
+ # Make sure we use the the embedded interpreter inside
+ # the framework, even if sys.executable points to
+ # the stub executable in ${sys.prefix}/bin
+ # See http://groups.google.com/group/python-virtualenv/
+ # browse_thread/thread/17cab2f85da75951
+ original_python = os.path.join(
+ prefix, 'Resources/Python.app/Contents/MacOS/Python')
+ if 'EPD' in prefix:
+ logger.debug('EPD framework detected')
+ original_python = os.path.join(prefix, 'bin/python')
+ shutil.copy(original_python, py_executable)
+
+ # Copy the framework's dylib into the virtual
+ # environment
+ virtual_lib = os.path.join(home_dir, '.Python')
+
+ if os.path.exists(virtual_lib):
+ os.unlink(virtual_lib)
+ copyfile(
+ os.path.join(prefix, 'Python'),
+ virtual_lib)
+
+ # And then change the install_name of the copied python executable
+ try:
+ mach_o_change(py_executable,
+ os.path.join(prefix, 'Python'),
+ '@executable_path/../.Python')
+ except:
+ e = sys.exc_info()[1]
+ logger.warn("Could not call mach_o_change: %s. "
+ "Trying to call install_name_tool instead." % e)
+ try:
+ call_subprocess(
+ ["install_name_tool", "-change",
+ os.path.join(prefix, 'Python'),
+ '@executable_path/../.Python',
+ py_executable])
+ except:
+ logger.fatal("Could not call install_name_tool -- you must "
+ "have Apple's development tools installed")
+ raise
+
+ if not is_win:
+ # Ensure that 'python', 'pythonX' and 'pythonX.Y' all exist
+ py_exe_version_major = 'python%s' % sys.version_info[0]
+ py_exe_version_major_minor = 'python%s.%s' % (
+ sys.version_info[0], sys.version_info[1])
+ py_exe_no_version = 'python'
+ required_symlinks = [ py_exe_no_version, py_exe_version_major,
+ py_exe_version_major_minor ]
+
+ py_executable_base = os.path.basename(py_executable)
+
+ if py_executable_base in required_symlinks:
+ # Don't try to symlink to yourself.
+ required_symlinks.remove(py_executable_base)
+
+ for pth in required_symlinks:
+ full_pth = join(bin_dir, pth)
+ if os.path.exists(full_pth):
+ os.unlink(full_pth)
+ os.symlink(py_executable_base, full_pth)
+
+ if is_win and ' ' in py_executable:
+ # There's a bug with subprocess on Windows when using a first
+ # argument that has a space in it. Instead we have to quote
+ # the value:
+ py_executable = '"%s"' % py_executable
+ # NOTE: keep this check as one line, cmd.exe doesn't cope with line breaks
+ cmd = [py_executable, '-c', 'import sys;out=sys.stdout;'
+ 'getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))']
+ logger.info('Testing executable with %s %s "%s"' % tuple(cmd))
+ try:
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE)
+ proc_stdout, proc_stderr = proc.communicate()
+ except OSError:
+ e = sys.exc_info()[1]
+ if e.errno == errno.EACCES:
+ logger.fatal('ERROR: The executable %s could not be run: %s' % (py_executable, e))
+ sys.exit(100)
+ else:
+ raise e
+
+ proc_stdout = proc_stdout.strip().decode("utf-8")
+ proc_stdout = os.path.normcase(os.path.abspath(proc_stdout))
+ norm_home_dir = os.path.normcase(os.path.abspath(home_dir))
+ if hasattr(norm_home_dir, 'decode'):
+ norm_home_dir = norm_home_dir.decode(sys.getfilesystemencoding())
+ if proc_stdout != norm_home_dir:
+ logger.fatal(
+ 'ERROR: The executable %s is not functioning' % py_executable)
+ logger.fatal(
+ 'ERROR: It thinks sys.prefix is %r (should be %r)'
+ % (proc_stdout, norm_home_dir))
+ logger.fatal(
+ 'ERROR: virtualenv is not compatible with this system or executable')
+ if is_win:
+ logger.fatal(
+ 'Note: some Windows users have reported this error when they '
+ 'installed Python for "Only this user" or have multiple '
+ 'versions of Python installed. Copying the appropriate '
+ 'PythonXX.dll to the virtualenv Scripts/ directory may fix '
+ 'this problem.')
+ sys.exit(100)
+ else:
+ logger.info('Got sys.prefix result: %r' % proc_stdout)
+
+ pydistutils = os.path.expanduser('~/.pydistutils.cfg')
+ if os.path.exists(pydistutils):
+ logger.notify('Please make sure you remove any previous custom paths from '
+ 'your %s file.' % pydistutils)
+ ## FIXME: really this should be calculated earlier
+
+ fix_local_scheme(home_dir)
+
+ if site_packages:
+ if os.path.exists(site_packages_filename):
+ logger.info('Deleting %s' % site_packages_filename)
+ os.unlink(site_packages_filename)
+
+ return py_executable
+
+
+def install_activate(home_dir, bin_dir, prompt=None):
+ home_dir = os.path.abspath(home_dir)
+ if is_win or is_jython and os._name == 'nt':
+ files = {
+ 'activate.bat': ACTIVATE_BAT,
+ 'deactivate.bat': DEACTIVATE_BAT,
+ 'activate.ps1': ACTIVATE_PS,
+ }
+
+ # MSYS needs paths of the form /c/path/to/file
+ drive, tail = os.path.splitdrive(home_dir.replace(os.sep, '/'))
+ home_dir_msys = (drive and "/%s%s" or "%s%s") % (drive[:1], tail)
+
+ # Run-time conditional enables (basic) Cygwin compatibility
+ home_dir_sh = ("""$(if [ "$OSTYPE" "==" "cygwin" ]; then cygpath -u '%s'; else echo '%s'; fi;)""" %
+ (home_dir, home_dir_msys))
+ files['activate'] = ACTIVATE_SH.replace('__VIRTUAL_ENV__', home_dir_sh)
+
+ else:
+ files = {'activate': ACTIVATE_SH}
+
+ # suppling activate.fish in addition to, not instead of, the
+ # bash script support.
+ files['activate.fish'] = ACTIVATE_FISH
+
+ # same for csh/tcsh support...
+ files['activate.csh'] = ACTIVATE_CSH
+
+ files['activate_this.py'] = ACTIVATE_THIS
+ if hasattr(home_dir, 'decode'):
+ home_dir = home_dir.decode(sys.getfilesystemencoding())
+ vname = os.path.basename(home_dir)
+ for name, content in files.items():
+ content = content.replace('__VIRTUAL_PROMPT__', prompt or '')
+ content = content.replace('__VIRTUAL_WINPROMPT__', prompt or '(%s)' % vname)
+ content = content.replace('__VIRTUAL_ENV__', home_dir)
+ content = content.replace('__VIRTUAL_NAME__', vname)
+ content = content.replace('__BIN_NAME__', os.path.basename(bin_dir))
+ writefile(os.path.join(bin_dir, name), content)
+
+def install_distutils(home_dir):
+ distutils_path = change_prefix(distutils.__path__[0], home_dir)
+ mkdir(distutils_path)
+ ## FIXME: maybe this prefix setting should only be put in place if
+ ## there's a local distutils.cfg with a prefix setting?
+ home_dir = os.path.abspath(home_dir)
+ ## FIXME: this is breaking things, removing for now:
+ #distutils_cfg = DISTUTILS_CFG + "\n[install]\nprefix=%s\n" % home_dir
+ writefile(os.path.join(distutils_path, '__init__.py'), DISTUTILS_INIT)
+ writefile(os.path.join(distutils_path, 'distutils.cfg'), DISTUTILS_CFG, overwrite=False)
+
+def fix_local_scheme(home_dir):
+ """
+ Platforms that use the "posix_local" install scheme (like Ubuntu with
+ Python 2.7) need to be given an additional "local" location, sigh.
+ """
+ try:
+ import sysconfig
+ except ImportError:
+ pass
+ else:
+ if sysconfig._get_default_scheme() == 'posix_local':
+ local_path = os.path.join(home_dir, 'local')
+ if not os.path.exists(local_path):
+ os.mkdir(local_path)
+ for subdir_name in os.listdir(home_dir):
+ if subdir_name == 'local':
+ continue
+ os.symlink(os.path.abspath(os.path.join(home_dir, subdir_name)), \
+ os.path.join(local_path, subdir_name))
+
+def fix_lib64(lib_dir):
+ """
+ Some platforms (particularly Gentoo on x64) put things in lib64/pythonX.Y
+ instead of lib/pythonX.Y. If this is such a platform we'll just create a
+ symlink so lib64 points to lib
+ """
+ if [p for p in distutils.sysconfig.get_config_vars().values()
+ if isinstance(p, basestring) and 'lib64' in p]:
+ logger.debug('This system uses lib64; symlinking lib64 to lib')
+ assert os.path.basename(lib_dir) == 'python%s' % sys.version[:3], (
+ "Unexpected python lib dir: %r" % lib_dir)
+ lib_parent = os.path.dirname(lib_dir)
+ top_level = os.path.dirname(lib_parent)
+ lib_dir = os.path.join(top_level, 'lib')
+ lib64_link = os.path.join(top_level, 'lib64')
+ assert os.path.basename(lib_parent) == 'lib', (
+ "Unexpected parent dir: %r" % lib_parent)
+ if os.path.lexists(lib64_link):
+ return
+ os.symlink('lib', lib64_link)
+
+def resolve_interpreter(exe):
+ """
+ If the executable given isn't an absolute path, search $PATH for the interpreter
+ """
+ if os.path.abspath(exe) != exe:
+ paths = os.environ.get('PATH', '').split(os.pathsep)
+ for path in paths:
+ if os.path.exists(os.path.join(path, exe)):
+ exe = os.path.join(path, exe)
+ break
+ if not os.path.exists(exe):
+ logger.fatal('The executable %s (from --python=%s) does not exist' % (exe, exe))
+ raise SystemExit(3)
+ if not is_executable(exe):
+ logger.fatal('The executable %s (from --python=%s) is not executable' % (exe, exe))
+ raise SystemExit(3)
+ return exe
+
+def is_executable(exe):
+ """Checks a file is executable"""
+ return os.access(exe, os.X_OK)
+
+############################################################
+## Relocating the environment:
+
+def make_environment_relocatable(home_dir):
+ """
+ Makes the already-existing environment use relative paths, and takes out
+ the #!-based environment selection in scripts.
+ """
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+ activate_this = os.path.join(bin_dir, 'activate_this.py')
+ if not os.path.exists(activate_this):
+ logger.fatal(
+ 'The environment doesn\'t have a file %s -- please re-run virtualenv '
+ 'on this environment to update it' % activate_this)
+ fixup_scripts(home_dir)
+ fixup_pth_and_egg_link(home_dir)
+ ## FIXME: need to fix up distutils.cfg
+
+OK_ABS_SCRIPTS = ['python', 'python%s' % sys.version[:3],
+ 'activate', 'activate.bat', 'activate_this.py']
+
+def fixup_scripts(home_dir):
+ # This is what we expect at the top of scripts:
+ shebang = '#!%s/bin/python' % os.path.normcase(os.path.abspath(home_dir))
+ # This is what we'll put:
+ new_shebang = '#!/usr/bin/env python%s' % sys.version[:3]
+ if is_win:
+ bin_suffix = 'Scripts'
+ else:
+ bin_suffix = 'bin'
+ bin_dir = os.path.join(home_dir, bin_suffix)
+ home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
+ for filename in os.listdir(bin_dir):
+ filename = os.path.join(bin_dir, filename)
+ if not os.path.isfile(filename):
+ # ignore subdirs, e.g. .svn ones.
+ continue
+ f = open(filename, 'rb')
+ try:
+ try:
+ lines = f.read().decode('utf-8').splitlines()
+ except UnicodeDecodeError:
+ # This is probably a binary program instead
+ # of a script, so just ignore it.
+ continue
+ finally:
+ f.close()
+ if not lines:
+ logger.warn('Script %s is an empty file' % filename)
+ continue
+ if not lines[0].strip().startswith(shebang):
+ if os.path.basename(filename) in OK_ABS_SCRIPTS:
+ logger.debug('Cannot make script %s relative' % filename)
+ elif lines[0].strip() == new_shebang:
+ logger.info('Script %s has already been made relative' % filename)
+ else:
+ logger.warn('Script %s cannot be made relative (it\'s not a normal script that starts with %s)'
+ % (filename, shebang))
+ continue
+ logger.notify('Making script %s relative' % filename)
+ script = relative_script([new_shebang] + lines[1:])
+ f = open(filename, 'wb')
+ f.write('\n'.join(script).encode('utf-8'))
+ f.close()
+
+def relative_script(lines):
+ "Return a script that'll work in a relocatable environment."
+ activate = "import os; activate_this=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'activate_this.py'); execfile(activate_this, dict(__file__=activate_this)); del os, activate_this"
+ # Find the last future statement in the script. If we insert the activation
+ # line before a future statement, Python will raise a SyntaxError.
+ activate_at = None
+ for idx, line in reversed(list(enumerate(lines))):
+ if line.split()[:3] == ['from', '__future__', 'import']:
+ activate_at = idx + 1
+ break
+ if activate_at is None:
+ # Activate after the shebang.
+ activate_at = 1
+ return lines[:activate_at] + ['', activate, ''] + lines[activate_at:]
+
+def fixup_pth_and_egg_link(home_dir, sys_path=None):
+ """Makes .pth and .egg-link files use relative paths"""
+ home_dir = os.path.normcase(os.path.abspath(home_dir))
+ if sys_path is None:
+ sys_path = sys.path
+ for path in sys_path:
+ if not path:
+ path = '.'
+ if not os.path.isdir(path):
+ continue
+ path = os.path.normcase(os.path.abspath(path))
+ if not path.startswith(home_dir):
+ logger.debug('Skipping system (non-environment) directory %s' % path)
+ continue
+ for filename in os.listdir(path):
+ filename = os.path.join(path, filename)
+ if filename.endswith('.pth'):
+ if not os.access(filename, os.W_OK):
+ logger.warn('Cannot write .pth file %s, skipping' % filename)
+ else:
+ fixup_pth_file(filename)
+ if filename.endswith('.egg-link'):
+ if not os.access(filename, os.W_OK):
+ logger.warn('Cannot write .egg-link file %s, skipping' % filename)
+ else:
+ fixup_egg_link(filename)
+
+def fixup_pth_file(filename):
+ lines = []
+ prev_lines = []
+ f = open(filename)
+ prev_lines = f.readlines()
+ f.close()
+ for line in prev_lines:
+ line = line.strip()
+ if (not line or line.startswith('#') or line.startswith('import ')
+ or os.path.abspath(line) != line):
+ lines.append(line)
+ else:
+ new_value = make_relative_path(filename, line)
+ if line != new_value:
+ logger.debug('Rewriting path %s as %s (in %s)' % (line, new_value, filename))
+ lines.append(new_value)
+ if lines == prev_lines:
+ logger.info('No changes to .pth file %s' % filename)
+ return
+ logger.notify('Making paths in .pth file %s relative' % filename)
+ f = open(filename, 'w')
+ f.write('\n'.join(lines) + '\n')
+ f.close()
+
+def fixup_egg_link(filename):
+ f = open(filename)
+ link = f.readline().strip()
+ f.close()
+ if os.path.abspath(link) != link:
+ logger.debug('Link in %s already relative' % filename)
+ return
+ new_link = make_relative_path(filename, link)
+ logger.notify('Rewriting link %s in %s as %s' % (link, filename, new_link))
+ f = open(filename, 'w')
+ f.write(new_link)
+ f.close()
+
+def make_relative_path(source, dest, dest_is_directory=True):
+ """
+ Make a filename relative, where the filename is dest, and it is
+ being referred to from the filename source.
+
+ >>> make_relative_path('/usr/share/something/a-file.pth',
+ ... '/usr/share/another-place/src/Directory')
+ '../another-place/src/Directory'
+ >>> make_relative_path('/usr/share/something/a-file.pth',
+ ... '/home/user/src/Directory')
+ '../../../home/user/src/Directory'
+ >>> make_relative_path('/usr/share/a-file.pth', '/usr/share/')
+ './'
+ """
+ source = os.path.dirname(source)
+ if not dest_is_directory:
+ dest_filename = os.path.basename(dest)
+ dest = os.path.dirname(dest)
+ dest = os.path.normpath(os.path.abspath(dest))
+ source = os.path.normpath(os.path.abspath(source))
+ dest_parts = dest.strip(os.path.sep).split(os.path.sep)
+ source_parts = source.strip(os.path.sep).split(os.path.sep)
+ while dest_parts and source_parts and dest_parts[0] == source_parts[0]:
+ dest_parts.pop(0)
+ source_parts.pop(0)
+ full_parts = ['..']*len(source_parts) + dest_parts
+ if not dest_is_directory:
+ full_parts.append(dest_filename)
+ if not full_parts:
+ # Special case for the current directory (otherwise it'd be '')
+ return './'
+ return os.path.sep.join(full_parts)
+
+
+
+############################################################
+## Bootstrap script creation:
+
+def create_bootstrap_script(extra_text, python_version=''):
+ """
+ Creates a bootstrap script, which is like this script but with
+ extend_parser, adjust_options, and after_install hooks.
+
+ This returns a string that (written to disk of course) can be used
+ as a bootstrap script with your own customizations. The script
+ will be the standard virtualenv.py script, with your extra text
+ added (your extra text should be Python code).
+
+ If you include these functions, they will be called:
+
+ ``extend_parser(optparse_parser)``:
+ You can add or remove options from the parser here.
+
+ ``adjust_options(options, args)``:
+ You can change options here, or change the args (if you accept
+ different kinds of arguments, be sure you modify ``args`` so it is
+ only ``[DEST_DIR]``).
+
+ ``after_install(options, home_dir)``:
+
+ After everything is installed, this function is called. This
+ is probably the function you are most likely to use. An
+ example would be::
+
+ def after_install(options, home_dir):
+ subprocess.call([join(home_dir, 'bin', 'easy_install'),
+ 'MyPackage'])
+ subprocess.call([join(home_dir, 'bin', 'my-package-script'),
+ 'setup', home_dir])
+
+ This example immediately installs a package, and runs a setup
+ script from that package.
+
+ If you provide something like ``python_version='2.5'`` then the
+ script will start with ``#!/usr/bin/env python2.5`` instead of
+ ``#!/usr/bin/env python``. You can use this when the script must
+ be run with a particular Python version.
+ """
+ filename = __file__
+ if filename.endswith('.pyc'):
+ filename = filename[:-1]
+ f = codecs.open(filename, 'r', encoding='utf-8')
+ content = f.read()
+ f.close()
+ py_exe = 'python%s' % python_version
+ content = (('#!/usr/bin/env %s\n' % py_exe)
+ + '## WARNING: This file is generated\n'
+ + content)
+ return content.replace('##EXT' 'END##', extra_text)
+
+##EXTEND##
+
+def convert(s):
+ b = base64.b64decode(s.encode('ascii'))
+ return zlib.decompress(b).decode('utf-8')
+
+##file site.py
+SITE_PY = convert("""
+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
+CP4PNIke9w==
+""")
+
+##file ez_setup.py
+EZ_SETUP_PY = convert("""
+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
+qL7+C1AkCcw=
+""")
+
+##file distribute_from_egg.py
+DISTRIBUTE_FROM_EGG_PY = convert("""
+eJw9j8tqAzEMRfcG/4MgmxQyptkGusonZBmGoGTUGYFfWPKE6dfXTkM3gqt7rh47OKP3NMF3SQFW
+LlrRU1zhybpAxoKBlIqcrNnBdRjQP3GTocYfzmNrrCPQPN9iwzpxSQfQhWBi0cL3qtRtYIG/4Mv0
+KApY5hooqrOGQ05FQTaxptF9Fnx16Rq0XofjaE1XGXVxHIWK7j8P8EY/rHndLqQ1a0pe3COFgHFy
+hLLdWkDbi/DeEpCjNb3u/zccT2Ob8gtnwVyI
+""")
+
+##file distribute_setup.py
+DISTRIBUTE_SETUP_PY = convert("""
+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
+""")
+
+##file activate.sh
+ACTIVATE_SH = convert("""
+eJytVVFvokAQfudXTLEPtTlLeo9tvMSmJpq02hSvl7u2wRUG2QR2DSxSe7n/frOACEVNLlceRHa+
+nfl25pvZDswCnoDPQ4QoTRQsENIEPci4CsBMZBq7CAsuLOYqvmYKTTj3YxnBgiXBudGBjUzBZUJI
+BXEqgCvweIyuCjeG4eF2F5x14bcB9KQiQQWrjSddI1/oQIx6SYYeoFjzWIoIhYI1izlbhJjkKO7D
+M/QEmKfO9O7WeRo/zr4P7pyHwWxkwitcgwpQ5Ej96OX+PmiFwLeVjFUOrNYKaq1Nud3nR2n8nI2m
+k9H0friPTGVsUdptaxGrTEfpNVFEskxpXtUkkCkl1UNF9cgLBkx48J4EXyALuBtAwNYIjF5kcmUU
+abMKmMq1ULoiRbgsDEkTSsKSGFCJ6Z8vY/2xYiSacmtyAfCDdCNTVZoVF8vSTQOoEwSnOrngBkws
+MYGMBMg8/bMBLSYKS7pYEXP0PqT+ZmBT0Xuy+Pplj5yn4aM9nk72JD8/Wi+Gr98sD9eWSMOwkapD
+BbUv91XSvmyVkICt2tmXR4tWmrcUCsjWOpw87YidEC8i0gdTSOFhouJUNxR+4NYBG0MftoCTD9F7
+2rTtxG3oPwY1b2HncYwhrlmj6Wq924xtGDWqfdNxap+OYxplEurnMVo9RWks+rH8qKEtx7kZT5zJ
+4H7oOFclrN6uFe+d+nW2aIUsSgs/42EIPuOhXq+jEo3S6tX6w2ilNkDnIpHCWdEQhFgwj9pkk7FN
+l/y5eQvRSIQ5+TrL05lewxWpt/Lbhes5cJF3mLET1MGhcKCF+40tNWnUulxrpojwDo2sObdje3Bz
+N3QeHqf3D7OjEXMVV8LN3ZlvuzoWHqiUcNKHtwNd0IbvPGKYYM31nPKCgkUILw3KL+Y8l7aO1ArS
+Ad37nIU0fCj5NE5gQCuC5sOSu+UdI2NeXg/lFkQIlFpdWVaWZRfvqGiirC9o6liJ9FXGYrSY9mI1
+D/Ncozgn13vJvsznr7DnkJWXsyMH7e42ljdJ+aqNDF1bFnKWFLdj31xtaJYK6EXFgqmV/ymD/ROG
++n8O9H8f5vsGOWXsL1+1k3g=
+""")
+
+##file activate.fish
+ACTIVATE_FISH = convert("""
+eJyVVWFv2jAQ/c6vuBoqQVWC9nVSNVGVCaS2VC2rNLWVZZILWAs2s52wVvvxsyEJDrjbmgpK7PP5
+3bt3d22YLbmGlGcIq1wbmCPkGhPYcLMEEsGciwGLDS+YwSjlekngLFVyBe73GXSXxqw/DwbuTS8x
+yyKpFr1WG15lDjETQhpQuQBuIOEKY5O9tlppLqxHKSDByjVAPwEy+mXtCq5MzjIUBTCRgEKTKwFG
+gpBqxTLYXgN2myspVigMaYF92tZSowGZJf4mFExxNs9Qb614CgZtmH0BpEOn11f0cXI/+za8pnfD
+2ZjA1sg9zlV/8QvcMhxbNu0QwgYokn/d+n02nt6Opzcjcnx1vXcIoN74O4ymWQXmHURfJw9jenc/
+vbmb0enj6P5+cuVhqlKm3S0u2XRtRbA2QQAhV7VhBF0rsgUX9Ur1rBUXJgVSy8O751k8mzY5OrKH
+RW3eaQhYGTr8hrXO59ALhxQ83mCsDLAid3T72CCSdJhaFE+fXgicXAARUiR2WeVO37gH3oYHzFKo
+9k7CaPZ1UeNwH1tWuXA4uFKYYcEa8vaKqXl7q1UpygMPhFLvlVKyNzsSM3S2km7UBOl4xweUXk5u
+6e3wZmQ9leY1XE/Ili670tr9g/5POBBpGIJXCCF79L1siarl/dbESa8mD8PL61GpzqpzuMS7tqeB
+1YkALrRBloBMbR9yLcVx7frQAgUqR7NZIuzkEu110gbNit1enNs82Rx5utq7Z3prU78HFRgulqNC
+OTwbqJa9vkJFclQgZSjbKeBgSsUtCtt9D8OwAbIVJuewQdfvQRaoFE9wd1TmCuRG7OgJ1bVXGHc7
+z5WDL/WW36v2oi37CyVBak61+yPBA9C1qqGxzKQqZ0oPuocU9hpud0PIp8sDHkXR1HKkNlzjuUWA
+a0enFUyzOWZA4yXGP+ZMI3Tdt2OuqU/SO4q64526cPE0A7ZyW2PMbWZiZ5HamIZ2RcCKLXhcDl2b
+vXL+eccQoRzem80mekPDEiyiWK4GWqZmwxQOmPM0eIfgp1P9cqrBsewR2p/DPMtt+pfcYM+Ls2uh
+hALufTAdmGl8B1H3VPd2af8fQAc4PgqjlIBL9cGQqNpXaAwe3LrtVn8AkZTUxg==
+""")
+
+##file activate.csh
+ACTIVATE_CSH = convert("""
+eJx9VG1P2zAQ/u5fcYQKNgTNPtN1WxlIQ4KCUEGaxuQ6yYVYSuzKdhqVX7+zk3bpy5YPUXL3PPfc
+ne98DLNCWshliVDV1kGCUFvMoJGugMjq2qQIiVSxSJ1cCofD1BYRnOVGV0CfZ0N2DD91DalQSjsw
+tQLpIJMGU1euvPe7QeJlkKzgWixlhnAt4aoUVsLnLBiy5NtbJWQ5THX1ZciYKKWwkOFaE04dUm6D
+r/zh7pq/3D7Nnid3/HEy+wFHY/gEJydg0aFaQrBFgz1c5DG1IhTs+UZgsBC2GMFBlaeH+8dZXwcW
+VPvCjXdlAvCfQsE7al0+07XjZvrSCUevR5dnkVeKlFYZmUztG4BdzL2u9KyLVabTU0bdfg7a0hgs
+cSmUg6UwUiQl2iHrcbcVGNvPCiLOe7+cRwG13z9qRGgx2z6DHjfm/Op2yqeT+xvOLzs0PTKHDz2V
+tkckFHoQfQRXoGJAj9el0FyJCmEMhzgMS4sB7KPOE2ExoLcSieYwDvR+cP8cg11gKkVJc2wRcm1g
+QhYFlXiTaTfO2ki0fQoiFM4tLuO4aZrhOzqR4dIPcWx17hphMBY+Srwh7RTyN83XOWkcSPh1Pg/k
+TXX/jbJTbMtUmcxZ+/bbqOsy82suFQg/BhdSOTRhMNBHlUarCpU7JzBhmkKmRejKOQzayQe6MWoa
+n1wqWmuh6LZAaHxcdeqIlVLhIBJdO9/kbl0It2oEXQj+eGjJOuvOIR/YGRqvFhttUB2XTvLXYN2H
+37CBdbW2W7j2r2+VsCn0doVWcFG1/4y1VwBjfwAyoZhD
+""")
+
+##file activate.bat
+ACTIVATE_BAT = convert("""
+eJx9UdEKgjAUfW6wfxjiIH+hEDKUFHSKLCMI7kNOEkIf9P9pTJ3OLJ/03HPPPed4Es9XS9qqwqgT
+PbGKKOdXL4aAFS7A4gvAwgijuiKlqOpGlATS2NeMLE+TjJM9RkQ+SmqAXLrBo1LLIeLdiWlD6jZt
+r7VNubWkndkXaxg5GO3UaOOKS6drO3luDDiO5my3iA0YAKGzPRV1ack8cOdhysI0CYzIPzjSiH5X
+0QcvC8Lfaj0emsVKYF2rhL5L3fCkVjV76kShi59NHwDniAHzkgDgqBcwOgTMx+gDQQqXCw==
+""")
+
+##file deactivate.bat
+DEACTIVATE_BAT = convert("""
+eJxzSE3OyFfIT0vj4spMU0hJTcvMS01RiPf3cYkP8wwKCXX0iQ8I8vcNCFHQ4FIAguLUEgUliIit
+KhZlqkpcnCA1WKRsuTTxWBIZ4uHv5+Hv64piEVwU3TK4BNBCmHIcKvDb6xjigWIjkI9uF1AIu7dA
+akGGW7n6uXABALCXXUI=
+""")
+
+##file activate.ps1
+ACTIVATE_PS = convert("""
+eJylWdmS40Z2fVeE/oHT6rCloNUEAXDThB6wAyQAEjsB29GBjdgXYiWgmC/zgz/Jv+AEWNVd3S2N
+xuOKYEUxM+/Jmzfvcm7W//zXf/+wUMOoXtyi1F9kbd0sHH/hFc2iLtrK9b3FrSqyxaVQwr8uhqJd
+uHaeg9mqzRdR8/13Pyy8qPLdJh0+LMhi0QCoXxYfFh9WtttEnd34H8p6/f1300KauwrULws39e18
+0ZaLNm9rgN/ZVf3h++/e124Vlc0vKsspHy+Yyi5+XbzPhijvCtduoiL/kA1ukWV27n0o7Sb8LIFj
+CvWR5GQgUJdp1Pw8TS9+rPy6SDv/+e3d+0+4qw8f3v20+PliV37efEYBAB9FTKC+RHn/Cfxn3rdv
+00Fube5O+iyCtHDs9BfPfz3q4sfFv9d91Ljhfy7ei0VO+nVTtdOkv/jpt0l2AX6iG1jXgKnnDuD4
+ke2k/i8fzzz5UedkVcP4pwF+Wvz2FJl+3vt598urXf5Y6LNA5WcFOP7r0sW7b9a+W/xcu0Xpv5zk
+Kfq3P9Dz9di/fCxS72MXVU1rpx9L4Bxl85Wmn5a+zP76Zuh3pL9ROWr87PN+//GHIl+oOtvn9XSU
+qH+p0gQBFnx1uV+JLH5O5zv+PXW+WepXVVHZT0+oQezkIATcIm+ivPV/z5J/+cYj3ir4w0Lx09vC
+e5n/y5/Y5LPPfdrqb88ga/PabxZRVfmp39l588m/6u+/e+OpP+dF7n1WZpJ9//Z4v372fDDz9eHB
+7Juvs/BLMHzrxL9+9twXpJfhd1/DrpQ5Euu/vlss3wp9HXC/54C/Ld69m6zwdx3tC0d8daSv0V8B
+n4b9YYF53sJelJV/ix6LZspw/sJtqyl5LJ5r/23htA1Imfm/gt9R7dqVB1LjhydAX4Gb+zksQF59
+9+P7H//U+376afFuvh2/T6P85Xr/5c8C6OXyFY4BGuN+EE0+GeR201b+wkkLN5mmBY5TfMw8ngqL
+CztXxCSXKMCYrRIElWkEJlEPYsSOeKBVZCAQTKBhApMwRFQzmCThE0YQu2CdEhgjbgmk9GluHpfR
+/hhwJCZhGI5jt5FsAkOrObVyE6g2y1snyhMGFlDY1x+BoHpCMulTj5JYWNAYJmnKpvLxXgmQ8az1
+4fUGxxcitMbbhDFcsiAItg04E+OSBIHTUYD1HI4FHH4kMREPknuYRMyhh3AARWMkfhCketqD1CWJ
+mTCo/nhUScoQcInB1hpFhIKoIXLo5jLpwFCgsnLCx1QlEMlz/iFEGqzH3vWYcpRcThgWnEKm0QcS
+rA8ek2a2IYYeowUanOZOlrbWSJUC4c7y2EMI3uJPMnMF/SSXdk6E495VLhzkWHps0rOhKwqk+xBI
+DhJirhdUCTamMfXz2Hy303hM4DFJ8QL21BcPBULR+gcdYxoeiDqOFSqpi5B5PUISfGg46gFZBPo4
+jdh8lueaWuVSMTURfbAUnLINr/QYuuYoMQV6l1aWxuZVTjlaLC14UzqZ+ziTGDzJzhiYoPLrt3uI
+tXkVR47kAo09lo5BD76CH51cTt1snVpMOttLhY93yxChCQPI4OBecS7++h4p4Bdn4H97bJongtPk
+s9gQnXku1vzsjjmX4/o4YUDkXkjHwDg5FXozU0fW4y5kyeYW0uJWlh536BKr0kMGjtzTkng6Ep62
+uTWnQtiIqKnEsx7e1hLtzlXs7Upw9TwEnp0t9yzCGgUJIZConx9OHJArLkRYW0dW42G9OeR5Nzwk
+yk1mX7du5RGHT7dka7N3AznmSif7y6tuKe2N1Al/1TUPRqH6E2GLVc27h9IptMLkCKQYRqPQJgzV
+2m6WLsSipS3v3b1/WmXEYY1meLEVIU/arOGVkyie7ZsH05ZKpjFW4cpY0YkjySpSExNG2TS8nnJx
+nrQmWh2WY3cP1eISP9wbaVK35ZXc60yC3VN/j9n7UFoK6zvjSTE2+Pvz6Mx322rnftfP8Y0XKIdv
+Qd7AfK0nexBTMqRiErvCMa3Hegpfjdh58glW2oNMsKeAX8x6YJLZs9K8/ozjJkWL+JmECMvhQ54x
+9rsTHwcoGrDi6Y4I+H7yY4/rJVPAbYymUH7C2D3uiUS3KQ1nrCAUkE1dJMneDQIJMQQx5SONxoEO
+OEn1/Ig1eBBUeEDRuOT2WGGGE4bNypBLFh2PeIg3bEbg44PHiqNDbGIQm50LW6MJU62JHCGBrmc9
+2F7WBJrrj1ssnTAK4sxwRgh5LLblhwNAclv3Gd+jC/etCfyfR8TMhcWQz8TBIbG8IIyAQ81w2n/C
+mHWAwRzxd3WoBY7BZnsqGOWrOCKwGkMMNfO0Kci/joZgEocLjNnzgcmdehPHJY0FudXgsr+v44TB
+I3jnMGnsK5veAhgi9iXGifkHMOC09Rh9cAw9sQ0asl6wKMk8mpzFYaaDSgG4F0wisQDDBRpjCINg
+FIxhlhQ31xdSkkk6odXZFpTYOQpOOgw9ugM2cDQ+2MYa7JsEirGBrOuxsQy5nPMRdYjsTJ/j1iNw
+FeSt1jY2+dd5yx1/pzZMOQXUIDcXeAzR7QlDRM8AMkUldXOmGmvYXPABjxqkYKO7VAY6JRU7kpXr
++Epu2BU3qFFXClFi27784LrDZsJwbNlDw0JzhZ6M0SMXE4iBHehCpHVkrQhpTFn2dsvsZYkiPEEB
+GSEAwdiur9LS1U6P2U9JhGp4hnFpJo4FfkdJHcwV6Q5dV1Q9uNeeu7rV8PAjwdFg9RLtroifOr0k
+uOiRTo/obNPhQIf42Fr4mtThWoSjitEdAmFW66UCe8WFjPk1YVNpL9srFbond7jrLg8tqAasIMpy
+zkH0SY/6zVAwJrEc14zt14YRXdY+fcJ4qOd2XKB0/Kghw1ovd11t2o+zjt+txndo1ZDZ2T+uMVHT
+VSXhedBAHoJIID9xm6wPQI3cXY+HR7vxtrJuCKh6kbXaW5KkVeJsdsjqsYsOwYSh0w5sMbu7LF8J
+5T7U6LJdiTx+ca7RKlulGgS5Z1JSU2Llt32cHFipkaurtBrvNX5UtvNZjkufZ/r1/XyLl6yOpytL
+Km8Fn+y4wkhlqZP5db0rooqy7xdL4wxzFVTX+6HaxuQJK5E5B1neSSovZ9ALB8091dDbbjVxhWNY
+Ve5hn1VnI9OF0wpvaRm7SZuC1IRczwC7GnkhPt3muHV1YxUJfo+uh1sYnJy+vI0ZwuPV2uqWJYUH
+bmBsi1zmFSxHrqwA+WIzLrHkwW4r+bad7xbOzJCnKIa3S3YvrzEBK1Dc0emzJW+SqysQfdEDorQG
+9ZJlbQzEHQV8naPaF440YXzJk/7vHGK2xwuP+Gc5xITxyiP+WQ4x18oXHjFzCBy9kir1EFTAm0Zq
+LYwS8MpiGhtfxiBRDXpxDWxk9g9Q2fzPPAhS6VFDAc/aiNGatUkPtZIStZFQ1qD0IlJa/5ZPAi5J
+ySp1ETDomZMnvgiysZSBfMikrSDte/K5lqV6iwC5q7YN9I1dBZXUytDJNqU74MJsUyNNLAPopWK3
+tzmLkCiDyl7WQnj9sm7Kd5kzgpoccdNeMw/6zPVB3pUwMgi4C7hj4AMFAf4G27oXH8NNT9zll/sK
+S6wVlQwazjxWKWy20ZzXb9ne8ngGalPBWSUSj9xkc1drsXkZ8oOyvYT3e0rnYsGwx85xZB9wKeKg
+cJKZnamYwiaMymZvzk6wtDUkxmdUg0mPad0YHtvzpjEfp2iMxvORhnx0kCVLf5Qa43WJsVoyfEyI
+pzmf8ruM6xBr7dnBgzyxpqXuUPYaKahOaz1LrxNkS/Q3Ae5AC+xl6NbxAqXXlzghZBZHmOrM6Y6Y
+ctAkltwlF7SKEsShjVh7QHuxMU0a08/eiu3x3M+07OijMcKFFltByXrpk8w+JNnZpnp3CfgjV1Ax
+gUYCnWwYow42I5wHCcTzLXK0hMZN2DrPM/zCSqe9jRSlJnr70BPE4+zrwbk/xVIDHy2FAQyHoomT
+Tt5jiM68nBQut35Y0qLclLiQrutxt/c0OlSqXAC8VrxW97lGoRWzhOnifE2zbF05W4xuyhg7JTUL
+aqJ7SWDywhjlal0b+NLTpERBgnPW0+Nw99X2Ws72gOL27iER9jgzj7Uu09JaZ3n+hmCjjvZpjNst
+vOWWTbuLrg+/1ltX8WpPauEDEvcunIgTxuMEHweWKCx2KQ9DU/UKdO/3za4Szm2iHYL+ss9AAttm
+gZHq2pkUXFbV+FiJCKrpBms18zH75vax5jSo7FNunrVWY3Chvd8KKnHdaTt/6ealwaA1x17yTlft
+8VBle3nAE+7R0MScC3MJofNCCkA9PGKBgGMYEwfB2QO5j8zUqa8F/EkWKCzGQJ5EZ05HTly1B01E
+z813G5BY++RZ2sxbQS8ZveGPJNabp5kXAeoign6Tlt5+L8i5ZquY9+S+KEUHkmYMRFBxRrHnbl2X
+rVemKnG+oB1yd9+zT+4c43jQ0wWmQRR6mTCkY1q3VG05Y120ZzKOMBe6Vy7I5Vz4ygPB3yY4G0FP
+8RxiMx985YJPXsgRU58EuHj75gygTzejP+W/zKGe78UQN3yOJ1aMQV9hFH+GAfLRsza84WlPLAI/
+9G/5JdcHftEfH+Y3/fHUG7/o8bv98dzzy3e8S+XCvgqB+VUf7sH0yDHpONdbRE8tAg9NWOzcTJ7q
+TuAxe/AJ07c1Rs9okJvl1/0G60qvbdDzz5zO0FuPFQIHNp9y9Bd1CufYVx7dB26mAxwa8GMNrN/U
+oGbNZ3EQ7inLzHy5tRg9AXJrN8cB59cCUBeCiVO7zKM0jU0MamhnRThkg/NMmBOGb6StNeD9tDfA
+7czsAWopDdnGoXUHtA+s/k0vNPkBcxEI13jVd/axp85va3LpwGggXXWw12Gwr/JGAH0b8CPboiZd
+QO1l0mk/UHukud4C+w5uRoNzpCmoW6GbgbMyaQNkga2pQINB18lOXOCJzSWPFOhZcwzdgrsQnne7
+nvjBi+7cP2BbtBeDOW5uOLGf3z94FasKIguOqJl+8ss/6Kumns4cuWbqq5592TN/RNIbn5Qo6qbi
+O4F0P9txxPAwagqPlftztO8cWBzdN/jz3b7GD6JHYP/Zp4ToAMaA74M+EGSft3hEGMuf8EwjnTk/
+nz/P7SLipB/ogQ6xNX0fDqNncMCfHqGLCMM0ZzFa+6lPJYQ5p81vW4HkCvidYf6kb+P/oB965g8K
+C6uR0rdjX1DNKc5pOSTquI8uQ6KXxYaKBn+30/09tK4kMpJPgUIQkbENEPbuezNPPje2Um83SgyX
+GTCJb6MnGVIpgncdQg1qz2bvPfxYD9fewCXDomx9S+HQJuX6W3VAL+v5WZMudRQZk9ZdOk6GIUtC
+PqEb/uwSIrtR7/edzqgEdtpEwq7p2J5OQV+RLrmtTvFwFpf03M/VrRyTZ73qVod7v7Jh2Dwe5J25
+JqFOU2qEu1sP+CRotklediycKfLjeIZzjJQsvKmiGSNQhxuJpKa+hoWUizaE1PuIRGzJqropwgVB
+oo1hr870MZLgnXF5ZIpr6mF0L8aSy2gVnTAuoB4WEd4d5NPVC9TMotYXERKlTcwQ2KiB/C48AEfH
+Qbyq4CN8xTFnTvf/ebOc3isnjD95s0QF0nx9s+y+zMmz782xL0SgEmRpA3x1w1Ff9/74xcxKEPdS
+IEFTz6GgU0+BK/UZ5Gwbl4gZwycxEw+Kqa5QmMkh4OzgzEVPnDAiAOGBFaBW4wkDmj1G4RyElKgj
+NlLCq8zsp085MNh/+R4t1Q8yxoSv8PUpTt7izZwf2BTHZZ3pIZpUIpuLkL1nNL6sYcHqcKm237wp
+T2+RCjgXweXd2Zp7ZM8W6dG5bZsqo0nrJBTx8EC0+CQQdzEGnabTnkzofu1pYkWl4E7XSniECdxy
+vLYavPMcL9LW5SToJFNnos+uqweOHriUZ1ntIYZUonc7ltEQ6oTRtwOHNwez2sVREskHN+bqG3ua
+eaEbJ8XpyO8CeD9QJc8nbLP2C2R3A437ISUNyt5Yd0TbDNcl11/DSsOzdbi/VhCC0KE6v1vqVNkq
+45ZnG6fiV2NwzInxCNth3BwL0+8814jE6+1W1EeWtpWbSZJOJNYXmWRXa7vLnAljE692eHjZ4y5u
+y1u63De0IzKca7As48Z3XshVF+3XiLNz0JIMh/JOpbiNLlMi672uO0wYzOCZjRxcxj3D+gVenGIE
+MvFUGGXuRps2RzMcgWIRolHXpGUP6sMsQt1hspUBnVKUn/WQj2u6j3SXd9Xz0QtEzoM7qTu5y7gR
+q9gNNsrlEMLdikBt9bFvBnfbUIh6voTw7eDsyTmPKUvF0bHqWLbHe3VRHyRZnNeSGKsB73q66Vsk
+taxWYmwz1tYVFG/vOQhlM0gUkyvIab3nv2caJ1udU1F3pDMty7stubTE4OJqm0i0ECfrJIkLtraC
+HwRWKzlqpfhEIqYH09eT9WrOhQyt8YEoyBlnXtAT37WHIQ03TIuEHbnRxZDdLun0iok9PUC79prU
+m5beZzfQUelEXnhzb/pIROKx3F7qCttYIFGh5dXNzFzID7u8vKykA8Uejf7XXz//S4nKvW//ofS/
+QastYw==
+""")
+
+##file distutils-init.py
+DISTUTILS_INIT = convert("""
+eJytV1uL4zYUfvevOE0ottuMW9q3gVDa3aUMXXbLMlDKMBiNrSTqOJKRlMxkf33PkXyRbGe7Dw2E
+UXTu37lpxLFV2oIyifAncxmOL0xLIfcG+gv80x9VW6maw7o/CANSWWBwFtqeWMPlGY6qPjV8A0bB
+C4eKSTgZ5LRgFeyErMEeOBhbN+Ipgeizhjtnhkn7DdyjuNLPoCS0l/ayQTG0djwZC08cLXozeMss
+aG5EzQ0IScpnWtHSTXuxByV/QCmxE7y+eS0uxWeoheaVVfqSJHiU7Mhhi6gULbOHorshkrEnKxpT
+0n3A8Y8SMpuwZx6aoix3ouFlmW8gHRSkeSJ2g7hU+kiHLDaQw3bmRDaTGfTnty7gPm0FHbIBg9U9
+oh1kZzAFLaue2R6htPCtAda2nGlDSUJ4PZBgCJBGVcwKTAMz/vJiLD+Oin5Z5QlvDPdulC6EsiyE
+NFzb7McNTKJzbJqzphx92VKRFY1idenzmq3K0emRcbWBD0ryqc4NZGmKOOOX9Pz5x+/l27tP797c
+f/z0d+4NruGNai8uAM0bfsYaw8itFk8ny41jsfpyO+BWlpqfhcG4yxLdi/0tQqoT4a8Vby382mt8
+p7XSo7aWGdPBc+b6utaBmCQ7rQKQoWtAuthQCiold2KfJIPTT8xwg9blPumc+YDZC/wYGdAyHpJk
+vUbHbHWAp5No6pK/WhhLEWrFjUwtPEv1Agf8YmnsuXUQYkeZoHm8ogP16gt2uHoxcEMdf2C6pmbw
+hUMsWGhanboh4IzzmsIpWs134jVPqD/c74bZHdY69UKKSn/+KfVhxLgUlToemayLMYQOqfEC61bh
+cbhwaqoGUzIyZRFHPmau5juaWqwRn3mpWmoEA5nhzS5gog/5jbcFQqOZvmBasZtwYlG93k5GEiyw
+buHhMWLjDarEGpMGB2LFs5nIJkhp/nUmZneFaRth++lieJtHepIvKgx6PJqIlD9X2j6pG1i9x3pZ
+5bHuCPFiirGHeO7McvoXkz786GaKVzC9DSpnOxJdc4xm6NSVq7lNEnKdVlnpu9BNYoKX2Iq3wvgh
+gGEUM66kK6j4NiyoneuPLSwaCWDxczgaolEWpiMyDVDb7dNuLAbriL8ig8mmeju31oNvQdpnvEPC
+1vAXbWacGRVrGt/uXN/gU0CDDwgooKRrHfTBb1/s9lYZ8ZqOBU0yLvpuP6+K9hLFsvIjeNhBi0KL
+MlOuWRn3FRwx5oHXjl0YImUx0+gLzjGchrgzca026ETmYJzPD+IpuKzNi8AFn048Thd63OdD86M6
+84zE8yQm0VqXdbbgvub2pKVnS76icBGdeTHHXTKspUmr4NYo/furFLKiMdQzFjHJNcdAnMhltBJK
+0/IKX3DVFqvPJ2dLE7bDBkH0l/PJ29074+F0CsGYOxsb7U3myTUncYfXqnLLfa6sJybX4g+hmcjO
+kMRBfA1JellfRRKJcyRpxdS4rIl6FdmQCWjo/o9Qz7yKffoP4JHjOvABcRn4CZIT2RH4jnxmfpVG
+qgLaAvQBNfuO6X0/Ux02nb4FKx3vgP+XnkX0QW9pLy/NsXgdN24dD3LxO2Nwil7Zlc1dqtP3d7/h
+kzp1/+7hGBuY4pk0XD/0Ao/oTe/XGrfyM773aB7iUhgkpy+dwAMalxMP0DrBcsVw/6p25+/hobP9
+GBknrWExDhLJ1bwt1NcCNblaFbMKCyvmX0PeRaQ=
+""")
+
+##file distutils.cfg
+DISTUTILS_CFG = convert("""
+eJxNj00KwkAMhfc9xYNuxe4Ft57AjYiUtDO1wXSmNJnK3N5pdSEEAu8nH6lxHVlRhtDHMPATA4uH
+xJ4EFmGbvfJiicSHFRzUSISMY6hq3GLCRLnIvSTnEefN0FIjw5tF0Hkk9Q5dRunBsVoyFi24aaLg
+9FDOlL0FPGluf4QjcInLlxd6f6rqkgPu/5nHLg0cXCscXoozRrP51DRT3j9QNl99AP53T2Q=
+""")
+
+##file activate_this.py
+ACTIVATE_THIS = convert("""
+eJyNU01v2zAMvetXEB4K21jmDOstQA4dMGCHbeihlyEIDMWmG62yJEiKE//7kXKdpN2KzYBt8euR
+fKSyLPs8wiEo8wh4wqZTGou4V6Hm0wJa1cSiTkJdr8+GsoTRHuCotBayiWqQEYGtMCgfD1KjGYBe
+5a3p0cRKiAe2NtLADikftnDco0ko/SFEVgEZ8aRC5GLux7i3BpSJ6J1H+i7A2CjiHq9z7JRZuuQq
+siwTIvpxJYCeuWaBpwZdhB+yxy/eWz+ZvVSU8C4E9FFZkyxFsvCT/ZzL8gcz9aXVE14Yyp2M+2W0
+y7n5mp0qN+avKXvbsyyzUqjeWR8hjGE+2iCE1W1tQ82hsCZN9UzlJr+/e/iab8WfqsmPI6pWeUPd
+FrMsd4H/55poeO9n54COhUs+sZNEzNtg/wanpjpuqHJaxs76HtZryI/K3H7KJ/KDIhqcbJ7kI4ar
+XL+sMgXnX0D+Te2Iy5xdP8yueSlQB/x/ED2BTAtyE3K4SYUN6AMNfbO63f4lBW3bUJPbTL+mjSxS
+PyRfJkZRgj+VbFv+EzHFi5pKwUEepa4JslMnwkowSRCXI+m5XvEOvtuBrxHdhLalG0JofYBok6qj
+YdN2dEngUlbC4PG60M1WEN0piu7Nq7on0mgyyUw3iV1etLo6r/81biWdQ9MWHFaePWZYaq+nmp+t
+s3az+sj7eA0jfgPfeoN1
+""")
+
+MH_MAGIC = 0xfeedface
+MH_CIGAM = 0xcefaedfe
+MH_MAGIC_64 = 0xfeedfacf
+MH_CIGAM_64 = 0xcffaedfe
+FAT_MAGIC = 0xcafebabe
+BIG_ENDIAN = '>'
+LITTLE_ENDIAN = '<'
+LC_LOAD_DYLIB = 0xc
+maxint = majver == 3 and getattr(sys, 'maxsize') or getattr(sys, 'maxint')
+
+
+class fileview(object):
+ """
+ A proxy for file-like objects that exposes a given view of a file.
+ Modified from macholib.
+ """
+
+ def __init__(self, fileobj, start=0, size=maxint):
+ if isinstance(fileobj, fileview):
+ self._fileobj = fileobj._fileobj
+ else:
+ self._fileobj = fileobj
+ self._start = start
+ self._end = start + size
+ self._pos = 0
+
+ def __repr__(self):
+ return '<fileview [%d, %d] %r>' % (
+ self._start, self._end, self._fileobj)
+
+ def tell(self):
+ return self._pos
+
+ def _checkwindow(self, seekto, op):
+ if not (self._start <= seekto <= self._end):
+ raise IOError("%s to offset %d is outside window [%d, %d]" % (
+ op, seekto, self._start, self._end))
+
+ def seek(self, offset, whence=0):
+ seekto = offset
+ if whence == os.SEEK_SET:
+ seekto += self._start
+ elif whence == os.SEEK_CUR:
+ seekto += self._start + self._pos
+ elif whence == os.SEEK_END:
+ seekto += self._end
+ else:
+ raise IOError("Invalid whence argument to seek: %r" % (whence,))
+ self._checkwindow(seekto, 'seek')
+ self._fileobj.seek(seekto)
+ self._pos = seekto - self._start
+
+ def write(self, bytes):
+ here = self._start + self._pos
+ self._checkwindow(here, 'write')
+ self._checkwindow(here + len(bytes), 'write')
+ self._fileobj.seek(here, os.SEEK_SET)
+ self._fileobj.write(bytes)
+ self._pos += len(bytes)
+
+ def read(self, size=maxint):
+ assert size >= 0
+ here = self._start + self._pos
+ self._checkwindow(here, 'read')
+ size = min(size, self._end - here)
+ self._fileobj.seek(here, os.SEEK_SET)
+ bytes = self._fileobj.read(size)
+ self._pos += len(bytes)
+ return bytes
+
+
+def read_data(file, endian, num=1):
+ """
+ Read a given number of 32-bits unsigned integers from the given file
+ with the given endianness.
+ """
+ res = struct.unpack(endian + 'L' * num, file.read(num * 4))
+ if len(res) == 1:
+ return res[0]
+ return res
+
+
+def mach_o_change(path, what, value):
+ """
+ Replace a given name (what) in any LC_LOAD_DYLIB command found in
+ the given binary with a new name (value), provided it's shorter.
+ """
+
+ def do_macho(file, bits, endian):
+ # Read Mach-O header (the magic number is assumed read by the caller)
+ cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags = read_data(file, endian, 6)
+ # 64-bits header has one more field.
+ if bits == 64:
+ read_data(file, endian)
+ # The header is followed by ncmds commands
+ for n in range(ncmds):
+ where = file.tell()
+ # Read command header
+ cmd, cmdsize = read_data(file, endian, 2)
+ if cmd == LC_LOAD_DYLIB:
+ # The first data field in LC_LOAD_DYLIB commands is the
+ # offset of the name, starting from the beginning of the
+ # command.
+ name_offset = read_data(file, endian)
+ file.seek(where + name_offset, os.SEEK_SET)
+ # Read the NUL terminated string
+ load = file.read(cmdsize - name_offset).decode()
+ load = load[:load.index('\0')]
+ # If the string is what is being replaced, overwrite it.
+ if load == what:
+ file.seek(where + name_offset, os.SEEK_SET)
+ file.write(value.encode() + '\0'.encode())
+ # Seek to the next command
+ file.seek(where + cmdsize, os.SEEK_SET)
+
+ def do_file(file, offset=0, size=maxint):
+ file = fileview(file, offset, size)
+ # Read magic number
+ magic = read_data(file, BIG_ENDIAN)
+ if magic == FAT_MAGIC:
+ # Fat binaries contain nfat_arch Mach-O binaries
+ nfat_arch = read_data(file, BIG_ENDIAN)
+ for n in range(nfat_arch):
+ # Read arch header
+ cputype, cpusubtype, offset, size, align = read_data(file, BIG_ENDIAN, 5)
+ do_file(file, offset, size)
+ elif magic == MH_MAGIC:
+ do_macho(file, 32, BIG_ENDIAN)
+ elif magic == MH_CIGAM:
+ do_macho(file, 32, LITTLE_ENDIAN)
+ elif magic == MH_MAGIC_64:
+ do_macho(file, 64, BIG_ENDIAN)
+ elif magic == MH_CIGAM_64:
+ do_macho(file, 64, LITTLE_ENDIAN)
+
+ assert(len(what) >= len(value))
+ do_file(open(path, 'r+b'))
+
+
+if __name__ == '__main__':
+ main()
+
+## TODO:
+## Copy python.exe.manifest
+## Monkeypatch distutils.sysconfig
Binary file script/virtualenv/script/virtualenv_support/distribute-0.6.31.tar.gz has changed
Binary file script/virtualenv/script/virtualenv_support/pip-1.2.1.tar.gz has changed
Binary file script/virtualenv/script/virtualenv_support/setuptools-0.6c11-py2.5.egg has changed
Binary file script/virtualenv/script/virtualenv_support/setuptools-0.6c11-py2.6.egg has changed
Binary file script/virtualenv/script/virtualenv_support/setuptools-0.6c11-py2.7.egg has changed
--- a/web/2011-2012-museo-audiovisuel/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-audiovisuel/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -24,7 +24,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, contribution, audiovisuel, indexation, télévison, télé connectée, tv connectée, diffusions, programmes, musées',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-contribution/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-contribution/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -27,7 +27,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, contribution, indexation, numérisation, communautés, recherche, médiation',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-desir/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-desir/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -60,7 +60,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, web, web semantique, web social, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-ingenierie/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-ingenierie/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -24,7 +24,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, contribution, ingénierie, web sémantique, web social, w3c, standards, archives, wikipedia, wikimedia, musées',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-interfaces/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-interfaces/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -25,7 +25,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, interfaces, métadonnées, innovation, recherche, navigation, représentation',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-ouverture/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-ouverture/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -39,7 +39,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
'islive' => true,
'keywords' => 'muséographie, muséologie, web, web semantique, web social, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/2011-2012-museo-structured-data/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/2011-2012-museo-structured-data/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -35,7 +35,7 @@
suggested_keywords = []
",
'keywords' => 'muséographie, muséologie, web, web semantique, web social, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.culture.gouv.fr/'
class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/caps2012/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/caps2012/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -62,8 +62,11 @@
<li>Gaël Musquet - Open Street Map</li>
<li>Etienne Zoupic Hayem - Community Forge</li>
<li>Edouard Schlumberger - Voxe.org</li>
+ <li>Ruxandra Creosteanu - Babele</li>
<li>Florian Hervéou - Tuttivox</li>
<li>David Crombie - HKU</li>
+ <li>Eric Nicolas Schneider - Youth-Leader</li>
+ <li>Benjamin Augros - Pretachanger</li>
<li>Théo Bondolfi - Meta CAPS Cluster</li>
</ul>
<div>The conference will be held in English at the Centre Pompidou, Salle Triangle (to right of main entrance, next to large red cube outside of building) :<br />
@@ -79,9 +82,10 @@
",
'link' => 'http://www.iri.centrepompidou.fr/evenement/collective-awareness-platforms-for-sustainability-and-social-innovation/',
'keywords' => 'CAPS, Europe, IRI',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'islive' => true,
- 'partenaires'=> "<a href='http://ec.europa.eu/digital-agenda/' class='footerLink' target='_blank' > European Commission </a>",
+ 'partenaires'=> "<a href='http://www.iri.centrepompidou.fr' class='footerlink' target='_blank'> IRI </a>
+ | <a href='http://ec.europa.eu/digital-agenda/' class='footerLink' target='_blank' > European Commission </a>",
'client_visual' => 'images/caps2012_live_screen.jpg',// 480 × 320 pixels
--- a/web/clic-2012/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/clic-2012/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -60,7 +60,7 @@
",
'link' => 'http://www.club-innovation-culture.fr/rencontres-culture-innovations/rencontres-2012/',
'keywords' => 'clic, culture, innovation',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.club-innovation-culture.fr/' class='footerLink' target='_blank'>Club Innovation Culture</a>
| <a href='http://www.culture.gouv.fr/' class='footerLink' target='_blank'>Ministère de la Culture et de la Communication</a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>
--- a/web/common.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/common.php Mon Dec 10 10:47:14 2012 +0100
@@ -17,7 +17,7 @@
$ldt_platform = 'http://ldt.iri.centrepompidou.fr/';
$project_url_base = 'ldtplatform/ldt/cljson/id/';
-$C_default_rep = 'caps2012';
+$C_default_rep = 'edito-1213-02-collectifs-auteurs';
$C_feedback_form_url = 'https://spreadsheets.google.com/spreadsheet/viewform?hl=en_US&formkey=dDZILVdXVHRzd0xhWGVZXzkweHN2RGc6MQ#gid=0';
$archives_list = array(
@@ -232,8 +232,8 @@
$font_registry = array(
'local' => array(
- 'PT-Sans_Narrow' => URL_ROOT.'res/fonts/PT_Sans-Narrow-Web-Regular.css',
- 'PT-Sans' => URL_ROOT.'res/fonts/PT_Sans-Web-Regular.css'
+ 'PT-Sans_Narrow' => URL_ROOT.'res/fonts/PTSansNarrow.css',
+ 'PT-Sans' => URL_ROOT.'res/fonts/PTSans.css'
),
'cdn' => array(
'PT-Sans_Narrow' => 'http://fonts.googleapis.com/css?family=PT+Sans+Narrow&subset=latin',
--- a/web/curiouser-digital-humanities/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/curiouser-digital-humanities/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -37,7 +37,7 @@
'use_tweetcast' => true,
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => '',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://curiouser.fr/' class='footerLink' target='_blank'>Curiouser</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a> | <a href='http://www.knowtex.com/' class='footerLink' target='_blank'>Knowtex</a> | <a href='http://socialmediaweek.org/paris/' class='footerLink' target='_blank'>Social Media Week</a>",
'client_visual' => 'images/bgd-player_Curiouser.jpg',// 501 × 376 pixels
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/edito-1213-01-contextes/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,53 @@
+<?php
+$config = array(
+ 'hashtag' => '#edito2012',
+
+ 'title' => "Écritures numériques et éditorialisation",
+
+ 'abstract' => "Séminaire « écritures numériques et éditorialisation » :<br /><b>Contextes et gestes de l'écriture littéraire numérique</b><br/>le 15/11/2012 à Paris 17h30, à Montréal à 11h30<br/>Centre Pompidou et Université de Montréal",
+
+ 'description'=> "<h3>Contextes et gestes de l'écriture littéraire numérique</h3>
+ <p>le 15/11/2012
+ <br/>À Paris : De 17h30 à 19h30, au Centre Pompidou, salle Triangle - entrée libre et gratuite
+ <br />À Montréal : De 11h30 à 13h30, à l'Université de Montréal, salle P217 du Pavillon Roger-Gaudry, 2900, boul. Édouard-Montpetit</p>
+ <p>avec <a href='http://seminaire.sens-public.org/spip.php?auteur6' target='_blank'>Bertrand Gervais</a>, <a href='http://seminaire.sens-public.org/spip.php?auteur8' target='_blank'>Pierre Menard</a>, <a href='http://seminaire.sens-public.org/spip.php?auteur7' target='_blank'>Sarah-Maude Beauchesne</a></p>
+ <p>Internet a inventé le sens du collaboratif et du participatif au point que ces mots, avec le Web 2.0., en sont devenus les emblèmes. Quelles en ont été les conséquences dans les activités littéraires et les réseaux d’auteurs ? Doit-on parler d’une adaptation à la communication nouvelle, qui bouscule les habitudes de la lettre et du papier, ou bien y a-t-il eu la création de nouveaux réseaux littéraires fonctionnant sur d’autres modes ?</p>
+<ul>
+ <li>
+ <p><b>Bertrand Gervais</b></p>
+ <p>Fondateur et directeur du NT2, Bertrand Gervais travaille à de nombreux programmes de recherche sur l’imaginaire, la lecture littéraire et les nouvelles expériences de la textualité. Il a été co-récipiendaire du Prix d’excellence en recherche de l’Université du Québec pour les arts et les lettres en 1998. Il a publié de nombreux essais et ses travaux les plus récents portent sur les hypertextes de fiction. À côté de son activité de chercheur, Bertrand Gervais est aussi écrivain et romancier : ce double profil de praticien et théoricien rend son expertise particulièrement précieuse et adapté à l’approche du séminaire.</p>
+ </li>
+ <li>
+ <p><b>Sarah-Maude Beauchesne</b> est une jeune auteure québecoise dont l’écriture naît en ligne. Son écriture très particulière, sa façon de raconter se construisent et se réalisent sur le web. Ses nouvelles, dont deux recueils ont été publiés chez publie.net, sont un exemple significatif de la spécificité de l’écriture numérique. Invitée à la séance sur le « Geste et contexte de l’écriture littéraire numérique », elle partagera son expérience et ses réflexion sur le sens de la publication en ligne.</p>
+ </li>
+ <li>
+ <p><b>Philippe Diaz (alias Pierre Ménard)</b> est un auteur très investi dans le champ de l’écriture et de l’édition numériques. <a href='http://www.astrolabe-melun.fr/astrolabe-melun.fr/' target='_blank'>Bibliothécaire à la médiathèque de l’Astrolabe à Melun</a>, il enseigne à Sciences Po Paris et anime régulièrement des ateliers d’écriture et de création multimédia. Pierre Ménard est le pseudonyme qu’il a choisi en tant qu’écrivain. Il est le fondateur du site <a href='http://www.liminaire.fr' target='_blank'>www.liminaire.fr</a>, un site aux croisements web et littérature. Il participe au comité éditorial de <a href='http://www.publie.net' target='_blank'>Publie.net</a> et y anime la revue de création Internet : d’ici là.</p>
+ </li>
+</ul>
+ <p>Programme complet sur <a href='http://seminaire.sens-public.org/spip.php?article6' target='_blank'>sens-public.org</a></p>
+ ",
+
+ 'link' => 'http://seminaire.sens-public.org',
+
+ 'islive' => true,
+
+ 'keywords' => 'editorialisation, écritures, numérique, iri',
+
+ 'rep' => basename(__DIR__),
+
+ 'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a> | <a href='http://www.cite.umontreal.ca/' class='footerLink' target='_blank'>Centre de recherche Interdisciplinaire sur les Technologies Émergentes</a> | <a href='http://www.mshparisnord.fr/fr/' class='footerLink' target='_blank'>Maison des Sciences de l'Homme Paris Nord</a>",
+
+ 'client_visual' => 'images/client_visual.jpg',// 480 × 320 pixels
+
+ 'head_logo' => 'images/logo-edito.png', // 171 × 63 pixels
+
+ 'slide_background' => 'images/slide_background.jpg', // 606 × 282 pixels
+
+ 'archive_img' => 'images/archive_img.jpg', // 270 × 150 pixels
+
+ 'archive_title' => "Contextes et gestes de l'écriture littéraire numérique",
+ 'archive_description' => 'par <a href="http://www.sens-public.org" target="_blank">Sens Public</a> et l\'<a href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a><br/>au Centre Pompidou le 15/11/2012 17:30',
+
+ // After the event
+ 'metadata' => "99d311d0-8d5e-11e1-aa20-00145ea4a2be"
+);
\ No newline at end of file
Binary file web/edito-1213-01-contextes/images/archive_img.jpg has changed
Binary file web/edito-1213-01-contextes/images/client_visual.jpg has changed
Binary file web/edito-1213-01-contextes/images/logo-edito.png has changed
Binary file web/edito-1213-01-contextes/images/slide_background.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/edito-1213-01-contextes/index.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,6 @@
+<?php
+// Permanent redirection
+header("HTTP/1.1 301 Moved Permanently");
+header("Location: client.php");
+exit();
+?>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/edito-1213-02-collectifs-auteurs/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,50 @@
+<?php
+$config = array(
+ 'hashtag' => '#edito2012',
+
+ 'title' => "Écritures numériques et éditorialisation",
+
+ 'abstract' => "Séminaire « écritures numériques et éditorialisation » :<br /><b>De nouveaux collectifs d'auteurs</b><br/>le 13/12/2012 à Paris 17h30, à Montréal 11h30<br/>Centre Pompidou et Université de Montréal",
+
+ 'description'=> "<h3>De nouveaux collectifs d'auteurs</h3>
+ <p>le 13/12/2012
+ <br/>À Paris : De 17h30 à 19h30, au Centre Pompidou, salle Triangle - entrée libre et gratuite
+ <br />À Montréal : De 11h30 à 13h30, à l'Université de Montréal, salle P217 du Pavillon Roger-Gaudry, 2900, boul. Édouard-Montpetit</p>
+ <p>avec Évelyne Broudoux et Linda Leith</p>
+ <p>Si l’écriture a partie liée avec la temporalité, il ne fait aucun doute qu’Internet en a profondément modifié le geste et le rythme : la publication peut se faire dans l’instant et sans délai, rendue disponible immédiatement pour les internautes. À qui et comment s’adresse alors le texte produit ? Comment l’auteur négocie-t-il son geste au clavier avec l’espace public de publication ? « L’œuvre » se trouve-t-elle affectée par son lieu de production, l’espace multiforme qu’est le web ?</p>
+<ul>
+ <li>
+ <p><b>Évelyne Broudoux</b> est enseignante et chercheure au Conservatoire national des arts et métiers (<a href='http://www.cnam.fr/' target='_blank'>CNAM</a>), à Paris. Ses recherches concernent « le Web en tant qu’espace sociotechnique innovant ». Pour plus de détails sur ses recherches, visitez <a href='http://dicen.cnam.fr/enseignants-chercheurs/evelyne-broudoux-214406.kjsp' target='_blank'>sa page sur le site du CNAM</a>
+ </p>
+ </li>
+ <li>
+ <p><b>Linda Leith</b> est romancière ainsi que présidente de la <a href='http://bluemetropolis.org/home/index.dot?com.dotmarketing.htmlpage.language=2' target='_blank'>Fondation Métropolis bleu</a>, fondatrice de <a href='http://www.lindaleith.com/pages/about' target='_blank'>Linda Leith Éditions</a> et créatrice du magazine en ligne <a href='http://www.lindaleith.com/posts' target='_blank'>SALON.II.</a>, organismes tous basés à Montréal.</p>
+ </li>
+</ul>
+ <p>Programme complet sur <a href='http://seminaire.sens-public.org/spip.php?article6' target='_blank'>sens-public.org</a></p>
+ ",
+
+ 'link' => 'http://seminaire.sens-public.org',
+
+ 'islive' => true,
+
+ 'keywords' => 'editorialisation, écritures, numérique, iri',
+
+ 'rep' => basename(__DIR__),
+
+ 'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a> | <a href='http://www.cite.umontreal.ca/' class='footerLink' target='_blank'>Centre de recherche Interdisciplinaire sur les Technologies Émergentes</a> | <a href='http://www.mshparisnord.fr/fr/' class='footerLink' target='_blank'>Maison des Sciences de l'Homme Paris Nord</a>",
+
+ 'client_visual' => 'images/client_visual.jpg',// 480 × 320 pixels
+
+ 'head_logo' => 'images/logo-edito.png', // 171 × 63 pixels
+
+ 'slide_background' => 'images/slide_background.jpg', // 606 × 282 pixels
+
+ 'archive_img' => 'images/archive_img.jpg', // 270 × 150 pixels
+
+ 'archive_title' => "De nouveaux collectifs d'auteurs",
+ 'archive_description' => 'par <a href="http://www.sens-public.org" target="_blank">Sens Public</a> et l\'<a href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a><br/>au Centre Pompidou le 13/12/2012 17:30',
+
+ // After the event
+ 'metadata' => "99d311d0-8d5e-11e1-aa20-00145ea4a2be"
+);
\ No newline at end of file
Binary file web/edito-1213-02-collectifs-auteurs/images/archive_img.jpg has changed
Binary file web/edito-1213-02-collectifs-auteurs/images/client_visual.jpg has changed
Binary file web/edito-1213-02-collectifs-auteurs/images/logo-edito.png has changed
Binary file web/edito-1213-02-collectifs-auteurs/images/slide_background.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/edito-1213-02-collectifs-auteurs/index.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,6 @@
+<?php
+// Permanent redirection
+header("HTTP/1.1 301 Moved Permanently");
+header("Location: client.php");
+exit();
+?>
\ No newline at end of file
--- a/web/edito-arts-numeriques/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-arts-numeriques/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -31,7 +31,7 @@
//'flv_streamer' => 'rtmp://media.iri.centrepompidou.fr/ddc-player',
'use_tweetcast' => true,
'keywords' => 'editorialisation, iri, arts numériques, créativité, édition',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-datacuration/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-datacuration/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -29,7 +29,7 @@
'use_tweetcast' => true,
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-inaugurale/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-inaugurale/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -12,7 +12,7 @@
'link' => 'http://seminaire.sens-public.org',
'islive' => true,
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-intelligence/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-intelligence/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -34,7 +34,7 @@
),
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-reseaux-sociaux/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-reseaux-sociaux/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -20,7 +20,7 @@
'use_tweetcast' => true,
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => 'editorialisation, iri, réseaux sociaux, contribution, participation',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-serious-games/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-serious-games/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -32,7 +32,7 @@
'use_tweetcast' => true,
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/edito-webdoc/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/edito-webdoc/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -12,7 +12,7 @@
'link' => 'http://seminaire.sens-public.org',
'islive' => true,
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.sens-public.org' class='footerLink' target='_blank'>Sens Public</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_edito.jpg',// 501 × 376 pixels
--- a/web/eduinnov-conference/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/eduinnov-conference/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -67,7 +67,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/les-journees-de-linnovation/?lang=fr_fr',
'islive_embed' => '<iframe frameborder="0" width="{{width}}" height="{{height}}" src="http://www.dailymotion.com/embed/video/xpdcce?logo=0&autoPlay=1&forcedQuality=hq"></iframe>',
'keywords' => '"éducation, innovation, conférence, focus, unesco"',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.education.gouv.fr/'
class='footerLink' target='_blank'> Ministère de l'Éducation Nationale </a>
| <a href='http://www.unesco.org/'
--- a/web/eduinnov-focus/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/eduinnov-focus/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -69,7 +69,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/les-journees-de-linnovation/?lang=fr_fr',
'islive_embed' => '<iframe frameborder="0" width="{{width}}" height="{{height}}" src="http://www.dailymotion.com/embed/video/xpdcay?logo=0&autoPlay=1&forcedQuality=hq"></iframe>',
'keywords' => '"éducation, innovation, conférence, focus, unesco"',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.education.gouv.fr/'
class='footerLink' target='_blank'> Ministère de l'Éducation Nationale </a>
| <a href='http://www.unesco.org/'
--- a/web/eduinnov/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/eduinnov/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -64,7 +64,7 @@
<li><b>Prix de l’évaluation</b>, remis par Catherine Ferrant, déléguée générale de la Fondation Total et Yann Dyèvre, directeur de la jeunesse, de l’éducation populaire et de la vie associative</li>
<li><b>Prix des usagers</b>, remis par François-Daniel Migeon, directeur général de la modernisationde l’État</li>
</ul>",
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'link' => 'http://www.iri.centrepompidou.fr/evenement/les-journees-de-linnovation/?lang=fr_fr',
'islive_embed' => '<iframe frameborder="0" width="{{width}}" height="{{height}}" src="http://www.dailymotion.com/embed/video/xpdcce?logo=0&autoPlay=1&forcedQuality=hq"></iframe>',
'keywords' => '"éducation, innovation, conférence, focus, unesco"',
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/enmi12/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,99 @@
+<?php
+$config = array(
+ 'hashtag' => '#enmi12',
+
+ 'title' => "Entretiens du Nouveau Monde Industriel 2012",
+
+ 'abstract' => "Entretiens du Nouveau Monde Industriel 2012<br /><b>Digital Studies</b><br/>les 17 et 18 Décembre 2012<br/>Centre Pompidou, Grande Salle",
+
+ 'description'=> "<h3>Digital Studies</h3>
+ <p>Lundi 17 et Mardi 18 Décembre 2012
+ <br/>Centre Pompidou, Grande Salle
+ <br/>Entrée libre sur inscription :<a target='_blank' href='http://www.capdigital.com/evenements/enmi/'>http://www.capdigital.com/evenements/enmi/</a></p>
+ <p>La question du savoir et de l’éducation est au cœur des grands enjeux nationaux et internationaux de cette rentrée. Pour leur 6ème édition, les Entretiens du nouveau monde industriel porteront sur le thème des technologies de la connaissance. Ce thème et celui de l’organologie des savoirs constituent les bases du projet Digital Studies conduit par l’IRI et ses partenaires.</p>
+ <p>Le but de ce colloque est d’appréhender la question des digital humanities à partir de la question plus large et plus radicale des digital studies conçues comme une rupture épistémologique généralisée – c’est à dire affectant toutes les formes de savoirs rationnels – , mais aussi comme une rupture anthropologique – dans la mesure où, à travers les technologies relationnelles, ce sont aussi les savoirs empiriques sous toutes leurs formes, tels qu’ils constituent la trame de toute existence humaine, qui sont altérés.</p>
+ <p>Pour ce qui concerne l’Iri, l’ENSCI-Les Ateliers, Cap Digital et les partenaires associés à cette édition, cette approche «organologique» d’essence théorique vise à fournir des méthodes pour des activités pratiques de conception, de prototypages, de réalisation et d’expérimentation des instruments de recherche contributive, de production collaborative et de diffusion des savoirs dans la recherche, dans les enseignements supérieur et secondaire, et dans les entreprises comme dans l’ensemble de la société. Une telle ambition pratique impose sans doute de repenser en profondeur les liens entre politique culturelle, politique éducative, politique scientifique, politique industrielle, politique des médias et citoyenneté.</p>
+ <h3>Programme</h3>
+ <p><strong>Lundi 17 Décembre</strong></p>
+ <ul>
+ <li>
+ <p><strong>9h30 – 13h</strong></p>
+ <p>Session 1 : Le numérique comme écriture et la question des technologies intellectuelles</p>
+ <p>Les questions que le numérique pose à la science ne sont pas entièrement nouvelles : elles prennent corps à partir d’un fonds que l’on peut faire remonter au moins à l’apparition de l’écriture dans le monde antique, c’est à dire aussi à la configuration du savoir académique – entendu ici au sens où il fait référence à l’académie de Platon. Ces questions, en mobilisant aujourd’hui aussi bien les historiens du savoir que les neurosciences, font apparaître que le devenir du cerveau semble être indissociable de celui des supports artificiels qui constituent les savoirs.</p>
+ <p><strong>Intervenants</strong> : Bernard Stiegler (IRI), Maryanne Wolf (Tufts University), David Bates (University of Berkeley), Nathalie Bulle (Cnrs), Warren Sack (University of Santa Cruz)</p>
+ </li>
+ <li>
+ <p><strong>14h30 – 16h</strong></p>
+ <p>Session 2 : Théories et pratiques de l’épistémologie dans les sciences de l’homme et de la société à l’époque du numérique</p>
+ <p>Issu de la technologie informatique, le numérique transforme aujourd’hui en profondeur aussi bien les pratiques que les objets des sciences de l’homme et de la société. C’est dans ce contexte qu’émergent des programmes et des départements d’humanités numériques (digital humanities) où la question d’une nouvelle épistémologie des instruments semble s’imposer, cependant que la publication des data et l’ouverture des savoirs, faisant apparaître des pratiques inédites de recherche contributive, rouvre à nouveaux frais le dossier du rapport entre le monde académique et son dehors.</p>
+ <p><strong>Intervenants</strong> : Dominique Cardon (Orange Labs), Jean Lassègue (CREA-Polytechnique), Pierre Mounier (CLEO)</p>
+ </li>
+ <li>
+ <p><strong>16h30 - 18h</strong></p>
+ <p>Session 3 : Software studies, digital humanities, digital studies</p>
+ <p>De même que Foucault avait mis l’étude des traces et technologies de l’archive qui constituent toute épistémè au coeur de son projet d’archéologie des savoirs, les software studies, qui explorent la question de l’algorithme, et qui sont largement inspirées par les questions, les hypothèses et les pratiques du free software, se sont développées entre informatique théorique, pratiques artistiques et projet social. Pendant ce temps, le paradigme des digital humanities s’est imposé un peu partout dans le monde. Mais est-il possible de questionner le numérique dans les sciences de l’homme et de la société sans le faire aussi dans les sciences mathématiques, les sciences physiques, les sciences de la vie, etc. ? Quel est alors le statut des savoirs matérialisés et appareillés par le numérique, notamment par la modélisation et la 3D et dans tous les domaines de la vie au regard des sciences de la cognition ?</p>
+ <p><strong>Intervenants</strong> : Matthew Fuller (Goldsmiths College), Bruno Bachimont (UTC), Pascal Daloz (Dassault Systèmes, sous réserve)</p>
+ </li>
+ <li><strong>18h – 18h30 : </strong>Questions et pause</li>
+ <li><strong>18h30 : </strong>Carrefour des Possibles</li>
+ </ul>
+ <p><strong>Mardi 18 décembre </strong></p>
+ <ul>
+ <li>
+ <p><strong>9h – 10h30</strong></p>
+ <p>Session 4 : Extended mind et tracéologie numérique</p>
+ <p>Il y a plus de vingt ans, les questions posées en sciences de la cognition par les instruments du savoir et leur extériorité par rapport au corps et à la conscience – aussi bien d’ailleurs que par rapport à l’inconscient– ont été posées notamment à travers les paradigmes de la cognition située et de l’esprit étendu (extended mind). Aujourd’hui, dans le contexte de la tracéologie généralisée induite par les capteurs, cookies, métadonnées, social web, etc., et au moment où les neurosciences commencent à s’intéresser aux formes anciennes et récentes d’extériorisation des savoirs par rapport au corps et donc au cerveau, s’impose la question de la trace sous toutes ses formes (vivantes, neuronales, techniques, institutionnelles, etc.), les processus d’extériorisation et d’intériorisation entre ces diverses instances devant être analysées en détail.</p>
+ <p><strong>Intervenants</strong> : Ed Cohen (Rutgers University), Alain Mille (Liris/Cnrs), Yannick Prié (LINA, Université de Nantes)</p>
+ </li>
+ <li>
+ <p><strong>11h15 – 13h15</strong></p>
+ <p>Session 5 : Technologies industrielles de la connaissance et individuation collective</p>
+ <p>La numérisation généralisée affecte désormais massivement toutes les formes de savoirs, pratiques et théoriques, de la vie quotidienne aux mondes académiques. En pénétrant tous les milieux symboliques, elle installe l’industrialisation et la monétisation dans toutes les dimensions de la relation sociale en mettant en oeuvre des technologies de transindividuation qui modifient le devenir de la langue et plus généralement les processus d’individuation collective, cependant que le nouvel espace de publication que constitue le web forme pour les institutions de savoirs leur chose publique – leur res publica : leur «république du numérique».</p>
+ <p><strong>Intervenants</strong> : Frédéric Kaplan (EPFL), Harry Halpin (IRI), Alain Giffard (Ministère de la Culture), Christian Fauré (Ars Industrialis)</p>
+ </li>
+ <li>
+ <p><strong>14h30 - 16h30</strong></p>
+ <p>Session 6 : Enjeux industriels</p>
+ <p>Industries culturelles, médias de masse, édition connaissent une très profonde révolution où tous les modèles antérieurs sont à plus ou moins brève échéance voués à disparaître. Cela affecte directement les télécommunications aussi bien que les équipementiers électroniques. Dans le monde audiovisuel, l’éditorialisation doit être repensée en profondeur, cependant que le métier même de diffuseur est appelé à régresser au profit d’une nouvelle forme d’activité éditoriale. Des activités comme la lecture et l’écriture, qui ne peuvent plus être conçues indépendamment des liseuses et des réseaux sociaux, nécessitent de nouveaux instruments de travail individuel et collectif où se généralisent les langages d’annotation – qui supposent de nouvelles normes industrielles. Dans cette économie relationnelle, la question de la valorisation des externalités positives, qui deviennent une fonction économique cruciale, nécessite de nouveaux critères en matière de fiscalité.</p>
+ <p><strong>Intervenants</strong> : Bruno Patino (France Télévisions), Jean-Luc Beylat et Jean-Baptiste Labrune (Alcatel Bell Labs), Michel Calmejane (Colt Technologies), Jean-Marc Merriaux (CNDP)</p>
+ </li>
+ <li>
+ <p><strong>16h45-18h45</strong></p>
+ <p>Session 7 : Design, documentation, écriture et thérapeutique du pharmakon numérique</p>
+ <p>Les pratiques de la lecture et de l’écriture numérique sont désormais la réalité quotidienne aussi bien des documentalistes de l’enseignement secondaire que des écrivains, cependant que le monde artistique, en faisant de la digitalisation son matériau, investigue la nouvelle « pharmacologie » et ses « thérapeutiques ». L’esthétique peut ici contribuer aux digital studies en revisitant à partir des pratiques instrumentales des questions comme celles de l’attention, de la perception, de l’individuation à travers les oeuvres, de l’expression, cependant que l’expérience des designers et des techniciens de la documentation viennent au premier plan.</p>
+ <p><strong>Intervenants</strong> : Sophie Pène et Yves Rinato (ENSCI), Cécile Portier (écrivain), Marcel O’Gorman (University of Waterloo), Jean-Louis Fréchin (ENSCI)</p>
+ </li>
+ <li><strong>18h45 :</strong> Bilan des expérimentations contributives</li>
+ <li><strong>19h :</strong> Clôture des Entretiens</li>
+ </ul>
+ ",
+
+ 'link' => 'http://www.capdigital.com/evenements/enmi/',
+
+ 'islive' => true,
+
+ 'keywords' => 'iri, nouveau monde industriel, philosophie, digital studies',
+
+ 'rep' => basename(__DIR__),
+
+ 'partenaires'=> "<a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>
+ | <a href='http://www.ensci.com/' class='footerLink' target='_blank'>Ensci</a>
+ | <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
+ | <a href='http://www.alcatel-lucent.com/' class='footerLink' target='_blank'>Alcatel Lucent</a>
+ | <a href='http://www.francetelevisions.fr/' class='footerLink' target='_blank'>France Télévisions</a>
+ | <a href='http://www.mines-telecom.fr/' class='footerLink' target='_blank'>Institut Mines-Télécom</a>",
+
+ 'client_visual' => 'images/client_visual.jpg',// 480 × 320 pixels
+
+ 'head_logo' => 'images/logo-enmi.png', // 171 × 63 pixels
+
+ 'slide_background' => 'images/slide_background.jpg', // 606 × 282 pixels
+
+ 'archive_img' => 'images/archive_img.jpg', // 270 × 150 pixels
+
+ 'archive_title' => "Entretiens du Nouveau Monde Industriel 2012",
+ 'archive_description' => 'par l\'<a href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a><br/>au Centre Pompidou les 17 et 18 décembre 2012',
+
+ // After the event
+ 'metadata' => "99d311d0-8d5e-11e1-aa20-00145ea4a2be"
+);
\ No newline at end of file
Binary file web/enmi12/images/archive_img.jpg has changed
Binary file web/enmi12/images/client_visual.jpg has changed
Binary file web/enmi12/images/logo-enmi.png has changed
Binary file web/enmi12/images/slide_background.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/enmi12/index.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,6 @@
+<?php
+// Permanent redirection
+header("HTTP/1.1 301 Moved Permanently");
+header("Location: client.php");
+exit();
+?>
\ No newline at end of file
--- a/web/enmi2011/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/enmi2011/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -48,7 +48,7 @@
'link' => 'http://www.iri.centrepompidou.fr',
'islive' => true,
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'> IRI </a>
| <a href='http://www.ensci.fr/' class='footerLink' target='_blank' > ENSCI </a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank' > Cap Digital </a>
--- a/web/enmi2012-seminaire-1/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/enmi2012-seminaire-1/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -75,7 +75,7 @@
'use_tweetcast' => true,
//'knowtex_url' => "http://labs.knowtex.com/enmi2011/?mapOnly#carto",
'keywords' => 'editorialisation, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.ensci.com/' class='footerLink' target='_blank'>Ensci Les Ateliers</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a> | <a href='http://www.microsoft.fr/' class='footerLink' target='_blank'>Microsoft France</a> | <a href='http://www.francetelevisions.fr/' class='footerLink' target='_blank'>France Télévisions</a> | <a href='http://www.institut-telecom.fr/' class='footerLink' target='_blank'>Institut Télécom</a> | <a href='http://www.alcatel-lucent.com/' class='footerLink' target='_blank'>Alcatel-Lucent</a> | <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>",
'client_visual' => 'images/big_visuel_enmi2012.jpg',// 501 × 376 pixels
--- a/web/fens2012-designmetadata/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-designmetadata/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -56,7 +56,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/design-metadata-2012/',
'islive' => true,
'keywords' => 'futur en seine, design, metadata, métadonnées, ingénierie, étudiants, projets, pitch, présentation, iri, journalisme de données, datajournalism, datajournalisme',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-edito-datajournalisme/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-edito-datajournalisme/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -86,7 +86,7 @@
'link' => 'http://seminaire.sens-public.org',
'islive' => true,
'keywords' => 'futur en seine, editorialisation, iri, journalisme de données, datajournalism, datajournalisme, visualisation de données, datavisualization, dataviz',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-gamestudies/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-gamestudies/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -79,7 +79,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/game-studies/',
'islive' => true,
'keywords' => 'futur en seine, jeux, games, game studies, sciences humaines, omnsh, mondes numériques',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-mashupfilmfestival/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-mashupfilmfestival/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -64,7 +64,7 @@
'link' => 'http://www.mashupfilmfestival.fr/programme/les-enjeux-des-pratiques-collaboratives-et-de-la-contribution/',
'islive' => true,
'keywords' => 'futur en seine, editorialisation, iri, journalisme de données, datajournalism, datajournalisme, visualisation de données, datavisualization, dataviz',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-museo-culture-opendata/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-museo-culture-opendata/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -69,7 +69,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/',
'islive' => true,
'keywords' => 'futur en seine, muséologie, muséographie, adresse au public, iri, open data, données ouvertes, culture, données culturelles, wikimedia, ministère de la culture, cnrs',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-vinyl-numerique/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-vinyl-numerique/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -69,7 +69,7 @@
'link' => 'http://seminaire.sens-public.org',
'islive' => true,
'keywords' => 'futur en seine, editorialisation, iri, journalisme de données, datajournalism, datajournalisme, visualisation de données, datavisualization, dataviz',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012-wiid/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012-wiid/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -81,7 +81,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/who-is-interaction-design/',
'islive' => true,
'keywords' => 'futur en seine, iri, visualisation de données, datavisualization, dataviz, interactivité, interaction, interaction design, design d\'interaction, interactive design',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=>
"<a href='http://www.futur-en-seine.fr/' class='footerLink' target='_blank'>Futur en Seine 2012</a>
| <a href='http://www.capdigital.com/' class='footerLink' target='_blank'>Cap Digital</a>
--- a/web/fens2012/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/fens2012/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -18,7 +18,7 @@
'abstract' => "<b>Festival Futur en Seine</b><br/>du 14 au 24 juin 2012 à Paris",
'description'=> "<p></p>",
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'link' => 'http://www.futur-en-seine.fr/',
'keywords' => 'futur en seine, festival, innovation, nouvelles technologies, paris, centre pompidou, iri',
'partenaires'=> "<a href='http://www.futur-en-seine.fr/'
--- a/web/humanitats-digital/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/humanitats-digital/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -18,7 +18,7 @@
<embed flashvars='cid=9689562&autoplay=false' width='501' height='376' allowfullscreen='true' allowscriptaccess='always' src='http://www.ustream.tv/flash/viewer.swf' type='application/x-shockwave-flash'></embed>
</object>",
'keywords' => 'humanitats digitals, iri, cccb',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.cccb.org' class='footerLink' target='_blank'>CCCB</a> | <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>IRI</a>",
'client_visual' => 'images/big_visuel_humanitats.png',// 501 × 376 pixels
--- a/web/iii-catastrophe/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/iii-catastrophe/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -28,7 +28,7 @@
'link' => 'http://forum.dir.u-tokyo.ac.jp/?p=319&lang=fr',
'islive' => true,
'keywords' => 'media, catastrophe, manga, cinema, tv, anime, art, game, iii, iri',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.iii.u-tokyo.ac.jp/'
class='footerLink' target='_blank'> III, University of Tokyo </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/jenkins/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/jenkins/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -20,7 +20,7 @@
</p>",
'link' => 'http://www.univ-paris3.fr/jsp/fiche_actualite.jsp?CODE=1331637711181',
'keywords' => 'Transmedia, Henry Jenkins, Jenkins, fans',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.univ-paris3.fr/' class='footerLink' target='_blank'>Université Sorbonne Nouvelle Paris 3</a>
| <a href='http://www.centrepompidou.fr/' class='footerLink' target='_blank'>Centre National d'Art et de Culture Georges Pompidou</a>
| <a href='http://www.transmedialab.org/' class='footerLink' target='_blank'>Orange Transmedia Lab</a>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/museo-1213-01-inaugurale/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,46 @@
+<?php
+$config = array(
+ 'hashtag' => '#museoweb',
+
+ 'title' => "Muséologie, muséographie et nouvelles formes d’adresse au public<br />Les enjeux de la contribution",
+
+ 'abstract' => "« <b>Digital Studies : La culture face aux défis du numérique</b> » <br/> 13/11/2012 de 17h00 à 20h00 au Centre Pompidou (Paris)",
+
+ 'description'=> "<p><b>Digital Studies : La culture face aux défis du numérique</b> (le 13/11/2012)</p>
+<ul>
+ <li>Bernard Stiegler, IRI</li>
+ <li>Christian Licoppe, Institut Mines-Telecom</li>
+</ul>
+<p>Les musées ont de tout temps été des lieux privilégiés de relais du savoir (scientifique comme vernaculaire). L’une des transformations les plus profondes du numérique concerne justement la modification des conditions d’exercice de la science et de production des savoirs au pluriel. Alors que les modèles académiques traditionnels, fondés sur la publication et l’édition scientifique, sont en crise, d’autres lieux et d’autres pratiques épistémiques émergent.</p>
+<p>Dans ces conditions, la question se pose pour les musées de savoir comment remplir leur missions traditionnelles dans un paysage largement bouleversé par le numérique. Ce séminaire entendra donc cartographier les lieux et les pratiques émergentes autour de la diffusion du savoir dans le champ culturel comme scientifique ainsi que les modalités permettant aux musées de développer de nouvelles missions sociales et éditoriales.</p>
+<p>Si l’anthropogenèse est aussi une technogenèse, celle-ci connait avec le numérique un nouveau stade. La dimension technologique des savoirs en tant que telle doit donc venir au centre des questions que posent aussi bien l’histoire des savoirs constitués (reconsidérée à la lumière de l’époque contemporaine), que les nouvelles formes de savoir que la numérisation fait émerger.</p>
+<p>Une telle ambition pratique impose sans doute de repenser en profondeur les liens entre politique culturelle, politique éducative, politique scientifique, politique industrielle, politique des médias et citoyenneté.</p>",
+
+ 'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
+
+ 'islive' => true,
+
+ 'keywords' => 'muséographie, muséologie, contribution, numérique, défis',
+
+ 'rep' => basename(__DIR__),
+
+ 'partenaires'=> "<a href='http://www.culture.gouv.fr/'
+class='footerLink' target='_blank'> Ministère de la Culture et communication </a>
+| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
+IRI </a>",
+
+ 'client_visual' => "images/client_visual.jpg", // 480 x 320 pixels
+
+ 'head_logo' => 'images/head_logo.gif', // 171 × 63 pixels
+
+ 'slide_background' => "images/slide_background.jpg", // 606 × 282 pixels
+
+ 'archive_img' => "images/archive_img.jpg", // 270 × 150 pixels
+
+ 'archive_title' => "Muséologie 2012-2013 - La culture face aux défis du numérique",
+
+ 'archive_description' => "par <a href=\"http://www.iri.centrepompidou.fr/\" target=\"_blank\">IRI</a> au Centre Pompidou<br/> le mardi 13 novembre 2012 | 17:00 - 20:00",
+
+ // After the event
+ 'metadata' => "1d1e91c8-71d4-11e1-99d6-00145ea4a2be"
+);
\ No newline at end of file
Binary file web/museo-1213-01-inaugurale/images/archive_img.jpg has changed
Binary file web/museo-1213-01-inaugurale/images/client_visual.jpg has changed
Binary file web/museo-1213-01-inaugurale/images/head_logo.gif has changed
Binary file web/museo-1213-01-inaugurale/images/slide_background.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/museo-1213-01-inaugurale/index.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,6 @@
+<?php
+// Permanent redirection
+header("HTTP/1.1 301 Moved Permanently");
+header("Location: client.php");
+exit();
+?>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/museo-1213-02-vecteurs-numerique/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,43 @@
+<?php
+$config = array(
+ 'hashtag' => '#museoweb',
+
+ 'title' => "Muséologie, muséographie et nouvelles formes d’adresse au public<br />Les enjeux de la contribution",
+
+ 'abstract' => "« <b>Les musées : vecteurs, victimes<br />ou usagers du numérique ?</b> » <br/> 04/12/2012 à 17h30 au Centre Pompidou (Paris)",
+
+ 'description'=> "<p><b>Les musées : vecteurs, victimes ou usagers du numérique ?</b> (le 04/12/2012)</p>
+<ul>
+ <li>Joëlle Le Marec, Université Paris Diderot</li>
+ <li>Thierry Paquot, Institut d'Urbanisme de Paris</li>
+</ul>
+",
+
+ 'link' => 'http://www.iri.centrepompidou.fr/evenement/museologie-museographie-et-nouvelles-formes-dadresse-au-public/?lang=fr_fr',
+
+ 'islive' => true,
+
+ 'keywords' => 'muséographie, muséologie, contribution, numérique, défis',
+
+ 'rep' => basename(__DIR__),
+
+ 'partenaires'=> "<a href='http://www.culture.gouv.fr/'
+class='footerLink' target='_blank'> Ministère de la Culture et de la Communication </a>
+| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
+IRI </a>",
+
+ 'client_visual' => "images/client_visual.jpg", // 480 x 320 pixels
+
+ 'head_logo' => 'images/head_logo.gif', // 171 × 63 pixels
+
+ 'slide_background' => "images/slide_background.jpg", // 606 × 282 pixels
+
+ 'archive_img' => "images/archive_img.jpg", // 270 × 150 pixels
+
+ 'archive_title' => "Muséologie 2012-2013 - Les musées : vecteurs, victimes ou usagers du numérique ?",
+
+ 'archive_description' => "par <a href=\"http://www.iri.centrepompidou.fr/\" target=\"_blank\">IRI</a> au Centre Pompidou<br/> le mardi 4 décembre 2012 | 17:30 - 20:00",
+
+ // After the event
+ 'metadata' => "1d1e91c8-71d4-11e1-99d6-00145ea4a2be"
+);
\ No newline at end of file
Binary file web/museo-1213-02-vecteurs-numerique/images/archive_img.jpg has changed
Binary file web/museo-1213-02-vecteurs-numerique/images/client_visual.jpg has changed
Binary file web/museo-1213-02-vecteurs-numerique/images/head_logo.gif has changed
Binary file web/museo-1213-02-vecteurs-numerique/images/slide_background.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/museo-1213-02-vecteurs-numerique/index.php Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,6 @@
+<?php
+// Permanent redirection
+header("HTTP/1.1 301 Moved Permanently");
+header("Location: client.php");
+exit();
+?>
\ No newline at end of file
--- a/web/player_embed.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/player_embed.php Mon Dec 10 10:47:14 2012 +0100
@@ -55,51 +55,40 @@
url: '<?php echo get_metadata_url($metadata_url) ?>?callback=?',
format: 'ldt'
};
- var _config = {
- gui: {
- width: 630,
- container: 'LdtPlayer',
- default_options: {
- metadata: _metadata
+ var _config = {
+ width: 630,
+ container: 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css:'<?php echo(registry_url('metadataplayer','css'));?>',
+ widgets: [
+ {
+ type: "JwpPlayer",
+ live: true,
+ height: 300,
+ provider: "rtmp"
},
- css:'<?php echo(registry_url('metadataplayer','css'));?>',
- widgets: [
<?php if ($protocol_level > 1): ?>
- {
- type: "Polemic"
+ {
+ type: "Polemic"
<?php if ($protocol_level < 3): ?>
- ,
- polemics: []
-<?php endif; ?>
- },
+ ,
+ polemics: []
<?php endif; ?>
- { type: "Slider" },
- {
- type: "Controller",
- disable_annotate_btn: true
- },
- {
- type: "Segments",
- annotation_type: [ "chap", "découpage" ]
- },
- { type: "Arrow" },
- {
- type: "Annotation",
- annotation_type: [ "chap", "découpage" ]
- },
- { type: "Tweet" },
- { type: "Mediafragment"}
- ]
- },
- player:{
- type:'jwplayer', // player type
- live: true,
- height: 300,
- width: 630,
- provider: "rtmp",
- autostart: true,
- metadata: _metadata
- }
+ },
+<?php endif; ?>
+ { type: "Slider" },
+ {
+ type: "Controller",
+ disable_annotate_btn: true
+ },
+ {
+ type: "MultiSegments"
+ },
+ { type: "Tweet" },
+ { type: "Mediafragment"}
+ ]
};
</script>
<script type="text/javascript">
--- a/web/polemicaltimeline.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/polemicaltimeline.php Mon Dec 10 10:47:14 2012 +0100
@@ -108,6 +108,7 @@
_cookiematches = document.cookie.match(/PHPSESSID=([A-Za-z0-9]+)/),
_cookie = (_cookiematches && _cookiematches.length > 1 ? _cookiematches[1] : undefined);
+<?php if ($use_protocol): ?>
var _tracer = tracemanager.init_trace("test", {
url: "http://traces.advene.org:5000/",
requestmode: "GET",
@@ -119,6 +120,7 @@
protocol_level: <?php echo $protocol_level; ?>,
cookie: _cookie
});
+<?php endif; ?>
IriSP.libFiles.defaultDir = "<?php echo(registry_url('libdir','js'));?>";
IriSP.widgetsDir = "<?php echo(registry_url('ldtwidgets','js'));?>";
@@ -129,81 +131,72 @@
url: metadatas[metadata_key].url + '?callback=?',
format: 'ldt'
};
- var _config = {
- gui: {
- width: 600,
- height: 800,
- container: 'LdtPlayer',
- default_options: {
- metadata: _metadata
+ var _config = {
+ width: 600,
+ height: 800,
+ container: 'LdtPlayer',
+ default_options: {
+ metadata: _metadata
+ },
+ css:'<?php echo(registry_url('metadataplayer','css'));?>',
+ widgets: [
+ {
+ type: "JwpPlayer",
+ live: true,
+ height: 360,
+ width: 600,
+ provider: "rtmp",
+ autostart: true
},
- css:'<?php echo(registry_url('metadataplayer','css'));?>',
- widgets: [
<?php if ($protocol_level > 1): ?>
- {
- type: "Polemic"
+ {
+ type: "Polemic"
<?php if ($protocol_level < 3): ?>
- ,
- polemics: []
-<?php endif; ?>
- },
+ ,
+ polemics: []
<?php endif; ?>
- { type: "Slider" },
- {
- type: "Controller",
- disable_annotate_btn: true
- },
+ },
+<?php endif; ?>
+ { type: "Slider" },
+ {
+ type: "Controller",
+ disable_annotate_btn: true
+ },
<?php if ($protocol_level > 1): ?>
- {
- type: "Segments",
- annotation_type: [ "chap", "découpage" ]
- },
- { type: "Arrow" },
- {
- type: "Annotation",
- annotation_type: [ "chap", "découpage" ]
- },
- { type: "Tweet" },
+ {
+ type: "MultiSegments"
+ },
+ { type: "Tweet" },
<?php if (!$use_protocol): ?>
- {
- type: "Tagcloud",
- container: "TagcloudContainer",
- exclude_pattern: /^@/,
- custom_stopwords: <?php echo json_encode(array($config['hashtag'])) ?>
- },
- {
- type: "AnnotationsList",
- //ajax_url : "http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}?callback=?",
- //foreign_url : "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}",
- container: "AnnotationsListContainer"
- },
+ {
+ type: "Tagcloud",
+ container: "TagcloudContainer",
+ exclude_pattern: /^@/,
+ custom_stopwords: <?php echo json_encode(array($translate->_('config__hashtag'))) ?>
+ },
+ {
+ type: "AnnotationsList",
+ //ajax_url : "http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}?callback=?",
+ //foreign_url : "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}",
+ container: "AnnotationsListContainer"
+ },
<?php endif; ?>
<?php endif; ?>
- { type: "Mediafragment"},
+ { type: "Mediafragment"},
<?php if ($use_protocol): ?>
- {
- type: "Trace",
- tracer: _tracer,
- extend: {
- cookie: _cookie,
- protocol_level: _protocol_level
- },
- js_console: true
- }
+ {
+ type: "Trace",
+ tracer: _tracer,
+ extend: {
+ cookie: _cookie,
+ protocol_level: _protocol_level
+ },
+ js_console: true
+ }
<?php endif; ?>
- ]
- },
- player:{
- type:'jwplayer', // player type
- live: true,
- height: 360,
- width: 600,
- provider: "rtmp",
- metadata: _metadata
- }
+ ]
};
-
jQuery(document).ready(function() {
<?php if ($show_splash): ?>
Binary file web/res/fonts/PTSans-Bold.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSans-Bold.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,600 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 11:17:16 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-Bold" horiz-adv-x="567" >
+ <font-face
+ font-family="PT Sans"
+ font-weight="700"
+ font-stretch="normal"
+ units-per-em="1000"
+ panose-1="2 11 7 3 2 2 3 2 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-52 -273 1191 875"
+ underline-thickness="50"
+ underline-position="-50"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="253"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="294"
+d="M100 700h134v-329l-26 -163h-82l-26 163v329zM86 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="402"
+d="M90 700h114l-36 -216h-78v216zM238 700h114l-36 -216h-78v216z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M289 205h-89l-36 -154h-107l36 154h-74l22 97h75l25 106h-72l22 97h73l35 144h106l-34 -144h89l35 144h106l-34 -144h72l-25 -97h-70l-25 -106h69l-24 -97h-68l-36 -154h-107zM223 302h89l25 106h-89z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M238 -13q-57 2 -100 12t-67 23l39 113q18 -11 50.5 -21t77.5 -14v205q-31 14 -61.5 31t-54.5 41t-38.5 57.5t-14.5 79.5q0 86 45.5 133.5t123.5 61.5v91h104v-87q44 -3 77 -12t61 -21l-36 -111q-17 8 -43 16t-59 12v-187q31 -14 62.5 -31.5t56 -41.5t40 -56.5t15.5 -77.5
+q0 -92 -46.5 -143.5t-127.5 -66.5v-93h-104v87zM386 188q0 32 -25.5 52.5t-61.5 37.5v-178q44 5 65.5 28t21.5 60zM199 525q0 -30 23.5 -50t58.5 -37v162q-47 -2 -64.5 -23t-17.5 -52z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="840"
+d="M677 714l73 -66l-576 -662l-73 69zM51 542q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM167 542q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5
+q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67zM457 171q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM573 171q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5
+q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="814"
+d="M92 194q0 38 12.5 72.5t35 64.5t53.5 56t67 46q-25 33 -41 67t-16 72q0 25 9.5 50.5t30 46t53.5 33t80 12.5q46 0 78.5 -11t52.5 -29t29 -41t9 -47q0 -41 -29 -85.5t-99 -85.5q35 -54 70 -99t78 -89q23 25 41.5 62.5t32.5 76.5l94 -50q-6 -18 -16.5 -39.5t-23 -43.5
+t-25.5 -41.5t-24 -33.5q32 -29 56 -45.5t49 -30.5l-69 -96q-28 13 -57.5 34.5t-58.5 49.5q-36 -33 -90 -58.5t-133 -25.5q-52 0 -97.5 14t-79 41t-53 65.5t-19.5 87.5zM486 149q-51 53 -93 105.5t-73 99.5q-48 -37 -73 -71.5t-25 -77.5q0 -51 37.5 -80t98.5 -29
+q40 0 75 16.5t53 36.5zM333 566q0 -42 36 -90q39 25 56.5 47t17.5 42q0 24 -13.5 38t-43.5 14q-27 0 -40 -14t-13 -37z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="254"
+d="M90 700h114l-36 -216h-78v216z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="327"
+d="M227 -220q-46 48 -78 105.5t-51.5 118t-28.5 122t-9 117.5q0 55 9 116t29 122.5t52.5 120.5t79.5 110l84 -54q-35 -47 -58.5 -98t-38 -104.5t-21 -107.5t-6.5 -105q0 -48 7 -102t22 -107.5t39 -104.5t58 -93z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="327"
+d="M97 712q48 -48 80 -105.5t51.5 -118t28.5 -122t10 -119.5q-1 -53 -10 -114t-29 -122.5t-52.5 -120.5t-75.5 -110l-89 56q38 49 62 100.5t38 104t19.5 105t6.5 97.5q-1 54 -8.5 107.5t-22.5 107t-38.5 104t-54.5 96.5z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="378"
+d="M144 731l28 -46l15 -59l15 55l28 49l64 -35l-30 -52l-48 -43l65 16h57v-73h-55l-61 16l50 -47l25 -42l-64 -37l-27 46l-20 64l-13 -58l-29 -49l-64 37l29 49l45 37l-55 -16h-59v74h60l59 -17l-51 44l-28 50z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="527"
+d="M43 394h162v169h117v-169h163v-112h-163v-171h-117v171h-162v112z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="252"
+d="M42 64q0 34 22.5 54t55.5 20q42 0 66 -28t24 -74q0 -45 -14 -77.5t-34.5 -54t-44 -34t-42.5 -18.5l-38 54q27 11 47 36t22 53q-23 -3 -43.5 14t-20.5 55z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="360"
+d="M54 345h251v-115h-251v115z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="246"
+d="M42 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="408"
+d="M333 712l98 -44l-357 -808l-98 46z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M40 351q0 184 63 273.5t181 89.5q126 0 185 -88.5t59 -274.5q0 -185 -63.5 -275t-181.5 -90q-125 0 -184 94.5t-59 270.5zM170 351q0 -122 26.5 -188.5t87.5 -66.5q59 0 86.5 61t27.5 194q0 121 -26 187t-89 66q-60 0 -86.5 -62t-26.5 -191z" />
+ <glyph glyph-name="one" unicode="1"
+d="M101 110h139v395l15 68l-48 -59l-89 -61l-55 75l228 184h73v-602h136v-110h-399v110z" />
+ <glyph glyph-name="two" unicode="2"
+d="M475 529q0 -51 -18.5 -103t-47 -102t-63 -96.5t-67.5 -85.5l-53 -41v-5l72 14h192v-110h-421v67q24 25 54 58.5t60.5 71t59.5 77.5t52 80.5t36.5 78.5t13.5 72q0 41 -23.5 67.5t-74.5 26.5q-32 0 -65.5 -13.5t-56.5 -34.5l-52 92q39 32 88.5 51.5t116.5 19.5q43 0 79 -12
+t62 -35t41 -57.5t15 -80.5z" />
+ <glyph glyph-name="three" unicode="3"
+d="M241 96q62 0 94.5 33t32.5 80q0 57 -34 84t-107 27h-72v69l121 165l57 45l-79 -9h-168v110h382v-71l-141 -189l-44 -27v-5l42 6q35 -3 66.5 -16t55 -37.5t37.5 -60.5t14 -83q0 -59 -19.5 -102t-54 -72t-80.5 -43t-99 -14q-44 0 -91 8t-76 23l35 108q26 -13 57.5 -21
+t70.5 -8z" />
+ <glyph glyph-name="four" unicode="4"
+d="M553 195h-110v-195h-121v195h-303v74l317 436h107v-406h110v-104zM322 452l9 84h-4l-34 -72l-104 -135l-50 -38l64 8h119v153z" />
+ <glyph glyph-name="five" unicode="5"
+d="M220 101q66 0 101 32t35 88q0 60 -41 88t-117 28l-79 -3v366h344v-122h-232v-135l41 4q49 -2 88.5 -18t67.5 -44.5t43 -69t15 -90.5q0 -59 -20 -104t-55.5 -75t-83.5 -45t-105 -15q-45 0 -85.5 7.5t-68.5 20.5l35 108q23 -10 50.5 -15.5t66.5 -5.5z" />
+ <glyph glyph-name="six" unicode="6"
+d="M520 217q0 -49 -16.5 -91t-46.5 -73t-72.5 -49t-93.5 -18q-52 0 -95.5 16.5t-75.5 49.5t-50 83t-18 116q0 99 28.5 179t77 139.5t113 96t136.5 48.5l29 -103q-50 -8 -92 -31t-74.5 -55t-55 -71.5t-31.5 -81.5q20 25 52 42.5t80 17.5q45 0 83 -14t65 -41.5t42 -67.5
+t15 -92zM394 210q0 112 -110 112q-40 0 -67.5 -18t-38.5 -42q-2 -11 -2 -19v-16q0 -24 7 -47.5t20.5 -42t34.5 -30t50 -11.5q47 0 76.5 32t29.5 82z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M104 0l229 539l44 49l-60 -10h-257v122h451v-38l-280 -662h-127z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M61 171q0 35 9 62.5t25.5 50t39 40.5t48.5 33q-49 31 -77 71.5t-28 100.5q0 39 14.5 73t42 59t66.5 39t88 14q45 0 82 -12t63.5 -34t41 -53.5t14.5 -69.5q0 -59 -26.5 -100t-77.5 -75q60 -35 90.5 -77t30.5 -108q0 -45 -16.5 -81.5t-46.5 -62.5t-72 -40.5t-92 -14.5
+t-90.5 13.5t-69 37.5t-44 58t-15.5 76zM383 184q0 23 -11 42t-28.5 34.5t-39 28.5t-43.5 25q-47 -27 -64.5 -58.5t-17.5 -62.5q0 -40 27.5 -68.5t76.5 -28.5q45 0 72.5 22t27.5 66zM202 527q0 -24 9 -42t24.5 -31.5t35 -25t40.5 -21.5q60 51 60 112q0 42 -24.5 63.5
+t-59.5 21.5q-44 0 -64.5 -23t-20.5 -54z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M45 481q0 51 15.5 94t45 73.5t72 48t97.5 17.5q113 0 177.5 -67.5t64.5 -196.5q0 -116 -29.5 -200.5t-79 -141t-114.5 -86.5t-137 -36l-28 102q55 7 98 27t74 49.5t50.5 67t27.5 80.5q-24 -26 -51.5 -36t-73.5 -10q-38 0 -75.5 13t-67 39.5t-48 67t-18.5 95.5zM171 488
+q0 -57 32 -86t80 -29q41 0 67 13t40 32q3 21 3 40q0 28 -7 55t-21.5 48t-37 33.5t-53.5 12.5q-49 0 -76 -31.5t-27 -87.5z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="269"
+d="M93 428q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56zM93 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="290"
+d="M82 64q0 34 22.5 54t55.5 20q42 0 66 -28t24 -74q0 -45 -14 -77.5t-34.5 -54t-44 -34t-42.5 -18.5l-38 54q27 11 47 36t22 53q-23 -3 -43.5 14t-20.5 55zM82 428q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="527"
+d="M40 285v70l386 231l57 -90l-224 -139l-91 -35l90 -31l230 -137l-57 -90z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="527"
+d="M43 299h442v-112h-442v112zM43 490h442v-112h-442v112z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="527"
+d="M487 365v-70l-386 -231l-57 91l224 138l91 36l-90 30l-230 138l57 89z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="454"
+d="M136 208q-5 52 5 88.5t27.5 63t40 46t42 37.5t32.5 37.5t13 46.5q0 35 -19.5 56t-69.5 21q-16 0 -34 -3.5t-36 -10t-34.5 -15t-29.5 -17.5l-50 96q38 26 87.5 43t119.5 17q94 0 147 -45.5t53 -122.5q0 -51 -13.5 -84.5t-33.5 -57t-44 -41.5t-44 -38.5t-34 -47.5t-14 -69
+h-111zM116 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="1059"
+d="M679 484h70l-48 -271q-8 -47 -0.5 -68t33.5 -21t51 12t45 37t32.5 63t12.5 90q0 75 -25 128t-68.5 87.5t-102.5 50.5t-127 16q-78 0 -145 -28t-116.5 -77t-77.5 -116.5t-28 -146.5q0 -78 23.5 -140t68.5 -105.5t111.5 -67t152.5 -23.5q29 0 66 7t67 21l31 -96
+q-41 -20 -83.5 -28t-97.5 -8q-97 0 -179.5 28t-143 83t-94.5 136.5t-34 188.5q0 109 39 197t105 150t153 95.5t184 33.5q92 0 171 -26.5t137 -76t91 -121t33 -162.5q0 -64 -22.5 -120t-62 -97t-92 -65t-112.5 -24q-25 0 -46.5 5.5t-36 18.5t-21.5 34t-4 52h-4
+q-15 -21 -32.5 -41t-38.5 -35.5t-46 -24.5t-55 -9q-24 0 -46 10.5t-38 29.5t-25.5 46t-9.5 60q0 62 20 120.5t54.5 103.5t80 72.5t96.5 27.5q35 0 59 -10.5t44 -27.5zM616 363q-13 11 -27 17t-35 6q-30 0 -55.5 -17t-44 -44t-28.5 -60.5t-10 -65.5q0 -33 13.5 -54t46.5 -21
+q14 0 30 8.5t31 22.5t29 32t25 38z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="605"
+d="M405 155h-215l-53 -155h-137l252 705h101l252 -705h-144zM225 265h150l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="591"
+d="M531 537q0 -26 -6.5 -52t-21.5 -47.5t-39 -38t-58 -24.5v-6q30 -5 57 -17t47 -33t31.5 -51t11.5 -71q0 -54 -23 -93.5t-61.5 -64.5t-87.5 -37t-101 -12h-43.5t-57 1.5t-62 4.5t-57.5 9v690q19 3 43.5 6t52.5 5t57.5 3t58.5 1q49 0 95.5 -7.5t83 -26.5t58.5 -53t22 -86z
+M281 103q25 0 48.5 6t41.5 18.5t29 31.5t11 45q0 33 -13 52t-34 29.5t-47 13.5t-52 3h-73v-193q5 -2 16 -3t23.5 -1.5t26 -1t23.5 -0.5zM236 406q14 0 32.5 1t30.5 3q38 12 65.5 36t27.5 63q0 26 -10 43t-26.5 27t-37.5 14t-44 4q-26 0 -48 -1t-34 -3v-187h44z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="559"
+d="M534 29q-32 -23 -81.5 -33t-101.5 -10q-63 0 -119.5 19.5t-99.5 63t-68.5 113t-25.5 168.5q0 103 28.5 172.5t74 112t101.5 61t112 18.5q60 0 101.5 -8t68.5 -19l-27 -116q-23 11 -54.5 16t-76.5 5q-83 0 -133.5 -59t-50.5 -183q0 -54 12 -98.5t36.5 -76t61 -49
+t84.5 -17.5q45 0 76 9t54 23z" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="647"
+d="M60 700q21 3 47.5 5t54.5 3t54.5 1.5t47.5 0.5q93 0 159 -26t107 -73t60 -112t19 -143q0 -71 -18 -137t-60 -117t-110.5 -82t-169.5 -31q-16 0 -42.5 1t-55 2.5t-54.5 3t-39 3.5v701zM275 588q-22 0 -44.5 -1t-33.5 -3v-469q4 -1 13.5 -1.5t20.5 -1t21 -1t15 -0.5
+q58 0 96.5 20.5t61 54.5t31.5 78.5t9 91.5q0 41 -8 82.5t-29.5 74.5t-58.5 54t-94 21z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="522"
+d="M60 700h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420v700z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="508"
+d="M60 700h415v-122h-278v-173h256v-122h-256v-283h-137v700z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="609"
+d="M307 365h261v-312q-42 -35 -100.5 -51t-115.5 -16q-67 0 -124.5 21t-99.5 65.5t-66 113.5t-24 164q0 99 28.5 168.5t75 113t104.5 63t118 19.5t105.5 -9t72.5 -19l-28 -115q-25 10 -56 15.5t-79 5.5q-43 0 -79 -13t-62.5 -42.5t-41 -75.5t-14.5 -112q0 -63 14 -108.5
+t39 -75t58.5 -43.5t71.5 -14q26 0 51 6.5t42 19.5v132l-151 16v83z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="651"
+d="M453 293h-256v-293h-137v700h137v-285h256v285h137v-700h-137v293z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="285"
+d="M74 700h137v-700h-137v700z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="334"
+d="M131 700h137v-512q0 -40 -9 -76t-29.5 -63.5t-52.5 -44t-78 -16.5q-29 0 -63 6t-59 17l30 112q26 -13 59 -13q42 0 53.5 31t11.5 82v477z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="620"
+d="M233 299h-36v-299h-137v700h137v-310l32 14l193 296h156l-204 -294l-54 -38l56 -39l233 -329h-169z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="514"
+d="M503 0h-443v700h137v-578h306v-122z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="800"
+d="M603 363l15 139h-6l-43 -112l-149 -261h-44l-157 262l-44 111h-5l20 -138v-364h-130v700h125l187 -320l33 -80h4l30 82l177 318h124v-700h-137v363z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="657"
+d="M234 365l-55 110h-5l16 -110v-365h-130v705h100l265 -373l53 -107h5l-16 107v368h130v-705h-100z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="670"
+d="M38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5
+q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="572"
+d="M60 693q42 8 92.5 12.5t100.5 4.5q52 0 104.5 -8.5t94.5 -34t68.5 -71t26.5 -118.5q0 -66 -23 -111.5t-61 -74.5t-86.5 -42t-100.5 -13h-16t-23 0.5t-23.5 1.5t-16.5 2v-241h-137v693zM264 592q-20 0 -38 -1.5t-29 -3.5v-227q4 -1 12 -2t17 -1.5t17.5 -0.5h12.5
+q27 0 53.5 5t47.5 18.5t33.5 37.5t12.5 63q0 33 -12 54.5t-31.5 34.5t-44.5 18t-51 5z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="670"
+d="M702 -202q-48 -13 -97 -13q-51 0 -99 10.5t-93 22.5t-87 22.5t-79 10.5q-24 0 -46 -6v118q28 6 58 6q42 0 83.5 -10t84.5 -21.5t88 -21.5t95 -10q22 0 45 2.5t47 8.5v-119zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5
+t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="602"
+d="M60 693q23 4 49.5 7.5t53 5.5t51.5 3t46 1q49 0 96.5 -9t85 -31t60 -60.5t22.5 -96.5q0 -86 -40 -140t-107 -75l49 -31l160 -267h-158l-159 274l-72 13v-287h-137v693zM270 588q-21 0 -41.5 -1t-31.5 -4v-203h58q57 0 91 26t34 86q0 45 -28 70.5t-82 25.5z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="530"
+d="M362 188q0 32 -23.5 52t-59 36.5t-77 34t-77 43t-59 63.5t-23.5 97q0 51 17 88.5t48.5 62.5t74.5 37t96 12q61 0 115 -10.5t89 -30.5l-43 -115q-22 14 -66 25.5t-95 11.5q-48 0 -73.5 -19t-25.5 -51q0 -30 23.5 -50t59 -37t77 -35t77 -43.5t59 -63t23.5 -93.5
+t-18.5 -96.5t-52 -67.5t-81 -40t-104.5 -13q-75 0 -132 14t-84 28l44 117q11 -6 28.5 -13t39.5 -13t46.5 -10t50.5 -4q61 0 93.5 20.5t32.5 62.5z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="568"
+d="M557 578h-204v-578h-137v578h-205v122h546v-122z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="627"
+d="M440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243v469h137v-442q0 -41 7.5 -69.5t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="602"
+d="M290 289l18 -119h5l20 120l134 410h144l-260 -705h-98l-262 705h159z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="862"
+d="M242 309l13 -124h4l14 126l122 389h90l120 -391l14 -124h4l15 126l85 389h139l-193 -705h-92l-125 389l-17 107h-5l-17 -108l-124 -388h-97l-192 705h149z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="633"
+d="M225 356l-195 344h165l108 -202l24 -71l23 71l113 202h149l-202 -337l212 -363h-163l-123 216l-27 74l-26 -74l-124 -216h-149z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="592"
+d="M228 260l-230 440h163l128 -263l14 -74h5l15 76l124 261h147l-229 -439v-261h-137v260z" />
+ <glyph glyph-name="Z" unicode="Z" horiz-adv-x="539"
+d="M27 122l296 414l52 42h-348v122h485v-122l-298 -418l-51 -38h349v-122h-485v122z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="324"
+d="M60 700h235v-110h-111v-710h111v-110h-235v930z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="424"
+d="M438 -95l-99 -45l-363 808l102 43z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="324"
+d="M264 -230h-235v110h111v710h-111v110h235v-930z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="500"
+d="M216 705h69l185 -292h-131l-71 122l-21 70l-25 -71l-78 -121h-124z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="444"
+d="M0 -117h444v-107h-444v107z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="316"
+d="M256 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="536"
+d="M57 700h130v-240h4q21 24 54 38t73 14q90 0 137.5 -61.5t47.5 -187.5q0 -135 -66.5 -205t-182.5 -70q-64 0 -117 10.5t-80 23.5v678zM280 402q-36 0 -58.5 -18.5t-34.5 -53.5v-218q16 -8 34.5 -11t39.5 -3q53 0 80.5 38.5t27.5 122.5q0 143 -89 143z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="433"
+d="M411 31q-30 -22 -72.5 -33.5t-87.5 -11.5q-60 0 -101.5 19t-67.5 53.5t-37.5 83.5t-11.5 108q0 127 57 195.5t166 68.5q55 0 88.5 -9t60.5 -23l-31 -106q-23 11 -45.5 17t-51.5 6q-54 0 -82 -35.5t-28 -113.5q0 -32 7 -59t21 -47t36.5 -31.5t52.5 -11.5q33 0 56 8.5
+t41 20.5z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="539"
+d="M482 176q0 -42 1 -84t9 -93h-93l-18 65h-4q-20 -35 -57.5 -56.5t-88.5 -21.5q-94 0 -146 62t-52 194q0 128 58 199t170 71q31 0 51 -3.5t40 -11.5v203h130v-524zM261 96q38 0 60 18.5t31 53.5v212q-14 11 -31 16.5t-44 5.5q-55 0 -82.5 -37t-27.5 -127q0 -64 22.5 -103
+t71.5 -39z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="508"
+d="M457 43q-30 -24 -81.5 -40.5t-109.5 -16.5q-121 0 -177 70.5t-56 193.5q0 132 63 198t177 66q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-300q3 -63 32.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5zM271 410q-51 0 -75.5 -30.5t-29.5 -81.5h186
+q4 54 -16.5 83t-64.5 29z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="321"
+d="M11 500h69v28q0 95 40 137.5t116 42.5q80 0 133 -19l-25 -104q-23 8 -40.5 10.5t-36.5 2.5q-20 0 -31.5 -6t-17 -18.5t-7 -31t-1.5 -42.5h110v-110h-110v-390h-130v390h-69v110z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="536"
+d="M480 0q0 -109 -59 -160.5t-165 -51.5q-72 0 -113.5 10t-62.5 21l27 103q23 -9 53.5 -18t75.5 -9q68 0 92.5 29.5t24.5 82.5v32h-4q-35 -47 -124 -47q-97 0 -144.5 60t-47.5 188q0 134 64 203t186 69q64 0 114.5 -9t82.5 -21v-482zM260 96q38 0 58.5 17t31.5 51v225
+q-31 13 -77 13q-50 0 -78 -37.5t-28 -119.5q0 -73 24 -111t69 -38z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="545"
+d="M363 0v284q0 61 -17 88t-62 27q-33 0 -60.5 -22.5t-36.5 -57.5v-319h-130v700h130v-256h4q24 32 59 51t89 19q38 0 67 -10t48.5 -33t29 -62.5t9.5 -97.5v-311h-130z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="269"
+d="M49 641q0 29 21.5 49.5t59.5 20.5t61.5 -20.5t23.5 -49.5t-23.5 -48.5t-61.5 -19.5t-59.5 19.5t-21.5 48.5zM68 500h130v-500h-130v500z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="268"
+d="M51 641q0 29 21.5 49.5t59.5 20.5t61.5 -20.5t23.5 -49.5t-23.5 -48.5t-61.5 -19.5t-59.5 19.5t-21.5 48.5zM69 500h130v-521q0 -91 -36 -139t-115 -48q-30 0 -64 7v109q4 0 7 -0.5t6 -0.5q45 0 58.5 29t13.5 80v484z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="491"
+d="M222 207h-35v-207h-130v700h130v-413l30 14l114 199h143l-120 -190l-51 -38l55 -39l135 -233h-149z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="294"
+d="M191 168q0 -35 9 -51t29 -16q12 0 23.5 2t28.5 9l14 -102q-16 -8 -49 -16t-68 -8q-57 0 -87 26.5t-30 87.5v600h130v-532z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="805"
+d="M341 0v272q0 69 -13 98t-54 29q-34 0 -55 -18.5t-32 -47.5v-333h-130v500h101l15 -66h4q23 32 58.5 56t91.5 24q48 0 78.5 -19.5t47.5 -65.5q23 39 59 62t87 23q42 0 71.5 -10t48 -34.5t27.5 -65.5t9 -104v-300h-130v281q0 59 -12.5 88.5t-55.5 29.5q-35 0 -55.5 -19
+t-30.5 -52v-328h-130z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="545"
+d="M363 0v284q0 61 -17.5 88t-59.5 27q-37 0 -62.5 -21.5t-36.5 -53.5v-324h-130v500h103l15 -66h4q23 32 61 56t98 24q37 0 66 -10t49 -33t30 -62.5t10 -97.5v-311h-130z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="540"
+d="M57 500h95l15 -60h4q26 38 61.5 56t86.5 18q94 0 141 -59.5t47 -191.5q0 -64 -15 -115.5t-44.5 -87.5t-72 -55t-97.5 -19q-31 0 -51 4.5t-40 14.5v-205h-130v700zM280 404q-38 0 -59.5 -19t-33.5 -57v-208q14 -11 30.5 -17.5t43.5 -6.5q56 0 84 39.5t28 130.5
+q0 66 -22 102t-71 36z" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="536"
+d="M480 -200h-130v243h-4q-17 -26 -46 -41.5t-75 -15.5q-93 0 -142.5 63t-49.5 191q0 134 67.5 203t193.5 69q27 0 54 -2.5t51.5 -7t45.5 -10t35 -10.5v-682zM260 96q38 0 58.5 17t31.5 51v225q-15 8 -34 10.5t-43 2.5q-53 0 -79.5 -40t-26.5 -117q0 -73 24 -111t69 -38z
+" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="351"
+d="M333 378q-31 11 -56 11q-35 0 -58.5 -18.5t-31.5 -47.5v-323h-130v500h101l15 -66h4q17 37 46 57t68 20q26 0 59 -11z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="422"
+d="M264 138q0 20 -17 32t-42 22t-55 20.5t-55 29t-42 47t-17 73.5q0 74 44 113t127 39q57 0 103 -12t72 -27l-29 -94q-23 9 -58 19t-71 10q-58 0 -58 -45q0 -18 17 -29t42 -20.5t55 -20.5t55 -28.5t42 -45.5t17 -72q0 -76 -48.5 -119.5t-145.5 -43.5q-53 0 -99.5 13.5
+t-75.5 31.5l36 97q23 -13 61 -25.5t78 -12.5q29 0 46.5 11t17.5 37z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="349"
+d="M5 500h69v94l130 37v-131h122v-110h-122v-192q0 -52 10.5 -74.5t39.5 -22.5q20 0 34.5 4t32.5 12l23 -100q-27 -13 -63 -22t-73 -9q-69 0 -101.5 35.5t-32.5 116.5v252h-69v110z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="477"
+d="M230 238l17 -77h5l14 79l85 260h140l-209 -505h-79l-217 505h151z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="721"
+d="M419 500l91 -256l18 -83h4l14 84l64 255h119l-154 -505h-96l-101 280l-13 63h-5l-12 -64l-96 -279h-99l-161 505h141l73 -251l12 -89h5l17 90l83 250h96z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="525"
+d="M170 256l-150 244h155l65 -107l28 -70l30 70l68 107h141l-151 -240l161 -260h-151l-77 120l-30 74l-32 -74l-77 -120h-142z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="478"
+d="M239 219l18 -78h6l13 79l76 280h134l-152 -451q-19 -56 -36.5 -102.5t-38.5 -80.5t-46.5 -52.5t-60.5 -18.5q-52 0 -83 17l24 104q15 -6 30 -6q23 0 44.5 19.5t32.5 70.5l-209 500h156z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="458"
+d="M31 110l197 237l51 43h-248v110h392v-110l-195 -241l-50 -39h245v-110h-392v110z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="371"
+d="M123 96q0 51 -21 70t-59 19v100q38 0 59 20.5t21 64.5v209q0 54 25.5 88t81.5 34h120v-110h-50q-27 0 -39.5 -14t-12.5 -46v-195q0 -44 -21 -66.5t-49 -27.5v-10q27 -4 48.5 -30t21.5 -68v-194q0 -32 12 -46t41 -14h49v-110h-120q-52 0 -79.5 31.5t-27.5 89.5v205z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="227"
+d="M60 700h107v-830h-107v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="371"
+d="M261 375q0 -51 21 -70t59 -19v-100q-38 0 -59 -20.5t-21 -64.5v-209q0 -54 -26.5 -88t-82.5 -34h-117v110h50q27 0 39.5 13.5t12.5 46.5v195q0 44 21 66.5t49 27.5v10q-27 4 -48.5 30t-21.5 68v194q0 31 -12 45.5t-41 14.5h-49v110h119q53 0 80 -31.5t27 -89.5v-205z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="527"
+d="M28 378q47 38 84.5 52.5t69.5 14.5q29 0 54 -8.5t48 -18t45.5 -18t45.5 -8.5q18 0 37 6t40 23l47 -103q-36 -27 -66 -38t-56 -11q-28 0 -52 9t-46.5 20t-45.5 20t-49 9q-24 0 -51.5 -10.5t-60.5 -38.5z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="253"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="293"
+d="M191 -200h-134v329l26 162h82l26 -162v-329zM44 435q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M489 31q-17 -13 -42.5 -22.5t-54.5 -14.5v-94h-121v89q-51 7 -86.5 28.5t-58 55t-32.5 78.5t-10 99q0 112 48 178.5t139 81.5v90h121v-90q28 -4 50 -10.5t40 -15.5l-30 -106q-15 7 -32 11t-35 6v-291q23 3 41.5 10t32.5 15zM212 250q0 -51 19 -89.5t64 -52.5v286
+q-42 -11 -62.5 -45.5t-20.5 -98.5z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M51 394h68q-13 24 -22.5 54t-9.5 72q0 49 16.5 85.5t46 60.5t70.5 36t90 12q61 0 111 -11.5t86 -28.5l-42 -116q-20 11 -55 22.5t-84 11.5q-48 0 -75 -22.5t-27 -67.5q0 -34 12.5 -58.5t27.5 -49.5h141v-107h-98q3 -17 3 -34q0 -30 -10 -63t-31 -54l-43 -31v-5l67 15h230
+v-115h-472v115h2q31 1 54.5 11t39 26.5t23.5 38.5t8 46q0 27 -6 50h-121v107z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M81 622l78 -77l19 -37q20 15 47.5 22.5t57.5 7.5q29 0 57.5 -7.5t47.5 -21.5l20 36l78 77l77 -80l-77 -78l-37 -16q14 -21 20 -47.5t6 -55.5q0 -30 -6.5 -56.5t-19.5 -44.5l37 -16l77 -78l-77 -80l-78 77l-18 37q-19 -14 -48.5 -22t-58.5 -8q-30 0 -57.5 7.5t-47.5 21.5
+l-19 -36l-78 -77l-76 80l77 78l36 17q-12 21 -19 45.5t-7 54.5q0 29 7.5 54t20.5 48l-38 17l-77 78zM201 346q0 -38 23 -62t60 -24t59.5 24t22.5 62q0 36 -22.5 61t-59.5 25t-60 -25t-23 -61z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M85 337h90l-189 363h163l128 -263l14 -74h5l15 76l124 261h147l-190 -363h91v-80h-130v-58h130v-80h-130v-119h-137v119h-131v80h131v58h-131v80z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="227"
+d="M60 213h107v-343h-107v343zM167 357h-107v343h107v-343z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="530"
+d="M49 353q0 31 15 60.5t41 52.5l41 14q-26 16 -43 40.5t-17 65.5q0 56 43.5 92t131.5 36q59 0 110 -10t78 -23l-32 -105q-23 11 -61 19.5t-73 8.5q-37 0 -52 -11t-15 -28q0 -18 19.5 -28t49 -18t64 -18t64 -28t49 -48t19.5 -78q0 -31 -14.5 -60t-40.5 -52l-45 -14
+q27 -16 45 -41t18 -66q0 -63 -49 -95.5t-130 -32.5q-68 0 -113.5 13.5t-74.5 29.5l34 100q23 -11 56 -22t77 -11q37 0 53.5 9.5t16.5 30.5q0 19 -19.5 29.5t-49 19t-64 18.5t-64 27.5t-49 46.5t-19.5 76zM351 345q0 18 -8.5 30t-24.5 21.5t-39 17.5t-52 17
+q-20 -12 -34 -31.5t-14 -44.5q0 -35 32 -52t88 -33q22 12 37 32t15 43z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="479"
+d="M60 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19t-51.5 19t-19.5 49zM279 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="833"
+d="M55 290q0 83 28 149.5t76.5 113.5t114.5 72.5t142 25.5t141.5 -25.5t114.5 -72.5t77 -113.5t28 -149.5t-28 -149.5t-77 -113.5t-114.5 -72.5t-141.5 -25.5q-83 0 -150 25.5t-114 72.5t-72 113.5t-25 149.5zM153 290q0 -62 19.5 -112t55 -84.5t83.5 -53t105 -18.5
+t105.5 18.5t84 53t55 84.5t19.5 112t-19.5 112t-55 84.5t-84 53t-105.5 18.5t-105 -18.5t-83.5 -53t-55 -84.5t-19.5 -112zM541 131q-22 -14 -55.5 -22.5t-71.5 -8.5q-81 0 -123.5 51t-42.5 139q0 91 45.5 140.5t120.5 49.5q37 0 65.5 -8.5t54.5 -23.5l-32 -87
+q-18 9 -32.5 12t-28.5 3q-29 0 -46 -19t-17 -67q0 -86 70 -86q19 0 34 3.5t30 11.5z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="420"
+d="M61 674q26 14 73.5 24t106.5 10q76 0 104 -27.5t28 -84.5q0 -60 -3 -116t8 -100h-101l-13 46h-4q-13 -17 -37 -33.5t-67 -16.5q-52 0 -83 27.5t-31 71.5q0 33 17.5 55t47 35t69 17.5t83.5 2.5q2 26 -7 37.5t-44 11.5q-40 0 -72.5 -8t-52.5 -16zM194 454q32 0 45 11.5
+t20 23.5v35q-43 5 -72.5 -2t-29.5 -34q0 -16 10.5 -25t26.5 -9z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="488"
+d="M223 261l154 216l71 -56l-81 -122l-46 -39l46 -35l87 -121l-71 -56zM29 259l160 230l79 -62l-87 -126l-48 -41l48 -36l93 -124l-79 -62z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="527"
+d="M45 412h442v-226h-120v114h-322v112z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="360"
+d="M54 345h251v-115h-251v115z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="690"
+d="M62 451q0 67 22.5 119.5t61.5 88.5t90.5 55t108.5 19q59 0 110.5 -19t89.5 -55t60 -88.5t22 -119.5q0 -68 -22.5 -120.5t-61 -88.5t-90 -54.5t-108.5 -18.5q-59 0 -110.5 18.5t-90 54.5t-60.5 88.5t-22 120.5zM156 451q0 -48 15.5 -84.5t41.5 -60.5t60 -36t72 -12
+q40 0 74.5 11.5t59.5 35.5t39.5 60.5t14.5 85.5q0 48 -15 84t-40.5 60t-60 36t-72.5 12q-42 0 -77 -13t-60 -38t-38.5 -60.5t-13.5 -80.5zM242 581q16 5 45 7.5t55 2.5q42 0 72 -17.5t30 -60.5q0 -32 -20.5 -49t-50.5 -19l28 -14l65 -109h-61l-63 104l-48 15v-119h-52v259z
+M331 546q-11 0 -21 -0.5t-16 -3.5v-71h34q29 0 45 9t16 31q0 35 -58 35z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="443"
+d="M60 658h323v-92h-323v92z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="437"
+d="M60 548q0 37 13 67.5t35.5 52.5t52 34t63.5 12t64.5 -11t53.5 -32.5t36 -52.5t13 -70t-13 -69.5t-36 -51.5t-53.5 -32t-64.5 -11t-63.5 11t-52 32t-35.5 51.5t-13 69.5zM160 548q0 -32 19 -50.5t46 -18.5t47 18.5t20 50.5t-20 51.5t-47 19.5t-46 -19.5t-19 -51.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="527"
+d="M43 518h162v164h117v-164h163v-112h-163v-107h-117v107h-162v112zM43 253h442v-112h-442v112z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="412"
+d="M348 680q0 -59 -30 -101t-72 -80l-47 -25v-4l59 11h106v-101h-313v71q26 18 58 42t59.5 51.5t46 56.5t18.5 55q0 49 -56 49q-27 0 -51 -8.5t-42 -19.5l-34 90q35 21 74.5 30.5t75.5 9.5q71 0 109.5 -32.5t38.5 -94.5z" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="412"
+d="M169 468q44 0 62.5 14t19.5 37q-1 23 -20 36t-70 13h-42v38l73 80l43 25l-58 -6h-115v95h283v-62l-87 -92l-34 -18v-5l30 3q52 -2 81.5 -31.5t30.5 -83.5q-1 -36 -15.5 -62t-39 -43t-57.5 -25t-68 -8q-39 0 -72.5 6.5t-57.5 17.5l23 90q41 -19 90 -19z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="305"
+d="M113 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="mu" unicode="µ" horiz-adv-x="569"
+d="M182 500v-273q0 -64 20.5 -96.5t71.5 -32.5q46 0 74 23t40 64v315h130v-337q0 -41 2.5 -82.5t12.5 -80.5h-96l-32 74h-4q-17 -35 -50 -60.5t-86 -25.5q-39 0 -60 14t-39 36h-5l21 -105v-133h-130v700h130z" />
+ <glyph glyph-name="mu" unicode="μ" horiz-adv-x="569"
+d="M182 500v-273q0 -64 20.5 -96.5t71.5 -32.5q46 0 74 23t40 64v315h130v-337q0 -41 2.5 -82.5t12.5 -80.5h-96l-32 74h-4q-17 -35 -50 -60.5t-86 -25.5q-39 0 -60 14t-39 36h-5l21 -105v-133h-130v700h130z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="529"
+d="M362 700h107v-830h-107v830zM178 294q-33 0 -61 16.5t-48.5 45t-31.5 65t-11 77.5q0 40 13 76.5t37 64.5t58 44.5t76 16.5h74v-830h-106v424z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="253"
+d="M45 316q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="332"
+d="M208 0l-24 -43q41 -4 64.5 -21.5t23.5 -53.5q0 -23 -11.5 -40t-31.5 -28.5t-47 -17.5t-58 -6t-64 6l9 48q7 -1 13 -1h11q38 0 49 9t11 21q0 28 -86 32l57 95h84z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="412"
+d="M72 480h97v164l10 46l-30 -32l-59 -39l-49 77l158 111h85v-327h88v-100h-300v100z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="419"
+d="M34 542q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM150 542q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="488"
+d="M264 266l-153 -216l-72 56l82 122l45 39l-45 35l-87 121l70 56zM459 268l-160 -230l-79 62l87 126l48 41l-48 36l-93 124l79 62z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="880"
+d="M165 544l11 46l-31 -32l-59 -39l-49 77l158 111h85v-427h-115v264zM833 78h-76v-78h-101v78h-207v67l218 283h90v-261h76v-89zM656 253l6 53h-5l-22 -49l-48 -66l-36 -32l52 8h53v86zM609 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="903"
+d="M165 544l11 46l-31 -32l-59 -39l-49 77l158 111h85v-427h-115v264zM841 300q0 -59 -30 -101t-72 -80l-47 -25v-4l59 11h106v-101h-313v71q26 18 58 42t59.5 51.5t46 56.5t18.5 55q0 49 -56 49q-27 0 -51 -8.5t-42 -19.5l-34 90q35 21 74.5 30.5t75.5 9.5
+q71 0 109.5 -32.5t38.5 -94.5zM609 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="905"
+d="M858 78h-76v-78h-101v78h-207v67l218 283h90v-261h76v-89zM681 253l6 53h-5l-22 -49l-48 -66l-36 -32l52 8h53v86zM161 368q44 0 62.5 14t19.5 37q-1 23 -20 36t-70 13h-42v38l73 80l43 25l-58 -6h-115v95h283v-62l-87 -92l-34 -18v-5l30 3q52 -2 81.5 -31.5t30.5 -83.5
+q-1 -36 -15.5 -62t-39 -43t-57.5 -25t-68 -8q-39 0 -72.5 6.5t-57.5 17.5l23 90q41 -19 90 -19zM634 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="454"
+d="M317 293q5 -52 -4.5 -88.5t-27.5 -63t-40 -45.5t-41.5 -37t-33 -37.5t-13.5 -46.5q0 -35 20 -56.5t70 -21.5q16 0 34 3.5t36 10t34.5 15t29.5 18.5l49 -96q-38 -26 -87 -43t-119 -17q-94 0 -147.5 45t-53.5 123q0 51 13.5 84t34 56.5t44 41.5t44 38.5t34 47.5t13.5 69
+h111zM178 435q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="605"
+d="M399 752h-105l-158 88v30h159zM405 155h-215l-53 -155h-137l252 705h101l252 -705h-144zM225 265h150l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="605"
+d="M309 870h159v-30l-160 -88h-103zM405 155h-215l-53 -155h-137l252 705h101l252 -705h-144zM225 265h150l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="605"
+d="M257 870h96l127 -93v-39h-99l-57 41l-20 34l-21 -33l-62 -42h-97v40zM405 155h-215l-53 -155h-137l252 705h101l252 -705h-144zM225 265h150l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="605"
+d="M113 800q32 35 61.5 48t58.5 13q22 0 44 -5.5t42.5 -12t40.5 -12t38 -5.5q16 0 31 5t29 19l25 -67q-28 -26 -54.5 -36.5t-51.5 -10.5q-23 0 -44 5.5t-41.5 12.5t-40.5 12.5t-39 5.5t-37.5 -7.5t-37.5 -27.5zM405 155h-215l-53 -155h-137l252 705h101l252 -705h-144z
+M225 265h150l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="605"
+d="M124 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM338 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM405 155h-215l-53 -155h-137l252 705h101l252 -705h-144zM225 265h150
+l-52 156l-21 110h-5l-21 -111z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="605"
+d="M175 771q0 18 6 34.5t20.5 29t39 19.5t62.5 7q70 0 99 -24t29 -66q0 -29 -16 -50.5t-57 -31.5l247 -689h-144l-56 155h-215l-53 -155h-137l246 689q-39 9 -55 31t-16 51zM225 265h150l-52 156l-21 110h-5l-21 -111zM259 771q0 -31 44 -31q25 0 35 8t10 23q0 17 -10.5 25
+t-34.5 8q-44 0 -44 -33z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="862"
+d="M394 532l-36 -103l-84 -148h126v251h-6zM400 170h-186l-99 -170h-144l424 700h419v-122h-277v-163h252v-122h-252v-171h282v-122h-419v170z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="559"
+d="M534 29q-26 -19 -65.5 -29t-83.5 -13l-16 -30q41 -4 64.5 -21.5t23.5 -53.5q0 -23 -11.5 -40t-31.5 -28.5t-47 -17.5t-58 -6t-64 6l9 48q7 -1 13 -1h11q38 0 49 9t11 21q0 28 -86 32l50 84q-55 7 -103 30.5t-84 67.5t-56.5 109t-20.5 154q0 103 28.5 172.5t74 112
+t101.5 61t112 18.5q60 0 101.5 -8t68.5 -19l-27 -116q-23 11 -54.5 16t-76.5 5q-83 0 -133.5 -59t-50.5 -183q0 -54 12 -98.5t36.5 -76t61 -49t84.5 -17.5q45 0 76 9t54 23z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="522"
+d="M352 752h-105l-158 88v30h159zM60 700h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420v700z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="522"
+d="M293 870h159v-30l-160 -88h-103zM60 700h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420v700z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="522"
+d="M219 870h96l127 -93v-39h-99l-57 41l-20 34l-21 -33l-62 -42h-97v40zM60 700h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420v700z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="522"
+d="M84 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM298 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM60 700h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420v700z" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="285"
+d="M241 752h-105l-158 88v30h159zM74 700h137v-700h-137v700z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="285"
+d="M153 870h159v-30l-160 -88h-103zM74 700h137v-700h-137v700z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="285"
+d="M97 870h96l127 -93v-39h-99l-57 41l-20 34l-21 -33l-62 -42h-97v40zM74 700h137v-700h-137v700z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="285"
+d="M-38 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM176 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM74 700h137v-700h-137v700z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="669"
+d="M-6 401h88v299q21 3 47.5 5t54.5 3t54.5 1.5t47.5 0.5q93 0 159 -26t107 -73t60 -112t19 -143q0 -71 -18 -137t-60 -117t-110.5 -82t-169.5 -31q-16 0 -42.5 1t-55 2.5t-54.5 3t-39 3.5v322h-88v80zM297 588q-22 0 -44.5 -1t-33.5 -3v-183h140v-80h-140v-207
+q4 -1 13.5 -1.5t20.5 -1t21 -0.5h15q58 0 96.5 20.5t61 54.5t31.5 78.5t9 91.5q0 41 -8 82.5t-29.5 74.5t-58.5 54t-94 21z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="657"
+d="M138 800q32 35 61.5 48t58.5 13q22 0 44 -5.5t42.5 -12t40.5 -12t38 -5.5q16 0 31 5t29 19l25 -67q-28 -26 -54.5 -36.5t-51.5 -10.5q-23 0 -44 5.5t-41.5 12.5t-40.5 12.5t-39 5.5t-37.5 -7.5t-37.5 -27.5zM234 365l-55 110h-5l16 -110v-365h-130v705h100l265 -373
+l53 -107h5l-16 107v368h130v-705h-100z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="670"
+d="M412 752h-105l-158 88v30h159zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185
+q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="670"
+d="M368 870h159v-30l-160 -88h-103zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185
+q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="670"
+d="M287 870h96l127 -93v-39h-99l-57 41l-20 34l-21 -33l-62 -42h-97v40zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50
+t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="670"
+d="M144 800q32 35 61.5 48t58.5 13q22 0 44 -5.5t42.5 -12t40.5 -12t38 -5.5q16 0 31 5t29 19l25 -67q-28 -26 -54.5 -36.5t-51.5 -10.5q-23 0 -44 5.5t-41.5 12.5t-40.5 12.5t-39 5.5t-37.5 -7.5t-37.5 -27.5zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115
+t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="670"
+d="M150 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM364 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149
+q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="527"
+d="M134 547l131 -130l130 130l79 -81l-130 -127l130 -129l-79 -82l-130 131l-132 -132l-79 81l131 131l-129 127z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="670"
+d="M111 86q-37 48 -55 114.5t-18 149.5q0 175 77 269.5t220 94.5q45 0 83 -10t69 -28l25 39l85 -50l-35 -56q35 -48 52.5 -113.5t17.5 -145.5q0 -175 -77.5 -269.5t-219.5 -94.5q-44 0 -80 8.5t-67 24.5l-21 -33l-86 53zM182 350q0 -36 4 -68t12 -59l219 342q-35 27 -82 27
+q-73 0 -113 -58.5t-40 -183.5zM488 350q0 33 -3 63.5t-11 56.5l-215 -340q33 -22 76 -22q73 0 113 57t40 185z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="627"
+d="M395 752h-105l-158 88v30h159zM440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243v469h137v-442q0 -41 7.5 -69.5t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="627"
+d="M365 870h159v-30l-160 -88h-103zM440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243v469h137v-442q0 -41 7.5 -69.5t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="627"
+d="M273 870h96l127 -93v-39h-99l-57 41l-20 34l-21 -33l-62 -42h-97v40zM440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243v469h137v-442q0 -41 7.5 -69.5t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="627"
+d="M133 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM347 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243
+v469h137v-442q0 -41 7.5 -69.5t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="592"
+d="M326 870h159v-30l-160 -88h-103zM228 260l-230 440h163l128 -263l14 -74h5l15 76l124 261h147l-229 -439v-261h-137v260z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="572"
+d="M60 700h137v-72q14 1 28 1.5t28 0.5q52 0 104.5 -8.5t94.5 -34t68.5 -71t26.5 -118.5q0 -66 -23 -111.5t-61 -74.5t-86.5 -42t-100.5 -13h-16t-23 0.5t-23.5 1.5t-16.5 2v-161h-137v700zM264 512q-20 0 -38 -1.5t-29 -3.5v-227q4 -1 12 -2t17 -1.5t17.5 -0.5h12.5
+q27 0 53.5 5t47.5 18.5t33.5 37.5t12.5 63q0 33 -12 54.5t-31.5 34.5t-44.5 18t-51 5z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="630"
+d="M81 390h-69v110h69q0 58 16 97.5t44.5 64t68 35.5t86.5 11q51 0 91.5 -11.5t69 -32.5t44 -50.5t15.5 -65.5q0 -39 -17.5 -63t-39 -41t-39 -32t-17.5 -37q0 -18 14.5 -29t37 -20.5t48 -20t48 -27.5t37 -43.5t14.5 -67.5q0 -35 -11 -67.5t-34.5 -58t-59 -40.5t-83.5 -15
+q-47 0 -86.5 11.5t-67.5 28.5l35 97q23 -13 46 -23t62 -10q30 0 49.5 20.5t19.5 49.5q0 21 -14.5 34t-37 23.5t-48 20.5t-48 25.5t-37 38.5t-14.5 59q0 43 17.5 67t39 40.5t39 30.5t17.5 38q0 13 -7 24.5t-19 19.5t-27 13t-30 5q-48 0 -70.5 -23.5t-22.5 -87.5v-488h-129
+v390z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM311 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM237 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM216 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM86 658q31 37 57.5 51t50.5 14q20 0 38.5 -7t36.5 -15t35 -15t35 -7q14 0 28.5 6t30.5 21l20 -70q-29 -32 -53.5 -44t-47.5 -12
+q-20 0 -39 6.5t-37 14.5t-36 14.5t-36 6.5q-15 0 -31 -6.5t-33 -22.5z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="496"
+d="M54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5
+t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM75 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19t-51.5 19t-19.5 49zM294 651q0 32 18.5 51t50.5 19
+t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="496"
+d="M144 647q0 42 28.5 69t82.5 27q51 0 81 -24.5t30 -71.5q0 -39 -29.5 -66.5t-81.5 -27.5q-53 0 -82 25.5t-29 68.5zM216 647q0 -16 12 -24.5t27 -8.5q17 0 28 8t11 25t-11.5 25.5t-27.5 8.5q-15 0 -27 -8t-12 -26zM54 471q40 18 95 28.5t115 10.5q52 0 87 -12.5
+t55.5 -35.5t29 -55t8.5 -72q0 -44 -3 -88.5t-3.5 -87.5t2.5 -83.5t15 -76.5h-106l-21 69h-5q-20 -31 -55.5 -53.5t-91.5 -22.5q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t59 51t92 27t119.5 4.5q7 56 -8 80.5t-67 24.5q-39 0 -82.5 -8t-71.5 -21zM219 99
+q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="785"
+d="M219 99q39 0 62 17.5t34 37.5v65q-31 3 -59.5 1t-50.5 -9t-35 -20t-13 -33q0 -28 16.5 -43.5t45.5 -15.5zM350 76q-27 -34 -66.5 -59t-107.5 -25q-35 0 -63 10.5t-48 30t-31 46t-11 59.5q0 46 20.5 77.5t58.5 51t91.5 27t119.5 4.5q7 56 -7.5 80.5t-66.5 24.5
+q-39 0 -79.5 -10.5t-71.5 -25.5l-34 94q38 20 94 34.5t116 14.5q52 0 83 -13.5t51 -40.5q25 28 65 43t87 15q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -44.5t-7.5 -50.5h-301q4 -63 33.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5l43 -85q-30 -24 -81.5 -40.5
+t-109.5 -16.5q-64 0 -112.5 23.5t-75.5 66.5h-5zM548 410q-51 0 -75.5 -30.5t-29.5 -81.5h187q3 54 -17 83t-65 29z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="433"
+d="M411 31q-23 -17 -52.5 -27t-62.5 -15l-18 -32q41 -4 64.5 -21.5t23.5 -53.5q0 -23 -11.5 -40t-31.5 -28.5t-47 -17.5t-58 -6t-64 6l9 48q7 -1 13 -1h11q38 0 49 9t11 21q0 28 -86 32l50 84q-49 6 -83 27.5t-55 55t-30.5 79t-9.5 99.5q0 127 57 195.5t166 68.5
+q55 0 88.5 -9t60.5 -23l-31 -106q-23 11 -45.5 17t-51.5 6q-54 0 -82 -35.5t-28 -113.5q0 -32 7 -59t21 -47t36.5 -31.5t52.5 -11.5q33 0 56 8.5t41 20.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="508"
+d="M457 43q-30 -24 -81.5 -40.5t-109.5 -16.5q-121 0 -177 70.5t-56 193.5q0 132 63 198t177 66q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-300q3 -63 32.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5zM271 410q-51 0 -75.5 -30.5t-29.5 -81.5h186
+q4 54 -16.5 83t-64.5 29zM329 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="508"
+d="M457 43q-30 -24 -81.5 -40.5t-109.5 -16.5q-121 0 -177 70.5t-56 193.5q0 132 63 198t177 66q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-300q3 -63 32.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5zM271 410q-51 0 -75.5 -30.5t-29.5 -81.5h186
+q4 54 -16.5 83t-64.5 29zM274 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="508"
+d="M457 43q-30 -24 -81.5 -40.5t-109.5 -16.5q-121 0 -177 70.5t-56 193.5q0 132 63 198t177 66q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-300q3 -63 32.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5zM271 410q-51 0 -75.5 -30.5t-29.5 -81.5h186
+q4 54 -16.5 83t-64.5 29zM221 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="508"
+d="M457 43q-30 -24 -81.5 -40.5t-109.5 -16.5q-121 0 -177 70.5t-56 193.5q0 132 63 198t177 66q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-300q3 -63 32.5 -95t95.5 -32q41 0 73.5 12.5t49.5 25.5zM271 410q-51 0 -75.5 -30.5t-29.5 -81.5h186
+q4 54 -16.5 83t-64.5 29zM82 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19t-51.5 19t-19.5 49zM301 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="269"
+d="M70 500h130v-500h-130v500zM194 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="269"
+d="M70 500h130v-500h-130v500zM124 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="269"
+d="M70 500h130v-500h-130v500zM93 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="269"
+d="M70 500h130v-500h-130v500zM-45 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19t-51.5 19t-19.5 49zM174 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="eth" unicode="ð" horiz-adv-x="563"
+d="M163 243q0 -72 33 -109t88 -37q52 0 85 44.5t33 138.5q0 13 -1.5 34t-5.5 33q-16 23 -48 32.5t-62 9.5q-60 0 -91 -41.5t-31 -104.5zM197 584l44 30q-34 15 -69 21l52 80q25 -7 57 -20q23 -9 47 -22l53 36l42 -55l-33 -23q12 -9 23 -20q32 -30 57 -73.5t40.5 -101.5
+t15.5 -134q0 -81 -18.5 -140.5t-51.5 -98.5t-79 -58t-101 -19q-59 0 -104 19t-75 53.5t-45 82t-15 104.5q0 54 17 100t47.5 80.5t73.5 54t94 19.5q38 0 70.5 -10.5t52.5 -30.5q-12 36 -34 66q-22 29 -50 51l-68 -46z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="545"
+d="M363 0v284q0 61 -17.5 88t-59.5 27q-37 0 -62.5 -21.5t-36.5 -53.5v-324h-130v500h103l15 -66h4q23 32 61 56t98 24q37 0 66 -10t49 -33t30 -62.5t10 -97.5v-311h-130zM107 658q31 37 57.5 51t50.5 14q20 0 38.5 -7t36.5 -15t35 -15t35 -7q14 0 28.5 6t30.5 21l20 -70
+q-29 -32 -53.5 -44t-47.5 -12q-20 0 -39 6.5t-37 14.5t-36 14.5t-36 6.5q-15 0 -31 -6.5t-33 -22.5z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118zM331 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118zM275 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118zM231 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118zM104 658q31 37 57.5 51t50.5 14q20 0 38.5 -7t36.5 -15t35 -15t35 -7q14 0 28.5 6t30.5 21l20 -70q-29 -32 -53.5 -44t-47.5 -12q-20 0 -39 6.5t-37 14.5t-36 14.5t-36 6.5q-15 0 -31 -6.5t-33 -22.5z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="537"
+d="M33 250q0 127 62 195.5t174 68.5q60 0 104 -19t73 -53.5t43.5 -83.5t14.5 -108q0 -127 -61.5 -195.5t-173.5 -68.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108zM167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5
+q-48 0 -75 -36t-27 -118zM88 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19t-51.5 19t-19.5 49zM307 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="527"
+d="M43 394h442v-112h-442v112zM184 532q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56zM184 145q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="536"
+d="M33 250q0 127 61.5 195.5t173.5 68.5q32 0 59 -5.5t50 -16.5l24 34l80 -59l-27 -38q25 -34 37 -79.5t12 -99.5q0 -127 -61.5 -195.5t-173.5 -68.5q-34 0 -62.5 6.5t-52.5 17.5l-25 -34l-83 60l31 43q-22 33 -32.5 76.5t-10.5 94.5zM369 250q0 37 -8 71l-149 -207
+q22 -18 56 -18q51 0 76 37t25 117zM167 250q0 -35 6 -65l147 204q-21 15 -52 15q-48 0 -74.5 -36t-26.5 -118z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130zM318 566h-72l-124 124v30h136z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130zM261 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130zM232 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130zM88 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19
+t-51.5 19t-19.5 49zM307 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="478"
+d="M239 219l18 -78h6l13 79l76 280h134l-152 -451q-19 -56 -36.5 -102.5t-38.5 -80.5t-46.5 -52.5t-60.5 -18.5q-52 0 -83 17l24 104q15 -6 30 -6q23 0 44.5 19.5t32.5 70.5l-209 500h156zM254 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="540"
+d="M57 700h130v-243h4q21 26 50.5 41.5t77.5 15.5q94 0 141 -59.5t47 -191.5q0 -64 -15 -115.5t-44.5 -87.5t-72 -55t-97.5 -19q-31 0 -51 4.5t-40 14.5v-205h-130v900zM280 404q-36 0 -58.5 -19t-34.5 -57v-208q14 -11 30.5 -17.5t43.5 -6.5q56 0 84 39.5t28 130.5
+q0 66 -22 102t-71 36z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="478"
+d="M239 219l18 -78h6l13 79l76 280h134l-152 -451q-19 -56 -36.5 -102.5t-38.5 -80.5t-46.5 -52.5t-60.5 -18.5q-52 0 -83 17l24 104q15 -6 30 -6q23 0 44.5 19.5t32.5 70.5l-209 500h156zM66 651q0 32 19.5 51t51.5 19t50.5 -19t18.5 -51q0 -30 -18.5 -49t-50.5 -19
+t-51.5 19t-19.5 49zM285 651q0 32 18.5 51t50.5 19t51.5 -19t19.5 -51q0 -30 -19.5 -49t-51.5 -19t-50.5 19t-18.5 49z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="514"
+d="M181 -105q0 29 19.5 46t48.5 17q35 0 57 -23t22 -65q0 -33 -11 -58t-27 -42.5t-34 -28t-31 -14.5l-34 54q14 7 28 19.5t16 33.5q-20 -1 -37 14.5t-17 46.5zM503 0h-443v700h137v-578h306v-122z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="915"
+d="M453 567q-21 11 -51 18t-67 7q-73 0 -113 -58.5t-40 -183.5q0 -53 9 -97.5t28.5 -76.5t49.5 -50t73 -18q29 0 55.5 3.5t55.5 15.5v440zM453 0q-19 -7 -52.5 -10.5t-65.5 -3.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149q0 175 77 269.5t220 94.5q39 0 67.5 -4.5
+t50.5 -9.5h415v-122h-278v-163h253v-122h-253v-171h283v-122h-420z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="841"
+d="M167 250q0 -33 6 -61t18 -49t31.5 -32.5t46.5 -11.5q51 0 76 37t25 117q0 69 -23 111.5t-78 42.5q-48 0 -75 -36t-27 -118zM431 60q-25 -33 -64.5 -53.5t-97.5 -20.5q-60 0 -104 19t-73.5 53.5t-44 83.5t-14.5 108q0 127 62 195.5t174 68.5q66 0 106 -22.5t63 -49.5
+q23 29 63.5 50.5t104.5 21.5q38 0 74 -10t64 -33t45 -62t17 -97q0 -21 -2.5 -45t-7.5 -50h-301q3 -63 33 -95t96 -32q41 0 73.5 12.5t49.5 25.5l43 -85q-30 -24 -81.5 -40.5t-109.5 -16.5q-111 0 -168 74zM604 410q-51 0 -75.5 -30.5t-29.5 -81.5h186q0 4 0.5 8t0.5 8
+q0 46 -20.5 71t-61.5 25z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="530"
+d="M328 737h-94l-127 94v39h105l53 -45l19 -30l21 29l56 46h100v-40zM362 188q0 32 -23.5 52t-59 36.5t-77 34t-77 43t-59 63.5t-23.5 97q0 51 17 88.5t48.5 62.5t74.5 37t96 12q61 0 115 -10.5t89 -30.5l-43 -115q-22 14 -66 25.5t-95 11.5q-48 0 -73.5 -19t-25.5 -51
+q0 -30 23.5 -50t59 -37t77 -35t77 -43.5t59 -63t23.5 -93.5t-18.5 -96.5t-52 -67.5t-81 -40t-104.5 -13q-75 0 -132 14t-84 28l44 117q11 -6 28.5 -13t39.5 -13t46.5 -10t50.5 -4q61 0 93.5 20.5t32.5 62.5z" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="422"
+d="M253 550h-91l-115 182h110l39 -66l16 -49l18 49l45 66h101zM264 138q0 20 -17 32t-42 22t-55 20.5t-55 29t-42 47t-17 73.5q0 74 44 113t127 39q57 0 103 -12t72 -27l-29 -94q-23 9 -58 19t-71 10q-58 0 -58 -45q0 -18 17 -29t42 -20.5t55 -20.5t55 -28.5t42 -45.5
+t17 -72q0 -76 -48.5 -119.5t-145.5 -43.5q-53 0 -99.5 13.5t-75.5 31.5l36 97q23 -13 61 -25.5t78 -12.5q29 0 46.5 11t17.5 37z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="538"
+d="M182 500v-284q0 -61 14.5 -88t56.5 -27q37 0 61.5 22t36.5 54v323h130v-348q0 -41 4 -80.5t12 -71.5h-98l-23 74h-4q-23 -38 -64 -63t-97 -25q-38 0 -68 10t-50 33t-30.5 62t-10.5 98v311h130zM106 658h323v-92h-323v92z" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="627"
+d="M173 875q20 -26 58 -40t85 -14q48 0 82.5 15t54.5 39l49 -32q-12 -29 -32 -50t-45 -35t-53.5 -21t-56.5 -7q-27 0 -55.5 6t-54.5 18.5t-48 33t-36 50.5zM440 700h130v-452q0 -68 -18 -117t-50 -81t-78 -47t-101 -15q-266 0 -266 243v469h137v-442q0 -41 7.5 -69.5
+t23.5 -46t40 -25t56 -7.5q63 0 91 35t28 113v442z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="592"
+d="M116 798q0 26 18 42t58 16q39 0 57 -16t18 -42t-18 -41.5t-57 -15.5q-40 0 -58 15.5t-18 41.5zM330 798q0 26 18 42t57 16q40 0 58 -16t18 -42t-18 -41.5t-58 -15.5q-39 0 -57 15.5t-18 41.5zM228 260l-230 440h163l128 -263l14 -74h5l15 76l124 261h147l-229 -439v-261
+h-137v260z" />
+ <glyph glyph-name="Zcaron" unicode="Ž" horiz-adv-x="539"
+d="M309 737h-94l-127 94v39h105l53 -45l19 -30l21 29l56 46h100v-40zM27 122l296 414l52 42h-348v122h485v-122l-298 -418l-51 -38h349v-122h-485v122z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="458"
+d="M269 550h-91l-115 182h110l39 -66l16 -49l18 49l45 66h101zM31 110l197 237l51 43h-248v110h392v-110l-195 -241l-50 -39h245v-110h-392v110z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M342 390l-71 -424q-6 -37 -17.5 -68.5t-32 -55t-51 -37t-74.5 -13.5q-14 0 -34.5 2t-41.5 5t-40.5 7.5t-31.5 9.5l21 105q23 -10 44 -14.5t49 -4.5q36 0 56 24.5t29 81.5l61 382h-78v110h96l11 67q6 37 16.5 64.5t29 46t47.5 27.5t72 9q16 0 36.5 -2.5t41.5 -7t41 -10
+t35 -12.5l-32 -97q-49 19 -95 19q-32 0 -44.5 -15.5t-18.5 -55.5l-5 -33h119v-110h-138z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="440"
+d="M183 732h86l111 -182h-103l-39 66l-17 49l-17 -49l-45 -66h-99z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="452"
+d="M60 658q31 37 57.5 51t50.5 14q20 0 38.5 -7t36.5 -15t35 -15t35 -7q14 0 28.5 6t30.5 21l20 -70q-29 -32 -53.5 -44t-47.5 -12q-20 0 -39 6.5t-37 14.5t-36 14.5t-36 6.5q-15 0 -31 -6.5t-33 -22.5z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="296"
+d="M19 792q0 31 15.5 47.5t44.5 16.5q28 0 43.5 -16.5t15.5 -47.5q0 -30 -15.5 -46t-43.5 -16q-29 0 -44.5 16t-15.5 46zM159 792q0 31 15.5 47.5t43.5 16.5q29 0 44.5 -16.5t15.5 -47.5q0 -30 -15.5 -46t-44.5 -16q-28 0 -43.5 16t-15.5 46zM79 700h137v-700h-137v700z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="568"
+d="M557 578h-204v-578h-137v578h-205v122h546v-122z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="660"
+d="M109 346h442v-115h-442v115z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="820"
+d="M109 346h602v-115h-602v115z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="223"
+d="M185 618q0 -29 -19.5 -46.5t-48.5 -17.5q-37 0 -58 23.5t-21 62.5q0 40 12.5 68t30 46.5t36.5 29t33 15.5l32 -54q-20 -8 -34 -25.5t-16 -37.5q20 0 36.5 -17.5t16.5 -46.5z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="223"
+d="M38 644q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5l-33 55q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="223"
+d="M38 62q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5l-33 55q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="396"
+d="M358 618q0 -29 -19.5 -46.5t-48.5 -17.5q-37 0 -58 23.5t-21 62.5q0 40 12.5 68t30 46.5t36.5 29t33 15.5l32 -54q-20 -8 -34 -25.5t-16 -37.5q20 0 36.5 -17.5t16.5 -46.5zM185 618q0 -29 -19.5 -46.5t-48.5 -17.5q-37 0 -58 23.5t-21 62.5q0 40 12.5 68t30 46.5
+t36.5 29t33 15.5l32 -54q-20 -8 -34 -25.5t-16 -37.5q20 0 36.5 -17.5t16.5 -46.5z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="396"
+d="M211 644q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5l-33 55q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5zM38 644q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5
+l-33 55q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="396"
+d="M211 62q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5l-33 55q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5zM38 62q0 29 19.5 47t49.5 18q36 0 57 -24t21 -63q0 -40 -12.5 -68t-30 -46.5t-37 -29t-32.5 -15.5l-33 55
+q20 9 35.5 24t17.5 38q-20 -1 -37.5 15.5t-17.5 48.5z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="509"
+d="M40 513h116l52 -16l-16 54v149h124v-149l-15 -54l51 16h117v-112h-119l-49 16l15 -50v-367l-16 -200h-92l-16 201v366l16 50l-52 -16h-116v112z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="509"
+d="M192 371l16 45l-52 -15h-116v112h116l52 -15l-16 50v152h124v-152l-15 -50l51 15h117v-112h-119l-49 15l15 -45v-84l-15 -45l49 15h119v-112h-117l-51 15l15 -50v-110l-17 -200h-90l-17 201v109l16 50l-52 -15h-116v112h116l52 -15l-16 45v84z" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="452"
+d="M73 311q0 34 12 62t33 48t48.5 31.5t58.5 11.5q32 0 60 -10.5t48.5 -30t32.5 -48t12 -64.5t-12 -64t-32.5 -47.5t-48.5 -30t-60 -10.5q-31 0 -58.5 10.5t-48.5 30t-33 47.5t-12 64z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="809"
+d="M53 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56zM325 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21q-36 0 -58 21t-22 56zM597 66q0 35 22 55.5t58 20.5q38 0 60 -20.5t22 -55.5t-22 -56t-60 -21
+q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="1232"
+d="M677 714l73 -66l-576 -662l-73 69zM51 542q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM167 542q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5
+q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67zM452 171q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM568 171q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5
+q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67zM840 171q0 45 13 77t36 53t55.5 30.5t70.5 9.5t70 -9t55.5 -29t36.5 -52.5t14 -79.5q-1 -47 -14 -79.5t-36.5 -52.5t-55.5 -29t-70 -9t-70.5 9t-55.5 29t-36 52.5t-13 79.5zM956 171q0 -86 59 -86q31 0 44.5 18.5t14.5 67.5
+q-1 48 -14.5 67t-44.5 19t-45 -19t-14 -67z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="307"
+d="M29 259l160 230l75 -62l-83 -126l-48 -41l48 -36l91 -122l-77 -64z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="307"
+d="M278 268l-160 -230l-76 61l84 127l48 41l-48 36l-92 123l78 63z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M34 475h62q15 66 43.5 111t66.5 73.5t83.5 41.5t94.5 13q52 0 92.5 -8t67.5 -19l-35 -103q-22 9 -51 13.5t-68 4.5q-60 0 -103 -30t-65 -97h259l-26 -93h-249q-1 -8 -1 -15.5v-16.5v-26h230l-26 -93h-188q20 -66 63.5 -99.5t115.5 -33.5q42 0 72.5 9t54.5 23l27 -101
+q-15 -11 -36 -19.5t-44 -13.5t-47 -7.5t-46 -2.5q-110 0 -185.5 58.5t-101.5 186.5h-92l32 93h49v26v16t1 16h-82z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="948"
+d="M395 590h-118v-250h-130v250h-118v110h366v-110zM800 484l17 103h-6l-36 -85l-68 -117h-78l-68 114l-39 88h-5l23 -102v-145h-111v360h130l91 -150l24 -63h1l25 65l84 148h129v-360h-113v144z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="545"
+d="M358 228l5 71h-3l-42 -73l-179 -226h-82v500h130v-238l-6 -68h4l41 71l180 235h82v-521q0 -91 -36 -139t-115 -48q-30 0 -64 7v109q4 0 7.5 -0.5t7.5 -0.5q22 0 35.5 6t21 18t10.5 29.5t3 39.5v228zM219 704q7 -39 23.5 -55t42.5 -16q28 0 44.5 16t22.5 54l99 -25
+q-12 -65 -59 -96.5t-110 -31.5q-31 0 -60 7t-52 22.5t-39 39.5t-22 59z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="670"
+d="M249 799q0 25 21.5 43t64.5 18t66 -18t23 -43q0 -26 -23 -44t-66 -18t-64.5 18t-21.5 44zM38 350q0 175 77 269.5t220 94.5q75 0 131 -26t93 -74t55 -115t18 -149q0 -175 -77.5 -269.5t-219.5 -94.5q-76 0 -132 26t-92.5 74t-54.5 115t-18 149zM182 350q0 -53 9 -97.5
+t27.5 -76.5t47.5 -50t69 -18q73 0 113 57t40 185q0 51 -8.5 95t-26.5 77t-47 51.5t-71 18.5q-73 0 -113 -58.5t-40 -183.5z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="294"
+d="M191 168q0 -35 9 -51t29 -16q12 0 23.5 2t28.5 9l14 -102q-16 -8 -49 -16t-68 -8q-57 0 -87 26.5t-30 87.5v600h130v-532zM269 701h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="568"
+d="M322 870h159v-30l-160 -88h-103zM557 578h-204v-578h-137v578h-205v122h546v-122z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="349"
+d="M5 500h69v94l130 37v-131h122v-110h-122v-192q0 -52 10.5 -74.5t39.5 -22.5q20 0 34.5 4t32.5 12l23 -100q-27 -13 -63 -22t-73 -9q-69 0 -101.5 35.5t-32.5 116.5v252h-69v110zM304 701h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="602"
+d="M340 870h159v-30l-160 -88h-103zM290 289l18 -119h5l20 120l134 410h144l-260 -705h-98l-262 705h159z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="477"
+d="M230 238l17 -77h5l14 79l85 260h140l-209 -505h-79l-217 505h151zM239 720h132v-30l-111 -124h-74z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="526"
+d="M120 310v107h24h22t26.5 0.5t26.5 2t21 3.5q35 8 60 28.5t25 55.5q0 48 -30.5 65.5t-80.5 17.5q-45 0 -84 -12t-59 -23l-35 116q11 6 31.5 13t47 13.5t57.5 10.5t63 4q44 0 86 -8t75 -28t53 -53.5t20 -85.5t-27.5 -96t-88.5 -64v-5q65 -13 101.5 -56t36.5 -115
+q0 -57 -23 -97.5t-60.5 -66.5t-86.5 -38.5t-100 -12.5q-66 0 -120 11t-83 26l35 119q23 -11 66 -22.5t102 -11.5q22 0 44.5 5.5t40.5 18t29 32.5t11 48q0 47 -35 71t-125 26q-12 1 -18 1h-21h-27z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSans-Bold.ttf has changed
Binary file web/res/fonts/PTSans-Bold.woff has changed
Binary file web/res/fonts/PTSans-BoldItalic.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSans-BoldItalic.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,621 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 10:33:09 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-BoldItalic" horiz-adv-x="545" >
+ <font-face
+ font-family="PT Sans"
+ font-weight="700"
+ font-style="italic"
+ font-stretch="normal"
+ units-per-em="1000"
+ panose-1="2 11 7 3 2 2 3 9 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-129 -273 1101 875"
+ underline-thickness="50"
+ underline-position="-50"
+ slope="-12"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="253"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="283"
+d="M217 700h128l-70 -329l-59 -163h-78l9 163zM74 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="354"
+d="M116 700h108l-79 -216h-75zM256 700h108l-79 -216h-75z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M318 205h-89l-36 -154h-107l36 154h-74l22 97h75l25 106h-72l22 97h73l35 144h107l-35 -144h89l35 144h107l-35 -144h72l-25 -97h-70l-25 -106h69l-24 -97h-68l-36 -154h-107zM252 302h89l25 106h-89z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M192 -10q-52 7 -84 23t-49 30l47 97q14 -10 42.5 -23t66.5 -20l47 221q-23 15 -45 32.5t-39.5 40t-28 51t-10.5 66.5q0 48 16.5 84t45 61t65.5 39t79 19l20 89h99l-19 -90q38 -5 67 -14.5t50 -20.5l-50 -102q-14 8 -38 16t-53 13l-43 -203q23 -16 46 -34t41 -41.5t29 -53
+t11 -67.5q0 -48 -16 -85.5t-44.5 -64.5t-68 -43t-86.5 -21l-18 -89h-99zM272 94q53 4 78 31t25 63q0 32 -18 54t-45 42zM364 606q-48 -2 -71.5 -25t-23.5 -57q0 -29 16.5 -49.5t42.5 -40.5z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="804"
+d="M656 714l73 -66l-576 -662l-73 69zM55 499q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM165 505q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5t23 88.5q0 49 -43 49
+q-17 0 -31 -10t-25 -26.5t-17 -39t-5 -47.5zM420 128q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM530 134q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5t23 88.5
+q0 49 -43 49q-17 0 -31 -10t-25 -26.5t-17 -39t-5 -47.5z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="783"
+d="M73 162q0 46 18.5 87t49 75t69 61.5t79.5 47.5q-17 33 -21.5 60t-4.5 54q0 33 11 63t35 53t61 37t88 14q40 0 65.5 -10t40.5 -26.5t20.5 -37t5.5 -40.5q0 -51 -40.5 -97.5t-115.5 -87.5q22 -54 45.5 -99t55.5 -89q26 25 52 62.5t48 76.5l79 -50q-10 -18 -25 -39.5
+t-31.5 -43.5t-33 -41.5t-29.5 -33.5q24 -29 52.5 -54.5t56.5 -37.5l-87 -96q-15 6 -31 17.5t-31.5 25t-29.5 28.5t-24 29q-43 -33 -99.5 -58.5t-131.5 -25.5q-46 0 -82.5 13.5t-62 37t-39 55.5t-13.5 70zM443 149q-37 53 -66 105.5t-48 99.5q-59 -40 -92.5 -80.5
+t-33.5 -87.5q0 -42 27 -66t80 -24q38 0 74.5 16.5t58.5 36.5zM384 553q0 -22 3.5 -37.5t14.5 -39.5q42 25 65 49t23 51q0 19 -9 30t-34 11q-31 0 -47 -19t-16 -45z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="218"
+d="M137 700h108l-79 -216h-75z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="310"
+d="M157 -218q-29 38 -47 77.5t-29 78.5t-15 76.5t-4 72.5q0 96 23 186.5t61.5 171t89.5 148.5t107 119l64 -54q-47 -52 -87.5 -116.5t-70.5 -137.5t-47.5 -151.5t-17.5 -158.5q0 -63 9 -124.5t41 -133.5z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="310"
+d="M183 711q45 -60 65.5 -135.5t20.5 -166.5q0 -96 -22.5 -187t-61 -172t-89 -150t-106.5 -120l-67 55q45 50 86 115.5t71.5 139.5t48.5 152t18 153q0 83 -12 146.5t-39 113.5z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="356"
+d="M182 731l28 -46l15 -59l15 55l28 49l63 -35l-30 -52l-47 -43l64 16h57v-73h-54l-61 16l50 -47l25 -42l-64 -37l-27 46l-20 64l-13 -58l-29 -49l-65 37l30 49l45 37l-55 -16h-59v74h59l59 -17l-50 44l-28 50z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="505"
+d="M58 394h162v169h117v-169h163v-112h-163v-171h-117v171h-162v112z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="226"
+d="M60 -5q-17 1 -32 17t-15 42q0 40 25.5 62t60.5 22t52 -22.5t17 -51.5v-2q-1 -49 -20 -85.5t-45.5 -62t-55 -41t-47.5 -21.5l-26 54q29 11 53 36t33 53z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="343"
+d="M81 340h239l-25 -104h-239z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="251"
+d="M33 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="388"
+d="M432 712l86 -46l-510 -808l-85 48z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M55 229q0 104 23.5 192.5t65.5 153.5t99.5 102t125.5 37q39 0 73.5 -12t60.5 -40t41 -75t15 -116q0 -93 -21.5 -180.5t-62 -155t-99 -108.5t-131.5 -41q-49 0 -85 19t-59 51.5t-34.5 77t-11.5 95.5zM179 230q0 -41 7 -67t18.5 -41t27.5 -20.5t34 -5.5q35 0 65.5 33
+t53.5 86t36.5 119.5t13.5 134.5q0 31 -3.5 56t-13 42.5t-25.5 27t-41 9.5q-33 0 -64 -31t-55.5 -82.5t-39 -119.5t-14.5 -141z" />
+ <glyph glyph-name="one" unicode="1"
+d="M81 110h132l85 395l28 68l-58 -59l-97 -62l-39 77l257 183h70l-128 -602h129l-23 -110h-379z" />
+ <glyph glyph-name="two" unicode="2"
+d="M540 560q0 -56 -26 -113.5t-66 -112.5t-88 -104t-91 -88l-59 -41v-5l70 14h179l-23 -110h-400l14 67q28 26 66 61.5t79 76t80.5 84t70.5 85.5t50.5 81t19.5 71q0 33 -17 54t-65 21q-31 0 -63.5 -14.5t-64.5 -37.5l-30 94q48 35 96.5 53t112.5 18q74 0 114.5 -42.5
+t40.5 -111.5z" />
+ <glyph glyph-name="three" unicode="3"
+d="M193 389l147 165l64 45l-76 -9h-159l24 110h363l-15 -71l-171 -190l-48 -27v-5l40 6q20 -2 42.5 -12t41.5 -29.5t31.5 -50t12.5 -74.5q0 -57 -18.5 -105t-55.5 -82.5t-92 -54t-127 -19.5q-43 0 -87 8t-69 23l57 111q20 -13 49 -21t67 -8q39 0 67.5 11t47.5 29t28 41.5
+t9 47.5q0 48 -25.5 70t-92.5 22h-70z" />
+ <glyph glyph-name="four" unicode="4"
+d="M535 195h-105l-41 -195h-115l41 195h-287l15 74l393 436h102l-86 -407h105zM370 452l26 84h-3l-48 -72l-126 -135l-55 -38l62 7h111z" />
+ <glyph glyph-name="five" unicode="5"
+d="M201 99q42 0 72 12t49.5 32t29 46t9.5 55q0 50 -30.5 71t-101.5 21l-77 -3l77 367h327l-25 -122h-220l-29 -138l37 4q40 0 70.5 -13t51.5 -36t32 -55t11 -69q0 -138 -78 -211.5t-224 -73.5q-20 0 -41 2.5t-40.5 6.5t-36 9.5t-28.5 11.5l56 106q20 -10 45.5 -16.5
+t63.5 -6.5z" />
+ <glyph glyph-name="six" unicode="6"
+d="M516 255q0 -54 -16 -103t-48.5 -85.5t-81.5 -58.5t-114 -22q-32 0 -66.5 11.5t-63 38t-46.5 69.5t-18 106q0 102 38 190.5t100.5 155t142.5 107.5t165 50l7 -103q-50 -8 -98 -28.5t-89.5 -52t-73.5 -71.5t-49 -86q27 29 66.5 44t81.5 15q77 0 120 -48.5t43 -128.5z
+M394 232q0 40 -20.5 65t-68.5 25q-38 0 -71 -17t-50 -43q-2 -10 -3.5 -22.5t-1.5 -20.5q0 -54 22.5 -88.5t69.5 -34.5q57 0 90 38t33 98z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M62 0l329 539l51 49l-58 -10h-235l25 122h430l-8 -38l-405 -662h-129z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M54 153q0 38 13 70.5t35 59t51 46.5t61 32q-14 13 -26.5 26.5t-22 30.5t-15 39.5t-5.5 52.5q0 49 18.5 87.5t50.5 64t74 39t89 13.5q84 0 128 -43.5t44 -111.5q0 -35 -11.5 -63.5t-31 -52.5t-45 -43.5t-53.5 -34.5q45 -35 64.5 -74.5t19.5 -85.5q0 -51 -18.5 -91.5
+t-51.5 -69t-79 -43.5t-101 -15q-39 0 -73.5 11t-60 32t-40 52t-14.5 72zM374 190q0 23 -7.5 41t-20 32.5t-29.5 27t-35 23.5q-51 -26 -81 -60.5t-30 -76.5q0 -35 21 -58t69 -23q22 0 42.5 6t36.5 17.5t25 29t9 41.5zM263 511q0 -35 22 -59.5t56 -44.5q18 13 34 28t28.5 31
+t20 33t7.5 33q0 36 -18 54t-51 18q-42 0 -70.5 -24t-28.5 -69z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M99 456q0 60 20 108t55.5 81t83 51t103.5 18q42 0 78 -13t62.5 -40.5t42 -69t15.5 -98.5q0 -80 -20.5 -147.5t-55 -122.5t-80 -98t-95.5 -73t-101.5 -46.5t-97.5 -19.5l-6 102q55 10 103.5 31.5t87.5 51t67.5 66t44.5 75.5q-29 -23 -63 -34.5t-82 -11.5q-28 0 -57 10.5
+t-52 33t-38 59t-15 87.5zM221 475q0 -29 7.5 -48t20.5 -31t28.5 -17t32.5 -5q38 0 71 12t52 32q3 11 5.5 31t2.5 29q0 57 -22.5 92.5t-73.5 35.5q-24 0 -46 -7.5t-39.5 -23.5t-28 -41t-10.5 -59z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="314"
+d="M90 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56zM165 428q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="307"
+d="M138 -5q-17 1 -32 17t-15 42q0 40 25.5 62t60.5 22t52 -22.5t17 -51.5v-2q-1 -49 -20 -85.5t-45.5 -62t-55 -41t-47.5 -21.5l-26 54q29 11 53 36t33 53zM158 428q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="505"
+d="M51 285v70l386 231l57 -90l-224 -139l-91 -35l90 -31l230 -137l-57 -90z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="505"
+d="M58 299h442v-112h-442v112zM58 490h442v-112h-442v112z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="505"
+d="M508 365v-70l-387 -231l-56 91l223 138l91 36l-90 30l-229 138l56 89z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="430"
+d="M127 208q6 54 24.5 92.5t43 67t52 50t50 41.5t37.5 41t15 49q0 27 -15.5 42t-55.5 15q-31 0 -68 -13.5t-65 -32.5l-31 94q41 25 89 42.5t117 17.5q84 0 123 -35.5t39 -95.5q0 -53 -16 -89.5t-41 -64t-55 -49t-57.5 -45.5t-49.5 -54t-30 -73h-106zM82 66q0 35 22 55.5
+t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="1059"
+d="M706 484h70l-49 -271q-2 -12 -3 -22.5t-1 -18.5q0 -48 37 -48q26 0 51.5 12t45.5 37t32 63t12 90q0 75 -25 128.5t-68.5 88t-102.5 50.5t-126 16q-78 0 -145.5 -28t-117 -77.5t-77.5 -117t-28 -146.5q0 -78 23.5 -140t69 -106t112 -67.5t152.5 -23.5q29 0 66 7.5t67 21.5
+l31 -96q-42 -20 -84 -28t-97 -8q-98 0 -180.5 28t-142.5 83t-94 136.5t-34 188.5q0 109 39 197t105 150t153 95.5t184 33.5q92 0 171 -26.5t137 -76t91 -121t33 -162.5q0 -64 -23 -120t-62 -97t-91.5 -65t-112.5 -24q-25 0 -46.5 5.5t-36.5 18.5t-22 34t-4 52h-4
+q-15 -21 -32 -41t-38 -35.5t-46 -24.5t-55 -9q-25 0 -46.5 10.5t-37.5 29.5t-25.5 46t-9.5 60q0 62 20 120.5t54 103.5t79.5 72.5t96.5 27.5q35 0 59 -10.5t45 -27.5zM643 363q-14 11 -28 17.5t-34 6.5q-30 0 -55.5 -17.5t-44 -44.5t-29 -60.5t-10.5 -65.5q0 -33 14 -54.5
+t47 -21.5q14 0 30 8.5t31 23t28.5 32.5t24.5 38z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="582"
+d="M387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="568"
+d="M166 695q19 3 43 6t51 5t55.5 3t55.5 1q46 0 85.5 -9.5t68 -29.5t45 -51.5t16.5 -75.5q0 -33 -11 -63.5t-31.5 -54.5t-49 -40t-64.5 -21v-5q19 -4 38 -14.5t34 -27t24 -39t9 -50.5q0 -64 -25 -109.5t-67 -74t-98 -42t-118 -13.5h-41.5t-54.5 1.5t-58 4.5t-53 9zM167 109
+q4 -2 14.5 -3t23 -1.5t25.5 -1t22 -0.5q25 0 51.5 6t48 20t35.5 36t14 54q0 25 -11 41t-29 25.5t-41.5 13t-48.5 3.5h-64zM230 406h43q14 0 33 0.5t32 2.5q18 3 38.5 10t37 20t27.5 33t11 50q0 43 -28.5 59t-72.5 16q-26 0 -48 -1t-34 -3z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="537"
+d="M483 29q-67 -43 -164 -43q-66 0 -115 22t-81.5 61t-48.5 91t-16 112q0 118 33 201.5t87 137t123.5 78.5t142.5 25q57 0 97.5 -8.5t63.5 -19.5l-51 -116q-20 11 -48 16.5t-71 5.5q-51 0 -95 -21t-76 -60t-50.5 -95t-18.5 -127q0 -85 42.5 -133t113.5 -48q45 0 74.5 9.5
+t55.5 23.5z" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="620"
+d="M168 700q21 3 46 5t46.5 3t37.5 1q9 0 25.5 0.5t36.5 0.5q61 0 111 -15.5t85.5 -47.5t55 -82t19.5 -119q0 -44 -7.5 -94.5t-25.5 -101.5t-49.5 -98t-79 -83t-114 -58t-154.5 -22q-15 0 -30 0.5t-21 0.5q-20 1 -44.5 2.5l-49 3t-36.5 3.5zM174 114q4 -1 12.5 -1.5t18.5 -1
+t19 -0.5h14q70 0 119 31.5t79.5 79t44 103t13.5 103.5q0 80 -33.5 120t-111.5 40q-20 0 -42 -1t-34 -3z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="503"
+d="M168 700h130h264l-26 -122h-264l-35 -163h241l-27 -122h-239l-37 -171h269l-25 -122h-269h-130z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="489"
+d="M168 700h130h264l-26 -122h-264l-37 -173h243l-25 -122h-243l-60 -283h-130z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="585"
+d="M369 365h210l-66 -312q-45 -35 -94.5 -51t-106.5 -16q-55 0 -101.5 19t-80.5 55t-53 89t-19 121q0 115 31.5 199t85.5 138.5t126 80.5t152 26q57 0 101.5 -9.5t67.5 -19.5l-52 -115q-21 10 -52.5 16t-76.5 6q-53 0 -98 -20t-78 -59t-51.5 -96.5t-18.5 -131.5
+q0 -83 39 -130t105 -47q49 0 86 25l28 133l-102 16z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="624"
+d="M455 293h-243l-62 -293h-130l148 700h130l-60 -285h243l60 285h130l-148 -700h-130z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="278"
+d="M183 700h129l-148 -700h-129z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="324"
+d="M239 700h130l-109 -512q-9 -42 -23 -78.5t-37 -63.5t-57.5 -42.5t-83.5 -15.5q-28 0 -59 6t-51 17l50 112q23 -13 54 -13q21 0 35 8.5t23.5 23.5t15.5 35.5t12 45.5z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="593"
+d="M260 299h-47l-63 -299h-130l148 700h130l-66 -310l31 11l237 299h156l-252 -297l-60 -35l44 -39l152 -329h-145z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="495"
+d="M441 0h-291h-130l148 700h130l-123 -578h291z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="767"
+d="M613 363l44 138h-6l-66 -113l-197 -259h-41l-94 262l-18 110h-5l-10 -137l-77 -364h-123l148 700h115l105 -320l13 -80h5l46 82l236 318h125l-148 -700h-129z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="631"
+d="M267 366l-33 112h-5l-9 -112l-77 -366h-123l150 705h90l172 -374l31 -109h6l7 109l79 369h123l-150 -705h-90z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="644"
+d="M58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125
+q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="550"
+d="M167 693q42 8 89.5 12.5t95.5 4.5q51 0 94.5 -11.5t76 -35.5t50.5 -61.5t18 -89.5q0 -78 -27 -130.5t-71.5 -85t-101.5 -46t-116 -13.5h-15.5t-22 0.5t-22 1.5t-15.5 2l-50 -241h-130zM226 359q4 -1 11 -2t15.5 -1.5t16 -0.5h11.5q34 0 65.5 7.5t55.5 24t38.5 43.5
+t14.5 66q0 29 -9.5 48t-25.5 29.5t-37.5 14.5t-45.5 4q-18 0 -34.5 -1.5t-27.5 -3.5z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="644"
+d="M58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125
+q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5zM627 -202q-48 -13 -95 -13q-48 0 -92 10.5t-84.5 22.5t-77.5 22.5t-73 10.5q-23 0 -45 -6l25 118q28 6 56 6q40 0 77.5 -10t76 -21.5t79.5 -21.5t88 -10q21 0 43.5 2.5t46.5 8.5z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="584"
+d="M167 693q48 9 97 13t88 4q46 0 87 -11t71 -33.5t47.5 -58t17.5 -83.5q0 -55 -16.5 -95.5t-43.5 -68t-61.5 -43t-70.5 -20.5l39 -31l97 -266h-144l-96 274l-69 13l-60 -287h-130zM230 380h53q29 0 57 5.5t49.5 20t35 38.5t13.5 61q0 34 -23 58.5t-74 24.5
+q-20 0 -37.5 -1.5t-29.5 -3.5z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="510"
+d="M502 559q-19 12 -56 24.5t-82 12.5q-23 0 -45 -4.5t-39 -14.5t-27 -26t-10 -38q0 -29 18 -49t45.5 -37.5t59 -35.5t59 -42t45.5 -57.5t18 -82.5q0 -59 -20.5 -101.5t-58 -69.5t-90 -39.5t-116.5 -12.5q-35 0 -66.5 4t-58.5 10t-47.5 13.5t-32.5 14.5l67 116q10 -6 26 -13
+t36.5 -13t44.5 -10t48 -4q28 0 53 4.5t43.5 15t29 26.5t10.5 40q0 27 -18 46t-45.5 36t-59 35.5t-59 43.5t-45.5 60.5t-18 86.5q0 58 20.5 99t55.5 67t82 38t101 12q29 0 58 -3t55 -8.5t48 -13t37 -16.5z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="547"
+d="M614 578h-194l-123 -578h-129l122 578h-194l26 122h517z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="602"
+d="M531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5t-65.5 38.5t-37 59t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="579"
+d="M288 290l-7 -119h4l44 119l216 410h146l-395 -705h-94l-101 705h142z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="826"
+d="M249 310l-14 -124h5l39 126l198 388h88l29 -390l-13 -124h5l40 126l164 388h140l-333 -705h-91l-37 389l8 107h-6l-38 -108l-199 -388h-91l-34 705h137z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="608"
+d="M256 357l-113 343h141l60 -202l10 -71l37 71l149 202h156l-263 -338l125 -362h-139l-72 216l-12 74l-40 -74l-161 -216h-158z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="569"
+d="M231 260l-125 440h144l65 -263l-2 -74h4l31 76l175 261h149l-311 -439l-55 -261h-129z" />
+ <glyph glyph-name="Z" unicode="Z" horiz-adv-x="518"
+d="M15 122l360 416l58 40h-321l25 122h461l-25 -122l-362 -419l-56 -37h321l-26 -122h-461z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="314"
+d="M198 700h223l-22 -109h-105l-151 -711h105l-24 -110h-222z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="424"
+d="M472 -95l-101 -45l-335 808l103 43z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="314"
+d="M145 -230h-223l24 110h105l150 711h-105l22 109h224z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="505"
+d="M266 705h70l185 -292h-131l-71 122l-22 70l-25 -71l-77 -121h-125z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="444"
+d="M-46 -117h444v-107h-444v107z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="274"
+d="M305 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="512"
+d="M164 700h123l-62 -288h4q13 18 30 35.5t37.5 32t44.5 23.5t53 9q54 0 81 -38t27 -101q0 -95 -26.5 -167t-69.5 -120.5t-97 -73t-109 -24.5q-61 0 -107.5 11.5t-70.5 28.5zM160 105q11 -8 27 -11t35 -3q25 0 52 16.5t49.5 48.5t37 78.5t14.5 105.5q0 69 -40 69
+q-20 0 -39.5 -11t-37.5 -27.5t-32.5 -35.5t-23.5 -36z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="412"
+d="M393 387q-19 11 -39.5 15t-44.5 4q-27 0 -52.5 -17.5t-46 -46t-32.5 -66.5t-12 -78q0 -51 22 -77.5t58 -26.5q30 0 55.5 9.5t45.5 21.5l23 -84q-32 -24 -74.5 -39.5t-84.5 -15.5q-48 0 -81.5 14t-54.5 38t-31 55t-10 65q0 84 24 150t63.5 111.5t90 70t103.5 24.5
+q47 0 74.5 -9t49.5 -20z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="507"
+d="M442 176q-9 -42 -13 -78t-4 -68v-15.5t1 -15.5h-84l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-46.5 -8.5q-62 0 -95.5 44t-33.5 121q0 70 19 135t53.5 115.5t84 80.5t109.5 30q29 0 48 -3.5t36 -11.5l43 203h123zM365 394q-12 8 -27.5 11.5t-41.5 3.5
+q-30 0 -54.5 -20.5t-41.5 -55t-26.5 -79.5t-9.5 -94q0 -29 13 -50t37 -21q15 0 30.5 7.5t29 19.5t25 26t18.5 26z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="466"
+d="M402 48q-31 -26 -80 -44t-114 -18q-81 0 -127.5 47.5t-46.5 132.5q0 80 25 144.5t65.5 109.5t91.5 69.5t102 24.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5
+q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26zM176 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="294"
+d="M246 397l-74 -431q-6 -37 -17 -68.5t-30.5 -55t-49.5 -37t-74 -13.5q-36 0 -70.5 5.5t-59.5 22.5l34 91q17 -7 34 -9t43 -2q32 0 49.5 25.5t26.5 82.5l63 389h-70l22 103h64l13 67q7 37 18 64.5t29.5 46t45 27.5t65.5 9q16 0 36.5 -1.5t40.5 -5t39 -8.5t34 -12l-29 -91
+q-23 9 -47 12t-47 3q-32 0 -46.5 -19t-20.5 -59l-6 -33h100l-20 -103h-96z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="505"
+d="M407 0q-13 -59 -35 -99.5t-52.5 -65.5t-70 -36t-87.5 -11q-35 0 -62.5 5t-48.5 12t-36.5 14.5t-24.5 13.5l46 91q9 -4 21 -9.5t27.5 -11t36 -9t47.5 -3.5q50 0 79.5 31t42.5 85l19 78h-4q-23 -36 -62.5 -64.5t-89.5 -28.5q-54 0 -87.5 40.5t-33.5 108.5q0 77 22 144.5
+t61.5 118t93.5 79.5t119 29q61 0 106.5 -10.5t73.5 -23.5zM371 399q-11 6 -28 8t-34 2q-32 0 -59.5 -19t-47.5 -52t-31.5 -77.5t-11.5 -95.5q0 -32 13.5 -51t35.5 -19q17 0 35 10.5t34.5 26.5t29.5 35.5t21 36.5z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="528"
+d="M309 0l60 284q10 44 10 73q0 26 -10 37.5t-31 11.5q-19 0 -40 -12t-40 -30t-34.5 -38.5t-23.5 -37.5l-59 -288h-123l148 700h123l-63 -288h4q13 16 31.5 34t41 33t49 25t57.5 10q48 0 74.5 -24t26.5 -85q0 -37 -12 -94l-66 -311h-123z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="256"
+d="M152 642q0 33 21.5 51t54.5 18q32 0 54.5 -18t22.5 -51q0 -32 -22.5 -50.5t-54.5 -18.5q-33 0 -54.5 18.5t-21.5 50.5zM133 500h123l-106 -500h-123z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="244"
+d="M141 642q0 33 21.5 51t54.5 18q32 0 54.5 -18t22.5 -51q0 -32 -22.5 -50.5t-54.5 -18.5q-33 0 -54.5 18.5t-21.5 50.5zM123 500h124l-111 -521q-19 -90 -64 -137.5t-122 -47.5q-31 0 -62 7l24 106q25 -2 43 4.5t30.5 20.5t21 35.5t14.5 48.5z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="465"
+d="M224 207h-40l-43 -207h-123l148 700h123l-88 -413l37 13l141 200h137l-149 -201l-60 -38l45 -38l76 -223h-132z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="272"
+d="M168 148q-6 -29 0.5 -43t21.5 -14q28 0 53 11l-3 -89q-18 -11 -52 -18t-67 -7q-43 0 -65.5 16.5t-22.5 61.5q0 23 6 53l123 581h123z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="767"
+d="M283 0l57 272q6 28 9.5 49.5t3.5 38.5q0 46 -35 46q-17 0 -34 -9t-31.5 -23t-27 -30.5t-20.5 -31.5l-64 -312h-123l106 500h96l-6 -88h4q15 16 32.5 34t39.5 33t49 25t59 10q40 0 60.5 -29t18.5 -77q15 19 34.5 38t42 34t48 24.5t52.5 9.5q46 0 70.5 -21.5t24.5 -80.5
+q0 -43 -15 -112l-63 -300h-123l59 281q5 23 8 43t3 35q0 23 -8.5 35t-28.5 12q-16 0 -32.5 -9.5t-31.5 -24t-27.5 -31.5t-19.5 -32l-64 -309h-123z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="521"
+d="M299 0l66 310q6 28 6 49q0 22 -9 34.5t-33 12.5q-18 0 -36 -9t-34 -24t-30 -33.5t-24 -37.5l-64 -302h-123l106 500h93l-5 -88h4q13 16 30.5 34t40.5 33t51.5 25t64.5 10q45 0 72 -24.5t27 -81.5q0 -15 -1.5 -32t-6.5 -37l-72 -339h-123z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="506"
+d="M122 500h91l-5 -88h4q14 19 32 37.5t40 32.5t47 23t54 9q51 0 82 -35t31 -110q0 -85 -22.5 -155.5t-60 -121t-88 -78.5t-105.5 -28q-26 0 -49 5t-34 13l-43 -204h-122zM160 106q25 -17 56 -17t59 21t49.5 56t34 81.5t12.5 97.5q0 29 -13.5 47.5t-36.5 18.5q-18 0 -35 -9
+t-32 -22.5t-27 -30.5t-21 -33z" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="501"
+d="M356 -200h-120l61 278h-4q-10 -17 -24.5 -33t-33 -29.5t-40.5 -21.5t-47 -8q-33 0 -55.5 12.5t-36.5 34t-20.5 49t-6.5 57.5q0 76 24.5 144t67 119t99 80.5t119.5 29.5q48 0 93.5 -10.5t70.5 -24.5zM364 399q-14 6 -29 8t-30 2q-30 0 -57.5 -21.5t-47.5 -57t-32 -81.5
+t-12 -94q0 -31 11.5 -48.5t31.5 -17.5q19 0 38 11.5t35.5 29t30 38t21.5 38.5z" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="343"
+d="M215 500l1 -88h4q22 40 53.5 68t79.5 28q21 0 50 -8l-31 -107q-10 3 -19 5t-19 2q-41 0 -75.5 -26.5t-52.5 -61.5l-65 -312h-123l106 500h91z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="396"
+d="M38 117q20 -11 51.5 -19.5t66.5 -8.5t53.5 13.5t19.5 41.5q0 20 -12 34.5t-30.5 27.5t-39.5 26.5t-39.5 31t-30.5 41.5t-12 58q0 33 13 61t36.5 48t57 31t75.5 11q58 0 96 -8.5t60 -21.5l-34 -94q-20 9 -48.5 15t-59.5 6q-32 0 -50.5 -11t-18.5 -35q0 -16 12 -28.5
+t30.5 -25.5t39.5 -26.5t39.5 -32.5t30.5 -43.5t12 -58.5q0 -83 -54 -123.5t-144 -40.5q-51 0 -93.5 9.5t-65.5 23.5z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="320"
+d="M64 500h65l20 94l131 37l-28 -131h117l-23 -103h-116l-49 -226q-6 -27 -6 -44q0 -22 10 -30t30 -8q19 0 34.5 4t32.5 13v-92q-11 -6 -26.5 -11.5t-33.5 -9t-37 -5.5t-35 -2q-51 0 -78.5 23.5t-27.5 71.5q0 10 1.5 21t3.5 23l58 272h-67z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="448"
+d="M209 238l2 -77h3l30 79l137 260h139l-306 -505h-76l-98 505h136z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="678"
+d="M445 500l32 -256l-1 -83h5l30 84l116 255h120l-255 -505h-91l-35 280v63h-4l-26 -64l-150 -279h-94l-46 505h126l16 -251l-6 -89h5l34 90l132 250h92z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="496"
+d="M166 256l-90 244h139l38 -107l13 -70l44 70l87 107h143l-195 -240l100 -260h-136l-48 120l-15 74l-45 -74l-99 -120h-143z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="452"
+d="M216 219l1 -78h6l27 79l136 280h131l-240 -449q-30 -56 -56.5 -103t-53.5 -81t-56 -53t-62 -19q-44 0 -66 15l33 98q6 -3 12.5 -4t12.5 -1q24 0 49 23t50 74l-94 500h141z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="435"
+d="M9 108l225 239l71 45h-236l24 108h372l-23 -108l-230 -243l-64 -41h234l-23 -108h-372z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="356"
+d="M122 96q11 51 -4.5 70t-52.5 19l22 100q36 0 60 20.5t33 64.5l44 209q11 54 42 88t85 34h114l-23 -110h-48q-26 0 -40.5 -14t-21.5 -46l-41 -195q-9 -44 -34 -66.5t-52 -27.5l-2 -10q25 -4 39.5 -30t5.5 -68l-41 -194q-7 -32 2 -46t36 -14h47l-24 -110h-114
+q-50 0 -69 31.5t-6 89.5z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="232"
+d="M94 700h106v-830h-106v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="356"
+d="M266 375q-11 -51 5 -70t53 -19l-21 -100q-76 0 -94 -85l-45 -209q-11 -54 -43.5 -88t-86.5 -34h-110l24 110h48q25 0 39 13.5t21 46.5l42 195q9 44 33.5 66.5t52.5 27.5l3 10q-26 4 -41 30t-6 68l41 194q7 31 -1.5 45.5t-35.5 14.5h-46l22 110h113q50 0 69.5 -31.5
+t7.5 -89.5z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="505"
+d="M45 378q47 38 84.5 52.5t69.5 14.5q29 0 54 -8.5t48 -18t45.5 -18t45.5 -8.5q18 0 37 6t40 23l47 -103q-36 -27 -66 -38t-56 -11q-28 0 -52 9t-46.5 20t-45.5 20t-49 9q-24 0 -51.5 -10.5t-60.5 -38.5z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="253"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="279"
+d="M117 -200h-127l69 329l59 162h78l-9 -162zM100 435q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M447 41q-21 -17 -51.5 -29.5t-62.5 -18.5l-19 -93h-115l19 91q-33 7 -57 23t-39 38.5t-22 49.5t-7 56q0 75 19 135.5t51.5 105.5t75.5 73t90 37l19 91h115l-20 -92q46 -9 72 -23l-45 -98q-11 6 -25.5 10t-30.5 6l-65 -305q22 5 41.5 12t32.5 15zM327 398
+q-22 -9 -42.5 -27t-36 -44t-25 -58.5t-9.5 -70.5q0 -42 14 -65t36 -32z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M113 399h70q-5 20 -9 43.5t-4 55.5q0 56 21.5 97t57.5 67.5t82 39t95 12.5q45 0 85.5 -9.5t63.5 -25.5l-42 -97q-17 9 -46.5 16.5t-69.5 7.5q-24 0 -46.5 -8.5t-39 -24.5t-26.5 -38t-10 -50q0 -29 4 -48.5t10 -37.5h140l-23 -103h-95q0 -4 0.5 -6.5t0.5 -6.5
+q0 -50 -21 -91t-46 -63l-47 -30l-1 -6l67 15h218l-24 -108h-448l24 109h2q30 1 57.5 14t48.5 35.5t33.5 52.5t12.5 65v10t-1 10h-117z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M117 622l78 -77l19 -37q20 15 47.5 22.5t57.5 7.5q29 0 57.5 -7.5t47.5 -21.5l20 36l78 77l77 -80l-77 -78l-38 -16q15 -21 21 -47.5t6 -55.5q0 -30 -6.5 -56.5t-20.5 -44.5l38 -16l77 -78l-77 -80l-78 77l-18 37q-19 -14 -48.5 -22t-58.5 -8q-30 0 -57.5 7.5t-47.5 21.5
+l-19 -36l-78 -77l-76 80l77 78l36 17q-12 21 -19 45.5t-7 54.5q0 29 7.5 54t19.5 48l-37 17l-77 78zM237 346q0 -38 23 -62t60 -24t59.5 24t22.5 62q0 36 -22.5 61t-59.5 25t-60 -25t-23 -61z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M112 337h85l-103 363h152l67 -263l-3 -74h5l30 76l173 261h142l-257 -363h87l-17 -80h-125l-12 -57h125l-17 -80h-125l-25 -120h-130l25 120h-124l17 80h124l12 57h-123z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="227"
+d="M60 213h107v-343h-107v343zM167 357h-107v343h107v-343z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="505"
+d="M85 123q20 -11 50.5 -22.5t71.5 -11.5q35 0 56 13.5t21 37.5q0 16 -15.5 27t-38.5 21t-50.5 21.5t-50.5 27.5t-38.5 39.5t-15.5 58.5q0 45 24 76.5t56 54.5l48 16q-22 16 -33 38.5t-12 47.5q0 30 14.5 57t40.5 46.5t62.5 31t79.5 11.5q56 0 93 -11.5t63 -25.5l-37 -95
+q-20 11 -53.5 20t-66.5 9q-35 0 -54 -14.5t-19 -37.5q0 -17 15.5 -27.5t38.5 -19t50 -17.5t50 -24t38.5 -38.5t15.5 -59.5q0 -48 -24.5 -82.5t-54.5 -55.5l-51 -16q23 -16 34 -36.5t10 -52.5q-1 -69 -55 -106.5t-143 -37.5q-55 0 -97 13.5t-66 30.5zM297 270q23 12 44 32
+t21 48q0 17 -6 28t-18 20t-31 16.5t-44 16.5q-22 -12 -41.5 -32t-19.5 -48q0 -31 22.5 -48t72.5 -33z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="472"
+d="M163 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM371 652q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="836"
+d="M80 290q0 83 28 149.5t76.5 113.5t114.5 72.5t142 25.5t141.5 -25.5t114.5 -72.5t77 -113.5t28 -149.5t-28 -149.5t-77 -113.5t-114.5 -72.5t-141.5 -25.5q-83 0 -150 25.5t-114 72.5t-72 113.5t-25 149.5zM177 290q0 -62 20 -112t55 -84.5t83.5 -53t105.5 -18.5
+t105.5 18.5t84 53t55 84.5t19.5 112t-19.5 112t-55 84.5t-84 53t-105.5 18.5t-105.5 -18.5t-83.5 -53t-55 -84.5t-20 -112zM566 131q-22 -14 -55.5 -22.5t-71.5 -8.5q-81 0 -123.5 51t-42.5 139q0 91 45.5 140.5t120.5 49.5q37 0 65.5 -8.5t54.5 -23.5l-32 -86
+q-18 9 -32.5 12t-28.5 3q-29 0 -46 -19.5t-17 -67.5q0 -42 18 -64.5t52 -22.5q19 0 34 3.5t30 11.5z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="401"
+d="M121 674q28 14 72 24t101 10q60 0 84.5 -25t24.5 -62q0 -25 -7 -56.5t-15.5 -64.5t-15 -64.5t-6.5 -55.5h-90l-3 46h-3q-14 -17 -41 -33.5t-69 -16.5q-23 0 -40.5 7t-29 19t-17.5 27.5t-6 31.5q0 34 15 56.5t40 36.5t58 20t69 6q12 0 24 -0.5t24 -1.5q8 25 -1 40.5
+t-42 15.5q-38 0 -64.5 -7t-47.5 -15zM277 524q-8 1 -16.5 1.5t-16.5 0.5q-30 0 -51 -9t-21 -33q0 -13 7.5 -21.5t21.5 -8.5q30 0 44.5 11.5t24.5 23.5z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="465"
+d="M216 261l192 216l57 -58l-104 -122l-52 -37l33 -37l56 -121l-75 -54zM31 259l200 230l63 -64l-109 -126l-60 -37l39 -39l60 -126l-77 -59z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="527"
+d="M66 412h442v-226h-120v114h-322v112z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="343"
+d="M81 340h239l-25 -104h-239z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="693"
+d="M117 451q0 67 22.5 119.5t61 88.5t90 55t108.5 19q59 0 110.5 -19t90 -55t60.5 -88.5t22 -119.5q0 -68 -22.5 -120.5t-61.5 -88.5t-90.5 -54.5t-108.5 -18.5q-59 0 -110.5 18.5t-89.5 54.5t-60 88.5t-22 120.5zM211 451q0 -48 15 -84t41 -60t60 -36t72 -12
+q40 0 74.5 11.5t60 35.5t40 60t14.5 85q0 48 -15 84t-41 60t-60.5 36t-72.5 12q-42 0 -76.5 -13t-59.5 -38t-38.5 -60.5t-13.5 -80.5zM296 581q16 5 45 7.5t55 2.5q42 0 72 -17.5t30 -60.5q0 -32 -20.5 -49t-50.5 -19l28 -14l65 -109h-61l-63 104l-48 15v-119h-52v259z
+M385 546q-11 0 -21 -0.5t-16 -3.5v-71h34q29 0 45 9t16 31q0 35 -58 35z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="421"
+d="M157 658h308l-19 -92h-308z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="437"
+d="M121 548q0 37 13 67.5t35.5 52.5t52.5 34t63 12q34 0 64.5 -11t53 -32.5t35.5 -52.5t13 -70t-13 -69.5t-35.5 -51.5t-53 -32t-64.5 -11q-33 0 -63 11t-52.5 32t-35.5 51.5t-13 69.5zM221 548q0 -32 19 -50.5t46 -18.5t46 18.5t19 50.5t-19 51.5t-46 19.5t-46 -19.5
+t-19 -51.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="505"
+d="M58 517h162v165h117v-165h162v-112h-162v-106h-117v106h-162v112zM58 253h441v-112h-441v112z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="402"
+d="M446 707q-1 -60 -37.5 -110t-101.5 -98l-50 -25v-4l57 11h101l-22 -101h-297l16 71q29 18 67 44t71.5 55t56.5 59.5t24 57.5q0 18 -9.5 28t-35.5 10t-51 -9t-44 -19l-14 90q37 21 76.5 30.5t73.5 9.5q57 0 88 -26t31 -74z" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="402"
+d="M227 468q49 0 70 18.5t20 41.5q0 21 -14 30t-63 10h-41l8 38l85 81l46 24l-56 -6h-108l21 95h269l-14 -62l-102 -93l-35 -17v-5l27 3q37 -2 61 -26t24 -63q0 -42 -15.5 -73t-42.5 -51t-64 -30t-80 -10q-36 0 -67.5 6.5t-51.5 17.5l40 90q40 -19 83 -19z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="267"
+d="M210 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="mu" unicode="µ" horiz-adv-x="542"
+d="M238 500l-59 -273q-7 -31 -7 -59q0 -35 16 -53.5t51 -18.5q45 0 76 24t51 65l68 315h123l-72 -337q-8 -41 -14.5 -82.5t-5.5 -80.5h-90l-17 74h-3q-24 -35 -60.5 -60.5t-86.5 -25.5q-38 0 -56 17t-26 43h-5l-4 -115l-28 -133h-123l148 700h124z" />
+ <glyph glyph-name="mu" unicode="μ" horiz-adv-x="542"
+d="M238 500l-59 -273q-7 -31 -7 -59q0 -35 16 -53.5t51 -18.5q45 0 76 24t51 65l68 315h123l-72 -337q-8 -41 -14.5 -82.5t-5.5 -80.5h-90l-17 74h-3q-24 -35 -60.5 -60.5t-86.5 -25.5q-38 0 -56 17t-26 43h-5l-4 -115l-28 -133h-123l148 700h124z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="538"
+d="M399 700h106v-830h-106v830zM214 294q-33 0 -61 16.5t-48.5 45t-31.5 65t-11 77.5q0 40 13 76.5t37 64.5t58 44.5t76 16.5h74v-830h-106v424z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="253"
+d="M73 316q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="284"
+d="M112 -43q34 -2 52 -21t18 -48q0 -26 -11.5 -45t-31 -31.5t-46 -18.5t-56.5 -6q-38 0 -77 9l20 48q51 -5 70 6t19 25q0 32 -78 30l75 95h79z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="402"
+d="M140 480h93l35 164l19 46l-35 -32l-63 -37l-34 73l175 113h82l-70 -327h83l-21 -100h-285z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="399"
+d="M60 499q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM170 505q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5t23 88.5q0 49 -43 49q-17 0 -31 -10t-25 -26.5t-17 -39
+t-5 -47.5z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="465"
+d="M280 270l-191 -220l-58 57l104 123l52 37l-35 38l-55 121l76 53zM465 268l-200 -230l-63 63l109 126l57 43l-37 39l-62 124l85 56z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="840"
+d="M231 544l20 46l-36 -32l-63 -36l-37 75l179 110h81l-91 -427h-109zM766 78h-72l-17 -78h-96l17 78h-196l14 67l265 283h87l-55 -261h72zM635 253l17 53h-5l-31 -49l-60 -66l-41 -32l52 8h50zM618 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="862"
+d="M231 544l20 46l-36 -32l-63 -36l-37 75l179 110h81l-91 -427h-109zM824 327q-1 -60 -37.5 -110t-101.5 -98l-50 -25v-4l57 11h101l-22 -101h-297l16 71q29 18 67 44t71.5 55t56.5 59.5t24 57.5q0 18 -9.5 28t-35.5 10t-51 -9t-44 -19l-14 90q37 21 76.5 30.5t73.5 9.5
+q57 0 88 -26t31 -74zM619 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="864"
+d="M791 78h-72l-17 -78h-96l17 78h-196l14 67l265 283h87l-55 -261h72zM660 253l17 53h-5l-31 -49l-60 -66l-41 -32l52 8h50zM187 368q49 0 70 18.5t20 41.5q0 21 -14 30t-63 10h-41l8 38l85 81l46 24l-56 -6h-108l21 95h269l-14 -62l-102 -93l-35 -17v-5l27 3q37 -2 61 -26
+t24 -63q0 -42 -15.5 -73t-42.5 -51t-64 -30t-80 -10q-36 0 -67.5 6.5t-51.5 17.5l40 90q40 -19 83 -19zM643 715l85 -50l-430 -679l-86 53z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="430"
+d="M332 293q-6 -53 -24.5 -91.5t-43 -67t-52 -50t-50 -41.5t-37.5 -41t-15 -49q0 -27 15.5 -42t55.5 -15q31 0 68 13.5t66 32.5l30 -94q-41 -26 -89 -43t-117 -17q-84 0 -123 35.5t-39 95.5q0 53 16 89t41 63.5t55.5 49.5t58 46t49 53.5t29.5 72.5h106zM213 435
+q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="582"
+d="M491 752h-90l-131 88l6 30h140zM387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="582"
+d="M441 870h157l-6 -30l-172 -88h-104zM387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="582"
+d="M388 870h87l101 -93l-8 -39h-88l-45 41l-13 34l-27 -33l-67 -42h-94l9 40zM387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="582"
+d="M240 800q38 35 69 48t58 13q21 0 40.5 -5.5t38 -12t36 -12t35.5 -5.5q15 0 30 5t31 19l10 -67q-33 -27 -60 -37t-51 -10q-21 0 -39.5 5.5t-36.5 11.5t-35.5 11.5t-36.5 5.5q-18 0 -37.5 -7t-42.5 -26zM387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142
+l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="582"
+d="M246 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM450 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM387 155h-204l-83 -155h-138l389 705h96l91 -705h-131zM240 265h142l-16 156l1 110h-5l-40 -111z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="582"
+d="M286 771q0 18 6 34.5t20.5 29t39 19.5t62.5 7q70 0 99 -24t29 -66q0 -32 -20.5 -55.5t-72.5 -29.5l89 -686h-131l-20 155h-204l-83 -155h-138l382 693q-32 11 -45 31t-13 47zM382 265l-16 156l1 110h-5l-40 -111l-82 -155h142zM370 771q0 -31 44 -31q25 0 35 8t10 23
+q0 33 -45 33q-44 0 -44 -33z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="826"
+d="M449 530l-44 -94l-116 -155h114l52 249h-6zM379 170h-171l-128 -170h-146l547 700h133h271l-26 -122h-264l-35 -163h241l-26 -122h-240l-36 -171h269l-26 -122h-261h-138z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="537"
+d="M483 29q-65 -42 -157 -43l-22 -29q34 -2 52 -20.5t18 -47.5q0 -26 -11.5 -45t-31 -31.5t-46 -18.5t-56.5 -6q-38 0 -77 9l20 48q51 -5 70 6t19 25q0 17 -20 23.5t-58 5.5l69 88q-49 10 -85.5 35.5t-60.5 62.5t-36 83t-12 98q0 118 33 201.5t87 137t123.5 78.5t142.5 25
+q57 0 97.5 -8.5t63.5 -19.5l-51 -116q-20 11 -48 16.5t-71 5.5q-51 0 -95 -21t-76 -60t-50.5 -95t-18.5 -127q0 -85 42.5 -133t113.5 -48q45 0 74.5 9.5t55.5 23.5z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="503"
+d="M452 752h-90l-131 88l6 30h140zM168 700h130h264l-26 -122h-264l-35 -163h241l-27 -122h-239l-37 -171h269l-25 -122h-269h-130z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="503"
+d="M423 870h157l-6 -30l-172 -88h-104zM168 700h130h264l-26 -122h-264l-35 -163h241l-27 -122h-239l-37 -171h269l-25 -122h-269h-130z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="503"
+d="M359 870h87l101 -93l-8 -39h-88l-45 41l-13 34l-27 -33l-67 -42h-94l9 40zM168 700h130h264l-26 -122h-264l-35 -163h241l-27 -122h-239l-37 -171h269l-25 -122h-269h-130z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="503"
+d="M210 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM414 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM168 700h130h264l-26 -122h-264l-35 -163h241l-27 -122h-239l-37 -171h269l-25 -122h-269h-130z" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="278"
+d="M334 752h-90l-131 88l6 30h140zM183 700h129l-148 -700h-129z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="278"
+d="M303 870h157l-6 -30l-172 -88h-104zM183 700h129l-148 -700h-129z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="278"
+d="M241 870h87l101 -93l-8 -39h-88l-45 41l-13 34l-27 -33l-67 -42h-94l9 40zM183 700h129l-148 -700h-129z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="278"
+d="M92 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM296 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM183 700h129l-148 -700h-129z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="640"
+d="M40 401h85l63 299q21 3 46 5t47.5 3t36.5 1q10 0 26 0.5t35 0.5q62 0 112 -15.5t85.5 -47.5t55 -82t19.5 -119q0 -44 -7.5 -94.5t-25.5 -101.5t-49.5 -98t-79 -83t-114 -58t-154.5 -22q-15 0 -29 0.5t-22 0.5q-18 1 -43.5 2.5t-50 3t-36.5 3.5l68 322h-85zM254 401h132
+l-17 -80h-132l-43 -207q4 -1 12.5 -1.5t18.5 -1t19 -0.5h14q70 0 119 31.5t79.5 79t44 103t13.5 103.5q0 80 -33.5 120t-112.5 40q-19 0 -41 -1t-34 -3z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="631"
+d="M259 800q38 35 69 48t58 13q21 0 40.5 -5.5t38 -12t36 -12t35.5 -5.5q15 0 30 5t31 19l10 -67q-33 -27 -60 -37t-51 -10q-21 0 -39.5 5.5t-36.5 11.5t-35.5 11.5t-36.5 5.5q-18 0 -37.5 -7t-42.5 -26zM267 366l-33 112h-5l-9 -112l-77 -366h-123l150 705h90l172 -374
+l31 -109h6l7 109l79 369h123l-150 -705h-90z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="644"
+d="M511 752h-90l-131 88l6 30h140zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5
+t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="644"
+d="M491 870h157l-6 -30l-172 -88h-104zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43
+q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="644"
+d="M423 870h87l101 -93l-8 -39h-88l-45 41l-13 34l-27 -33l-67 -42h-94l9 40zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266
+q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="644"
+d="M268 800q38 35 69 48t58 13q21 0 40.5 -5.5t38 -12t36 -12t35.5 -5.5q15 0 30 5t31 19l10 -67q-33 -27 -60 -37t-51 -10q-21 0 -39.5 5.5t-36.5 11.5t-35.5 11.5t-36.5 5.5q-18 0 -37.5 -7t-42.5 -26zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5
+q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104
+t-15.5 -125.5z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="644"
+d="M270 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM474 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121
+q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="505"
+d="M146 547l131 -130l130 130l79 -81l-130 -127l130 -129l-79 -82l-130 131l-132 -132l-79 81l131 131l-129 127z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="644"
+d="M58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q86 0 142 -40l27 32l72 -62l-37 -45q15 -30 23.5 -69t8.5 -87q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-90 0 -149 41l-27 -32l-70 64l34 42q-16 32 -24.5 72t-8.5 89zM474 568q-29 24 -73 24
+q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5v-19t2 -18zM239 132q28 -24 74 -24t83.5 27.5t64.5 74t41.5 106.5t14.5 125v14.5t-1 13.5z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="602"
+d="M489 752h-90l-131 88l6 30h140zM531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5t-65.5 38.5t-37 59t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="602"
+d="M487 870h157l-6 -30l-172 -88h-104zM531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5t-65.5 38.5t-37 59t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="602"
+d="M409 870h87l101 -93l-8 -39h-88l-45 41l-13 34l-27 -33l-67 -42h-94l9 40zM531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5t-65.5 38.5t-37 59t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68
+t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="602"
+d="M256 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM460 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5
+t-65.5 38.5t-37 59t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="569"
+d="M451 870h157l-6 -30l-172 -88h-104zM231 260l-125 440h144l65 -263l-2 -74h4l31 76l175 261h149l-311 -439l-55 -261h-129z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="550"
+d="M169 700h129l-15 -71q13 1 26 1h26q51 0 94.5 -11.5t76 -35.5t50.5 -61.5t18 -89.5q0 -78 -27 -130.5t-71.5 -85t-101.5 -46t-116 -13.5h-15.5t-22 0.5t-22 1t-15.5 1.5l-33 -160h-130zM257 507q-12 -58 -24 -114t-24 -113q4 -1 11 -2t15.5 -1.5t16 -1t11.5 -0.5
+q34 0 65.5 7t55.5 23.5t38.5 43.5t14.5 66q0 30 -9.5 48.5t-25.5 29.5t-37.5 15t-45.5 4q-18 0 -34.5 -1.5t-27.5 -3.5z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="608"
+d="M153 528q12 57 35 92t55 54.5t72 26.5t87 7q51 0 86 -11t57 -29.5t32 -43t10 -52.5q0 -35 -11.5 -60t-28.5 -43t-37.5 -31t-37.5 -25t-28.5 -25t-11.5 -30t11.5 -28t28.5 -20t37.5 -19t37.5 -25.5t28.5 -39t11.5 -59.5q0 -39 -17.5 -72.5t-48 -57.5t-72 -37.5
+t-89.5 -13.5q-41 0 -81 11.5t-65 28.5l56 97q21 -13 44.5 -23t57.5 -10q15 0 30 5t27 14t19.5 22.5t7.5 30.5q0 19 -11.5 31.5t-29 22.5t-38 20.5t-38 25t-29 35.5t-11.5 53q0 29 11.5 50.5t29 37.5t37.5 28.5t37.5 24.5t29 25.5t11.5 31.5q0 23 -18 37.5t-52 14.5
+q-48 0 -77 -26.5t-40 -85.5l-89 -488q-9 -51 -21 -90t-32.5 -65t-50.5 -39.5t-74 -13.5q-36 0 -70.5 5.5t-59.5 22.5l34 91q17 -7 34 -9t43 -2q32 0 49.5 25t25.5 75l71 398h-82l20 102h81l6 28v0z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5zM387 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5zM381 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5zM345 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5zM196 658q35 37 61.5 51t48.5 14q18 0 33.5 -7t31 -15t31 -15t33.5 -7q14 0 30.5 6t36.5 21l4 -70q-32 -32 -57 -44.5t-46 -12.5
+q-18 0 -34 6.5t-32 14.5t-32 14.5t-34 6.5q-15 0 -33 -6t-38 -22z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="503"
+d="M444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5
+t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5zM170 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM378 652q0 32 18.5 50.5
+t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="503"
+d="M254 647q0 42 28.5 69t82.5 27q51 0 81 -24.5t30 -71.5q0 -39 -29.5 -66.5t-81.5 -27.5q-53 0 -82 25.5t-29 68.5zM326 647q0 -16 11.5 -24.5t27.5 -8.5q17 0 28 8t11 25t-11.5 25.5t-27.5 8.5t-27.5 -8t-11.5 -26zM444 200q-8 -38 -11.5 -77t-3.5 -74q0 -14 0.5 -26.5
+t1.5 -23.5h-91l-14 86h-4q-11 -18 -28.5 -35.5t-38.5 -32t-44.5 -23t-48.5 -8.5q-66 0 -97.5 43t-31.5 115q0 73 18.5 140t57.5 118t98.5 81.5t141.5 30.5q35 0 76.5 -6.5t80.5 -17.5zM209 89q18 0 34 7.5t29.5 19.5t24 26t18.5 26l50 233q-11 5 -25.5 7.5t-28.5 2.5
+q-36 0 -64 -21.5t-47.5 -56t-29.5 -78t-10 -87.5q0 -32 10.5 -55.5t38.5 -23.5z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="744"
+d="M312 223q-8 1 -16.5 1h-16.5q-57 0 -96 -18.5t-39 -57.5q0 -27 14 -39t37 -12q18 0 34.5 7.5t30.5 18t25 22t18 20.5zM315 77q-32 -36 -74 -60.5t-99 -24.5q-33 0 -56.5 10.5t-38.5 28t-22.5 40.5t-7.5 47q0 49 22 84t60 57t88 32.5t107 10.5h16.5t16.5 -1q11 38 11 59
+q0 24 -15 35.5t-51 11.5q-33 0 -70 -8t-69 -21l-18 93q41 20 94.5 29.5t103.5 9.5q46 0 78 -14.5t45 -45.5q29 31 72.5 47.5t88.5 16.5q42 0 71.5 -9.5t48 -26.5t27 -39.5t8.5 -49.5q0 -56 -26.5 -90t-71.5 -53.5t-104 -26.5t-123 -7q-1 -8 -1.5 -15.5t-0.5 -14.5
+q0 -45 23 -69t76 -24q38 0 71.5 10.5t53.5 22.5l23 -86q-34 -24 -85.5 -37t-102.5 -13q-66 0 -106.5 24t-57.5 67h-5zM447 292q32 0 65 1.5t60 9t44 23t17 42.5q0 17 -12 31.5t-45 14.5q-53 0 -83.5 -35.5t-45.5 -86.5z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="412"
+d="M370 41q-26 -19 -58 -33t-66 -19l-24 -32q34 -2 52 -20.5t18 -47.5q0 -26 -11.5 -45t-31 -31.5t-46 -18.5t-56.5 -6q-38 0 -77 9l20 48q51 -5 70 6t19 25q0 17 -20 23.5t-58 5.5l66 85q-36 6 -61 21.5t-41 38t-23.5 50.5t-7.5 58q0 84 24 150t63.5 111.5t90 70
+t103.5 24.5q47 0 74.5 -9t49.5 -20l-46 -98q-19 11 -39.5 15t-44.5 4q-27 0 -52.5 -17.5t-46 -46t-32.5 -66.5t-12 -78q0 -51 22 -77.5t58 -26.5q30 0 55.5 9.5t45.5 21.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="466"
+d="M402 48q-31 -26 -80 -44t-114 -18q-81 0 -127.5 47.5t-46.5 132.5q0 80 25 144.5t65.5 109.5t91.5 69.5t102 24.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5
+q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26zM176 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85zM367 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="466"
+d="M402 48q-31 -26 -80 -44t-114 -18q-81 0 -127.5 47.5t-46.5 132.5q0 80 25 144.5t65.5 109.5t91.5 69.5t102 24.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5
+q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26zM176 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85zM365 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="466"
+d="M402 48q-31 -26 -80 -44t-114 -18q-81 0 -127.5 47.5t-46.5 132.5q0 80 25 144.5t65.5 109.5t91.5 69.5t102 24.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5
+q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26zM176 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85zM322 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="466"
+d="M402 48q-31 -26 -80 -44t-114 -18q-81 0 -127.5 47.5t-46.5 132.5q0 80 25 144.5t65.5 109.5t91.5 69.5t102 24.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5
+q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26zM176 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85zM163 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM371 652
+q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="256"
+d="M133 500h123l-106 -500h-123zM265 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="256"
+d="M133 500h123l-106 -500h-123zM237 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="256"
+d="M133 500h123l-106 -500h-123zM204 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="256"
+d="M133 500h123l-106 -500h-123zM55 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM263 652q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="eth" unicode="ð" horiz-adv-x="508"
+d="M262 592l70 29q-18 18 -39.5 31t-44.5 21l97 41q45 -17 82 -54l73 30l28 -54l-64 -27q17 -31 27 -69t10 -83q0 -123 -23.5 -212t-63.5 -146.5t-92.5 -85t-110.5 -27.5q-80 0 -127 47.5t-47 138.5q0 70 20.5 130t55 104t80 68.5t96.5 24.5q69 0 101 -38q2 32 -4 58.5
+t-17 49.5l-75 -31zM164 177q0 -42 16.5 -65t45.5 -23q39 0 66.5 28t44.5 68.5t25 86.5t7 81q-8 20 -26.5 32t-44.5 12q-30 0 -54.5 -19t-42 -50t-27.5 -70.5t-10 -80.5z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="521"
+d="M295 0l66 310q6 28 6 49q0 22 -9 34.5t-33 12.5q-18 0 -36 -9t-34 -24t-30 -33.5t-24 -37.5l-64 -302h-123l106 500h93l-5 -88h4q13 16 30.5 34t40.5 33t51.5 25t64.5 10q45 0 72 -24.5t27 -81.5q0 -15 -1.5 -32t-6.5 -37l-72 -339h-123zM202 658q35 37 61.5 51t48.5 14
+q18 0 33.5 -7t31 -15t31 -15t33.5 -7q14 0 30.5 6t36.5 21l4 -70q-32 -32 -57 -44.5t-46 -12.5q-18 0 -34 6.5t-32 14.5t-32 14.5t-34 6.5q-15 0 -33 -6t-38 -22z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM375 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM363 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM319 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM178 658q35 37 61.5 51t48.5 14q18 0 33.5 -7t31 -15t31 -15t33.5 -7q14 0 30.5 6t36.5 21l4 -70q-32 -32 -57 -44.5t-46 -12.5q-18 0 -34 6.5t-32 14.5t-32 14.5t-34 6.5q-15 0 -33 -6t-38 -22z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q48 0 81 -15t53.5 -40t29.5 -57t9 -66q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-47 0 -80 15.5t-54.5 40.5t-31.5 56.5t-10 63.5zM161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5
+t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM163 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM371 652q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5
+t-18.5 50.5z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="505"
+d="M58 394h442v-112h-442v112zM199 534q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56zM199 139q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="496"
+d="M34 162q0 79 22.5 144t60 111t87 71.5t103.5 25.5q32 0 57 -7t44 -19l34 38l64 -59l-42 -47q16 -38 16 -84q0 -78 -22 -142.5t-59 -110.5t-86 -71.5t-103 -25.5q-34 0 -60.5 8.5t-46.5 22.5l-37 -41l-66 60l47 54q-13 33 -13 72zM176 114q16 -25 50 -25q23 0 45 19.5
+t39.5 51t29 71.5t13.5 81zM337 392q-16 19 -48 19q-23 0 -45 -18.5t-39.5 -48.5t-29.5 -69t-14 -81z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123zM372 566h-69l-91 124l7 30h129z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123zM351 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123zM325 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123zM172 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18t-18.5 50zM380 652q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="452"
+d="M216 219l1 -78h6l27 79l136 280h131l-240 -449q-30 -56 -56.5 -103t-53.5 -81t-56 -53t-62 -19q-44 0 -66 15l33 98q6 -3 12.5 -4t12.5 -1q24 0 49 23t50 74l-94 500h141zM330 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="506"
+d="M165 700h123l-62 -268h4q12 16 27 31t34 26t42 18t52 7q51 0 82 -35t31 -110q0 -85 -22.5 -155.5t-60 -121t-88 -78.5t-105.5 -28q-26 0 -49 5t-34 13l-43 -204h-122zM160 106q25 -17 56 -17t58.5 21t48 56t32.5 81.5t12 97.5q0 29 -11.5 47.5t-34.5 18.5q-18 0 -35 -9
+t-32 -22.5t-27 -30.5t-21 -33z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="452"
+d="M216 219l1 -78h6l27 79l136 280h131l-240 -449q-30 -56 -56.5 -103t-53.5 -81t-56 -53t-62 -19q-44 0 -66 15l33 98q6 -3 12.5 -4t12.5 -1q24 0 49 23t50 74l-94 500h141zM131 651q0 33 18.5 51.5t47.5 18.5t47.5 -18.5t18.5 -51.5q0 -32 -18.5 -50t-47.5 -18t-47.5 18
+t-18.5 50zM339 652q0 32 18.5 50.5t47.5 18.5t47.5 -18.5t18.5 -50.5t-18.5 -50.5t-47.5 -18.5t-47.5 18.5t-18.5 50.5z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="495"
+d="M126 -113q0 17 6.5 30t17 22t23.5 14t27 5q35 0 49.5 -19t13.5 -51q0 -36 -14 -63.5t-34.5 -47.5t-42.5 -32.5t-38 -17.5l-21 54q16 7 31.5 19.5t23.5 32.5q-19 3 -30.5 16.5t-11.5 37.5zM441 0h-291h-130l148 700h130l-123 -578h291z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="877"
+d="M514 567q-18 12 -42.5 18.5t-64.5 6.5q-47 0 -85.5 -24t-67 -67t-44 -103t-15.5 -132q0 -26 5 -53.5t18.5 -51t38 -38.5t63.5 -15q28 0 49.5 3.5t51.5 15.5zM394 0q-20 -7 -46.5 -10.5t-54.5 -3.5q-43 0 -85 13t-75.5 44.5t-54 85t-20.5 133.5q0 105 27 189t76 142.5
+t116 89.5t147 31q38 0 65.5 -4t52.5 -10h394l-26 -122h-264l-35 -163h241l-26 -122h-240l-36 -171h268l-25 -122h-399z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="769"
+d="M161 179q0 -90 65 -90q24 0 47 21t41 55t28.5 77t10.5 86q0 40 -13.5 61.5t-50.5 21.5q-24 0 -47 -20t-41 -52.5t-29 -74.5t-11 -85zM371 65q-25 -34 -68 -56.5t-94 -22.5q-47 0 -80 15.5t-54 40.5t-31 56.5t-10 63.5q0 79 22.5 144t60.5 111t87.5 71.5t103.5 25.5
+t88.5 -22t53.5 -60q30 35 72.5 58.5t98.5 23.5q41 0 70.5 -10.5t48.5 -29t28 -42.5t9 -51q0 -41 -21 -72t-58.5 -51.5t-90.5 -31t-116 -10.5q-8 0 -15 0.5t-15 0.5q-2 -12 -3 -21.5t-1 -17.5q0 -45 23.5 -67t66.5 -22q44 0 79 13t53 26l26 -80q-31 -26 -80 -44t-114 -18
+q-29 0 -52 6.5t-40 18t-29 25.5t-19 29zM479 295q28 0 59.5 2t58.5 9.5t45 22t18 39.5q0 15 -11 30.5t-46 15.5q-44 0 -76.5 -34t-47.5 -85z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="510"
+d="M428 737h-84l-101 94l8 39h92l41 -45l12 -30l25 29l64 46h98l-8 -40zM502 559q-19 12 -56 24.5t-82 12.5q-23 0 -45 -4.5t-39 -14.5t-27 -26t-10 -38q0 -29 18 -49t45.5 -37.5t59 -35.5t59 -42t45.5 -57.5t18 -82.5q0 -59 -20.5 -101.5t-58 -69.5t-90 -39.5t-116.5 -12.5
+q-35 0 -66.5 4t-58.5 10t-47.5 13.5t-32.5 14.5l67 116q10 -6 26 -13t36.5 -13t44.5 -10t48 -4q28 0 53 4.5t43.5 15t29 26.5t10.5 40q0 27 -18 46t-45.5 36t-59 35.5t-59 43.5t-45.5 60.5t-18 86.5q0 58 20.5 99t55.5 67t82 38t101 12q29 0 58 -3t55 -8.5t48 -13t37 -16.5z
+" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="396"
+d="M308 550h-87l-70 182h103l23 -66l5 -49l28 49l56 66h98zM38 117q20 -11 51.5 -19.5t66.5 -8.5t53.5 13.5t19.5 41.5q0 20 -12 34.5t-30.5 27.5t-39.5 26.5t-39.5 31t-30.5 41.5t-12 58q0 33 13 61t36.5 48t57 31t75.5 11q58 0 96 -8.5t60 -21.5l-34 -94q-20 9 -48.5 15
+t-59.5 6q-32 0 -50.5 -11t-18.5 -35q0 -16 12 -28.5t30.5 -25.5t39.5 -26.5t39.5 -32.5t30.5 -43.5t12 -58.5q0 -83 -54 -123.5t-144 -40.5q-51 0 -93.5 9.5t-65.5 23.5z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="512"
+d="M241 500l-65 -309q-6 -30 -6 -50t8 -31t28 -11q17 0 34.5 8.5t33.5 22t29.5 30t22.5 32.5l64 308h123l-63 -300q-5 -20 -8.5 -47t-6.5 -55.5t-4 -54.5t0 -43h-99l-5 90h-4q-14 -19 -32.5 -37.5t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323
+h123zM191 658h308l-19 -92h-308z" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="602"
+d="M300 875q18 -26 44 -40t65 -14q55 0 92 15t65 39l49 -32q-17 -30 -40 -51.5t-50 -35t-57.5 -20t-61.5 -6.5q-26 0 -50.5 7.5t-45 22t-36 34.5t-22.5 44zM531 700h122l-95 -452q-15 -72 -39 -121.5t-58 -80.5t-80 -44.5t-106 -13.5q-58 0 -98 13.5t-65.5 38.5t-37 59
+t-11.5 75q0 20 2.5 41t7.5 44l94 441h129l-92 -440q-8 -38 -8 -62q0 -48 25 -68t73 -20q60 0 93 35t50 113z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="569"
+d="M240 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM444 798q0 29 20 43.5t52 14.5t52 -14.5t20 -43.5t-20 -43t-52 -14t-52 14t-20 43zM231 260l-125 440h144l65 -263l-2 -74h4l31 76l175 261h149l-311 -439l-55 -261h-129z" />
+ <glyph glyph-name="Zcaron" unicode="Ž" horiz-adv-x="518"
+d="M409 737h-84l-101 94l8 39h92l41 -45l12 -30l25 29l64 46h98l-8 -40zM15 122l360 416l58 40h-321l25 122h461l-25 -122l-362 -419l-56 -37h321l-26 -122h-461z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="435"
+d="M324 550h-87l-70 182h103l23 -66l5 -49l28 49l56 66h98zM9 108l225 239l71 45h-236l24 108h372l-23 -108l-230 -243l-64 -41h234l-23 -108h-372z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M410 390l-71 -424q-6 -37 -17.5 -68.5t-32 -55t-51 -37t-74.5 -13.5q-14 0 -34.5 2t-41.5 5t-40.5 7.5t-31.5 9.5l21 105q23 -10 44 -14.5t49 -4.5q36 0 56 24.5t29 81.5l61 382h-78v110h96l11 67q6 37 16.5 64.5t29 46t47.5 27.5t72 9q16 0 36.5 -2.5t41.5 -7t41 -10
+t35 -12.5l-32 -97q-49 19 -95 19q-32 0 -44.5 -15.5t-18.5 -55.5l-5 -33h119v-110h-138z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="398"
+d="M285 732h82l67 -182h-96l-24 66l-4 49l-27 -49l-57 -66h-97z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="349"
+d="M126 658q35 37 61.5 51t48.5 14q18 0 33.5 -7t31 -15t31 -15t33.5 -7q14 0 30.5 6t36.5 21l4 -70q-32 -32 -57 -44.5t-46 -12.5q-18 0 -34 6.5t-32 14.5t-32 14.5t-34 6.5q-15 0 -33 -6t-38 -22z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="278"
+d="M183 700h129l-148 -700h-129zM139 792q0 30 15 47t41 17q25 0 40.5 -17t15.5 -47q0 -29 -15.5 -45.5t-40.5 -16.5q-26 0 -41 16.5t-15 45.5zM272 792q0 30 15.5 47t40.5 17t41 -17t16 -47q0 -29 -16 -45.5t-41 -16.5t-40.5 16.5t-15.5 45.5z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="547"
+d="M614 578h-194l-123 -578h-129l122 578h-194l26 122h517z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="627"
+d="M130 340h419l-25 -104h-419z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="779"
+d="M130 340h571l-25 -104h-571z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="215"
+d="M238 631q0 -39 -23 -58t-50 -19q-17 0 -29.5 6.5t-20.5 17t-12 23t-4 25.5q0 40 17 71t40.5 52.5t47 34t37.5 15.5l19 -54q-20 -8 -37.5 -25.5t-23.5 -37.5q17 0 28 -15t11 -36z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="215"
+d="M121 637q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="226"
+d="M30 55q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="379"
+d="M402 631q0 -39 -23 -58t-50 -19q-17 0 -29.5 6.5t-20.5 17t-12 23t-4 25.5q0 40 17 71t40.5 52.5t47 34t37.5 15.5l19 -54q-20 -8 -37.5 -25.5t-23.5 -37.5q17 0 28 -15t11 -36zM238 631q0 -39 -23 -58t-50 -19q-17 0 -29.5 6.5t-20.5 17t-12 23t-4 25.5q0 40 17 71
+t40.5 52.5t47 34t37.5 15.5l19 -54q-20 -8 -37.5 -25.5t-23.5 -37.5q17 0 28 -15t11 -36z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="379"
+d="M284 637q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5zM121 637q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53
+t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="389"
+d="M192 55q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5zM30 55q0 18 7.5 31.5t18.5 22.5t24 13.5t25 4.5q35 0 50 -18t15 -49q0 -41 -15.5 -72t-38 -53
+t-47 -35t-42.5 -19l-19 55q21 9 38.5 24t24.5 38q-18 2 -30 16.5t-11 40.5z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="490"
+d="M111 513h110l46 -16l-4 54l32 149h117l-32 -149l-26 -54l53 16h110l-24 -113h-112l-44 16l5 -49l-78 -367l-58 -200h-87l28 201l78 366l24 49l-51 -16h-111z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="490"
+d="M225 371l24 44l-51 -15h-111l24 113h110l46 -15l-4 50l32 152h117l-32 -152l-25 -50l52 15h110l-24 -113h-112l-44 15l5 -44l-17 -84l-25 -45l50 15h112l-23 -113h-111l-45 15l4 -49l-23 -110l-59 -200h-85l27 201l23 109l25 49l-52 -15h-111l24 113h110l46 -15l-4 45z
+" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="452"
+d="M98 311q0 34 12 62t32.5 48t48 31.5t59.5 11.5t60 -10.5t48.5 -30t32.5 -48t12 -64.5t-12 -64t-32.5 -47.5t-48.5 -30t-60 -10.5t-59.5 10.5t-48 30t-32.5 47.5t-12 64z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="769"
+d="M535 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56zM276 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21q-36 0 -58 21t-22 56zM19 66q0 35 22 55.5t58 20.5q37 0 59 -20.5t22 -55.5t-22 -56t-59 -21
+q-36 0 -58 21t-22 56z" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="1144"
+d="M641 714l73 -66l-576 -662l-73 69zM55 499q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM165 505q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5t23 88.5q0 49 -43 49
+q-17 0 -31 -10t-25 -26.5t-17 -39t-5 -47.5zM391 128q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM501 134q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5t23 88.5
+q0 49 -43 49q-17 0 -31 -10t-25 -26.5t-17 -39t-5 -47.5zM760 128q0 54 18.5 94t48.5 66.5t66.5 39.5t72.5 13q66 0 100.5 -30.5t34.5 -89.5q0 -57 -17 -98.5t-46 -68.5t-66.5 -40t-77.5 -13q-62 0 -98 34.5t-36 92.5zM870 134q-1 -22 10 -35.5t32 -13.5q33 0 56 34.5
+t23 88.5q0 49 -43 49q-17 0 -31 -10t-25 -26.5t-17 -39t-5 -47.5z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="293"
+d="M32 259l200 230l60 -64l-106 -126l-55 -39l36 -37l60 -123l-84 -62z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="293"
+d="M293 268l-200 -230l-62 61l108 127l55 41l-35 39l-62 124l86 59z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M45 324h65q4 30 10 58h-95l52 93h72q33 76 84 128q56 58 123 84.5t127 26.5q49 0 85 -9.5t60 -23.5l-53 -90q-18 9 -44.5 14t-63.5 5q-39 0 -82.5 -21t-80.5 -64q-19 -22 -34 -50h254l-46 -93h-244q-6 -27 -10 -58h222l-46 -93h-178q2 -22 6 -41q7 -31 24.5 -53.5
+t46 -34.5t72.5 -12q37 0 67 9t56 23l17 -91q-34 -22 -83 -33.5t-97 -11.5q-59 0 -101.5 18.5t-70.5 51.5t-41 78q-13 44 -13 97h-111z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="953"
+d="M457 590h-118v-250h-129v250h-118v110h365v-110zM863 484l16 103h-5l-36 -85l-68 -117h-78l-69 114l-38 88h-6l24 -102v-145h-111v360h130l91 -150l24 -63h1l25 65l84 148h129v-360h-113v144z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="512"
+d="M241 500l-65 -308q-3 -15 -5 -27t-2 -23q0 -20 8.5 -31.5t28.5 -11.5q17 0 35 9t34.5 22.5t30 30t22.5 32.5l62 307h123l-85 -500q-23 -106 -67.5 -157t-119.5 -51q-14 0 -28.5 1.5t-30.5 5.5l23 111q24 -2 41 2.5t28 16t18.5 29.5t12.5 42l23 90h-4q-15 -19 -33.5 -37.5
+t-41 -33.5t-49 -24t-56.5 -9q-47 0 -76 23.5t-29 86.5q0 37 10 81l69 323h123zM298 704q-2 -39 10 -55t37 -16q26 0 45.5 16t33.5 54l88 -25q-25 -65 -76 -96.5t-112 -31.5q-29 0 -55 7t-44.5 22.5t-28.5 39.5t-8 59z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="644"
+d="M368 798q0 31 24 46t59 15q33 0 58 -15t25 -46q0 -30 -24 -45.5t-59 -15.5t-59 15t-24 46zM58 262q0 93 25.5 175.5t72.5 144t113.5 97t148.5 35.5q54 0 97.5 -16t74 -49.5t47.5 -84.5t17 -121q0 -94 -25.5 -177t-72 -145.5t-111 -98.5t-142.5 -36q-118 0 -181 69.5
+t-64 206.5zM195 266q0 -72 27.5 -115t90.5 -43q46 0 83.5 27.5t64.5 74t41.5 106.5t14.5 125q0 79 -31 115t-85 36q-45 0 -82.5 -26t-65 -70.5t-43 -104t-15.5 -125.5z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="272"
+d="M168 148q-6 -29 0.5 -43t21.5 -14q28 0 53 11l-3 -89q-18 -11 -52 -18t-67 -7q-43 0 -65.5 16.5t-22.5 61.5q0 23 6 53l123 581h123zM360 701h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="547"
+d="M448 870h157l-6 -30l-172 -88h-104zM614 578h-194l-123 -578h-129l122 578h-194l26 122h517z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="320"
+d="M64 500h65l20 94l131 37l-28 -131h117l-23 -103h-116l-49 -226q-6 -27 -6 -44q0 -22 10 -30t30 -8q19 0 34.5 4t32.5 13v-92q-11 -6 -26.5 -11.5t-33.5 -9t-37 -5.5t-35 -2q-51 0 -78.5 23.5t-27.5 71.5q0 10 1.5 21t3.5 23l58 272h-67zM390 701h125l-6 -30l-133 -124
+h-69z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="579"
+d="M464 870h157l-6 -30l-172 -88h-104zM288 290l-7 -119h4l44 119l216 410h146l-395 -705h-94l-101 705h142z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="448"
+d="M209 238l2 -77h3l30 79l137 260h139l-306 -505h-76l-98 505h136zM327 720h125l-6 -30l-133 -124h-69z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="507"
+d="M141 309l23 108h23q9 0 21 0.5t24.5 1.5t24.5 2t20 2q20 3 40 9.5t35.5 18.5t25.5 29t10 41q0 32 -24.5 50.5t-72.5 18.5q-42 0 -80.5 -12t-63.5 -23l-9 116q12 6 32.5 13t46 13t55.5 10.5t60 4.5q42 0 77 -9.5t61 -28.5t40.5 -47.5t14.5 -65.5q0 -69 -37.5 -121
+t-111.5 -69v-5q19 -6 37 -16.5t31.5 -27.5t22 -41t8.5 -57q0 -61 -24 -105.5t-65.5 -74t-97.5 -44t-119 -14.5t-112.5 11t-73.5 26l58 119q20 -11 58 -22.5t94 -11.5q24 0 50 6t47 19.5t34.5 35.5t13.5 54q0 48 -34.5 66t-98.5 20h-38h-26z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSans-BoldItalic.ttf has changed
Binary file web/res/fonts/PTSans-BoldItalic.woff has changed
Binary file web/res/fonts/PTSans-Italic.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSans-Italic.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,628 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 10:26:21 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-Italic" horiz-adv-x="520" >
+ <font-face
+ font-family="PT Sans"
+ font-weight="400"
+ font-style="italic"
+ font-stretch="normal"
+ units-per-em="1000"
+ panose-1="2 11 5 3 2 2 3 9 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-114 -245 1006 871"
+ underline-thickness="50"
+ underline-position="-50"
+ slope="-12"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="267"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="273"
+d="M237 700h80l-73 -347l-54 -176h-46l20 176zM87 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="303"
+d="M231 700h74l-70 -193h-45zM120 700h74l-70 -193h-45z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M316 225h-106l-39 -167h-68l39 167h-78l14 64h80l31 131h-75l14 64h76l38 158h68l-38 -158h106l38 158h68l-38 -158h77l-16 -64h-76l-31 -131h73l-16 -64h-73l-39 -167h-68zM226 289h106l31 131h-106z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M198 -9q-48 7 -84 26t-53 34l35 61q16 -11 46.5 -28t70.5 -24l60 281q-22 16 -43.5 34t-38 39t-27 47.5t-10.5 60.5q0 44 14.5 77.5t41 57t62.5 37t79 16.5l20 90h64l-19 -89q43 -4 73.5 -15t51.5 -22l-34 -63q-17 8 -44 16.5t-62 12.5l-54 -251q23 -17 45.5 -36t40 -43
+t28.5 -54.5t11 -70.5q0 -41 -14 -75.5t-41 -60t-66.5 -41.5t-89.5 -19q0 -1 -3 -14.5t-6 -30.5q-4 -19 -9 -44h-64zM390 178q0 45 -22 75.5t-53 56.5l-54 -252q60 4 94.5 36t34.5 84zM236 534q0 -38 20 -64.5t49 -49.5l47 221q-57 -4 -86.5 -33.5t-29.5 -73.5z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="736"
+d="M601 713l50 -39l-513 -686l-50 39zM60 490q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM129 498q0 -32 14.5 -50t43.5 -18q21 0 40.5 11t34.5 31.5t23.5 50t8.5 66.5q0 35 -15.5 50
+t-43.5 15q-21 0 -40.5 -12.5t-34 -33.5t-23 -49.5t-8.5 -60.5zM386 119q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM455 127q0 -32 14.5 -50t43.5 -18q21 0 40.5 11t34.5 31.5t23.5 50
+t8.5 66.5q0 35 -15.5 50t-43.5 15q-21 0 -40.5 -12.5t-34 -33.5t-23 -49.5t-8.5 -60.5z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="772"
+d="M87 148q0 47 19.5 90t50.5 80t70 66.5t78 49.5q-7 18 -12 32.5t-8.5 29t-5 30t-1.5 35.5q0 27 10 54t31 48.5t52.5 35t75.5 13.5q35 0 56.5 -9.5t33.5 -23.5t16 -31t4 -32q0 -57 -43.5 -105.5t-118.5 -89.5q10 -29 23.5 -59.5t29.5 -60.5t34 -59.5t36 -54.5
+q13 12 27.5 30.5t28.5 39t27 42.5t24 42l53 -29q-9 -17 -25 -40.5t-34 -48t-36 -47t-32 -37.5q32 -40 54.5 -61t47.5 -37l-58 -56q-23 13 -49 38t-51 58q-21 -18 -45 -34.5t-52 -29.5t-60.5 -21t-69.5 -8q-42 0 -75.5 12t-57 33.5t-36 50.5t-12.5 64zM460 131
+q-21 29 -40.5 63t-36.5 68t-30.5 65.5t-22.5 55.5q-36 -23 -66 -49t-51.5 -53.5t-33.5 -56.5t-12 -59q0 -54 33 -81t93 -27q24 0 48 6.5t46 17t40.5 23.5t32.5 27zM353 563q0 -15 1 -27t3.5 -22.5t6 -21.5t9.5 -26q57 34 85.5 65t28.5 69q0 20 -11.5 34t-39.5 14
+q-23 0 -38.5 -7t-25.5 -19.5t-14.5 -28t-4.5 -30.5z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="202"
+d="M143 700h74l-70 -193h-45z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="266"
+d="M145 -218q-54 79 -72.5 152.5t-18.5 140.5q0 101 23 194t62 174t90 148.5t107 120.5l37 -35q-56 -64 -100.5 -133.5t-76.5 -144.5t-48 -154.5t-16 -157.5q0 -66 13.5 -134t45.5 -136z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="266"
+d="M137 708q23 -30 39 -67t26 -75t14.5 -75.5t4.5 -71.5q0 -100 -22.5 -193.5t-61 -175t-89 -149.5t-105.5 -121l-38 35q49 53 91.5 121t75.5 143.5t52 156t19 155.5q0 98 -12.5 165t-43.5 119z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="333"
+d="M161 715l25 -42l18 -56l21 57l24 40l48 -26l-25 -43l-47 -48l68 12h48v-56h-45l-65 12l46 -48l24 -39l-48 -28l-25 42l-24 61l-18 -58l-25 -42l-50 28l26 42l43 42l-59 -12h-50v56h50l63 -12l-45 44l-27 46z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="480"
+d="M55 374h176v181h72v-181h176v-72h-176v-181h-72v181h-176v72z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="195"
+d="M17 35q0 26 17 44t49 18q25 0 38.5 -17t13.5 -39q0 -31 -10.5 -60.5t-29.5 -54.5t-44.5 -44.5t-55.5 -30.5l-16 39q38 14 61 44t28 59q-4 -2 -10 -2q-14 0 -27.5 12t-13.5 32z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="342"
+d="M79 322h230l-17 -68h-229z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="211"
+d="M35 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="336"
+d="M428 712l57 -31l-521 -825l-57 32z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M57 219q0 105 22.5 195.5t62 156.5t94.5 103.5t121 37.5q85 0 131 -55t46 -175q0 -90 -19.5 -178t-57 -158.5t-92.5 -114t-127 -43.5q-51 0 -85.5 19.5t-56 52t-30.5 74t-9 85.5zM135 223q0 -51 10 -83.5t26.5 -50t37 -24.5t41.5 -7q45 0 83 35.5t65 94.5t42.5 133
+t15.5 151q0 86 -24 128t-87 42q-40 0 -77.5 -31t-67 -87t-47.5 -133t-18 -168z" />
+ <glyph glyph-name="one" unicode="1"
+d="M78 74h133l104 484l22 59l-49 -47l-120 -79l-28 51l247 170h34l-136 -638h130l-15 -74h-337z" />
+ <glyph glyph-name="two" unicode="2"
+d="M515 571q0 -52 -29 -113t-73.5 -122.5t-97.5 -120t-102 -105.5l-55 -43v-4l62 11h205l-14 -74h-379l6 29q25 25 64.5 62.5t84 83t89.5 95.5t81.5 100.5t58 97.5t21.5 87q0 19 -4 35t-13 27.5t-26 18t-44 6.5q-36 0 -70 -14.5t-72 -39.5l-21 60q48 35 92 49.5t96 14.5
+q70 0 105 -39.5t35 -101.5z" />
+ <glyph glyph-name="three" unicode="3"
+d="M192 58q47 0 82.5 15t58 39.5t34.5 56t12 64.5q0 52 -26 80t-97 28h-72l6 29l182 222l52 44l-63 -10h-185l14 74h340l-6 -29l-201 -242l-39 -29v-2l33 7q28 0 53 -9.5t44.5 -29t31 -49.5t11.5 -72q0 -54 -17.5 -100.5t-52 -81.5t-86.5 -55t-121 -20q-43 0 -77.5 7
+t-59.5 18l36 71q20 -11 48 -18.5t65 -7.5z" />
+ <glyph glyph-name="four" unicode="4"
+d="M514 215h-113l-45 -215h-73l45 215h-294l7 33l415 463h51l-91 -428h112zM390 503l27 82h-4l-47 -68l-173 -191l-55 -50l67 7h138z" />
+ <glyph glyph-name="five" unicode="5"
+d="M186 58q45 0 80.5 14.5t60.5 40t38 59.5t12 75q1 57 -30.5 85t-103.5 28l-80 -5l73 345h296l-16 -74h-225l-43 -200h7t14 1q9 0 19 1q47 0 79 -14.5t51.5 -37.5t28 -53.5t8.5 -61.5q0 -77 -25 -129.5t-65.5 -84.5t-91 -45.5t-102.5 -13.5q-40 0 -70.5 6t-53.5 17l34 69
+q21 -9 44.5 -15.5t60.5 -6.5z" />
+ <glyph glyph-name="six" unicode="6"
+d="M483 244q0 -56 -16.5 -102.5t-48 -81t-76 -53.5t-99.5 -19q-33 0 -65 11.5t-57.5 37t-41.5 66.5t-16 101q0 100 38 189t99 156.5t138 110.5t155 52l4 -64q-55 -9 -109 -36.5t-99.5 -68t-80.5 -91t-53 -105.5q10 13 27 25.5t38.5 22.5t46 15.5t50.5 5.5q72 0 119 -43.5
+t47 -128.5zM405 234q-2 50 -27 82t-82 32q-23 0 -45.5 -6.5t-43 -17.5t-37 -25.5t-26.5 -30.5q-2 -13 -4 -28.5t-2 -27.5q0 -33 6.5 -61.5t20.5 -49.5t35 -33t51 -12q40 0 69 15.5t47.5 40.5t27 57t10.5 65z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M69 0l362 586l52 49l-58 -9h-265l15 74h397l-5 -27l-416 -673h-82z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M61 146q0 69 45.5 127.5t128.5 93.5q-16 13 -30.5 26.5t-26 31t-18.5 40.5t-7 56q0 46 17.5 81.5t47 60t68.5 37t81 12.5q33 0 62 -9.5t50 -28t33 -46t12 -63.5q0 -30 -11.5 -59.5t-32 -55.5t-48 -48.5t-60.5 -40.5q18 -15 34.5 -31.5t28.5 -36t19.5 -43t7.5 -52.5
+q0 -42 -13.5 -80t-42 -67t-73 -46t-107.5 -17q-41 0 -71.5 12.5t-51.5 33.5t-31.5 50t-10.5 62zM384 183q0 28 -7.5 49.5t-19.5 39t-31 32.5t-41 29q-66 -31 -106 -76t-40 -102q0 -18 5 -36t16.5 -31.5t32 -21.5t50.5 -8q28 0 53.5 7.5t45.5 23.5t31 39.5t11 54.5zM231 525
+q0 -48 24 -77.5t66 -55.5q25 16 48 35.5t39.5 40t27 41.5t10.5 42q0 47 -23 69t-65 22q-26 0 -49 -7.5t-40 -22.5t-27.5 -37t-10.5 -50z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M106 467q0 58 18 103.5t50.5 77t76 48t94.5 16.5q37 0 70 -13.5t58 -40.5t39 -66.5t14 -91.5q0 -115 -40.5 -206.5t-103.5 -157t-139 -103.5t-146 -45l-4 64q63 14 116.5 41t96.5 64.5t74 84t49 99.5q-32 -28 -70 -42.5t-96 -14.5q-27 0 -54.5 10t-50.5 32t-37.5 57
+t-14.5 84zM184 476q0 -36 11 -60t26.5 -38t34 -20t36.5 -6q46 0 87.5 18t63.5 44q1 6 2.5 17l3 22t2 21.5t0.5 15.5q0 70 -30 112t-89 42q-29 0 -55.5 -10t-46.5 -31t-33 -52.5t-13 -74.5z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="267"
+d="M173 449q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42zM89 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="273"
+d="M92 35q0 26 17 44t49 18q25 0 38.5 -17t13.5 -39q0 -31 -10.5 -60.5t-29.5 -54.5t-44.5 -44.5t-55.5 -30.5l-16 39q38 14 61 44t28 59q-4 -2 -10 -2q-14 0 -27.5 12t-13.5 32zM179 449q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="480"
+d="M54 305v29l379 231l38 -62l-237 -145l-91 -38l90 -32l243 -144l-38 -60z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="480"
+d="M55 457h424v-72h-424v72zM55 291h424v-72h-424v72z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="480"
+d="M478 344v-29l-379 -231l-38 61l237 145l91 38l-90 32l-243 144l38 61z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="414"
+d="M123 177q5 50 25 87.5t46.5 68t56.5 57t54.5 53t41 57t16.5 69.5q0 38 -20.5 58.5t-71.5 20.5q-35 0 -69.5 -13.5t-63.5 -30.5l-19 58q20 12 38.5 21t39.5 15.5t45.5 10t56.5 3.5q74 0 109 -34t35 -88t-17 -93.5t-43 -70.5t-57.5 -57.5t-60 -54.5t-50.5 -60.5t-29 -76.5
+h-63zM80 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="1064"
+d="M736 491h34l-51 -287q-5 -26 -7.5 -46.5t-2.5 -36.5q0 -25 8.5 -37t30.5 -12q34 0 67 18t59.5 51t43 80t16.5 105q0 77 -26 136t-73 99.5t-112 61.5t-143 21q-82 0 -153 -30t-124 -83t-83.5 -127t-30.5 -161q0 -89 27.5 -159t78.5 -118t122 -73t158 -25q29 0 66 7t67 21
+l20 -64q-44 -19 -82.5 -25.5t-82.5 -6.5q-93 0 -174 28t-142 83t-96 136.5t-35 188.5q0 109 37.5 197t101.5 150t149 95.5t180 33.5q90 0 167 -26.5t134 -76t89 -121t32 -162.5q0 -64 -22 -122.5t-59.5 -102.5t-87.5 -70.5t-106 -26.5q-42 0 -66.5 18t-24.5 67q0 9 1 19.5
+t3 22.5h-4q-15 -23 -34 -45.5t-42.5 -40.5t-50 -29.5t-55.5 -11.5q-24 0 -45.5 10.5t-37.5 30.5t-25.5 47.5t-9.5 62.5q0 64 21 126t56.5 110t83 77.5t100.5 29.5q36 0 58.5 -11t43.5 -27zM680 393q-17 20 -34.5 28.5t-43.5 8.5q-39 0 -73 -24t-58.5 -61.5t-39 -84.5
+t-14.5 -92q0 -39 16 -67.5t58 -28.5q20 0 41.5 14t42.5 36.5t40.5 50.5t34.5 57z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="557"
+d="M404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197l-29 213l-2 106h-1l-45 -108z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="556"
+d="M561 551q0 -39 -12 -71t-34 -56t-51.5 -38.5t-63.5 -19.5v-4q22 -5 42 -16.5t35 -28.5t24 -39.5t9 -49.5q0 -70 -27.5 -115.5t-70 -72.5t-95 -37.5t-103.5 -10.5h-38.5t-57.5 2q-60 6 -78 11l146 689q38 6 85.5 10t102.5 4q37 0 71 -9.5t59.5 -28.5t41 -49t15.5 -70z
+M236 64q35 0 69 8.5t61 26.5t43.5 47t16.5 71q0 31 -15 51.5t-39 32.5t-54.5 16.5t-61.5 4.5h-70l-53 -251q6 -2 18.5 -3t27 -2t30 -1.5t27.5 -0.5zM253 390q17 0 40 0.5t39 2.5q23 5 49 14t47.5 25.5t35 42t13.5 63.5q0 28 -8.5 46.5t-25 30t-39.5 16.5t-51 5
+q-32 0 -60 -1.5t-42 -4.5l-51 -240h53z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="544"
+d="M480 29q-34 -23 -72 -32t-88 -9q-59 0 -105 21.5t-78 60t-49 90.5t-17 114q0 113 33 195.5t87 136.5t121.5 80t136.5 26q57 0 93 -8t59 -19l-36 -73q-20 11 -52.5 18.5t-74.5 7.5q-56 0 -107.5 -24.5t-90.5 -70.5t-62 -112t-23 -148q0 -48 12.5 -88.5t36 -70t58 -46
+t78.5 -16.5q47 0 78 10.5t56 24.5z" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="622"
+d="M189 700q38 5 86 6.5t87 1.5q59 0 107 -15.5t81.5 -47.5t51.5 -81t18 -115q0 -44 -8 -95.5t-26.5 -102t-49.5 -97.5t-77 -83.5t-108 -58t-143 -21.5q-15 0 -39.5 0.5t-48.5 1.5q-70 4 -80 6zM356 634q-12 0 -27 -0.5t-29 -1t-27 -1.5t-20 -2l-118 -560q4 -1 16 -1.5
+t25.5 -1t26 -1t17.5 -0.5q87 0 147 36t97.5 91t54.5 121t17 125q0 45 -10 81t-31.5 61.5t-55.5 39.5t-83 14z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="510"
+d="M189 700h361l-15 -74h-283l-49 -229h259l-15 -74h-259l-53 -249h288l-16 -74h-288h-79z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="492"
+d="M189 700h361l-15 -74h-283l-51 -239h264l-15 -74h-264l-66 -313h-80z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="583"
+d="M375 349h116h68l-65 -308q-71 -53 -176 -53q-50 0 -94.5 18t-78.5 53.5t-54 88.5t-20 124q0 123 36 207t92.5 135.5t124.5 74.5t132 23q57 0 94.5 -7.5t60.5 -18.5l-35 -73q-20 11 -53.5 18t-75.5 7q-58 0 -110.5 -22.5t-93 -67.5t-64.5 -111.5t-24 -154.5q0 -45 11 -85
+t33.5 -70t56 -47.5t79.5 -17.5q32 0 55 6.5t46 18.5l41 195l-112 20z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="639"
+d="M505 321h-318l-67 -321h-80l148 700h80l-64 -305h317l64 305h80l-148 -700h-80z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="277"
+d="M210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="278"
+d="M222 700h80l-116 -546q-9 -40 -21.5 -70.5t-32 -51.5t-48 -31.5t-68.5 -10.5q-8 0 -18.5 1t-21.5 3t-21 5t-16 7l30 71q19 -13 54 -13q21 0 35 7.5t24 22t16.5 34.5t11.5 46z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="576"
+d="M239 324h-51l-68 -324h-80l148 700h80l-70 -326l40 14l287 312h99l-286 -304l-46 -31l39 -40l175 -325h-91z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="492"
+d="M434 0h-316h-78l148 700h80l-133 -626h314z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="754"
+d="M651 470l31 105h-4l-56 -96l-240 -316h-24l-115 316l-15 96h-4l-8 -104l-100 -471h-76l149 700h55l130 -358l15 -78h1l46 80l273 356h71l-149 -700h-80z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="642"
+d="M261 458l-34 103h-3l-12 -103l-97 -458h-75l151 711h40l218 -468l33 -98h4l9 98l98 457h75l-151 -711h-37z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="651"
+d="M71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148
+q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="532"
+d="M187 693q38 9 80 12t83 3q46 0 85.5 -10t68.5 -32t45.5 -56.5t16.5 -82.5q0 -76 -27.5 -127t-72 -81.5t-100.5 -43.5t-113 -13h-15.5t-22.5 0.5t-23 1.5t-16 2l-56 -266h-80zM333 636q-23 0 -44.5 -1.5t-35.5 -4.5l-61 -291q4 -2 13.5 -2.5t20 -1.5t20.5 -1h15q43 0 83 9
+t70.5 31t49 57t18.5 88q0 36 -12 59t-32.5 35.5t-47.5 17.5t-57 5z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="651"
+d="M633 -171q-24 -7 -46.5 -9.5t-44.5 -2.5q-48 0 -91 10.5t-82.5 22.5t-76 22.5t-71.5 10.5q-11 0 -22.5 -1t-22.5 -4l15 73q27 6 53 6q40 0 77 -10.5t75.5 -22.5t79.5 -22.5t88 -10.5q41 0 85 10zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5
+t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5
+t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="568"
+d="M187 693q42 8 81 11.5t78 3.5q38 0 74 -9.5t63.5 -30t44 -53.5t16.5 -80q0 -88 -51.5 -146.5t-149.5 -75.5l36 -36l108 -277h-87l-120 302l-94 15l-66 -317h-80zM341 636q-24 0 -48 -1.5t-40 -4.5l-55 -258h69q36 0 70.5 7t62 25t44 49t16.5 78q0 18 -7 36.5t-21 34
+t-37 25t-54 9.5z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="505"
+d="M388 180q0 36 -18.5 61t-46.5 45.5t-60.5 39.5t-60.5 44t-46.5 59t-18.5 84q0 53 19.5 91t53 62t79 35t96.5 11q58 0 104 -9t72 -23l-40 -71q-20 11 -59.5 21t-91.5 10q-66 0 -107.5 -30t-41.5 -87q0 -37 18.5 -62.5t46.5 -46t60.5 -39.5t60.5 -43.5t46.5 -58.5t18.5 -83
+q0 -97 -70 -149.5t-201 -52.5q-67 0 -113.5 11.5t-70.5 25.5l41 73q23 -13 62.5 -25.5t93.5 -12.5q31 0 62 5.5t56 19.5t40.5 37t15.5 58z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="528"
+d="M602 626h-207l-132 -626h-80l132 626h-205l15 74h492z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="618"
+d="M573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="541"
+d="M253 221v-107h2l45 109l265 477h86l-402 -711h-37l-108 711h82z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="788"
+d="M214 233l-9 -116h1l39 118l235 465h43l37 -467l-9 -116h1l40 118l213 465h82l-336 -711h-44l-38 469l6 106h-4l-40 -107l-234 -468h-44l-39 711h82z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="588"
+d="M289 358l-130 342h87l86 -237l12 -57l34 57l191 237h97l-279 -339l142 -361h-87l-96 251l-14 60l-38 -60l-204 -251h-97z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="531"
+d="M241 278l-133 422h87l89 -306l3 -61h1l30 63l217 304h90l-304 -421l-59 -279h-80z" />
+ <glyph glyph-name="Z" unicode="Z"
+d="M14 75l435 511l49 40h-366l15 74h447l-15 -75l-438 -514l-47 -37h367l-15 -74h-447z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="291"
+d="M213 700h76h97l-15 -70h-97l-168 -790h98l-15 -70h-98h-75z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="380"
+d="M449 -111l-66 -29l-342 824l69 28z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="291"
+d="M109 -230h-75h-97l15 70h96l167 790h-97l15 70h99h74z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="500"
+d="M288 711h29l169 -276h-83l-79 135l-23 69l-31 -70l-93 -134h-75z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="408"
+d="M-44 -137h408v-68h-408v68z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="238"
+d="M297 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="521"
+d="M185 700h75l-61 -286h4q14 18 32 35.5t40 31.5t47 22.5t54 8.5q59 0 86 -41.5t27 -104.5q0 -90 -25 -159.5t-66 -117.5t-93.5 -73t-107.5 -25q-54 0 -94.5 12t-59.5 28zM352 448q-25 0 -51 -12.5t-49.5 -32.5t-43 -44.5t-31.5 -47.5l-50 -235q30 -21 85 -21q32 0 67 19.5
+t64 57t47.5 92t18.5 124.5q0 51 -15.5 75.5t-41.5 24.5z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="420"
+d="M365 43q-15 -13 -34.5 -23t-40 -17t-40.5 -11t-38 -4q-49 0 -80.5 15.5t-49.5 39.5t-25 52t-7 53q0 85 23 152.5t61.5 114.5t88.5 72t103 25q38 0 62.5 -7t44.5 -16l-28 -62q-17 10 -42 15.5t-54 5.5q-34 0 -66.5 -23t-57.5 -60.5t-40 -86t-15 -99.5q0 -65 27 -96t73 -31
+q30 0 63 13.5t53 27.5z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="509"
+d="M419 172q-8 -39 -12 -73t-4 -63q0 -11 0.5 -20t1.5 -18h-50l-14 87h-4q-12 -17 -30 -34.5t-40 -31.5t-46.5 -22.5t-50.5 -8.5q-55 0 -87.5 40.5t-32.5 128.5q0 59 17 121.5t50 113.5t82.5 84t114.5 33q18 0 31 -1t24.5 -3t21.5 -5.5t21 -7.5l44 208h75zM198 52
+q21 0 43 11.5t41.5 28.5t35 36.5t24.5 36.5l56 260q-17 11 -38.5 15.5t-56.5 4.5q-40 0 -72 -24.5t-54.5 -65.5t-34.5 -94t-12 -109q0 -41 16 -70.5t52 -29.5z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="463"
+d="M389 49q-35 -30 -82.5 -45.5t-95.5 -15.5q-80 0 -120.5 46t-40.5 128t23 147t60.5 110t85 69t97.5 24q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -6 -36t-2 -30q0 -55 25 -89.5t78 -34.5q44 0 80.5 14.5
+t56.5 30.5zM304 448q-55 0 -95.5 -37.5t-61.5 -112.5q38 0 79 2t74.5 10.5t55.5 27t22 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="278"
+d="M219 436l-80 -470q-6 -37 -16.5 -68.5t-27.5 -55t-43 -37t-63 -13.5q-30 0 -55.5 4.5t-47.5 15.5l22 56q20 -7 36.5 -9.5t40.5 -2.5q38 0 57 36.5t32 115.5l70 428h-77l13 64h73l13 67q7 37 17 64t26.5 45t41 27t59.5 9q33 0 64 -6.5t56 -17.5l-22 -59q-49 19 -93 19
+q-37 0 -54 -25.5t-26 -81.5l-7 -41h101l-12 -64h-98z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="505"
+d="M385 -23q-21 -98 -72.5 -143.5t-136.5 -45.5q-65 0 -107 16.5t-64 28.5l33 56q8 -4 19.5 -10.5t28 -12.5t40 -10t55.5 -4q50 0 84 36t51 113l18 84h-4q-14 -19 -30.5 -36t-36.5 -30.5t-43.5 -21.5t-51.5 -8q-54 0 -87 39t-33 111q0 67 18.5 133t55 118.5t90 85.5
+t123.5 33q54 0 91 -9t65 -22zM196 53q25 0 49.5 13t45 33.5t37 44.5t27.5 45l51 241q-16 9 -39 12t-47 3q-41 0 -76 -24t-60.5 -64.5t-40.5 -93.5t-15 -111q0 -46 18.5 -72.5t49.5 -26.5z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="529"
+d="M341 0l60 285q6 30 10 53.5t4 41.5q0 37 -15 52.5t-47 15.5q-26 0 -53 -13.5t-52 -34.5t-44.5 -47t-29.5 -50l-63 -303h-75l148 700h75l-62 -286h4q13 16 31.5 33t42.5 31.5t52 24t61 9.5q49 0 77 -23.5t28 -85.5q0 -42 -13 -101l-64 -302h-75z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="259"
+d="M160 500h75l-106 -500h-75zM176 653q0 23 15.5 39t38.5 16t39 -16t16 -39t-16 -38.5t-39 -15.5t-38.5 15.5t-15.5 38.5z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="249"
+d="M148 500h75l-112 -527q-20 -93 -62 -137t-114 -44q-8 0 -15.5 0.5t-15.5 1.5l15 65q30 0 49.5 8.5t33 26.5t23 45t17.5 64zM164 653q0 23 15.5 39t38.5 16t39 -16t16 -39t-16 -38.5t-39 -15.5t-38.5 15.5t-15.5 38.5z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="449"
+d="M212 225h-54l-47 -225h-75l148 700h75l-91 -426l43 11l180 215h92l-178 -203l-47 -33l38 -39l112 -225h-83z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="270"
+d="M133 119q-3 -17 -3 -28q0 -19 6.5 -27.5t17.5 -8.5q20 0 33.5 2.5t32.5 9.5v-57q-9 -5 -21 -8.5t-24.5 -5.5t-25 -3.5t-22.5 -1.5q-35 0 -56 16t-21 59q0 20 6 49l124 585h75z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="763"
+d="M305 0l60 283q8 35 12 62t4 47q0 27 -10 41.5t-34 14.5q-25 0 -49 -13t-45 -32.5t-38.5 -41.5t-27.5 -40l-66 -321h-75l106 500h53l-6 -86h4q16 16 34.5 33.5t41 31.5t49 23.5t58.5 9.5q45 0 60.5 -28t15.5 -78q15 19 35 38t43.5 34t49.5 24.5t52 9.5q46 0 70.5 -21.5
+t24.5 -79.5q0 -42 -15 -111l-63 -300h-75l63 301q6 29 9.5 52t3.5 40q0 27 -11 41t-37 14q-21 0 -44.5 -13.5t-45.5 -33.5t-39.5 -43t-27.5 -43l-65 -315h-75z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="522"
+d="M331 0l67 316q4 18 7 35.5t3 31.5q0 29 -13.5 47t-50.5 18q-26 0 -51 -12t-47 -30.5t-39.5 -41t-29.5 -44.5l-66 -320h-75l106 500h52l-4 -86h4q13 16 31 33.5t40.5 31.5t50.5 23.5t62 9.5q50 0 79 -24t29 -84q0 -30 -9 -72l-71 -332h-75z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="508"
+d="M144 500h52l-5 -86h4q14 18 31.5 35.5t38.5 31.5t46 22.5t54 8.5q24 0 45 -7.5t37 -25t25.5 -46.5t9.5 -71q0 -88 -24 -157.5t-63 -117.5t-87.5 -73.5t-96.5 -25.5q-35 0 -61.5 6.5t-35.5 13.5l-44 -208h-75zM337 448q-27 0 -51.5 -14t-45 -34.5t-36.5 -44t-26 -43.5
+l-49 -237q17 -13 35 -18t39 -5q39 0 74.5 21.5t63.5 61.5t44.5 96t16.5 125q0 40 -16.5 66t-48.5 26z" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="503"
+d="M340 -200h-75l61 284h-4q-12 -16 -27.5 -33t-35 -31t-43.5 -23t-51 -9q-32 0 -55 11.5t-37 32t-20.5 48.5t-6.5 61q0 67 22 133t61 118t93 84.5t119 32.5q21 0 42.5 -3t40.5 -7.5t35 -10t25 -11.5zM186 52q25 0 50.5 15t47.5 37.5t39 48t27 46.5l50 231q-16 9 -38.5 12
+t-39.5 3q-39 0 -74.5 -25t-62.5 -66.5t-43 -95t-16 -110.5q0 -48 15.5 -72t44.5 -24z" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="327"
+d="M362 434q-9 2 -18.5 3t-17.5 1q-51 0 -88 -32t-58 -78l-69 -328h-75l106 500h52v-86h4q12 19 26 35.5t31 29.5t37 20.5t44 7.5q22 0 46 -7z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="398"
+d="M259 141q0 26 -13 44t-33 32.5t-43 28.5t-43 31.5t-33 41t-13 58.5q0 28 13.5 52.5t37 43t56 29t70.5 10.5q53 0 82 -7t52 -20l-25 -60q-40 23 -109 23q-42 0 -69.5 -17.5t-27.5 -53.5q0 -21 13 -36.5t33 -29.5t43 -28.5t43 -33t33 -43.5t13 -59q0 -78 -52.5 -118.5
+t-140.5 -40.5q-45 0 -82.5 9t-60.5 23l28 63q20 -13 52.5 -22t67.5 -9q49 0 78.5 21.5t29.5 67.5z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="313"
+d="M71 500h74l21 99l80 23l-26 -122h131l-15 -64h-130l-63 -302q-2 -12 -3.5 -22t-1.5 -18q0 -24 11 -33t33 -9q24 0 44 6t40 18v-61q-21 -12 -54 -19.5t-63 -7.5q-91 0 -91 83q0 17 5 42l68 323h-75z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="447"
+d="M192 207l9 -95h2l43 97l169 291h86l-312 -511h-32l-97 511h80z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="685"
+d="M427 500l47 -292l4 -96h1l39 98l147 290h76l-269 -511h-38l-53 330l-1 82h-2l-37 -83l-190 -329h-36l-58 511h76l31 -291l-2 -97h4l40 99l165 289h56z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="484"
+d="M203 256l-107 244h85l59 -138l18 -57l41 57l121 138h91l-212 -240l119 -260h-85l-68 152l-20 60l-42 -60l-134 -152h-91z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="439"
+d="M194 176l5 -96h5l38 97l166 323h80l-236 -446q-26 -49 -51.5 -95.5t-52.5 -83t-56 -58.5t-60 -22q-17 0 -29.5 2t-22.5 7l24 69q11 -4 24 -4q29 0 58 30t65 101l-86 500h80z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="429"
+d="M11 69l281 319l55 43h-258l15 69h337l-15 -69l-284 -322l-54 -40h261l-14 -69h-337z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="331"
+d="M231 -230h-81q-35 0 -54 19.5t-18 55.5q0 14 4 29l50 238q4 18 4 32q2 32 -14.5 44.5t-46.5 12.5l15 68q74 0 93 85l52 242q10 47 38.5 76t73.5 29h81l-15 -70h-48q-26 0 -40.5 -13.5t-21.5 -45.5l-49 -237q-9 -44 -34 -67t-52 -28l-1 -6q20 -3 34.5 -23t13.5 -52
+q0 -5 -1.5 -12t-6 -31.5t-15.5 -75t-31 -141.5q-1 -6 -2 -11t-1 -10q-1 -38 42 -38h47z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="238"
+d="M115 700h69v-830h-69v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="331"
+d="M232 359q-4 -17 -4 -30q-1 -33 15.5 -46t46.5 -13l-16 -68q-36 0 -60 -21t-34 -64q0 -1 -2.5 -12t-6 -28t-8 -39t-8.5 -44q-11 -53 -25 -119q-10 -47 -39 -76t-74 -29h-80l16 70h47q25 0 39.5 13.5t20.5 45.5l50 237q10 44 34.5 67t52.5 28l2 6q-22 3 -36.5 23t-13.5 52
+q0 5 1 11.5t2 12.5l51 236q2 6 2.5 11t0.5 10q1 38 -41 38h-46l14 70h81q35 0 54.5 -19t17.5 -56q0 -14 -4 -29z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="480"
+d="M46 361q43 33 78 46t64 13q28 0 52 -8.5t46 -19t43 -19t44 -8.5q19 0 39 8t43 28l34 -61q-38 -26 -68.5 -36.5t-55.5 -10.5q-27 0 -49.5 8.5t-43 19t-41 19t-44.5 8.5q-23 0 -49 -10.5t-58 -36.5z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="267"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="290"
+d="M96 -200h-78l74 347l53 176h47l-22 -176zM131 453q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M419 43q-25 -21 -59 -34t-66 -18l-19 -91h-66l19 90q-38 6 -63 23t-39 39.5t-19.5 47.5t-5.5 48q0 77 19 139.5t51.5 109t75.5 75t91 36.5l20 92h67l-20 -89q26 -3 45.5 -9t36.5 -13l-28 -62q-13 8 -32 13t-42 7l-83 -393q27 4 54 16t44 23zM181 179q0 -55 18.5 -85.5
+t51.5 -38.5l82 389q-30 -8 -57.5 -32.5t-48.5 -60.5t-33.5 -80.5t-12.5 -91.5z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M118 397h65q-4 18 -6 38.5t-2 46.5q0 57 20 100.5t53.5 72t78.5 43t96 14.5q40 0 75.5 -8.5t58.5 -21.5l-27 -64q-20 11 -52 18t-72 7q-31 0 -58.5 -10.5t-48 -31t-32.5 -50t-12 -67.5q0 -31 2.5 -51t6.5 -36h155l-15 -64h-125q2 -12 3 -27t1 -35q0 -33 -6.5 -61
+t-16 -50.5t-21.5 -39t-23 -26.5l-45 -34l-1 -5l62 14h244l-15 -69h-424l15 71q30 0 57.5 15t48.5 40.5t33.5 60.5t12.5 77q0 20 -2 36.5t-5 32.5h-94z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M111 596l78 -77l21 -35q42 33 103 33q59 0 103 -33l22 35l78 77l48 -49l-76 -78l-35 -22q32 -43 32 -102q0 -60 -32 -103l35 -21l76 -78l-48 -48l-78 77l-21 33q-43 -31 -104 -31q-62 0 -103 31l-21 -33l-78 -77l-49 48l77 78l34 22q-31 42 -31 102q0 29 8.5 55t22.5 48
+l-34 21l-77 78zM211 345q0 -45 28.5 -75t73.5 -30t74 30t29 75t-29 75.5t-74 30.5t-73.5 -30.5t-28.5 -75.5z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M129 328h89l-115 372h87l92 -306l3 -61h1l30 63l213 304h90l-270 -372h90l-13 -60h-115l-13 -63h115l-13 -60h-115l-30 -145h-80l30 145h-115l12 60h116l13 63h-115z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="238"
+d="M115 206h69v-336h-69v336zM184 364h-69v336h69v-336z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="473"
+d="M88 337q0 44 21.5 75t55.5 54l46 18q-23 19 -32.5 40t-9.5 46q0 30 14 56t38 45t56.5 30t70.5 11q52 0 83.5 -9t54.5 -23l-29 -61q-20 11 -49.5 18t-64.5 7q-43 0 -69.5 -21.5t-26.5 -55.5q0 -21 16 -34t38 -23t48.5 -20t48.5 -25.5t37 -38.5t15 -60q0 -43 -23 -77
+t-55 -54l-54 -18q23 -16 35 -37t12 -56q0 -34 -14.5 -59.5t-38.5 -42.5t-56 -25.5t-68 -8.5q-52 0 -84.5 11t-55.5 25l32 61q20 -11 48.5 -20t64.5 -9q40 0 67 15.5t27 52.5q0 22 -14 37t-36 26.5t-48.5 23.5t-48.5 28t-37 39t-15 59zM370 355q0 22 -9 36t-25 24.5t-37 18.5
+t-45 18q-15 -6 -30.5 -15.5t-28 -22t-20 -29t-7.5 -37.5t9 -36t24 -26t35.5 -19.5t43.5 -17.5q15 6 30.5 15.5t29 22.5t22 30t8.5 38z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="245"
+d="M88 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM271 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="806"
+d="M77 290q0 83 28 148.5t76 110.5t112 69t136 24t136 -24t112 -69t76 -110.5t28 -148.5t-28 -148.5t-76 -110.5t-112 -69t-136 -24q-80 0 -145 24t-111 69t-71 110.5t-25 148.5zM147 290q0 -69 22 -122.5t60 -89.5t89.5 -55t110.5 -19t110.5 19t89.5 55t60 89.5t22 122.5
+t-22 122.5t-60 89.5t-89.5 55t-110.5 19t-110.5 -19t-89.5 -55t-60 -89.5t-22 -122.5zM545 127q-23 -13 -51.5 -20t-66.5 -7q-81 0 -123.5 51t-42.5 139q0 91 45.5 140.5t120.5 49.5q18 0 32.5 -2t27 -5.5t24.5 -8.5t27 -11l-26 -61q-22 11 -42 15t-34 4q-42 0 -68.5 -26
+t-26.5 -95q0 -58 26 -89.5t77 -32.5q47 0 80 18z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="381"
+d="M124 677q26 13 61.5 22t83.5 9q47 0 71.5 -21t24.5 -53q0 -25 -7.5 -57.5t-17 -67.5t-17 -68.5t-7.5 -60.5h-50l-3 46h-3q-17 -17 -43 -33.5t-67 -16.5q-45 0 -67.5 25.5t-22.5 60.5q0 31 14.5 53t38.5 36.5t55.5 21t66.5 6.5q14 0 28 -1t28 -3q6 19 6 34q0 43 -57 43
+q-38 0 -64.5 -7.5t-46.5 -16.5zM171 432q41 0 64.5 18.5t35.5 36.5l8 42q-10 1 -19.5 1h-20.5q-21 0 -40.5 -2.5t-35 -9t-25 -18.5t-9.5 -31q0 -16 10 -26.5t32 -10.5z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="454"
+d="M212 259l198 228l44 -46l-123 -144l-56 -37l34 -37l67 -141l-54 -42zM38 259l200 230l45 -47l-124 -145l-57 -37l35 -37l67 -142l-54 -43z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="505"
+d="M67 392h424v-192h-70v120h-354v72z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="342"
+d="M79 322h230l-17 -68h-229z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="700"
+d="M137 451q0 64 21 113.5t57.5 83t84.5 51t102 17.5q55 0 103.5 -17.5t84.5 -51t56.5 -83t20.5 -113.5t-21 -113.5t-57.5 -83t-84.5 -51t-102 -17.5q-56 0 -104 17.5t-84 51t-56.5 83t-20.5 113.5zM200 451q0 -52 16 -90.5t43.5 -64t64.5 -38.5t78 -13q43 0 80 12.5t64 38
+t42.5 64t15.5 91.5q0 52 -16 90.5t-43.5 64t-64 38.5t-78.5 13q-44 0 -81 -13t-64 -38.5t-42 -64t-15 -90.5zM299 581q16 5 45 7.5t55 2.5q42 0 72 -17.5t30 -60.5q0 -32 -20.5 -49t-50.5 -19l28 -14l74 -109h-61l-72 104l-48 15v-119h-52v259zM388 546q-11 0 -21 -0.5
+t-16 -3.5v-71h34q29 0 45 9t16 31q0 35 -58 35z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="313"
+d="M134 643h281l-13 -62h-282z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="425"
+d="M141 571q0 31 11 57t30 44.5t45 29t55 10.5t55 -9.5t45 -28t30 -44.5t11 -59t-11 -59t-30 -44.5t-45 -28t-55 -9.5t-55 9.5t-45 28t-30 44.5t-11 59zM205 571q0 -38 23 -59.5t54 -21.5t54 21.5t23 59.5t-23 59.5t-54 21.5t-54 -21.5t-23 -59.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="480"
+d="M55 493h176v181h72v-181h176v-72h-176v-120h-72v120h-176v72zM55 250h424v-72h-424v72z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="377"
+d="M435 713q0 -32 -14.5 -64.5t-39 -65t-56.5 -63t-66 -58.5l-50 -31v-3l57 16h131l-14 -64h-275l7 33q18 13 43.5 32.5t53.5 43.5t55 51t49 54.5t35.5 53.5t13.5 49q0 46 -55 46q-26 0 -52 -9.5t-46 -21.5l-9 57q28 18 63 28t69 10q18 0 36 -4.5t32 -15.5t23 -29t9 -45z
+" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="377"
+d="M242 433q56 0 82.5 27.5t26.5 65.5q0 27 -16 40.5t-64 13.5h-52l4 23l116 117l38 26l-48 -6h-121l13 60h243l-7 -33l-124 -124l-26 -18l-1 -2l22 3q38 0 64.5 -24.5t26.5 -66.5q0 -32 -10 -61.5t-32 -52t-57.5 -35.5t-87.5 -13q-34 0 -57.5 6t-40.5 13l26 60
+q14 -8 35 -13.5t47 -5.5z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="238"
+d="M228 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="mu" unicode="µ" horiz-adv-x="525"
+d="M209 500q-24 -117 -38 -184t-21 -103t-8.5 -49t-1.5 -21q0 -86 80 -86q53 0 96 33t69 86l69 324h75l-72 -337q-8 -41 -14 -82.5t-6 -80.5h-51l-12 74h-4q-27 -35 -71.5 -60.5t-101.5 -25.5q-45 0 -66.5 20.5t-29.5 49.5h-5l-7 -125l-28 -133h-75l148 700h75z" />
+ <glyph glyph-name="mu" unicode="μ" horiz-adv-x="525"
+d="M209 500q-24 -117 -38 -184t-21 -103t-8.5 -49t-1.5 -21q0 -86 80 -86q53 0 96 33t69 86l69 324h75l-72 -337q-8 -41 -14 -82.5t-6 -80.5h-51l-12 74h-4q-27 -35 -71.5 -60.5t-101.5 -25.5q-45 0 -66.5 20.5t-29.5 49.5h-5l-7 -125l-28 -133h-75l148 700h75z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="495"
+d="M378 700h69v-830h-69v830zM222 310q-32 0 -59 16.5t-46.5 44t-30.5 63t-11 72.5t11.5 72t33.5 62t54 43.5t72 16.5h45v-830h-69v440z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="267"
+d="M98 296q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="363"
+d="M167 -43q27 -3 44.5 -20.5t17.5 -49.5q0 -42 -31.5 -69t-94.5 -27q-12 0 -25.5 1.5t-27.5 3.5l17 39q5 -1 10.5 -1h10.5q21 0 35 4t22 9.5t11 12.5t3 13q0 19 -21 28t-56 9l65 90h53z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="377"
+d="M149 441h101l54 254l14 36l-31 -28l-81 -45l-21 46l170 103h39l-78 -366h90l-13 -61h-257z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="379"
+d="M60 490q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM129 498q0 -32 14.5 -50t43.5 -18q21 0 40.5 11t34.5 31.5t23.5 50t8.5 66.5q0 35 -15.5 50t-43.5 15q-21 0 -40.5 -12.5
+t-34 -33.5t-23 -49.5t-8.5 -60.5z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="454"
+d="M280 268l-198 -228l-44 45l123 144l56 38l-35 43l-68 141l57 36zM454 268l-200 -230l-45 46l124 145l56 38l-35 44l-69 142l58 36z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="797"
+d="M256 595l15 36l-31 -28l-81 -45l-24 49l173 100h39l-91 -427h-66zM744 96h-78l-21 -96h-64l21 96h-193l7 37l278 302h43l-59 -280h79zM641 283l17 49h-2l-31 -46l-96 -105l-38 -31l49 5h74zM639 713l52 -36l-487 -689l-52 36z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="809"
+d="M256 595l15 36l-31 -28l-81 -45l-24 49l173 100h39l-91 -427h-66zM784 333q0 -32 -14.5 -64.5t-39 -65t-56.5 -63t-66 -58.5l-50 -31v-3l57 16h131l-14 -64h-275l7 33q18 13 43.5 32.5t53.5 43.5t55 51t49 54.5t35.5 53.5t13.5 49q0 46 -55 46q-26 0 -52 -9.5t-46 -21.5
+l-9 57q28 18 63 28t69 10q18 0 36 -4.5t32 -15.5t23 -29t9 -45zM639 713l52 -36l-487 -689l-52 36z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="833"
+d="M780 96h-78l-21 -96h-64l21 96h-193l7 37l278 302h43l-59 -280h79zM677 283l17 49h-2l-31 -46l-96 -105l-38 -31l49 5h74zM209 333q56 0 82.5 27.5t26.5 65.5q0 27 -16 40.5t-64 13.5h-52l4 23l116 117l38 26l-48 -6h-121l13 60h243l-7 -33l-124 -124l-26 -18l-1 -2l22 3
+q38 0 64.5 -24.5t26.5 -66.5q0 -32 -10 -61.5t-32 -52t-57.5 -35.5t-87.5 -13q-34 0 -57.5 6t-40.5 13l26 60q14 -8 35 -13.5t47 -5.5zM675 713l52 -36l-487 -689l-52 36z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="413"
+d="M306 323q-5 -50 -25 -87.5t-47 -68t-56.5 -56.5t-54 -53t-41 -57t-16.5 -69t20.5 -59.5t71.5 -20.5q35 0 69 13.5t63 30.5l20 -58q-20 -12 -39 -21t-40 -15.5t-45.5 -10t-55.5 -3.5q-74 0 -109 34t-35 88t17 93.5t43 70.5t57.5 57.5t60 54.5t50 60.5t28.5 76.5h64z
+M234 454q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="557"
+d="M456 752h-63l-129 97l4 21h101zM404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197l-29 213l-2 106h-1l-45 -108z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="557"
+d="M467 870h116l-5 -21l-175 -97h-73zM404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197l-29 213l-2 106h-1l-45 -108z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="557"
+d="M392 870h48l99 -102l-4 -21h-68l-46 49l-10 35l-25 -34l-71 -50h-75l5 22zM404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197l-29 213l-2 106h-1l-45 -108z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="557"
+d="M256 785q35 32 62.5 43.5t50.5 11.5q18 0 33.5 -5t30 -11.5t28.5 -11.5t29 -5q25 0 53 21l16 -43q-32 -26 -56.5 -35t-44.5 -9q-18 0 -33 5t-29.5 11.5t-28.5 11.5t-29 5t-31.5 -6.5t-36.5 -23.5zM404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197
+l-29 213l-2 106h-1l-45 -108z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="557"
+d="M263 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM446 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM404 194h-244l-108 -194h-85l404 711h37l101 -711h-77zM199 266h197l-29 213l-2 106
+h-1l-45 -108z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="557"
+d="M296 768q0 37 25 61t80 24q50 0 78 -21.5t28 -63.5q0 -35 -24 -57.5t-72 -25.5l98 -685h-77l-28 194h-244l-108 -194h-85l392 690q-63 17 -63 78zM199 265h197l-29 214l-2 106h-1l-45 -108zM357 768q0 -17 10.5 -28.5t33.5 -11.5q22 0 33.5 11t11.5 29q0 19 -11 30.5
+t-34 11.5q-22 0 -33 -11.5t-11 -30.5z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="805"
+d="M459 599l-51 -101l-174 -229h157l71 330h-3zM377 197h-199l-148 -197h-92l541 700h366l-15 -74h-283l-49 -229h259l-16 -74h-258l-54 -249h288l-15 -74h-287h-80z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="544"
+d="M480 29q-32 -22 -68.5 -31t-83.5 -10l-24 -31q27 -3 44.5 -20.5t17.5 -49.5q0 -42 -31.5 -69t-94.5 -27q-12 0 -25.5 1.5t-27.5 3.5l17 39q5 -1 10.5 -1h10.5q21 0 35 4t22 9.5t11 12.5t3 13q0 19 -21 28t-56 9l58 81q-49 7 -87 31.5t-64.5 61.5t-40.5 85.5t-14 104.5
+q0 113 33 195.5t87 136.5t121.5 80t136.5 26q57 0 93 -8t59 -19l-36 -73q-20 11 -52.5 18.5t-74.5 7.5q-56 0 -107.5 -24.5t-90.5 -70.5t-62 -112t-23 -148q0 -48 12.5 -88.5t36 -70t58 -46t78.5 -16.5q47 0 78 10.5t56 24.5z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="510"
+d="M422 752h-63l-129 97l4 21h101zM189 700h361l-15 -74h-283l-49 -229h259l-15 -74h-259l-53 -249h288l-16 -74h-288h-79z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="510"
+d="M451 870h116l-5 -21l-175 -97h-73zM189 700h361l-15 -74h-283l-49 -229h259l-15 -74h-259l-53 -249h288l-16 -74h-288h-79z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="510"
+d="M381 870h48l99 -102l-4 -21h-68l-46 49l-10 35l-25 -34l-71 -50h-75l5 22zM189 700h361l-15 -74h-283l-49 -229h259l-15 -74h-259l-53 -249h288l-16 -74h-288h-79z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="510"
+d="M240 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM423 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM189 700h361l-15 -74h-283l-49 -229h259l-15 -74h-259l-53 -249h288l-16 -74h-288
+h-79z" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="277"
+d="M317 752h-63l-129 97l4 21h101zM210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="277"
+d="M326 870h116l-5 -21l-175 -97h-73zM210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="277"
+d="M263 870h48l99 -102l-4 -21h-68l-46 49l-10 35l-25 -34l-71 -50h-75l5 22zM210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="277"
+d="M123 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM306 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="626"
+d="M41 392h86l66 308q38 5 86 6.5t87 1.5q58 0 106 -15.5t81.5 -47.5t51.5 -81t18 -115q0 -44 -8 -95.5t-26.5 -102t-49.5 -97.5t-77 -83.5t-107.5 -58t-142.5 -21.5q-15 0 -39.5 0.5t-50.5 1.5q-68 4 -78 6l71 333h-87zM360 634q-12 0 -27 -0.5t-29 -1t-27 -1.5t-20 -2
+l-50 -237h137l-12 -60h-138l-55 -263q4 -1 16 -1.5t25.5 -1t26 -1t17.5 -0.5q87 0 146.5 36t97 91t54.5 121t17 125q0 45 -10 81t-31.5 61.5t-55.5 39.5t-82 14z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="642"
+d="M289 785q35 32 62.5 43.5t50.5 11.5q18 0 33.5 -5t30 -11.5t28.5 -11.5t29 -5q25 0 53 21l16 -43q-32 -26 -56.5 -35t-44.5 -9q-18 0 -33 5t-29.5 11.5t-28.5 11.5t-29 5t-31.5 -6.5t-36.5 -23.5zM261 458l-34 103h-3l-12 -103l-97 -458h-75l151 711h40l218 -468l33 -98
+h4l9 98l98 457h75l-151 -711h-37z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="651"
+d="M503 752h-63l-129 97l4 21h101zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31
+t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="651"
+d="M532 870h116l-5 -21l-175 -97h-73zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5
+q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="651"
+d="M447 870h48l99 -102l-4 -21h-68l-46 49l-10 35l-25 -34l-71 -50h-75l5 22zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257
+q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="651"
+d="M298 785q35 32 62.5 43.5t50.5 11.5q18 0 33.5 -5t30 -11.5t28.5 -11.5t29 -5q25 0 53 21l16 -43q-32 -26 -56.5 -35t-44.5 -9q-18 0 -33 5t-29.5 11.5t-28.5 11.5t-29 5t-31.5 -6.5t-36.5 -23.5zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5
+t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5
+t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="651"
+d="M307 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM490 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46
+t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5
+t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="480"
+d="M138 517l127 -127l127 127l51 -53l-126 -125l126 -127l-51 -52l-127 127l-126 -128l-52 51l127 129l-127 125z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="651"
+d="M71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q39 0 73.5 -9.5t61.5 -29.5l29 39l49 -38l-35 -47q21 -31 32.5 -75t11.5 -104q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-88 0 -145 40l-29 -39l-50 39l34 46q-46 65 -46 182zM155 257q0 -63 18 -108
+l337 456q-21 19 -46.5 27t-52.5 8q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5zM563 446q0 32 -4 58t-12 46l-337 -456q39 -34 99 -34q56 0 102.5 31t80.5 84t52.5 123t18.5 148z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="618"
+d="M499 752h-63l-129 97l4 21h101zM573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="618"
+d="M508 870h116l-5 -21l-175 -97h-73zM573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="618"
+d="M434 870h48l99 -102l-4 -21h-68l-46 49l-10 35l-25 -34l-71 -50h-75l5 22zM573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5
+q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="618"
+d="M296 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM479 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14
+q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="531"
+d="M474 870h116l-5 -21l-175 -97h-73zM241 278l-133 422h87l89 -306l3 -61h1l30 63l217 304h90l-304 -421l-59 -279h-80z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="532"
+d="M189 700h79l-16 -75q40 3 81 3q46 0 85 -10t68 -32t46 -56.5t17 -82.5q0 -76 -27 -127t-72 -82t-101 -44t-113 -13h-15.5t-22.5 0.5t-23 1.5t-16 2l-39 -185h-80zM316 555q-23 0 -44.5 -1.5t-35.5 -4.5l-61 -290q4 -2 13.5 -2.5t20 -1.5t20.5 -1h15q43 0 83 9t71 30.5
+t49 57t18 88.5q0 36 -12 58.5t-32.5 35t-47.5 17.5t-57 5z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="559"
+d="M174 528q20 95 74.5 136.5t137.5 41.5q42 0 71 -10t47 -26.5t26.5 -38t8.5 -43.5q0 -35 -12.5 -59t-31 -42t-40.5 -31.5t-40.5 -27t-31 -28.5t-12.5 -36q0 -19 11.5 -30.5t29 -20.5t38 -18.5t38 -24.5t29 -37.5t11.5 -58.5q0 -39 -17.5 -73t-47 -59t-69 -39.5
+t-83.5 -14.5q-35 0 -65 6.5t-54 21.5l36 67q40 -25 91 -25q21 0 44 7.5t41.5 21.5t31 34.5t12.5 47.5q0 23 -11.5 38t-29 26t-37.5 20.5t-38 23t-29.5 33.5t-11.5 51q0 30 12.5 51t31.5 38t41 31t41 28t30.5 30t11.5 37q0 30 -22 45t-62 15q-109 1 -132 -138l-96 -498
+q-9 -55 -21 -94t-30 -64.5t-44 -37.5t-63 -12q-30 0 -55.5 4.5t-47.5 15.5l22 56q20 -7 36.5 -9t40.5 -2q38 0 57 39t30 104l82 436h-86l13 64h86l7 28v0z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5zM359 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5zM392 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5zM358 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5zM217 656q32 33 55.5 45.5t41.5 12.5q15 0 27 -6.5t23.5 -14t23 -13.5t25.5 -6q23 0 54 24l15 -43q-29 -29 -50 -40t-38 -11q-15 0 -27 6t-23.5 13.5t-23.5 13.5t-27 6q-13 0 -28 -6.5
+t-35 -22.5z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="487"
+d="M414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270
+q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5t47 -26.5zM185 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM368 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5
+t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="487"
+d="M251 643q0 42 26.5 66.5t70.5 24.5q42 0 70 -22t28 -69q0 -39 -28 -64.5t-70 -25.5t-69.5 23.5t-27.5 66.5zM305 643q0 -20 13.5 -31t29.5 -11q19 0 31.5 10t12.5 32t-13.5 32.5t-30.5 10.5t-30 -10t-13 -33zM414 197q-8 -37 -11 -75t-3 -71v-28.5t2 -24.5h-56l-14 87h-4
+q-12 -17 -29.5 -34.5t-38.5 -31.5t-45 -22.5t-51 -8.5q-119 0 -119 155q0 64 16.5 130t51 119t89 87t131.5 34q28 0 68.5 -6.5t75.5 -17.5zM187 52q24 0 46 11.5t41.5 28.5t34.5 36.5t24 36.5l56 270q-30 14 -76 14t-81 -27t-59 -70.5t-36 -98.5t-12 -110q0 -38 15 -64.5
+t47 -26.5z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="754"
+d="M176 56q27 0 51.5 13t44.5 30.5t34.5 35t21.5 28.5l8 68q-11 1 -23 1.5t-23 0.5q-38 0 -71.5 -6t-58 -19t-38.5 -32.5t-14 -47.5q0 -38 17.5 -55t50.5 -17zM332 87q-32 -39 -79.5 -67t-104.5 -28q-31 0 -53.5 10t-37.5 26.5t-22 38t-7 44.5q0 51 22 85.5t59.5 55
+t87.5 29.5t105 9h22.5t22.5 -1q20 65 20 97t-19 45t-63 13q-16 0 -35.5 -2.5t-39.5 -7.5t-38.5 -11.5t-33.5 -13.5l-12 60q42 23 91.5 31t100.5 8q48 0 78.5 -17t37.5 -49q32 37 77.5 53.5t87.5 16.5q74 0 110 -32.5t36 -80.5q0 -53 -24.5 -85t-68.5 -50t-106 -24.5
+t-136 -7.5q-3 -17 -5 -32t-2 -29q0 -55 28 -87t95 -32q32 0 66.5 12.5t55.5 27.5l17 -54q-34 -24 -80.5 -37t-94.5 -13q-58 0 -97.5 26.5t-53.5 72.5h-7zM587 448q-61 0 -102 -40t-63 -115q49 0 93.5 2.5t78.5 12t54 28.5t20 52q0 25 -16.5 42.5t-64.5 17.5z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="420"
+d="M365 43q-26 -22 -61.5 -36.5t-67.5 -18.5l-25 -31q27 -3 44.5 -20.5t17.5 -49.5q0 -42 -31.5 -69t-94.5 -27q-12 0 -25.5 1.5t-27.5 3.5l17 39q5 -1 10.5 -1h10.5q21 0 35 4t22 9.5t11 12.5t3 13q0 19 -21 28t-56 9l57 78q-40 4 -66 21t-41 40.5t-20.5 49.5t-5.5 49
+q0 85 23 152.5t61.5 114.5t88.5 72t103 25q38 0 62.5 -7t44.5 -16l-28 -62q-17 10 -42 15.5t-54 5.5q-34 0 -66.5 -23t-57.5 -60.5t-40 -86t-15 -99.5q0 -65 27 -96t73 -31q30 0 63 13.5t53 27.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="463"
+d="M389 49q-35 -30 -82.5 -45.5t-95.5 -15.5q-80 0 -120.5 46t-40.5 128t23 147t60.5 110t85 69t97.5 24q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -6 -36t-2 -30q0 -55 25 -89.5t78 -34.5q44 0 80.5 14.5
+t56.5 30.5zM304 448q-55 0 -95.5 -37.5t-61.5 -112.5q38 0 79 2t74.5 10.5t55.5 27t22 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5zM343 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="463"
+d="M389 49q-35 -30 -82.5 -45.5t-95.5 -15.5q-80 0 -120.5 46t-40.5 128t23 147t60.5 110t85 69t97.5 24q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -6 -36t-2 -30q0 -55 25 -89.5t78 -34.5q44 0 80.5 14.5
+t56.5 30.5zM304 448q-55 0 -95.5 -37.5t-61.5 -112.5q38 0 79 2t74.5 10.5t55.5 27t22 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5zM374 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="463"
+d="M389 49q-35 -30 -82.5 -45.5t-95.5 -15.5q-80 0 -120.5 46t-40.5 128t23 147t60.5 110t85 69t97.5 24q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -6 -36t-2 -30q0 -55 25 -89.5t78 -34.5q44 0 80.5 14.5
+t56.5 30.5zM304 448q-55 0 -95.5 -37.5t-61.5 -112.5q38 0 79 2t74.5 10.5t55.5 27t22 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5zM343 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="463"
+d="M389 49q-35 -30 -82.5 -45.5t-95.5 -15.5q-80 0 -120.5 46t-40.5 128t23 147t60.5 110t85 69t97.5 24q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -6 -36t-2 -30q0 -55 25 -89.5t78 -34.5q44 0 80.5 14.5
+t56.5 30.5zM304 448q-55 0 -95.5 -37.5t-61.5 -112.5q38 0 79 2t74.5 10.5t55.5 27t22 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5zM195 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM378 654q0 21 12.5 35.5
+t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="259"
+d="M160 500h75l-106 -500h-75zM248 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="259"
+d="M160 500h75l-106 -500h-75zM264 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="259"
+d="M160 500h75l-106 -500h-75zM234 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="259"
+d="M160 500h75l-106 -500h-75zM89 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM272 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="eth" unicode="ð" horiz-adv-x="496"
+d="M276 595l78 34q-16 20 -34.5 33.5t-38.5 22.5l59 27q46 -19 76 -56l76 33l20 -41l-71 -31q16 -32 25 -72t9 -89q0 -126 -23.5 -214.5t-61.5 -145t-86 -82.5t-97 -26q-39 0 -68.5 13t-49 35.5t-29 53.5t-9.5 66q0 69 18.5 132.5t52.5 113t80 79t102 29.5q43 0 64 -11.5
+t36 -28.5q1 70 -25 120l-81 -35zM130 164q0 -54 23 -83t58 -29q53 0 88.5 35.5t57 86.5t30 108t8.5 100q-8 29 -33.5 46t-60.5 17q-38 0 -69.5 -26t-54 -67t-35 -90.5t-12.5 -97.5z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="522"
+d="M321 0l67 316q4 18 7 35.5t3 31.5q0 29 -13.5 47t-50.5 18q-26 0 -51 -12t-47 -30.5t-39.5 -41t-29.5 -44.5l-66 -320h-75l106 500h52l-4 -86h4q13 16 31 33.5t40.5 31.5t50.5 23.5t62 9.5q50 0 79 -24t29 -84q0 -30 -9 -72l-71 -332h-75zM220 656q32 33 55.5 45.5
+t41.5 12.5q15 0 27 -6.5t23.5 -14t23 -13.5t25.5 -6q23 0 54 24l15 -43q-29 -29 -50 -40t-38 -11q-15 0 -27 6t-23.5 13.5t-23.5 13.5t-27 6q-13 0 -28 -6.5t-35 -22.5z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM355 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM376 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM343 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM195 656q32 33 55.5 45.5t41.5 12.5q15 0 27 -6.5t23.5 -14t23 -13.5t25.5 -6q23 0 54 24l15 -43q-29 -29 -50 -40t-38 -11q-15 0 -27 6t-23.5 13.5t-23.5 13.5t-27 6
+q-13 0 -28 -6.5t-35 -22.5z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q42 0 71.5 -13.5t48 -37t26.5 -54t8 -63.5q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61zM130 174q0 -59 22 -90.5t70 -31.5q33 0 62.5 23.5t52 63.5t36 91.5
+t13.5 107.5q0 51 -18.5 80.5t-70.5 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM189 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM372 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5
+t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="480"
+d="M55 374h424v-72h-424v72zM210 525q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42zM210 151q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="498"
+d="M50 156q0 79 20.5 144.5t56.5 112.5t83.5 73t101.5 26q35 0 61 -9.5t45 -26.5l36 39l40 -37l-44 -50q8 -19 12 -40t4 -44q0 -75 -19.5 -140t-54 -113t-80.5 -75.5t-100 -27.5q-40 0 -68.5 11.5t-48.5 31.5l-40 -45l-42 38l50 56q-13 35 -13 76zM386 338v10t-1 10
+l-239 -266q23 -40 76 -40q33 0 62.5 23.5t52 63.5t36 91.5t13.5 107.5zM130 174v-12t1 -12l238 266q-21 32 -72 32q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75zM366 571h-43l-81 128l4 21h91z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75zM377 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75zM356 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75zM210 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5t-12.5 34.5zM393 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="439"
+d="M194 176l5 -96h5l38 97l166 323h80l-236 -446q-26 -49 -51.5 -95.5t-52.5 -83t-56 -58.5t-60 -22q-17 0 -29.5 2t-22.5 7l24 69q11 -4 24 -4q29 0 58 30t65 101l-86 500h80zM337 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="508"
+d="M188 700h75l-62 -274h4q14 17 30 32.5t35 27.5t42.5 19t52.5 7q24 0 45 -7.5t37 -25t25.5 -46.5t9.5 -71q0 -88 -24 -157.5t-63 -117.5t-87.5 -73.5t-96.5 -25.5q-35 0 -61.5 6.5t-35.5 13.5l-44 -208h-75zM337 448q-27 0 -51.5 -14t-45 -34.5t-36.5 -44t-26 -43.5
+l-49 -237q17 -13 35 -18t39 -5q39 0 74.5 21.5t63.5 61.5t44.5 96t16.5 125q0 40 -16.5 66t-48.5 26z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="439"
+d="M194 176l5 -96h5l38 97l166 323h80l-236 -446q-26 -49 -51.5 -95.5t-52.5 -83t-56 -58.5t-60 -22q-17 0 -29.5 2t-22.5 7l24 69q11 -4 24 -4q29 0 58 30t65 101l-86 500h80zM150 653q0 22 12.5 36.5t33.5 14.5t34 -14.5t13 -36.5q0 -20 -13 -34.5t-34 -14.5t-33.5 14.5
+t-12.5 34.5zM333 654q0 21 12.5 35.5t33.5 14.5q22 0 34.5 -14.5t12.5 -35.5t-12.5 -35.5t-34.5 -14.5q-21 0 -33.5 14.5t-12.5 35.5z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="492"
+d="M154 -105q0 23 18 36.5t38 13.5q26 0 37 -16t11 -40q0 -29 -12 -52t-28.5 -40t-33.5 -28t-28 -14l-18 32q20 11 36 27t20 40q-20 0 -30 11t-10 30zM434 0h-316h-78l148 700h80l-133 -626h314z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="888"
+d="M549 618q-23 11 -51 16.5t-75 5.5q-65 0 -115 -31.5t-84 -84.5t-51 -122t-17 -145q0 -30 6 -64.5t23 -64t48 -49t81 -19.5q14 0 27 0.5t27 2t30 5t37 9.5zM419 0q-26 -6 -49 -9t-60 -3q-47 0 -90 13t-76 44t-52.5 82.5t-19.5 128.5q0 96 25 179.5t72 145t114 96.5t152 35
+q22 0 38 -0.5t30.5 -2t29 -4t34.5 -5.5h362l-16 -74h-282l-49 -229h258l-15 -74h-259l-52 -249h287l-15 -74h-367z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="784"
+d="M130 174q0 -59 22 -90.5t70 -31.5q33 0 63 23.5t52.5 63.5t36 91.5t13.5 107.5q0 51 -19 80.5t-71 29.5q-33 0 -63 -22.5t-53.5 -60.5t-37 -87.5t-13.5 -103.5zM387 95q-29 -48 -76.5 -77.5t-98.5 -29.5q-45 0 -75.5 14.5t-50 38.5t-28 54t-8.5 61q0 79 20.5 144.5
+t56.5 112.5t83.5 73t101.5 26q63 0 95.5 -30.5t43.5 -79.5q34 53 83 81.5t103 28.5q36 0 62.5 -10t43.5 -26.5t25 -38t8 -45.5q0 -71 -69 -111.5t-201 -40.5q-12 0 -25 0.5t-27 1.5q-4 -19 -5.5 -36t-1.5 -30q0 -55 24.5 -89.5t77.5 -34.5q44 0 80.5 14.5t56.5 30.5l24 -48
+q-35 -30 -82.5 -45.5t-95.5 -15.5q-29 0 -53 8.5t-42.5 23t-31 34t-18.5 41.5zM625 448q-55 0 -95 -37.5t-62 -112.5h16q32 0 69.5 2t70 10.5t54 27t21.5 51.5q0 10 -3.5 20.5t-11.5 19t-22.5 14t-36.5 5.5z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="505"
+d="M420 746h-47l-97 103l3 21h67l46 -50l9 -34l24 33l71 51h76l-4 -22zM388 180q0 36 -18.5 61t-46.5 45.5t-60.5 39.5t-60.5 44t-46.5 59t-18.5 84q0 53 19.5 91t53 62t79 35t96.5 11q58 0 104 -9t72 -23l-40 -71q-20 11 -59.5 21t-91.5 10q-66 0 -107.5 -30t-41.5 -87
+q0 -37 18.5 -62.5t46.5 -46t60.5 -39.5t60.5 -43.5t46.5 -58.5t18.5 -83q0 -97 -70 -149.5t-201 -52.5q-67 0 -113.5 11.5t-70.5 25.5l41 73q23 -13 62.5 -25.5t93.5 -12.5q31 0 62 5.5t56 19.5t40.5 37t15.5 58z" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="398"
+d="M283 550h-35l-71 182h72l23 -66l7 -58l34 58l56 66h70zM259 141q0 26 -13 44t-33 32.5t-43 28.5t-43 31.5t-33 41t-13 58.5q0 28 13.5 52.5t37 43t56 29t70.5 10.5q53 0 82 -7t52 -20l-25 -60q-40 23 -109 23q-42 0 -69.5 -17.5t-27.5 -53.5q0 -21 13 -36.5t33 -29.5
+t43 -28.5t43 -33t33 -43.5t13 -59q0 -78 -52.5 -118.5t-140.5 -40.5q-45 0 -82.5 9t-60.5 23l28 63q20 -13 52.5 -22t67.5 -9q49 0 78.5 21.5t29.5 67.5z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="511"
+d="M213 500l-70 -333q-6 -27 -6 -50q0 -28 11 -46.5t40 -18.5q24 0 48.5 12t47 31t41 42t30.5 45l67 318h75l-63 -297q-4 -17 -8 -41.5t-7.5 -51.5t-5.5 -52.5t-2 -44.5v-13h-59v95h-4q-15 -20 -34.5 -39t-43 -34t-50.5 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33
+t-8 52.5q0 35 10 79l68 325h75zM205 643h281l-13 -62h-282z" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="618"
+d="M318 871q11 -35 36 -53.5t64 -18.5q32 0 55 6t40 15.5t30 22.5t24 28l41 -19q-25 -60 -74 -91t-119 -31q-29 0 -53 9.5t-41.5 25.5t-28 37.5t-13.5 44.5zM573 700h76l-98 -467q-14 -64 -35 -110t-52.5 -75t-75.5 -43t-102 -14q-55 0 -93 12.5t-61.5 35t-34 55t-10.5 71.5
+q0 41 11 93l93 442h80l-93 -443q-11 -44 -11 -80q0 -63 33 -87.5t98 -24.5q39 0 68.5 11t51 34t36 59t25.5 87z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="531"
+d="M252 794q0 20 14 33.5t37 13.5t36.5 -13.5t13.5 -33.5t-13.5 -33t-36.5 -13t-37 13t-14 33zM435 794q0 20 13.5 33.5t36.5 13.5t37 -13.5t14 -33.5t-14 -33t-37 -13t-36.5 13t-13.5 33zM241 278l-133 422h87l89 -306l3 -61h1l30 63l217 304h90l-304 -421l-59 -279h-80z
+" />
+ <glyph glyph-name="Zcaron" unicode="Ž"
+d="M386 746h-47l-97 103l3 21h67l46 -50l9 -34l24 33l71 51h76l-4 -22zM14 75l435 511l49 40h-366l15 74h447l-15 -75l-438 -514l-47 -37h367l-15 -74h-447z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="429"
+d="M289 550h-35l-71 182h72l23 -66l7 -58l34 58l56 66h70zM11 69l281 319l55 43h-258l15 69h337l-15 -69l-284 -322l-54 -40h261l-14 -69h-337z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M319 431l-73 -431q-12 -71 -23 -102.5t-29.5 -55t-45 -37t-64.5 -13.5q-29 0 -60 7t-55 17l21 65q23 -10 43.5 -15t44.5 -5q38 0 57.5 34t32.5 105l68 431h-85v69h96l11 67q12 74 43.5 109.5t103.5 35.5q33 0 64.5 -7t56.5 -18l-23 -64q-48 20 -92 20q-37 0 -51 -23
+t-23 -79l-7 -41h120v-69h-131z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="431"
+d="M356 732h30l66 -182h-63l-24 66l-6 58l-34 -58l-57 -66h-68z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="349"
+d="M150 656q32 33 55.5 45.5t41.5 12.5q15 0 27 -6.5t23.5 -14t23 -13.5t25.5 -6q23 0 54 24l15 -43q-29 -29 -50 -40t-38 -11q-15 0 -27 6t-23.5 13.5t-23.5 13.5t-27 6q-13 0 -28 -6.5t-35 -22.5z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="277"
+d="M156 793q0 20 13 34t35 14t35 -14t13 -34t-13 -33.5t-35 -13.5t-35 13.5t-13 33.5zM279 793q0 20 13 34t35 14t35 -14t13 -34t-13 -33.5t-35 -13.5t-35 13.5t-13 33.5zM210 700h80l-148 -700h-80z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="528"
+d="M602 626h-207l-132 -626h-80l132 626h-205l15 74h492z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="627"
+d="M129 322h403l-16 -68h-403z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="779"
+d="M129 322h555l-16 -68h-555z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="186"
+d="M215 628q0 -29 -14.5 -43.5t-39.5 -14.5q-26 0 -39.5 18t-13.5 41q0 34 13 60.5t31 45t37 29t31 14.5l15 -35q-23 -11 -40 -30.5t-21 -45.5q3 1 9 1q15 0 23.5 -12t8.5 -28z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="186"
+d="M130 658q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="189"
+d="M24 49q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="325"
+d="M354 628q0 -29 -14.5 -43.5t-39.5 -14.5q-26 0 -39.5 18t-13.5 41q0 34 13 60.5t31 45t37 29t31 14.5l15 -35q-23 -11 -40 -30.5t-21 -45.5q3 1 9 1q15 0 23.5 -12t8.5 -28zM215 628q0 -29 -14.5 -43.5t-39.5 -14.5q-26 0 -39.5 18t-13.5 41q0 34 13 60.5t31 45t37 29
+t31 14.5l15 -35q-23 -11 -40 -30.5t-21 -45.5q3 1 9 1q15 0 23.5 -12t8.5 -28z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="325"
+d="M268 658q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47zM130 658q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5
+t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="327"
+d="M161 49q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47zM24 49q0 12 5.5 21.5t13.5 15.5t17.5 9.5t18.5 3.5q30 0 40.5 -15t10.5 -43q0 -34 -13 -60t-31 -44.5
+t-37 -30t-31 -15.5l-16 34q23 12 40 31t22 46q-40 2 -40 47z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="462"
+d="M107 502h124l39 -11v47l34 162h74l-35 -162l-19 -47l44 11h124l-16 -72h-126l-38 11l2 -42l-84 -399l-57 -200h-47l30 201l84 398l19 42l-44 -11h-124z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="462"
+d="M241 400l18 41l-44 -11h-124l16 72h124l39 -11q0 1 -0.5 8.5t-0.5 15.5v22l35 163h74l-35 -163l-19 -46l44 11h124l-16 -72h-126l-38 11l2 -41l-26 -124l-19 -41l42 11h126l-15 -72h-124l-40 11v-24q0 -10 1 -22l-29 -139l-57 -200h-47l30 201l30 138l19 46l-44 -11h-124
+l15 72h124l39 -11q0 2 -0.5 8t-0.5 14v19z" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="452"
+d="M112 311q0 31 11 56.5t29.5 44t44 28.5t54.5 10t54.5 -9.5t44 -27.5t29.5 -43.5t11 -58.5t-11 -58.5t-29.5 -43.5t-44 -27.5t-54.5 -9.5t-54.5 9.5t-44 27.5t-29.5 43.5t-11 58.5z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="721"
+d="M510 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42zM268 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42zM27 46q0 27 16 42.5t42 15.5t42 -15.5t16 -42.5q0 -26 -16 -42t-42 -16t-42 16t-16 42z
+" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="1038"
+d="M582 713l50 -39l-513 -686l-50 39zM60 490q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM129 498q0 -32 14.5 -50t43.5 -18q21 0 40.5 11t34.5 31.5t23.5 50t8.5 66.5q0 35 -15.5 50
+t-43.5 15q-21 0 -40.5 -12.5t-34 -33.5t-23 -49.5t-8.5 -60.5zM348 119q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM417 127q0 -32 14.5 -50t43.5 -18q21 0 40.5 11t34.5 31.5t23.5 50
+t8.5 66.5q0 35 -15.5 50t-43.5 15q-21 0 -40.5 -12.5t-34 -33.5t-23 -49.5t-8.5 -60.5zM687 119q0 58 17.5 100t44.5 69t60 40t65 13q57 0 86.5 -31t29.5 -88q0 -54 -15 -95t-40.5 -69t-60 -42.5t-72.5 -14.5q-51 0 -83 31t-32 87zM756 127q0 -32 14.5 -50t43.5 -18
+q21 0 40.5 11t34.5 31.5t23.5 50t8.5 66.5q0 35 -15.5 50t-43.5 15q-21 0 -40.5 -12.5t-34 -33.5t-23 -49.5t-8.5 -60.5z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="282"
+d="M38 259l200 230l44 -48l-123 -144l-56 -37l33 -39l68 -141l-55 -42z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="282"
+d="M282 268l-200 -230l-45 43l124 145l57 41l-35 42l-68 142l57 38z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M67 454h74q24 67 61.5 115.5t82 80t92.5 47t93 15.5q48 0 81.5 -8t56.5 -21l-35 -61q-37 22 -118 22q-27 0 -59.5 -11t-64.5 -34t-61 -59t-50 -86h276l-31 -66h-268q-8 -34 -12 -70h245l-31 -66h-219v-6q0 -41 9 -75.5t29 -60t53 -40t81 -14.5q32 0 63.5 9t56.5 23
+l14 -60q-17 -12 -37.5 -19.5t-42.5 -12t-43 -6.5t-39 -2q-54 0 -95 18.5t-68.5 51.5t-41.5 78t-14 97v19h-99l32 66h72q5 38 12 70h-87z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="886"
+d="M440 632h-136v-292h-78v292h-136v68h350v-68zM822 507l10 103h-4l-39 -85l-87 -140h-33l-89 139l-36 86h-4l13 -102v-168h-73v360h78l105 -168l28 -58h1l30 60l97 166h79v-360h-76v167z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="512"
+d="M352 95h-4q-14 -20 -33.5 -39t-43.5 -34t-51 -24.5t-57 -9.5q-22 0 -40.5 5t-32.5 17.5t-22 33t-8 52.5q0 35 10 79l68 325h76l-70 -333q-6 -27 -6 -50q0 -28 10.5 -45.5t39.5 -17.5q24 0 49.5 12t48.5 31t42 42.5t32 45.5l62 315h75l-92 -500q-36 -213 -173 -212
+q-7 0 -14 0.5t-14 1.5l15 70q27 0 44.5 8t29.5 25.5t20.5 44t16.5 61.5zM271 702q0 -47 19.5 -64.5t49.5 -17.5q31 0 58.5 19t44.5 62l54 -19q-20 -58 -67.5 -89t-103.5 -31q-25 0 -47.5 6t-39.5 19t-27 33.5t-10 48.5v9z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="651"
+d="M394 796q0 23 17 38t42 15q26 0 43 -15t17 -38q0 -22 -17 -37t-43 -15q-25 0 -42 15t-17 37zM71 256q0 92 25 175t71.5 145.5t112 99t145.5 36.5q48 0 89 -14.5t70.5 -46t46 -81.5t16.5 -122q0 -94 -25 -177.5t-70 -146.5t-107.5 -99.5t-137.5 -36.5q-118 0 -177 68.5
+t-59 199.5zM155 257q0 -94 39 -145.5t115 -51.5q56 0 102.5 31t80.5 84t52.5 123t18.5 148q0 58 -13 96t-34.5 59.5t-49 30t-55.5 8.5q-57 0 -104 -31.5t-80.5 -84.5t-52.5 -122.5t-19 -144.5z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="270"
+d="M133 119q-3 -17 -3 -28q0 -19 6.5 -27.5t17.5 -8.5q20 0 33.5 2.5t32.5 9.5v-57q-9 -5 -21 -8.5t-24.5 -5.5t-25 -3.5t-22.5 -1.5q-35 0 -56 16t-21 59q0 20 6 49l124 585h75zM341 701h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="528"
+d="M470 870h116l-5 -21l-175 -97h-73zM602 626h-207l-132 -626h-80l132 626h-205l15 74h492z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="313"
+d="M71 500h74l21 99l80 23l-26 -122h131l-15 -64h-130l-63 -302q-2 -12 -3.5 -22t-1.5 -18q0 -24 11 -33t33 -9q24 0 44 6t40 18v-61q-21 -12 -54 -19.5t-63 -7.5q-91 0 -91 83q0 17 5 42l68 323h-75zM375 701h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="541"
+d="M465 870h116l-5 -21l-175 -97h-73zM253 221v-107h2l45 109l265 477h86l-402 -711h-37l-108 711h82z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="447"
+d="M192 207l9 -95h2l43 97l169 291h86l-312 -511h-32l-97 511h80zM350 720h84l-5 -21l-123 -128h-44z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="515"
+d="M164 331l15 69h14q18 0 44.5 1.5t42.5 3.5q27 3 55 12.5t50.5 26.5t37 42t14.5 59q0 45 -32 70t-87 25q-51 0 -85 -8.5t-62 -18.5l-8 65q23 11 69.5 22.5t107.5 11.5q38 0 71 -9.5t57.5 -27.5t38.5 -45t14 -63q0 -43 -13.5 -76t-36 -57t-52.5 -38.5t-63 -19.5v-4
+q21 -5 41.5 -15.5t37 -28.5t26.5 -44.5t10 -63.5q0 -66 -27 -110.5t-70 -71.5t-95.5 -38.5t-104.5 -11.5q-63 0 -103.5 7.5t-64.5 18.5l36 73q20 -11 57 -19t93 -8q34 0 69 8.5t63 27.5t45.5 49.5t17.5 74.5q0 30 -10.5 50t-28.5 33t-41 19t-47 8q-11 1 -22 1h-22h-52z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSans-Italic.ttf has changed
Binary file web/res/fonts/PTSans-Italic.woff has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSans.css Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,43 @@
+@font-face {
+ font-family: "PT Sans";
+ font-weight: normal;
+ font-style: normal;
+ src:
+ url("PTSans.eot?") format("eot"),
+ url("PTSans.woff") format("woff"),
+ url("PTSans.ttf") format("truetype"),
+ url("PTSans.svg#PTSans") format("svg");
+}
+
+@font-face {
+ font-family: "PT Sans";
+ font-weight: bold;
+ font-style: normal;
+ src:
+ url("PTSans-Bold.eot?") format("eot"),
+ url("PTSans-Bold.woff") format("woff"),
+ url("PTSans-Bold.ttf") format("truetype"),
+ url("PTSans-Bold.svg#PTSans-Bold") format("svg");
+}
+
+@font-face {
+ font-family: "PT Sans";
+ font-weight: normal;
+ font-style: italic;
+ src:
+ url("PTSans-Italic.eot?") format("eot"),
+ url("PTSans-Italic.woff") format("woff"),
+ url("PTSans-Italic.ttf") format("truetype"),
+ url("PTSans-Italic.svg#PTSans") format("svg");
+}
+
+@font-face {
+ font-family: "PT Sans";
+ font-weight: bold;
+ font-style: italic;
+ src:
+ url("PTSans-BoldItalic.eot?") format("eot"),
+ url("PTSans-BoldItalic.woff") format("woff"),
+ url("PTSans-BoldItalic.ttf") format("truetype"),
+ url("PTSans-BoldItalic.svg#PTSans-BoldItalic") format("svg");
+}
Binary file web/res/fonts/PTSans.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSans.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,611 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 11:14:40 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-Regular" horiz-adv-x="545" >
+ <font-face
+ font-family="PT Sans"
+ font-weight="400"
+ font-stretch="normal"
+ units-per-em="1000"
+ panose-1="2 11 5 3 2 2 3 2 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-37 -245 1093 871"
+ underline-thickness="50"
+ underline-position="-50"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="267"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="305"
+d="M127 700h83v-347l-17 -176h-49l-17 176v347zM110 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="335"
+d="M207 700h78l-31 -193h-47v193zM90 700h78l-31 -193h-47v193z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M280 225h-105l-39 -167h-69l39 167h-78l14 64h79l31 131h-74l14 64h75l38 158h69l-38 -158h105l38 158h69l-38 -158h77l-16 -64h-76l-31 -131h73l-16 -64h-72l-39 -167h-69zM190 289h105l31 131h-105z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M242 -12q-55 1 -97.5 9.5t-68.5 22.5l27 73q20 -12 54.5 -22t84.5 -11v270q-30 15 -59.5 32t-52.5 40.5t-37 55.5t-14 76q0 72 40.5 118t122.5 57v91h68v-88q51 -2 83.5 -9.5t58.5 -19.5l-24 -70q-20 10 -48 17.5t-70 9.5v-247q31 -16 62 -34.5t55.5 -42.5t39.5 -56
+t15 -75q0 -78 -43.5 -128.5t-128.5 -64.5v-92h-68v88zM399 178q0 24 -8.5 43t-22.5 34t-33 27t-41 23v-243q46 7 75.5 35.5t29.5 80.5zM162 539q0 -43 27.5 -70t68.5 -49v219q-53 -6 -74.5 -35t-21.5 -65z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="773"
+d="M637 713l49 -38l-513 -687l-50 39zM70 542q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5t-12 79.5zM144 542q0 -60 21.5 -86t59.5 -26q19 0 34 5.5t25.5 18t16 34
+t5.5 54.5t-5.5 54.5t-16 34t-25.5 18t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5zM427 171q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5t-12 79.5zM501 171q0 -60 21.5 -86
+t59.5 -26q19 0 34 5.5t25.5 18t16 34t5.5 54.5t-5.5 54.5t-16 34t-25.5 18t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="814"
+d="M118 187q0 40 14 76.5t38 67.5t54.5 57t63.5 46q-24 36 -41.5 72t-17.5 78q0 24 8 47t25.5 41t45 29t66.5 11q41 0 69 -10.5t45 -27.5t24.5 -38t7.5 -43q0 -42 -32.5 -86.5t-102.5 -85.5q16 -29 37.5 -59.5t45.5 -60.5t49 -59.5t50 -54.5q11 12 22 30.5t21.5 39t19 42.5
+t15.5 42l62 -29q-6 -17 -17 -40.5t-24.5 -48t-27.5 -47t-26 -37.5q21 -20 38 -34.5t31.5 -25t28 -19t27.5 -16.5l-50 -56q-53 26 -121 93q-18 -18 -39.5 -34.5t-48.5 -29.5t-59.5 -21t-71.5 -8q-47 0 -88.5 13t-72.5 38.5t-49.5 62.5t-18.5 85zM519 131q-29 29 -57 63
+t-53.5 68t-47 65.5t-36.5 55.5q-27 -20 -50 -41t-40.5 -44.5t-27 -50.5t-9.5 -58t13 -55.5t35.5 -41t51.5 -25.5t61 -9q25 0 48.5 6.5t44.5 16.5t38.5 23t28.5 27zM307 584q0 -30 12.5 -59.5t32.5 -58.5q53 34 73.5 62t20.5 49q0 32 -15.5 52t-53.5 20q-36 0 -53 -18
+t-17 -47z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="218"
+d="M90 700h78l-31 -193h-47v193z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="280"
+d="M227 -220q-46 48 -78 105.5t-51.5 118t-28.5 122t-9 117.5q0 55 9 116t29 122.5t52.5 120.5t79.5 110l48 -35q-40 -51 -66.5 -105.5t-42.5 -110.5t-22.5 -111.5t-6.5 -106.5q0 -48 7.5 -104.5t24 -113t43 -110.5t63.5 -98z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="280"
+d="M53 712q46 -48 78 -105.5t51.5 -118t28.5 -122t9 -117.5q0 -55 -9 -116t-29 -122.5t-52.5 -120.5t-79.5 -110l-48 35q40 51 67 106t42.5 111t22 111t6.5 106q0 48 -8 104t-24.5 113t-42.5 111t-63 98z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="351"
+d="M130 715l25 -42l18 -56l21 57l24 40l48 -26l-26 -43l-46 -48l68 12h48v-56h-46l-64 12l46 -48l23 -39l-47 -28l-26 42l-23 61l-19 -58l-25 -42l-50 28l27 42l42 42l-58 -12h-50v56h50l62 -12l-45 44l-26 46z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="505"
+d="M40 374h176v181h72v-181h176v-72h-176v-180h-72v180h-176v72z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="225"
+d="M49 43q0 24 16 39t41 15q31 0 50.5 -22t19.5 -64q0 -36 -10 -63t-26 -46.5t-35 -32t-38 -18.5l-25 39q36 14 53.5 43.5t17.5 59.5q-9 -3 -17 -3q-20 0 -33.5 13.5t-13.5 39.5z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="360"
+d="M59 325h242v-74h-242v74z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="214"
+d="M49 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="354"
+d="M328 712l63 -28l-365 -824l-63 28z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M43 350q0 180 58.5 271t170.5 91q121 0 175.5 -89.5t54.5 -272.5q0 -180 -58.5 -271t-171.5 -91q-119 0 -174 95t-55 267zM126 350q0 -65 8.5 -118.5t26.5 -92t45.5 -60t65.5 -21.5q76 0 111.5 70.5t35.5 221.5q0 64 -7.5 118t-25 93t-45.5 60t-69 21q-75 0 -110.5 -71
+t-35.5 -221z" />
+ <glyph glyph-name="one" unicode="1"
+d="M108 74h140v484l10 59l-40 -47l-110 -79l-38 51l220 170h36v-638h137v-74h-355v74z" />
+ <glyph glyph-name="two" unicode="2"
+d="M446 541q0 -53 -19.5 -108.5t-51 -111.5t-70.5 -109.5t-78 -101.5l-49 -43v-4l64 11h218v-74h-398v29q22 23 53 57t64.5 75.5t66 88t59 94.5t42.5 95t16 89q0 49 -28 81.5t-85 32.5q-38 0 -74 -15.5t-62 -35.5l-33 57q35 30 83 47t103 17q43 0 76 -12.5t56 -35.5
+t35 -54.5t12 -68.5z" />
+ <glyph glyph-name="three" unicode="3"
+d="M234 58q34 0 63 10t50 29.5t33 46.5t12 59q0 70 -41.5 104t-114.5 34h-74v29l144 222l46 44l-65 -10h-198v74h357v-29l-159 -239l-35 -29v-2l34 7q40 -1 74 -14.5t59 -39t39 -61t14 -80.5q0 -54 -19 -96t-51.5 -70.5t-76.5 -43.5t-93 -15q-45 0 -81 7t-63 18l21 71
+q23 -11 54.5 -18.5t70.5 -7.5z" />
+ <glyph glyph-name="four" unicode="4"
+d="M524 215h-118v-215h-78v215h-308v33l332 463h54v-426h118v-70zM328 503l10 82h-3l-35 -68l-141 -191l-48 -49l70 8h147v218z" />
+ <glyph glyph-name="five" unicode="5"
+d="M213 58q69 0 114 40t45 116q0 73 -44.5 109t-122.5 36l-84 -5v346h312v-74h-237v-199l43 2q99 -1 156 -55t57 -155q0 -56 -19 -99.5t-51.5 -72.5t-76.5 -44t-94 -15q-45 0 -76 5t-58 15l21 68q23 -9 49.5 -13.5t65.5 -4.5z" />
+ <glyph glyph-name="six" unicode="6"
+d="M492 211q0 -46 -14 -86.5t-41 -71t-67 -48t-91 -17.5q-50 0 -90 16t-69 47.5t-44.5 77.5t-15.5 106q0 99 25.5 182.5t70.5 145.5t106.5 100.5t133.5 48.5l17 -64q-56 -10 -102 -38t-80.5 -69t-56.5 -92t-30 -105q16 27 54 49.5t93 22.5q94 0 147.5 -54t53.5 -151z
+M409 203q0 71 -33 107t-102 36q-49 0 -84.5 -24t-49.5 -54q-2 -14 -2 -23v-20q0 -31 8.5 -61t26.5 -53.5t44.5 -38t62.5 -14.5q29 0 52.5 11t40.5 30t26.5 46t9.5 58z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M110 0l251 586l44 49l-59 -9h-285v74h418v-27l-288 -673h-81z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M68 167q0 63 33 109.5t103 84.5q-25 15 -46.5 31.5t-38 37.5t-26 47t-9.5 60q0 39 13.5 71t39 55t61 36t80.5 13q42 0 76 -12t57.5 -33t36.5 -50t13 -64q0 -57 -26 -100.5t-86 -85.5q26 -15 49.5 -33t41 -40t27.5 -49.5t10 -62.5q0 -43 -14 -78.5t-41 -61t-66 -40
+t-89 -14.5q-48 0 -85 14t-62.5 38t-38.5 56.5t-13 70.5zM399 177q0 30 -12 52.5t-31.5 41t-44.5 33.5t-52 29q-61 -34 -87 -76t-26 -80q0 -24 8 -46t24 -38t39.5 -25.5t54.5 -9.5q25 0 48 7.5t40.5 22t28 37t10.5 52.5zM162 539q0 -28 11 -49.5t29.5 -38.5t42.5 -31.5
+t50 -27.5q45 35 66.5 69t21.5 75q0 51 -31.5 78.5t-75.5 27.5q-27 0 -48 -9t-36 -23t-22.5 -32.5t-7.5 -38.5z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M52 488q0 48 14 89t41 71t67.5 47t94.5 17q102 0 159 -66t57 -186q0 -113 -25.5 -197.5t-70.5 -142.5t-106.5 -90.5t-133.5 -41.5l-18 64q58 9 104.5 34t80 63t54.5 86.5t29 105.5q-27 -32 -59.5 -44.5t-85.5 -12.5q-41 0 -77.5 13.5t-64.5 39.5t-44 64t-16 87zM135 496
+q0 -71 37.5 -106.5t98.5 -35.5q49 0 84 16t50 42q2 13 2 23v21q0 36 -8.5 69.5t-25.5 60t-44.5 41.5t-64.5 15q-61 0 -95 -38.5t-34 -107.5z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="219"
+d="M91 449q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42zM91 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="256"
+d="M89 43q0 24 16 39t41 15q31 0 50.5 -22t19.5 -64q0 -36 -10 -63t-26 -46.5t-35 -32t-38 -18.5l-25 39q36 14 53.5 43.5t17.5 59.5q-9 -3 -17 -3q-20 0 -33.5 13.5t-13.5 39.5zM96 449q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16
+q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="505"
+d="M42 305v29l378 231l38 -62l-237 -145l-91 -38l90 -32l243 -144l-38 -60z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="505"
+d="M40 457h424v-72h-424v72zM40 291h424v-72h-424v72z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="505"
+d="M463 344v-29l-378 -231l-38 61l237 145l91 38l-90 32l-243 144l38 61z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="436"
+d="M150 177q-1 5 -1 11v11q0 42 12.5 74t31 58.5t40 49.5t40 46.5t31 50t12.5 60.5q0 46 -26.5 75t-88.5 29q-36 0 -73 -12.5t-64 -29.5l-27 62q38 23 80 36.5t104 13.5q44 0 77.5 -12.5t56 -34.5t33.5 -52t11 -64q0 -45 -13.5 -78.5t-34 -61t-44 -51.5t-44 -50.5t-34 -57.5
+t-13.5 -73h-66zM130 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="1064"
+d="M707 491h34l-51 -287q-5 -26 -7.5 -46.5t-2.5 -36.5q0 -25 8.5 -36.5t29.5 -11.5q34 0 67.5 18t59.5 51t42.5 79.5t16.5 104.5q0 77 -26 136t-73 99.5t-112 61.5t-143 21q-81 0 -152.5 -30t-124 -83t-83 -127t-30.5 -161q0 -89 27.5 -159t78.5 -118t122 -73t158 -25
+q29 0 66 6.5t67 21.5l20 -64q-45 -19 -83 -25.5t-82 -6.5q-93 0 -174.5 28t-142 83t-95.5 136.5t-35 188.5q0 109 37.5 197t101.5 150t149 95.5t180 33.5q90 0 167 -26.5t133.5 -76t89 -121t32.5 -162.5q0 -64 -22 -122.5t-59.5 -102.5t-87.5 -70.5t-106 -26.5q-42 0 -67 18
+t-25 67q0 9 1 19.5t3 22.5h-4q-14 -23 -33 -45.5t-42.5 -40.5t-50 -29.5t-55.5 -11.5q-24 0 -46 10.5t-38 30.5t-25.5 47.5t-9.5 62.5q0 64 21 126t56.5 110t83 77.5t100.5 29.5q37 0 59 -11t43 -27zM650 393q-17 20 -34 27.5t-43 7.5q-39 0 -73 -23.5t-58.5 -61t-39 -84
+t-14.5 -91.5q0 -39 16 -66.5t58 -27.5q20 0 41.5 13t42.5 35.5t40 50.5t34 57z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="585"
+d="M418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266h206l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="584"
+d="M507 540q0 -25 -8 -51t-24 -48.5t-41 -39.5t-59 -26v-4q30 -5 57.5 -17t48.5 -33t34 -51t13 -71q0 -54 -22.5 -93.5t-59 -64.5t-83.5 -37t-96 -12h-40t-48 1.5t-50 4t-44 7.5v689q37 6 86 10t107 4q39 0 79.5 -6.5t73.5 -25t54.5 -51.5t21.5 -85zM275 64q32 0 62 7.5
+t53 24t36.5 40.5t13.5 57q0 41 -16.5 66t-43 39t-59.5 19t-66 5h-87v-251q7 -2 20 -3t28 -2t31 -1.5t28 -0.5zM220 392q17 0 41 1t40 3q24 8 45 19.5t37.5 27t26 36t9.5 44.5q0 33 -12.5 54.5t-33.5 34.5t-48 18.5t-55 5.5q-33 0 -60.5 -1.5t-41.5 -4.5v-238h52z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="571"
+d="M533 29q-30 -23 -76 -32t-98 -9q-63 0 -118 21.5t-96 65.5t-65 112.5t-24 162.5q0 98 26.5 166.5t70 112t97.5 63.5t110 20q60 0 98 -6.5t65 -17.5l-20 -73q-48 23 -137 23q-41 0 -81 -15t-71.5 -49t-50.5 -89t-19 -135q0 -72 18 -126t49.5 -90t74 -54t92.5 -18
+q45 0 78.5 9t56.5 23z" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="654"
+d="M85 700q19 3 42.5 4.5t49 2t50 1t45.5 0.5q84 0 145.5 -26t101.5 -72.5t59.5 -111.5t19.5 -143q0 -71 -18.5 -136.5t-58.5 -116t-104 -81t-155 -30.5q-16 0 -41.5 0.5t-52.5 2t-50 2.5t-33 3v701zM274 634h-28.5t-30.5 -1t-27.5 -2t-19.5 -2v-560q5 -1 19 -1.5t29 -1
+t29 -1t19 -0.5q70 0 117.5 24t76 64.5t40.5 93t12 108.5q0 49 -11 98.5t-38 89.5t-72.5 65.5t-114.5 25.5z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="536"
+d="M85 700h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386v700z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="517"
+d="M85 700h381v-74h-298v-239h278v-74h-278v-313h-83v700z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="612"
+d="M321 349h235v-308q-16 -12 -38.5 -22t-48 -17t-53 -10.5t-53.5 -3.5q-67 0 -123 21.5t-97 66t-64 113t-23 161.5q0 97 28 166t73 112.5t101 63.5t112 20q60 0 99 -6.5t66 -17.5l-21 -73q-48 23 -137 23q-42 0 -83.5 -14.5t-74.5 -48.5t-54 -89t-21 -136q0 -74 17 -128
+t47.5 -89.5t73.5 -53t94 -17.5q64 0 109 25v195l-164 20v47z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="672"
+d="M504 321h-336v-321h-83v700h83v-305h336v305h83v-700h-83v321z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="291"
+d="M104 700h83v-700h-83v700z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="291"
+d="M112 700h83v-546q0 -80 -35.5 -122t-107.5 -42q-8 0 -20 1t-24 3t-23.5 5t-18.5 7l16 71q28 -13 61 -13q42 0 55.5 29.5t13.5 80.5v526z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="610"
+d="M215 324h-47v-324h-83v700h83v-326l45 14l235 312h96l-234 -301l-42 -33l51 -40l256 -326h-105z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="517"
+d="M499 0h-414v700h83v-626h331v-74z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="791"
+d="M623 470l10 105h-5l-38 -96l-182 -316h-25l-193 317l-36 95h-5l14 -104v-471h-78v700h62l219 -358l33 -78h2l31 80l209 356h65v-700h-83v470z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="673"
+d="M211 458l-54 101h-4l10 -101v-458h-78v711h44l335 -467l52 -96h5l-11 96v456h78v-711h-44z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="684"
+d="M56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5
+t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="559"
+d="M85 693q38 9 82 12t87 3q46 0 93.5 -9t86.5 -33t63.5 -66t24.5 -107q0 -64 -23 -108t-61 -71.5t-87 -39.5t-101 -12h-16.5t-24 0.5t-24.5 1.5t-17 2v-266h-83v693zM256 636q-26 0 -50 -1t-38 -5v-290q5 -2 16 -2.5t23 -1t23 -0.5h16q34 0 67.5 6.5t60.5 23.5t43.5 48
+t16.5 79q0 41 -15.5 68.5t-41 44t-57.5 23.5t-64 7z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="684"
+d="M704 -171q-24 -7 -47 -9.5t-46 -2.5q-50 0 -97.5 10.5t-92 23t-85.5 23t-78 10.5q-24 0 -46 -6v73q14 3 27 5t27 2q42 0 83.5 -10.5t84.5 -23t88 -23t95 -10.5q44 0 87 10v-72zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5
+q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="595"
+d="M85 693q38 7 87.5 11t90.5 4q46 0 87.5 -10t73 -33t50.5 -60t19 -90q0 -82 -45 -133t-114 -68l48 -37l174 -277h-97l-193 302l-98 15v-317h-83v693zM265 636h-27t-27 -1t-24.5 -2t-18.5 -3v-258h78q69 0 114 34t45 106q0 54 -37 89t-103 35z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="531"
+d="M401 178q0 42 -25 68.5t-62.5 47t-81.5 38.5t-81.5 43.5t-62.5 63t-25 95.5q0 82 57 130t162 48q61 0 111 -9t78 -23l-25 -73q-23 11 -67.5 21t-100.5 10q-66 0 -99 -29.5t-33 -69.5q0 -39 25 -65t62.5 -46.5t81.5 -40.5t81.5 -46.5t62.5 -63.5t25 -92q0 -45 -16 -81
+t-47 -62t-75 -40t-100 -14q-75 0 -124 11.5t-76 25.5l28 75q23 -13 68 -25.5t101 -12.5q33 0 62 6.5t50 21t33.5 36.5t12.5 52z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="555"
+d="M537 626h-218v-626h-83v626h-218v74h519v-74z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="652"
+d="M487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5t-95 -14q-124 0 -187 56t-63 170v483h83v-444q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="568"
+d="M267 219l24 -106h1l26 108l169 479h83l-265 -711h-37l-270 711h91z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="828"
+d="M222 231l16 -116h1l17 118l144 467h40l145 -469l17 -116h1l18 118l118 467h81l-195 -711h-46l-142 469l-18 106h-5l-18 -107l-142 -468h-46l-200 711h88z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="618"
+d="M259 356l-213 344h100l142 -237l25 -57l24 57l150 237h92l-220 -337l230 -363h-97l-158 251l-27 60l-26 -60l-162 -251h-93z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="558"
+d="M239 278l-231 422h97l164 -306l17 -61h1l18 63l157 304h89l-229 -421v-279h-83v278z" />
+ <glyph glyph-name="Z" unicode="Z"
+d="M38 75l353 511l42 40h-395v74h470v-75l-355 -514l-42 -37h397v-74h-470v75z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="304"
+d="M85 700h181v-70h-103v-790h103v-70h-181v930z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="380"
+d="M399 -111l-66 -29l-370 824l67 28z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="304"
+d="M220 -230h-182v70h104v790h-104v70h182v-930z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="500"
+d="M234 711h29l169 -276h-82l-80 135l-23 69l-31 -70l-92 -134h-76z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="408"
+d="M0 -135h408v-70h-408v70z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="280"
+d="M220 571h-45l-115 128v21h95z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="540"
+d="M77 700h80v-249h4q23 29 58.5 45t77.5 16q97 0 145.5 -62t48.5 -192q0 -131 -64 -199t-180 -68q-56 0 -101.5 12t-68.5 26v671zM283 442q-50 0 -81 -28t-45 -79v-252q19 -11 46 -16.5t56 -5.5q68 0 108.5 48t40.5 150q0 39 -7 73t-22 58t-38.5 38t-57.5 14z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="451"
+d="M418 33q-30 -22 -71 -33.5t-86 -11.5q-58 0 -98 18.5t-65.5 53t-37 83t-11.5 107.5q0 127 56 194.5t161 67.5q48 0 81.5 -7.5t60.5 -21.5l-23 -69q-23 13 -51 20.5t-60 7.5q-142 0 -142 -192q0 -38 7.5 -72.5t25 -61t46 -42.5t70.5 -16q36 0 64.5 11t46.5 25z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="538"
+d="M461 172q0 -51 1 -92.5t9 -81.5h-54l-20 71h-4q-20 -35 -58 -58t-89 -23q-100 0 -148.5 63t-48.5 197q0 128 60.5 194.5t166.5 66.5q37 0 58.5 -4t46.5 -13v208h80v-528zM259 58q51 0 81 26.5t41 80.5v248q-18 14 -41 20t-61 6q-69 0 -108 -45.5t-39 -145.5
+q0 -41 6.5 -76t21.5 -60t39.5 -39.5t59.5 -14.5z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="508"
+d="M442 40q-30 -24 -75.5 -38t-96.5 -14q-57 0 -99 18.5t-69 53t-40 82.5t-13 108q0 128 57 195t163 67q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -33 -6 -73h-321q0 -44 9 -78t28 -57.5t49.5 -36t74.5 -12.5q34 0 68 12t51 28zM270 442q-59 0 -94.5 -31t-42.5 -106h248
+q0 76 -29 106.5t-82 30.5z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="319"
+d="M22 500h78v28q0 46 7.5 80t24.5 55.5t44 32t67 10.5q32 0 56.5 -4t51.5 -15l-18 -67q-23 10 -43.5 13t-38.5 3q-26 0 -40.5 -8t-21 -23.5t-8 -38t-1.5 -52.5v-14h133v-70h-133v-430h-80v430h-78v70z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="537"
+d="M460 -23q0 -97 -51.5 -143t-152.5 -46q-60 0 -96.5 7.5t-62.5 19.5l21 68q23 -9 51 -17t73 -8q42 0 68.5 7.5t42.5 25t22 45t6 65.5v48h-4q-20 -29 -51 -44.5t-81 -15.5q-101 0 -148.5 63t-47.5 196q0 128 61 194.5t180 66.5q57 0 97.5 -9t72.5 -21v-502zM259 59
+q51 0 80 25.5t41 79.5v256q-40 19 -102 19q-68 0 -107 -46t-39 -144q0 -42 7 -77t22 -60t39 -39t59 -14z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="547"
+d="M398 0v285q0 39 -4.5 68.5t-16.5 49t-32.5 29.5t-53.5 10q-47 0 -85 -30.5t-49 -78.5v-333h-80v700h80v-256h4q26 31 62.5 49.5t90.5 18.5q42 0 73 -9.5t51.5 -33.5t30 -64.5t9.5 -102.5v-302h-80z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="268"
+d="M94 500h80v-500h-80v500zM77 652q0 23 15.5 39.5t39.5 16.5t41 -16.5t17 -39.5t-17 -38t-41 -15t-39.5 15t-15.5 38z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="267"
+d="M93 500h80v-527q0 -93 -32 -139t-102 -46q-8 0 -15 0.5t-15 1.5v68q28 0 44.5 8.5t25.5 26.5t11.5 45.5t2.5 64.5v497zM76 652q0 23 15.5 39.5t39.5 16.5t41 -16.5t17 -39.5t-17 -38t-41 -15t-39.5 15t-15.5 38z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="479"
+d="M203 225h-46v-225h-80v700h80v-426l41 14l155 212h93l-153 -201l-41 -33l50 -40l167 -226h-99z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="292"
+d="M166 123q0 -35 12 -50t34 -15q13 0 28 2t34 9l9 -63q-16 -8 -44.5 -13t-49.5 -5q-45 0 -74 25.5t-29 86.5v600h80v-577z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="812"
+d="M370 0v283q0 40 -3.5 69.5t-13.5 49.5t-28.5 30t-48.5 10q-46 0 -76.5 -28t-42.5 -70v-344h-80v500h56l15 -61h4q27 32 62.5 52.5t92.5 20.5q48 0 78.5 -18.5t47.5 -64.5q23 39 63.5 61t91.5 22q42 0 71 -9.5t48 -33.5t27.5 -65t8.5 -104v-300h-80v301q0 36 -3.5 62.5
+t-14 44t-29 26t-48.5 8.5q-50 0 -78 -28t-40 -80v-334h-80z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="547"
+d="M398 0v285q0 78 -22.5 117.5t-82.5 39.5q-53 0 -87.5 -28.5t-48.5 -71.5v-342h-80v500h56l15 -61h4q24 32 64.5 52.5t96.5 20.5q41 0 72 -9.5t51.5 -33.5t31 -64.5t10.5 -102.5v-302h-80z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="541"
+d="M77 500h55l15 -60h4q23 35 59.5 53.5t83.5 18.5q100 0 149 -59t49 -193q0 -63 -16.5 -113.5t-46.5 -85.5t-72.5 -54t-94.5 -19q-37 0 -58.5 4.5t-46.5 15.5v-208h-80v700zM279 442q-51 0 -80.5 -26.5t-41.5 -80.5v-248q18 -14 41 -21.5t61 -7.5q69 0 109.5 51.5
+t40.5 151.5q0 41 -7 74.5t-22.5 57t-40 36.5t-60.5 13z" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="537"
+d="M460 -200h-80v250h-4q-20 -30 -50.5 -46t-80.5 -16q-100 0 -148 63.5t-48 196.5q0 129 62 195t181 66q53 0 99.5 -10t68.5 -21v-678zM259 58q51 0 80 26t41 80v256q-37 19 -102 19q-69 0 -107.5 -46.5t-38.5 -143.5q0 -42 7 -77.5t22 -60.5t39 -39t59 -14z" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="340"
+d="M313 423q-30 10 -57 10q-43 0 -68 -23.5t-31 -59.5v-350h-80v500h56l15 -61h4q19 34 45.5 52.5t67.5 18.5q29 0 65 -10z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="421"
+d="M297 136q0 30 -18 47t-44.5 28.5t-58 22t-58 27t-44.5 42.5t-18 70q0 72 41 105.5t114 33.5q54 0 90.5 -9.5t63.5 -22.5l-19 -66q-23 11 -55.5 19.5t-69.5 8.5q-44 0 -64.5 -15t-20.5 -52q0 -26 18 -40.5t44.5 -26t58 -22.5t58 -29t44.5 -45.5t18 -72.5q0 -32 -10.5 -60
+t-32.5 -48t-54.5 -31.5t-76.5 -11.5q-57 0 -97 11t-67 26l24 68q23 -13 60 -24t75 -11q43 0 71 17t28 61z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="339"
+d="M11 500h78v99l80 23v-122h136v-70h-136v-277q0 -52 13 -73.5t44 -21.5q26 0 44 5.5t40 14.5l18 -61q-27 -13 -59 -21t-69 -8q-61 0 -86 34.5t-25 115.5v292h-78v70z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="482"
+d="M221 207l28 -95h1l25 97l112 291h86l-213 -511h-34l-217 511h92z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="735"
+d="M401 500l115 -292l25 -96h2l19 98l89 290h76l-168 -511h-39l-131 330l-19 82h-3l-20 -83l-126 -329h-39l-174 511h87l99 -291l17 -97h1l24 99l107 289h58z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="515"
+d="M208 256l-168 244h98l95 -138l28 -57l29 57l97 138h90l-169 -240l179 -260h-95l-106 152l-30 60l-31 -60l-108 -152h-89z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="466"
+d="M224 176l28 -96h5l22 97l97 323h81l-148 -449q-17 -49 -33.5 -95t-36.5 -82t-45 -57.5t-58 -21.5q-36 0 -59 10l14 69q13 -5 25 -5q28 0 54 29.5t43 101.5l-201 500h92z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="447"
+d="M42 70l231 318l42 42h-273v70h356v-70l-233 -321l-41 -39h274v-70h-356v70z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="346"
+d="M137 112q0 51 -21 69.5t-59 18.5v70q38 0 59 20t21 64v242q0 47 23.5 76t71.5 29h85v-70h-50q-27 0 -39.5 -13.5t-12.5 -45.5v-237q0 -44 -21 -67t-49 -28v-6q27 -4 48.5 -30.5t21.5 -68.5v-236q0 -31 12 -45t41 -14h49v-70h-85q-45 0 -70 26.5t-25 77.5v238z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="238"
+d="M85 700h68v-830h-68v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="346"
+d="M235 359q0 -51 21 -69.5t59 -18.5v-70q-38 0 -59 -20t-21 -64v-242q0 -47 -23.5 -76t-71.5 -29h-85v70h50q27 0 39.5 13.5t12.5 45.5v237q0 44 20.5 67t48.5 28v6q-27 4 -48 30.5t-21 68.5v236q0 31 -12 45t-40 14h-50v70h86q44 0 69 -26.5t25 -77.5v-238z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="505"
+d="M31 361q43 33 78 46t64 13q28 0 52 -8.5t46 -19t43 -19t44 -8.5q19 0 39 8t43 28l34 -61q-38 -26 -68.5 -36.5t-55.5 -10.5q-27 0 -49.5 8.5t-43 19t-41 19t-44.5 8.5q-23 0 -49 -10.5t-58 -36.5z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="267"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="304"
+d="M176 -200h-83v347l17 176h49l17 -176v-347zM77 453q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M461 33q-24 -17 -54.5 -27.5t-65.5 -14.5v-91h-71v90q-50 5 -84.5 25.5t-56.5 54t-32 79.5t-10 101q0 115 47.5 181.5t135.5 77.5v91h71v-89q35 -2 62 -9.5t49 -18.5l-23 -68q-20 10 -44.5 17t-50.5 9v-383q32 2 58 12.5t43 23.5zM170 250q0 -33 5.5 -63.5t18.5 -56
+t34 -43.5t52 -25v377q-110 -21 -110 -189z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M50 383h66q-12 26 -20 57t-8 73q0 98 56 148.5t153 50.5q61 0 106 -9t74 -23l-26 -71q-23 11 -61.5 20t-93.5 9q-60 0 -92.5 -32.5t-32.5 -87.5q0 -42 10 -74t24 -61h161v-70h-131q8 -23 13 -48t5 -55t-9 -61.5t-27 -51.5l-39 -33v-4l62 14h256v-74h-446v72
+q32 0 54.5 11.5t37 30t21.5 42t7 47.5q0 33 -6.5 59.5t-16.5 50.5h-97v70z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M70 596l78 -77l21 -35q42 33 103 33q59 0 103 -33l22 35l78 77l49 -49l-77 -78l-35 -22q32 -43 32 -102q0 -60 -32 -103l35 -21l77 -78l-49 -48l-78 77l-21 33q-43 -31 -104 -31q-62 0 -103 31l-21 -33l-78 -77l-49 48l77 78l34 22q-31 42 -31 102q0 29 8.5 55t22.5 48
+l-34 21l-77 78zM170 345q0 -45 28.5 -75t73.5 -30t74 30t29 75t-29 75.5t-74 30.5t-73.5 -30.5t-28.5 -75.5z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M111 328h94l-203 372h97l164 -306l17 -61h1l18 63l157 304h89l-203 -372h96v-60h-122v-71h122v-60h-122v-137h-83v137h-122v60h122v71h-122v60z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="238"
+d="M85 206h68v-336h-68v336zM153 364h-68v336h68v-336z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="497"
+d="M57 353q0 31 15.5 60.5t41.5 52.5l41 14q-26 16 -43.5 40.5t-17.5 65.5q0 56 41.5 91t115.5 35q54 0 91.5 -9t64.5 -22l-19 -67q-24 11 -57 19.5t-69 8.5q-45 0 -66.5 -16t-21.5 -43q0 -26 19.5 -40.5t49.5 -25.5t64 -22t64 -28.5t49.5 -46t19.5 -73.5q0 -31 -15 -60
+t-41 -52l-45 -14q27 -16 45.5 -41t18.5 -66q0 -31 -12 -54.5t-33.5 -39.5t-50.5 -24t-62 -8q-56 0 -92 9.5t-64 23.5l20 65q23 -11 55.5 -19.5t70.5 -8.5q42 0 65 13.5t23 45.5q0 26 -19.5 41t-49.5 26t-64 22t-64 28.5t-49.5 45.5t-19.5 73zM360 345q0 25 -13 41
+t-34.5 27.5t-48.5 20t-54 18.5q-29 -13 -51 -37t-22 -60q0 -25 13 -41t33.5 -27.5t47 -19.5t53.5 -18q14 6 27.5 16t24.5 22.5t17.5 27t6.5 30.5z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="411"
+d="M60 653q0 23 13.5 37t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM252 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="806"
+d="M51 290q0 83 28 148.5t76 110.5t112 69t136 24t136 -24t112 -69t76 -110.5t28 -148.5t-28 -148.5t-76 -110.5t-112 -69t-136 -24q-80 0 -145 24t-111 69t-71 110.5t-25 148.5zM121 290q0 -69 22 -122.5t60 -89.5t89.5 -55t110.5 -19t110.5 19t89.5 55t60 89.5t22 122.5
+t-22 122.5t-60 89.5t-89.5 55t-110.5 19t-110.5 -19t-89.5 -55t-60 -89.5t-22 -122.5zM519 127q-23 -13 -51.5 -20t-66.5 -7q-81 0 -123.5 51t-42.5 139q0 91 45.5 140.5t120.5 49.5q18 0 32.5 -2t27 -5.5t24.5 -8.5t27 -11l-26 -61q-22 11 -42 15t-34 4q-42 0 -68.5 -26
+t-26.5 -95q0 -58 26 -89.5t77 -32.5q47 0 80 18z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="386"
+d="M68 677q25 13 66 22t91 9q62 0 85 -26t23 -75q0 -38 -1.5 -73t-1.5 -67q0 -24 1.5 -46t6.5 -41h-55l-13 46h-4q-13 -17 -37 -33.5t-67 -16.5q-52 0 -83 25.5t-31 69.5q0 31 15 52t40.5 34t60 19t74.5 6q7 0 13.5 -0.5t13.5 -0.5q1 6 1 11.5v10.5q0 27 -12 38t-46 11
+q-40 0 -73 -7.5t-52 -17.5zM173 432q21 0 36.5 5t26.5 13.5t18 18t11 18.5v42q-11 1 -21 1h-21q-21 0 -40 -2t-33.5 -8t-23 -16.5t-8.5 -27.5q0 -20 14.5 -32t40.5 -12z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="478"
+d="M222 259l158 228l53 -42l-97 -144l-48 -41l48 -36l103 -141l-52 -43zM39 259l160 230l54 -43l-98 -145l-48 -41l48 -36l104 -142l-54 -44z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="505"
+d="M41 392h424v-192h-72v120h-352v72z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="360"
+d="M58 325h244v-74h-244v74z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="700"
+d="M85 451q0 64 21 113.5t57.5 83t84.5 51t102 17.5q55 0 103.5 -17.5t84.5 -51t56.5 -83t20.5 -113.5t-21 -113.5t-57.5 -83t-84.5 -51t-102 -17.5q-56 0 -104 17.5t-84 51t-56.5 83t-20.5 113.5zM148 451q0 -52 16 -90.5t43.5 -64t64.5 -38.5t78 -13q43 0 80 12.5t64 38
+t42.5 64t15.5 91.5q0 52 -16 90.5t-43.5 64t-64 38.5t-78.5 13q-44 0 -81 -13t-64 -38.5t-42 -64t-15 -90.5zM247 581q16 5 45 7.5t55 2.5q42 0 72 -17.5t30 -60.5q0 -32 -20.5 -49t-50.5 -19l28 -14l74 -109h-61l-72 104l-48 15v-119h-52v259zM336 546q-11 0 -21 -0.5
+t-16 -3.5v-71h34q29 0 45 9t16 31q0 35 -58 35z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="416"
+d="M60 643h296v-62h-296v62z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="425"
+d="M85 571q0 31 11 57t30 44.5t45 29t55 10.5t55 -9.5t45 -28t30 -44.5t11 -59t-11 -59t-30 -44.5t-45 -28t-55 -9.5t-55 9.5t-45 28t-30 44.5t-11 59zM148 571q0 -38 23.5 -59.5t54.5 -21.5t54.5 21.5t23.5 59.5t-23.5 59.5t-54.5 21.5t-54.5 -21.5t-23.5 -59.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="505"
+d="M40 493h176v181h72v-181h176v-72h-176v-120h-72v120h-176v72zM40 250h424v-72h-424v72z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="394"
+d="M319 690q0 -31 -10.5 -60t-28 -57t-41.5 -55.5t-51 -55.5l-46 -32v-2l57 15h140v-63h-291v33q23 19 57.5 51t66.5 69t54.5 76t22.5 72q0 31 -20 46.5t-49 15.5q-27 0 -52.5 -9.5t-44.5 -21.5l-22 57q26 18 60.5 28t70.5 10q63 0 95 -31t32 -86z" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="394"
+d="M169 433q48 0 73.5 19t25.5 56q0 32 -23 52t-74 20h-55v23l97 116l34 27l-49 -6h-130v60h256v-33l-103 -123l-25 -18v-2l23 3q55 -1 87 -33t32 -86q0 -61 -44.5 -98t-118.5 -37q-36 0 -62 6t-46 13l15 60q17 -8 39 -13.5t48 -5.5z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="268"
+d="M119 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="mu" unicode="µ" horiz-adv-x="552"
+d="M148 500v-283q0 -79 24.5 -119t85.5 -40q55 0 93 32.5t53 85.5v324h80v-337q0 -41 2.5 -82.5t12.5 -80.5h-55l-28 74h-4q-20 -35 -61.5 -60.5t-101.5 -25.5q-48 0 -73.5 14t-43.5 36h-5l21 -105v-133h-80v700h80z" />
+ <glyph glyph-name="mu" unicode="μ" horiz-adv-x="552"
+d="M148 500v-283q0 -79 24.5 -119t85.5 -40q55 0 93 32.5t53 85.5v324h80v-337q0 -41 2.5 -82.5t12.5 -80.5h-55l-28 74h-4q-20 -35 -61.5 -60.5t-101.5 -25.5q-48 0 -73.5 14t-43.5 36h-5l21 -105v-133h-80v700h80z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="494"
+d="M341 700h68v-830h-68v830zM185 310q-32 0 -59 16.5t-46.5 44t-31 63t-11.5 72.5t11.5 72t33.5 62t54 43.5t72 16.5h45v-830h-68v440z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="267"
+d="M76 296q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="287"
+d="M172 0l-24 -43q42 -8 60.5 -26t18.5 -49q0 -39 -32 -64.5t-90 -25.5q-11 0 -22 1t-23 3l9 39q6 -1 11 -1h10q22 0 34.5 4t19 9.5t8 12.5t1.5 13q0 28 -86 37l48 90h57z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="394"
+d="M72 441h106v254l7 36l-27 -28l-78 -47l-27 49l154 102h41v-366h95v-61h-271v61z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="398"
+d="M44 542q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5t-12 79.5zM118 542q0 -60 21.5 -86t59.5 -26q19 0 34 5.5t25.5 18t16 34t5.5 54.5t-5.5 54.5t-16 34t-25.5 18
+t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="478"
+d="M257 268l-160 -228l-52 42l96 144l49 41l-49 36l-102 141l52 43zM439 268l-160 -230l-54 43l98 145l48 41l-48 36l-104 142l53 44z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="837"
+d="M179 595l7 36l-28 -28l-78 -47l-27 49l154 102h42v-427h-70v315zM797 96h-83v-96h-67v96h-204v37l226 302h45v-280h83v-59zM647 283l6 49h-2l-22 -46l-78 -105l-33 -31l50 5h79v128zM628 713l52 -35l-487 -690l-52 36z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="850"
+d="M179 595l7 36l-28 -28l-78 -47l-27 49l154 102h42v-427h-70v315zM790 310q0 -31 -10.5 -60t-28 -57t-41.5 -55.5t-51 -55.5l-46 -32v-2l57 15h140v-63h-291v33q23 19 57.5 51t66.5 69t54.5 76t22.5 72q0 31 -20 46.5t-49 15.5q-27 0 -52.5 -9.5t-44.5 -21.5l-22 57
+q26 18 60.5 28t70.5 10q63 0 95 -31t32 -86zM628 713l52 -35l-487 -690l-52 36z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="876"
+d="M836 96h-83v-96h-67v96h-204v37l226 302h45v-280h83v-59zM686 283l6 49h-2l-22 -46l-78 -105l-33 -31l50 5h79v128zM178 333q48 0 73.5 19t25.5 56q0 32 -23 52t-74 20h-55v23l97 116l34 27l-49 -6h-130v60h256v-33l-103 -123l-25 -18v-2l23 3q55 -1 87 -33t32 -86
+q0 -61 -44.5 -98t-118.5 -37q-36 0 -62 6t-46 13l15 60q17 -8 39 -13.5t48 -5.5zM667 713l52 -35l-487 -690l-52 36z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="436"
+d="M286 323q1 -5 1 -11v-11q0 -42 -12.5 -74t-31 -58.5t-40 -49.5t-40 -46.5t-31 -50t-12.5 -60.5q0 -46 26.5 -75t88.5 -29q36 0 73 12.5t64 29.5l27 -62q-38 -23 -80 -36.5t-104 -13.5q-44 0 -77.5 12.5t-56 34.5t-33.5 51.5t-11 64.5q0 45 13.5 78.5t34 61t44 51.5
+t44 50.5t34 57.5t13.5 73h66zM191 454q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="585"
+d="M367 752h-74l-158 97v21h114zM418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266h206l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="585"
+d="M331 870h114v-21l-163 -97h-69zM418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266h206l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="585"
+d="M265 870h60l127 -102v-21h-81l-60 49l-17 35l-19 -34l-64 -50h-79v22zM418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266h206l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="585"
+d="M135 785q31 32 57.5 43.5t50.5 11.5q19 0 37 -5t34.5 -11.5t32.5 -11.5t31 -5q26 0 50 21l25 -43q-27 -25 -51 -34.5t-45 -9.5q-19 0 -36 5t-33.5 11.5t-32.5 11.5t-32 5t-31.5 -6.5t-32.5 -23.5zM418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266h206
+l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="585"
+d="M144 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM336 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM418 194h-258l-70 -194h-82l265 711h38l266 -711h-87zM187 266
+h206l-78 213l-25 106h-1l-25 -108z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="585"
+d="M188 768q0 37 25 61t80 24q50 0 78 -21.5t28 -63.5q0 -32 -20 -53.5t-59 -27.5l257 -687h-87l-72 194h-258l-70 -194h-82l256 687q-38 6 -57 27.5t-19 53.5zM187 266h206l-78 213l-25 106h-1l-25 -108zM249 768q0 -17 10.5 -28.5t33.5 -11.5q22 0 33.5 11t11.5 29
+q0 19 -11 30.5t-34 11.5q-22 0 -33 -11.5t-11 -30.5z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="846"
+d="M391 600l-34 -103l-133 -229h171v332h-4zM395 198h-214l-112 -198h-91l415 700h383v-74h-298v-229h273v-74h-273v-249h303v-74h-386v198z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="571"
+d="M533 29q-26 -20 -64 -29t-83 -11l-17 -32q42 -8 60.5 -26t18.5 -49q0 -39 -32 -64.5t-90 -25.5q-11 0 -22 1t-23 3l9 39q6 -1 11 -1h10q22 0 34.5 4t19 9.5t8 12.5t1.5 13q0 28 -86 37l42 80q-58 4 -108 27.5t-87 67.5t-58 110t-21 155q0 98 26.5 166.5t70 112t97.5 63.5
+t110 20q60 0 98 -6.5t65 -17.5l-20 -73q-48 23 -137 23q-41 0 -81 -15t-71.5 -49t-50.5 -89t-19 -135q0 -72 18 -126t49.5 -90t74 -54t92.5 -18q45 0 78.5 9t56.5 23z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="536"
+d="M326 752h-74l-158 97v21h114zM85 700h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386v700z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="536"
+d="M330 870h114v-21l-163 -97h-69zM85 700h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386v700z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="536"
+d="M242 870h60l127 -102v-21h-81l-60 49l-17 35l-19 -34l-64 -50h-79v22zM85 700h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386v700z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="536"
+d="M120 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM312 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM85 700h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386v700z
+" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="291"
+d="M233 752h-74l-158 97v21h114zM104 700h83v-700h-83v700z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="291"
+d="M180 870h114v-21l-163 -97h-69zM104 700h83v-700h-83v700z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="291"
+d="M118 870h60l127 -102v-21h-81l-60 49l-17 35l-19 -34l-64 -50h-79v22zM104 700h83v-700h-83v700z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="291"
+d="M-2 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM190 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM104 700h83v-700h-83v700z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="658"
+d="M-1 392h90v308q19 3 42.5 4.5t49 2t50 1t45.5 0.5q84 0 145.5 -26t101.5 -72.5t59.5 -111.5t19.5 -143q0 -71 -18.5 -136.5t-58.5 -116t-104 -81t-155 -30.5q-16 0 -41.5 0.5t-52.5 2t-50 2.5t-33 3v333h-90v60zM278 634h-28.5t-30.5 -1t-27.5 -2t-19.5 -2v-237h147v-60
+h-147v-263q5 -1 19 -1.5t29 -1t29 -1t19 -0.5q70 0 117.5 24t76 64.5t40.5 93t12 108.5q0 49 -11 98.5t-38 89.5t-72.5 65.5t-114.5 25.5z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="673"
+d="M179 785q31 32 57.5 43.5t50.5 11.5q19 0 37 -5t34.5 -11.5t32.5 -11.5t31 -5q26 0 50 21l25 -43q-27 -25 -51 -34.5t-45 -9.5q-19 0 -36 5t-33.5 11.5t-32.5 11.5t-32 5t-31.5 -6.5t-32.5 -23.5zM211 458l-54 101h-4l10 -101v-458h-78v711h44l335 -467l52 -96h5l-11 96
+v456h78v-711h-44z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="684"
+d="M410 752h-74l-158 97v21h114zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5
+t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="684"
+d="M415 870h114v-21l-163 -97h-69zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5
+q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="684"
+d="M312 870h60l127 -102v-21h-81l-60 49l-17 35l-19 -34l-64 -50h-79v22zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110
+t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="684"
+d="M182 785q31 32 57.5 43.5t50.5 11.5q19 0 37 -5t34.5 -11.5t32.5 -11.5t31 -5q26 0 50 21l25 -43q-27 -25 -51 -34.5t-45 -9.5q-19 0 -36 5t-33.5 11.5t-32.5 11.5t-32 5t-31.5 -6.5t-32.5 -23.5zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114
+t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="684"
+d="M190 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM382 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5
+t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z
+" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="505"
+d="M127 517l126 -127l127 127l51 -53l-126 -126l126 -127l-51 -52l-127 128l-127 -128l-52 51l128 129l-126 125z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="684"
+d="M122 91q-34 48 -50 113t-16 146q0 175 74 268.5t211 93.5q57 0 101 -15t78 -44l42 60l52 -35l-51 -72q33 -48 49 -112.5t16 -143.5q0 -175 -74.5 -268.5t-212.5 -93.5q-107 0 -175 56l-39 -56l-52 36zM144 350q0 -51 8.5 -96t26.5 -83l290 411q-23 26 -54.5 41t-73.5 15
+q-92 0 -144.5 -70.5t-52.5 -217.5zM540 350q0 48 -8.5 93t-25.5 82l-290 -411q23 -25 54 -38.5t71 -13.5q93 0 146 70.5t53 217.5z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="652"
+d="M407 752h-74l-158 97v21h114zM487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5t-95 -14q-124 0 -187 56t-63 170v483h83v-444q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="652"
+d="M390 870h114v-21l-163 -97h-69zM487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5t-95 -14q-124 0 -187 56t-63 170v483h83v-444q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="652"
+d="M301 870h60l127 -102v-21h-81l-60 49l-17 35l-19 -34l-64 -50h-79v22zM487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5t-95 -14q-124 0 -187 56t-63 170v483h83v-444q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="652"
+d="M178 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM370 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5
+t-95 -14q-124 0 -187 56t-63 170v483h83v-444q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="558"
+d="M355 870h114v-21l-163 -97h-69zM239 278l-231 422h97l164 -306l17 -61h1l18 63l157 304h89l-229 -421v-279h-83v278z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="559"
+d="M85 700h83v-75q42 3 86 3q46 0 93.5 -9t86.5 -33t63.5 -66t24.5 -107q0 -64 -23 -108t-61 -71.5t-87 -40t-101 -12.5h-16.5t-24 0.5t-24.5 1.5t-17 2v-185h-83v700zM256 556q-26 0 -50 -1t-38 -5v-290q5 -2 16 -2.5t23 -1.5t23 -1h16q34 0 67.5 6.5t60.5 24t43.5 48.5
+t16.5 79q0 41 -15.5 68.5t-41 44t-57.5 23.5t-64 7z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="592"
+d="M384 559q0 17 -9.5 31.5t-24.5 24.5t-33 15.5t-35 5.5q-28 0 -47.5 -7t-31.5 -23t-17.5 -42.5t-5.5 -65.5v-498h-80v430h-78v70h78v23q0 97 47.5 140t131.5 43q41 0 75 -10.5t58.5 -30t38 -46t13.5 -59.5q0 -38 -19 -61t-41.5 -41t-41.5 -35t-19 -42q0 -22 15 -35t38 -23
+t49 -20.5t49 -27.5t38 -44.5t15 -71.5q0 -32 -12 -62.5t-34.5 -54.5t-56.5 -39t-77 -15q-23 0 -40.5 1.5t-32 5t-27.5 8.5t-26 13l23 65q12 -6 21 -11t19.5 -8t23.5 -4.5t32 -1.5q21 0 40.5 7.5t34.5 20.5t23.5 31.5t8.5 40.5q0 30 -15 47.5t-38 29.5t-49 21.5t-49 24
+t-38 37t-15 60.5q0 39 19 62.5t41.5 42t41.5 35.5t19 43z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM305 571h-45l-115 128v21
+h95z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM238 720h89v-21l-101 -128
+h-47z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM239 732h32l111 -182h-72
+l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM109 656q29 33 53 45.5
+t44 12.5q17 0 31.5 -6.5t28 -14t26 -13.5t26.5 -6q22 0 46 24l24 -43q-26 -29 -47.5 -39.5t-39.5 -10.5q-16 0 -30 6t-27.5 13.5t-27 14t-27.5 6.5q-13 0 -26.5 -7t-30.5 -24z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="496"
+d="M69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5
+h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM105 653q0 23 13.5 37
+t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM297 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="496"
+d="M152 643q0 42 26.5 66.5t70.5 24.5q42 0 70 -22t28 -69q0 -39 -28 -64.5t-70 -25.5t-69.5 23.5t-27.5 66.5zM206 643q0 -20 13 -31t30 -11q19 0 31.5 10t12.5 32t-13.5 32.5t-30.5 10.5t-30 -10t-13 -33zM69 463q38 23 88.5 34t105.5 11q52 0 83.5 -14t48 -36.5t22 -49.5
+t5.5 -54q0 -60 -3 -117t-3 -108q0 -37 3 -70t11 -61h-59l-21 70h-5q-9 -14 -22.5 -27.5t-32.5 -24t-44 -17.5t-57 -7t-59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59q0 44 18 73.5t50.5 47t78 25t100.5 7.5h27.5t27.5 -2q3 30 3 54q0 55 -22 77t-80 22q-17 0 -36.5 -2.5t-40 -7
+t-39 -11t-32.5 -14.5zM211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="796"
+d="M211 62q28 0 50 7.5t38 19t26.5 25.5t15.5 27v83q-14 1 -28.5 1.5t-28.5 0.5q-31 0 -60.5 -3.5t-52 -13t-36 -26t-13.5 -41.5q0 -35 25 -57.5t64 -22.5zM367 84q-13 -18 -30 -34.5t-38.5 -29t-49 -20.5t-60.5 -8q-32 0 -59.5 10t-47.5 28.5t-31.5 44.5t-11.5 59
+q0 44 18 73.5t50.5 47t78 25t100.5 7.5h27.5t27.5 -2q1 15 2 28.5t1 25.5q0 55 -22 77.5t-80 21.5q-17 0 -36.5 -2.5t-40 -7t-39 -11t-32.5 -14.5l-25 60q38 23 88.5 34t105.5 11q105 0 136 -65q26 36 70 52.5t88 16.5q34 0 68 -7.5t61 -29t44 -60.5t17 -102
+q0 -16 -1.5 -33.5t-3.5 -37.5h-323q0 -87 36.5 -135.5t124.5 -48.5q35 0 68.5 12.5t51.5 27.5l30 -58q-30 -24 -75.5 -38t-96.5 -14q-61 0 -110.5 25t-73.5 71h-7zM558 442q-59 0 -95 -31t-42 -106h248v12q0 68 -30.5 96.5t-80.5 28.5z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="451"
+d="M418 33q-49 -35 -121 -43l-18 -33q42 -8 60.5 -26t18.5 -49q0 -39 -32 -64.5t-90 -25.5q-11 0 -22 1t-23 3l9 39q6 -1 11 -1h10q22 0 34.5 4t19 9.5t8 12.5t1.5 13q0 28 -86 37l42 79q-52 3 -88 23t-59 54t-33.5 80.5t-10.5 103.5q0 127 56 194.5t161 67.5
+q48 0 81.5 -7.5t60.5 -21.5l-23 -69q-23 13 -51 20.5t-60 7.5q-142 0 -142 -192q0 -38 7.5 -72.5t25 -61t46 -42t70.5 -15.5q36 0 64.5 10.5t46.5 24.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="508"
+d="M442 40q-30 -24 -75.5 -38t-96.5 -14q-57 0 -99 18.5t-69 53t-40 82.5t-13 108q0 128 57 195t163 67q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -33 -6 -73h-321q0 -44 9 -78t28 -57.5t49.5 -36t74.5 -12.5q34 0 68 12t51 28zM270 442q-59 0 -94.5 -31t-42.5 -106h248
+q0 76 -29 106.5t-82 30.5zM330 571h-45l-115 128v21h95z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="508"
+d="M442 40q-30 -24 -75.5 -38t-96.5 -14q-57 0 -99 18.5t-69 53t-40 82.5t-13 108q0 128 57 195t163 67q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -33 -6 -73h-321q0 -44 9 -78t28 -57.5t49.5 -36t74.5 -12.5q34 0 68 12t51 28zM270 442q-59 0 -94.5 -31t-42.5 -106h248
+q0 76 -29 106.5t-82 30.5zM291 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="508"
+d="M442 40q-30 -24 -75.5 -38t-96.5 -14q-57 0 -99 18.5t-69 53t-40 82.5t-13 108q0 128 57 195t163 67q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -33 -6 -73h-321q0 -44 9 -78t28 -57.5t49.5 -36t74.5 -12.5q34 0 68 12t51 28zM270 442q-59 0 -94.5 -31t-42.5 -106h248
+q0 76 -29 106.5t-82 30.5zM245 732h32l111 -182h-72l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="508"
+d="M442 40q-30 -24 -75.5 -38t-96.5 -14q-57 0 -99 18.5t-69 53t-40 82.5t-13 108q0 128 57 195t163 67q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -33 -6 -73h-321q0 -44 9 -78t28 -57.5t49.5 -36t74.5 -12.5q34 0 68 12t51 28zM270 442q-59 0 -94.5 -31t-42.5 -106h248
+q0 76 -29 106.5t-82 30.5zM119 653q0 23 13.5 37t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM311 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="268"
+d="M94 500h80v-500h-80v500zM172 571h-45l-115 128v21h95z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="268"
+d="M94 500h80v-500h-80v500zM154 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="268"
+d="M94 500h80v-500h-80v500zM121 732h32l111 -182h-72l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="268"
+d="M94 500h80v-500h-80v500zM-12 653q0 23 13.5 37t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM180 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="eth" unicode="ð" horiz-adv-x="561"
+d="M220 596l57 31q-38 23 -76 32l35 54q18 -7 46 -19t58 -33l68 37l26 -45l-50 -27q24 -23 46 -53.5t39 -71t27 -91.5t10 -115q0 -81 -18 -139t-48.5 -95.5t-71 -55t-86.5 -17.5q-61 0 -104 21t-70 57t-39.5 83.5t-12.5 101.5q0 52 14.5 99t43 82.5t70 56.5t96.5 21
+q45 0 79 -14t48 -32q-11 37 -33 70t-51 59l-76 -41zM139 250q0 -98 41 -145t106 -47q30 0 55.5 13t44 41t29.5 72t11 106q0 10 -0.5 22.5l-1 25t-2 24t-3.5 19.5q-8 14 -22.5 25t-32 18.5t-37.5 11.5t-39 4q-39 0 -67.5 -15t-46.5 -40.5t-26.5 -60t-8.5 -74.5z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="547"
+d="M398 0v285q0 78 -22.5 117.5t-82.5 39.5q-53 0 -87.5 -28.5t-48.5 -71.5v-342h-80v500h56l15 -61h4q24 32 64.5 52.5t96.5 20.5q41 0 72 -9.5t51.5 -33.5t31 -64.5t10.5 -102.5v-302h-80zM134 656q29 33 53 45.5t44 12.5q17 0 31.5 -6.5t28 -14t26 -13.5t26.5 -6
+q22 0 46 24l24 -43q-26 -29 -47.5 -39.5t-39.5 -10.5q-16 0 -30 6t-27.5 13.5t-27 14t-27.5 6.5q-13 0 -26.5 -7t-30.5 -24z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192zM317 571h-45l-115 128v21h95z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192zM286 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192zM258 732h32l111 -182h-72l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192zM129 656q29 33 53 45.5t44 12.5q17 0 31.5 -6.5t28 -14t26 -13.5t26.5 -6q22 0 46 24l24 -43q-26 -29 -47.5 -39.5t-39.5 -10.5q-16 0 -30 6t-27.5 13.5t-27 14t-27.5 6.5q-13 0 -26.5 -7t-30.5 -24z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q56 0 97.5 -18.5t68.5 -53t40 -83t13 -107.5q0 -127 -56.5 -194.5t-162.5 -67.5q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5zM132 250q0 -38 7.5 -73t23.5 -61t42 -42t63 -16q136 -1 136 192q0 39 -7.5 74t-23.5 61t-42 41.5
+t-63 15.5q-136 1 -136 -192zM124 653q0 23 13.5 37t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM316 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="505"
+d="M40 374h424v-72h-424v72zM194 525q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42zM194 150q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="536"
+d="M49 250q0 127 56.5 194.5t162.5 67.5q73 0 122 -32l26 35l50 -37l-29 -42q26 -34 38 -81t12 -105q0 -127 -56.5 -194.5t-162.5 -67.5q-78 0 -128 35l-27 -37l-52 38l33 46q-23 34 -34 79.5t-11 100.5zM404 250q0 32 -5 61.5t-16 53.5l-199 -277q16 -13 36.5 -21.5
+t47.5 -8.5q136 -1 136 192zM132 250q0 -30 4.5 -58t13.5 -51l197 274q-15 12 -34.5 19.5t-44.5 7.5q-136 1 -136 -192z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80zM308 571h-45l-115 128v21h95
+z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80zM285 720h89v-21l-101 -128
+h-47z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80zM260 732h32l111 -182h-72
+l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80zM125 653q0 23 13.5 37
+t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35zM317 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="466"
+d="M224 176l28 -96h5l22 97l97 323h81l-148 -449q-17 -49 -33.5 -95t-36.5 -82t-45 -57.5t-58 -21.5q-36 0 -59 10l14 69q13 -5 25 -5q28 0 54 29.5t43 101.5l-201 500h92zM277 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="541"
+d="M77 700h80v-250h4q20 29 53 45.5t80 16.5q100 0 149 -59t49 -193q0 -63 -16.5 -113.5t-46.5 -85.5t-72.5 -54t-94.5 -19q-37 0 -58.5 4.5t-46.5 15.5v-208h-80v900zM279 442q-98 1 -122 -107v-249q18 -14 41 -21t61 -7q69 0 109.5 51.5t40.5 151.5q0 41 -7 74.5t-22.5 57
+t-40 36.5t-60.5 13z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="466"
+d="M224 176l28 -96h5l22 97l97 323h81l-148 -449q-17 -49 -33.5 -95t-36.5 -82t-45 -57.5t-58 -21.5q-36 0 -59 10l14 69q13 -5 25 -5q28 0 54 29.5t43 101.5l-201 500h92zM89 653q0 23 13.5 37t35.5 14t35.5 -14t13.5 -37q0 -21 -13.5 -35t-35.5 -14t-35.5 14t-13.5 35z
+M281 653q0 23 13.5 37t35.5 14q23 0 36.5 -14t13.5 -37q0 -21 -13.5 -35t-36.5 -14q-22 0 -35.5 14t-13.5 35z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="517"
+d="M192 -102q0 21 15.5 34t35.5 13q25 0 44.5 -17.5t19.5 -57.5q0 -26 -9 -45.5t-21.5 -34t-26 -23t-23.5 -12.5l-28 32q20 11 32 28t12 41q-4 -1 -10 -1q-18 0 -29.5 12t-11.5 31zM499 0h-414v700h83v-626h331v-74z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="932"
+d="M481 618q-28 11 -65 15.5t-75 4.5q-92 0 -144.5 -70.5t-52.5 -217.5q0 -58 11.5 -110t36.5 -91.5t64 -63t93 -23.5q29 0 59.5 2t72.5 15v539zM481 0q-25 -5 -60 -8.5t-80 -3.5q-73 0 -126.5 26t-89 73.5t-52.5 114t-17 148.5q0 175 74 268.5t211 93.5q47 0 77.5 -3.5
+t62.5 -8.5h381v-74h-298v-229h273v-74h-273v-249h303v-74h-386z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="858"
+d="M132 250q0 -38 7.5 -73t23.5 -61.5t42 -42t63 -15.5q135 -1 135 192q0 39 -7 74t-23 61t-42 41.5t-63 15.5q-136 1 -136 -192zM442 81q-27 -45 -70.5 -69t-103.5 -24q-56 0 -97.5 18.5t-68.5 53t-40 83t-13 107.5q0 127 56.5 194.5t162.5 67.5q63 0 106.5 -26t69.5 -66
+q26 42 70.5 67t104.5 25q34 0 68 -7.5t61 -28.5t44 -59.5t17 -101.5q0 -17 -1 -35t-4 -38h-323q0 -44 9 -78.5t28 -58.5t50 -36t75 -12q35 0 68.5 12.5t50.5 28.5l30 -58q-30 -24 -75.5 -38t-96.5 -14q-62 0 -107 25t-71 68zM620 443q-58 0 -94 -31.5t-43 -106.5h248v9
+q0 69 -30 99t-81 30z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="531"
+d="M322 746h-58l-127 103v21h82l59 -50l17 -34l19 33l63 51h78v-22zM401 178q0 42 -25 68.5t-62.5 47t-81.5 38.5t-81.5 43.5t-62.5 63t-25 95.5q0 82 57 130t162 48q61 0 111 -9t78 -23l-25 -73q-23 11 -67.5 21t-100.5 10q-66 0 -99 -29.5t-33 -69.5q0 -39 25 -65
+t62.5 -46.5t81.5 -40.5t81.5 -46.5t62.5 -63.5t25 -92q0 -45 -16 -81t-47 -62t-75 -40t-100 -14q-75 0 -124 11.5t-76 25.5l28 75q23 -13 68 -25.5t101 -12.5q33 0 62 6.5t50 21t33.5 36.5t12.5 52z" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="421"
+d="M225 550h-37l-115 182h78l39 -66l21 -58l22 58l45 66h70zM297 136q0 30 -18 47t-44.5 28.5t-58 22t-58 27t-44.5 42.5t-18 70q0 72 41 105.5t114 33.5q54 0 90.5 -9.5t63.5 -22.5l-19 -66q-23 11 -55.5 19.5t-69.5 8.5q-44 0 -64.5 -15t-20.5 -52q0 -26 18 -40.5
+t44.5 -26t58 -22.5t58 -29t44.5 -45.5t18 -72.5q0 -32 -10.5 -60t-32.5 -48t-54.5 -31.5t-76.5 -11.5q-57 0 -97 11t-67 26l24 68q23 -13 60 -24t75 -11q43 0 71 17t28 61z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="539"
+d="M149 500v-285q0 -39 4.5 -68.5t15.5 -49t30 -29.5t48 -10q27 0 48 8.5t37.5 23.5t29 34.5t20.5 41.5v334h80v-358q0 -36 2.5 -74.5t8.5 -67.5h-55l-20 79h-5q-23 -39 -62 -65t-99 -26q-40 0 -70.5 9.5t-51 33.5t-31 64.5t-10.5 102.5v302h80zM122 643h296v-62h-296v62z
+" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="652"
+d="M197 871q17 -34 52 -52.5t82 -18.5q48 0 81 21t47 50l40 -19q-9 -29 -25.5 -51.5t-39 -38.5t-49.5 -24t-55 -8q-27 0 -53.5 7t-49.5 21t-42 36.5t-31 52.5zM487 700h80v-467q0 -63 -16.5 -109t-47 -75.5t-73.5 -43.5t-95 -14q-124 0 -187 56t-63 170v483h83v-444
+q0 -53 10.5 -89.5t31.5 -59t52.5 -32.5t73.5 -10q81 0 116 44.5t35 146.5v444z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="558"
+d="M133 794q0 21 15 34t39 13q23 0 37.5 -13t14.5 -34q0 -20 -14.5 -33t-37.5 -13q-24 0 -39 13t-15 33zM325 794q0 21 14.5 34t37.5 13q24 0 39 -13t15 -34q0 -20 -15 -33t-39 -13q-23 0 -37.5 13t-14.5 33zM239 278l-231 422h97l164 -306l17 -61h1l18 63l157 304h89
+l-229 -421v-279h-83v278z" />
+ <glyph glyph-name="Zcaron" unicode="Ž"
+d="M286 746h-58l-127 103v21h82l59 -50l17 -34l19 33l63 51h78v-22zM38 75l353 511l42 40h-395v74h470v-75l-355 -514l-42 -37h397v-74h-470v75z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="447"
+d="M235 550h-37l-115 182h78l39 -66l21 -58l22 58l45 66h70zM42 70l231 318l42 42h-273v70h356v-70l-233 -321l-41 -39h274v-70h-356v70z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M316 430l-79 -464q-6 -37 -17 -68.5t-29.5 -55t-45.5 -37t-64 -13.5q-29 0 -60 7t-55 17l21 66q23 -10 43.5 -15t44.5 -5q38 0 57.5 33.5t32.5 112.5l68 422h-85v70h96l11 67q12 74 43.5 109.5t103.5 35.5q33 0 64.5 -7t56.5 -18l-23 -65q-48 20 -92 20q-19 0 -31 -5.5
+t-20 -17t-13.5 -31t-9.5 -47.5l-7 -41h120v-70h-131z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="386"
+d="M183 732h32l111 -182h-72l-39 66l-21 58l-22 -58l-45 -66h-67z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="399"
+d="M60 656q29 33 53 45.5t44 12.5q17 0 31.5 -6.5t28 -14t26 -13.5t26.5 -6q22 0 46 24l24 -43q-26 -29 -47.5 -39.5t-39.5 -10.5q-16 0 -30 6t-27.5 13.5t-27 14t-27.5 6.5q-13 0 -26.5 -7t-30.5 -24z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="293"
+d="M32 793q0 22 14.5 35t36.5 13q21 0 35.5 -13t14.5 -35t-14.5 -34.5t-35.5 -12.5q-22 0 -36.5 12.5t-14.5 34.5zM161 793q0 22 14.5 35t35.5 13q22 0 36.5 -13t14.5 -35t-14.5 -34.5t-36.5 -12.5q-21 0 -35.5 12.5t-14.5 34.5zM105 700h83v-700h-83v700z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="555"
+d="M537 626h-218v-626h-83v626h-218v74h519v-74z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="660"
+d="M118 325h424v-74h-424v74z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="820"
+d="M118 325h584v-74h-584v74z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="194"
+d="M155 620q0 -23 -15 -36.5t-38 -13.5q-27 0 -44.5 18t-17.5 53q0 33 9.5 56.5t23 40t28 26.5t25.5 14l25 -35q-22 -11 -35.5 -29.5t-13.5 -46.5q4 1 11 1q20 0 31 -14t11 -34z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="194"
+d="M40 659q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="194"
+d="M40 50q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="340"
+d="M301 620q0 -23 -15 -36.5t-38 -13.5q-27 0 -44.5 18t-17.5 53q0 33 9.5 56.5t23 40t28 26.5t25.5 14l25 -35q-22 -11 -35.5 -29.5t-13.5 -46.5q4 1 11 1q20 0 31 -14t11 -34zM155 620q0 -23 -15 -36.5t-38 -13.5q-27 0 -44.5 18t-17.5 53q0 33 9.5 56.5t23 40t28 26.5
+t25.5 14l25 -35q-22 -11 -35.5 -29.5t-13.5 -46.5q4 1 11 1q20 0 31 -14t11 -34z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="340"
+d="M186 659q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5zM40 659q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5
+t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="340"
+d="M186 50q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5zM40 50q0 23 14.5 36t37.5 13q28 0 45.5 -17.5t17.5 -52.5q0 -33 -9.5 -57t-23 -40.5
+t-28.5 -26.5t-26 -14l-25 34q23 12 36 30t13 47q-4 -1 -11 -1q-19 0 -30 13.5t-11 35.5z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="486"
+d="M40 502h131l43 -11l-11 47v162h80v-162l-11 -47l43 11h131v-72h-133l-41 11l11 -42v-399l-15 -200h-50l-15 201v398l11 42l-43 -11h-131v72z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="486"
+d="M203 400l11 41l-43 -11h-131v72h131l43 -11l-11 46v163h80v-163l-11 -46l43 11h131v-72h-133l-41 11l11 -41v-124l-11 -41l41 11h133v-72h-131l-43 11l11 -46v-139l-16 -200h-48l-16 201v138l11 46l-43 -11h-131v72h131l43 -11l-11 41v124z" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="452"
+d="M87 311q0 31 11 56.5t29.5 44t44 28.5t54.5 10t54.5 -9.5t44 -27.5t29.5 -43.5t11 -58.5t-11 -58.5t-29.5 -43.5t-44 -27.5t-54.5 -9.5t-54.5 9.5t-44 27.5t-29.5 43.5t-11 58.5z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="759"
+d="M579 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42zM325 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42zM71 46q0 27 15.5 42.5t41.5 15.5q27 0 43 -15.5
+t16 -42.5q0 -26 -16 -42t-43 -16q-26 0 -41.5 16t-15.5 42z" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="1147"
+d="M637 713l49 -38l-513 -687l-50 39zM70 542q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5t-12 79.5zM144 542q0 -60 21.5 -86t59.5 -26q19 0 34 5.5t25.5 18t16 34
+t5.5 54.5t-5.5 54.5t-16 34t-25.5 18t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5zM426 171q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5t-12 79.5zM500 171q0 -60 21.5 -86
+t59.5 -26q19 0 34 5.5t25.5 18t16 34t5.5 54.5t-5.5 54.5t-16 34t-25.5 18t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5zM783 171q0 45 12 77t32.5 53t49 30.5t61.5 9.5t61.5 -9t49 -29t32.5 -52.5t12 -79.5t-12 -79.5t-32.5 -52.5t-49 -29t-61.5 -9t-61.5 9t-49 29t-32.5 52.5
+t-12 79.5zM857 171q0 -60 21.5 -86t59.5 -26q19 0 34 5.5t25.5 18t16 34t5.5 54.5t-5.5 54.5t-16 34t-25.5 18t-34 5.5q-38 0 -59.5 -23.5t-21.5 -88.5z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="297"
+d="M39 259l160 230l53 -43l-97 -145l-48 -41l48 -36l103 -142l-53 -44z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="297"
+d="M258 268l-160 -230l-53 43l97 145l48 41l-48 36l-103 142l53 44z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M28 454h63q12 67 37.5 116t62 80.5t81.5 46.5t96 15t88 -6.5t64 -17.5l-21 -73q-23 11 -54 17t-75 6q-33 0 -64 -10t-56.5 -32.5t-45 -57.5t-29.5 -84h282l-17 -66h-274q-1 -11 -1 -19v-19v-16.5t1 -15.5h254l-17 -66h-230q18 -94 71.5 -142t138.5 -48q39 0 71.5 9
+t55.5 23l20 -65q-30 -23 -74.5 -32t-89.5 -9q-114 0 -185.5 65t-91.5 199h-79l18 66h55q-1 9 -1 15.5v16.5v19t1 19h-73z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="885"
+d="M388 632h-136v-292h-78v292h-136v68h350v-68zM770 507l10 103h-4l-39 -85l-87 -140h-33l-89 139l-36 86h-4l13 -102v-168h-73v360h78l105 -168l28 -58h1l30 60l97 166h79v-360h-76v167z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="546"
+d="M389 296l3 62h-3l-41 -64l-225 -294h-46v500h80v-305l-3 -59h4l39 62l225 302h47v-527q0 -93 -32 -139t-102 -46q-8 0 -15 0.5t-15 1.5v68q28 0 44.5 8.5t25.5 26t11.5 44.5t2.5 63v296zM192 702q10 -46 34.5 -64t56.5 -18t57 19t34 62l60 -19q-9 -58 -51.5 -89
+t-101.5 -31q-27 0 -53.5 7t-47.5 21t-36 36t-20 52z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="684"
+d="M278 797q0 21 16.5 36.5t45.5 15.5t46.5 -15.5t17.5 -36.5q0 -23 -17.5 -38t-46.5 -15t-45.5 15t-16.5 38zM56 350q0 175 74 268.5t211 93.5q74 0 128 -26t89.5 -73.5t52.5 -114t17 -148.5q0 -175 -74.5 -268.5t-212.5 -93.5q-73 0 -126.5 26t-89 73.5t-52.5 114
+t-17 148.5zM144 350q0 -58 11.5 -110t35.5 -91.5t61.5 -63t88.5 -23.5q93 0 146 70.5t53 217.5q0 57 -11.5 109.5t-36 92t-62 63t-89.5 23.5q-92 0 -144.5 -70.5t-52.5 -217.5z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="292"
+d="M166 123q0 -35 12 -50t34 -15q13 0 28 2t34 9l9 -63q-16 -8 -44.5 -13t-49.5 -5q-45 0 -74 25.5t-29 86.5v600h80v-577zM254 701h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="555"
+d="M350 870h114v-21l-163 -97h-69zM537 626h-218v-626h-83v626h-218v74h519v-74z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="339"
+d="M11 500h78v99l80 23v-122h136v-70h-136v-277q0 -52 13 -73.5t44 -21.5q26 0 44 5.5t40 14.5l18 -61q-27 -13 -59 -21t-69 -8q-61 0 -86 34.5t-25 115.5v292h-78v70zM285 701h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="568"
+d="M345 870h114v-21l-163 -97h-69zM267 219l24 -106h1l26 108l169 479h83l-265 -711h-37l-270 711h91z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="482"
+d="M221 207l28 -95h1l25 97l112 291h86l-213 -511h-34l-217 511h92zM265 720h89v-21l-101 -128h-47z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="541"
+d="M139 331v70h16h22t26.5 1t26 1.5t20.5 2.5q26 4 49 13.5t40 24.5t27 35t10 44q0 33 -11 55t-30.5 35.5t-45 19t-54.5 5.5q-54 0 -92 -7.5t-61 -18.5l-22 66q20 11 72 22.5t117 11.5q40 0 78.5 -8.5t69 -28t49 -53t18.5 -82.5q0 -50 -33 -95.5t-99 -65.5v-4
+q71 -10 112 -53t41 -115q0 -57 -22.5 -98.5t-59 -68.5t-84 -39.5t-96.5 -12.5q-66 0 -108.5 7.5t-70.5 18.5l21 75q23 -11 64.5 -19t100.5 -8q31 0 61 8.5t53.5 26t38 43.5t14.5 62q0 63 -44 92.5t-115 34.5q-12 1 -22.5 1.5t-21.5 0.5h-55z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSans.ttf has changed
Binary file web/res/fonts/PTSans.woff has changed
Binary file web/res/fonts/PTSansNarrow-Bold.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSansNarrow-Bold.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,593 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 10:41:58 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-NarrowBold" horiz-adv-x="478" >
+ <font-face
+ font-family="PT Sans Narrow"
+ font-weight="700"
+ font-stretch="condensed"
+ units-per-em="1000"
+ panose-1="2 11 7 6 2 2 3 2 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-50 -273 1011 875"
+ underline-thickness="50"
+ underline-position="-50"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="205"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="251"
+d="M83 700h123v-329l-24 -163h-75l-24 163v329zM72 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="351"
+d="M73 700h103l-31 -216h-72v216zM207 700h103l-31 -216h-72v216z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M242 205h-69l-30 -154h-97l30 154h-61l21 95h58l22 110h-60l21 95h57l29 144h98l-29 -144h69l29 144h97l-29 -144h59l-22 -95h-55l-22 -110h58l-22 -95h-54l-30 -154h-98zM192 300h69l21 110h-69z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M194 -13q-48 2 -82 11.5t-54 22.5l33 107q15 -11 41.5 -20t61.5 -13v220q-26 15 -51 33t-44.5 42.5t-32 57t-12.5 77.5q0 78 38 123.5t102 59.5v92h95v-88q35 -2 62 -9.5t51 -19.5l-33 -104q-15 8 -35 14.5t-45 9.5v-197q26 -16 51.5 -34.5t46 -43.5t33.5 -57t13 -75
+q0 -86 -39 -136t-105 -66v-94h-95v87zM248 96q32 6 48 29.5t16 57.5t-18 56.5t-46 41.5v-185zM236 605q-36 -4 -49.5 -25.5t-13.5 -46.5q0 -31 18 -52.5t45 -40.5v165z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="720"
+d="M575 714l70 -58l-494 -670l-71 59zM41 542q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5t-47.5 28.5t-31 52.5t-11 80.5zM147 542q0 -48 10.5 -67.5t33.5 -19.5
+q12 0 20.5 3.5t14 13.5t8 27t2.5 43q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69zM389 171q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5t-47.5 28.5t-31 52.5t-11 80.5z
+M495 171q0 -48 10.5 -67.5t33.5 -19.5q12 0 20.5 3.5t14 13.5t8 27t2.5 43q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="671"
+d="M70 194q0 38 10.5 72t29.5 64t44.5 55.5t54.5 45.5q-21 33 -34.5 68t-13.5 73q0 25 8 50.5t26 46t46.5 33t69.5 12.5q39 0 67 -10.5t45.5 -28t25.5 -40.5t8 -48q0 -42 -25 -86.5t-82 -86.5q25 -47 53.5 -94.5t63.5 -91.5q19 25 32 59.5t24 71.5l89 -41q-5 -18 -14 -41
+t-20 -45.5t-22 -43t-21 -34.5q25 -29 46.5 -46.5t42.5 -30.5l-61 -91q-27 13 -52.5 34t-49.5 49q-30 -34 -73.5 -58.5t-108.5 -24.5q-45 0 -83.5 13.5t-66.5 40t-43.5 65.5t-15.5 89zM392 148q-40 53 -72.5 103.5t-55.5 98.5q-35 -35 -55 -68.5t-20 -78.5q0 -51 28.5 -79.5
+t74.5 -28.5q32 0 59 16.5t41 36.5zM280 566q0 -44 29 -90q29 25 42 47.5t13 42.5q0 23 -10.5 37.5t-32.5 14.5q-20 0 -30.5 -14.5t-10.5 -37.5z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="217"
+d="M73 700h103l-31 -216h-72v216z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="278"
+d="M186 -220q-38 48 -64 105.5t-42.5 118t-24 122t-7.5 117.5q0 55 7.5 116t24 122.5t43 120.5t65.5 110l80 -45q-27 -47 -46 -99.5t-31.5 -107.5t-18 -110.5t-5.5 -106.5q0 -48 6 -103t18 -110.5t31.5 -107.5t46.5 -94z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="278"
+d="M92 712q38 -48 64 -105.5t42.5 -118t24 -122t7.5 -117.5q0 -55 -7.5 -116t-24 -122.5t-43 -120.5t-65.5 -110l-81 46q30 50 49.5 103t31 107t16.5 108t5 105q0 48 -6 103.5t-19 111t-32 107.5t-45 95z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="323"
+d="M123 724l24 -43l13 -56l11 52l26 47l59 -34l-27 -49l-42 -40l55 15h52v-70h-50l-52 16l45 -45l22 -40l-60 -35l-24 43l-16 61l-10 -55l-26 -47l-60 35l27 48l39 34l-47 -15h-53v71h54l50 -16l-45 41l-25 47z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="444"
+d="M38 393h129v146h110v-146h129v-106h-129v-147h-110v147h-129v106z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="216"
+d="M33 65q0 34 20 53.5t50 19.5q38 0 58.5 -27t20.5 -75q0 -44 -12.5 -76t-30.5 -53.5t-38.5 -34.5t-35.5 -19l-37 48q23 12 41 38.5t20 53.5q-21 -1 -38.5 16.5t-17.5 55.5z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="298"
+d="M45 344h208v-114h-208v114z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="212"
+d="M34 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="349"
+d="M276 712l91 -35l-293 -817l-92 35z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M35 351q0 98 13.5 167t39.5 112.5t64 63.5t87 20q52 0 90.5 -20t64 -63.5t38 -112.5t12.5 -167q0 -99 -14 -168.5t-40 -113t-64 -63.5t-87 -20q-52 0 -90.5 20.5t-63.5 65t-37.5 113.5t-12.5 166zM154 351q0 -134 20 -196.5t66 -62.5q22 0 38.5 14t26.5 45t15 80t5 120
+q0 133 -19.5 195t-66.5 62q-23 0 -39 -14t-26 -45t-15 -80t-5 -118z" />
+ <glyph glyph-name="one" unicode="1"
+d="M87 106h114v393l13 68l-41 -59l-66 -51l-55 67l193 188h70v-606h112v-106h-340v106z" />
+ <glyph glyph-name="two" unicode="2"
+d="M402 532q0 -52 -15 -106.5t-38.5 -106.5t-51.5 -99t-55 -83l-44 -41v-5l60 15h155v-106h-351v69q21 26 45.5 59.5t49 71t47.5 78t40.5 81t28 79.5t8.5 73q2 42 -18 68t-63 26q-25 0 -51 -11.5t-44 -27.5l-46 87q33 28 75 44.5t99 16.5q36 0 67 -11.5t53.5 -34.5t35.5 -57
+t13 -79z" />
+ <glyph glyph-name="three" unicode="3"
+d="M200 92q49 0 74.5 33t25.5 84q0 113 -112 113h-59v68l99 168l48 45l-66 -9h-137v106h320v-71l-116 -189l-37 -27v-5l37 6q28 -2 54 -15t45.5 -37t31 -60t11.5 -85q0 -59 -16.5 -102t-45 -72t-67 -43t-82.5 -14q-37 0 -78 8t-65 23l32 100q21 -11 46 -18t57 -7z" />
+ <glyph glyph-name="four" unicode="4"
+d="M465 195h-88v-195h-113v195h-247v74l256 436h104v-408h88v-102zM264 452l11 90h-4l-30 -81l-79 -134l-40 -38l51 8h91v155z" />
+ <glyph glyph-name="five" unicode="5"
+d="M183 95q54 0 82 35t28 90q0 63 -33 91t-95 28l-65 -4v365h291v-116h-189v-143l33 4q81 -3 129 -60t48 -160q0 -59 -17 -104t-46.5 -75t-70.5 -45t-89 -15q-36 0 -72.5 7.5t-59.5 19.5l31 101q37 -19 95 -19z" />
+ <glyph glyph-name="six" unicode="6"
+d="M438 217q0 -53 -14.5 -96t-40 -73t-61 -46t-77.5 -16q-44 0 -81 15.5t-64 47.5t-42 82.5t-15 119.5q0 102 24.5 182.5t66 138.5t95 93.5t112.5 48.5l30 -97q-39 -10 -73 -32t-61 -53t-45.5 -70.5t-27.5 -83.5q17 24 43 39t64 15q36 0 66.5 -13t53 -40t35 -67.5
+t12.5 -94.5zM323 210q0 61 -20.5 88.5t-62.5 27.5q-30 0 -51 -17t-30 -40q-1 -11 -1 -22.5v-22.5q0 -26 5 -49.5t15.5 -42t26 -29.5t37.5 -11q36 0 58.5 30.5t22.5 87.5z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M88 0l189 547l36 49l-50 -10h-211v114h379v-38l-227 -662h-116z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M50 168q0 36 8 64.5t22 51t31.5 40.5t37.5 33q-39 31 -61.5 71.5t-22.5 100.5q0 85 47.5 135t130.5 50q76 0 123 -44t47 -125q0 -59 -22 -100t-63 -76q50 -35 75 -79t25 -111q0 -45 -14.5 -81t-40 -61t-60.5 -38t-76 -13q-42 0 -76 12.5t-59 35.5t-38.5 57t-13.5 77z
+M313 179q0 25 -8 45t-21.5 35.5t-30 28.5t-32.5 25q-35 -27 -48.5 -58.5t-13.5 -63.5q0 -42 21 -70.5t59 -28.5q34 0 54 21.5t20 65.5zM179 527q0 -23 6.5 -40.5t17.5 -31.5t25.5 -25.5t30.5 -21.5q23 27 34.5 53.5t11.5 60.5q0 41 -18.5 63.5t-44.5 22.5q-33 0 -48 -24.5
+t-15 -56.5z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M37 481q0 106 50.5 169.5t145.5 63.5q93 0 148.5 -66t55.5 -198q0 -116 -25 -200.5t-67 -140.5t-97 -86t-114 -37l-28 100q90 18 140 78.5t64 146.5q-19 -25 -41 -35t-57 -10q-31 0 -62.5 12.5t-56.5 39t-40.5 67t-15.5 96.5zM152 488q0 -57 24.5 -86.5t62.5 -29.5
+q29 0 49 10.5t31 29.5q2 11 2.5 23t0.5 23q0 31 -5 58.5t-16 47.5t-28 32t-41 12q-38 0 -59 -32t-21 -88z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="251"
+d="M77 427q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56zM77 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="251"
+d="M72 65q0 34 20 53.5t50 19.5q38 0 58.5 -27t20.5 -75q0 -44 -12.5 -76t-30.5 -53.5t-38.5 -34.5t-35.5 -19l-37 48q23 12 41 38.5t20 53.5q-21 -1 -38.5 16.5t-17.5 55.5zM73 427q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20
+t-19 56z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="444"
+d="M35 285v70l311 222l60 -81l-186 -139l-75 -35l74 -31l191 -137l-60 -81z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="444"
+d="M38 298h368v-106h-368v106zM38 489h368v-106h-368v106z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="444"
+d="M409 365v-70l-309 -220l-62 80l187 138l74 36l-74 30l-191 138l62 79z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="382"
+d="M113 208q-4 46 4 80.5t22 61t32 47.5t34 41.5t26.5 43t10.5 50.5q0 35 -16.5 55.5t-54.5 20.5q-26 0 -55 -10.5t-50 -28.5l-47 90q31 23 73 39t102 16q80 0 125.5 -43.5t45.5 -122.5q0 -47 -11 -79.5t-28 -57t-36.5 -44.5t-36 -42t-28 -50t-11.5 -67h-101zM97 65
+q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="881"
+d="M558 484h66l-39 -273q-12 -91 29 -91q20 0 39.5 12t35 37t25 64t9.5 93q0 69 -19.5 118.5t-54.5 81t-83 46.5t-105 15q-64 0 -119.5 -25.5t-96 -71.5t-64 -110t-23.5 -142q0 -153 76 -233t213 -80q26 0 57.5 7t56.5 20l29 -87q-32 -17 -70 -25.5t-86 -8.5
+q-79 0 -147.5 24t-119.5 73.5t-80.5 126t-29.5 181.5t33.5 188t89.5 140t129 87t153 30q76 0 142.5 -22.5t115 -67t76.5 -111t28 -154.5q0 -66 -19.5 -122.5t-52.5 -97t-77.5 -63.5t-94.5 -23q-41 0 -69.5 21t-26.5 73h-3q-23 -38 -55.5 -66t-79.5 -28q-43 0 -73 38t-30 106
+q0 67 16.5 126t44.5 103.5t65 70.5t79 26q28 0 48 -10t37 -27zM505 369q-18 21 -47 21q-23 0 -42 -16.5t-33 -44t-22 -63t-8 -73.5q0 -35 11.5 -54t35.5 -19q22 0 44.5 24.5t37.5 54.5z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="501"
+d="M328 158h-165l-41 -158h-125l203 705h99l204 -705h-132zM190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="490"
+d="M445 538q0 -26 -5.5 -51.5t-17.5 -48t-31.5 -39.5t-46.5 -26v-6q24 -6 45.5 -18t37.5 -32.5t25.5 -50t9.5 -69.5q0 -54 -18.5 -93.5t-50 -64.5t-73.5 -37t-89 -12h-36t-47.5 1.5t-52.5 4.5t-50 9v690q33 6 81.5 10.5t96.5 4.5q44 0 84.5 -7t71 -26t48.5 -52.5t18 -86.5z
+M234 99q42 0 69 27t27 79q0 33 -9 52.5t-24 30t-34.5 13.5t-40.5 3h-51v-199q8 -3 27.5 -4.5t35.5 -1.5zM200 403q11 0 25.5 1.5t23.5 3.5q29 11 49.5 36t20.5 65q0 26 -7 44t-19 28.5t-28.5 15t-35.5 4.5q-41 0 -58 -4v-194h29z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="457"
+d="M442 28q-26 -22 -69.5 -32t-86.5 -10q-54 0 -100.5 18.5t-81.5 61.5t-55 113t-20 172q0 106 22.5 176t59 111.5t83.5 58.5t95 17q49 0 85.5 -8t59.5 -18l-25 -111q-19 10 -44.5 15.5t-60.5 5.5q-69 0 -106 -60t-37 -188q0 -55 8.5 -100.5t27 -78.5t47 -51t68.5 -18
+q35 0 60 9.5t45 22.5z" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="535"
+d="M45 700q18 3 40.5 4.5t46 3t45.5 2t39 0.5q83 0 138.5 -25.5t89 -72t47.5 -111.5t14 -145q0 -73 -13.5 -139.5t-47.5 -117t-92 -80.5t-146 -30q-13 0 -35 1t-46 2.5t-46 3t-34 3.5v701zM229 594q-16 0 -32.5 -0.5t-25.5 -2.5v-482q3 -1 10.5 -1.5t16 -1t16 -1t10.5 -0.5
+q45 0 74 21t45.5 56t23 80.5t6.5 95.5q0 46 -5.5 89t-21 75.5t-44 52t-73.5 19.5z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="430"
+d="M45 700h350v-116h-224v-172h203v-116h-203v-180h228v-116h-354v700z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="419"
+d="M45 700h350v-116h-224v-182h206v-116h-206v-286h-126v700z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="502"
+d="M257 362h216v-310q-37 -35 -86.5 -50.5t-98.5 -15.5q-59 0 -107 21t-81.5 65.5t-52 113t-18.5 164.5q0 100 22 169t58.5 112.5t85 63t102.5 19.5q48 0 87.5 -8.5t65.5 -19.5l-26 -109q-20 9 -46.5 15t-64.5 6q-35 0 -63.5 -14t-48 -44t-30 -77.5t-10.5 -113.5
+q0 -127 38.5 -187t101.5 -60q20 0 38.5 6t32.5 19v143l-115 16v76z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="533"
+d="M362 296h-191v-296h-126v700h126v-288h191v288h126v-700h-126v296z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="238"
+d="M56 700h126v-700h-126v700z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="289"
+d="M113 700h126v-509q0 -46 -7.5 -83.5t-24.5 -64t-45 -41t-70 -14.5q-29 0 -57.5 6t-51.5 17l29 106q21 -13 49 -13q35 0 43.5 29.5t8.5 84.5v482z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="519"
+d="M198 300h-27v-300h-126v700h126v-311l25 12l147 299h142l-160 -295l-47 -37l48 -38l185 -330h-154z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="424"
+d="M417 0h-372v700h126v-584h246v-116z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="664"
+d="M493 361l14 134h-5l-37 -120l-114 -246h-42l-121 247l-37 121h-6l19 -135v-362h-119v700h121l146 -303l24 -87h4l23 89l137 301h119v-700h-126v361z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="540"
+d="M199 344l-46 123h-5l16 -121v-346h-119v705h97l201 -352l43 -121h6l-16 119v349h119v-705h-97z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="553"
+d="M29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53
+t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="477"
+d="M45 693q36 8 79 12.5t86 4.5q46 0 90.5 -8.5t79.5 -33.5t57 -70.5t22 -118.5q0 -66 -18.5 -112t-49.5 -75t-71.5 -42t-83.5 -13h-13t-19 0.5t-19.5 1.5t-13.5 2v-241h-126v693zM171 354q6 -2 22.5 -3.5t22.5 -1.5q22 0 42 6t35.5 20.5t24.5 40t9 64.5q0 33 -8.5 56
+t-23 36.5t-33.5 19.5t-40 6q-31 0 -51 -5v-239z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="553"
+d="M579 -196q-20 -7 -40.5 -10t-40.5 -3q-42 0 -81.5 10t-76.5 22.5t-71.5 22.5t-65.5 10q-10 0 -19.5 -1t-18.5 -4v112q24 6 48 6q34 0 68.5 -10t70 -21.5t73 -21.5t78.5 -10q18 0 37 2.5t39 8.5v-113zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115
+t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="503"
+d="M45 693q41 9 88 13t81 4q43 0 84 -8.5t72.5 -31t51 -61t19.5 -97.5q0 -85 -31.5 -138.5t-86.5 -73.5l40 -32l129 -268h-145l-122 276l-54 13v-289h-126v693zM171 375h43q47 0 71 28.5t24 88.5q0 45 -20 73.5t-63 28.5q-16 0 -31 -1t-24 -4v-214z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="439"
+d="M290 180q0 32 -19 54.5t-47.5 42.5t-62 41t-62 49t-47.5 66t-19 93q0 51 15.5 86.5t42.5 58t64 33t79 10.5q51 0 95 -10t73 -27l-39 -111q-17 12 -50.5 22t-72.5 10t-60 -16t-21 -47q0 -28 19 -49.5t47.5 -41.5t62 -41.5t62 -50t47.5 -67t19 -91.5t-15.5 -92t-44 -64.5
+t-68.5 -38.5t-89 -13q-62 0 -108.5 12t-71.5 27l41 113q20 -12 55 -24t75 -12q100 0 100 78z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="474"
+d="M466 584h-166v-584h-126v584h-166v116h458v-116z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="515"
+d="M354 700h119v-454q0 -136 -55.5 -197t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="503"
+d="M243 289l14 -120h4l16 121l102 410h133l-212 -705h-96l-214 705h149z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="717"
+d="M205 315l10 -126h4l11 128l94 383h88l91 -385l11 -126h4l11 128l62 383h128l-157 -705h-89l-98 386l-13 109h-5l-12 -110l-98 -385h-93l-156 705h139z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="528"
+d="M177 356l-155 344h152l81 -200l19 -76l18 76l85 200h136l-160 -337l168 -363h-147l-94 215l-21 78l-20 -78l-94 -215h-139z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="495"
+d="M184 260l-188 440h150l97 -265l10 -76h5l11 78l95 263h135l-189 -439v-261h-126v260z" />
+ <glyph glyph-name="Z" unicode="Z" horiz-adv-x="445"
+d="M21 116l234 427l42 41h-276v116h403v-116l-235 -430l-41 -38h276v-116h-403v116z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="276"
+d="M45 700h208v-103h-93v-724h93v-103h-208v930z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="362"
+d="M373 -103l-93 -37l-298 816l94 35z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="276"
+d="M231 -230h-208v103h93v724h-93v103h208v-930z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="428"
+d="M181 705h68l155 -292h-119l-56 122l-17 73l-21 -74l-59 -121h-114z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="374"
+d="M0 -122h374v-102h-374v102z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="290"
+d="M230 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="443"
+d="M43 700h119v-232h3q36 44 103 44q71 0 110.5 -59t39.5 -190q0 -142 -56 -208.5t-153 -66.5q-53 0 -97.5 10t-68.5 22v680zM162 108q21 -11 55 -11q38 0 58 36.5t20 122.5q0 76 -16 111.5t-50 35.5q-50 0 -67 -52v-243z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="350"
+d="M338 27q-25 -20 -60 -30t-70 -10q-51 0 -85.5 18.5t-56.5 53t-31.5 83t-9.5 108.5q0 131 47 197t138 66q45 0 73.5 -8t50.5 -20l-28 -99q-18 9 -34.5 13.5t-39.5 4.5q-42 0 -63 -36.5t-21 -117.5q0 -68 21.5 -111t68.5 -43q25 0 42.5 6.5t32.5 16.5z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="445"
+d="M402 176q0 -42 1 -84t8 -93h-84l-16 58h-4q-34 -70 -119 -70q-76 0 -119.5 60t-43.5 195q0 132 47 200.5t140 68.5q24 0 40 -3t31 -10v202h119v-524zM216 96q27 0 43 13.5t24 39.5v236q-10 9 -22.5 13t-32.5 4q-40 0 -60 -36t-20 -128q0 -69 16.5 -105.5t51.5 -36.5z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="428"
+d="M381 37q-25 -22 -68 -36t-90 -14q-52 0 -89.5 18t-61.5 52t-35.5 82.5t-11.5 110.5q0 135 53.5 199.5t148.5 64.5q32 0 62 -9.5t53.5 -32t38 -60t14.5 -94.5q0 -22 -2.5 -47t-7.5 -54h-243q2 -62 26 -95t77 -33q32 0 58.5 10t40.5 21zM225 412q-38 0 -57 -30.5t-22 -85.5
+h138q3 57 -12 86.5t-47 29.5z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="267"
+d="M8 500h54v28q0 95 35.5 137.5t101.5 42.5t110 -18l-22 -101q-18 7 -32 8.5t-29 1.5q-29 0 -37 -22.5t-8 -76.5h85v-106h-85v-394h-119v394h-54v106z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="443"
+d="M401 0q0 -109 -50 -160.5t-139 -51.5q-62 0 -97 9.5t-54 20.5l25 101q22 -9 47.5 -17t60.5 -8q51 0 70.5 27.5t19.5 83.5v27h-3q-14 -20 -37.5 -30t-60.5 -10q-79 0 -118.5 59.5t-39.5 188.5q0 139 54.5 205t155.5 66q54 0 97 -8.5t69 -20.5v-482zM216 94q27 0 42.5 13
+t23.5 37v250q-11 5 -24.5 8t-31.5 3q-37 0 -57.5 -36t-20.5 -124q0 -151 68 -151z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="449"
+d="M291 0v302q0 54 -12.5 78t-45.5 24q-24 0 -44 -17t-27 -43v-344h-119v700h119v-245h3q20 26 48.5 42t71.5 16q31 0 54 -9t39 -30t24 -56.5t8 -89.5v-328h-119z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="225"
+d="M39 641q0 30 19 49.5t54 19.5t56 -19t21 -50t-21 -49t-56 -18t-54 18.5t-19 48.5zM53 500h119v-500h-119v500z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="225"
+d="M39 641q0 30 19 49.5t54 19.5t56 -19t21 -50t-21 -49t-56 -18t-54 18.5t-19 48.5zM54 500h119v-521q0 -91 -31.5 -139t-100.5 -48q-28 0 -57 7v106q43 -4 56.5 24.5t13.5 84.5v486z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="412"
+d="M190 207h-28v-207h-119v700h119v-413l24 14l83 199h129l-92 -198l-43 -34l47 -34l102 -234h-134z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="243"
+d="M164 162q0 -35 7 -50t23 -15q9 0 18.5 2t21.5 7l11 -96q-12 -8 -41 -15t-59 -7q-50 0 -75 25t-25 85v602h119v-538z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="663"
+d="M274 0v291q0 63 -10 87.5t-39 24.5q-24 0 -39.5 -15.5t-23.5 -37.5v-350h-119v500h92l15 -60h3q19 31 47.5 51.5t75.5 20.5q39 0 63.5 -17t38.5 -60q19 36 50 56.5t73 20.5q33 0 56.5 -8.5t38 -29.5t21.5 -57.5t7 -92.5v-324h-119v304q0 51 -9 75t-40 24
+q-25 0 -40.5 -14.5t-22.5 -39.5v-349h-119z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="449"
+d="M291 0v304q0 55 -13 77t-44 22q-26 0 -45 -16t-27 -40v-347h-119v500h95l14 -58h3q18 29 49 49.5t81 20.5q30 0 53.5 -9t39.5 -29.5t24 -55t8 -85.5v-333h-119z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="447"
+d="M43 500h89l12 -57h3q23 36 51.5 52.5t70.5 16.5q76 0 114.5 -57.5t38.5 -191.5t-48 -205.5t-139 -71.5q-24 0 -41 4t-32 13v-203h-119v700zM162 112q10 -10 22.5 -15t32.5 -5q40 0 61 39.5t21 134.5q0 71 -16 105.5t-53 34.5q-50 0 -68 -59v-235z" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="443"
+d="M401 -200h-119v235h-4q-14 -22 -36.5 -35.5t-60.5 -13.5q-74 0 -115 63t-41 191q0 134 57 202.5t162 68.5q45 0 88.5 -9t68.5 -20v-682zM282 393q-21 12 -56 12q-39 0 -58.5 -37.5t-19.5 -122.5q0 -153 68 -153q27 0 42.5 13.5t23.5 38.5v249z" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="293"
+d="M279 382q-24 9 -44 9q-27 0 -46.5 -15t-26.5 -42v-334h-119v500h91l14 -60h4q13 33 37.5 51.5t56.5 18.5q24 0 47 -10z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="350"
+d="M211 133q0 21 -13.5 35.5t-34.5 27t-44.5 25.5t-44.5 32t-34.5 46t-13.5 68q0 70 38 108t112 38q44 0 83 -9.5t62 -23.5l-28 -92q-19 8 -46 15.5t-53 7.5q-49 0 -49 -41q0 -19 13.5 -31.5t34.5 -24.5t44.5 -25t44.5 -32.5t34.5 -47.5t13.5 -69q0 -69 -42 -111t-125 -42
+q-41 0 -80.5 10t-63.5 26l33 96q21 -12 48.5 -21t57.5 -9q23 0 38 10.5t15 33.5z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="291"
+d="M4 500h55v94l119 37v-131h97v-106h-97v-218q0 -43 8.5 -61t30.5 -18q15 0 27 3t26 9l15 -95q-22 -11 -51 -18.5t-61 -7.5q-57 0 -85.5 33t-28.5 111v262h-55v106z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="399"
+d="M195 239l12 -79h4l11 80l62 260h128l-168 -505h-80l-177 505h139z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="596"
+d="M352 500l70 -256l12 -83h4l10 84l47 255h108l-123 -505h-94l-75 279l-8 64h-6l-7 -66l-72 -277h-97l-128 505h129l54 -251l9 -89h4l13 90l61 250h89z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="439"
+d="M133 256l-119 244h140l51 -118l19 -64l21 64l52 118h129l-120 -240l128 -260h-135l-61 130l-22 71l-23 -71l-61 -130h-128z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="400"
+d="M203 219l13 -78h5l9 79l58 280h122l-125 -451q-17 -59 -32 -106t-32 -80t-38.5 -50.5t-51.5 -17.5q-21 0 -40.5 3.5t-33.5 11.5l20 102q13 -5 26.5 -4.5t25 10t20.5 29.5t15 53l-174 500h143z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="381"
+d="M24 106l162 245l44 43h-206v106h331v-106l-160 -249l-43 -39h203v-106h-331v106z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="313"
+d="M98 98q0 51 -17 70t-49 19v96q32 0 49 20.5t17 64.5v214q0 53 20.5 86t70.5 33h107v-102h-41q-23 0 -33 -14t-10 -46v-203q0 -44 -17 -66.5t-40 -27.5v-10q23 -4 40 -30t17 -68v-202q0 -31 9.5 -45.5t34.5 -14.5h40v-102h-107q-91 0 -91 118v210z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="188"
+d="M45 700h98v-830h-98v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="313"
+d="M223 373q0 -51 17 -70t49 -19v-96q-32 0 -49 -20.5t-17 -64.5v-215q0 -54 -21.5 -86t-72.5 -32h-104v102h41q23 0 33 14t10 46v203q0 44 17 66.5t40 27.5v10q-23 4 -40 30t-17 68v202q0 31 -9.5 45.5t-34.5 14.5h-40v102h107q91 0 91 -117v-211z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="444"
+d="M23 378q39 38 71 52.5t59 14.5q24 0 45 -8t40 -18t37.5 -18t38.5 -8q15 0 30.5 6.5t32.5 21.5l44 -103q-30 -27 -55 -37.5t-47 -10.5q-23 0 -43.5 8.5t-40 19t-39 19.5t-40.5 9q-20 0 -42.5 -10.5t-49.5 -37.5z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="205"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="251"
+d="M169 -202h-123v329l23 163h76l24 -163v-329zM35 433q0 38 19.5 57t51.5 19q35 0 54 -19t19 -57q0 -35 -19.5 -55t-53.5 -20q-33 0 -52 20t-19 55z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M414 28q-14 -11 -33.5 -19.5t-41.5 -13.5v-95h-112v90q-43 7 -73 28.5t-48.5 55.5t-27 78.5t-8.5 97.5q0 110 40.5 176.5t116.5 82.5v91h112v-91q43 -7 70 -24l-25 -96q-12 5 -26.5 8.5t-28.5 5.5v-307q20 3 35 9t26 13zM252 401q-32 -11 -48.5 -47.5t-16.5 -103.5
+q0 -58 15.5 -97t49.5 -53v301z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M44 392h60q-12 26 -21 58t-9 78q0 48 14 83t38.5 58t58.5 34t75 11q51 0 92.5 -10t73.5 -27l-38 -103q-17 10 -44.5 18.5t-65.5 8.5t-59.5 -23t-21.5 -71q0 -35 10.5 -61.5t24.5 -53.5h117v-100h-83q2 -10 3 -19.5t1 -20.5q0 -29 -9 -63t-26 -55l-45 -35v-6l66 16h183
+v-109h-395v109h2q25 1 45 12t33 29t20 41t7 48q0 29 -6 53h-101v100z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M56 607l71 -70l17 -33q18 14 42.5 20.5t51.5 6.5q26 0 52 -7t44 -19l17 32l70 70l70 -73l-69 -70l-34 -15q25 -37 25 -93q0 -27 -6.5 -50.5t-18.5 -40.5l34 -14l69 -71l-70 -72l-70 69l-16 33q-17 -12 -44 -19t-53 -7q-27 0 -51.5 6.5t-42.5 19.5l-17 -33l-71 -69l-69 72
+l69 71l33 16q-11 18 -17 40t-6 49t6.5 50t18.5 43l-35 15l-69 70zM165 357q0 -33 20.5 -55t53.5 -22t53.5 22t20.5 55q0 32 -20.5 55t-53.5 23t-53.5 -23t-20.5 -55z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M66 336h77l-155 364h150l97 -265l10 -76h5l11 78l95 263h135l-157 -364h78v-79h-110v-58h110v-79h-110v-120h-126v120h-110v79h110v58h-110v79z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="188"
+d="M45 213h98v-343h-98v343zM143 357h-98v343h98v-343z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="444"
+d="M121 481q-23 17 -38 41t-15 66q0 54 36.5 90t114.5 36q48 0 93 -9.5t67 -21.5l-30 -99q-21 10 -51 17t-56 7q-30 0 -42.5 -11.5t-12.5 -26.5q0 -19 16 -30t40.5 -20t53 -19.5t53 -29t40.5 -48t16 -76.5q0 -31 -12.5 -61.5t-34.5 -53.5l-37 -14q23 -16 38 -40.5t15 -65.5
+q0 -61 -41 -93.5t-114 -32.5q-56 0 -95.5 11t-65.5 27l31 96q20 -11 47.5 -19.5t61.5 -8.5q30 0 43.5 10t13.5 31q0 19 -16 29.5t-40.5 20t-52.5 20.5t-52.5 29.5t-40.5 47t-16 73.5q0 31 12.5 61t35.5 53zM248 269q17 12 28 32.5t11 43.5q0 34 -24.5 50.5t-67.5 33.5
+q-17 -12 -27.5 -30.5t-10.5 -43.5q0 -33 24.5 -51.5t66.5 -34.5z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="432"
+d="M60 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM246 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="725"
+d="M51 298q0 72 24 129.5t66 98t99 62t123 21.5q65 0 122 -21.5t99 -62t66 -98t24 -129.5t-24 -129.5t-66 -98t-99 -62t-122 -21.5q-72 0 -130 21.5t-98.5 62t-62 98t-21.5 129.5zM137 298q0 -54 16.5 -96.5t46.5 -72.5t71.5 -46t91.5 -16q49 0 90.5 16t71.5 46t46.5 72.5
+t16.5 96.5t-16.5 96.5t-46.5 72.5t-71.5 46t-90.5 16q-50 0 -91.5 -16t-71.5 -46t-46.5 -72.5t-16.5 -96.5zM471 161q-19 -12 -48 -19.5t-62 -7.5q-69 0 -106 44.5t-37 119.5q0 78 39 121t104 43q32 0 56.5 -7.5t47.5 -20.5l-28 -77q-15 8 -28 10.5t-24 2.5q-25 0 -38.5 -17
+t-13.5 -55q0 -72 58 -72q29 0 54 13z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="347"
+d="M45 675q22 14 62 23.5t91 9.5q66 0 90.5 -27.5t24.5 -84.5q0 -34 -1 -66.5t-1 -62.5q0 -24 1 -45.5t5 -41.5h-88l-13 44h-3q-10 -17 -30.5 -32.5t-55.5 -15.5q-46 0 -72 27.5t-26 71.5q0 33 14.5 55t39.5 35t58 17.5t69 2.5q2 26 -5.5 38t-35.5 12q-32 0 -58 -7t-44 -15z
+M210 526q-33 4 -55.5 -3.5t-22.5 -34.5q0 -16 8.5 -25.5t21.5 -9.5q23 0 33 9t15 19v45z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="405"
+d="M184 261l125 216l68 -45l-69 -133l-38 -39l38 -35l74 -131l-68 -46zM22 259l131 230l76 -51l-76 -137l-39 -41l39 -36l80 -135l-75 -51z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="444"
+d="M40 409h368v-223h-112v117h-256v106z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="298"
+d="M45 344h208v-114h-208v114z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="595"
+d="M54 483q0 58 19.5 103.5t53 76.5t77.5 47t94 16q51 0 95 -16t77 -47t52 -76.5t19 -103.5t-19.5 -103.5t-52.5 -76.5t-77.5 -47t-93.5 -16q-51 0 -95.5 16t-77.5 47t-52 76.5t-19 103.5zM136 483q0 -42 13 -73t35.5 -51.5t51.5 -30.5t62 -10q34 0 63.5 10t51.5 30t34 51.5
+t12 73.5t-13 73t-35 51.5t-51 31t-62 10.5q-73 0 -117.5 -44t-44.5 -122zM209 595q14 4 39 6.5t47 2.5q36 0 62 -15t26 -52q0 -27 -17.5 -42t-43.5 -17l24 -12l56 -94h-53l-54 90l-41 13v-103h-45v223zM286 565q-10 0 -18.5 -0.5t-13.5 -3.5v-60h29q26 0 39 7.5t13 26.5
+q0 30 -49 30z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="392"
+d="M60 658h272v-91h-272v91z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="364"
+d="M44 548q0 37 10.5 68t29 52.5t44.5 33.5t57 12q64 0 103.5 -43t39.5 -123q0 -78 -39.5 -121t-103.5 -43q-63 0 -102 43t-39 121zM134 548q0 -33 14 -55.5t38 -22.5q23 0 37.5 22.5t14.5 55.5q0 34 -14.5 57t-37.5 23q-24 0 -38 -22.5t-14 -57.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="444"
+d="M38 500h129v143h110v-143h129v-106h-129v-94h-110v94h-129v106zM38 252h368v-106h-368v106z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="353"
+d="M299 684q0 -30 -7.5 -56.5t-19.5 -50t-28 -44.5t-33 -40l-39 -25v0l48 7h90v-95h-265v67q23 18 49.5 43.5t49 54t37 58t14.5 57.5q0 51 -46 51q-22 0 -41 -6.5t-34 -15.5l-29 83q29 20 63 27.5t63 7.5q60 0 94 -31.5t34 -91.5z" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="353"
+d="M144 464q36 0 50.5 15t14.5 39q0 23 -15.5 36.5t-55.5 13.5h-39v38l60 81l38 28l-50 -6h-93v91h240v-60l-70 -94l-30 -19v0l26 -1q43 -2 67.5 -31.5t24.5 -83.5q0 -36 -12.5 -62t-33.5 -43t-48 -25t-58 -8q-32 0 -61 6.5t-50 17.5l21 86q37 -19 74 -19z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="281"
+d="M102 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="mu" unicode="µ" horiz-adv-x="476"
+d="M159 500v-287q0 -60 17 -89.5t55 -29.5q35 0 55 17.5t30 47.5v341h119v-337q0 -41 2.5 -82.5t10.5 -80.5h-89l-28 64h-4q-12 -32 -37 -54t-66 -22q-30 0 -47 13t-31 33h-4l17 -101v-133h-119v700h119z" />
+ <glyph glyph-name="mu" unicode="μ" horiz-adv-x="476"
+d="M159 500v-287q0 -60 17 -89.5t55 -29.5q35 0 55 17.5t30 47.5v341h119v-337q0 -41 2.5 -82.5t10.5 -80.5h-89l-28 64h-4q-12 -32 -37 -54t-66 -22q-30 0 -47 13t-31 33h-4l17 -101v-133h-119v700h119z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="448"
+d="M306 700h97v-830h-97v830zM147 294q-28 0 -51.5 15.5t-40 42.5t-25.5 64t-9 81t11 81t31.5 64t49.5 42.5t64 15.5h67v-830h-97v424z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="212"
+d="M34 315q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="305"
+d="M191 0l-20 -43q34 -4 54 -21.5t20 -53.5q0 -23 -10.5 -40t-28.5 -28.5t-42 -17.5t-50 -6q-27 0 -54 6l7 48q42 -4 55.5 5.5t13.5 23.5q0 28 -70 32l49 95h76z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="353"
+d="M63 475h78v168l9 46l-26 -32l-46 -31l-44 69l131 112h82v-332h70v-95h-254v95z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="350"
+d="M25 542q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5t-47.5 28.5t-31 52.5t-11 80.5zM131 542q0 -48 10.5 -67.5t33.5 -19.5q12 0 20.5 3.5t14 13.5t8 27t2.5 43
+q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="405"
+d="M220 266l-125 -216l-68 43l70 135l37 39l-37 35l-74 132l67 45zM383 268l-131 -230l-76 49l74 139l40 41l-40 36l-79 135l75 51z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="749"
+d="M139 544l8 46l-26 -33l-44 -31l-45 70l131 111h81v-427h-105v264zM713 80h-61v-80h-95v80h-172v64l178 281h89v-259h61v-86zM557 250l7 55h-5l-19 -51l-38 -65l-30 -30l43 7h42v84zM503 715l81 -39l-342 -690l-83 41z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="770"
+d="M138 544l8 46l-26 -33l-44 -31l-45 70l131 111h81v-427h-105v264zM721 304q0 -30 -7.5 -56.5t-19.5 -50t-28 -44.5t-33 -40l-39 -25v0l48 7h90v-95h-265v67q23 18 49.5 43.5t49 54t37 58t14.5 57.5q0 51 -46 51q-22 0 -41 -6.5t-34 -15.5l-29 83q29 20 63 27.5t63 7.5
+q60 0 94 -31.5t34 -91.5zM503 715l81 -39l-342 -690l-83 41z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="766"
+d="M730 80h-61v-80h-95v80h-172v64l178 281h89v-259h61v-86zM574 250l7 55h-5l-19 -51l-38 -65l-30 -30l43 7h42v84zM133 364q36 0 50.5 15t14.5 39q0 23 -15.5 36.5t-55.5 13.5h-39v38l60 81l38 28l-50 -6h-93v91h240v-60l-70 -94l-30 -19v0l26 -1q43 -2 67.5 -31.5
+t24.5 -83.5q0 -36 -12.5 -62t-33.5 -43t-48 -25t-58 -8q-32 0 -61 6.5t-50 17.5l21 86q37 -19 74 -19zM521 715l81 -39l-342 -690l-83 41z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="382"
+d="M271 290q4 -46 -4 -80.5t-22 -61t-32 -47.5t-34 -41.5t-26.5 -43t-10.5 -50.5q0 -35 16.5 -55.5t54.5 -20.5q26 0 55 10.5t50 28.5l47 -90q-31 -23 -73 -39t-102 -16q-80 0 -125.5 43.5t-45.5 122.5q0 47 11 79.5t28 57t36.5 44.5t36 42t28 49.5t11.5 67.5h101zM287 433
+q0 -37 -19.5 -56t-51.5 -19q-35 0 -54 19t-19 56q0 36 19.5 56t53.5 20q33 0 52 -20t19 -56z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="501"
+d="M334 752h-94l-130 88v30h142zM328 158h-165l-41 -158h-125l203 705h99l204 -705h-132zM190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="501"
+d="M249 870h143v-30l-132 -88h-93zM328 158h-165l-41 -158h-125l203 705h99l204 -705h-132zM190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="501"
+d="M209 870h87l104 -93v-39h-85l-47 41l-17 34l-18 -33l-50 -42h-83v40zM328 158h-165l-41 -158h-125l203 705h99l204 -705h-132zM190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="501"
+d="M82 796q29 37 56 50.5t53 13.5q19 0 38 -5.5t37 -11.5l34.5 -11.5t32.5 -5.5q14 0 27 5.5t25 19.5l27 -63q-26 -29 -49.5 -39.5t-46.5 -10.5q-19 0 -37.5 5.5t-36 11.5t-34.5 11.5t-34 5.5t-33 -7t-33 -27zM328 158h-165l-41 -158h-125l203 705h99l204 -705h-132z
+M190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="501"
+d="M92 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM274 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM328 158h-165l-41 -158h-125l203 705h99
+l204 -705h-132zM190 262h116l-40 163l-16 110h-4l-17 -111z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="501"
+d="M-3 0l199 691q-31 10 -44 30.5t-13 49.5q0 18 5 34.5t18 29t34 19.5t54 7q61 0 86.5 -24t25.5 -66q0 -27 -13.5 -49t-45.5 -32l200 -690h-132l-43 158h-165l-41 -158h-125zM190 262h116l-40 163l-16 110h-4l-17 -111zM214 771q0 -31 36 -31q21 0 29 7.5t8 23.5
+q0 17 -8.5 25.5t-28.5 8.5q-36 0 -36 -34z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="717"
+d="M326 522l-26 -97l-65 -148h96v245h-5zM331 173h-144l-79 -173h-132l350 700h355v-116h-224v-172h203v-116h-203v-180h228v-116h-354v173z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="457"
+d="M442 28q-22 -18 -55 -27.5t-68 -12.5l-14 -31q34 -4 54 -21.5t20 -53.5q0 -23 -10.5 -40t-28.5 -28.5t-42 -17.5t-50 -6q-27 0 -54 6l7 48q42 -4 55.5 5.5t13.5 23.5q0 28 -70 32l43 84q-46 6 -85 29t-67.5 66t-45 109t-16.5 158q0 106 22.5 176t59 111.5t83.5 58.5
+t95 17q49 0 85.5 -8t59.5 -18l-25 -111q-19 10 -44.5 15.5t-60.5 5.5q-69 0 -106 -60t-37 -188q0 -55 8.5 -100.5t27 -78.5t47 -51t68.5 -18q35 0 60 9.5t45 22.5z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="430"
+d="M297 752h-94l-130 88v30h142zM45 700h350v-116h-224v-172h203v-116h-203v-180h228v-116h-354v700z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="430"
+d="M234 870h143v-30l-132 -88h-93zM45 700h350v-116h-224v-172h203v-116h-203v-180h228v-116h-354v700z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="430"
+d="M176 870h87l104 -93v-39h-85l-47 41l-17 34l-18 -33l-50 -42h-83v40zM45 700h350v-116h-224v-172h203v-116h-203v-180h228v-116h-354v700z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="430"
+d="M60 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM242 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM45 700h350v-116h-224v-172h203v-116h-203
+v-180h228v-116h-354v700z" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="238"
+d="M203 752h-94l-130 88v30h142zM56 700h126v-700h-126v700z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="238"
+d="M119 870h143v-30l-132 -88h-93zM56 700h126v-700h-126v700z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="238"
+d="M79 870h87l104 -93v-39h-85l-47 41l-17 34l-18 -33l-50 -42h-83v40zM56 700h126v-700h-126v700z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="238"
+d="M-38 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM144 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM56 700h126v-700h-126v700z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="555"
+d="M-3 401h68v299q18 3 40.5 4.5t46 3t45.5 2t39 0.5q83 0 138.5 -25.5t89 -72t47.5 -111.5t14 -145q0 -73 -13.5 -139.5t-47.5 -117t-92 -80.5t-146 -30q-13 0 -35 1t-46 2.5t-46 3t-34 3.5v323h-68v79zM191 401h108v-79h-108v-213q3 -1 10.5 -1.5t16 -1t16 -1t10.5 -0.5
+q45 0 74 21t45.5 56t23 80.5t6.5 95.5q0 46 -5.5 89t-21 75.5t-44 52t-73.5 19.5q-16 0 -32.5 -0.5t-25.5 -2.5v-190z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="540"
+d="M104 796q29 37 56 50.5t53 13.5q19 0 38 -5.5t37 -11.5l34.5 -11.5t32.5 -5.5q14 0 27 5.5t25 19.5l27 -63q-26 -29 -49.5 -39.5t-46.5 -10.5q-19 0 -37.5 5.5t-36 11.5t-34.5 11.5t-34 5.5t-33 -7t-33 -27zM199 344l-46 123h-5l16 -121v-346h-119v705h97l201 -352
+l43 -121h6l-16 119v349h119v-705h-97z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="553"
+d="M344 752h-94l-130 88v30h142zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189
+q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="553"
+d="M301 870h143v-30l-132 -88h-93zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189
+q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="553"
+d="M234 870h87l104 -93v-39h-85l-47 41l-17 34l-18 -33l-50 -42h-83v40zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52
+t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="553"
+d="M110 796q29 37 56 50.5t53 13.5q19 0 38 -5.5t37 -11.5l34.5 -11.5t32.5 -5.5q14 0 27 5.5t25 19.5l27 -63q-26 -29 -49.5 -39.5t-46.5 -10.5q-19 0 -37.5 5.5t-36 11.5t-34.5 11.5t-34 5.5t-33 -7t-33 -27zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115
+t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="553"
+d="M118 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM300 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM29 350q0 178 61 271t186 93
+q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="444"
+d="M112 541l111 -124l111 124l76 -73l-115 -129l115 -131l-76 -73l-111 124l-112 -125l-77 72l118 133l-116 129z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="553"
+d="M88 83q-31 48 -45 115t-14 152q0 178 61 271t186 93q72 0 125 -33l18 34l79 -41l-32 -61q30 -48 44 -114t14 -149q0 -178 -62.5 -271t-185.5 -93q-36 0 -66 8t-55 22l-16 -30l-79 43zM342 567q-26 31 -66 31q-115 0 -115 -248q0 -31 2 -59t6 -54zM213 129q25 -27 63 -27
+q58 0 87 59t29 189q0 29 -2 55.5t-6 51.5z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="515"
+d="M326 752h-94l-130 88v30h142zM354 700h119v-454q0 -136 -55.5 -197t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="515"
+d="M296 870h143v-30l-132 -88h-93zM354 700h119v-454q0 -136 -55.5 -197t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="515"
+d="M220 870h87l104 -93v-39h-85l-47 41l-17 34l-18 -33l-50 -42h-83v40zM354 700h119v-454q0 -136 -55.5 -197t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="515"
+d="M101 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM283 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM354 700h119v-454q0 -136 -55.5 -197
+t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="495"
+d="M265 870h143v-30l-132 -88h-93zM184 260l-188 440h150l97 -265l10 -76h5l11 78l95 263h135l-189 -439v-261h-126v260z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="477"
+d="M45 700h126v-73q19 1 39 1q46 0 90.5 -8.5t79.5 -33.5t57 -70.5t22 -118.5q0 -65 -18.5 -111t-49.5 -75t-71.5 -42.5t-83.5 -13.5h-13q-9 0 -19 0.5t-19.5 1.5t-13.5 2v-159h-126v700zM222 516q-31 0 -51 -5v-238q6 -2 22.5 -3.5t22.5 -1.5q22 0 42 5.5t35 20.5t24 40
+t9 64q0 34 -8.5 56.5t-22.5 36t-33 19.5t-40 6z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="535"
+d="M63 394h-54v106h54v11q0 54 14 92t39 61t59 33.5t75 10.5q42 0 78 -9.5t62.5 -29t41.5 -48t15 -66.5q0 -35 -15 -58.5t-33.5 -42.5t-33.5 -36t-15 -38q0 -19 12 -32t30.5 -25t40 -25t40 -32t30.5 -45.5t12 -65.5q0 -33 -10 -63.5t-30.5 -53.5t-51 -37t-71.5 -14
+q-38 0 -73 9.5t-59 24.5l31 94q20 -11 39.5 -18.5t47.5 -7.5q26 0 42 18t16 44q0 23 -12 38t-30.5 28t-40 25.5t-40 29t-30.5 40.5t-12 59q0 36 15 59t33 41t33 34.5t15 38.5q0 26 -22 42.5t-48 16.5q-36 0 -55.5 -22.5t-19.5 -85.5v-495h-119v394z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16zM259 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16zM196 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16zM174 732h85l91 -182h-93l-32 66l-13 49l-13 -49l-37 -66h-89z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16zM60 656q29 37 54 50.5t46 13.5q18 0 33.5 -6.5t30.5 -15t30 -15t30 -6.5q11 0 23 5t26 18l22 -61q-27 -32 -50.5 -44t-43.5 -12q-18 0 -33.5 6t-30.5 13.5t-30 14t-30 6.5q-13 0 -26 -5.5t-27 -19.5
+z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="413"
+d="M44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5
+v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5q0 -31 12.5 -47t34.5 -16zM56 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM242 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5
+t-17 47.5z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="413"
+d="M114 647q0 45 24.5 70t72.5 25q46 0 72 -23.5t26 -71.5q0 -42 -25.5 -67.5t-72.5 -25.5t-72 25t-25 68zM181 647q0 -17 8.5 -25.5t21.5 -8.5q31 0 31 34q0 19 -8.5 27.5t-22.5 8.5q-13 0 -21.5 -8t-8.5 -28zM44 470q30 18 75 29t102 11q85 0 118.5 -44t33.5 -125
+q0 -47 -2.5 -92.5t-3.5 -89t1.5 -84t13.5 -76.5h-97l-19 61h-4q-16 -29 -45 -48t-73 -19q-59 0 -93 39.5t-34 105.5q0 90 64 128t173 32q5 58 -7.5 84t-53.5 26q-30 0 -62 -7t-57 -20zM187 95q27 0 44 13.5t25 29.5v83q-23 3 -44 1t-37 -9t-25.5 -20.5t-9.5 -34.5
+q0 -31 12.5 -47t34.5 -16z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="653"
+d="M257 223q-23 2 -44 0.5t-37.5 -9t-26 -21t-9.5 -35.5q0 -28 12 -44t35 -16q28 0 45 13.5t25 31.5v80zM287 68q-21 -34 -53.5 -55t-87.5 -21q-60 0 -94.5 41t-34.5 106q0 46 16.5 77.5t47 51t74.5 27.5t98 5q1 9 1 16.5v15.5q0 39 -13 56.5t-47 17.5q-31 0 -63 -9t-57 -23
+l-31 90q32 21 78 33.5t96 12.5q42 0 68.5 -13t43.5 -41q20 29 52 43.5t72 14.5q32 0 62.5 -9.5t54 -32.5t37.5 -61t14 -95q0 -22 -2.5 -47t-7.5 -53h-241q2 -66 25 -96.5t75 -30.5q31 0 57.5 9.5t40.5 20.5l39 -83q-25 -20 -67 -34.5t-93 -14.5q-109 0 -155 81h-5zM510 295
+q3 54 -12 85.5t-48 31.5q-38 0 -56 -30t-21 -87h137z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="350"
+d="M338 27q-18 -15 -41 -23.5t-49 -13.5l-15 -33q34 -4 54 -21.5t20 -53.5q0 -23 -10.5 -40t-28.5 -28.5t-42 -17.5t-50 -6q-27 0 -54 6l7 48q42 -4 55.5 5.5t13.5 23.5q0 28 -70 32l43 85q-80 13 -113 82t-33 178q0 131 47 197t138 66q45 0 73.5 -8t50.5 -20l-28 -99
+q-18 9 -34.5 13.5t-39.5 4.5q-42 0 -63 -36.5t-21 -117.5q0 -68 21.5 -111t68.5 -43q25 0 42.5 6.5t32.5 16.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="428"
+d="M381 37q-25 -22 -68 -36t-90 -14q-52 0 -89.5 18t-61.5 52t-35.5 82.5t-11.5 110.5q0 135 53.5 199.5t148.5 64.5q32 0 62 -9.5t53.5 -32t38 -60t14.5 -94.5q0 -22 -2.5 -47t-7.5 -54h-243q2 -62 26 -95t77 -33q32 0 58.5 10t40.5 21zM225 412q-38 0 -57 -30.5t-22 -85.5
+h138q3 57 -12 86.5t-47 29.5zM271 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="428"
+d="M381 37q-25 -22 -68 -36t-90 -14q-52 0 -89.5 18t-61.5 52t-35.5 82.5t-11.5 110.5q0 135 53.5 199.5t148.5 64.5q32 0 62 -9.5t53.5 -32t38 -60t14.5 -94.5q0 -22 -2.5 -47t-7.5 -54h-243q2 -62 26 -95t77 -33q32 0 58.5 10t40.5 21zM225 412q-38 0 -57 -30.5t-22 -85.5
+h138q3 57 -12 86.5t-47 29.5zM223 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="428"
+d="M381 37q-25 -22 -68 -36t-90 -14q-52 0 -89.5 18t-61.5 52t-35.5 82.5t-11.5 110.5q0 135 53.5 199.5t148.5 64.5q32 0 62 -9.5t53.5 -32t38 -60t14.5 -94.5q0 -22 -2.5 -47t-7.5 -54h-243q2 -62 26 -95t77 -33q32 0 58.5 10t40.5 21zM225 412q-38 0 -57 -30.5t-22 -85.5
+h138q3 57 -12 86.5t-47 29.5zM179 732h85l91 -182h-93l-32 66l-13 49l-13 -49l-37 -66h-89z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="428"
+d="M381 37q-25 -22 -68 -36t-90 -14q-52 0 -89.5 18t-61.5 52t-35.5 82.5t-11.5 110.5q0 135 53.5 199.5t148.5 64.5q32 0 62 -9.5t53.5 -32t38 -60t14.5 -94.5q0 -22 -2.5 -47t-7.5 -54h-243q2 -62 26 -95t77 -33q32 0 58.5 10t40.5 21zM225 412q-38 0 -57 -30.5t-22 -85.5
+h138q3 57 -12 86.5t-47 29.5zM65 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM251 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="225"
+d="M53 500h119v-500h-119v500zM165 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="225"
+d="M53 500h119v-500h-119v500zM101 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="225"
+d="M53 500h119v-500h-119v500zM74 732h85l91 -182h-93l-32 66l-13 49l-13 -49l-37 -66h-89z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="225"
+d="M53 500h119v-500h-119v500zM-43 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM143 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="eth" unicode="ð" horiz-adv-x="458"
+d="M142 244q0 -81 24.5 -116.5t64.5 -35.5q19 0 34.5 10t27 32.5t18 58t6.5 87.5q0 6 -0.5 17l-1 22t-1.5 22t-2 17q-13 18 -35.5 26.5t-45.5 8.5q-44 0 -66.5 -39t-22.5 -110zM149 580l48 37q-30 18 -62 29l48 68q21 -7 47 -19q20 -9 40 -22l47 36l40 -50l-37 -29
+q9 -9 18 -20q27 -30 47.5 -73t33 -99.5t12.5 -129.5q0 -86 -14.5 -147t-41.5 -100t-65.5 -57t-86.5 -18q-97 0 -146.5 67.5t-49.5 191.5q0 61 14 108t39 79.5t59.5 49.5t75.5 17q29 0 54.5 -9t41.5 -28q-18 70 -63 114l-58 -45z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="449"
+d="M291 0v304q0 55 -13 77t-44 22q-26 0 -45 -16t-27 -40v-347h-119v500h95l14 -58h3q18 29 49 49.5t81 20.5q30 0 53.5 -9t39.5 -29.5t24 -55t8 -85.5v-333h-119zM77 656q29 37 54 50.5t46 13.5q18 0 33.5 -6.5t30.5 -15t30 -15t30 -6.5q11 0 23 5t26 18l22 -61
+q-27 -32 -50.5 -44t-43.5 -12q-18 0 -33.5 6t-30.5 13.5t-30 14t-30 6.5q-13 0 -26 -5.5t-27 -19.5z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5zM271 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5zM224 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5zM186 732h85l91 -182h-93l-32 66l-13 49l-13 -49
+l-37 -66h-89z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5zM73 656q29 37 54 50.5t46 13.5q18 0 33.5 -6.5
+t30.5 -15t30 -15t30 -6.5q11 0 23 5t26 18l22 -61q-27 -32 -50.5 -44t-43.5 -12q-18 0 -33.5 6t-30.5 13.5t-30 14t-30 6.5q-13 0 -26 -5.5t-27 -19.5z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="445"
+d="M25 250q0 133 52 198t145 65q100 0 149 -66t49 -197q0 -134 -52 -198.5t-146 -64.5q-197 0 -197 263zM148 250q0 -75 17 -116t57 -41q38 0 56.5 35.5t18.5 121.5q0 77 -17 117t-58 40q-35 0 -54.5 -35.5t-19.5 -121.5zM66 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50
+q0 -30 -17 -47.5t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM252 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="444"
+d="M38 393h368v-106h-368v106zM151 158q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56zM151 523q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="448"
+d="M62 78q-34 64 -34 172q0 134 52 199t146 65q49 0 87 -18l18 30l79 -49l-27 -46q40 -65 40 -181q0 -134 -51.5 -199t-145.5 -65q-28 0 -51 5.5t-43 15.5l-19 -31l-81 51zM179 114q18 -22 47 -22q38 0 57 35t19 123q0 19 -1 35.5t-3 31.5zM269 390q-17 18 -43 18
+q-37 0 -57 -36t-20 -122q0 -33 3 -60z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119zM265 566h-66l-104 124v30h121z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119zM212 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119zM184 732h85l91 -182h-93l-32 66l-13 49l-13 -49l-37 -66h-89z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119zM63 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5
+t-45 -17.5q-29 0 -46.5 17.5t-17.5 47.5zM249 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="400"
+d="M203 219l13 -78h5l9 79l58 280h122l-125 -451q-17 -59 -32 -106t-32 -80t-38.5 -50.5t-51.5 -17.5q-21 0 -40.5 3.5t-33.5 11.5l20 102q13 -5 26.5 -4.5t25 10t20.5 29.5t15 53l-174 500h143zM205 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="446"
+d="M43 700h119v-237h3q17 23 41.5 37t62.5 14q76 0 114 -59.5t38 -191.5q0 -64 -12 -115.5t-35.5 -87.5t-58.5 -55t-81 -19q-24 0 -41 4t-31 12v-202h-119v900zM230 408q-26 0 -42.5 -15t-25.5 -42v-240q10 -9 22.5 -14t33.5 -5q40 0 60 39.5t20 134.5q0 70 -15.5 106
+t-52.5 36z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="400"
+d="M203 219l13 -78h5l9 79l58 280h122l-125 -451q-17 -59 -32 -106t-32 -80t-38.5 -50.5t-51.5 -17.5q-21 0 -40.5 3.5t-33.5 11.5l20 102q13 -5 26.5 -4.5t25 10t20.5 29.5t15 53l-174 500h143zM48 651q0 32 17.5 50t46.5 18q28 0 45 -18t17 -50q0 -30 -17 -47.5t-45 -17.5
+q-29 0 -46.5 17.5t-17.5 47.5zM234 651q0 32 17 50t46 18t46 -18t17 -50q0 -30 -17 -47.5t-46 -17.5t-46 17.5t-17 47.5z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="424"
+d="M150 -106q0 29 18 46.5t44 17.5q31 0 50.5 -22t19.5 -67q0 -33 -10 -58t-24.5 -42t-30 -27.5t-27.5 -14.5l-33 46q13 8 25 23.5t14 37.5q-15 1 -30.5 15t-15.5 45zM417 0h-372v700h126v-584h246v-116z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="753"
+d="M368 573q-16 11 -39 18t-52 7q-57 0 -86.5 -60.5t-29.5 -187.5q0 -53 6.5 -98.5t21 -78.5t37.5 -52t57 -19q23 0 43 4t42 15v452zM368 0q-16 -6 -43.5 -10t-52.5 -4q-64 0 -110 26t-75.5 73.5t-43.5 114.5t-14 150q0 177 61 270.5t182 93.5q30 0 54.5 -4.5t41.5 -9.5h349
+v-116h-223v-172h202v-116h-202v-180h227v-116h-353z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="697"
+d="M148 250q0 -72 17.5 -115t56.5 -43q38 0 56 37t18 121q0 75 -16.5 116.5t-57.5 41.5q-35 0 -54.5 -36t-19.5 -122zM355 55q-20 -32 -52.5 -50.5t-82.5 -18.5q-99 0 -147 68t-48 196q0 130 51.5 197t145.5 67q56 0 88 -21t50 -47q19 26 50.5 47t85.5 21q32 0 62.5 -9.5
+t54 -32t37.5 -60.5t14 -94q0 -23 -2.5 -47.5t-7.5 -53.5h-242q2 -64 25.5 -97.5t74.5 -33.5q34 0 60.5 12t40.5 24l39 -83q-25 -23 -69.5 -38t-92.5 -15q-45 0 -80 18.5t-55 50.5zM494 414q-40 0 -58 -33.5t-21 -84.5h138q4 54 -10.5 86t-48.5 32z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="439"
+d="M275 737h-87l-104 94v39h91l42 -45l17 -30l17 29l45 46h88v-40zM290 180q0 32 -19 54.5t-47.5 42.5t-62 41t-62 49t-47.5 66t-19 93q0 51 15.5 86.5t42.5 58t64 33t79 10.5q51 0 95 -10t73 -27l-39 -111q-17 12 -50.5 22t-72.5 10t-60 -16t-21 -47q0 -28 19 -49.5
+t47.5 -41.5t62 -41.5t62 -50t47.5 -67t19 -91.5t-15.5 -92t-44 -64.5t-68.5 -38.5t-89 -13q-62 0 -108.5 12t-71.5 27l41 113q20 -12 55 -24t75 -12q100 0 100 78z" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="350"
+d="M218 550h-88l-95 182h98l32 -66l13 -49l13 49l37 66h91zM211 133q0 21 -13.5 35.5t-34.5 27t-44.5 25.5t-44.5 32t-34.5 46t-13.5 68q0 70 38 108t112 38q44 0 83 -9.5t62 -23.5l-28 -92q-19 8 -46 15.5t-53 7.5q-49 0 -49 -41q0 -19 13.5 -31.5t34.5 -24.5t44.5 -25
+t44.5 -32.5t34.5 -47.5t13.5 -69q0 -69 -42 -111t-125 -42q-41 0 -80.5 10t-63.5 26l33 96q21 -12 48.5 -21t57.5 -9q23 0 38 10.5t15 33.5z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="446"
+d="M158 500v-299q0 -59 11 -82t40 -23q28 0 47 20.5t27 49.5v334h119v-348q0 -41 3 -80.5t11 -71.5h-90l-21 68h-3q-19 -35 -51.5 -58t-80.5 -23q-31 0 -55 8.5t-41 29.5t-26 57.5t-9 92.5v325h119zM86 658h272v-91h-272v91z" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="515"
+d="M142 875q17 -26 49 -40.5t70 -14.5q40 0 68.5 15t45.5 40l44 -31q-11 -30 -28 -51.5t-38.5 -35.5t-45 -20.5t-47.5 -6.5q-22 0 -45.5 6t-46 19t-41.5 34t-31 51zM354 700h119v-454q0 -136 -55.5 -197t-153.5 -61q-115 0 -168.5 59.5t-53.5 181.5v471h126v-449
+q0 -82 22 -114.5t73 -32.5q49 0 70 34.5t21 112.5v449z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="495"
+d="M93 798q0 26 15.5 42t53.5 16q35 0 50.5 -16t15.5 -42t-15.5 -41.5t-50.5 -15.5q-38 0 -53.5 15.5t-15.5 41.5zM275 798q0 26 15.5 42t51.5 16q37 0 52.5 -16t15.5 -42t-15.5 -41.5t-52.5 -15.5q-36 0 -51.5 15.5t-15.5 41.5zM184 260l-188 440h150l97 -265l10 -76h5
+l11 78l95 263h135l-189 -439v-261h-126v260z" />
+ <glyph glyph-name="Zcaron" unicode="Ž" horiz-adv-x="445"
+d="M261 737h-87l-104 94v39h91l42 -45l17 -30l17 29l45 46h88v-40zM21 116l234 427l42 41h-276v116h403v-116l-235 -430l-41 -38h276v-116h-403v116z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="381"
+d="M233 550h-88l-95 182h98l32 -66l13 -49l13 49l37 66h91zM24 106l162 245l44 43h-206v106h331v-106l-160 -249l-43 -39h203v-106h-331v106z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M288 394l-58 -428q-5 -37 -14.5 -68.5t-26 -55t-42.5 -37t-64 -13.5q-14 0 -32.5 1.5t-37.5 4.5t-36 7.5t-27 9.5l22 100q35 -17 76 -17q56 0 69 110l48 386h-62v106h79l9 67q5 37 13.5 64.5t24.5 46t40.5 27.5t61.5 9q13 0 31 -2t37 -5.5t36.5 -9t29.5 -11.5l-29 -94
+q-36 16 -76 16q-25 0 -36 -17.5t-16 -57.5l-4 -33h99v-106h-115z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="397"
+d="M161 732h85l91 -182h-93l-32 66l-13 49l-13 -49l-37 -66h-89z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="415"
+d="M60 656q29 37 54 50.5t46 13.5q18 0 33.5 -6.5t30.5 -15t30 -15t30 -6.5q11 0 23 5t26 18l22 -61q-27 -32 -50.5 -44t-43.5 -12q-18 0 -33.5 6t-30.5 13.5t-30 14t-30 6.5q-13 0 -26 -5.5t-27 -19.5z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="245"
+d="M8 792q0 64 53 64t53 -64q0 -62 -53 -62t-53 62zM132 792q0 64 52 64q53 0 53 -64q0 -62 -53 -62q-52 0 -52 62zM59 700h126v-700h-126v700z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="474"
+d="M466 584h-166v-584h-126v584h-166v116h458v-116z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="543"
+d="M87 343h368v-109h-368v109z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="676"
+d="M88 343h499v-109h-499v109z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="188"
+d="M159 618q0 -29 -17.5 -46.5t-43.5 -17.5q-32 0 -50.5 23.5t-18.5 61.5q0 39 11 67t27 47t32.5 30t28.5 16l32 -51q-17 -9 -30.5 -27t-15.5 -39q17 -2 31 -18.5t14 -45.5z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="188"
+d="M29 644q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="188"
+d="M29 62q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="342"
+d="M312 618q0 -29 -17.5 -46.5t-43.5 -17.5q-32 0 -50.5 23.5t-18.5 61.5q0 39 11 67t27 47t32.5 30t28.5 16l32 -51q-17 -9 -30.5 -27t-15.5 -39q17 -2 31 -18.5t14 -45.5zM159 618q0 -29 -17.5 -46.5t-43.5 -17.5q-32 0 -50.5 23.5t-18.5 61.5q0 39 11 67t27 47t32.5 30
+t28.5 16l32 -51q-17 -9 -30.5 -27t-15.5 -39q17 -2 31 -18.5t14 -45.5z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="342"
+d="M182 644q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5zM29 644q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5
+t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="341"
+d="M182 62q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5zM29 62q0 29 17.5 47t43.5 18q32 0 50.5 -22.5t18.5 -62.5q0 -39 -11 -66t-26.5 -45.5t-32.5 -29.5
+t-29 -16l-30 50q17 8 30 24t15 39q-17 1 -31.5 16.5t-14.5 47.5z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="424"
+d="M33 509h92l44 -15l-14 53v153h114v-153l-14 -53l44 15h92v-104h-93l-43 15l14 -49v-371l-14 -200h-86l-14 201v370l14 49l-44 -15h-92v104z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="424"
+d="M155 375l14 45l-44 -15h-92v104h92l44 -15l-14 50v156h114v-156l-14 -50l44 15h92v-104h-93l-43 15l14 -45v-92l-14 -45l43 15h93v-104h-92l-44 15l14 -50v-114l-15 -200h-84l-15 201v113l14 50l-44 -15h-92v104h92l44 -15l-14 45v92z" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="372"
+d="M57 311q0 34 9.5 62.5t26.5 48.5t40.5 31t51.5 11q57 0 93.5 -39.5t36.5 -113.5q0 -73 -36.5 -112.5t-93.5 -39.5q-56 0 -92 39.5t-36 112.5z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="721"
+d="M538 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56zM292 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56t-53.5 -20q-33 0 -52 20t-19 56zM45 65q0 37 19.5 56t51.5 19q35 0 54 -19t19 -56q0 -36 -19.5 -56
+t-53.5 -20q-33 0 -52 20t-19 56z" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="1054"
+d="M575 714l70 -58l-494 -670l-71 59zM34 542q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5t-47.5 28.5t-31 52.5t-11 80.5zM140 542q0 -48 10.5 -67.5t33.5 -19.5
+q12 0 20.5 3.5t14 13.5t8 27t2.5 43q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69zM380 171q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5t-47.5 28.5t-31 52.5t-11 80.5z
+M486 171q0 -48 10.5 -67.5t33.5 -19.5q12 0 20.5 3.5t14 13.5t8 27t2.5 43q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69zM710 171q0 46 11 78t31 52.5t47.5 30t60.5 9.5t60.5 -8.5t47.5 -28.5t31.5 -52.5t11.5 -80.5t-11.5 -80.5t-31.5 -52.5t-47.5 -28.5t-60.5 -8.5t-60.5 8.5
+t-47.5 28.5t-31 52.5t-11 80.5zM816 171q0 -48 10.5 -67.5t33.5 -19.5q12 0 20.5 3.5t14 13.5t8 27t2.5 43q0 51 -11 69t-34 18t-33.5 -18t-10.5 -69z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="256"
+d="M22 259l131 230l73 -47l-73 -141l-39 -41l39 -36l80 -135l-75 -51z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="256"
+d="M98 38l-75 51l80 135l39 36l-39 41l-73 141l73 47l131 -230z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M465 24q-26 -19 -66.5 -28t-77.5 -9q-55 0 -100.5 21t-78.5 65.5t-52 112.5q-6 23 -10 48h-77l29 91h40v25v33h-69l29 91h50q4 23 11 44q21 70 56.5 113.5t81 63t95.5 19.5q42 0 74.5 -7t55.5 -16l-32 -100q-35 16 -95 16q-66 0 -105 -61q-18 -28 -28 -72h208l-23 -91
+h-196v-33v-25h179l-23 -91h-146q9 -44 27 -75q37 -65 116 -65q63 0 103 26z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="801"
+d="M330 594h-93v-254h-119v254h-93v106h305v-106zM670 484l15 103h-5l-29 -85l-51 -117h-75l-52 114l-32 88h-5l21 -101v-146h-100v360h120l72 -143l18 -63h1l19 65l66 141h119v-360h-102v144z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="450"
+d="M187 704q3 -38 16 -55t33 -17q21 0 33.5 16.5t17.5 54.5l90 -22q-11 -68 -50.5 -99.5t-93.5 -31.5q-26 0 -51 7t-45 22.5t-33.5 40.5t-17.5 62zM288 218l9 81h-3l-37 -85l-134 -214h-80v500h119v-227l-9 -78h3l36 83l135 222h80v-531q0 -84 -31 -129.5t-100 -45.5
+q-13 0 -27.5 1.5t-30.5 5.5v103q43 -4 56.5 20.5t13.5 85.5v208z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="553"
+d="M199 799q0 25 19.5 43t57.5 18q39 0 59 -18t20 -43q0 -26 -20 -44t-59 -18q-38 0 -57.5 18t-19.5 44zM29 350q0 178 61 271t186 93q65 0 112 -25.5t77 -73t44.5 -115t14.5 -150.5q0 -178 -62.5 -271t-185.5 -93q-66 0 -112.5 25.5t-76.5 73t-44 115t-14 150.5zM161 350
+q0 -53 6 -98.5t20 -78.5t35.5 -52t53.5 -19q58 0 87 59t29 189q0 51 -6 96.5t-19.5 79t-35.5 53t-55 19.5q-115 0 -115 -248z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="243"
+d="M164 162q0 -35 7 -50t23 -15q9 0 18.5 2t21.5 7l11 -96q-12 -8 -41 -15t-59 -7q-50 0 -75 25t-25 85v602h119v-538zM230 701h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="474"
+d="M264 870h143v-30l-132 -88h-93zM466 584h-166v-584h-126v584h-166v116h458v-116z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="291"
+d="M4 500h55v94l119 37v-131h97v-106h-97v-218q0 -43 8.5 -61t30.5 -18q15 0 27 3t26 9l15 -95q-22 -11 -51 -18.5t-61 -7.5q-57 0 -85.5 33t-28.5 111v262h-55v106zM257 701h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="503"
+d="M277 870h143v-30l-132 -88h-93zM243 289l14 -120h4l16 121l102 410h133l-212 -705h-96l-214 705h149z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="399"
+d="M195 239l12 -79h4l11 80l62 260h128l-168 -505h-80l-177 505h139zM196 720h119v-30l-94 -124h-67z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="435"
+d="M98 313v102h24q15 0 37 1t35 6q27 8 46 30t19 57q0 49 -23.5 68t-65.5 19q-34 0 -63.5 -10.5t-46.5 -21.5l-32 109q10 6 28 13t40.5 13t48 9.5t51.5 3.5q38 0 73.5 -7.5t62.5 -27t43 -53.5t16 -87q0 -51 -21.5 -95t-69.5 -65v-6q52 -14 80.5 -56t28.5 -114
+q0 -57 -18.5 -98t-50 -67t-72.5 -38t-85 -12q-54 0 -99 9.5t-72 25.5l33 112q19 -11 52.5 -21t78.5 -10q41 0 71 26.5t30 83.5q0 49 -27.5 73.5t-96.5 26.5q-11 0 -15 0.5t-17 0.5h-23z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSansNarrow-Bold.ttf has changed
Binary file web/res/fonts/PTSansNarrow-Bold.woff has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSansNarrow.css Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,21 @@
+@font-face {
+ font-family: "PT Sans Narrow";
+ font-weight: normal;
+ font-style: normal;
+ src:
+ url("PTSansNarrow.eot?") format("eot"),
+ url("PTSansNarrow.woff") format("woff"),
+ url("PTSansNarrow.ttf") format("truetype"),
+ url("PTSansNarrow.svg#PTSans-Narrow") format("svg");
+}
+
+@font-face {
+ font-family: "PT Sans Narrow";
+ font-weight: bold;
+ font-style: normal;
+ src:
+ url("PTSansNarrow-Bold.eot?") format("eot"),
+ url("PTSansNarrow-Bold.woff") format("woff"),
+ url("PTSansNarrow-Bold.ttf") format("truetype"),
+ url("PTSansNarrow-Bold.svg#PTSans-NarrowBold") format("svg");
+}
Binary file web/res/fonts/PTSansNarrow.eot has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/fonts/PTSansNarrow.svg Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,607 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20110222 at Wed Jul 13 10:57:23 2011
+ By www-data
+Copyright (c) 2009 ParaType Ltd. All rights reserved.
+</metadata>
+<defs>
+<font id="PTSans-Narrow" horiz-adv-x="450" >
+ <font-face
+ font-family="PT Sans Narrow"
+ font-weight="400"
+ font-stretch="condensed"
+ units-per-em="1000"
+ panose-1="2 11 5 6 2 2 3 2 2 4"
+ ascent="770"
+ descent="-230"
+ x-height="500"
+ cap-height="700"
+ bbox="-32 -245 905 871"
+ underline-thickness="50"
+ underline-position="-50"
+ unicode-range="U+0020-F54A"
+ />
+ <missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="212"
+ />
+ <glyph glyph-name="exclam" unicode="!" horiz-adv-x="247"
+d="M101 700h75v-347l-15 -176h-45l-15 176v347zM88 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="quotedbl" unicode=""" horiz-adv-x="286"
+d="M177 700h69l-26 -193h-43v193zM72 700h69l-26 -193h-43v193z" />
+ <glyph glyph-name="numbersign" unicode="#"
+d="M230 225h-82l-32 -167h-61l32 167h-63l13 60h61l27 140h-61l13 60h60l30 157h61l-30 -157h82l31 157h61l-30 -157h61l-14 -60h-59l-27 -140h60l-14 -60h-57l-32 -167h-62zM159 285h83l27 140h-83z" />
+ <glyph glyph-name="dollar" unicode="$"
+d="M196 -12q-44 2 -77.5 9t-55.5 21l23 68q16 -11 44 -21t66 -12v284q-25 16 -48.5 34t-42 42t-30 55.5t-11.5 74.5q0 66 33.5 110.5t98.5 55.5v91h61v-89q39 -2 65 -7.5t49 -16.5l-23 -65q-17 9 -38 15.5t-53 8.5v-258q25 -17 50 -36t44.5 -43.5t31.5 -56t12 -73.5
+q0 -72 -35.5 -122t-102.5 -64v-93h-61v88zM241 57q36 8 57.5 37.5t21.5 79.5q0 48 -23 78t-56 54v-249zM212 644q-41 -8 -57 -37t-16 -61q0 -44 20.5 -73t52.5 -53v224z" />
+ <glyph glyph-name="percent" unicode="%" horiz-adv-x="637"
+d="M518 713l47 -30l-426 -695l-47 30zM55 542q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81zM120 542q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35
+t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5zM349 171q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81z
+M414 171q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5z" />
+ <glyph glyph-name="ampersand" unicode="&" horiz-adv-x="656"
+d="M91 188q0 40 12 75.5t31.5 66t44.5 55.5t51 45q-20 36 -35 74t-15 80q0 24 6.5 47t21.5 41t38 29t56 11q34 0 57.5 -10t37.5 -26t20.5 -36.5t6.5 -42.5q0 -43 -27 -88t-82 -88q13 -28 29.5 -58.5t35 -61t38 -60t38.5 -54.5q18 25 34 67t26 81l58 -23q-5 -17 -14 -41
+t-19.5 -48.5t-22 -47t-21.5 -37.5q33 -39 55.5 -60.5t45.5 -37.5l-45 -52q-45 26 -98 93q-14 -18 -31.5 -34.5t-39 -29.5t-48 -21t-57.5 -8q-39 0 -73.5 12.5t-60 37.5t-40 62.5t-14.5 87.5zM413 130q-23 29 -45 62t-42 66t-36.5 64t-27.5 57q-21 -20 -39 -40t-31.5 -42.5
+t-21 -49t-7.5 -58.5q0 -33 10 -58.5t27.5 -42.5t40 -26t47.5 -9q19 0 38 7t35.5 18t29.5 24.5t22 27.5zM252 584q0 -30 9.5 -59t24.5 -59q41 35 56.5 64t15.5 52q0 28 -11.5 48.5t-41.5 20.5q-28 0 -40.5 -19t-12.5 -48z" />
+ <glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="181"
+d="M72 700h69l-26 -193h-43v193z" />
+ <glyph glyph-name="parenleft" unicode="(" horiz-adv-x="233"
+d="M183 -220q-38 48 -63.5 105.5t-41.5 118t-23 122t-7 117.5q0 55 7 116t23 122.5t42.5 120.5t64.5 110l45 -27q-32 -51 -53 -107t-33.5 -113.5t-18 -114t-5.5 -107.5q0 -48 6 -105.5t19.5 -115.5t34.5 -113t50 -99z" />
+ <glyph glyph-name="parenright" unicode=")" horiz-adv-x="233"
+d="M48 -190q29 44 50 99t34.5 113t19.5 115.5t6 105.5q0 51 -5.5 107.5t-18 114t-34 113.5t-52.5 107l45 27q38 -51 64.5 -110t42.5 -120.5t23 -122.5t7 -116q0 -56 -7 -117.5t-23 -122t-42 -118t-63 -105.5z" />
+ <glyph glyph-name="asterisk" unicode="*" horiz-adv-x="291"
+d="M108 703l20 -38l15 -52l16 52l21 37l44 -24l-23 -40l-38 -43l55 11h42v-51h-39l-54 11l39 -44l20 -35l-43 -25l-21 38l-19 55l-15 -53l-21 -37l-44 25l23 38l35 38l-47 -11h-44v51h44l50 -11l-38 41l-22 41z" />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="415"
+d="M35 373h138v156h68v-156h138v-67h-138v-156h-68v156h-138v67z" />
+ <glyph glyph-name="comma" unicode="," horiz-adv-x="186"
+d="M36 43q0 25 14.5 40t37.5 15q26 0 42.5 -21t16.5 -66q0 -33 -8.5 -59.5t-22 -46.5t-29.5 -33t-31 -19l-25 34q13 7 24.5 18.5t19 25.5t11.5 29.5t4 30.5q-20 -6 -37 8t-17 44z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="291"
+d="M47 320h197v-69h-197v69z" />
+ <glyph glyph-name="period" unicode="." horiz-adv-x="178"
+d="M39 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="slash" unicode="/" horiz-adv-x="295"
+d="M266 712l56 -22l-292 -830l-58 21z" />
+ <glyph glyph-name="zero" unicode="0"
+d="M38 350q0 96 12 165t36 112.5t59 64t80 20.5q48 0 83.5 -20.5t58.5 -64t34 -112.5t11 -165q0 -97 -12 -165.5t-36 -112t-58.5 -64t-79.5 -20.5q-49 0 -84.5 21t-58.5 65t-34 112.5t-11 163.5zM113 350q0 -143 27 -220t87 -77q58 0 84.5 70.5t26.5 226.5
+q0 142 -25.5 219.5t-87.5 77.5q-58 0 -85 -70t-27 -227z" />
+ <glyph glyph-name="one" unicode="1"
+d="M94 67h113v487l9 59l-34 -48l-84 -68l-38 45l182 170h37v-645h109v-67h-294v67z" />
+ <glyph glyph-name="two" unicode="2"
+d="M368 547q0 -55 -16.5 -115t-42 -118.5t-57 -112.5t-61.5 -96l-40 -44v-3l53 9h175v-67h-324v32q19 23 44 58t51.5 76.5t52 88t45.5 94.5t32.5 95t12.5 90q0 51 -23.5 81t-68.5 30q-29 0 -56.5 -10.5t-47.5 -26.5l-28 53q27 24 66 37.5t82 13.5q74 0 112.5 -45.5
+t38.5 -119.5z" />
+ <glyph glyph-name="three" unicode="3"
+d="M93 76q19 -11 43.5 -17t56.5 -6q27 0 49.5 11t39 31t25.5 47.5t9 60.5q0 74 -32.5 108t-90.5 34h-60v29l116 224l39 42l-55 -7h-157v67h290v-29l-128 -239l-30 -29v-2l29 6q31 0 59 -12.5t48 -37t32 -60.5t12 -84q0 -54 -15.5 -96t-42 -70.5t-62 -43.5t-75.5 -15
+q-35 0 -66 6t-54 17z" />
+ <glyph glyph-name="four" unicode="4"
+d="M431 215h-93v-215h-72v215h-246v34l265 462h53v-431h93v-65zM266 504l12 86h-3l-30 -77l-110 -191l-38 -49l55 7h114v224z" />
+ <glyph glyph-name="five" unicode="5"
+d="M357 700v-70h-190v-204l34 3q80 -1 126 -55t47 -155q-1 -56 -16.5 -99t-42.5 -72.5t-63 -44.5t-77 -15q-69 0 -111 19l18 64q18 -9 40 -12.5t51 -3.5q57 0 92.5 41.5t36.5 116.5q-1 77 -36.5 114t-98.5 37l-66 -5v341h256z" />
+ <glyph glyph-name="six" unicode="6"
+d="M405 211q-1 -50 -12.5 -91.5t-34 -70.5t-55 -45t-73.5 -16q-84 0 -131.5 61t-47.5 186q0 106 21.5 189t58.5 143t87 96.5t107 48.5l20 -58q-45 -12 -82 -40t-65 -68t-46.5 -90t-25.5 -107q13 27 43.5 47t75.5 20q72 0 115.5 -51t44.5 -154zM332 204q0 147 -106 147
+q-38 0 -65 -24t-38 -54q-2 -13 -2 -25.5t1 -23.5q-1 -33 5.5 -63.5t20 -54.5t34 -38.5t48.5 -14.5q45 0 73.5 40t28.5 111z" />
+ <glyph glyph-name="seven" unicode="7"
+d="M95 0l202 591l36 49l-48 -9h-229v69h341v-27l-230 -673h-72z" />
+ <glyph glyph-name="eight" unicode="8"
+d="M58 162q0 67 27.5 114t81.5 85q-20 15 -37.5 31.5t-30.5 37.5t-20.5 47t-7.5 60q0 81 42.5 128t116.5 47q69 0 109.5 -42.5t40.5 -116.5q0 -57 -22 -101t-69 -86q21 -15 40 -33t33.5 -40.5t22.5 -51t8 -65.5q0 -85 -45.5 -136.5t-126.5 -51.5q-39 0 -69 13t-51 36t-32 55
+t-11 70zM214 333q-46 -34 -66.5 -76t-20.5 -84q0 -51 25 -85.5t73 -34.5q39 0 67.5 28.5t28.5 90.5q0 31 -9 55t-24 42.5t-34 34t-40 29.5zM241 392q34 34 52 68.5t18 76.5q0 55 -24.5 82.5t-57.5 27.5q-21 0 -37.5 -8.5t-27.5 -23.5t-17 -34.5t-6 -41.5q0 -27 8 -48.5
+t22 -39t32 -32t38 -27.5z" />
+ <glyph glyph-name="nine" unicode="9"
+d="M46 488q0 104 44.5 164t132.5 60q84 0 130.5 -62t46.5 -190q0 -113 -21 -196.5t-58 -141t-87 -90.5t-108 -44l-19 59q96 25 149 100.5t67 189.5q-21 -29 -46.5 -41t-67.5 -12q-32 0 -61.5 12.5t-52 38t-36 64t-13.5 89.5zM119 496q0 -71 29 -109t77 -38q38 0 64.5 16.5
+t38.5 42.5q2 13 2 25v23q0 38 -6.5 72.5t-20 61t-34.5 42t-50 15.5q-47 0 -73.5 -41t-26.5 -110z" />
+ <glyph glyph-name="colon" unicode=":" horiz-adv-x="206"
+d="M76 448q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43zM76 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="semicolon" unicode=";" horiz-adv-x="216"
+d="M75 43q0 25 14.5 40t37.5 15q26 0 42.5 -21t16.5 -66q0 -33 -8.5 -59.5t-22 -46.5t-29.5 -33t-31 -19l-25 34q13 7 24.5 18.5t19 25.5t11.5 29.5t4 30.5q-20 -6 -37 8t-17 44zM85 448q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14
+t-13.5 43z" />
+ <glyph glyph-name="less" unicode="<" horiz-adv-x="415"
+d="M36 305v29l300 223l39 -54l-191 -145l-74 -38l73 -32l196 -144l-38 -54z" />
+ <glyph glyph-name="equal" unicode="=" horiz-adv-x="415"
+d="M35 291h344v-67h-344v67zM35 456h344v-67h-344v67z" />
+ <glyph glyph-name="greater" unicode=">" horiz-adv-x="415"
+d="M379 344v-29l-298 -223l-41 53l192 145l73 38l-72 32l-197 144l40 53z" />
+ <glyph glyph-name="question" unicode="?" horiz-adv-x="358"
+d="M123 177q-3 44 5.5 78t23.5 62.5t32.5 53.5t33.5 51.5t26.5 56t10.5 66.5q0 46 -20 74t-68 28q-29 0 -57 -10.5t-50 -26.5l-28 56q30 20 65.5 33t86.5 13q72 0 109 -42t37 -115q0 -43 -11 -77t-27 -62.5t-35 -54.5t-35.5 -53.5t-27.5 -59t-11 -71.5h-60zM108 45
+q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="857"
+d="M565 491h33l-41 -291q-9 -67 -5.5 -99.5t29.5 -32.5t52 17t46.5 50t33 81t12.5 110q0 71 -20.5 124.5t-57 89.5t-88.5 54.5t-115 18.5q-65 0 -122 -26.5t-99 -75.5t-66.5 -117t-24.5 -152q0 -87 22.5 -151t63.5 -107t97 -64t124 -21q24 0 55.5 6t54.5 18l18 -56
+q-34 -16 -67.5 -22.5t-70.5 -6.5q-73 0 -138.5 23t-115 71.5t-78.5 124t-29 179.5q0 103 30.5 184.5t82 137.5t120.5 86t146 30q74 0 136.5 -22t108.5 -66t71.5 -109t25.5 -151q0 -69 -18 -128t-48.5 -102t-71 -67.5t-86.5 -24.5q-19 0 -34.5 5t-25 17t-13.5 32t0 49h-4
+q-11 -20 -26 -38.5t-32.5 -33t-38 -23t-42.5 -8.5q-42 0 -71.5 37.5t-29.5 108.5q0 74 16.5 138t45 111t66.5 73.5t81 26.5q29 0 47.5 -10t35.5 -27zM519 400q-13 18 -26.5 26t-33.5 8q-30 0 -56 -22.5t-45 -60t-30 -85.5t-11 -99q0 -45 13.5 -71.5t45.5 -26.5q15 0 31 11
+t31.5 28.5t29.5 39.5t24 44z" />
+ <glyph glyph-name="A" unicode="A" horiz-adv-x="473"
+d="M333 196h-198l-56 -196h-74l211 711h41l211 -711h-78zM155 263h160l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="B" unicode="B" horiz-adv-x="471"
+d="M411 541q0 -26 -6 -52t-19 -49t-32.5 -41t-47.5 -27v-4q24 -5 46 -16.5t39 -32t27 -50t10 -70.5q0 -54 -17 -93.5t-46.5 -64.5t-68 -37t-81.5 -12h-32.5t-39.5 1.5t-41.5 4t-37.5 7.5v689q30 6 70.5 10t87.5 4q34 0 68 -6.5t61 -24.5t43.5 -50.5t16.5 -85.5zM221 61
+q27 0 50 8.5t40.5 25.5t27.5 41.5t10 57.5q0 41 -12.5 66.5t-32.5 39.5t-45.5 19t-52.5 5h-67v-256q6 -2 15.5 -3t21 -2t23.5 -1.5t22 -0.5zM180 389q14 0 32 1t30 3q37 15 63.5 48.5t26.5 82.5q0 33 -9 55.5t-24.5 35.5t-36.5 18.5t-44 5.5q-26 0 -47 -1.5t-32 -3.5v-245
+h41z" />
+ <glyph glyph-name="C" unicode="C" horiz-adv-x="458"
+d="M430 27q-25 -21 -63 -30t-80 -9q-53 0 -98 20t-77.5 63.5t-50.5 112.5t-18 166q0 100 20.5 169t54.5 112t78.5 62t91.5 19q48 0 79.5 -7t54.5 -17l-18 -68q-20 11 -47 17t-62 6t-66 -15.5t-55 -50t-38 -90.5t-14 -137q0 -146 50 -219.5t133 -73.5q34 0 61 9.5t46 22.5z
+" />
+ <glyph glyph-name="D" unicode="D" horiz-adv-x="525"
+d="M64 700q16 3 35.5 4.5t39.5 2t39.5 1t36.5 0.5q73 0 124 -25t83 -71.5t46 -111.5t14 -145q0 -72 -13.5 -138t-45.5 -116t-84.5 -80t-131.5 -30q-13 0 -33 0.5t-41.5 2t-40 2.5t-28.5 3v701zM219 639h-21.5t-22.5 -1t-20.5 -2t-15.5 -2v-570q4 -1 14.5 -1.5t22 -1t22 -1
+t15.5 -0.5q55 0 92 24t58.5 64.5t30.5 94t9 113.5q0 53 -8 104t-28.5 90.5t-56 64t-91.5 24.5z" />
+ <glyph glyph-name="E" unicode="E" horiz-adv-x="429"
+d="M64 700h311v-69h-236v-237h217v-69h-217v-256h241v-69h-316v700z" />
+ <glyph glyph-name="F" unicode="F" horiz-adv-x="413"
+d="M64 700h311v-69h-236v-247h220v-69h-220v-315h-75v700z" />
+ <glyph glyph-name="G" unicode="G" horiz-adv-x="492"
+d="M257 349h193v-308q-28 -26 -72 -39.5t-89 -13.5q-56 0 -101.5 21t-77.5 65.5t-49.5 112.5t-17.5 163q0 98 21 166.5t56.5 112t81 63.5t93.5 20t80.5 -6.5t55.5 -17.5l-18 -68q-20 11 -47.5 17t-63.5 6q-35 0 -67 -15t-57.5 -49.5t-40.5 -90.5t-15 -138
+q0 -150 47.5 -221.5t130.5 -71.5q52 0 86 25v204l-129 19v44z" />
+ <glyph glyph-name="H" unicode="H" horiz-adv-x="536"
+d="M397 323h-258v-323h-75v700h75v-308h258v308h75v-700h-75v323z" />
+ <glyph glyph-name="I" unicode="I" horiz-adv-x="233"
+d="M79 700h75v-700h-75v700z" />
+ <glyph glyph-name="J" unicode="J" horiz-adv-x="241"
+d="M93 700h75v-543q0 -82 -26.5 -124.5t-92.5 -42.5q-16 0 -38.5 4t-36.5 12l16 65q10 -6 22.5 -9t25.5 -3q18 0 29 8t17 22.5t7.5 35t1.5 46.5v529z" />
+ <glyph glyph-name="K" unicode="K" horiz-adv-x="493"
+d="M175 324h-36v-324h-75v700h75v-326l35 14l182 312h86l-183 -302l-35 -32l41 -40l203 -326h-95z" />
+ <glyph glyph-name="L" unicode="L" horiz-adv-x="415"
+d="M401 0h-337v700h75v-631h262v-69z" />
+ <glyph glyph-name="M" unicode="M" horiz-adv-x="637"
+d="M498 460l9 106h-4l-32 -99l-141 -304h-25l-148 304l-31 99h-4l14 -106v-460h-72v700h63l169 -344l25 -82h2l24 83l160 343h66v-700h-75v460z" />
+ <glyph glyph-name="N" unicode="N" horiz-adv-x="538"
+d="M171 444l-43 110h-3l11 -110v-444h-72v711h45l259 -454l41 -105h4l-11 105v443h72v-711h-46z" />
+ <glyph glyph-name="O" unicode="O" horiz-adv-x="549"
+d="M43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5
+t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="P" unicode="P" horiz-adv-x="451"
+d="M64 693q32 9 68 12t71 3q40 0 79 -9t70.5 -33t51 -66t19.5 -107q0 -63 -18.5 -107t-49 -71.5t-70 -40t-81.5 -12.5h-13t-19 0.5t-19.5 1.5t-13.5 2v-266h-75v693zM207 639q-20 0 -38.5 -1.5t-29.5 -4.5v-298q4 -2 12.5 -2.5t17.5 -1t17.5 -0.5h12.5q28 0 54 7t46 25.5
+t32.5 50t12.5 79.5q0 42 -11.5 70t-30 45t-43.5 24t-52 7z" />
+ <glyph glyph-name="Q" unicode="Q" horiz-adv-x="549"
+d="M566 -166q-20 -7 -38.5 -9.5t-37.5 -2.5q-40 0 -78.5 10.5t-74 22.5t-68.5 22.5t-63 10.5q-18 0 -36 -6v68q22 6 44 6q33 0 66.5 -10t67.5 -22t70.5 -22t75.5 -10q36 0 72 10v-68zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150
+q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="R" unicode="R" horiz-adv-x="480"
+d="M64 693q33 8 72.5 11.5t72.5 3.5q39 0 74 -9.5t61 -32t41.5 -59t15.5 -91.5q0 -83 -34.5 -133t-91.5 -67l38 -37l138 -279h-87l-150 305l-75 15v-320h-75v693zM139 370h60q57 0 90 35t33 107q0 55 -27.5 91t-81.5 36q-20 0 -41.5 -1.5t-32.5 -4.5v-263z" />
+ <glyph glyph-name="S" unicode="S" horiz-adv-x="428"
+d="M59 93q19 -13 53.5 -24.5t78.5 -11.5q56 0 91 27.5t35 86.5q0 39 -20 68t-50 53.5t-64.5 48t-64.5 52t-50 65.5t-20 89q0 84 50.5 124.5t131.5 40.5q50 0 89 -9t63 -23l-24 -66q-18 11 -51.5 20t-77.5 9q-54 0 -80 -26.5t-26 -66.5q0 -35 20 -62t50 -51t64.5 -48.5
+t64.5 -54.5t50 -68t20 -90q0 -88 -52 -138t-147 -50q-60 0 -98.5 11t-61.5 25z" />
+ <glyph glyph-name="T" unicode="T" horiz-adv-x="447"
+d="M433 631h-172v-631h-75v631h-172v69h419v-69z" />
+ <glyph glyph-name="U" unicode="U" horiz-adv-x="521"
+d="M385 700h72v-469q0 -127 -49.5 -183.5t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46t25.5 148v446z" />
+ <glyph glyph-name="V" unicode="V" horiz-adv-x="463"
+d="M218 221l18 -107h2l20 109l130 477h77l-212 -711h-40l-215 711h83z" />
+ <glyph glyph-name="W" unicode="W" horiz-adv-x="672"
+d="M182 237l12 -117h2l12 119l112 461h43l112 -462l12 -118h1l14 119l89 461h75l-156 -711h-46l-111 461l-14 107h-3l-14 -108l-111 -460h-47l-159 711h81z" />
+ <glyph glyph-name="X" unicode="X" horiz-adv-x="500"
+d="M203 356l-168 344h90l109 -237l20 -59l20 59l115 237h83l-174 -337l182 -363h-88l-121 251l-23 62l-21 -62l-124 -251h-84z" />
+ <glyph glyph-name="Y" unicode="Y" horiz-adv-x="455"
+d="M191 278l-186 422h88l126 -305l13 -61h2l13 63l122 303h81l-184 -421v-279h-75v278z" />
+ <glyph glyph-name="Z" unicode="Z" horiz-adv-x="439"
+d="M29 69l278 522l33 40h-311v69h381v-69l-279 -525l-32 -37h311v-69h-381v69z" />
+ <glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="248"
+d="M64 700h156v-65h-84v-800h84v-65h-156v930z" />
+ <glyph glyph-name="backslash" unicode="\" horiz-adv-x="316"
+d="M330 -117l-60 -23l-298 829l61 23z" />
+ <glyph glyph-name="bracketright" unicode="]" horiz-adv-x="248"
+d="M184 -230h-155v65h83v800h-83v65h155v-930z" />
+ <glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="412"
+d="M191 711h30l139 -276h-75l-62 135l-18 69l-24 -70l-72 -134h-69z" />
+ <glyph glyph-name="underscore" unicode="_" horiz-adv-x="334"
+d="M0 -140h334v-65h-334v65z" />
+ <glyph glyph-name="grave" unicode="`" horiz-adv-x="255"
+d="M195 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="a" unicode="a" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106z" />
+ <glyph glyph-name="b" unicode="b" horiz-adv-x="434"
+d="M59 700h72v-238h3q41 50 109 50q77 0 115.5 -61t38.5 -193q0 -135 -51.5 -201t-145.5 -66q-46 0 -84 10.5t-57 24.5v674zM131 73q14 -8 34.5 -12.5t43.5 -4.5q52 0 82.5 49.5t30.5 152.5q0 43 -5.5 77.5t-17 59.5t-30 38.5t-44.5 13.5q-36 0 -59.5 -21.5t-34.5 -58.5
+v-294z" />
+ <glyph glyph-name="c" unicode="c" horiz-adv-x="356"
+d="M335 25q-25 -19 -57 -28t-67 -9q-48 0 -81 18.5t-53.5 53t-30 83t-9.5 107.5q0 128 45.5 195t130.5 67q39 0 67 -7t48 -18l-20 -63q-40 23 -87 23q-54 0 -81.5 -47.5t-27.5 -149.5q0 -41 6 -77t20 -62.5t36 -42t55 -15.5q26 0 48.5 9t36.5 21z" />
+ <glyph glyph-name="d" unicode="d" horiz-adv-x="433"
+d="M374 172q0 -51 1 -92.5t7 -81.5h-49l-16 60h-4q-14 -30 -44 -50t-72 -20q-81 0 -120.5 63t-39.5 198q0 128 48.5 194t133.5 66q29 0 46 -3.5t37 -11.5v206h72v-528zM302 421q-14 12 -31.5 17.5t-46.5 5.5q-53 0 -82.5 -48t-29.5 -148q0 -44 5.5 -79.5t17 -61.5t30 -40
+t45.5 -14q72 0 92 85v283z" />
+ <glyph glyph-name="e" unicode="e" horiz-adv-x="413"
+d="M358 34q-24 -22 -61 -34t-78 -12q-47 0 -81.5 18.5t-57 53t-33 82.5t-10.5 108q0 128 47 195t133 67q28 0 55.5 -7t49.5 -28t35.5 -59t13.5 -99q0 -17 -1.5 -36.5t-3.5 -40.5h-254q0 -43 7 -78t22 -59.5t38.5 -38t58.5 -13.5q27 0 53.5 10t40.5 24zM302 302q2 75 -21 110
+t-63 35q-46 0 -73 -35t-32 -110h189z" />
+ <glyph glyph-name="f" unicode="f" horiz-adv-x="257"
+d="M16 500h61v28q0 94 27 136t92 42q26 0 47 -3t43 -13l-18 -62q-18 8 -33.5 10.5t-29.5 2.5q-20 0 -31 -8t-16.5 -25t-7 -43.5t-1.5 -64.5h104v-65h-104v-435h-72v435h-61v65z" />
+ <glyph glyph-name="g" unicode="g" horiz-adv-x="432"
+d="M374 -23q0 -97 -43 -143t-125 -46q-50 0 -82 8.5t-52 19.5l21 62q20 -9 44 -17t59 -8q61 0 83.5 34t22.5 114v37h-3q-16 -23 -41 -36t-64 -13q-81 0 -119 62.5t-38 196.5q0 129 49.5 195t146.5 66q47 0 81 -9t60 -21v-502zM302 428q-30 16 -77 16q-51 0 -82 -46.5
+t-31 -148.5q0 -42 5 -77.5t17 -62t30.5 -41t45.5 -14.5q38 0 60 20t32 60v294z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="440"
+d="M315 0v304q0 70 -16.5 106.5t-65.5 36.5q-35 0 -63.5 -25t-38.5 -63v-359h-72v700h72v-247h3q20 26 49.5 42.5t73.5 16.5q33 0 57.5 -9t40.5 -31t24 -58.5t8 -90.5v-323h-72z" />
+ <glyph glyph-name="i" unicode="i" horiz-adv-x="217"
+d="M71 500h72v-500h-72v500zM58 652q0 24 13.5 39t35.5 15t36.5 -14.5t14.5 -39.5q0 -24 -14.5 -37.5t-36.5 -13.5t-35.5 14t-13.5 37z" />
+ <glyph glyph-name="j" unicode="j" horiz-adv-x="215"
+d="M72 500h72v-527q0 -103 -33 -148.5t-107 -34.5v65q22 0 35.5 9t21 27.5t9.5 46t2 64.5v498zM58 652q0 24 13.5 39t35.5 15t36.5 -14.5t14.5 -39.5q0 -24 -14.5 -37.5t-36.5 -13.5t-35.5 14t-13.5 37z" />
+ <glyph glyph-name="k" unicode="k" horiz-adv-x="388"
+d="M168 225h-37v-225h-72v700h72v-426l33 14l117 212h83l-118 -202l-35 -32l41 -39l129 -227h-87z" />
+ <glyph glyph-name="l" unicode="l" horiz-adv-x="233"
+d="M136 119q0 -35 9.5 -50t26.5 -15q21 0 49 11l7 -58q-13 -8 -36.5 -13t-42.5 -5q-38 0 -61.5 23.5t-23.5 82.5v605h72v-581z" />
+ <glyph glyph-name="m" unicode="m" horiz-adv-x="651"
+d="M293 0v297q0 40 -2.5 68.5t-10.5 46.5t-22 26.5t-37 8.5q-34 0 -57.5 -26.5t-32.5 -60.5v-360h-72v500h51l13 -53h3q21 29 50 47t74 18q38 0 62.5 -16.5t38.5 -58.5q18 35 51.5 55t73.5 20q33 0 56.5 -8.5t38 -30t21.5 -57t7 -89.5v-327h-72v318q0 65 -12.5 97t-57.5 32
+q-38 0 -60.5 -23.5t-31.5 -63.5v-360h-72z" />
+ <glyph glyph-name="n" unicode="n" horiz-adv-x="439"
+d="M315 0v305q0 75 -17.5 108.5t-62.5 33.5q-40 0 -66 -24t-38 -59v-364h-72v500h52l13 -53h3q19 27 51.5 46t77.5 19q32 0 56.5 -9t41 -30.5t25 -57.5t8.5 -91v-324h-72z" />
+ <glyph glyph-name="o" unicode="o" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150z" />
+ <glyph glyph-name="p" unicode="p" horiz-adv-x="435"
+d="M59 500h51l11 -54h4q37 66 116 66t118.5 -59t39.5 -193q0 -63 -13 -113.5t-37 -86t-58.5 -54t-76.5 -18.5q-29 0 -46 3.5t-37 14.5v-206h-72v700zM131 79q14 -12 31.5 -19t46.5 -7q53 0 84 54t31 154q0 42 -5.5 76t-17.5 58.5t-30.5 38t-45.5 13.5q-73 0 -94 -89v-279z
+" />
+ <glyph glyph-name="q" unicode="q" horiz-adv-x="432"
+d="M374 -200h-72v241h-4q-16 -25 -40.5 -39t-63.5 -14q-79 0 -118 63.5t-39 196.5q0 129 51 195t148 66q42 0 80 -10t58 -21v-678zM302 427q-28 17 -79 17q-52 0 -81.5 -48t-29.5 -147q0 -42 5 -78t16.5 -62.5t30 -41t45.5 -14.5q38 0 60 22t33 64v288z" />
+ <glyph glyph-name="r" unicode="r" horiz-adv-x="274"
+d="M59 500h51l13 -53h3q14 29 36.5 45.5t54.5 16.5q23 0 52 -9l-14 -73q-26 9 -46 9q-32 0 -52 -18.5t-26 -49.5v-368h-72v500z" />
+ <glyph glyph-name="s" unicode="s" horiz-adv-x="338"
+d="M51 82q20 -12 47.5 -20.5t56.5 -8.5q33 0 56 16.5t23 53.5q0 31 -14 51t-35.5 36t-46.5 29.5t-46.5 32.5t-35.5 45t-14 66q0 64 34.5 96.5t97.5 32.5q41 0 71 -7.5t52 -20.5l-19 -60q-19 10 -44 16.5t-51 6.5q-36 0 -52.5 -15t-16.5 -47q0 -25 14 -42.5t35.5 -32
+t46.5 -29.5t46.5 -35.5t35.5 -49t14 -71.5q0 -28 -9 -53t-27.5 -43.5t-46 -29.5t-64.5 -11q-44 0 -76 8.5t-54 22.5z" />
+ <glyph glyph-name="t" unicode="t" horiz-adv-x="275"
+d="M9 500h61v99l72 23v-122h108v-65h-108v-298q0 -44 10.5 -63.5t34.5 -19.5q20 0 34.5 4.5t31.5 11.5l14 -57q-22 -11 -48.5 -17.5t-55.5 -6.5q-50 0 -71.5 32.5t-21.5 105.5v308h-61v65z" />
+ <glyph glyph-name="u" unicode="u" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72z" />
+ <glyph glyph-name="v" unicode="v" horiz-adv-x="388"
+d="M180 207l20 -99h2l18 101l88 291h76l-171 -511h-35l-174 511h82z" />
+ <glyph glyph-name="w" unicode="w" horiz-adv-x="590"
+d="M326 500l89 -292l18 -96h2l15 98l68 290h68l-133 -511h-41l-101 328l-14 84h-2l-14 -85l-98 -327h-41l-137 511h77l77 -291l12 -97h2l18 99l82 289h53z" />
+ <glyph glyph-name="x" unicode="x" horiz-adv-x="412"
+d="M161 256l-132 244h86l74 -143l20 -56l21 56l76 143h79l-133 -240l141 -260h-82l-84 157l-22 60l-23 -60l-84 -157h-79z" />
+ <glyph glyph-name="y" unicode="y" horiz-adv-x="376"
+d="M183 177l21 -97h5l15 97l76 323h73l-119 -449q-14 -54 -28 -101t-30.5 -81.5t-37 -54t-48.5 -19.5t-49 9l12 68q14 -5 28 -2t26.5 17t23 41.5t18.5 71.5l-162 500h82z" />
+ <glyph glyph-name="z" unicode="z" horiz-adv-x="360"
+d="M32 65l186 327l35 43h-221v65h292v-65l-187 -330l-34 -40h221v-65h-292v65z" />
+ <glyph glyph-name="braceleft" unicode="{" horiz-adv-x="282"
+d="M107 114q0 51 -16.5 70t-47.5 19v65q31 0 47.5 20t16.5 64v247q0 47 18.5 74.5t60.5 27.5h74v-65h-39q-23 0 -32.5 -12.5t-9.5 -44.5v-244q0 -44 -16.5 -67t-39.5 -28v-6q23 -4 39.5 -30.5t16.5 -68.5v-243q0 -31 9.5 -44t33.5 -13h38v-65h-74q-79 0 -79 101v243z" />
+ <glyph glyph-name="bar" unicode="|" horiz-adv-x="190"
+d="M65 700h61v-830h-61v830z" />
+ <glyph glyph-name="braceright" unicode="}" horiz-adv-x="282"
+d="M175 -129q0 -101 -79 -101h-74v65h38q24 0 33.5 13t9.5 44v243q0 42 16.5 68.5t39.5 30.5v6q-23 5 -39.5 28t-16.5 67v244q0 32 -9.5 44.5t-32.5 12.5h-39v65h74q42 0 60.5 -27.5t18.5 -74.5v-247q0 -44 16.5 -64t47.5 -20v-65q-31 0 -47.5 -19t-16.5 -70v-243z" />
+ <glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="415"
+d="M23 361q36 33 65 46t54 13q23 0 43 -8.5t38 -18t35.5 -18t35.5 -8.5q14 0 30 7t33 26l34 -60q-32 -27 -57 -37.5t-46 -10.5q-22 0 -40.5 8.5t-36 19t-35 19t-36.5 8.5q-18 0 -38.5 -10t-45.5 -35z" />
+ <glyph glyph-name="uni00A0" unicode=" " horiz-adv-x="212"
+ />
+ <glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="247"
+d="M147.006 -199.957h-74.9951v346.979l14.999 175.989h44.9971l14.999 -175.989v-346.979zM160.006 455.003q0 -27.998 -13.5 -41.998q-13.499 -13.999 -36.4971 -13.999q-22.999 0 -36.498 13.999q-13.499 14 -13.499 41.998q0 28.998 13.499 42.9971t36.498 13.999
+q22.998 0 36.4971 -13.999q13.5 -13.999 13.5 -42.9971z" />
+ <glyph glyph-name="cent" unicode="¢"
+d="M382 27q-18 -15 -42.5 -24t-50.5 -12v-91h-65v90q-41 6 -69 27t-45.5 54.5t-25.5 79t-8 99.5q0 114 38 180t110 79v91h65v-89q27 -2 48 -8t38 -16l-20 -63q-15 9 -33.5 14.5t-38.5 7.5v-393q25 2 45 11t33 20zM148 250q3 -36 7.5 -67.5t14.5 -56.5t26 -43t39 -25v385
+q-43 -11 -63.5 -58t-23.5 -135z" />
+ <glyph glyph-name="sterling" unicode="£"
+d="M42 382h54q-10 29 -17 62t-7 78q0 97 46 143.5t124 46.5q49 0 85 -8t61 -20l-24 -64q-19 10 -48.5 17.5t-71.5 7.5q-46 0 -71.5 -32t-25.5 -94q0 -42 9 -74t20 -63h127v-65h-104q7 -23 11.5 -49t4.5 -58q0 -29 -8.5 -63t-23.5 -55l-39 -35v-4l59 14h201v-67h-362v67
+q25 1 43.5 13t30.5 31.5t18 44t6 48.5q0 34 -6 61t-14 52h-78v65z" />
+ <glyph glyph-name="currency" unicode="¤"
+d="M46 579l69 -67l19 -31q37 29 91 29q26 0 49.5 -7.5t41.5 -21.5l19 31l70 67l42 -43l-67 -69l-31 -19q28 -39 28 -90q0 -56 -28 -91l31 -19l67 -69l-42 -43l-70 68l-18 30q-39 -28 -92 -28q-54 0 -91 28l-19 -30l-69 -68l-43 43l68 69l30 19q-28 37 -28 91q0 26 7.5 48.5
+t20.5 41.5l-30 19l-68 69zM135 358q0 -41 25 -67.5t65 -26.5t65.5 26.5t25.5 67.5q0 39 -25.5 66t-65.5 27t-65 -27t-25 -66z" />
+ <glyph glyph-name="yen" unicode="¥"
+d="M89 326h79l-165 374h88l126 -305l13 -61h2l13 63l122 303h81l-164 -374h80v-58h-100v-71h100v-58h-100v-139h-75v139h-100v58h100v71h-100v58z" />
+ <glyph glyph-name="brokenbar" unicode="¦" horiz-adv-x="189"
+d="M64 206h61v-336h-61v336zM125 364h-61v336h61v-336z" />
+ <glyph glyph-name="section" unicode="§" horiz-adv-x="405"
+d="M45 353q0 31 13 61.5t36 53.5l34 15q-22 17 -37.5 41t-15.5 66q0 53 33.5 87.5t99.5 34.5q42 0 73 -8t53 -19l-18 -62q-21 10 -46.5 17t-53.5 7q-36 0 -52.5 -17t-16.5 -42q0 -26 16 -42t39.5 -28.5t51 -24.5t51 -30t39.5 -45.5t16 -70.5q0 -31 -12 -62.5t-35 -54.5
+l-36 -14q21 -16 37 -40.5t16 -65.5q0 -60 -37.5 -91t-98.5 -31q-42 0 -72 7.5t-52 21.5l19 61q19 -11 44 -18t53 -7q72 0 72 61q0 24 -16 39.5t-39.5 28t-51 24.5t-51 30.5t-39.5 46t-16 70.5zM288 345q0 24 -9.5 40t-25.5 27.5t-36.5 21t-42.5 19.5q-24 -14 -40.5 -38
+t-16.5 -60q0 -23 9.5 -39.5t25.5 -29t36.5 -22t42.5 -19.5q22 14 39.5 41t17.5 59z" />
+ <glyph glyph-name="dieresis" unicode="¨" horiz-adv-x="365"
+d="M60 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34zM219 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="copyright" unicode="©" horiz-adv-x="693"
+d="M50 293q0 70 23.5 125t64 93t94.5 58.5t115 20.5t115 -20.5t94.5 -58.5t64 -93t23.5 -125t-23.5 -125t-64 -93.5t-94.5 -58.5t-115 -20q-68 0 -122.5 20t-93.5 58.5t-60 93.5t-21 125zM110 293q0 -58 18.5 -103t50.5 -75.5t75 -46.5t93 -16q49 0 92.5 16t75.5 46.5
+t50.5 75.5t18.5 103t-18.5 103t-50.5 75.5t-75.5 46.5t-92.5 16q-50 0 -93 -16t-75 -46.5t-50.5 -75.5t-18.5 -103zM446 155q-20 -11 -44 -17t-56 -6q-68 0 -104 43.5t-36 117.5q0 77 38.5 118.5t101.5 41.5q31 0 50 -6t44 -17l-22 -55q-19 9 -35.5 13t-28.5 4
+q-35 0 -55.5 -22.5t-20.5 -76.5q0 -99 83 -99q38 0 67 16z" />
+ <glyph glyph-name="ordfeminine" unicode="ª" horiz-adv-x="316"
+d="M52 681q21 11 54.5 19t75.5 8q53 0 72 -26t20 -75q-1 -69 -4 -126t8 -101h-50l-12 42h-3q-10 -17 -29.5 -31.5t-52.5 -14.5q-45 0 -70 25.5t-25 69.5q0 33 14 55t38 35t55.5 17.5t68.5 2.5q2 40 -6.5 57t-40.5 17q-29 0 -54.5 -6.5t-42.5 -14.5zM143 430q30 0 45.5 14.5
+t23.5 29.5v57q-21 1 -41 0.5t-36 -5.5t-26 -16.5t-10 -32.5q0 -20 11 -33.5t33 -13.5z" />
+ <glyph glyph-name="guillemotleft" unicode="«" horiz-adv-x="386"
+d="M178 259l127 228l48 -33l-80 -153l-38 -41l38 -36l85 -150l-48 -34zM29 259l129 230l50 -34l-82 -154l-38 -41l38 -36l88 -151l-51 -35z" />
+ <glyph glyph-name="logicalnot" unicode="¬" horiz-adv-x="415"
+d="M36 391h343v-191h-65v122h-278v69z" />
+ <glyph glyph-name="uni00AD" unicode="­" horiz-adv-x="291"
+d="M47 320h197v-69h-197v69z" />
+ <glyph glyph-name="registered" unicode="®" horiz-adv-x="591"
+d="M72 490q0 54 18 95.5t48.5 70t71 43t85.5 14.5q47 0 88 -14.5t71 -43t47.5 -70t17.5 -95.5t-18 -96t-48.5 -70.5t-71 -43t-86.5 -14.5q-47 0 -87.5 14.5t-70.5 43t-47.5 70.5t-17.5 96zM126 490q0 -44 13.5 -76.5t36.5 -54.5t53.5 -32.5t65.5 -10.5q37 0 68 10.5t53.5 32
+t35.5 54t13 77.5q0 43 -13.5 75.5t-36.5 54.5t-54 32.5t-66 10.5q-37 0 -68 -10.5t-53.5 -32.5t-35 -54.5t-12.5 -75.5zM208 599q14 4 38.5 6.5t46.5 2.5q35 0 60.5 -15t25.5 -51q0 -27 -17 -41.5t-43 -16.5l24 -11l62 -93h-52l-60 88l-41 13v-101h-44v219zM283 570
+q-8 0 -17 -0.5t-14 -3.5v-60h29q51 0 51 34q0 30 -49 30z" />
+ <glyph glyph-name="macron" unicode="¯" horiz-adv-x="363"
+d="M60 643h243v-59h-243v59z" />
+ <glyph glyph-name="degree" unicode="°" horiz-adv-x="342"
+d="M62 571q0 63 32 102t85 39q52 0 85 -36.5t33 -104.5t-33 -104.5t-85 -36.5q-53 0 -85 36.5t-32 104.5zM119 571q0 -39 16.5 -63.5t43.5 -24.5t44 24.5t17 63.5t-17 63.5t-44 24.5t-43.5 -24.5t-16.5 -63.5z" />
+ <glyph glyph-name="plusminus" unicode="±" horiz-adv-x="415"
+d="M35 469h139v155h67v-155h139v-67h-139v-105h-67v105h-139v67zM35 247h345v-67h-345v67z" />
+ <glyph glyph-name="twosuperior" unicode="²" horiz-adv-x="330"
+d="M267 695q0 -32 -8.5 -62.5t-23 -60t-34 -58t-40.5 -56.5l-37 -32v-2l46 15h112v-59h-238v32q21 21 48.5 53.5t52.5 69.5t42 76t17 74q0 30 -15.5 46t-38.5 16q-22 0 -42.5 -7t-34.5 -17l-20 52q20 16 49.5 24t58.5 8q51 0 78.5 -29t27.5 -83z" />
+ <glyph glyph-name="threesuperior" unicode="³" horiz-adv-x="330"
+d="M141 430q38 0 57.5 20.5t18.5 57.5q1 32 -16.5 52t-58.5 20h-44v23l77 119l29 27l-41 -6h-105v57h211v-32l-82 -126l-21 -17v-3l20 3q45 0 70.5 -31.5t24.5 -85.5q1 -61 -36.5 -98t-97.5 -37q-29 0 -51 5t-39 13l13 56q15 -8 32.5 -12.5t38.5 -4.5z" />
+ <glyph glyph-name="acute" unicode="´" horiz-adv-x="245"
+d="M107 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="mu" unicode="µ"
+d="M125 500v-302q0 -72 20.5 -108.5t67.5 -36.5q42 0 70 25t41 67v355h72v-337q0 -41 2 -82.5t10 -80.5h-51l-23 62h-3q-16 -32 -48 -53t-78 -21q-37 0 -57.5 13t-34.5 33h-5l18 -101v-133h-73v700h72z" />
+ <glyph glyph-name="mu" unicode="μ"
+d="M125 500v-302q0 -72 20.5 -108.5t67.5 -36.5q42 0 70 25t41 67v355h72v-337q0 -41 2 -82.5t10 -80.5h-51l-23 62h-3q-16 -32 -48 -53t-78 -21q-37 0 -57.5 13t-34.5 33h-5l18 -101v-133h-73v700h72z" />
+ <glyph glyph-name="paragraph" unicode="¶" horiz-adv-x="403"
+d="M278 700h61v-830h-61v830zM148 310q-27 0 -48.5 15.5t-37.5 42.5t-24.5 62.5t-8.5 75.5q0 39 9.5 74.5t27.5 62t43.5 42t58.5 15.5h41v-830h-61v440z" />
+ <glyph glyph-name="periodcentered" unicode="·" horiz-adv-x="213"
+d="M57 295q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="cedilla" unicode="¸" horiz-adv-x="262"
+d="M156 0l-19 -43q65 -15 65 -75q0 -39 -28.5 -64.5t-76.5 -25.5q-20 0 -37 4l7 39q23 -2 36.5 1t20.5 9t9 13.5t2 14.5q0 28 -69 37l40 90h50z" />
+ <glyph glyph-name="onesuperior" unicode="¹" horiz-adv-x="330"
+d="M63 437h84v257l6 36l-22 -28l-60 -40l-26 42l125 103h41v-370h75v-57h-223v57z" />
+ <glyph glyph-name="ordmasculine" unicode="º" horiz-adv-x="323"
+d="M34 542q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81zM99 542q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5
+t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5z" />
+ <glyph glyph-name="guillemotright" unicode="»" horiz-adv-x="386"
+d="M208 268l-127 -228l-49 32l81 154l38 41l-38 36l-85 151l48 33zM357 268l-129 -230l-51 33l83 155l38 41l-38 36l-88 152l51 34z" />
+ <glyph glyph-name="onequarter" unicode="¼" horiz-adv-x="683"
+d="M135 595l6 36l-22 -29l-59 -41l-26 44l124 102h41v-427h-64v315zM636 94h-65v-96h-61v96h-165v34l181 300h45v-278h65v-56zM510 275l7 53h-4l-18 -50l-59 -102l-27 -30l41 4h60v125zM505 713l49 -27l-384 -698l-50 28z" />
+ <glyph glyph-name="onehalf" unicode="½" horiz-adv-x="701"
+d="M135 595l6 36l-22 -29l-59 -41l-26 44l124 102h41v-427h-64v315zM640 315q0 -32 -8.5 -62.5t-23 -60t-34 -58t-40.5 -56.5l-37 -32v-2l46 15h112v-59h-238v32q21 21 48.5 53.5t52.5 69.5t42 76t17 74q0 30 -15.5 46t-38.5 16q-22 0 -42.5 -7t-34.5 -17l-20 52
+q20 16 49.5 24t58.5 8q51 0 78.5 -29t27.5 -83zM505 713l49 -27l-384 -698l-50 28z" />
+ <glyph glyph-name="threequarters" unicode="¾" horiz-adv-x="710"
+d="M664 94h-65v-96h-61v96h-165v34l181 300h45v-278h65v-56zM538 275l7 53h-4l-18 -50l-59 -102l-27 -30l41 4h60v125zM131 330q38 0 57.5 20.5t18.5 57.5q1 32 -16.5 52t-58.5 20h-44v23l77 119l29 27l-41 -6h-105v57h211v-32l-82 -126l-21 -17v-3l20 3q45 0 70.5 -31.5
+t24.5 -85.5q1 -61 -36.5 -98t-97.5 -37q-29 0 -51 5t-39 13l13 56q15 -8 32.5 -12.5t38.5 -4.5zM533 713l49 -27l-384 -698l-50 28z" />
+ <glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="358"
+d="M239.008 323.011q3 -43.9971 -5.5 -77.9951q-8.49902 -33.998 -23.498 -62.4961q-15 -28.498 -32.498 -53.4971q-17.499 -24.998 -33.498 -51.4971q-15.999 -26.498 -26.499 -55.9961q-10.499 -29.498 -10.499 -66.4961q0 -45.9971 19.999 -73.9951
+q19.998 -27.999 67.9951 -27.999q28.999 0 56.9971 10.5q27.998 10.499 49.9971 26.498l27.998 -55.9961q-29.998 -19.999 -65.4961 -32.998q-35.498 -13 -86.4941 -13q-71.9961 0 -108.994 41.998q-36.9971 41.9971 -36.9971 114.993q0 42.9971 10.999 76.9951
+t26.998 62.4961t34.998 54.4971q18.999 25.998 35.498 53.4961q16.499 27.499 27.498 58.9971t10.999 71.4951h59.9971zM254.007 455.003q0 -27.998 -13.499 -41.998q-13.5 -13.999 -36.498 -13.999q-22.999 0 -36.498 13.999q-13.499 14 -13.499 41.998
+q0 28.998 13.499 42.9971t36.498 13.999q22.998 0 36.498 -13.999q13.499 -13.999 13.499 -42.9971z" />
+ <glyph glyph-name="Agrave" unicode="À" horiz-adv-x="473"
+d="M302 752h-65l-127 97v21h99zM333 196h-198l-56 -196h-74l211 711h41l211 -711h-78zM155 263h160l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="Aacute" unicode="Á" horiz-adv-x="473"
+d="M262 870h99v-21l-131 -97h-61zM333 196h-198l-56 -196h-74l211 711h41l211 -711h-78zM155 263h160l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="Acircumflex" unicode="Â" horiz-adv-x="473"
+d="M213 870h50l102 -102v-21h-66l-47 49l-15 35l-15 -34l-52 -50h-64v22zM333 196h-198l-56 -196h-74l211 711h41l211 -711h-78zM155 263h160l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="Atilde" unicode="Ã" horiz-adv-x="473"
+d="M100 780q28 34 51.5 46.5t44.5 12.5q16 0 30.5 -5t28 -10.5t26 -10.5t25.5 -5q11 0 21.5 4t21.5 16l26 -37q-24 -28 -45 -38t-39 -10q-15 0 -29 5t-27.5 10.5t-26.5 10.5t-27 5t-27.5 -6t-29.5 -23zM333 196h-198l-56 -196h-74l211 711h41l211 -711h-78zM155 263h160
+l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="Adieresis" unicode="Ä" horiz-adv-x="473"
+d="M111 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM269 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM333 196h-198l-56 -196h-74l211 711h41
+l211 -711h-78zM155 263h160l-61 216l-19 105h-2l-19 -107z" />
+ <glyph glyph-name="Aring" unicode="Å" horiz-adv-x="473"
+d="M148 768q0 37 21 61t69 23q43 1 66.5 -20.5t23.5 -63.5q0 -31 -16 -52.5t-48 -28.5l204 -687h-78l-57 196h-198l-56 -196h-74l204 687q-30 8 -45.5 28.5t-15.5 52.5zM155 263h160l-61 216l-19 105h-2l-19 -107zM202 768q0 -18 8.5 -29.5t27.5 -11.5q36 0 36 41
+q0 43 -36 44q-36 -1 -36 -44z" />
+ <glyph glyph-name="AE" unicode="Æ" horiz-adv-x="683"
+d="M315 589l-26 -98l-103 -225h132v323h-3zM318 199h-165l-90 -199h-81l335 700h313v-69h-237v-237h217v-69h-217v-256h241v-69h-316v199z" />
+ <glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="458"
+d="M430 27q-21 -18 -52 -27t-66 -11l-14 -32q65 -15 65 -75q0 -39 -28.5 -64.5t-76.5 -25.5q-20 0 -37 4l7 39q23 -2 36.5 1t20.5 9t9 13.5t2 14.5q0 28 -69 37l35 80q-48 4 -88.5 26.5t-69.5 66t-45 109.5t-16 158q0 100 20.5 169t54.5 112t78.5 62t91.5 19q48 0 79.5 -7
+t54.5 -17l-18 -68q-20 11 -47 17t-62 6t-66 -15.5t-55 -50t-38 -90.5t-14 -137q0 -146 50 -219t133 -73q34 0 61 9.5t46 22.5z" />
+ <glyph glyph-name="Egrave" unicode="È" horiz-adv-x="429"
+d="M267 752h-65l-127 97v21h99zM64 700h311v-69h-236v-237h217v-69h-217v-256h241v-69h-316v700z" />
+ <glyph glyph-name="Eacute" unicode="É" horiz-adv-x="429"
+d="M258 870h99v-21l-131 -97h-61zM64 700h311v-69h-236v-237h217v-69h-217v-256h241v-69h-316v700z" />
+ <glyph glyph-name="Ecircumflex" unicode="Ê" horiz-adv-x="429"
+d="M192 870h50l102 -102v-21h-66l-47 49l-15 35l-15 -34l-52 -50h-64v22zM64 700h311v-69h-236v-237h217v-69h-217v-256h241v-69h-316v700z" />
+ <glyph glyph-name="Edieresis" unicode="Ë" horiz-adv-x="429"
+d="M90 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM248 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM64 700h311v-69h-236v-237h217v-69h-217
+v-256h241v-69h-316v700z" />
+ <glyph glyph-name="Igrave" unicode="Ì" horiz-adv-x="233"
+d="M191 752h-65l-127 97v21h99zM79 700h75v-700h-75v700z" />
+ <glyph glyph-name="Iacute" unicode="Í" horiz-adv-x="233"
+d="M141 870h99v-21l-131 -97h-61zM79 700h75v-700h-75v700z" />
+ <glyph glyph-name="Icircumflex" unicode="Î" horiz-adv-x="233"
+d="M94 870h50l102 -102v-21h-66l-47 49l-15 35l-15 -34l-52 -50h-64v22zM79 700h75v-700h-75v700z" />
+ <glyph glyph-name="Idieresis" unicode="Ï" horiz-adv-x="233"
+d="M-8 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM150 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM79 700h75v-700h-75v700z" />
+ <glyph glyph-name="Eth" unicode="Ð" horiz-adv-x="531"
+d="M-1 393h71v307q16 3 35.5 4.5t39.5 2t39.5 1t36.5 0.5q73 0 124 -25t83 -71.5t46 -111.5t14 -145q0 -72 -13.5 -138t-45.5 -116t-84.5 -80t-131.5 -30q-13 0 -33 0.5t-41.5 2t-40 2.5t-28.5 3v335h-71v59zM225 639h-21.5t-22.5 -1t-20.5 -2t-15.5 -2v-241h117v-59h-117
+v-270q4 -1 14.5 -1.5t22 -1t22 -1t15.5 -0.5q55 0 92 24t58.5 64.5t30.5 94t9 113.5q0 53 -8 104t-28.5 90.5t-56 64t-91.5 24.5z" />
+ <glyph glyph-name="Ntilde" unicode="Ñ" horiz-adv-x="538"
+d="M135 780q28 34 51.5 46.5t44.5 12.5q16 0 30.5 -5t28 -10.5t26 -10.5t25.5 -5q11 0 21.5 4t21.5 16l26 -37q-24 -28 -45 -38t-39 -10q-15 0 -29 5t-27.5 10.5t-26.5 10.5t-27 5t-27.5 -6t-29.5 -23zM171 444l-43 110h-3l11 -110v-444h-72v711h45l259 -454l41 -105h4
+l-11 105v443h72v-711h-46z" />
+ <glyph glyph-name="Ograve" unicode="Ò" horiz-adv-x="549"
+d="M333 752h-65l-127 97v21h99zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221
+q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="Oacute" unicode="Ó" horiz-adv-x="549"
+d="M335 870h99v-21l-131 -97h-61zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221
+q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="Ocircumflex" unicode="Ô" horiz-adv-x="549"
+d="M250 870h50l102 -102v-21h-66l-47 49l-15 35l-15 -34l-52 -50h-64v22zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64
+t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="Otilde" unicode="Õ" horiz-adv-x="549"
+d="M139 780q28 34 51.5 46.5t44.5 12.5q16 0 30.5 -5t28 -10.5t26 -10.5t25.5 -5q11 0 21.5 4t21.5 16l26 -37q-24 -28 -45 -38t-39 -10q-15 0 -29 5t-27.5 10.5t-26.5 10.5t-27 5t-27.5 -6t-29.5 -23zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114
+t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="Odieresis" unicode="Ö" horiz-adv-x="549"
+d="M149 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM307 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM43 350q0 178 57 270t174 92
+q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="multiply" unicode="×" horiz-adv-x="415"
+d="M104 513l104 -122l105 122l49 -46l-109 -128l109 -130l-49 -45l-105 122l-105 -123l-50 45l111 131l-110 128z" />
+ <glyph glyph-name="Oslash" unicode="Ø" horiz-adv-x="549"
+d="M43 350q0 178 57 270t174 92q45 0 80.5 -13.5t61.5 -38.5l30 53l48 -27l-41 -73q28 -48 40.5 -114t12.5 -149q0 -178 -57.5 -270t-174.5 -92q-87 0 -140 50l-27 -50l-49 28l38 69q-28 48 -40.5 114.5t-12.5 150.5zM122 350q0 -49 5.5 -93.5t17.5 -82.5l230 412
+q-18 27 -43 42t-58 15q-74 0 -113 -72t-39 -221zM427 350q0 48 -5.5 92t-17.5 81l-229 -412q18 -26 42.5 -40t56.5 -14q75 0 114 72t39 221z" />
+ <glyph glyph-name="Ugrave" unicode="Ù" horiz-adv-x="521"
+d="M326 752h-65l-127 97v21h99zM385 700h72v-469q0 -127 -49.5 -183.5t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46t25.5 148v446z" />
+ <glyph glyph-name="Uacute" unicode="Ú" horiz-adv-x="521"
+d="M311 870h99v-21l-131 -97h-61zM385 700h72v-469q0 -127 -49.5 -183.5t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46t25.5 148v446z" />
+ <glyph glyph-name="Ucircumflex" unicode="Û" horiz-adv-x="521"
+d="M240 870h50l102 -102v-21h-66l-47 49l-15 35l-15 -34l-52 -50h-64v22zM385 700h72v-469q0 -127 -49.5 -183.5t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46t25.5 148v446z" />
+ <glyph glyph-name="Udieresis" unicode="Ü" horiz-adv-x="521"
+d="M135 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM293 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM385 700h72v-469q0 -127 -49.5 -183.5
+t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46t25.5 148v446z" />
+ <glyph glyph-name="Yacute" unicode="Ý" horiz-adv-x="455"
+d="M282 870h99v-21l-131 -97h-61zM191 278l-186 422h88l126 -305l13 -61h2l13 63l122 303h81l-184 -421v-279h-75v278z" />
+ <glyph glyph-name="Thorn" unicode="Þ" horiz-adv-x="452"
+d="M65 700h75v-78q31 3 64 3q40 0 79 -9.5t70.5 -33.5t51 -66t19.5 -107q0 -63 -18.5 -107t-49 -71t-70 -39.5t-81.5 -12.5h-13t-19 0.5t-19.5 1.5t-13.5 2v-183h-75v700zM140 252q4 -2 12.5 -2.5t17.5 -1.5t17.5 -1h12.5q28 0 54 7t46 25.5t32.5 50t12.5 80.5
+q0 41 -11.5 69t-30 45.5t-43.5 25t-52 7.5q-20 0 -38.5 -1t-29.5 -4v-300z" />
+ <glyph glyph-name="germandbls" unicode="ß" horiz-adv-x="488"
+d="M77 500v25q0 99 41.5 140t112.5 41q33 0 61.5 -9t50 -26.5t33.5 -43t12 -58.5t-16 -56.5t-34.5 -42.5t-34.5 -38t-16 -43q0 -23 12.5 -39t31 -30t40.5 -28.5t40.5 -34.5t31 -48.5t12.5 -70.5q0 -28 -10 -55t-29 -48t-47 -34t-65 -13t-60.5 6t-45.5 20l20 61
+q21 -12 36.5 -17.5t43.5 -5.5q34 0 59.5 23t25.5 61q0 31 -12.5 51.5t-31.5 36t-40.5 29t-40.5 31t-31.5 41.5t-12.5 61q0 33 16 56t35 42.5t35 38.5t16 43q0 17 -7.5 31t-19.5 23.5t-26.5 15t-29.5 5.5q-22 0 -38 -6.5t-26 -22.5t-15 -43.5t-5 -69.5v-499h-72v435h-61v65
+h61z" />
+ <glyph glyph-name="agrave" unicode="à" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106zM244 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="aacute" unicode="á" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106zM194 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="acircumflex" unicode="â" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106zM190 732h35l89 -182h-63l-32 66l-16 58l-17 -58l-36 -66h-59z" />
+ <glyph glyph-name="atilde" unicode="ã" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106zM80 653q27 34 48 46.5t38 12.5q14 0 26 -6t23.5 -12.5t22 -12.5t22.5 -6q9 0 18.5 4.5t20.5 16.5
+l23 -38q-24 -29 -42.5 -40t-34.5 -11q-14 0 -26 5.5t-23.5 12.5t-22.5 12.5t-23 5.5q-11 0 -22 -5.5t-24 -19.5z" />
+ <glyph glyph-name="adieresis" unicode="ä" horiz-adv-x="400"
+d="M54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55
+q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106zM78 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z
+M237 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="aring" unicode="å" horiz-adv-x="400"
+d="M118 643q0 42 22 65.5t60 23.5q36 0 59.5 -21t23.5 -68q0 -40 -22.5 -64t-60.5 -24t-60 22.5t-22 65.5zM166 643q0 -23 10 -34.5t24 -11.5q16 0 25.5 11t9.5 35t-10.5 35.5t-24.5 11.5t-24 -11t-10 -36zM54 470q29 18 70.5 28t87.5 10q42 0 67.5 -12.5t40 -34t19 -49
+t4.5 -57.5q0 -60 -2.5 -117t-2.5 -108q0 -38 2.5 -70.5t9.5 -61.5h-55l-17 59h-4q-15 -26 -44 -45t-78 -19q-54 0 -88.5 37.5t-34.5 103.5q0 43 14.5 72t41 47t63 25.5t81.5 7.5h20t21 -1q3 31 3 55q0 57 -17 80t-62 23q-28 0 -61 -8.5t-55 -21.5zM271 228q-10 1 -20 1.5
+t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -40 19.5 -62t50.5 -22q42 0 65 20t32 44v106z" />
+ <glyph glyph-name="ae" unicode="æ" horiz-adv-x="642"
+d="M173 57q21 0 37.5 6.5t28.5 17t20 23t12 25.5v101q-10 1 -20 1.5t-20 0.5q-24 0 -47 -4t-41 -14t-28.5 -27t-10.5 -43q0 -35 19 -61t50 -26zM294 73q-20 -35 -54.5 -58t-85.5 -23q-56 0 -90.5 39t-34.5 105q0 44 14.5 73.5t40.5 47t62 25t80 7.5q11 0 22 -0.5t22 -1.5
+q3 31 3 55q0 57 -17 79.5t-62 22.5q-28 0 -62 -10t-57 -26l-22 56q31 23 72.5 33.5t86.5 10.5q84 0 109 -64q20 36 55.5 52t70.5 16q28 0 55.5 -7.5t49.5 -29t35.5 -60t13.5 -99.5q0 -17 -1.5 -36t-3.5 -40h-253q1 -92 28 -139.5t95 -47.5q28 0 55 10t41 22l26 -53
+q-25 -20 -61 -32t-80 -12q-50 0 -89 21.5t-58 63.5h-6zM447 447q-45 0 -72 -36t-32 -112h188q2 75 -20.5 111.5t-63.5 36.5z" />
+ <glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="356"
+d="M335 25q-20 -15 -44 -23.5t-50 -11.5l-14 -33q65 -15 65 -75q0 -39 -28.5 -64.5t-76.5 -25.5q-20 0 -37 4l7 39q23 -2 36.5 1t20.5 9t9 13.5t2 14.5q0 28 -69 37l35 79q-42 4 -71.5 24.5t-47.5 54t-26.5 80t-8.5 102.5q0 128 45.5 195t130.5 67q39 0 67 -7t48 -18
+l-20 -62q-38 22 -87 22q-54 0 -81.5 -47.5t-27.5 -149.5q0 -41 6 -76.5t20 -62t36 -41.5t55 -15q26 0 48.5 8.5t36.5 20.5z" />
+ <glyph glyph-name="egrave" unicode="è" horiz-adv-x="413"
+d="M358 34q-24 -22 -61 -34t-78 -12q-47 0 -81.5 18.5t-57 53t-33 82.5t-10.5 108q0 128 47 195t133 67q28 0 55.5 -7t49.5 -28t35.5 -59t13.5 -99q0 -17 -1.5 -36.5t-3.5 -40.5h-254q0 -43 7 -78t22 -59.5t38.5 -38t58.5 -13.5q27 0 53.5 10t40.5 24zM302 302q2 75 -21 110
+t-63 35q-46 0 -73 -35t-32 -110h189zM261 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="eacute" unicode="é" horiz-adv-x="413"
+d="M358 34q-24 -22 -61 -34t-78 -12q-47 0 -81.5 18.5t-57 53t-33 82.5t-10.5 108q0 128 47 195t133 67q28 0 55.5 -7t49.5 -28t35.5 -59t13.5 -99q0 -17 -1.5 -36.5t-3.5 -40.5h-254q0 -43 7 -78t22 -59.5t38.5 -38t58.5 -13.5q27 0 53.5 10t40.5 24zM302 302q2 75 -21 110
+t-63 35q-46 0 -73 -35t-32 -110h189zM232 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="ecircumflex" unicode="ê" horiz-adv-x="413"
+d="M358 34q-24 -22 -61 -34t-78 -12q-47 0 -81.5 18.5t-57 53t-33 82.5t-10.5 108q0 128 47 195t133 67q28 0 55.5 -7t49.5 -28t35.5 -59t13.5 -99q0 -17 -1.5 -36.5t-3.5 -40.5h-254q0 -43 7 -78t22 -59.5t38.5 -38t58.5 -13.5q27 0 53.5 10t40.5 24zM302 302q2 75 -21 110
+t-63 35q-46 0 -73 -35t-32 -110h189zM197 732h35l89 -182h-63l-32 66l-16 58l-17 -58l-36 -66h-59z" />
+ <glyph glyph-name="edieresis" unicode="ë" horiz-adv-x="413"
+d="M358 34q-24 -22 -61 -34t-78 -12q-47 0 -81.5 18.5t-57 53t-33 82.5t-10.5 108q0 128 47 195t133 67q28 0 55.5 -7t49.5 -28t35.5 -59t13.5 -99q0 -17 -1.5 -36.5t-3.5 -40.5h-254q0 -43 7 -78t22 -59.5t38.5 -38t58.5 -13.5q27 0 53.5 10t40.5 24zM302 302q2 75 -21 110
+t-63 35q-46 0 -73 -35t-32 -110h189zM93 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34zM252 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="igrave" unicode="ì" horiz-adv-x="217"
+d="M72 500h72v-500h-72v500zM140 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="iacute" unicode="í" horiz-adv-x="217"
+d="M72 500h72v-500h-72v500zM123 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="icircumflex" unicode="î" horiz-adv-x="217"
+d="M72 500h72v-500h-72v500zM94 732h35l89 -182h-63l-32 66l-16 58l-17 -58l-36 -66h-59z" />
+ <glyph glyph-name="idieresis" unicode="ï" horiz-adv-x="217"
+d="M72 500h72v-500h-72v500zM-13 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34zM146 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="eth" unicode="ð"
+d="M169 589l57 38q-32 26 -67 41l32 44q16 -8 38 -20t46 -33l60 40l24 -39l-50 -33q20 -23 38 -54t32 -71.5t22 -91.5t8 -114q0 -86 -14.5 -144.5t-39.5 -95t-58.5 -52.5t-72.5 -16q-48 0 -83 19t-57 53.5t-32.5 83t-10.5 107.5q0 57 12 104.5t35.5 82t57 53.5t76.5 19
+q35 0 62 -12t41 -30q-11 38 -27.5 69.5t-37.5 56.5l-66 -43zM115 251q0 -105 32 -151t82 -46q23 0 43 13t34.5 41t23 73t8.5 109q0 10 -0.5 24.5t-1.5 29t-2.5 27.5t-2.5 21q-14 26 -43 39t-58 13q-30 0 -51.5 -14t-36 -39.5t-21 -61t-6.5 -78.5z" />
+ <glyph glyph-name="ntilde" unicode="ñ" horiz-adv-x="439"
+d="M315 0v305q0 75 -17.5 108.5t-62.5 33.5q-40 0 -66 -24t-38 -59v-364h-72v500h52l13 -53h3q19 27 51.5 46t77.5 19q32 0 56.5 -9t41 -30.5t25 -57.5t8.5 -91v-324h-72zM100 653q27 34 48 46.5t38 12.5q14 0 26 -6t23.5 -12.5t22 -12.5t22.5 -6q9 0 18.5 4.5t20.5 16.5
+l23 -38q-24 -29 -42.5 -40t-34.5 -11q-14 0 -26 5.5t-23.5 12.5t-22.5 12.5t-23 5.5q-11 0 -22 -5.5t-24 -19.5z" />
+ <glyph glyph-name="ograve" unicode="ò" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150zM254 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="oacute" unicode="ó" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150zM227 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="ocircumflex" unicode="ô" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150zM206 732h35l89 -182h-63l-32 66l-16 58l-17 -58l-36 -66h-59z" />
+ <glyph glyph-name="otilde" unicode="õ" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150zM96 653q27 34 48 46.5t38 12.5q14 0 26 -6t23.5 -12.5t22 -12.5t22.5 -6q9 0 18.5 4.5t20.5 16.5l23 -38q-24 -29 -42.5 -40t-34.5 -11q-14 0 -26 5.5t-23.5 12.5t-22.5 12.5t-23 5.5q-11 0 -22 -5.5t-24 -19.5z" />
+ <glyph glyph-name="odieresis" unicode="ö" horiz-adv-x="432"
+d="M37 250q0 135 46.5 198.5t132.5 63.5q92 0 135.5 -65t43.5 -197q0 -136 -47 -199t-132 -63q-92 0 -135.5 65t-43.5 197zM112 250q0 -44 5.5 -80t18 -62t32.5 -40.5t48 -14.5q52 0 78 46.5t26 150.5q0 43 -5.5 79.5t-18 62.5t-32.5 40.5t-48 14.5q-51 0 -77.5 -47
+t-26.5 -150zM94 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34zM253 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="divide" unicode="÷" horiz-adv-x="415"
+d="M35 373h344v-67h-344v67zM157 508q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43zM157 171q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="oslash" unicode="ø" horiz-adv-x="436"
+d="M40 250q0 131 46.5 196.5t132.5 65.5q58 0 98 -29l19 32l49 -30l-27 -48q20 -33 30 -80t10 -107q0 -133 -46.5 -197.5t-132.5 -64.5q-62 0 -103 32l-21 -34l-49 32l30 51q-36 66 -36 181zM323 250q0 32 -2.5 60.5t-9.5 51.5l-160 -275q26 -34 68 -34q52 0 78 47t26 150z
+M115 250q0 -30 2 -57t8 -50l157 275q-12 14 -27.5 21.5t-35.5 7.5q-51 0 -77.5 -47t-26.5 -150z" />
+ <glyph glyph-name="ugrave" unicode="ù" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72zM249 571h-41l-94 128v21h83z" />
+ <glyph glyph-name="uacute" unicode="ú" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72zM226 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="ucircumflex" unicode="û" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72zM203 732h35l89 -182h-63l-32 66l-16 58l-17 -58
+l-36 -66h-59z" />
+ <glyph glyph-name="udieresis" unicode="ü" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72zM95 653q0 23 11.5 36t31.5 13t31.5 -13
+t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34zM254 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="yacute" unicode="ý" horiz-adv-x="376"
+d="M183 177l21 -97h5l15 97l76 323h73l-119 -449q-14 -54 -28 -101t-30.5 -81.5t-37 -54t-48.5 -19.5t-49 9l12 68q14 -5 28 -2t26.5 17t23 41.5t18.5 71.5l-162 500h82zM219 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="thorn" unicode="þ" horiz-adv-x="435"
+d="M59 700h72v-240h3q16 24 42.5 38t64.5 14q79 0 118 -59t39 -193q0 -63 -13 -113.5t-37 -85.5t-58 -54t-76 -19q-29 0 -47.5 4t-35.5 13v-205h-72v900zM224 447q-35 0 -59 -22.5t-34 -62.5v-284q14 -12 31.5 -18.5t46.5 -6.5q53 0 83.5 54t30.5 154q0 42 -5.5 76t-17 58.5
+t-30.5 38t-46 13.5z" />
+ <glyph glyph-name="ydieresis" unicode="ÿ" horiz-adv-x="376"
+d="M183 177l21 -97h5l15 97l76 323h73l-119 -449q-14 -54 -28 -101t-30.5 -81.5t-37 -54t-48.5 -19.5t-49 9l12 68q14 -5 28 -2t26.5 17t23 41.5t18.5 71.5l-162 500h82zM66 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z
+M225 653q0 23 11.5 36t31.5 13t31.5 -13t11.5 -36q0 -21 -11.5 -34t-31.5 -13t-31.5 13t-11.5 34z" />
+ <glyph glyph-name="Lcommaaccent" unicode="Ļ" horiz-adv-x="415"
+d="M154 -102q0 21 13 34t31 13q22 0 38 -17t16 -58q0 -26 -7.5 -45.5t-18 -34t-22 -23t-20.5 -12.5l-27 27q17 13 28.5 31.5t10.5 42.5q-17 -2 -29.5 9t-12.5 33zM401 0h-337v700h75v-631h262v-69z" />
+ <glyph glyph-name="OE" unicode="Œ" horiz-adv-x="748"
+d="M383 623q-22 11 -50 15.5t-58 4.5q-73 0 -113 -72t-40 -221q0 -59 8.5 -112t27.5 -93t49 -64t73 -24q23 0 47 2t56 14v550zM383 0q-20 -5 -48 -8.5t-62 -3.5q-60 0 -103.5 25.5t-71.5 73t-41.5 114t-13.5 149.5q0 177 58.5 269.5t171.5 92.5q36 0 60.5 -3.5t49.5 -8.5
+h311v-69h-236v-237h216v-69h-216v-256h241v-69h-316z" />
+ <glyph glyph-name="oe" unicode="œ" horiz-adv-x="692"
+d="M112 250q0 -39 5.5 -74.5t18 -62.5t32.5 -43.5t48 -16.5q103 0 103 197q0 39 -5.5 74.5t-17.5 63t-32 43.5t-48 16q-104 0 -104 -197zM355 75q-43 -87 -140 -87q-91 0 -134.5 68t-43.5 194q0 128 46.5 195t132.5 67q51 0 85.5 -22.5t54.5 -63.5q20 38 55.5 62t84.5 24
+q28 0 55.5 -7.5t49.5 -28.5t35.5 -59t13.5 -99q0 -17 -1.5 -36t-3.5 -40h-256q1 -87 30.5 -138.5t97.5 -51.5q27 0 55 11t42 25l26 -53q-24 -23 -62.5 -35t-80.5 -12q-50 0 -86 24t-56 63zM496 448q-45 0 -72.5 -36t-32.5 -111h190q2 75 -21 111t-64 36z" />
+ <glyph glyph-name="Scaron" unicode="Š" horiz-adv-x="428"
+d="M259 746h-53l-102 103v21h69l47 -50l14 -34l15 33l50 51h66v-22zM59 93q19 -13 53.5 -24.5t78.5 -11.5q56 0 91 27.5t35 86.5q0 39 -20 68t-50 53.5t-64.5 48t-64.5 52t-50 65.5t-20 89q0 84 50.5 124.5t131.5 40.5q50 0 89 -9t63 -23l-24 -66q-18 11 -51.5 20t-77.5 9
+q-54 0 -80 -26.5t-26 -66.5q0 -35 20 -62t50 -51t64.5 -48.5t64.5 -54.5t50 -68t20 -90q0 -88 -52 -138t-147 -50q-60 0 -98.5 11t-61.5 25z" />
+ <glyph glyph-name="scaron" unicode="š" horiz-adv-x="338"
+d="M186 550h-38l-93 182h68l31 -66l17 -58l17 58l36 66h61zM51 82q20 -12 47.5 -20.5t56.5 -8.5q33 0 56 16.5t23 53.5q0 31 -14 51t-35.5 36t-46.5 29.5t-46.5 32.5t-35.5 45t-14 66q0 64 34.5 96.5t97.5 32.5q41 0 71 -7.5t52 -20.5l-19 -60q-19 10 -44 16.5t-51 6.5
+q-36 0 -52.5 -15t-16.5 -47q0 -25 14 -42.5t35.5 -32t46.5 -29.5t46.5 -35.5t35.5 -49t14 -71.5q0 -28 -9 -53t-27.5 -43.5t-46 -29.5t-64.5 -11q-44 0 -76 8.5t-54 22.5z" />
+ <glyph glyph-name="umacron" unicode="ū" horiz-adv-x="434"
+d="M124 500v-306q0 -76 15.5 -108.5t56.5 -32.5q21 0 37.5 8.5t29.5 22.5t23 32t16 37v347h72v-358q0 -36 2.5 -74.5t7.5 -67.5h-51l-18 70h-3q-17 -33 -49 -57.5t-80 -24.5q-32 0 -56 8t-41 29t-25.5 57.5t-8.5 93.5v324h72zM94 643h243v-59h-243v59z" />
+ <glyph glyph-name="Ubreve" unicode="Ŭ" horiz-adv-x="521"
+d="M157 871q14 -34 42 -55t66 -21q39 0 64.5 22.5t38.5 53.5l36 -16q-15 -63 -54.5 -94t-85.5 -31q-43 0 -84.5 29t-60.5 92zM385 700h72v-469q0 -127 -49.5 -183.5t-140.5 -56.5q-106 0 -154.5 55t-48.5 169v485h75v-446q0 -54 7 -91t23 -60t40 -33t59 -10q66 0 91.5 46
+t25.5 148v446z" />
+ <glyph glyph-name="Ydieresis" unicode="Ÿ" horiz-adv-x="455"
+d="M105 794q0 21 12.5 34t34.5 13q21 0 33.5 -13t12.5 -34t-12.5 -33.5t-33.5 -12.5q-22 0 -34.5 12.5t-12.5 33.5zM263 794q0 21 12.5 34t33.5 13q22 0 34.5 -13t12.5 -34t-12.5 -33.5t-34.5 -12.5q-21 0 -33.5 12.5t-12.5 33.5zM191 278l-186 422h88l126 -305l13 -61h2
+l13 63l122 303h81l-184 -421v-279h-75v278z" />
+ <glyph glyph-name="Zcaron" unicode="Ž" horiz-adv-x="439"
+d="M237 746h-53l-102 103v21h69l47 -50l14 -34l15 33l50 51h66v-22zM29 69l278 522l33 40h-311v69h381v-69l-279 -525l-32 -37h311v-69h-381v69z" />
+ <glyph glyph-name="zcaron" unicode="ž" horiz-adv-x="360"
+d="M195 550h-38l-93 182h68l31 -66l17 -58l17 58l36 66h61zM32 65l186 327l35 43h-221v65h292v-65l-187 -330l-34 -40h221v-65h-292v65z" />
+ <glyph glyph-name="florin" unicode="ƒ"
+d="M259 435l-62 -469q-5 -37 -14 -68.5t-24 -55t-37 -37t-53 -13.5q-24 0 -52.5 5.5t-48.5 15.5l20 61q18 -8 34.5 -12.5t36.5 -4.5q30 0 46 36t26 115l53 427h-67v65h77l9 67q10 73 35.5 109t85.5 36q27 0 54.5 -5.5t48.5 -15.5l-20 -60q-36 16 -72 16q-30 0 -42 -25.5
+t-19 -80.5l-5 -41h97v-65h-107z" />
+ <glyph glyph-name="circumflex" unicode="ˆ" horiz-adv-x="343"
+d="M159 732h35l89 -182h-63l-32 66l-16 58l-17 -58l-36 -66h-59z" />
+ <glyph glyph-name="tilde" unicode="˜" horiz-adv-x="362"
+d="M60 653q27 34 48 46.5t38 12.5q14 0 26 -6t23.5 -12.5t22 -12.5t22.5 -6q9 0 18.5 4.5t20.5 16.5l23 -38q-24 -29 -42.5 -40t-34.5 -11q-14 0 -26 5.5t-23.5 12.5t-22.5 12.5t-23 5.5q-11 0 -22 -5.5t-24 -19.5z" />
+ <glyph glyph-name="afii10056" unicode="Ї" horiz-adv-x="236"
+d="M19 793q0 22 12 35t32 13t31.5 -13t11.5 -35t-11.5 -34.5t-31.5 -12.5t-32 12.5t-12 34.5zM130 793q0 22 11.5 35t31.5 13t32 -13t12 -35t-12 -34.5t-32 -12.5t-31.5 12.5t-11.5 34.5zM80 700h75v-700h-75v700z" />
+ <glyph glyph-name="afii10036" unicode="Т" horiz-adv-x="447"
+d="M433 631h-172v-631h-75v631h-172v69h419v-69z" />
+ <glyph glyph-name="endash" unicode="–" horiz-adv-x="530"
+d="M93 322h344v-69h-344v69z" />
+ <glyph glyph-name="emdash" unicode="—" horiz-adv-x="662"
+d="M95 322h472v-69h-472v69z" />
+ <glyph glyph-name="quoteleft" unicode="‘" horiz-adv-x="162"
+d="M130 620q0 -23 -12.5 -36.5t-32.5 -13.5q-23 0 -38.5 17t-15.5 52q0 33 8.5 57t20.5 41t24.5 27t21.5 15l23 -33q-17 -12 -29.5 -32t-11.5 -47q19 3 30.5 -10.5t11.5 -36.5z" />
+ <glyph glyph-name="quoteright" unicode="’" horiz-adv-x="162"
+d="M31 659q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38z" />
+ <glyph glyph-name="quotesinglbase" unicode="‚" horiz-adv-x="162"
+d="M31 50q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38z" />
+ <glyph glyph-name="quotedblleft" unicode="“" horiz-adv-x="288"
+d="M256 620q0 -23 -12.5 -36.5t-32.5 -13.5q-23 0 -38.5 17t-15.5 52q0 33 8.5 57t20.5 41t24.5 27t21.5 15l23 -33q-17 -12 -29.5 -32t-11.5 -47q19 3 30.5 -10.5t11.5 -36.5zM130 620q0 -23 -12.5 -36.5t-32.5 -13.5q-23 0 -38.5 17t-15.5 52q0 33 8.5 57t20.5 41t24.5 27
+t21.5 15l23 -33q-17 -12 -29.5 -32t-11.5 -47q19 3 30.5 -10.5t11.5 -36.5z" />
+ <glyph glyph-name="quotedblright" unicode="”" horiz-adv-x="288"
+d="M157 659q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38zM31 659q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30
+q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38z" />
+ <glyph glyph-name="quotedblbase" unicode="„" horiz-adv-x="288"
+d="M157 50q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38zM31 50q0 23 13 36t33 13q24 0 39 -16.5t15 -50.5q0 -32 -8 -56t-19.5 -40.5t-24.5 -27t-22 -15.5l-23 30
+q17 11 29.5 31.5t11.5 47.5q-18 -3 -31 10t-13 38z" />
+ <glyph glyph-name="dagger" unicode="†" horiz-adv-x="394"
+d="M32 499h103l36 -11l-10 47v165h72v-165l-10 -47l36 11h103v-65h-104l-35 11l10 -43v-402l-13 -200h-47l-12 201v401l10 43l-36 -11h-103v65z" />
+ <glyph glyph-name="daggerdbl" unicode="‡" horiz-adv-x="394"
+d="M161 403l10 42l-36 -11h-103v65h103l36 -11l-10 46v166h72v-166l-10 -46l36 11h103v-65h-104l-35 11l10 -42v-130l-10 -42l35 11h104v-65h-103l-36 11l10 -46v-142l-13 -200h-46l-13 201v141l10 46l-36 -11h-103v65h103l36 -11l-10 42v130z" />
+ <glyph glyph-name="bullet" unicode="•" horiz-adv-x="363"
+d="M68 311q0 63 31.5 101t82.5 38q50 0 82 -36.5t32 -102.5t-32 -102.5t-82 -36.5q-51 0 -82.5 36.5t-31.5 102.5z" />
+ <glyph glyph-name="ellipsis" unicode="…" horiz-adv-x="657"
+d="M508 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43zM284 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43t-36.5 -14t-36.5 14t-13.5 43zM61 45q0 28 13.5 42t36.5 14t36.5 -14t13.5 -42q0 -29 -13.5 -43
+t-36.5 -14t-36.5 14t-13.5 43z" />
+ <glyph glyph-name="perthousand" unicode="‰" horiz-adv-x="948"
+d="M521 713l47 -30l-426 -695l-47 30zM55 542q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81zM120 542q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35
+t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5zM353 171q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81z
+M418 171q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5zM649 171q0 46 9.5 78.5t27 53t41 29.5t50.5 9t50.5 -8.5t41 -28t27 -52.5t9.5 -81t-9.5 -81
+t-27 -52.5t-41 -28t-50.5 -8.5t-50.5 8.5t-41 28t-27 52.5t-9.5 81zM714 171q0 -65 17.5 -90t45.5 -25q14 0 25.5 5t19.5 17.5t12.5 35t4.5 57.5q0 34 -4.5 56.5t-12.5 35.5t-19.5 18t-25.5 5q-15 0 -26.5 -5t-19.5 -18t-12.5 -35.5t-4.5 -56.5z" />
+ <glyph glyph-name="guilsinglleft" unicode="‹" horiz-adv-x="242"
+d="M30 259l129 230l50 -33l-82 -155l-38 -41l38 -36l87 -152l-50 -34z" />
+ <glyph glyph-name="guilsinglright" unicode="›" horiz-adv-x="242"
+d="M212 268l-128 -230l-50 33l81 155l39 41l-39 36l-87 151l51 35z" />
+ <glyph glyph-name="Euro" unicode="€"
+d="M28 453h50q10 73 31 121t51 78.5t66.5 45t77.5 14.5t70.5 -5.5t52.5 -16.5l-20 -66q-19 9 -43 14t-58 5q-27 0 -51 -10t-44 -31.5t-35 -56.5t-23 -92h223l-15 -63h-214q-1 -8 -1 -20v-20v-16t1 -15h198l-15 -62h-178q14 -105 56 -152.5t108 -47.5q63 0 102 28l17 -60
+q-24 -20 -60 -28.5t-73 -8.5q-92 0 -151 63t-75 206h-64l16 62h43v31v20t1 20h-60z" />
+ <glyph glyph-name="trademark" unicode="™" horiz-adv-x="731"
+d="M319 635h-106v-295h-72v295h-107v65h285v-65zM629 507l10 103h-4l-31 -85l-67 -140h-34l-68 139l-29 86h-4l13 -102v-168h-65v360h71l82 -167l22 -58l24 60l75 165h72v-360h-67v167z" />
+ <glyph glyph-name="uniF533" unicode="" horiz-adv-x="439"
+d="M131 500v-297l-6 -73h4l33 82l171 288h47v-529q0 -92 -27.5 -136t-87.5 -43q-6 0 -12 0.5t-13 1.5v63q45 -1 56.5 34.5t11.5 108.5v288l6 76h-4l-35 -84l-169 -280h-47v500h72zM159 702q5 -46 24.5 -65.5t45.5 -19.5t45.5 21t24.5 63l55 -16q-8 -60 -43.5 -91.5
+t-83.5 -31.5q-23 0 -44.5 6.5t-39 21t-29.5 37.5t-16 56z" />
+ <glyph glyph-name="uniF534" unicode="" horiz-adv-x="549"
+d="M219 797q0 21 14 36.5t40 15.5t40.5 -15.5t14.5 -36.5q0 -23 -14.5 -38t-40.5 -15t-40 15t-14 38zM43 350q0 178 57 270t174 92q63 0 107 -25.5t71.5 -72.5t40.5 -114t13 -150q0 -178 -57.5 -270t-174.5 -92q-62 0 -106 25.5t-72 72.5t-40.5 114t-12.5 150zM122 350
+q0 -59 8.5 -112t26.5 -93t47 -64t70 -24q75 0 114 72t39 221q0 58 -8.5 111t-26.5 93.5t-47 64.5t-71 24q-74 0 -113 -72t-39 -221z" />
+ <glyph glyph-name="uniF545" unicode="" horiz-adv-x="233"
+d="M136 119q0 -35 9.5 -50t26.5 -15q21 0 49 11l7 -58q-13 -8 -36.5 -13t-42.5 -5q-38 0 -61.5 23.5t-23.5 82.5v605h72v-581zM209 701h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="uniF546" unicode="" horiz-adv-x="447"
+d="M280 870h99v-21l-131 -97h-61zM433 631h-172v-631h-75v631h-172v69h419v-69z" />
+ <glyph glyph-name="uniF547" unicode="" horiz-adv-x="275"
+d="M9 500h61v99l72 23v-122h108v-65h-108v-298q0 -44 10.5 -63.5t34.5 -19.5q20 0 34.5 4.5t31.5 11.5l14 -57q-22 -11 -48.5 -17.5t-55.5 -6.5q-50 0 -71.5 32.5t-21.5 105.5v308h-61v65zM234 701h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="uniF548" unicode="" horiz-adv-x="463"
+d="M275 870h99v-21l-131 -97h-61zM218 221l18 -107h2l20 109l130 477h77l-212 -711h-40l-215 711h83z" />
+ <glyph glyph-name="uniF549" unicode="" horiz-adv-x="388"
+d="M180 207l20 -99h2l18 101l88 291h76l-171 -511h-35l-174 511h82zM207 720h78v-21l-82 -128h-43z" />
+ <glyph glyph-name="uniF54A" unicode="" horiz-adv-x="434"
+d="M109 333v65h18q15 0 37 1t35 4q40 10 68.5 41.5t28.5 79.5q0 66 -32 92.5t-81 26.5q-39 0 -69 -7t-49 -18l-20 61q18 11 59.5 22t93.5 11q34 0 66 -8t56.5 -27.5t39.5 -53t15 -83.5q0 -51 -25.5 -95.5t-78.5 -66.5v-4q56 -11 88.5 -53.5t32.5 -114.5q0 -58 -17.5 -99
+t-47 -67.5t-68.5 -39t-81 -12.5q-53 0 -88.5 7t-58.5 19l20 68q20 -11 52 -18t78 -7q27 0 51 9.5t42 27.5t28.5 45.5t10.5 63.5q0 65 -34.5 94.5t-92.5 34.5q-10 1 -17.5 1h-18.5h-41z" />
+ </font>
+</defs></svg>
Binary file web/res/fonts/PTSansNarrow.ttf has changed
Binary file web/res/fonts/PTSansNarrow.woff has changed
Binary file web/res/fonts/PT_Sans-Narrow-Web-Bold.ttf has changed
--- a/web/res/fonts/PT_Sans-Narrow-Web-Regular.css Mon Oct 15 17:01:50 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-@font-face {
- font-family: "PT Sans Narrow";
- font-weight: normal;
- font-style: normal;
- src: url("PT_Sans-Narrow-Web-Regular.ttf");
-}
-
-@font-face {
- font-family: "PT Sans Narrow";
- font-weight: bold;
- font-style: normal;
- src: url("PT_Sans-Narrow-Web-Bold.ttf");
-}
\ No newline at end of file
Binary file web/res/fonts/PT_Sans-Narrow-Web-Regular.ttf has changed
Binary file web/res/fonts/PT_Sans-Web-Bold.ttf has changed
Binary file web/res/fonts/PT_Sans-Web-BoldItalic.ttf has changed
Binary file web/res/fonts/PT_Sans-Web-Italic.ttf has changed
--- a/web/res/fonts/PT_Sans-Web-Regular.css Mon Oct 15 17:01:50 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-@font-face {
- font-family: "PT Sans";
- font-weight: normal;
- font-style: normal;
- src: url("PT_Sans-Web-Regular.ttf");
-}
-
-@font-face {
- font-family: "PT Sans";
- font-weight: bold;
- font-style: normal;
- src: url("PT_Sans-Web-Bold.ttf");
-}
-
-@font-face {
- font-family: "PT Sans";
- font-weight: normal;
- font-style: italic;
- src: url("PT_Sans-Web-Italic.ttf");
-}
-
-@font-face {
- font-family: "PT Sans";
- font-weight: bold;
- font-style: italic;
- src: url("PT_Sans-Web-BoldItalic.ttf");
-}
\ No newline at end of file
Binary file web/res/fonts/PT_Sans-Web-Regular.ttf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/js/LAB.min.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,5 @@
+/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
+ v2.0.3 (c) Kyle Simpson
+ MIT License
+*/
+(function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b<a.scripts.length;b++){if(a.scripts[b].ready&&a.scripts[b].exec_trigger){c=true;a.scripts[b].exec_trigger();a.scripts[b].exec_trigger=null}}return c}function t(a,c,b,d){a.onload=a.onreadystatechange=function(){if((a.readyState&&a.readyState!="complete"&&a.readyState!="loaded")||c[b])return;a.onload=a.onreadystatechange=null;d()}}function I(a){a.ready=a.finished=true;for(var c=0;c<a.finished_listeners.length;c++){a.finished_listeners[c]()}a.ready_listeners=[];a.finished_listeners=[]}function P(d,f,e,g,h){setTimeout(function(){var a,c=f.real_src,b;if("item"in i){if(!i[0]){setTimeout(arguments.callee,25);return}i=i[0]}a=document.createElement("script");if(f.type)a.type=f.type;if(f.charset)a.charset=f.charset;if(h){if(r){e.elem=a;if(E){a.preload=true;a.onpreload=g}else{a.onreadystatechange=function(){if(a.readyState=="loaded")g()}}a.src=c}else if(h&&c.indexOf(D)==0&&d[y]){b=new XMLHttpRequest();b.onreadystatechange=function(){if(b.readyState==4){b.onreadystatechange=function(){};e.text=b.responseText+"\n//@ sourceURL="+c;g()}};b.open("GET",c);b.send()}else{a.type="text/cache-script";t(a,e,"ready",function(){i.removeChild(a);g()});a.src=c;i.insertBefore(a,i.firstChild)}}else if(F){a.async=false;t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}else{t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}},0)}function J(){var l={},Q=r||M,n=[],p={},m;l[y]=true;l[z]=false;l[u]=false;l[A]=false;l[B]="";function R(a,c,b){var d;function f(){if(d!=null){d=null;I(b)}}if(p[c.src].finished)return;if(!a[u])p[c.src].finished=true;d=b.elem||document.createElement("script");if(c.type)d.type=c.type;if(c.charset)d.charset=c.charset;t(d,b,"finished",f);if(b.elem){b.elem=null}else if(b.text){d.onload=d.onreadystatechange=null;d.text=b.text}else{d.src=c.real_src}i.insertBefore(d,i.firstChild);if(b.text){f()}}function S(c,b,d,f){var e,g,h=function(){b.ready_cb(b,function(){R(c,b,e)})},j=function(){b.finished_cb(b,d)};b.src=N(b.src,c[B]);b.real_src=b.src+(c[A]?((/\?.*$/.test(b.src)?"&_":"?_")+~~(Math.random()*1E9)+"="):"");if(!p[b.src])p[b.src]={items:[],finished:false};g=p[b.src].items;if(c[u]||g.length==0){e=g[g.length]={ready:false,finished:false,ready_listeners:[h],finished_listeners:[j]};P(c,b,e,((f)?function(){e.ready=true;for(var a=0;a<e.ready_listeners.length;a++){e.ready_listeners[a]()}e.ready_listeners=[]}:function(){I(e)}),f)}else{e=g[0];if(e.finished){j()}else{e.finished_listeners.push(j)}}}function v(){var e,g=s(l,{}),h=[],j=0,w=false,k;function T(a,c){a.ready=true;a.exec_trigger=c;x()}function U(a,c){a.ready=a.finished=true;a.exec_trigger=null;for(var b=0;b<c.scripts.length;b++){if(!c.scripts[b].finished)return}c.finished=true;x()}function x(){while(j<h.length){if(G(h[j])){try{h[j++]()}catch(err){}continue}else if(!h[j].finished){if(O(h[j]))continue;break}j++}if(j==h.length){w=false;k=false}}function V(){if(!k||!k.scripts){h.push(k={scripts:[],finished:true})}}e={script:function(){for(var f=0;f<arguments.length;f++){(function(a,c){var b;if(!H(a)){c=[a]}for(var d=0;d<c.length;d++){V();a=c[d];if(G(a))a=a();if(!a)continue;if(H(a)){b=[].slice.call(a);b.unshift(d,1);[].splice.apply(c,b);d--;continue}if(typeof a=="string")a={src:a};a=s(a,{ready:false,ready_cb:T,finished:false,finished_cb:U});k.finished=false;k.scripts.push(a);S(g,a,k,(Q&&w));w=true;if(g[z])e.wait()}})(arguments[f],arguments[f])}return e},wait:function(){if(arguments.length>0){for(var a=0;a<arguments.length;a++){h.push(arguments[a])}k=h[h.length-1]}else k=false;x();return e}};return{script:e.script,wait:e.wait,setOptions:function(a){s(a,g);return e}}}m={setGlobalDefaults:function(a){s(a,l);return m},setOptions:function(){return v().setOptions.apply(null,arguments)},script:function(){return v().script.apply(null,arguments)},wait:function(){return v().wait.apply(null,arguments)},queueScript:function(){n[n.length]={type:"script",args:[].slice.call(arguments)};return m},queueWait:function(){n[n.length]={type:"wait",args:[].slice.call(arguments)};return m},runQueue:function(){var a=m,c=n.length,b=c,d;for(;--b>=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/js/ZeroClipboard.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,311 @@
+// Simple Set Clipboard System
+// Author: Joseph Huckaby
+
+var ZeroClipboard = {
+
+ version: "1.0.7",
+ clients: {}, // registered upload clients on page, indexed by id
+ moviePath: 'ZeroClipboard.swf', // URL to movie
+ nextId: 1, // ID of next movie
+
+ $: function(thingy) {
+ // simple DOM lookup utility function
+ if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+ if (!thingy.addClass) {
+ // extend element with a few useful methods
+ thingy.hide = function() { this.style.display = 'none'; };
+ thingy.show = function() { this.style.display = ''; };
+ thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
+ thingy.removeClass = function(name) {
+ var classes = this.className.split(/\s+/);
+ var idx = -1;
+ for (var k = 0; k < classes.length; k++) {
+ if (classes[k] == name) { idx = k; k = classes.length; }
+ }
+ if (idx > -1) {
+ classes.splice( idx, 1 );
+ this.className = classes.join(' ');
+ }
+ return this;
+ };
+ thingy.hasClass = function(name) {
+ return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
+ };
+ }
+ return thingy;
+ },
+
+ setMoviePath: function(path) {
+ // set path to ZeroClipboard.swf
+ this.moviePath = path;
+ },
+
+ dispatch: function(id, eventName, args) {
+ // receive event from flash movie, send to client
+ var client = this.clients[id];
+ if (client) {
+ client.receiveEvent(eventName, args);
+ }
+ },
+
+ register: function(id, client) {
+ // register new client to receive events
+ this.clients[id] = client;
+ },
+
+ getDOMObjectPosition: function(obj, stopObj) {
+ // get absolute coordinates for dom element
+ var info = {
+ left: 0,
+ top: 0,
+ width: obj.width ? obj.width : obj.offsetWidth,
+ height: obj.height ? obj.height : obj.offsetHeight
+ };
+
+ while (obj && (obj != stopObj)) {
+ info.left += obj.offsetLeft;
+ info.top += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+
+ return info;
+ },
+
+ Client: function(elem) {
+ // constructor for new simple upload client
+ this.handlers = {};
+
+ // unique ID
+ this.id = ZeroClipboard.nextId++;
+ this.movieId = 'ZeroClipboardMovie_' + this.id;
+
+ // register client with singleton to receive flash events
+ ZeroClipboard.register(this.id, this);
+
+ // create movie
+ if (elem) this.glue(elem);
+ }
+};
+
+ZeroClipboard.Client.prototype = {
+
+ id: 0, // unique ID for us
+ ready: false, // whether movie is ready to receive events or not
+ movie: null, // reference to movie object
+ clipText: '', // text to copy to clipboard
+ handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
+ cssEffects: true, // enable CSS mouse effects on dom container
+ handlers: null, // user event handlers
+
+ glue: function(elem, appendElem, stylesToAdd) {
+ // glue to DOM element
+ // elem can be ID or actual DOM element object
+ this.domElement = ZeroClipboard.$(elem);
+
+ // float just above object, or zIndex 99 if dom element isn't set
+ var zIndex = 99;
+ if (this.domElement.style.zIndex) {
+ zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+ }
+
+ if (typeof(appendElem) == 'string') {
+ appendElem = ZeroClipboard.$(appendElem);
+ }
+ else if (typeof(appendElem) == 'undefined') {
+ appendElem = document.getElementsByTagName('body')[0];
+ }
+
+ // find X/Y position of domElement
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+
+ // create floating DIV above element
+ this.div = document.createElement('div');
+ var style = this.div.style;
+ style.position = 'absolute';
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ style.width = '' + box.width + 'px';
+ style.height = '' + box.height + 'px';
+ style.zIndex = zIndex;
+
+ if (typeof(stylesToAdd) == 'object') {
+ for (addedStyle in stylesToAdd) {
+ style[addedStyle] = stylesToAdd[addedStyle];
+ }
+ }
+
+ // style.backgroundColor = '#f00'; // debug
+
+ appendElem.appendChild(this.div);
+
+ this.div.innerHTML = this.getHTML( box.width, box.height );
+ },
+
+ getHTML: function(width, height) {
+ // return HTML for movie
+ var html = '';
+ var flashvars = 'id=' + this.id +
+ '&width=' + width +
+ '&height=' + height;
+
+ if (navigator.userAgent.match(/MSIE/)) {
+ // IE gets an OBJECT tag
+ var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+ html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
+ }
+ else {
+ // all other browsers get an EMBED tag
+ html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
+ }
+ return html;
+ },
+
+ hide: function() {
+ // temporarily hide floater offscreen
+ if (this.div) {
+ this.div.style.left = '-2000px';
+ }
+ },
+
+ show: function() {
+ // show ourselves after a call to hide()
+ this.reposition();
+ },
+
+ destroy: function() {
+ // destroy control and floater
+ if (this.domElement && this.div) {
+ this.hide();
+ this.div.innerHTML = '';
+
+ var body = document.getElementsByTagName('body')[0];
+ try { body.removeChild( this.div ); } catch(e) {;}
+
+ this.domElement = null;
+ this.div = null;
+ }
+ },
+
+ reposition: function(elem) {
+ // reposition our floating div, optionally to new container
+ // warning: container CANNOT change size, only position
+ if (elem) {
+ this.domElement = ZeroClipboard.$(elem);
+ if (!this.domElement) this.hide();
+ }
+
+ if (this.domElement && this.div) {
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+ var style = this.div.style;
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ }
+ },
+
+ setText: function(newText) {
+ // set text to be copied to clipboard
+ this.clipText = newText;
+ if (this.ready) this.movie.setText(newText);
+ },
+
+ addEventListener: function(eventName, func) {
+ // add user event listener for event
+ // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+ if (!this.handlers[eventName]) this.handlers[eventName] = [];
+ this.handlers[eventName].push(func);
+ },
+
+ setHandCursor: function(enabled) {
+ // enable hand cursor (true), or default arrow cursor (false)
+ this.handCursorEnabled = enabled;
+ if (this.ready) this.movie.setHandCursor(enabled);
+ },
+
+ setCSSEffects: function(enabled) {
+ // enable or disable CSS effects on DOM container
+ this.cssEffects = !!enabled;
+ },
+
+ receiveEvent: function(eventName, args) {
+ // receive event from flash
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+
+ // special behavior for certain events
+ switch (eventName) {
+ case 'load':
+ // movie claims it is ready, but in IE this isn't always the case...
+ // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+ this.movie = document.getElementById(this.movieId);
+ if (!this.movie) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 1 );
+ return;
+ }
+
+ // firefox on pc needs a "kick" in order to set these in certain cases
+ if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 100 );
+ this.ready = true;
+ return;
+ }
+
+ this.ready = true;
+ this.movie.setText( this.clipText );
+ this.movie.setHandCursor( this.handCursorEnabled );
+ break;
+
+ case 'mouseover':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('hover');
+ if (this.recoverActive) this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseout':
+ if (this.domElement && this.cssEffects) {
+ this.recoverActive = false;
+ if (this.domElement.hasClass('active')) {
+ this.domElement.removeClass('active');
+ this.recoverActive = true;
+ }
+ this.domElement.removeClass('hover');
+ }
+ break;
+
+ case 'mousedown':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseup':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.removeClass('active');
+ this.recoverActive = false;
+ }
+ break;
+ } // switch eventName
+
+ if (this.handlers[eventName]) {
+ for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+ var func = this.handlers[eventName][idx];
+
+ if (typeof(func) == 'function') {
+ // actual function reference
+ func(this, args);
+ }
+ else if ((typeof(func) == 'object') && (func.length == 2)) {
+ // PHP style object + method, i.e. [myObject, 'myMethod']
+ func[0][ func[1] ](this, args);
+ }
+ else if (typeof(func) == 'string') {
+ // name of function
+ window[func](this, args);
+ }
+ } // foreach event handler defined
+ } // user defined handler for event
+ }
+
+};
Binary file web/res/js/ZeroClipboard.swf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/js/jquery.mousewheel.min.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,12 @@
+/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
+ *
+ * Version: 3.0.6
+ *
+ * Requires: 1.2.2+
+ */
+(function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY/120),c.wheelDeltaX!==undefined&&(g=-1*c.wheelDeltaX/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery)
--- a/web/res/js/json2.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/js/json2.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,6 +1,6 @@
/*
- http://www.JSON.org/json2.js
- 2011-02-23
+ json2.js
+ 2011-10-19
Public Domain.
@@ -146,7 +146,7 @@
redistribute.
*/
-/*jslint evil: true, strict: false, regexp: false */
+/*jslint evil: true, regexp: true */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
@@ -165,7 +165,7 @@
}
(function () {
- "use strict";
+ 'use strict';
function f(n) {
// Format integers to have at least two digits.
@@ -176,13 +176,14 @@
Date.prototype.toJSON = function (key) {
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
+ return isFinite(this.valueOf())
+ ? this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z'
+ : null;
};
String.prototype.toJSON =
@@ -218,8 +219,9 @@
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ return typeof c === 'string'
+ ? c
+ : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
@@ -303,9 +305,11 @@
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
- v = partial.length === 0 ? '[]' : gap ?
- '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
- '[' + partial.join(',') + ']';
+ v = partial.length === 0
+ ? '[]'
+ : gap
+ ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+ : '[' + partial.join(',') + ']';
gap = mind;
return v;
}
@@ -340,9 +344,11 @@
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
- v = partial.length === 0 ? '{}' : gap ?
- '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
- '{' + partial.join(',') + '}';
+ v = partial.length === 0
+ ? '{}'
+ : gap
+ ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+ : '{' + partial.join(',') + '}';
gap = mind;
return v;
}
@@ -468,8 +474,9 @@
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
+ return typeof reviver === 'function'
+ ? walk({'': j}, '')
+ : j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/js/popcorn-complete.min.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,200 @@
+/*
+ * popcorn.js version 1.2
+ * http://popcornjs.org
+ *
+ * Copyright 2011, Mozilla Foundation
+ * Licensed under the MIT license
+ */
+
+(function(g,b){function d(e,m){return function(){if(n.plugin.debug)return e.apply(this,arguments);try{return e.apply(this,arguments)}catch(q){n.plugin.errors.push({plugin:m,thrown:q,source:e.toString()});this.emit("error",n.plugin.errors)}}}if(b.addEventListener){var a=Array.prototype,c=Object.prototype,f=a.forEach,h=a.slice,p=c.hasOwnProperty,o=c.toString,l=g.Popcorn,i=/^(#([\w\-\_\.]+))$/,r=[],k=false,j={events:{hash:{},apis:{}}},v=function(){return g.requestAnimationFrame||g.webkitRequestAnimationFrame||
+g.mozRequestAnimationFrame||g.oRequestAnimationFrame||g.msRequestAnimationFrame||function(e){g.setTimeout(e,16)}}(),w=function(e){var m=e.media.currentTime,q=e.options.frameAnimation,s=e.data.disabled,t=e.data.trackEvents,u=t.animating,x=t.startIndex,A=n.registryByName,B=0,D,E;for(x=Math.min(x+1,t.byStart.length-2);x>0&&t.byStart[x];){B=t.byStart[x];E=(D=B._natives)&&D.type;if(!D||A[E]||e[E])if(B.start<=m&&B.end>m&&s.indexOf(E)===-1){if(!B._running){B._running=true;D.start.call(e,null,B);q&&B&&B._running&&
+B.natives.frame&&D.frame.call(e,null,B,m)}}else if(B._running===true){B._running=false;D.end.call(e,null,B);if(q&&B._natives.frame){B=u.indexOf(B);B>=0&&u.splice(B,1)}}x--}},n=function(e,m){return new n.p.init(e,m||null)};n.version="1.2";n.isSupported=true;n.instances=[];n.p=n.prototype={init:function(e,m){var q,s=this;if(typeof e==="function")if(b.readyState==="complete")e(b,n);else{r.push(e);if(!k){k=true;var t=function(){b.removeEventListener("DOMContentLoaded",t,false);for(var x=0,A=r.length;x<
+A;x++)r[x].call(b,n);r=null};b.addEventListener("DOMContentLoaded",t,false)}}else{this.media=(q=i.exec(e))&&q.length&&q[2]?b.getElementById(q[2]):e;this[this.media.nodeName&&this.media.nodeName.toLowerCase()||"video"]=this.media;n.instances.push(this);this.options=m||{};this.isDestroyed=false;this.data={timeUpdate:n.nop,disabled:[],events:{},hooks:{},history:[],state:{volume:this.media.volume},trackRefs:{},trackEvents:{byStart:[{start:-1,end:-1}],byEnd:[{start:-1,end:-1}],animating:[],startIndex:0,
+endIndex:0,previousUpdateTime:-1}};var u=function(){s.media.removeEventListener("loadeddata",u,false);var x;x=s.media.duration;x=x!=x?Number.MAX_VALUE:x+1;n.addTrackEvent(s,{start:x,end:x});if(s.options.frameAnimation){s.data.timeUpdate=function(){n.timeUpdate(s,{});s.emit("timeupdate");!s.isDestroyed&&v(s.data.timeUpdate)};!s.isDestroyed&&v(s.data.timeUpdate)}else{s.data.timeUpdate=function(A){n.timeUpdate(s,A)};s.isDestroyed||s.media.addEventListener("timeupdate",s.data.timeUpdate,false)}};s.media.readyState>=
+2?u():s.media.addEventListener("loadeddata",u,false);return this}}};n.p.init.prototype=n.p;n.forEach=function(e,m,q){if(!e||!m)return{};q=q||this;var s,t;if(f&&e.forEach===f)return e.forEach(m,q);if(o.call(e)==="[object NodeList]"){s=0;for(t=e.length;s<t;s++)m.call(q,e[s],s,e);return e}for(s in e)p.call(e,s)&&m.call(q,e[s],s,e);return e};n.extend=function(e){var m=h.call(arguments,1);n.forEach(m,function(q){for(var s in q)e[s]=q[s]});return e};n.extend(n,{noConflict:function(e){if(e)g.Popcorn=l;return n},
+error:function(e){throw Error(e);},guid:function(e){n.guid.counter++;return(e?e:"")+(+new Date+n.guid.counter)},sizeOf:function(e){var m=0,q;for(q in e)m++;return m},isArray:Array.isArray||function(e){return o.call(e)==="[object Array]"},nop:function(){},position:function(e){e=e.getBoundingClientRect();var m={},q=b.documentElement,s=b.body,t,u,x;t=q.clientTop||s.clientTop||0;u=q.clientLeft||s.clientLeft||0;x=g.pageYOffset&&q.scrollTop||s.scrollTop;q=g.pageXOffset&&q.scrollLeft||s.scrollLeft;t=Math.ceil(e.top+
+x-t);u=Math.ceil(e.left+q-u);for(var A in e)m[A]=Math.round(e[A]);return n.extend({},m,{top:t,left:u})},disable:function(e,m){var q=e.data.disabled;q.indexOf(m)===-1&&q.push(m);w(e);return e},enable:function(e,m){var q=e.data.disabled,s=q.indexOf(m);s>-1&&q.splice(s,1);w(e);return e},destroy:function(e){var m=e.data.events,q,s,t;for(s in m){q=m[s];for(t in q)delete q[t];m[s]=null}if(!e.isDestroyed){e.data.timeUpdate&&e.media.removeEventListener("timeupdate",e.data.timeUpdate,false);e.isDestroyed=
+true}}});n.guid.counter=1;n.extend(n.p,function(){var e={};n.forEach("load play pause currentTime playbackRate volume duration preload playbackRate autoplay loop controls muted buffered readyState seeking paused played seekable ended".split(/\s+/g),function(m){e[m]=function(q){if(typeof this.media[m]==="function"){if(q!=null&&/play|pause/.test(m))this.media.currentTime=n.util.toSeconds(q);this.media[m]();return this}if(q!=null){this.media[m]=q;return this}return this.media[m]}});return e}());n.forEach("enable disable".split(" "),
+function(e){n.p[e]=function(m){return n[e](this,m)}});n.extend(n.p,{roundTime:function(){return-~this.media.currentTime},exec:function(e,m){n.addTrackEvent(this,{start:e,end:e+1,_running:false,_natives:{start:m||n.nop,end:n.nop,type:"cue"}});return this},mute:function(e){e=e==null||e===true?"muted":"unmuted";if(e==="unmuted"){this.media.muted=false;this.media.volume=this.data.state.volume}if(e==="muted"){this.data.state.volume=this.media.volume;this.media.muted=true}this.emit(e);return this},unmute:function(e){return this.mute(e==
+null?false:!e)},position:function(){return n.position(this.media)},toggle:function(e){return n[this.data.disabled.indexOf(e)>-1?"enable":"disable"](this,e)},defaults:function(e,m){if(n.isArray(e)){n.forEach(e,function(q){for(var s in q)this.defaults(s,q[s])},this);return this}if(!this.options.defaults)this.options.defaults={};this.options.defaults[e]||(this.options.defaults[e]={});n.extend(this.options.defaults[e],m);return this}});n.Events={UIEvents:"blur focus focusin focusout load resize scroll unload",
+MouseEvents:"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",Events:"loadstart progress suspend emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange"};n.Events.Natives=n.Events.UIEvents+" "+n.Events.MouseEvents+" "+n.Events.Events;j.events.apiTypes=["UIEvents","MouseEvents","Events"];(function(e,m){for(var q=j.events.apiTypes,s=e.Natives.split(/\s+/g),
+t=0,u=s.length;t<u;t++)m.hash[s[t]]=true;q.forEach(function(x){m.apis[x]={};for(var A=e[x].split(/\s+/g),B=A.length,D=0;D<B;D++)m.apis[x][A[D]]=true})})(n.Events,j.events);n.events={isNative:function(e){return!!j.events.hash[e]},getInterface:function(e){if(!n.events.isNative(e))return false;var m=j.events,q=m.apiTypes;m=m.apis;for(var s=0,t=q.length,u,x;s<t;s++){x=q[s];if(m[x][e]){u=x;break}}return u},all:n.Events.Natives.split(/\s+/g),fn:{trigger:function(e,m){var q;if(this.data.events[e]&&n.sizeOf(this.data.events[e])){if(q=
+n.events.getInterface(e)){q=b.createEvent(q);q.initEvent(e,true,true,g,1);this.media.dispatchEvent(q);return this}n.forEach(this.data.events[e],function(s){s.call(this,m)},this)}return this},listen:function(e,m){var q=this,s=true,t=n.events.hooks[e],u;if(!this.data.events[e]){this.data.events[e]={};s=false}if(t){t.add&&t.add.call(this,{},m);if(t.bind)e=t.bind;if(t.handler){u=m;m=function(x){t.handler.call(q,x,u)}}s=true;if(!this.data.events[e]){this.data.events[e]={};s=false}}this.data.events[e][m.name||
+m.toString()+n.guid()]=m;!s&&n.events.all.indexOf(e)>-1&&this.media.addEventListener(e,function(x){n.forEach(q.data.events[e],function(A){typeof A==="function"&&A.call(q,x)})},false);return this},unlisten:function(e,m){if(this.data.events[e]&&this.data.events[e][m]){delete this.data.events[e][m];return this}this.data.events[e]=null;return this}},hooks:{canplayall:{bind:"canplaythrough",add:function(e,m){var q=false;if(this.media.readyState){m.call(this,e);q=true}this.data.hooks.canplayall={fired:q}},
+handler:function(e,m){if(!this.data.hooks.canplayall.fired){m.call(this,e);this.data.hooks.canplayall.fired=true}}}}};n.forEach([["trigger","emit"],["listen","on"],["unlisten","off"]],function(e){n.p[e[0]]=n.p[e[1]]=n.events.fn[e[0]]});n.addTrackEvent=function(e,m){if(m&&m._natives&&m._natives.type&&e.options.defaults&&e.options.defaults[m._natives.type])m=n.extend({},e.options.defaults[m._natives.type],m);if(m._natives){m._id=!m.id?n.guid(m._natives.type):m.id;e.data.history.push(m._id)}m.start=
+n.util.toSeconds(m.start,e.options.framerate);m.end=n.util.toSeconds(m.end,e.options.framerate);var q=e.data.trackEvents.byStart,s=e.data.trackEvents.byEnd,t;for(t=q.length-1;t>=0;t--)if(m.start>=q[t].start){q.splice(t+1,0,m);break}for(q=s.length-1;q>=0;q--)if(m.end>s[q].end){s.splice(q+1,0,m);break}if(m._natives&&(n.registryByName[m._natives.type]||e[m._natives.type])){s=e.media.currentTime;if(m.end>s&&m.start<=s&&e.data.disabled.indexOf(m._natives.type)===-1){m._running=true;m._natives.start.call(e,
+null,m);if(e.options.frameAnimation&&m._natives.frame){e.data.trackEvents.animating.push(m);m._natives.frame.call(e,null,m,s)}}}t<=e.data.trackEvents.startIndex&&m.start<=e.data.trackEvents.previousUpdateTime&&e.data.trackEvents.startIndex++;q<=e.data.trackEvents.endIndex&&m.end<e.data.trackEvents.previousUpdateTime&&e.data.trackEvents.endIndex++;this.timeUpdate(e,null,true);m._id&&n.addTrackEvent.ref(e,m)};n.addTrackEvent.ref=function(e,m){e.data.trackRefs[m._id]=m;return e};n.removeTrackEvent=function(e,
+m){for(var q,s,t=e.data.history.length,u=e.data.trackEvents.byStart.length,x=0,A=0,B=[],D=[],E=[],z=[];--u>-1;){q=e.data.trackEvents.byStart[x];s=e.data.trackEvents.byEnd[x];if(!q._id){B.push(q);D.push(s)}if(q._id){q._id!==m&&B.push(q);s._id!==m&&D.push(s);if(q._id===m){A=x;q._natives._teardown&&q._natives._teardown.call(e,q)}}x++}u=e.data.trackEvents.animating.length;x=0;if(u)for(;--u>-1;){q=e.data.trackEvents.animating[x];q._id||E.push(q);q._id&&q._id!==m&&E.push(q);x++}A<=e.data.trackEvents.startIndex&&
+e.data.trackEvents.startIndex--;A<=e.data.trackEvents.endIndex&&e.data.trackEvents.endIndex--;e.data.trackEvents.byStart=B;e.data.trackEvents.byEnd=D;e.data.trackEvents.animating=E;for(u=0;u<t;u++)e.data.history[u]!==m&&z.push(e.data.history[u]);e.data.history=z;n.removeTrackEvent.ref(e,m)};n.removeTrackEvent.ref=function(e,m){delete e.data.trackRefs[m];return e};n.getTrackEvents=function(e){var m=[];e=e.data.trackEvents.byStart;for(var q=e.length,s=0,t;s<q;s++){t=e[s];t._id&&m.push(t)}return m};
+n.getTrackEvents.ref=function(e){return e.data.trackRefs};n.getTrackEvent=function(e,m){return e.data.trackRefs[m]};n.getTrackEvent.ref=function(e,m){return e.data.trackRefs[m]};n.getLastTrackEventId=function(e){return e.data.history[e.data.history.length-1]};n.timeUpdate=function(e,m){var q=e.media.currentTime,s=e.data.trackEvents.previousUpdateTime,t=e.data.trackEvents,u=t.animating,x=t.endIndex,A=t.startIndex,B=0,D=t.byStart.length,E=t.byEnd.length,z=n.registryByName,F,H,G;if(s<=q){for(;t.byEnd[x]&&
+t.byEnd[x].end<=q;){F=t.byEnd[x];G=(s=F._natives)&&s.type;if(!s||z[G]||e[G]){if(F._running===true){F._running=false;s.end.call(e,m,F);e.emit("trackend",n.extend({},F,{plugin:G,type:"trackend"}))}x++}else{n.removeTrackEvent(e,F._id);return}}for(;t.byStart[A]&&t.byStart[A].start<=q;){H=t.byStart[A];G=(s=H._natives)&&s.type;if(!s||z[G]||e[G]){if(H.end>q&&H._running===false&&e.data.disabled.indexOf(G)===-1){H._running=true;s.start.call(e,m,H);e.emit("trackstart",n.extend({},H,{plugin:G,type:"trackstart"}));
+e.options.frameAnimation&&H&&H._running&&H._natives.frame&&u.push(H)}A++}else{n.removeTrackEvent(e,H._id);return}}if(e.options.frameAnimation)for(;B<u.length;){z=u[B];if(z._running){z._natives.frame.call(e,m,z,q);B++}else u.splice(B,1)}}else if(s>q){for(;t.byStart[A]&&t.byStart[A].start>q;){H=t.byStart[A];G=(s=H._natives)&&s.type;if(!s||z[G]||e[G]){if(H._running===true){H._running=false;s.end.call(e,m,H);e.emit("trackend",n.extend({},F,{plugin:G,type:"trackend"}))}A--}else{n.removeTrackEvent(e,H._id);
+return}}for(;t.byEnd[x]&&t.byEnd[x].end>q;){F=t.byEnd[x];G=(s=F._natives)&&s.type;if(!s||z[G]||e[G]){if(F.start<=q&&F._running===false&&e.data.disabled.indexOf(G)===-1){F._running=true;s.start.call(e,m,F);e.emit("trackstart",n.extend({},H,{plugin:G,type:"trackstart"}));e.options.frameAnimation&&F&&F._running&&F._natives.frame&&u.push(F)}x--}else{n.removeTrackEvent(e,F._id);return}}if(e.options.frameAnimation)for(;B<u.length;){z=u[B];if(z._running){z._natives.frame.call(e,m,z,q);B++}else u.splice(B,
+1)}}t.endIndex=x;t.startIndex=A;t.previousUpdateTime=q;t.byStart.length<D&&t.startIndex--;t.byEnd.length<E&&t.endIndex--};n.extend(n.p,{getTrackEvents:function(){return n.getTrackEvents.call(null,this)},getTrackEvent:function(e){return n.getTrackEvent.call(null,this,e)},getLastTrackEventId:function(){return n.getLastTrackEventId.call(null,this)},removeTrackEvent:function(e){n.removeTrackEvent.call(null,this,e);return this},removePlugin:function(e){n.removePlugin.call(null,this,e);return this},timeUpdate:function(e){n.timeUpdate.call(null,
+this,e);return this},destroy:function(){n.destroy.call(null,this);return this}});n.manifest={};n.registry=[];n.registryByName={};n.plugin=function(e,m,q){if(n.protect.natives.indexOf(e.toLowerCase())>=0)n.error("'"+e+"' is a protected function name");else{var s=["start","end"],t={},u=typeof m==="function",x=["_setup","_teardown","start","end","frame"],A=function(E,z){E=E||n.nop;z=z||n.nop;return function(){E.apply(this,arguments);z.apply(this,arguments)}};n.manifest[e]=q=q||m.manifest||{};x.forEach(function(E){m[E]=
+d(m[E]||n.nop,e)});var B=function(E,z){if(!z)return this;var F=z._natives={},H="",G;n.extend(F,E);z._natives.type=e;z._running=false;F.start=F.start||F["in"];F.end=F.end||F.out;F._teardown=A(function(){var I=h.call(arguments);I.unshift(null);I[1]._running&&F.end.apply(this,I)},F._teardown);z.compose=z.compose&&z.compose.split(" ")||[];z.effect=z.effect&&z.effect.split(" ")||[];z.compose=z.compose.concat(z.effect);z.compose.forEach(function(I){H=n.compositions[I]||{};x.forEach(function(J){F[J]=A(F[J],
+H[J])})});z._natives.manifest=q;if(!("start"in z))z.start=z["in"]||0;if(!z.end&&z.end!==0)z.end=z.out||Number.MAX_VALUE;if(!p.call(z,"toString"))z.toString=function(){var I=["start: "+z.start,"end: "+z.end,"id: "+(z.id||z._id)];z.target!=null&&I.push("target: "+z.target);return e+" ( "+I.join(", ")+" )"};if(!z.target){G="options"in q&&q.options;z.target=G&&"target"in G&&G.target}z._natives._setup&&z._natives._setup.call(this,z);n.addTrackEvent(this,n.extend(z,z));n.forEach(E,function(I,J){J!=="type"&&
+s.indexOf(J)===-1&&this.on(J,I)},this);return this};n.p[e]=t[e]=function(E){E=n.extend({},this.options.defaults&&this.options.defaults[e]||{},E);return B.call(this,u?m.call(this,E):m,E)};var D={fn:t[e],definition:m,base:m,parents:[],name:e};n.registry.push(n.extend(t,D,{type:e}));n.registryByName[e]=D;return t}};n.plugin.errors=[];n.plugin.debug=false;n.removePlugin=function(e,m){if(!m){m=e;e=n.p;if(n.protect.natives.indexOf(m.toLowerCase())>=0){n.error("'"+m+"' is a protected function name");return}var q=
+n.registry.length,s;for(s=0;s<q;s++)if(n.registry[s].name===m){n.registry.splice(s,1);delete n.registryByName[m];delete n.manifest[m];delete e[m];return}}q=e.data.trackEvents.byStart;s=e.data.trackEvents.byEnd;var t=e.data.trackEvents.animating,u,x;u=0;for(x=q.length;u<x;u++){if(q[u]&&q[u]._natives&&q[u]._natives.type===m){q[u]._natives._teardown&&q[u]._natives._teardown.call(e,q[u]);q.splice(u,1);u--;x--;if(e.data.trackEvents.startIndex<=u){e.data.trackEvents.startIndex--;e.data.trackEvents.endIndex--}}s[u]&&
+s[u]._natives&&s[u]._natives.type===m&&s.splice(u,1)}u=0;for(x=t.length;u<x;u++)if(t[u]&&t[u]._natives&&t[u]._natives.type===m){t.splice(u,1);u--;x--}};n.compositions={};n.compose=function(e,m,q){n.manifest[e]=q||m.manifest||{};n.compositions[e]=m};n.plugin.effect=n.effect=n.compose;var y=/\?/,C={url:"",data:"",dataType:"",success:n.nop,type:"GET",async:true,xhr:function(){return new g.XMLHttpRequest}};n.xhr=function(e){e.dataType=e.dataType&&e.dataType.toLowerCase()||null;if(e.dataType&&(e.dataType===
+"jsonp"||e.dataType==="script"))n.xhr.getJSONP(e.url,e.success,e.dataType==="script");else{e=n.extend({},C,e);e.ajax=e.xhr();if(e.ajax){if(e.type==="GET"&&e.data){e.url+=(y.test(e.url)?"&":"?")+e.data;e.data=null}e.ajax.open(e.type,e.url,e.async);e.ajax.send(e.data||null);return n.xhr.httpData(e)}}};n.xhr.httpData=function(e){var m,q=null,s,t=null;e.ajax.onreadystatechange=function(){if(e.ajax.readyState===4){try{q=JSON.parse(e.ajax.responseText)}catch(u){}m={xml:e.ajax.responseXML,text:e.ajax.responseText,
+json:q};if(!m.xml||!m.xml.documentElement){m.xml=null;try{s=new DOMParser;t=s.parseFromString(e.ajax.responseText,"text/xml");if(!t.getElementsByTagName("parsererror").length)m.xml=t}catch(x){}}if(e.dataType)m=m[e.dataType];e.success.call(e.ajax,m)}};return m};n.xhr.getJSONP=function(e,m,q){var s=b.head||b.getElementsByTagName("head")[0]||b.documentElement,t=b.createElement("script"),u=e.split("?")[1],x=false,A=[],B,D;if(u&&!q)A=u.split("&");if(A.length)D=A[A.length-1].split("=");B=A.length?D[1]?
+D[1]:D[0]:"jsonp";if(!u&&!q)e+="?callback="+B;if(B&&!q){if(window[B])B=n.guid(B);window[B]=function(E){m&&m(E);x=true};e=e.replace(D.join("="),D[0]+"="+B)}t.addEventListener("load",function(){q&&m&&m();x&&delete window[B];s.removeChild(t)},false);t.src=e;s.insertBefore(t,s.firstChild)};n.getJSONP=n.xhr.getJSONP;n.getScript=n.xhr.getScript=function(e,m){return n.xhr.getJSONP(e,m,true)};n.util={toSeconds:function(e,m){var q=/^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,s,t,u;if(typeof e==="number")return e;
+typeof e==="string"&&!q.test(e)&&n.error("Invalid time format");q=e.split(":");s=q.length-1;t=q[s];if(t.indexOf(";")>-1){t=t.split(";");u=0;if(m&&typeof m==="number")u=parseFloat(t[1],10)/m;q[s]=parseInt(t[0],10)+u}s=q[0];return{1:parseFloat(s,10),2:parseInt(s,10)*60+parseFloat(q[1],10),3:parseInt(s,10)*3600+parseInt(q[1],10)*60+parseFloat(q[2],10)}[q.length||1]}};n.p.cue=n.p.exec;n.protect={natives:function(e){return Object.keys?Object.keys(e):function(m){var q,s=[];for(q in m)p.call(m,q)&&s.push(q);
+return s}(e)}(n.p).map(function(e){return e.toLowerCase()})};n.forEach({listen:"on",unlisten:"off",trigger:"emit",exec:"cue"},function(e,m){var q=n.p[m];n.p[m]=function(){if(typeof console!=="undefined"&&console.warn){console.warn("Deprecated method '"+m+"', "+(e==null?"do not use.":"use '"+e+"' instead."));n.p[m]=q}return n.p[e].apply(this,[].slice.call(arguments))}});g.Popcorn=n}else{g.Popcorn={isSupported:false};for(a="removeInstance addInstance getInstanceById removeInstanceById forEach extend effects error guid sizeOf isArray nop position disable enable destroyaddTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId timeUpdate plugin removePlugin compose effect xhr getJSONP getScript".split(/\s+/);a.length;)g.Popcorn[a.shift()]=
+function(){}}})(window,window.document);(function(g,b){var d=g.document,a=g.location,c=/:\/\//,f=a.href.replace(a.href.split("/").slice(-1)[0],""),h=function(o,l,i){o=o||0;l=(l||o||0)+1;i=i||1;l=Math.ceil((l-o)/i)||0;var r=0,k=[];for(k.length=l;r<l;){k[r++]=o;o+=i}return k};b.sequence=function(o,l){return new b.sequence.init(o,l)};b.sequence.init=function(o,l){this.parent=d.getElementById(o);this.seqId=b.guid("__sequenced");this.queue=[];this.playlist=[];this.inOuts={ofVideos:[],ofClips:[]};this.dims={width:0,height:0};this.active=0;this.playing=
+this.cycling=false;this.times={last:0};this.events={};var i=this,r=0;b.forEach(l,function(k,j){var v=d.createElement("video");v.preload="auto";v.controls=true;v.style.display=j&&"none"||"";v.id=i.seqId+"-"+j;i.queue.push(v);var w=k["in"],n=k.out;i.inOuts.ofVideos.push({"in":w!==undefined&&w||1,out:n!==undefined&&n||0});i.inOuts.ofVideos[j].out=i.inOuts.ofVideos[j].out||i.inOuts.ofVideos[j]["in"]+2;v.src=!c.test(k.src)?f+k.src:k.src;v.setAttribute("data-sequence-owner",o);v.setAttribute("data-sequence-guid",
+i.seqId);v.setAttribute("data-sequence-id",j);v.setAttribute("data-sequence-clip",[i.inOuts.ofVideos[j]["in"],i.inOuts.ofVideos[j].out].join(":"));i.parent.appendChild(v);i.playlist.push(b("#"+v.id))});i.inOuts.ofVideos.forEach(function(k){k={"in":r,out:r+(k.out-k["in"])};i.inOuts.ofClips.push(k);r=k.out+1});b.forEach(this.queue,function(k,j){function v(){if(!j){i.dims.width=k.videoWidth;i.dims.height=k.videoHeight}k.currentTime=i.inOuts.ofVideos[j]["in"]-0.5;k.removeEventListener("canplaythrough",
+v,false);return true}k.addEventListener("canplaythrough",v,false);k.addEventListener("play",function(){i.playing=true},false);k.addEventListener("pause",function(){i.playing=false},false);k.addEventListener("timeupdate",function(w){w=w.srcElement||w.target;w=+(w.dataset&&w.dataset.sequenceId||w.getAttribute("data-sequence-id"));var n=Math.floor(k.currentTime);if(i.times.last!==n&&w===i.active){i.times.last=n;n===i.inOuts.ofVideos[w].out&&b.sequence.cycle.call(i,w)}},false)});return this};b.sequence.init.prototype=
+b.sequence.prototype;b.sequence.cycle=function(o){this.queue||b.error("Popcorn.sequence.cycle is not a public method");var l=this.queue,i=this.inOuts.ofVideos,r=l[o],k=0,j;if(l[o+1])k=o+1;if(l[o+1]){l=l[k];i=i[k];b.extend(l,{width:this.dims.width,height:this.dims.height});j=this.playlist[k];r.pause();this.active=k;this.times.last=i["in"]-1;j.currentTime(i["in"]);j[k?"play":"pause"]();this.trigger("cycle",{position:{previous:o,current:k}});if(k){r.style.display="none";l.style.display=""}this.cycling=
+false}else this.playlist[o].pause();return this};var p=["timeupdate","play","pause"];b.extend(b.sequence.prototype,{eq:function(o){return this.playlist[o]},remove:function(){this.parent.innerHTML=null},clip:function(o){return this.inOuts.ofVideos[o]},duration:function(){for(var o=0,l=this.inOuts.ofClips,i=0;i<l.length;i++)o+=l[i].out-l[i]["in"]+1;return o-1},play:function(){this.playlist[this.active].play();return this},exec:function(o,l){var i=this.active;this.inOuts.ofClips.forEach(function(r,k){if(o>=
+r["in"]&&o<=r.out)i=k});o+=this.inOuts.ofVideos[i]["in"]-this.inOuts.ofClips[i]["in"];b.addTrackEvent(this.playlist[i],{start:o-1,end:o,_running:false,_natives:{start:l||b.nop,end:b.nop,type:"exec"}});return this},listen:function(o,l){var i=this,r=this.playlist,k=r.length,j=0;if(!l)l=b.nop;if(b.Events.Natives.indexOf(o)>-1)b.forEach(r,function(v){v.listen(o,function(w){w.active=i;if(p.indexOf(o)>-1)l.call(v,w);else++j===k&&l.call(v,w)})});else{this.events[o]||(this.events[o]={});r=l.name||b.guid("__"+
+o);this.events[o][r]=l}return this},unlisten:function(){},trigger:function(o,l){var i=this;if(!(b.Events.Natives.indexOf(o)>-1)){this.events[o]&&b.forEach(this.events[o],function(r){r.call(i,{type:o},l)});return this}}});b.forEach(b.manifest,function(o,l){b.sequence.prototype[l]=function(i){var r={},k=[],j,v,w,n,y;for(j=0;j<this.inOuts.ofClips.length;j++){k=this.inOuts.ofClips[j];v=h(k["in"],k.out);w=v.indexOf(i.start);n=v.indexOf(i.end);if(w>-1)r[j]=b.extend({},k,{start:v[w],clipIdx:w});if(n>-1)r[j]=
+b.extend({},k,{end:v[n],clipIdx:n})}j=Object.keys(r).map(function(e){return+e});k=h(j[0],j[1]);for(j=0;j<k.length;j++){w={};n=k[j];var C=r[n];if(C){y=this.inOuts.ofVideos[n];v=C.clipIdx;y=h(y["in"],y.out);if(C.start){w.start=y[v];w.end=y[y.length-1]}if(C.end){w.start=y[0];w.end=y[v]}}else{w.start=this.inOuts.ofVideos[n]["in"];w.end=this.inOuts.ofVideos[n].out}this.playlist[n][l](b.extend({},i,w))}return this}})})(this,Popcorn);(function(g){document.addEventListener("DOMContentLoaded",function(){var b=document.querySelectorAll("[data-timeline-sources]");g.forEach(b,function(d,a){var c=b[a],f,h,p;if(!c.id)c.id=g.guid("__popcorn");if(c.nodeType&&c.nodeType===1){p=g("#"+c.id);f=(c.getAttribute("data-timeline-sources")||"").split(",");f[0]&&g.forEach(f,function(o){h=o.split("!");if(h.length===1){h=o.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/)[2].split(".");h[0]="parse"+h[1].toUpperCase();h[1]=o}f[0]&&p[h[0]]&&p[h[0]](h[1])});p.autoplay&&
+p.play()}})},false)})(Popcorn);(function(g,b){function d(f){f=typeof f==="string"?f:[f.language,f.region].join("-");var h=f.split("-");return{iso6391:f,language:h[0]||"",region:h[1]||""}}var a=g.navigator,c=d(a.userLanguage||a.language);b.locale={get:function(){return c},set:function(f){c=d(f);b.locale.broadcast();return c},broadcast:function(f){var h=b.instances,p=h.length,o=0,l;for(f=f||"locale:changed";o<p;o++){l=h[o];f in l.data.events&&l.trigger(f)}}}})(this,this.Popcorn);(function(g){var b=Object.prototype.hasOwnProperty;g.parsers={};g.parser=function(d,a,c){if(g.protect.natives.indexOf(d.toLowerCase())>=0)g.error("'"+d+"' is a protected function name");else{if(typeof a==="function"&&!c){c=a;a=""}if(!(typeof c!=="function"||typeof a!=="string")){var f={};f[d]=function(h,p){if(!h)return this;var o=this;g.xhr({url:h,dataType:a,success:function(l){var i,r,k=0;l=c(l).data||[];if(i=l.length){for(;k<i;k++){r=l[k];for(var j in r)b.call(r,j)&&o[j]&&o[j](r[j])}p&&p()}}});
+return this};g.extend(g.p,f);return f}}}})(Popcorn);(function(g){var b=function(a,c){a=a||g.nop;c=c||g.nop;return function(){a.apply(this,arguments);c.apply(this,arguments)}},d=/^(#([\w\-\_\.]+))$/;g.player=function(a,c){if(!g[a]){c=c||{};var f=function(h,p,o){o=o||{};var l=new Date/1E3,i=l,r=0,k=0,j=1,v=false,w={},n=document.getElementById(d.exec(h)&&d.exec(h)[2])||document.getElementById(h)||h,y={};Object.prototype.__defineGetter__||(y=n||document.createElement("div"));for(var C in n)if(!(C in y))if(typeof n[C]==="object")y[C]=n[C];else if(typeof n[C]===
+"function")y[C]=function(m){return"length"in n[m]&&!n[m].call?n[m]:function(){return n[m].apply(n,arguments)}}(C);else g.player.defineProperty(y,C,{get:function(m){return function(){return n[m]}}(C),set:g.nop,configurable:true});var e=function(){l=new Date/1E3;if(!y.paused){y.currentTime+=l-i;y.dispatchEvent("timeupdate");setTimeout(e,10)}i=l};y.play=function(){this.paused=false;if(y.readyState>=4){i=new Date/1E3;y.dispatchEvent("play");e()}};y.pause=function(){this.paused=true;y.dispatchEvent("pause")};
+g.player.defineProperty(y,"currentTime",{get:function(){return r},set:function(m){r=+m;y.dispatchEvent("timeupdate");return r},configurable:true});g.player.defineProperty(y,"volume",{get:function(){return j},set:function(m){j=+m;y.dispatchEvent("volumechange");return j},configurable:true});g.player.defineProperty(y,"muted",{get:function(){return v},set:function(m){v=+m;y.dispatchEvent("volumechange");return v},configurable:true});g.player.defineProperty(y,"readyState",{get:function(){return k},set:function(m){return k=
+m},configurable:true});y.addEventListener=function(m,q){w[m]||(w[m]=[]);w[m].push(q);return q};y.removeEventListener=function(m,q){var s,t=w[m];if(t){for(s=w[m].length-1;s>=0;s--)q===t[s]&&t.splice(s,1);return q}};y.dispatchEvent=function(m){var q,s=m.type;if(!s){s=m;if(m=g.events.getInterface(s)){q=document.createEvent(m);q.initEvent(s,true,true,window,1)}}if(w[s])for(m=w[s].length-1;m>=0;m--)w[s][m].call(this,q,this)};y.src=p||"";y.duration=0;y.paused=true;y.ended=0;o&&o.events&&g.forEach(o.events,
+function(m,q){y.addEventListener(q,m,false)});if(c._canPlayType(n.nodeName,p)!==false)if(c._setup)c._setup.call(y,o);else{y.readyState=4;y.dispatchEvent("loadedmetadata");y.dispatchEvent("loadeddata");y.dispatchEvent("canplaythrough")}else y.dispatchEvent("error");y.addEventListener("loadedmetadata",function(){y.currentTime=r;y.volume=j;y.muted=v});y.addEventListener("loadeddata",function(){!y.paused&&y.play()});h=new g.p.init(y,o);if(c._teardown)h.destroy=b(h.destroy,function(){c._teardown.call(y,
+o)});return h};f.canPlayType=c._canPlayType=c._canPlayType||g.nop;g[a]=g.player.registry[a]=f}};g.player.registry={};g.player.defineProperty=Object.defineProperty||function(a,c,f){a.__defineGetter__(c,f.get||g.nop);a.__defineSetter__(c,f.set||g.nop)};g.smart=function(a,c,f){var h=d.exec(a);h=h&&h.length&&h[2]?document.getElementById(h[2]):a;if(h.nodeType==="VIDEO"&&!c){if(typeof c==="object")f=c;return g(h,f)}for(var p in g.player.registry)if(g.player.registry.hasOwnProperty(p))if(g.player.registry[p].canPlayType(h.nodeName,
+c))return g[p](a,c,f);if(h.nodeType!=="VIDEO"){a=document.createElement("video");h.appendChild(a);h=a}f&&f.events&&f.events.error&&h.addEventListener("error",f.events.error,false);h.src=c;return g(h,f)}})(Popcorn);(function(g){var b=function(d,a){var c=0,f=0,h;g.forEach(a.classes,function(p,o){h=[];if(p==="parent")h[0]=document.querySelectorAll("#"+a.target)[0].parentNode;else h=document.querySelectorAll("#"+a.target+" "+p);c=0;for(f=h.length;c<f;c++)h[c].classList.toggle(o)})};g.compose("applyclass",{manifest:{about:{name:"Popcorn applyclass Effect",version:"0.1",author:"@scottdowne",website:"scottdowne.wordpress.com"},options:{}},_setup:function(d){d.classes={};d.applyclass=d.applyclass||"";for(var a=d.applyclass.replace(/\s/g,
+"").split(","),c=[],f=0,h=a.length;f<h;f++){c=a[f].split(":");if(c[0])d.classes[c[0]]=c[1]||""}},start:b,end:b})})(Popcorn);(function(g){g.plugin("attribution",function(){var b={"cc-by":"data:image/png;base64,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",
+"cc-by-sa":"data:image/png;base64,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",
+"cc-by-nd":"data:image/png;base64,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",
+"cc-by-nc":"data:image/png;base64,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",
+"cc-by-nc-sa":"data:image/png;base64,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",
+"cc-by-nc-nd":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAYAAABjyArgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAm8SURBVHja7FpdcBvVFf52pXgGplH11mbkDPbQdqy8oIQmMZRiufwMxRivJiHtFChyZwqUlMoiiWlaO5JCfkBNKqvhp30oUsswMCVMlL9CHRqt4xTLkmKtE7D8UMZisIf2pZLltDO1Vnv6sNprrS1bsgNDGjgz17vW3fvt3W/PPfe75y5HRCaO46bxhX3iRkQcB4AA4HT/KfA8D57nYTAYwPMGGHgevKF05HlwHA+e48BxHMBxGgoIBFIICilQFLUUi0X1qBRRLCpQlCKrU0hh1xOR1hl2fi3YAx3bAAAcANLINRgMauENc+cGg1rHG0okc+A4vpzfEjklYhWVzGKxVMrPi3qSFUVhxJYTfS2RbASgJ9dghFF3VMvJ46cQjUYRj8cxk5/RAa02rcamTZvQ+p1WtN9/H4qKATwvqy+kyIMDV3qXZcNHIXUkoDSGOJXckUQKkTcjSKfTuuutViuELQI2bFxf08NdLTgcAPrL2bdhNBoZqUajUS0GIwbEc/A/68fU1FRNHbJYLOje3Y2WltshF4soFmXIcqkUZchykXl4uSd/PPUxjvQ9j/H0OADAbrfDZrMBACRJgiiKAIAmaxO2u7bjq2u+UvH+//j4n3gh+MJVgfNAxzaV4HcGzsBoMM4Ra1yFVUYjPL1eRI5FWAOz2QxBENDQ0ICWlhYAwMDAADKZDCKRCHK5HLtWcAjY2b0D111/HWRZRkGWIcsFyLKsDxmkYDo7jZ8+/iTy+TwEQUAgEEBDQ4Ous5lMBm63G5FIBCaTCfv9+xc81OX8Zbi2d101OFocprODZ2lw6BwNJYYoKSVo9D2JBIdApcFLZrOZvF4vZbNZWspCoRCZzWbWrsnaROeHBikpJSmWHKLBoXMUHTxLZ8R+evuvb9Hp/lN04q3jZLVaCQA5nU4dnoYz/x4a9hvH/6QrTdamijjBQIB+8L3vXzHOYs+8GA4A4gHAUIrBRoMBRoPec202G1KpFDweD8xm85Lhwel0YmJigg2l8fQ4DvkP62I5zxSJqkYSsQTS6TQEQUD3rl1VQ5DT6YQgCBhPj2MkkdLFyvH0ODasX49bm29hv/+mrw/P+v04efo0nt65C5OTkzXhXGl/dPPNYGyQYskYjYxeoOCRIPMcm81W1WsrWTabJZvNxnCCzwdp5OIIDV+I0fnYIEXPq1781jt/Jus61XsnJiZqxp+YmCAAZLVambdoo6Dp69+gG29ooJZv3UaP//hRAkBer5cOHjhIAOjoG2/UhHOl/angwaoX+5/1s3gbCoWqem0lM5vNiEajrK3/oL+kpUsezJU0Nc8jPZaG3W5fEOM6OzuZl3d2durqGhoaYLfbdTN7Oq3itLe344Ft2zA5OYkz/f248YYG/GfmMh56+CGMvf8+tmzdWhNOeX++1tBYsSyFoxmvyTSeV6WYpha6urrYUF+Jmc1mBAIBAMDU1BROnjjFFiwqyRyTaZXuEw6HK55rVqmNzWaD//AhHPQ/h1dffw1btm7FBx9m4D98CGvXrkX45RDSY2M14ZTbXffcU7FUwwGg6mDNm6LRKCPH5XKxi0RRRDAYZCrBbrfD4/FUrOvo6EBXVxeLT263G7lcDtGzUdzX3lbyXg4cz4FTuE9N5G9ubsbm5mY82eXCkb4gzvT3482jR/Hm0aPY3NwM5486cdfdd9eE9dJvX1pxP9SFBseB5zjE43FVYgkCG96iKKK1tVXXSBRFiKIIl8sFh8OxoG50dBShUIhhhcNhxONxdQXIc2zoa4sPSZIqTh6a5zqdzgX1ldrM/y2fz+NMfz+eO/QrOMc60X5vGwBgOBbDcCyG+vp6cKuMVXHKw0G5/T0zsWR/yjxYfWBthXbTTTexC9xuN4sz0WgUmUwGnZ2deOSRR+Dz+djwOHbsGCRJgtvtZhoZAFpaWhAOhzGTn1HvA67sCKxbtw6iKCKTyejiXigUYgRrL6tcg4qiCKvVqltZzcf5yaOPYTgWw5G+IADggw8z6N6xE5uaN+OiNIo/hMP4cGqyKs4dd925pJdW6o9ORSSlBF0au8hm/Wg0ukCLer3eBbPnUnWaRaNRdt2lsYuUlJL0bvxdGvibSO8MnCGPbw8BIEEQFsWfb4KgavTdPbvZjL27Z/cCnI8++oj2+fbSmjVraPWXVlMwEKDp6ell41SzSjg6FfFZ2i233QLrOisikcgCtVDJtNVTk7VJlwfYsHE9mqxNOpz6+nr8ck8vdrifQntbG37W1QWTybRsnJX0R6ciQPosVnk80WbHcDiMXC4HSZLQ2NgIn8/H6rRlcnld+fCZy4+yP7pO9Hp7YTKZEA6H4XA4WJvyLFsmk4HD4UBfXx9MJhO2u7YveJinf9FdEWfHrp149fXXrhhnfliohsOSPYmROOrq6nDbrd/GTH4GTqeTxb1IJLJgItMmno6OjkXrtPZutxt9fX1YbVqN8+8OYnZ2FrOFWRTkAgoFWU0GFWVk/5XDAd8BpiVtNhtsNhvMZjNEUWQvvVqS5nL+Mp474GdJms8ShyV7hi8Mo66uDr49PkSORWA2m5HNZmuSaZFIBMFgkF1bXgcAjY2NyGQyuOPOO3A4cAj/nZ1FYR7BWt5YKSpIDCdw7Oi1ka5kBMeSQ1i1qg7nz52H60lV/wYCAaZnV2rhcJjFsX0H9uHetu9itjCL2UIBcqGAgjyP4AoJ+P/3hDsPgG3p2FtbYLFYAAA+n69i7KnVcrkck3gWi6WUiC/tYigKlFIsptKW07VqPAAopKBYVPfRntm/lxHkcDh0Od7lkNva2sradv+8u5RgL86RXLZlxCZZura2jNjkDoB6PD2UGImTdClFD//wYV1GLZVKLSuzVJ5JExwCSZdSlBiJ0979e9nvn6My90/XUy5KphIkrSDhns1myev16hLuGzdtpNH3JEpKCerx9HweySVuvijt9fSgwyHAaDTisP8wXvnjKyveMvI944UsyxgejuOJx56o5TuCOf1YyrQRlW2OVvh/MZzF2mj3qIaxFE6lflYNEeWl19OjevKlFL0c/j1ZLJaa35jFYqHgkSBJl1KUlBL04u9erLnt/OXx/PPy36rhVGtfC9YngbPAgzXresqFBx96kG31iNEBnDh+Yslt+/uF+2G3t7ANzePHT2Cfb99yvoRZ1DNq8dxKnlbpuJz+VMOphrkowQCw4eb16PXsQf1aS9luRHm6ETrdqn14MjU5iV8fCuDcwLnlfmp0RaGhWkhYDjGfFM6SBGt2e8vtaGtvw83fvBlfNplKn07NBRgiwnQ+jwvJCzh98vSyif20PPhqiME1EfyFrdw4Irqe47h/f0HFp7DAIOL+NwDFrtvhh4x87AAAAABJRU5ErkJggg=="},
+d;return{_setup:function(a){var c="",f=a.license&&b[a.license.toLowerCase()];a._container=document.createElement("div");a._container.style.display="none";d=document.getElementById(a.target);if(a.nameofworkurl)c+="<a href='"+a.nameofworkurl+"' target=_blank>";if(a.nameofwork)c+=a.nameofwork;if(a.nameofworkurl)c+="</a>";if(a.copyrightholderurl)c+="<a href='"+a.copyrightholderurl+"' target=_blank>";if(a.copyrightholder)c+=", "+a.copyrightholder;if(a.copyrightholderurl)c+="</a>";if(c==="")c=a.text;if(a.license)if(f)c=
+a.licenseurl?"<a href='"+a.licenseurl+"' target=_blank><img src='"+f+"' border='0'/></a> "+c:"<img src='"+f+"' />"+c;else{c+=", license: ";c+=a.licenseurl?"<a href='"+a.licenseurl+"' target=_blank>"+a.license+"</a> ":a.license}else if(a.licenseurl)c+=", <a href='"+a.licenseurl+"' target=_blank>license</a> ";a._container.innerHTML=c;if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(a._container)},start:function(a,c){c._container.style.display="inline"},end:function(a,
+c){c._container.style.display="none"},_teardown:function(a){(d=document.getElementById(a.target))&&d.removeChild(a._container)}}}(),{about:{name:"Popcorn Attribution Plugin",version:"0.2",author:"@rwaldron",website:"github.com/rwldrn"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},nameofwork:{elem:"input",type:"text",label:"Name of Work"},nameofworkurl:{elem:"input",type:"url",label:"Url of Work",optional:true},copyrightholder:{elem:"input",type:"text",
+label:"Copyright Holder"},copyrightholderurl:{elem:"input",type:"url",label:"Copyright Holder Url",optional:true},license:{elem:"input",type:"text",label:"License type"},licenseurl:{elem:"input",type:"url",label:"License URL",optional:true},target:"attribution-container"}})})(Popcorn);(function(g){g.plugin("code",function(b){var d=false,a=function(){var c=function(f){return function(h){var p=function(){d&&h();d&&f(p)};p()}};return window.webkitRequestAnimationFrame?c(window.webkitRequestAnimationFrame):window.mozRequestAnimationFrame?c(window.mozRequestAnimationFrame):c(function(f){window.setTimeout(f,16)})}();if(!b.onStart||typeof b.onStart!=="function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onStart must be a function.");b.onStart=g.nop}if(b.onEnd&&typeof b.onEnd!==
+"function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onEnd must be a function.");b.onEnd=undefined}if(b.onFrame&&typeof b.onFrame!=="function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onFrame must be a function.");b.onFrame=undefined}return{start:function(c,f){f.onStart(f);if(f.onFrame){d=true;a(f.onFrame,f)}},end:function(c,f){if(f.onFrame)d=false;f.onEnd&&f.onEnd(f)}}},{about:{name:"Popcorn Code Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},
+options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},onStart:{elem:"input",type:"function",label:"onStart"},onFrame:{elem:"input",type:"function",label:"onFrame",optional:true},onEnd:{elem:"input",type:"function",label:"onEnd"}}})})(Popcorn);(function(g){var b=0;g.plugin("flickr",function(d){var a,c=document.getElementById(d.target),f,h,p,o,l=d.numberofimages||4,i=d.height||"50px",r=d.width||"50px",k=d.padding||"5px",j=d.border||"0px";a=document.createElement("div");a.id="flickr"+b;a.style.width="100%";a.style.height="100%";a.style.display="none";b++;if(!c&&g.plugin.debug)throw Error("flickr target container doesn't exist");c&&c.appendChild(a);var v=function(){if(f)setTimeout(function(){v()},5);else{h="http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&";
+h+="username="+d.username+"&api_key="+d.apikey+"&format=json&jsoncallback=flickr";g.getJSONP(h,function(n){f=n.user.nsid;w()})}},w=function(){h="http://api.flickr.com/services/feeds/photos_public.gne?";if(f)h+="id="+f+"&";if(d.tags)h+="tags="+d.tags+"&";h+="lang=en-us&format=json&jsoncallback=flickr";g.xhr.getJSONP(h,function(n){var y=document.createElement("div");y.innerHTML="<p style='padding:"+k+";'>"+n.title+"<p/>";g.forEach(n.items,function(C,e){if(e<l){p=document.createElement("a");p.setAttribute("href",
+C.link);p.setAttribute("target","_blank");o=document.createElement("img");o.setAttribute("src",C.media.m);o.setAttribute("height",i);o.setAttribute("width",r);o.setAttribute("style","border:"+j+";padding:"+k);p.appendChild(o);y.appendChild(p)}else return false});a.appendChild(y)})};if(d.username&&d.apikey)v();else{f=d.userid;w()}return{start:function(){a.style.display="inline"},end:function(){a.style.display="none"},_teardown:function(n){document.getElementById(n.target)&&document.getElementById(n.target).removeChild(a)}}},
+{about:{name:"Popcorn Flickr Plugin",version:"0.2",author:"Scott Downe, Steven Weerdenburg, Annasob",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},userid:{elem:"input",type:"text",label:"UserID",optional:true},tags:{elem:"input",type:"text",label:"Tags"},username:{elem:"input",type:"text",label:"Username",optional:true},apikey:{elem:"input",type:"text",label:"Api_key",optional:true},target:"flickr-container",
+height:{elem:"input",type:"text",label:"Height",optional:true},width:{elem:"input",type:"text",label:"Width",optional:true},padding:{elem:"input",type:"text",label:"Padding",optional:true},border:{elem:"input",type:"text",label:"Border",optional:true},numberofimages:{elem:"input",type:"text",label:"Number of Images"}}})})(Popcorn);(function(g){g.forEach(["footnote","text"],function(b){g.plugin(b,{manifest:{about:{name:"Popcorn "+b+" Plugin",version:"0.2",author:"@annasob, @rwaldron",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},text:{elem:"input",type:"text",label:"Text"},target:b+"-container"}},_setup:function(d){var a=document.getElementById(d.target);d._container=document.createElement("div");d._container.style.display="none";d._container.innerHTML=
+d.text;if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(d._container)},start:function(d,a){a._container.style.display="inline"},end:function(d,a){a._container.style.display="none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d._container)}})})})(Popcorn);(function(g,b){var d=false;g.plugin("facebook",{manifest:{about:{name:"Popcorn Facebook Plugin",version:"0.1",author:"Dan Ventura, Matthew Schranz: @mjschranz",website:"dsventura.blogspot.com, mschranz.wordpress.com"},options:{type:{elem:"select",options:["LIKE","LIKE-BOX","ACTIVITY","FACEPILE","LIVE-STREAM","SEND","COMMENTS"],label:"Type"},target:"facebook-container",start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},font:{elem:"input",type:"text",label:"font",
+optional:true},xid:{elem:"input",type:"text",label:"Xid",optional:true},href:{elem:"input",type:"url",label:"Href",optional:true},site:{elem:"input",type:"url",label:"Site",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},width:{elem:"input",type:"text",label:"Width",optional:true},action:{elem:"select",options:["like","recommend"],label:"Action",optional:true},stream:{elem:"select",options:["false","true"],label:"Stream",optional:true},header:{elem:"select",options:["false",
+"true"],label:"Header",optional:true},layout:{elem:"select",options:["standard","button_count","box_count"],label:"Layout",optional:true},max_rows:{elem:"input",type:"text",label:"Max_rows",optional:true},border_color:{elem:"input",type:"text",label:"Border_color",optional:true},event_app_id:{elem:"input",type:"text",label:"Event_app_id",optional:true},colorscheme:{elem:"select",options:["light","dark"],label:"Colorscheme",optional:true},show_faces:{elem:"select",options:["false","true"],label:"Showfaces",
+optional:true},recommendations:{elem:"select",options:["false","true"],label:"Recommendations",optional:true},always_post_to_friends:{elem:"input",options:["false","true"],label:"Always_post_to_friends",optional:true},num_posts:{elem:"input",type:"text",label:"Number_of_Comments",optional:true}}},_setup:function(a){var c=document.getElementById(a.target),f=a.type;if(!document.getElementById("fb-root")){var h=document.createElement("div");h.setAttribute("id","fb-root");document.body.appendChild(h)}if(!d||
+a.event_app_id){d=true;g.getScript("//connect.facebook.net/en_US/all.js");b.fbAsyncInit=function(){FB.init({appId:a.event_app_id||"",status:true,cookie:true,xfbml:true})}}f=f.toLowerCase();if(!(["like","like-box","activity","facepile","live-stream","send","comments"].indexOf(f)>-1))throw Error("Facebook plugin type was invalid.");a._container=document.createElement("div");a._container.id="facebookdiv-"+g.guid();a._facebookdiv=document.createElement("fb:"+f);a._container.appendChild(a._facebookdiv);
+a._container.style.display="none";f=f==="activity"?"site":"href";a._facebookdiv.setAttribute(f,a[f]||document.URL);f="width height layout show_faces stream header colorscheme maxrows border_color recommendations font always_post_to_friends xid num_posts".split(" ");g.forEach(f,function(p){a[p]!=null&&a._facebookdiv.setAttribute(p,a[p])});if(!c&&g.plugin.debug)throw Error("Facebook target container doesn't exist");c&&c.appendChild(a._container)},start:function(a,c){c._container.style.display=""},end:function(a,
+c){c._container.style.display="none"},_teardown:function(a){var c=document.getElementById(a.target);c&&c.removeChild(a._container)}})})(Popcorn,this);var googleCallback;
+(function(g){var b=1,d=false,a=false,c,f;googleCallback=function(h){if(typeof google!=="undefined"&&google.maps&&google.maps.Geocoder&&google.maps.LatLng){c=new google.maps.Geocoder;a=true}else setTimeout(function(){googleCallback(h)},1)};f=function(){if(document.body){d=true;g.getScript("//maps.google.com/maps/api/js?sensor=false&callback=googleCallback")}else setTimeout(function(){f()},1)};g.plugin("googlemap",function(h){var p,o,l,i=document.getElementById(h.target);d||f();p=document.createElement("div");
+p.id="actualmap"+b;p.style.width="100%";p.style.height="100%";b++;if(!i&&g.plugin.debug)throw Error("target container doesn't exist");i&&i.appendChild(p);var r=function(){if(a)if(h.location)c.geocode({address:h.location},function(k,j){if(j===google.maps.GeocoderStatus.OK){h.lat=k[0].geometry.location.lat();h.lng=k[0].geometry.location.lng();l=new google.maps.LatLng(h.lat,h.lng);o=new google.maps.Map(p,{mapTypeId:google.maps.MapTypeId[h.type]||google.maps.MapTypeId.HYBRID});o.getDiv().style.display=
+"none"}});else{l=new google.maps.LatLng(h.lat,h.lng);o=new google.maps.Map(p,{mapTypeId:google.maps.MapTypeId[h.type]||google.maps.MapTypeId.HYBRID});o.getDiv().style.display="none"}else setTimeout(function(){r()},5)};r();return{start:function(k,j){var v=this,w,n=function(){if(o){o.getDiv().style.display="block";google.maps.event.trigger(o,"resize");o.setCenter(l);if(j.zoom&&typeof j.zoom!=="number")j.zoom=+j.zoom;j.zoom=j.zoom||8;o.setZoom(j.zoom);if(j.heading&&typeof j.heading!=="number")j.heading=
++j.heading;if(j.pitch&&typeof j.pitch!=="number")j.pitch=+j.pitch;if(j.type==="STREETVIEW"){o.setStreetView(w=new google.maps.StreetViewPanorama(p,{position:l,pov:{heading:j.heading=j.heading||0,pitch:j.pitch=j.pitch||0,zoom:j.zoom}}));var y=function(u,x){var A=google.maps.geometry.spherical.computeHeading;setTimeout(function(){var B=v.media.currentTime;if(typeof j.tween==="object"){for(var D=0,E=u.length;D<E;D++){var z=u[D];if(B>=z.interval*(D+1)/1E3&&(B<=z.interval*(D+2)/1E3||B>=z.interval*E/1E3)){s.setPosition(new google.maps.LatLng(z.position.lat,
+z.position.lng));s.setPov({heading:z.pov.heading||A(z,u[D+1])||0,zoom:z.pov.zoom||0,pitch:z.pov.pitch||0})}}y(u,u[0].interval)}else{D=0;for(E=u.length;D<E;D++){z=j.interval;if(B>=z*(D+1)/1E3&&(B<=z*(D+2)/1E3||B>=z*E/1E3)){C.setPov({heading:A(u[D],u[D+1])||0,zoom:j.zoom,pitch:j.pitch||0});C.setPosition(e[D])}}y(e,j.interval)}},x)};if(j.location&&typeof j.tween==="string"){var C=w,e=[],m=new google.maps.DirectionsService,q=new google.maps.DirectionsRenderer(C);m.route({origin:j.location,destination:j.tween,
+travelMode:google.maps.TravelMode.DRIVING},function(u,x){if(x==google.maps.DirectionsStatus.OK){q.setDirections(u);for(var A=u.routes[0].overview_path,B=0,D=A.length;B<D;B++)e.push(new google.maps.LatLng(A[B].lat(),A[B].lng()));j.interval=j.interval||1E3;y(e,10)}})}else if(typeof j.tween==="object"){var s=w;m=0;for(var t=j.tween.length;m<t;m++){j.tween[m].interval=j.tween[m].interval||1E3;y(j.tween,10)}}}}else setTimeout(function(){n()},13)};n()},end:function(){if(o)o.getDiv().style.display="none"},
+_teardown:function(k){(k=document.getElementById(k.target))&&k.removeChild(p);p=o=l=null}}},{about:{name:"Popcorn Google Map Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","STREETVIEW","HYBRID","TERRAIN"],label:"Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom",optional:true},lat:{elem:"input",
+type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location"},heading:{elem:"input",type:"text",label:"Heading",optional:true},pitch:{elem:"input",type:"text",label:"Pitch",optional:true}}})})(Popcorn);(function(g){g.plugin("image",{manifest:{about:{name:"Popcorn image Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},href:{elem:"input",type:"url",label:"anchor URL",optional:true},target:"image-container",src:{elem:"input",type:"url",label:"Source URL"},text:{elem:"input",type:"text",label:"TEXT",optional:true}}},_setup:function(b){var d=document.createElement("img"),
+a=document.getElementById(b.target);b.anchor=document.createElement("a");b.anchor.style.position="relative";b.anchor.style.textDecoration="none";b.anchor.style.display="none";if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(b.anchor);d.addEventListener("load",function(){d.style.borderStyle="none";b.anchor.href=b.href||b.src||"#";b.anchor.target="_blank";var c,f;if(b.text){c=d.height/12+"px";f=document.createElement("div");g.extend(f.style,{color:"black",fontSize:c,
+fontWeight:"bold",position:"relative",textAlign:"center",width:d.width+"px",zIndex:"10"});f.innerHTML=b.text||"";f.style.top=d.height/2-f.offsetHeight/2+"px";b.anchor.appendChild(f)}b.anchor.appendChild(d)},false);d.src=b.src},start:function(b,d){d.anchor.style.display="inline"},end:function(b,d){d.anchor.style.display="none"},_teardown:function(b){document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b.anchor)}})})(Popcorn);(function(g){var b=function(d){var a=0,c=0,f=0,h=null,p=null,o=false,l=0,i=function(){},r=function(){d.background(0);c=f=0;h=p=null};d.draw=function(){i()};d.setup=function(){};d.construct=function(k,j,v){var w=function(){if(j){l=j.gml.tag.drawing.stroke;var n=(v.end-v.start)/(l.pt||function(C){for(var e=[],m=0,q=C.length;m<q;m++)e=e.concat(C[m].pt);return e}(l)).length,y=j.gml.tag;y=y.header&&y.header.client&&y.header.client.name;o=y==="Graffiti Analysis 2.0: DustTag"||y==="DustTag: Graffiti Analysis 2.0"||
+y==="Fat Tag - Katsu Edition";i=function(){if(k.currentTime<v.endDrawing){var C=(k.currentTime-v.start)/n;for(C<c&&r();c<=C;){if(!l)break;a=l[f]||l;var e=a.pt[c],m=c;if(h!=null){var q=e.x,s=e.y,t=void 0,u=void 0,x=void 0,A=void 0;if(o){t=p*d.height;u=d.width-h*d.width;x=s*d.height;A=d.width-q*d.width}else{t=h*d.width;u=p*d.height;x=q*d.width;A=s*d.height}d.stroke(0);d.strokeWeight(13);d.strokeCap(d.SQUARE);d.line(t,u,x,A);d.stroke(255);d.strokeWeight(12);d.strokeCap(d.ROUND);d.line(t,u,x,A)}h=e.x;
+p=e.y;c===m&&c++}}}}else setTimeout(w,5)};d.size(640,640);d.frameRate(60);d.smooth();r();d.noLoop();w()}};g.plugin("gml",{_setup:function(d){var a=this,c=document.getElementById(d.target);d.endDrawing=d.endDrawing||d.end;d.container=document.createElement("canvas");d.container.style.display="none";d.container.setAttribute("id","canvas"+d.gmltag);if(!c&&g.plugin.debug)throw Error("target container doesn't exist");c&&c.appendChild(d.container);c=function(){g.getJSONP("//000000book.com/data/"+d.gmltag+
+".json?callback=",function(f){d.pjsInstance=new Processing(d.container,b);d.pjsInstance.construct(a.media,f,d);d._running&&d.pjsInstance.loop()},false)};window.Processing?c():g.getScript("//cloud.github.com/downloads/processing-js/processing-js/processing-1.3.6.min.js",c)},start:function(d,a){a.pjsInstance&&a.pjsInstance.loop();a.container.style.display="block"},end:function(d,a){a.pjsInstance&&a.pjsInstance.noLoop();a.container.style.display="none"},_teardown:function(d){d.pjsInstance&&d.pjsInstance.exit();
+document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d.container)}})})(Popcorn);(function(g){var b={},d=function(a){if(a.artist){var c="";c="<h3>"+a.artist.name+"</h3>";c+="<a href='"+a.artist.url+"' target='_blank' style='float:left;margin:0 10px 0 0;'><img src='"+a.artist.image[2]["#text"]+"' alt=''></a>";c+="<p>"+a.artist.bio.summary+"</p>";c+="<hr /><p><h4>Tags</h4><ul>";g.forEach(a.artist.tags.tag,function(f){c+="<li><a href='"+f.url+"'>"+f.name+"</a></li>"});c+="</ul></p>";c+="<hr /><p><h4>Similar</h4><ul>";g.forEach(a.artist.similar.artist,function(f){c+="<li><a href='"+
+f.url+"'>"+f.name+"</a></li>"});c+="</ul></p>";b[a.artist.name.toLowerCase()].htmlString=c}};g.plugin("lastfm",function(){return{_setup:function(a){a._container=document.createElement("div");a._container.style.display="none";a._container.innerHTML="";a.artist=a.artist&&a.artist.toLowerCase()||"";var c=document.getElementById(a.target);if(!c&&g.plugin.debug)throw Error("target container doesn't exist");c&&c.appendChild(a._container);if(!b[a.artist]){b[a.artist]={count:0,htmlString:"Unknown Artist"};
+g.getJSONP("//ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+a.artist+"&api_key="+a.apikey+"&format=json&callback=lastFMcallback",d,false)}b[a.artist].count++},start:function(a,c){c._container.innerHTML=b[c.artist].htmlString;c._container.style.display="inline"},end:function(a,c){c._container.style.display="none";c._container.innerHTML=""},_teardown:function(a){--b[a.artist].count||delete b[a.artist];document.getElementById(a.target)&&document.getElementById(a.target).removeChild(a._container)}}}(),
+{about:{name:"Popcorn LastFM Plugin",version:"0.1",author:"Steven Weerdenburg",website:"http://sweerdenburg.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"lastfm-container",artist:{elem:"input",type:"text",label:"Artist"}}})})(Popcorn);(function(g){g.plugin("lowerthird",{manifest:{about:{name:"Popcorn lowerthird Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"lowerthird-container",salutation:{elem:"input",type:"text",label:"Text",optional:true},name:{elem:"input",type:"text",label:"Text"},role:{elem:"input",type:"text",label:"Text",optional:true}}},_setup:function(b){var d=document.getElementById(b.target);
+if(!this.container){this.container=document.createElement("div");this.container.style.position="absolute";this.container.style.color="white";this.container.style.textShadow="black 2px 2px 6px";this.container.style.fontSize="24px";this.container.style.fontWeight="bold";this.container.style.paddingLeft="40px";this.container.style.width=this.video.offsetWidth+"px";this.container.style.left=this.position().left+"px";this.video.parentNode.appendChild(this.container)}if(b.target&&b.target!=="lowerthird-container"){b.container=
+document.createElement("div");if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(b.container)}else b.container=this.container},start:function(b,d){d.container.innerHTML=(d.salutation?d.salutation+" ":"")+d.name+(d.role?"<br />"+d.role:"");this.container.style.top=this.position().top+this.video.offsetHeight-(40+this.container.offsetHeight)+"px"},end:function(b,d){for(;d.container.firstChild;)d.container.removeChild(d.container.firstChild)}})})(Popcorn);(function(g){var b=1,d=false;g.plugin("googlefeed",function(a){var c=function(){var o=false,l=0,i=document.getElementsByTagName("link"),r=i.length,k=document.head||document.getElementsByTagName("head")[0],j=document.createElement("link");if(window.GFdynamicFeedControl)d=true;else g.getScript("//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.js",function(){d=true});for(;l<r;l++)if(i[l].href==="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css")o=true;if(!o){j.type=
+"text/css";j.rel="stylesheet";j.href="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css";k.insertBefore(j,k.firstChild)}};window.google?c():g.getScript("//www.google.com/jsapi",function(){google.load("feeds","1",{callback:function(){c()}})});var f=document.createElement("div"),h=document.getElementById(a.target),p=function(){if(d)a.feed=new GFdynamicFeedControl(a.url,f,{vertical:a.orientation.toLowerCase()==="vertical"?true:false,horizontal:a.orientation.toLowerCase()==="horizontal"?
+true:false,title:a.title=a.title||"Blog"});else setTimeout(function(){p()},5)};if(!a.orientation||a.orientation.toLowerCase()!=="vertical"&&a.orientation.toLowerCase()!=="horizontal")a.orientation="vertical";f.style.display="none";f.id="_feed"+b;f.style.width="100%";f.style.height="100%";b++;if(!h&&g.plugin.debug)throw Error("target container doesn't exist");h&&h.appendChild(f);p();return{start:function(){f.setAttribute("style","display:inline")},end:function(){f.setAttribute("style","display:none")},
+_teardown:function(o){document.getElementById(o.target)&&document.getElementById(o.target).removeChild(f);delete o.feed}}},{about:{name:"Popcorn Google Feed Plugin",version:"0.1",author:"David Seifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"feed-container",url:{elem:"input",type:"url",label:"url"},title:{elem:"input",type:"text",label:"title",optional:true},orientation:{elem:"select",options:["Vertical",
+"Horizontal"],label:"orientation",optional:true}}})})(Popcorn);(function(g){var b={},d={},a={};g.plugin("rdio",function(){var c=function(f){var h=function(p){return"http://www.rdio.com/api/oembed/?format=json&url=http://www.rdio.com/%23"+{playlist:function(){return"/people/"+f.person+"/playlists/"+f.id+"/"},album:function(){return"/artist/"+f.artist+"/album/"}}[p]()+f[p]+"/&callback=_loadResults"}(f.type);g.getJSONP(h,function(p){var o=p.title,l=p.html;if(p&&o&&l)b[f.containerid].htmlString="<div>"+l+"</div>";else if(g.plugin.debug)throw Error("Did not receive data from server.");
+},false)};return{_setup:function(f){var h=f.containerid=g.guid(),p=d[h]=document.createElement("div"),o=a[h]=document.getElementById(f.target);if(!o&&g.plugin.debug)throw Error("Target container could not be found.");p.style.display="none";p.innerHTML="";o.appendChild(p);b[h]={htmlString:f.playlist||"Unknown Source"||f.album||"Unknown Source"};c(f)},start:function(f,h){var p=h.containerid,o=d[p];o.innerHTML=b[p].htmlString;o.style.display="inline"},end:function(f,h){container=d[h.containerid];container.style.display=
+"none";container.innerHTML=""},_teardown:function(f){f=f.containerid;var h=a[f];b[f]&&delete b[f];h&&h.removeChild(d[f]);delete a[f];delete d[f]}}}(),{manifest:{about:{name:"Popcorn Rdio Plugin",version:"0.1",author:"Denise Rigato"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"rdio",artist:{elem:"input",type:"text",label:"Artist"},album:{elem:"input",type:"text",label:"Album"},person:{elem:"input",type:"text",label:"Person"},id:{elem:"input",
+type:"text",label:"Id"},playlist:{elem:"input",type:"text",label:"Playlist"}}}})})(Popcorn);(function(g){var b=0,d=function(a,c){var f=a.container=document.createElement("div"),h=f.style,p=a.media,o=function(){var l=a.position();h.fontSize="18px";h.width=p.offsetWidth+"px";h.top=l.top+p.offsetHeight-f.offsetHeight-40+"px";h.left=l.left+"px";setTimeout(o,10)};f.id=c||g.guid();h.position="absolute";h.color="white";h.textShadow="black 2px 2px 6px";h.fontWeight="bold";h.textAlign="center";o();a.media.parentNode.appendChild(f);return f};g.plugin("subtitle",{manifest:{about:{name:"Popcorn Subtitle Plugin",
+version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"subtitle-container",text:{elem:"input",type:"text",label:"Text"}}},_setup:function(a){var c=document.createElement("div");c.id="subtitle-"+b++;c.style.display="none";!this.container&&(!a.target||a.target==="subtitle-container")&&d(this);a.container=a.target&&a.target!=="subtitle-container"?document.getElementById(a.target)||
+d(this,a.target):this.container;document.getElementById(a.container.id)&&document.getElementById(a.container.id).appendChild(c);a.innerContainer=c;a.showSubtitle=function(){a.innerContainer.innerHTML=a.text||""}},start:function(a,c){c.innerContainer.style.display="inline";c.showSubtitle(c,c.text)},end:function(a,c){c.innerContainer.style.display="none";c.innerContainer.innerHTML=""},_teardown:function(a){a.container.removeChild(a.innerContainer)}})})(Popcorn);(function(g){var b=[],d=function(){this.name="";this.contains={};this.toString=function(){var a=[],c;for(c in this.contains)this.contains.hasOwnProperty(c)&&a.push(" "+this.contains[c]);return a.toString()}};g.plugin("tagthisperson",function(){return{_setup:function(a){var c=false;if(!document.getElementById(a.target)&&g.plugin.debug)throw Error("target container doesn't exist");for(var f=0;f<b.length;f++)if(b[f].name===a.target){a._p=b[f];c=true;break}if(!c){a._p=new d;a._p.name=a.target;b.push(a._p)}},
+start:function(a,c){c._p.contains[c.person]=c.image?"<img src='"+c.image+"'/> ":"";c._p.contains[c.person]+=c.href?"<a href='"+c.href+"' target='_blank'> "+c.person+"</a>":c.person;document.getElementById(c.target).innerHTML=c._p.toString()},end:function(a,c){delete c._p.contains[c.person];document.getElementById(c.target).innerHTML=c._p.toString()}}}(),{about:{name:"Popcorn tagthisperson Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",
+label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"tagthisperson-container",person:{elem:"input",type:"text",label:"Name"},image:{elem:"input",type:"url",label:"Image Src",optional:true},href:{elem:"input",type:"url",label:"URL",optional:true}}})})(Popcorn);(function(g){var b=false;g.plugin("twitter",{manifest:{about:{name:"Popcorn Twitter Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},src:{elem:"input",type:"text",label:"Source"},target:"twitter-container",height:{elem:"input",type:"number",label:"Height",optional:true},width:{elem:"input",type:"number",label:"Width",optional:true}}},_setup:function(d){if(!window.TWTR&&
+!b){b=true;g.getScript("//widgets.twimg.com/j/2/widget.js")}var a=document.getElementById(d.target);d.container=document.createElement("div");d.container.setAttribute("id",g.guid());d.container.style.display="none";if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(d.container);var c=d.src||"";a=d.width||250;var f=d.height||200,h=/^@/.test(c),p={version:2,id:d.container.getAttribute("id"),rpp:30,width:a,height:f,interval:6E3,theme:{shell:{background:"#ffffff",color:"#000000"},
+tweets:{background:"#ffffff",color:"#444444",links:"#1985b5"}},features:{loop:true,timestamp:true,avatars:true,hashtags:true,toptweets:true,live:true,scrollbar:false,behavior:"default"}},o=function(l){if(window.TWTR)if(h){p.type="profile";(new TWTR.Widget(p)).render().setUser(c).start()}else{p.type="search";p.search=c;p.subject=c;(new TWTR.Widget(p)).render().start()}else setTimeout(function(){o(l)},1)};o(this)},start:function(d,a){a.container.style.display="inline"},end:function(d,a){a.container.style.display=
+"none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d.container)}})})(Popcorn);(function(g){g.plugin("webpage",{manifest:{about:{name:"Popcorn Webpage Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{id:{elem:"input",type:"text",label:"Id",optional:true},start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},src:{elem:"input",type:"url",label:"Src"},target:"iframe-container"}},_setup:function(b){var d=document.getElementById(b.target);b.src=b.src.replace(/^(https?:)?(\/\/)?/,"//");b._iframe=document.createElement("iframe");
+b._iframe.setAttribute("width","100%");b._iframe.setAttribute("height","100%");b._iframe.id=b.id;b._iframe.src=b.src;b._iframe.style.display="none";if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(b._iframe)},start:function(b,d){d._iframe.src=d.src;d._iframe.style.display="inline"},end:function(b,d){d._iframe.style.display="none"},_teardown:function(b){document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b._iframe)}})})(Popcorn);var wikiCallback;
+(function(g){g.plugin("wikipedia",{manifest:{about:{name:"Popcorn Wikipedia Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},lang:{elem:"input",type:"text",label:"Language",optional:true},src:{elem:"input",type:"url",label:"Src"},title:{elem:"input",type:"text",label:"Title",optional:true},numberofwords:{elem:"input",type:"text",label:"Num Of Words",optional:true},target:"wikipedia-container"}},
+_setup:function(b){var d,a=g.guid();if(!b.lang)b.lang="en";b.numberofwords=b.numberofwords||200;window["wikiCallback"+a]=function(c){b._link=document.createElement("a");b._link.setAttribute("href",b.src);b._link.setAttribute("target","_blank");b._link.innerHTML=b.title||c.parse.displaytitle;b._desc=document.createElement("p");d=c.parse.text["*"].substr(c.parse.text["*"].indexOf("<p>"));d=d.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g,"");d=d.split(" ");b._desc.innerHTML=d.slice(0,d.length>=
+b.numberofwords?b.numberofwords:d.length).join(" ")+" ...";b._fired=true};if(b.src)g.getScript("//"+b.lang+".wikipedia.org/w/api.php?action=parse&props=text&page="+b.src.slice(b.src.lastIndexOf("/")+1)+"&format=json&callback=wikiCallback"+a);else if(g.plugin.debug)throw Error("Wikipedia plugin needs a 'src'");},start:function(b,d){var a=function(){if(d._fired){if(d._link&&d._desc)if(document.getElementById(d.target)){document.getElementById(d.target).appendChild(d._link);document.getElementById(d.target).appendChild(d._desc);
+d._added=true}}else setTimeout(function(){a()},13)};a()},end:function(b,d){if(d._added){document.getElementById(d.target).removeChild(d._link);document.getElementById(d.target).removeChild(d._desc)}},_teardown:function(b){if(b._added){b._link.parentNode&&document.getElementById(b.target).removeChild(b._link);b._desc.parentNode&&document.getElementById(b.target).removeChild(b._desc);delete b.target}}})})(Popcorn);(function(g){var b={text:function(d){var a=d.post,c=document.createElement("a"),f=document.createTextNode(a.title),h=document.createElement("div");c.setAttribute("href",a.post_url);c.appendChild(f);h.appendChild(c);h.innerHTML+=a.body;d._container.appendChild(h)},photo:function(d){for(var a=d.width||250,c=-1,f=[d.post.photos.length],h=[d.post.photos.length],p=document.createElement("div"),o=document.createElement("img"),l=d.post,i=0,r=l.photos.length;i<r;i++){for(var k=l.photos[i],j=k.alt_sizes,v=
+0,w=j.length;v<w;v++){var n=j[v];if(n.width===a){h[i]=n.url;f[i]=k.caption;c=0;break}else if(n.width===250)c=v}c===-1&&g.error("Clearly your blog has a picture that is so tiny it isn't even 250px wide. Consider using a bigger picture or try a smaller size.");if(v===j.length)h[i]=j[c].url}a=0;for(c=h.length;a<c;a++){p.innerHTML+=f[a]+"<br/>";o.setAttribute("src",h[a]);o.setAttribute("alt","Pic"+a);p.appendChild(o);p.innerHTML+="<br/>"}p.innerHTML+="<br/>"+l.caption;d._container.appendChild(p)},audio:function(d){var a=
+document.createElement("div"),c=document.createElement("a"),f=d.post;if(f.artist){var h=document.createElement("img");a.innerHTML+="Artist: "+f.artist+"<br/>";c.setAttribute("href",f.source_url);h.setAttribute("src",f.album_art);h.setAttribute("alt",f.album);c.appendChild(h);a.appendChild(c);a.innerHTML+="<hr/>"+f.track_number+" - "+f.track_name+"<br/>"}else{h=document.createTextNode(f.source_title);c.setAttribute("href",f.source_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/>"}a.innerHTML+=
+f.player+" "+f.plays+"plays<br/>"+f.caption;d._container.appendChild(a)},video:function(d){for(var a=d.width||400,c=-1,f=d.post,h=document.createElement("div"),p,o=0,l=f.player.length;o<l;o++){var i=f.player[o];if(i.width===a){p=i.embed_code;c=0;break}else if(i.width===400)c=o}if(o===d.post.player.length)p=f.player[c].embed_code;c===-1&&g.error("Specified video size was not found and default was never found. Please try another width.");h.innerHTML+=p+"<br/>"+f.caption;d._container.appendChild(h)},
+chat:function(d){var a=d.post,c,f=document.createElement("div");f.innerHTML+="<strong><u>"+a.title+"</u></strong><br/><br/>";for(var h=0,p=a.dialogue.length;h<p;h++){c=a.dialogue[h];f.innerHTML+=c.label+" "+c.phrase+"<br/>"}d._container.appendChild(f)},quote:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.text);c.setAttribute("href",f.post_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/><br/>Source: <b>"+f.source+"</b>";
+d._container.appendChild(a)},link:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.title);c.setAttribute("href",f.post_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/>"+f.description;d._container.appendChild(a)},answer:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.asking_name);a.innerHTML="Inquirer: ";c.setAttribute("href",f.asking_url);c.appendChild(h);
+a.appendChild(c);a.innerHTML+="<br/><br/>Question: "+f.question+"<br/>Answer: "+f.answer;d._container.appendChild(a)}};g.plugin("tumblr",{manifest:{about:{name:"Popcorn Tumblr Plugin",version:"0.1",author:"Matthew Schranz, @mjschranz",website:"mschranz.wordpress.com"},options:{requestType:{elem:"select",options:["INFO","AVATAR","BLOGPOST"],label:"Type_Of_Plugin"},target:"tumblr-container",start:{elem:"input",type:"number",label:"Start_Time"},end:{elem:"input",type:"number",label:"End_Time"},base_hostname:{elem:"input",
+type:"text",label:"User_Name"},api_key:{elem:"input",type:"text",label:"Application_Key",optional:true},size:{elem:"select",options:[16,24,30,40,48,64,96,128,512],label:"avatarSize",optional:true},blogId:{elem:"input",type:"number",label:"Blog_ID",optional:true},width:{elem:"input",type:"number",label:"Photo_Width",optional:true}}},_setup:function(d){var a=document.getElementById(d.target),c,f,h=this;d.requestType=d.requestType.toLowerCase();(!d.base_hostname||!d.api_key&&(d.requestType==="info"||
+d.requestType==="blogpost"))&&g.error("Must provide a blog URL to the plugin and an api_key for Blog Info and Blog Post requests.");!(["info","avatar","blogpost"].indexOf(d.requestType)>-1)&&g.error("Invalid tumblr plugin type.");d.requestType==="blogpost"&&d.blogId===undefined&&g.error("Error. BlogId required for blogpost requests");!a&&g.plugin.debug&&g.error("Target Tumblr container doesn't exist.");c=d.base_hostname.slice(d.base_hostname.indexOf("/")+2,d.base_hostname.length);f=d.base_hostname.slice(0,
+d.base_hostname.indexOf("/")+2);c=f==="http://"||f==="https://"?c:d.base_hostname;if(c.indexOf("/")>-1)c=c.slice(0,c.indexOf("/"));d.base_hostname=c;d._container=document.createElement("div");d._container.id="tumblrdiv-"+g.guid();if(d.requestType==="avatar")d._container.innerHTML="<img src=http://api.tumblr.com/v2/blog/"+d.base_hostname+"/avatar/"+d.size+" alt='BlogAvatar' />";else{c=d.requestType==="blogpost"?"posts":"info";c="http://api.tumblr.com/v2/blog/"+d.base_hostname+"/"+c+"?api_key="+d.api_key+
+"&id="+d.blogId+"&jsonp=tumblrCallBack";this.listen("tumblrError",function(p){g.error(p)});g.getJSONP(c,function(p){if(p.meta.msg==="OK"){var o=document.createElement("div");if(d.requestType==="blogpost"){d.post=p.response.posts[0];var l=d.post.type;p=d.post.tags;o.innerHTML="Date Published: "+d.post.date.slice(0,d.post.date.indexOf(" "))+"<br/>";if(p.length!==0){o.innerHTML+="Tags: "+p[0];for(var i=1,r=p.length;i<r;i++)o.innerHTML+=", "+p[i]}else o.innerHTML+="Tags: No Tags Used";d._container.appendChild(o);
+b[l](d)}else{l=document.createElement("a");p=p.response.blog;i=document.createTextNode(p.title);l.setAttribute("href",p.url);l.appendChild(i);o.appendChild(l);o.innerHTML+=p.description;d._container.appendChild(o)}}else h.trigger("tumblrError","Error. Request failed. Status code: "+p.meta.status+" - Message: "+p.meta.msg)},false)}d._container.style.display="none";a&&a.appendChild(d._container)},start:function(d,a){if(a._container)a._container.style.display=""},end:function(d,a){if(a._container)a._container.style.display=
+"none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d._container)}})})(Popcorn,this);(function(g){g.plugin("linkedin",{manifest:{about:{name:"Popcorn LinkedIn Plugin",version:"0.1",author:"Dan Ventura",website:"dsventura.blogspot.com"},options:{type:{elem:"input",type:"text",label:"Type"},url:{elem:"input",type:"text",label:"URL"},apikey:{elem:"input",type:"text",label:"API Key"},counter:{elem:"input",type:"text",label:"Counter"},memberid:{elem:"input",type:"text",label:"Member ID",optional:true},format:{elem:"input",type:"text",label:"Format",optional:true},companyid:{elem:"input",
+type:"text",label:"Company ID",optional:true},modules:{elem:"input",type:"text",label:"Modules",optional:true},productid:{elem:"input",type:"text",label:"productid",optional:true},related:{elem:"input",type:"text",label:"related",optional:true},start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"linkedin-container"}},_setup:function(b){var d=b.apikey,a=document.getElementById(b.target),c=document.createElement("script");g.getScript("//platform.linkedin.com/in.js");
+b._container=document.createElement("div");b._container.appendChild(c);if(d)c.innerHTML="api_key: "+d;b.type=b.type&&b.type.toLowerCase()||"";var f=function(h){return{share:function(){c.setAttribute("type","IN/Share");h.counter&&c.setAttribute("data-counter",h.counter);h.url&&c.setAttribute("data-url",h.url)},memberprofile:function(){c.setAttribute("type","IN/MemberProfile");c.setAttribute("data-id",h.memberid);c.setAttribute("data-format",h.format||"inline");h.text&&h.format.toLowerCase()!=="inline"&&
+c.setAttribute("data-text",h.text)},companyinsider:function(){c.setAttribute("type","IN/CompanyInsider");c.setAttribute("data-id",h.companyid);h.modules&&h._container.setAttribute("data-modules",h.modules)},companyprofile:function(){c.setAttribute("type","IN/CompanyProfile");c.setAttribute("data-id",h.companyid);c.setAttribute("data-format",h.format||"inline");h.text&&h.format.toLowerCase()!=="inline"&&c.setAttribute("data-text",h.text);h.related!==undefined&&c.setAttribute("data-related",h.related)},
+recommendproduct:function(){c.setAttribute("type","IN/RecommendProduct");c.setAttribute("data-company",h.companyid||"LinkedIn");c.setAttribute("data-product",h.productid||"201714");h.counter&&c.setAttribute("data-counter",h.counter)}}}(b);if(d)f[b.type]&&f[b.type]();else{b._container=document.createElement("p");b._container.innerHTML="Plugin requires a valid <a href='https://www.linkedin.com/secure/developer'>apikey</a>";if(!a&&g.plugin.debug)throw"target container doesn't exist";a&&a.appendChild(b._container)}if(!a&&
+g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(b._container);b._container.style.display="none"},start:function(b,d){d._container.style.display="block"},end:function(b,d){d._container.style.display="none"},_teardown:function(b){var d=document.getElementById(b.target);d&&d.removeChild(b._container)}})})(Popcorn);(function(g){g.plugin("mustache",function(b){var d,a,c,f;g.getScript("http://mustache.github.com/extras/mustache.js");var h=!!b.dynamic,p=typeof b.template,o=typeof b.data,l=document.getElementById(b.target);if(!l&&g.plugin.debug)throw Error("target container doesn't exist");b.container=l||document.createElement("div");if(p==="function")if(h)c=b.template;else f=b.template(b);else if(p==="string")f=b.template;else if(g.plugin.debug)throw Error("Mustache Plugin Error: options.template must be a String or a Function.");
+else f="";if(o==="function")if(h)d=b.data;else a=b.data(b);else if(o==="string")a=JSON.parse(b.data);else if(o==="object")a=b.data;else if(g.plugin.debug)throw Error("Mustache Plugin Error: options.data must be a String, Object, or Function.");else a="";return{start:function(i,r){var k=function(){if(window.Mustache){if(d)a=d(r);if(c)f=c(r);var j=Mustache.to_html(f,a).replace(/^\s*/mg,"");r.container.innerHTML=j}else setTimeout(function(){k()},10)};k()},end:function(i,r){r.container.innerHTML=""},
+_teardown:function(){d=a=c=f=null}}},{about:{name:"Popcorn Mustache Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"mustache-container",template:{elem:"input",type:"text",label:"Template"},data:{elem:"input",type:"text",label:"Data"},dynamic:{elem:"input",type:"text",label:"Dynamic",optional:true}}})})(Popcorn);(function(g){function b(a,c){if(a.map)a.map.div.style.display=c;else setTimeout(function(){b(a,c)},10)}var d=1;g.plugin("openmap",function(a){var c,f,h,p,o,l,i,r,k=document.getElementById(a.target);c=document.createElement("div");c.id="openmapdiv"+d;c.style.width="100%";c.style.height="100%";d++;if(!k&&g.plugin.debug)throw Error("target container doesn't exist");k&&k.appendChild(c);r=function(){if(window.OpenLayers){if(a.location){location=new OpenLayers.LonLat(0,0);g.getJSONP("//tinygeocoder.com/create-api.php?q="+
+a.location+"&callback=jsonp",function(v){f=new OpenLayers.LonLat(v[1],v[0]);a.map.setCenter(f)})}else f=new OpenLayers.LonLat(a.lng,a.lat);a.type=a.type||"ROADMAP";if(a.type==="SATELLITE"){a.map=new OpenLayers.Map({div:c,maxResolution:0.28125,tileSize:new OpenLayers.Size(512,512)});var j=new OpenLayers.Layer.WorldWind("LANDSAT","//worldwind25.arc.nasa.gov/tile/tile.aspx",2.25,4,{T:"105"});a.map.addLayer(j);p=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326")}else if(a.type===
+"TERRAIN"){p=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326");a.map=new OpenLayers.Map({div:c,projection:h});j=new OpenLayers.Layer.WMS("USGS Terraserver","//terraserver-usa.org/ogcmap.ashx?",{layers:"DRG"});a.map.addLayer(j)}else{h=new OpenLayers.Projection("EPSG:900913");p=new OpenLayers.Projection("EPSG:4326");f=f.transform(p,h);a.map=new OpenLayers.Map({div:c,projection:h,displayProjection:p});j=new OpenLayers.Layer.OSM;a.map.addLayer(j)}if(a.map)a.map.div.style.display=
+"none"}else setTimeout(function(){r()},50)};r();return{_setup:function(j){window.OpenLayers||g.getScript("//openlayers.org/api/OpenLayers.js");var v=function(){if(j.map){j.zoom=j.zoom||2;if(j.zoom&&typeof j.zoom!=="number")j.zoom=+j.zoom;j.map.setCenter(f,j.zoom);if(j.markers){var w=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]),n=function(u){clickedFeature=u.feature;if(clickedFeature.attributes.text){i=new OpenLayers.Popup.FramedCloud("featurePopup",clickedFeature.geometry.getBounds().getCenterLonLat(),
+new OpenLayers.Size(120,250),clickedFeature.attributes.text,null,true,function(){l.unselect(this.feature)});clickedFeature.popup=i;i.feature=clickedFeature;j.map.addPopup(i)}},y=function(u){feature=u.feature;if(feature.popup){i.feature=null;j.map.removePopup(feature.popup);feature.popup.destroy();feature.popup=null}},C=function(u){g.getJSONP("//tinygeocoder.com/create-api.php?q="+u.location+"&callback=jsonp",function(x){x=(new OpenLayers.Geometry.Point(x[1],x[0])).transform(p,h);var A=OpenLayers.Util.extend({},
+w);if(!u.size||isNaN(u.size))u.size=14;A.pointRadius=u.size;A.graphicOpacity=1;A.externalGraphic=u.icon;x=new OpenLayers.Feature.Vector(x,null,A);if(u.text)x.attributes={text:u.text};o.addFeatures([x])})};o=new OpenLayers.Layer.Vector("Point Layer",{style:w});j.map.addLayer(o);for(var e=0,m=j.markers.length;e<m;e++){var q=j.markers[e];if(q.text)if(!l){l=new OpenLayers.Control.SelectFeature(o);j.map.addControl(l);l.activate();o.events.on({featureselected:n,featureunselected:y})}if(q.location)C(q);
+else{var s=(new OpenLayers.Geometry.Point(q.lng,q.lat)).transform(p,h),t=OpenLayers.Util.extend({},w);if(!q.size||isNaN(q.size))q.size=14;t.pointRadius=q.size;t.graphicOpacity=1;t.externalGraphic=q.icon;s=new OpenLayers.Feature.Vector(s,null,t);if(q.text)s.attributes={text:q.text};o.addFeatures([s])}}}}else setTimeout(function(){v()},13)};v()},start:function(j,v){b(v,"block")},end:function(j,v){b(v,"none")},_teardown:function(){k&&k.removeChild(c);c=map=f=h=p=o=l=i=null}}},{about:{name:"Popcorn OpenMap Plugin",
+version:"0.3",author:"@mapmeld",website:"mapadelsur.blogspot.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","TERRAIN"],label:"Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom",optional:true},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location"},
+markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);document.addEventListener("click",function(g){g=g.target;if(g.nodeName==="A"||g.parentNode&&g.parentNode.nodeName==="A")Popcorn.instances.forEach(function(b){b.options.pauseOnLinkClicked&&b.pause()})},false);(function(g){var b={},d=0,a=document.createElement("span"),c=["webkit","Moz","ms","O",""],f=["Transform","TransitionDuration","TransitionTimingFunction"],h={},p;document.getElementsByTagName("head")[0].appendChild(a);for(var o=0,l=f.length;o<l;o++)for(var i=0,r=c.length;i<r;i++){p=c[i]+f[o];if(p in a.style){h[f[o].toLowerCase()]=p;break}}document.getElementsByTagName("head")[0].appendChild(a);g.plugin("wordriver",{manifest:{about:{name:"Popcorn WordRiver Plugin"},options:{start:{elem:"input",type:"text",
+label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"wordriver-container",text:{elem:"input",type:"text",label:"Text"},color:{elem:"input",type:"text",label:"Color",optional:true}}},_setup:function(k){if(!document.getElementById(k.target)&&g.plugin.debug)throw Error("target container doesn't exist");k._duration=k.end-k.start;var j;if(!(j=b[k.target])){j=k.target;b[j]=document.createElement("div");var v=document.getElementById(j);v&&v.appendChild(b[j]);b[j].style.height="100%";b[j].style.position=
+"relative";j=b[j]}k._container=j;k.word=document.createElement("span");k.word.style.position="absolute";k.word.style.whiteSpace="nowrap";k.word.style.opacity=0;k.word.style.MozTransitionProperty="opacity, -moz-transform";k.word.style.webkitTransitionProperty="opacity, -webkit-transform";k.word.style.OTransitionProperty="opacity, -o-transform";k.word.style.transitionProperty="opacity, transform";k.word.style[h.transitionduration]="1s, "+k._duration+"s";k.word.style[h.transitiontimingfunction]="linear";
+k.word.innerHTML=k.text;k.word.style.color=k.color||"black"},start:function(k,j){j._container.appendChild(j.word);j.word.style[h.transform]="";j.word.style.fontSize=~~(30+20*Math.random())+"px";d%=j._container.offsetWidth-j.word.offsetWidth;j.word.style.left=d+"px";d+=j.word.offsetWidth+10;j.word.style[h.transform]="translateY("+(j._container.offsetHeight-j.word.offsetHeight)+"px)";j.word.style.opacity=1;setTimeout(function(){j.word.style.opacity=0},(j.end-j.start-1||1)*1E3)},end:function(k,j){j.word.style.opacity=
+0},_teardown:function(k){var j=document.getElementById(k.target);k.word.parentNode&&k._container.removeChild(k.word);b[k.target]&&!b[k.target].childElementCount&&j&&j.removeChild(b[k.target])&&delete b[k.target]}})})(Popcorn);(function(g){g.plugin("processing",function(b){var d=function(a){function c(f){var h=function(){a.listen("pause",function(){f.canvas.style.display==="inline"&&f.pjsInstance.noLoop()});a.listen("play",function(){f.canvas.style.display==="inline"&&f.pjsInstance.loop()})};if(f.sketch)g.xhr({url:f.sketch,dataType:"text",success:function(p){f.codeReady=false;p=Processing.compile(p);f.pjsInstance=new Processing(f.canvas,p);f.seeking=false;f._running&&!a.media.paused&&f.pjsInstance.loop()||f.pjsInstance.noLoop();
+a.listen("seeking",function(){f._running&&f.canvas.style.display==="inline"&&f.noPause&&f.pjsInstance.loop()});f.noPause=f.noPause||false;!f.noPause&&h();f.codeReady=true}});else if(g.plugin.debug)throw Error("Popcorn.Processing: options.sketch is undefined");}window.Processing?c(b):g.getScript("//cloud.github.com/downloads/processing-js/processing-js/processing-1.3.6.min.js",function(){c(b)})};return{_setup:function(a){a.codeReady=false;a.parentTarget=document.getElementById(a.target);if(!a.parentTarget&&
+g.plugin.debug)throw Error("target container doesn't exist");var c=document.createElement("canvas");c.id=g.guid(a.target+"-sketch");c.style.display="none";a.canvas=c;a.parentTarget&&a.parentTarget.appendChild(a.canvas);d(this)},start:function(a,c){c.codeReady&&!this.media.paused&&c.pjsInstance.loop();c.canvas.style.display="inline"},end:function(a,c){c.pjsInstance&&c.pjsInstance.noLoop();c.canvas.style.display="none"},_teardown:function(a){a.pjsInstance&&a.pjsInstance.exit();a.parentTarget&&a.parentTarget.removeChild(a.canvas)}}},
+{about:{name:"Popcorn Processing Plugin",version:"0.1",author:"Christopher De Cairos, Benjamin Chalovich",website:"cadecairos.blogspot.com, ben1amin.wordpress.org"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:{elem:"input",type:"text",label:"Target"},sketch:{elem:"input",type:"url",label:"Sketch"},noPause:{elem:"select",options:["TRUE","FALSE"],label:"No Loop",optional:true}}})})(Popcorn);(function(g){var b=1;g.plugin("timeline",function(d){var a=document.getElementById(d.target),c=document.createElement("div"),f,h=true;if(a&&!a.firstChild){a.appendChild(f=document.createElement("div"));f.style.width="inherit";f.style.height="inherit";f.style.overflow="auto"}else f=a.firstChild;c.style.display="none";c.id="timelineDiv"+b;d.direction=d.direction||"up";if(d.direction.toLowerCase()==="down")h=false;if(a&&f)h?f.insertBefore(c,f.firstChild):f.appendChild(c);else if(g.plugin.debug)throw Error("target container doesn't exist");
+b++;c.innerHTML="<p><span id='big' style='font-size:24px; line-height: 130%;' >"+d.title+"</span><br /><span id='mid' style='font-size: 16px;'>"+d.text+"</span><br />"+d.innerHTML;return{start:function(p,o){c.style.display="block";if(o.direction==="down")f.scrollTop=f.scrollHeight},end:function(){c.style.display="none"},_teardown:function(){f&&c&&f.removeChild(c)&&!f.firstChild&&a.removeChild(f)}}},{about:{name:"Popcorn Timeline Plugin",version:"0.1",author:"David Seifried @dcseifried",website:"dseifried.wordpress.com"},
+options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"feed-container",title:{elem:"input",type:"text",label:"title"},text:{elem:"input",type:"text",label:"text"},innerHTML:{elem:"input",type:"text",label:"innerHTML",optional:true},direction:{elem:"input",type:"text",label:"direction",optional:true}}})})(Popcorn);(function(g,b){var d={};g.plugin("documentcloud",{manifest:{about:{name:"Popcorn Document Cloud Plugin",version:"0.1",author:"@humphd, @ChrisDeCairos",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"documentcloud-container",width:{elem:"input",type:"text",label:"Width",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},src:{elem:"input",type:"text",label:"PDF URL"},preload:{elem:"input",
+type:"boolean",label:"Preload",optional:true},page:{elem:"input",type:"number",label:"Page Number",optional:true},aid:{elem:"input",type:"number",label:"Annotation Id",optional:true}}},_setup:function(a){function c(){function i(u){a._key=u.api.getId();a._changeView=function(x){a.aid?x.pageSet.showAnnotation(x.api.getAnnotation(a.aid)):x.api.setCurrentPage(a.page)}}function r(){d[a._key]={num:1,id:a._containerId};h.loaded=true}h.loaded=false;var k=a.url.replace(/\.html$/,".js"),j=a.target,v=b.getElementById(j),
+w=b.createElement("div"),n=g.position(v),y=a.width||n.width;n=a.height||n.height;var C=a.sidebar||true,e=a.text||true,m=a.pdf||true,q=a.showAnnotations||true,s=a.zoom||700,t=a.search||true;if(!function(u){var x=false;g.forEach(h.viewers,function(A){if(A.api.getSchema().canonicalURL===u){i(A);A=d[a._key];a._containerId=A.id;A.num+=1;x=true;h.loaded=true}});return x}(a.url)){w.id=a._containerId=g.guid(j);j="#"+w.id;v.appendChild(w);p.trigger("documentready");h.load(k,{width:y,height:n,sidebar:C,text:e,
+pdf:m,showAnnotations:q,zoom:s,search:t,container:j,afterLoad:a.page||a.aid?function(u){i(u);a._changeView(u);w.style.visibility="hidden";u.elements.pages.hide();r()}:function(u){i(u);r();w.style.visibility="hidden";u.elements.pages.hide()}})}}function f(){window.DV.loaded?c():setTimeout(f,25)}var h=window.DV=window.DV||{},p=this;if(h.loading)f();else{h.loading=true;h.recordHit="//www.documentcloud.org/pixel.gif";var o=b.createElement("link"),l=b.getElementsByTagName("head")[0];o.rel="stylesheet";
+o.type="text/css";o.media="screen";o.href="//s3.documentcloud.org/viewer/viewer-datauri.css";l.appendChild(o);h.loaded=false;g.getScript("http://s3.documentcloud.org/viewer/viewer.js",function(){h.loading=false;c()})}},start:function(a,c){var f=b.getElementById(c._containerId),h=DV.viewers[c._key];(c.page||c.aid)&&h&&c._changeView(h);if(f&&h){f.style.visibility="visible";h.elements.pages.show()}},end:function(a,c){var f=b.getElementById(c._containerId);if(f&&DV.viewers[c._key]){f.style.visibility=
+"hidden";DV.viewers[c._key].elements.pages.hide()}},_teardown:function(a){var c=b.getElementById(a._containerId);if((a=a._key)&&DV.viewers[a]&&--d[a].num===0){for(DV.viewers[a].api.unload();c.hasChildNodes();)c.removeChild(c.lastChild);c.parentNode.removeChild(c)}}})})(Popcorn,window.document);(function(g){g.parser("parseJSON","JSON",function(b){var d={title:"",remote:"",data:[]};g.forEach(b.data,function(a){d.data.push(a)});return d})})(Popcorn);(function(g){g.parser("parseSBV",function(b){var d={title:"",remote:"",data:[]},a=[],c=0,f=0,h=function(k){k=k.split(":");var j=k.length-1,v;try{v=parseInt(k[j-1],10)*60+parseFloat(k[j],10);if(j===2)v+=parseInt(k[0],10)*3600}catch(w){throw"Bad cue";}return v},p=function(k,j){var v={};v[k]=j;return v};b=b.text.split(/(?:\r\n|\r|\n)/gm);for(f=b.length;c<f;){var o={},l=[],i=b[c++].split(",");try{o.start=h(i[0]);for(o.end=h(i[1]);c<f&&b[c];)l.push(b[c++]);o.text=l.join("<br />");a.push(p("subtitle",o))}catch(r){for(;c<
+f&&b[c];)c++}for(;c<f&&!b[c];)c++}d.data=a;return d})})(Popcorn);(function(g){g.parser("parseSRT",function(b){var d={title:"",remote:"",data:[]},a=[],c=0,f=0,h=0,p,o,l,i=function(k){k=k.split(":");try{var j=k[2].split(",");if(j.length===1)j=k[2].split(".");return parseFloat(k[0],10)*3600+parseFloat(k[1],10)*60+parseFloat(j[0],10)+parseFloat(j[1],10)/1E3}catch(v){return 0}},r=function(k,j){var v={};v[k]=j;return v};b=b.text.split(/(?:\r\n|\r|\n)/gm);f=b.length;for(c=0;c<f;c++){l={};o=[];l.id=parseInt(b[c++],10);p=b[c++].split(/[\t ]*--\>[\t ]*/);l.start=i(p[0]);
+h=p[1].indexOf(" ");if(h!==-1)p[1]=p[1].substr(0,h);for(l.end=i(p[1]);c<f&&b[c];)o.push(b[c++]);l.text=o.join("\\N").replace(/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,"");l.text=l.text.replace(/</g,"<").replace(/>/g,">");l.text=l.text.replace(/<(\/?(font|b|u|i|s))((\s+(\w|\w[\w\-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)>/gi,"<$1$3$7>");l.text=l.text.replace(/\\N/gi,"<br />");a.push(r("subtitle",l))}d.data=a;return d})})(Popcorn);(function(g){function b(c,f){var h=c.substr(10).split(","),p;p={start:d(h[f.start]),end:d(h[f.end])};if(p.start===-1||p.end===-1)throw"Invalid time";var o=k.call(i,/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,""),l=o.replace,i;i=h.length;k=[];for(var r=f.text;r<i;r++)k.push(h[r]);i=k.join(",");var k=i.replace;p.text=l.call(o,/\\N/gi,"<br />");return p}function d(c){var f=c.split(":");if(c.length!==10||f.length<3)return-1;return parseInt(f[0],10)*3600+parseInt(f[1],10)*60+parseFloat(f[2],10)}function a(c,
+f){var h={};h[c]=f;return h}g.parser("parseSSA",function(c){var f={title:"",remote:"",data:[]},h=[],p=0,o;c=c.text.split(/(?:\r\n|\r|\n)/gm);for(o=c.length;p<o&&c[p]!=="[Events]";)p++;var l=c[++p].substr(8).split(", "),i={},r,k;k=0;for(r=l.length;k<r;k++)if(l[k]==="Start")i.start=k;else if(l[k]==="End")i.end=k;else if(l[k]==="Text")i.text=k;for(;++p<o&&c[p]&&c[p][0]!=="[";)try{h.push(a("subtitle",b(c[p],i)))}catch(j){}f.data=h;return f})})(Popcorn);(function(g){g.parser("parseTTML",function(b){var d={title:"",remote:"",data:[]},a,c=0,f,h=function(l,i){if(!l)return-1;var r=l.split(":"),k=r.length-1;if(k>=2)return parseInt(r[0],10)*3600+parseInt(r[k-1],10)*60+parseFloat(r[k],10);for(r=l.length-1;r>=0;r--)if(l[r]<="9"&&l[r]>="0")break;r++;k=l.substr(r);i=i||0;if(k==="h")k=3600;else if(k==="m")k=60;else if(k==="s")k=1;else if(k==="ms")k=0.0010;else return-1;return parseFloat(l.substr(0,r))*k+i},p=function(l,i){var r={};r[l]=i;return r},o=function(l,
+i){for(var r=l.firstChild,k;r;){if(r.nodeType===1)if(r.nodeName==="p"){k=r;var j=i,v={};v.text=k.textContent.replace(/^[\s]+|[\s]+$/gm,"").replace(/(?:\r\n|\r|\n)/gm,"<br />");v.id=k.getAttribute("xml:id")||k.getAttribute("id");v.start=h(k.getAttribute("begin"),j);v.end=h(k.getAttribute("end"),j);v.target=f;if(v.end<0){v.end=h(k.getAttribute("duration"),0);if(v.end>=0)v.end+=v.start;else v.end=Number.MAX_VALUE}k=v;d.data.push(p("subtitle",k));c++}else if(r.nodeName==="div"){k=h(r.getAttribute("begin"));
+if(k<0)k=i;o(r,k)}r=r.nextSibling}};if(!b.xml||!b.xml.documentElement||!(a=b.xml.documentElement.firstChild))return d;for(;a.nodeName!=="body";)a=a.nextSibling;f="";o(a,0);return d})})(Popcorn);(function(g){g.parser("parseTTXT",function(b){var d={title:"",remote:"",data:[]},a=function(o){o=o.split(":");var l=0;try{return parseFloat(o[0],10)*60*60+parseFloat(o[1],10)*60+parseFloat(o[2],10)}catch(i){l=0}return l},c=function(o,l){var i={};i[o]=l;return i};b=b.xml.lastChild.lastChild;for(var f=Number.MAX_VALUE,h=[];b;){if(b.nodeType===1&&b.nodeName==="TextSample"){var p={};p.start=a(b.getAttribute("sampleTime"));p.text=b.getAttribute("text");if(p.text){p.end=f-0.0010;h.push(c("subtitle",p))}f=
+p.start}b=b.previousSibling}d.data=h.reverse();return d})})(Popcorn);(function(g){function b(a){var c=a.split(":");a=a.length;var f;if(a!==12&&a!==9)throw"Bad cue";a=c.length-1;try{f=parseInt(c[a-1],10)*60+parseFloat(c[a],10);if(a===2)f+=parseInt(c[0],10)*3600}catch(h){throw"Bad cue";}return f}function d(a,c){var f={};f[a]=c;return f}g.parser("parseVTT",function(a){var c={title:"",remote:"",data:[]},f=[],h=0,p=0,o,l;a=a.text.split(/(?:\r\n|\r|\n)/gm);p=a.length;if(p===0||a[0]!=="WEBVTT")return c;for(h++;h<p;){o=[];try{for(var i=h;i<p&&!a[i];)i++;h=i;var r=a[h++];i=
+void 0;var k={};if(!r||r.indexOf("--\>")===-1)throw"Bad cue";i=r.replace(/--\>/," --\> ").split(/[\t ]+/);if(i.length<2)throw"Bad cue";k.id=r;k.start=b(i[0]);k.end=b(i[2]);for(l=k;h<p&&a[h];)o.push(a[h++]);l.text=o.join("<br />");f.push(d("subtitle",l))}catch(j){for(h=h;h<p&&a[h];)h++;h=h}}c.data=f;return c})})(Popcorn);(function(g){g.parser("parseXML","XML",function(b){var d={title:"",remote:"",data:[]},a={},c=function(i){i=i.split(":");if(i.length===1)return parseFloat(i[0],10);else if(i.length===2)return parseFloat(i[0],10)+parseFloat(i[1]/12,10);else if(i.length===3)return parseInt(i[0]*60,10)+parseFloat(i[1],10)+parseFloat(i[2]/12,10);else if(i.length===4)return parseInt(i[0]*3600,10)+parseInt(i[1]*60,10)+parseFloat(i[2],10)+parseFloat(i[3]/12,10)},f=function(i){for(var r={},k=0,j=i.length;k<j;k++){var v=i.item(k).nodeName,
+w=i.item(k).nodeValue;if(v==="in")r.start=c(w);else if(v==="out")r.end=c(w);else if(v==="resourceid")g.extend(r,a[w]);else r[v]=w}return r},h=function(i,r){var k={};k[i]=r;return k},p=function(i,r,k){var j={};g.extend(j,r,f(i.attributes),{text:i.textContent});r=i.childNodes;if(r.length<1||r.length===1&&r[0].nodeType===3)if(k)a[j.id]=j;else d.data.push(h(i.nodeName,j));else for(i=0;i<r.length;i++)r[i].nodeType===1&&p(r[i],j,k)};b=b.documentElement.childNodes;for(var o=0,l=b.length;o<l;o++)if(b[o].nodeType===
+1)b[o].nodeName==="manifest"?p(b[o],{},true):p(b[o],{},false);return d})})(Popcorn);(function(g,b){function d(l,i){if(l.currentStyle)return l.currentStyle[i];else if(b.getComputedStyle)return document.defaultView.getComputedStyle(l,null).getPropertyValue(i)}function a(l){return'<div><a href="'+l.user.profile+'"><img width="16px height="16px" src="'+l.user.avatar+'"></img>'+l.user.name+"</a> at "+function(i){var r=h(i/60);i=p(i%60);return r+"."+(i<10?"0":"")+i}(l.start)+" "+function(i){function r(k,j){return k+" "+j+(k>1?"s":"")+" ago"}i=((new Date).getTime()-i.getTime())/1E3;if(i<
+60)return r(p(i),"second");i/=60;if(i<60)return r(p(i),"minute");i/=60;if(i<24)return r(p(i),"hour");i/=24;if(i<30)return r(p(i),"day");if(i<365)return r(p(i/30),"month");return r(p(i/365),"year")}(l.date)+"<br />"+l.text+"</span>"}function c(l){if(b.swfobject&&b.soundcloud){var i={enable_api:true,object_id:l._playerId,url:l.src,show_comments:!l._options.api.key&&!l._options.api.commentdiv},r={id:l._playerId,name:l._playerId},k=document.createElement("div");k.setAttribute("id",l._playerId);l._container.appendChild(k);
+swfobject.embedSWF("http://player.soundcloud.com/player.swf",l._playerId,l.offsetWidth,l.height,"9.0.0","expressInstall.swf",i,{allowscriptaccess:"always",wmode:"transparent"},r)}else setTimeout(function(){c(l)},15)}var f=Math.abs,h=Math.floor,p=Math.round,o={};g.soundcloud=function(l,i,r){g.getScript("http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js");g.getScript("http://popcornjs.org/code/players/soundcloud/lib/soundcloud.player.api.js",function(){var k=1;soundcloud.addEventListener("onPlayerReady",
+function(j,v){var w=o[j.api_getFlashId()];w.swfObj=j;w.duration=j.api_getTrackDuration();w.currentTime=j.api_getTrackPosition();w.volume=w.previousVolume=j.api_getVolume()/100;w._mediaId=v.mediaId;w.dispatchEvent("load");w.dispatchEvent("canplay");w.dispatchEvent("durationchange");w.timeupdate()});soundcloud.addEventListener("onMediaStart",function(j){j=o[j.api_getFlashId()];j.played=1;j.dispatchEvent("playing")});soundcloud.addEventListener("onMediaPlay",function(j){if(k)k=0;else o[j.api_getFlashId()].dispatchEvent("play")});
+soundcloud.addEventListener("onMediaPause",function(j){o[j.api_getFlashId()].dispatchEvent("pause")});soundcloud.addEventListener("onMediaBuffering",function(j){j=o[j.api_getFlashId()];j.dispatchEvent("progress");if(j.readyState===0){j.readyState=3;j.dispatchEvent("readystatechange")}});soundcloud.addEventListener("onMediaDoneBuffering",function(j){o[j.api_getFlashId()].dispatchEvent("canplaythrough")});soundcloud.addEventListener("onMediaEnd",function(j){j=o[j.api_getFlashId()];j.paused=1;j.dispatchEvent("ended")});
+soundcloud.addEventListener("onMediaSeek",function(j){var v=o[j.api_getFlashId()];v.setCurrentTime(j.api_getTrackPosition());v.paused&&v.dispatchEvent("timeupdate")});soundcloud.addEventListener("onPlayerError",function(j){o[j.api_getFlashId()].dispatchEvent("error")})});return new g.soundcloud.init(l,i,r)};g.soundcloud.init=function(){function l(i){var r=i._options,k=i._container,j=k.getBoundingClientRect();i.width=r.width||d(k,"width")||"100%";i.height=r.height||d(k,"height")||"81px";i.src=r.src;
+i.autoplay=r.autoplay;if(parseFloat(i.height,10)!==81)i.height="81px";i.offsetLeft=j.left;i.offsetTop=j.top;i.offsetHeight=parseFloat(i.height,10);i.offsetWidth=parseFloat(i.width,10);if(/[\d]+%/.test(i.width)){r=d(k,"width");i._container.style.width=i.width;i.offsetWidth=i._container.offsetWidth;i._container.style.width=r}if(/[\d]+%/.test(i.height)){r=d(k,"height");i._container.style.height=i.height;i.offsetHeight=i._container.offsetHeight;i._container.style.height=r}}return function(i,r,k){if(i)if(r){if(/file/.test(location.protocol))throw"Must run from a web server!";
+}else throw"Must supply a source!";else throw"Must supply an id!";if(!(this._container=document.getElementById(i)))throw"Could not find that container in the DOM!";k=k||{};k.api=k.api||{};k.target=i;k.src=r;k.api.commentformat=k.api.commentformat||a;this._mediaId=0;this._listeners={};this._playerId=g.guid(k.target);this._containerId=k.target;this._options=k;this._comments=[];this._popcorn=null;l(this);this.duration=0;this.volume=1;this.ended=this.currentTime=0;this.paused=1;this.readyState=0;this.playbackRate=
+1;this.left=this.top=0;this.autoplay=null;this.played=0;this.addEventListener("load",function(){var j=this.getBoundingClientRect();this.top=j.top;this.left=j.left;this.offsetWidth=this.swfObj.offsetWidth;this.offsetHeight=this.swfObj.offsetHeight;this.offsetLeft=this.swfObj.offsetLeft;this.offsetTop=this.swfObj.offsetTop});o[this._playerId]=this;c(this)}}();g.soundcloud.init.prototype=g.soundcloud.prototype;g.extend(g.soundcloud.prototype,{setVolume:function(l){if(!(!l&&l!==0)){if(l<0)l=-l;if(l>1)l%=
+1;this.volume=this.previousVolume=l;this.swfObj.api_setVolume(l*100);this.dispatchEvent("volumechange")}},setCurrentTime:function(l){if(!(!l&&l!==0)){this.currentTime=this.previousCurrentTime=l;this.ended=l>=this.duration;this.dispatchEvent("seeked")}},play:function(){if(this.swfObj){if(this.paused){this.paused=0;this.swfObj.api_play()}}else this.addEventListener("load",this.play)},pause:function(){if(this.swfObj){if(!this.paused){this.paused=1;this.swfObj.api_pause()}}else this.addEventListener("load",
+this.pause)},mute:function(){if(this.swfObj)if(this.muted())if(this.paused)this.setVolume(this.oldVol);else this.volume=this.oldVol;else{this.oldVol=this.volume;if(this.paused)this.setVolume(0);else this.volume=0}else this.addEventListener("load",this.mute)},muted:function(){return this.volume===0},load:function(){if(this.swfObj){this.play();this.pause()}else this.addEventListener("load",this.load)},addEventListener:function(l,i){this._listeners[l]||(this._listeners[l]=[]);this._listeners[l].push(i);
+return i},dispatchEvent:function(l){var i=this;l=l.type||l;l==="play"&&this.paused||l==="pause"&&!this.paused?this[l]():g.forEach(this._listeners[l],function(r){r.call(i)})},timeupdate:function(){var l=this,i=this.swfObj.api_getVolume()/100;if(f(this.currentTime-this.previousCurrentTime)>0.25)this.swfObj.api_seekTo(this.currentTime);else this.previousCurrentTime=this.currentTime=this.swfObj.api_getTrackPosition();if(i!==this.previousVolume)this.setVolume(i);else this.volume!==this.previousVolume&&
+this.setVolume(this.volume);this.paused||this.dispatchEvent("timeupdate");l.ended||setTimeout(function(){l.timeupdate.call(l)},33)},getBoundingClientRect:function(){var l;if(this.swfObj){l=this.swfObj.getBoundingClientRect();return{bottom:l.bottom,left:l.left,right:l.right,top:l.top,width:l.width||l.right-l.left,height:l.height||l.bottom-l.top}}else{tmp=this._container.getBoundingClientRect();return{left:tmp.left,top:tmp.top,width:this.offsetWidth,height:this.offsetHeight,bottom:tmp.top+this.width,
+right:tmp.top+this.height}}},registerPopcornWithPlayer:function(l){if(this.swfObj){this._popcorn=l;var i=this._options.api;if(i.key&&i.commentdiv){var r=this;g.xhr({url:"http://api.soundcloud.com/tracks/"+r._mediaId+"/comments.js?consumer_key="+i.key,success:function(k){g.forEach(k.json,function(j){r.addComment({start:j.timestamp/1E3,date:new Date(j.created_at),text:j.body,user:{name:j.user.username,profile:j.user.permalink_url,avatar:j.user.avatar_url}})})}})}}else this.addEventListener("load",function(){this.registerPopcornWithPlayer(l)})}});
+g.extend(g.soundcloud.prototype,{addComment:function(l,i){var r=this,k={start:l.start||0,date:l.date||new Date,text:l.text||"",user:{name:l.user.name||"",profile:l.user.profile||"",avatar:l.user.avatar||""},display:function(){return(i||r._options.api.commentformat)(k)}};this._comments.push(k);this._popcorn&&this._popcorn.subtitle({start:k.start,target:this._options.api.commentdiv,display:"inline",language:"en",text:k.display()})}})})(Popcorn,window);(function(){vimeo_player_loaded=function(g){vimeo_player_loaded[g]&&vimeo_player_loaded[g]()};vimeo_player_loaded.seek={};vimeo_player_loaded.loadProgress={};vimeo_player_loaded.play={};vimeo_player_loaded.pause={};Popcorn.player("vimeo",{_canPlayType:function(g,b){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(vimeo)/.test(b)&&g.toLowerCase()!=="video"},_setup:function(g){var b=this,d,a=document.createElement("div"),c=0,f=false,h=0,p,o;a.id=b.id+Popcorn.guid();b.appendChild(a);o=b.style.width?""+
+b.offsetWidth:"560";p=b.style.height?""+b.offsetHeight:"315";var l=function(){var i;i=b.src;var r=0,k=false;vimeo_player_loaded[a.id]=function(){d=document.getElementById(a.id);vimeo_player_loaded.seek[a.id]=function(w){if(w!==c){c=w;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate")}};vimeo_player_loaded.play[a.id]=function(){if(b.paused){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing");j()}};vimeo_player_loaded.pause[a.id]=function(){if(!b.paused){b.paused=true;b.dispatchEvent("pause")}};
+vimeo_player_loaded.loadProgress[a.id]=function(w){if(!k){k=true;b.dispatchEvent("loadstart")}w.percent===100&&b.dispatchEvent("canplaythrough")};d.api_addEventListener("seek","vimeo_player_loaded.seek."+a.id);d.api_addEventListener("loadProgress","vimeo_player_loaded.loadProgress."+a.id);d.api_addEventListener("play","vimeo_player_loaded.play."+a.id);d.api_addEventListener("pause","vimeo_player_loaded.pause."+a.id);var j=function(){if(!b.paused){c=d.api_getCurrentTime();b.dispatchEvent("timeupdate");
+setTimeout(j,10)}},v=function(){var w=d.api_getVolume()===0,n=d.api_getVolume();if(f!==w){f=w;b.dispatchEvent("volumechange")}if(h!==n){h=n;b.dispatchEvent("volumechange")}setTimeout(v,250)};b.play=function(){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing");j();d.api_play()};b.pause=function(){if(!b.paused){b.paused=true;b.dispatchEvent("pause");d.api_pause()}};Popcorn.player.defineProperty(b,"currentTime",{set:function(w){if(!w)return c;c=+w;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate");
+d.api_seekTo(c);return c},get:function(){return c}});Popcorn.player.defineProperty(b,"muted",{set:function(w){if(d.api_getVolume()===0!==w)if(w){r=d.api_getVolume();d.api_setVolume(0)}else d.api_setVolume(r)},get:function(){return d.api_getVolume()===0}});Popcorn.player.defineProperty(b,"volume",{set:function(w){if(!w||typeof w!=="number"||w<0||w>1)return d.api_getVolume()/100;if(d.api_getVolume()!==w){d.api_setVolume(w*100);h=d.api_getVolume();b.dispatchEvent("volumechange")}return d.api_getVolume()/
+100},get:function(){return d.api_getVolume()/100}});b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");b.duration=d.api_getDuration();b.dispatchEvent("durationchange");v();b.readyState=4;b.dispatchEvent("canplaythrough")};i=/\d+$/.exec(i);i={clip_id:i?i[0]:0,api:1,js_swf_id:a.id};Popcorn.extend(i,g);swfobject.embedSWF("//vimeo.com/moogaloop.swf",a.id,o,p,"9.0.0","expressInstall.swf",i,{allowscriptaccess:"always",allowfullscreen:"true",wmode:"transparent"},{})};window.swfobject?l():Popcorn.getScript("//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
+l)}})})();var onYouTubePlayerReady=function(g){onYouTubePlayerReady[g]&&onYouTubePlayerReady[g]()};onYouTubePlayerReady.stateChangeEventHandler={};onYouTubePlayerReady.onErrorEventHandler={};
+Popcorn.player("youtube",{_canPlayType:function(g,b){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu)/.test(b)&&g.toLowerCase()!=="video"},_setup:function(g){var b=this,d=false,a=document.createElement("div"),c=0,f=0,h=true,p=false,o=false,l=100;b.paused=undefined;a.id=b.id+Popcorn.guid();g._container=a;b.appendChild(a);var i=function(){var r,k,j,v,w;onYouTubePlayerReady[a.id]=function(){g.youtubeObject=document.getElementById(a.id);onYouTubePlayerReady.stateChangeEventHandler[a.id]=function(C){if(!g.destroyed)if(C===
+2)if(p&&f===c&&f!==g.youtubeObject.getCurrentTime()){p=false;g.youtubeObject.seekTo(c)}else{c=g.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate");!b.paused&&b.pause()}else if(C===1&&!h)b.paused&&b.play();else if(C===-1)g.youtubeObject.playVideo();else if(C===1&&h){h=false;if(b.paused===true)b.pause();else if(b.paused===false)b.play();else if(d)b.play();else d||b.pause();b.duration=g.youtubeObject.getDuration();b.dispatchEvent("durationchange");y();b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");
+b.readyState=4;b.dispatchEvent("canplaythrough")}else C===0&&b.dispatchEvent("ended")};onYouTubePlayerReady.onErrorEventHandler[a.id]=function(C){[2,100,101,150].indexOf(C)!==-1&&b.dispatchEvent("error")};g.youtubeObject.addEventListener("onStateChange","onYouTubePlayerReady.stateChangeEventHandler."+a.id);g.youtubeObject.addEventListener("onError","onYouTubePlayerReady.onErrorEventHandler."+a.id);var n=function(){if(!g.destroyed)if(!b.paused){c=g.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate");
+setTimeout(n,10)}},y=function(){if(!g.destroyed){if(o!==g.youtubeObject.isMuted()){o=g.youtubeObject.isMuted();b.dispatchEvent("volumechange")}if(l!==g.youtubeObject.getVolume()){l=g.youtubeObject.getVolume();b.dispatchEvent("volumechange")}setTimeout(y,250)}};b.play=function(){if(!g.destroyed){if(b.paused!==false||g.youtubeObject.getPlayerState()!==1){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing")}n();g.youtubeObject.playVideo()}};b.pause=function(){if(!g.destroyed)if(b.paused!==
+true||g.youtubeObject.getPlayerState()!==2){b.paused=true;b.dispatchEvent("pause");g.youtubeObject.pauseVideo()}};Popcorn.player.defineProperty(b,"currentTime",{set:function(C){c=f=+C;p=true;if(g.destroyed)return c;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate");g.youtubeObject.seekTo(c);return c},get:function(){return c}});Popcorn.player.defineProperty(b,"muted",{set:function(C){if(g.destroyed)return C;if(g.youtubeObject.isMuted()!==C){C?g.youtubeObject.mute():g.youtubeObject.unMute();o=
+g.youtubeObject.isMuted();b.dispatchEvent("volumechange")}return g.youtubeObject.isMuted()},get:function(){if(g.destroyed)return 0;return g.youtubeObject.isMuted()}});Popcorn.player.defineProperty(b,"volume",{set:function(C){if(g.destroyed)return C;if(g.youtubeObject.getVolume()/100!==C){g.youtubeObject.setVolume(C*100);l=g.youtubeObject.getVolume();b.dispatchEvent("volumechange")}return g.youtubeObject.getVolume()/100},get:function(){if(g.destroyed)return 0;return g.youtubeObject.getVolume()/100}})};
+g.controls=+g.controls===0||+g.controls===1?g.controls:1;g.annotations=+g.annotations===1||+g.annotations===3?g.annotations:1;r={playerapiid:a.id};k=/^.*(?:\/|v=)(.{11})/.exec(b.src)[1];w=(b.src.split("?")[1]||"").replace(/v=.{11}/,"");d=/autoplay=1/.test(w);j=b.style.width?""+b.offsetWidth:"560";v=b.style.height?""+b.offsetHeight:"315";k={id:a.id,"data-youtube-player":"//www.youtube.com/e/"+k+"?"+w+"&enablejsapi=1&playerapiid="+a.id+"&version=3"};swfobject.embedSWF(k["data-youtube-player"],a.id,
+j,v,"8",undefined,r,{wmode:"transparent",allowScriptAccess:"always"},k)};window.swfobject?i():Popcorn.getScript("//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",i)},_teardown:function(g){g.destroyed=true;g.youtubeObject.stopVideo();g.youtubeObject.clearVideo();this.removeChild(document.getElementById(g._container.id))}});
--- a/web/res/js/raphael-min.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/js/raphael-min.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,7 +1,10 @@
-/*
- * Raphael 1.5.2 - JavaScript Vector Library
- *
- * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
- * Licensed under the MIT (http://raphaeljs.com/license.html) license.
- */
-(function(){function a(){if(a.is(arguments[0],G)){var b=arguments[0],d=bV[m](a,b.splice(0,3+a.is(b[0],E))),e=d.set();for(var g=0,h=b[w];g<h;g++){var i=b[g]||{};c[f](i.type)&&e[L](d[i.type]().attr(i))}return e}return bV[m](a,arguments)}a.version="1.5.2";var b=/[, ]+/,c={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},d=/\{(\d+)\}/g,e="prototype",f="hasOwnProperty",g=document,h=window,i={was:Object[e][f].call(h,"Raphael"),is:h.Raphael},j=function(){this.customAttributes={}},k,l="appendChild",m="apply",n="concat",o="createTouch"in g,p="",q=" ",r=String,s="split",t="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[s](q),u={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},v="join",w="length",x=r[e].toLowerCase,y=Math,z=y.max,A=y.min,B=y.abs,C=y.pow,D=y.PI,E="number",F="string",G="array",H="toString",I="fill",J=Object[e][H],K={},L="push",M=/^url\(['"]?([^\)]+?)['"]?\)$/i,N=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,O={"NaN":1,Infinity:1,"-Infinity":1},P=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,Q=y.round,R="setAttribute",S=parseFloat,T=parseInt,U=" progid:DXImageTransform.Microsoft",V=r[e].toUpperCase,W={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:"10px \"Arial\"","font-family":"\"Arial\"","font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},X={along:"along",blur:E,"clip-rect":"csv",cx:E,cy:E,fill:"colour","fill-opacity":E,"font-size":E,height:E,opacity:E,path:"path",r:E,rotation:"csv",rx:E,ry:E,scale:"csv",stroke:"colour","stroke-opacity":E,"stroke-width":E,translation:"csv",width:E,x:E,y:E},Y="replace",Z=/^(from|to|\d+%?)$/,$=/\s*,\s*/,_={hs:1,rg:1},ba=/,?([achlmqrstvxz]),?/gi,bb=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,bc=/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,bd=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,be=function(a,b){return a.key-b.key};a.type=h.SVGAngle||g.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML";if(a.type=="VML"){var bf=g.createElement("div"),bg;bf.innerHTML="<v:shape adj=\"1\"/>";bg=bf.firstChild;bg.style.behavior="url(#default#VML)";if(!(bg&&typeof bg.adj=="object"))return a.type=null;bf=null}a.svg=!(a.vml=a.type=="VML");j[e]=a[e];k=j[e];a._id=0;a._oid=0;a.fn={};a.is=function(a,b){b=x.call(b);if(b=="finite")return!O[f](+a);return b=="null"&&a===null||b==typeof a||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||J.call(a).slice(8,-1).toLowerCase()==b};a.angle=function(b,c,d,e,f,g){{if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return((h<0)*180+y.atan(-i/-h)*180/D+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)}};a.rad=function(a){return a%360*D/180};a.deg=function(a){return a*180/D%360};a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,G)){var e=b.length;while(e--)if(B(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(f<d)return c-f;if(f>b-d)return c-f+b}return c};function bh(){var a=[],b=0;for(;b<32;b++)a[b]=(~(~(y.random()*16)))[H](16);a[12]=4;a[16]=(a[16]&3|8)[H](16);return"r-"+a[v]("")}a.setWindow=function(a){h=a;g=h.document};var bi=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write("<body>");e.close();d=e.body}catch(a){d=createPopup().document.body}var f=d.createTextRange();bi=bm(function(a){try{d.style.color=r(a)[Y](c,p);var b=f.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b[H](16)).slice(-6)}catch(a){return"none"}})}else{var h=g.createElement("i");h.title="Raphaël Colour Picker";h.style.display="none";g.body[l](h);bi=bm(function(a){h.style.color=a;return g.defaultView.getComputedStyle(h,p).getPropertyValue("color")})}return bi(b)},bj=function(){return"hsb("+[this.h,this.s,this.b]+")"},bk=function(){return"hsl("+[this.h,this.s,this.l]+")"},bl=function(){return this.hex};a.hsb2rgb=function(b,c,d,e){if(a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b){d=b.b;c=b.s;b=b.h;e=b.o}return a.hsl2rgb(b,c,d/2,e)};a.hsl2rgb=function(b,c,d,e){if(a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b){d=b.l;c=b.s;b=b.h}if(b>1||c>1||d>1){b/=360;c/=100;d/=100}var f={},g=["r","g","b"],h,i,j,k,l,m;if(c){d<0.5?h=d*(1+c):h=d+c-d*c;i=2*d-h;for(var n=0;n<3;n++){j=b+1/3*-(n-1);j<0&&j++;j>1&&j--;j*6<1?f[g[n]]=i+(h-i)*6*j:j*2<1?f[g[n]]=h:j*3<2?f[g[n]]=i+(h-i)*(2/3-j)*6:f[g[n]]=i}}else f={r:d,g:d,b:d};f.r*=255;f.g*=255;f.b*=255;f.hex="#"+(16777216|f.b|f.g<<8|f.r<<16).toString(16).slice(1);a.is(e,"finite")&&(f.opacity=e);f.toString=bl;return f};a.rgb2hsb=function(b,c,d){if(c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b){d=b.b;c=b.g;b=b.r}if(c==null&&a.is(b,F)){var e=a.getRGB(b);b=e.r;c=e.g;d=e.b}if(b>1||c>1||d>1){b/=255;c/=255;d/=255}var f=z(b,c,d),g=A(b,c,d),h,i,j=f;{if(g==f)return{h:0,s:0,b:f,toString:bj};var k=f-g;i=k/f;b==f?h=(c-d)/k:c==f?h=2+(d-b)/k:h=4+(b-c)/k;h/=6;h<0&&h++;h>1&&h--}return{h:h,s:i,b:j,toString:bj}};a.rgb2hsl=function(b,c,d){if(c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b){d=b.b;c=b.g;b=b.r}if(c==null&&a.is(b,F)){var e=a.getRGB(b);b=e.r;c=e.g;d=e.b}if(b>1||c>1||d>1){b/=255;c/=255;d/=255}var f=z(b,c,d),g=A(b,c,d),h,i,j=(f+g)/2,k;if(g==f)k={h:0,s:0,l:j};else{var l=f-g;i=j<0.5?l/(f+g):l/(2-f-g);b==f?h=(c-d)/l:c==f?h=2+(d-b)/l:h=4+(b-c)/l;h/=6;h<0&&h++;h>1&&h--;k={h:h,s:i,l:j}}k.toString=bk;return k};a._path2string=function(){return this.join(",")[Y](ba,"$1")};function bm(a,b,c){function d(){var g=Array[e].slice.call(arguments,0),h=g[v]("►"),i=d.cache=d.cache||{},j=d.count=d.count||[];if(i[f](h))return c?c(i[h]):i[h];j[w]>=1000&&delete i[j.shift()];j[L](h);i[h]=a[m](b,g);return c?c(i[h]):i[h]}return d}a.getRGB=bm(function(b){if(!b||!(!((b=r(b)).indexOf("-")+1)))return{r:-1,g:-1,b:-1,hex:"none",error:1};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none"};!(_[f](b.toLowerCase().substring(0,2))||b.charAt()=="#")&&(b=bi(b));var c,d,e,g,h,i,j,k=b.match(N);if(k){if(k[2]){g=T(k[2].substring(5),16);e=T(k[2].substring(3,5),16);d=T(k[2].substring(1,3),16)}if(k[3]){g=T((i=k[3].charAt(3))+i,16);e=T((i=k[3].charAt(2))+i,16);d=T((i=k[3].charAt(1))+i,16)}if(k[4]){j=k[4][s]($);d=S(j[0]);j[0].slice(-1)=="%"&&(d*=2.55);e=S(j[1]);j[1].slice(-1)=="%"&&(e*=2.55);g=S(j[2]);j[2].slice(-1)=="%"&&(g*=2.55);k[1].toLowerCase().slice(0,4)=="rgba"&&(h=S(j[3]));j[3]&&j[3].slice(-1)=="%"&&(h/=100)}if(k[5]){j=k[5][s]($);d=S(j[0]);j[0].slice(-1)=="%"&&(d*=2.55);e=S(j[1]);j[1].slice(-1)=="%"&&(e*=2.55);g=S(j[2]);j[2].slice(-1)=="%"&&(g*=2.55);(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360);k[1].toLowerCase().slice(0,4)=="hsba"&&(h=S(j[3]));j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,g,h)}if(k[6]){j=k[6][s]($);d=S(j[0]);j[0].slice(-1)=="%"&&(d*=2.55);e=S(j[1]);j[1].slice(-1)=="%"&&(e*=2.55);g=S(j[2]);j[2].slice(-1)=="%"&&(g*=2.55);(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360);k[1].toLowerCase().slice(0,4)=="hsla"&&(h=S(j[3]));j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,g,h)}k={r:d,g:e,b:g};k.hex="#"+(16777216|g|e<<8|d<<16).toString(16).slice(1);a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1}},a);a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||0.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=0.075;if(b.h>1){b.h=0;b.s-=0.2;b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})}return c.hex};a.getColor.reset=function(){delete this.start};a.parsePathString=bm(function(b){if(!b)return null;var c={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},d=[];a.is(b,G)&&a.is(b[0],G)&&(d=bo(b));d[w]||r(b)[Y](bb,function(a,b,e){var f=[],g=x.call(b);e[Y](bc,function(a,b){b&&f[L](+b)});if(g=="m"&&f[w]>2){d[L]([b][n](f.splice(0,2)));g="l";b=b=="m"?"l":"L"}while(f[w]>=c[g]){d[L]([b][n](f.splice(0,c[g])));if(!c[g])break}});d[H]=a._path2string;return d});a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=C(j,3)*a+C(j,2)*3*i*c+j*3*i*i*e+C(i,3)*g,l=C(j,3)*b+C(j,2)*3*i*d+j*3*i*i*f+C(i,3)*h,m=a+2*i*(c-a)+i*i*(e-2*c+a),n=b+2*i*(d-b)+i*i*(f-2*d+b),o=c+2*i*(e-c)+i*i*(g-2*e+c),p=d+2*i*(f-d)+i*i*(h-2*f+d),q=(1-i)*a+i*c,r=(1-i)*b+i*d,s=(1-i)*e+i*g,t=(1-i)*f+i*h,u=90-y.atan((m-o)/(n-p))*180/D;(m>o||n<p)&&(u+=180);return{x:k,y:l,m:{x:m,y:n},n:{x:o,y:p},start:{x:q,y:r},end:{x:s,y:t},alpha:u}};var bn=bm(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=bw(a);var b=0,c=0,d=[],e=[],f;for(var g=0,h=a[w];g<h;g++){f=a[g];if(f[0]=="M"){b=f[1];c=f[2];d[L](b);e[L](c)}else{var i=bv(b,c,f[1],f[2],f[3],f[4],f[5],f[6]);d=d[n](i.min.x,i.max.x);e=e[n](i.min.y,i.max.y);b=f[5];c=f[6]}}var j=A[m](0,d),k=A[m](0,e);return{x:j,y:k,width:z[m](0,d)-j,height:z[m](0,e)-k}}),bo=function(b){var c=[];if(!a.is(b,G)||!a.is(b&&b[0],G))b=a.parsePathString(b);for(var d=0,e=b[w];d<e;d++){c[d]=[];for(var f=0,g=b[d][w];f<g;f++)c[d][f]=b[d][f]}c[H]=a._path2string;return c},bp=bm(function(b){if(!a.is(b,G)||!a.is(b&&b[0],G))b=a.parsePathString(b);var c=[],d=0,e=0,f=0,g=0,h=0;if(b[0][0]=="M"){d=b[0][1];e=b[0][2];f=d;g=e;h++;c[L](["M",d,e])}for(var i=h,j=b[w];i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=x.call(l[0])){k[0]=x.call(l[0]);switch(k[0]){case"a":k[1]=l[1];k[2]=l[2];k[3]=l[3];k[4]=l[4];k[5]=l[5];k[6]=+(l[6]-d).toFixed(3);k[7]=+(l[7]-e).toFixed(3);break;case"v":k[1]=+(l[1]-e).toFixed(3);break;case"m":f=l[1];g=l[2];default:for(var m=1,n=l[w];m<n;m++)k[m]=+(l[m]-(m%2?d:e)).toFixed(3)}}else{k=c[i]=[];if(l[0]=="m"){f=l[1]+d;g=l[2]+e}for(var o=0,p=l[w];o<p;o++)c[i][o]=l[o]}var q=c[i][w];switch(c[i][0]){case"z":d=f;e=g;break;case"h":d+=+c[i][q-1];break;case"v":e+=+c[i][q-1];break;default:d+=+c[i][q-2];e+=+c[i][q-1]}}c[H]=a._path2string;return c},0,bo),bq=bm(function(b){if(!a.is(b,G)||!a.is(b&&b[0],G))b=a.parsePathString(b);var c=[],d=0,e=0,f=0,g=0,h=0;if(b[0][0]=="M"){d=+b[0][1];e=+b[0][2];f=d;g=e;h++;c[0]=["M",d,e]}for(var i=h,j=b[w];i<j;i++){var k=c[i]=[],l=b[i];if(l[0]!=V.call(l[0])){k[0]=V.call(l[0]);switch(k[0]){case"A":k[1]=l[1];k[2]=l[2];k[3]=l[3];k[4]=l[4];k[5]=l[5];k[6]=+(l[6]+d);k[7]=+(l[7]+e);break;case"V":k[1]=+l[1]+e;break;case"H":k[1]=+l[1]+d;break;case"M":f=+l[1]+d;g=+l[2]+e;default:for(var m=1,n=l[w];m<n;m++)k[m]=+l[m]+(m%2?d:e)}}else for(var o=0,p=l[w];o<p;o++)c[i][o]=l[o];switch(k[0]){case"Z":d=f;e=g;break;case"H":d=k[1];break;case"V":e=k[1];break;case"M":f=c[i][c[i][w]-2];g=c[i][c[i][w]-1];default:d=c[i][c[i][w]-2];e=c[i][c[i][w]-1]}}c[H]=a._path2string;return c},null,bo),br=function(a,b,c,d){return[a,b,c,d,c,d]},bs=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},bt=function(a,b,c,d,e,f,g,h,i,j){var k=D*120/180,l=D/180*(+e||0),m=[],o,p=bm(function(a,b,c){var d=a*y.cos(c)-b*y.sin(c),e=a*y.sin(c)+b*y.cos(c);return{x:d,y:e}});if(j){G=j[0];H=j[1];E=j[2];F=j[3]}else{o=p(a,b,-l);a=o.x;b=o.y;o=p(h,i,-l);h=o.x;i=o.y;var q=y.cos(D/180*e),r=y.sin(D/180*e),t=(a-h)/2,u=(b-i)/2,x=t*t/(c*c)+u*u/(d*d);if(x>1){x=y.sqrt(x);c=x*c;d=x*d}var z=c*c,A=d*d,C=(f==g?-1:1)*y.sqrt(B((z*A-z*u*u-A*t*t)/(z*u*u+A*t*t))),E=C*c*u/d+(a+h)/2,F=C*-d*t/c+(b+i)/2,G=y.asin(((b-F)/d).toFixed(9)),H=y.asin(((i-F)/d).toFixed(9));G=a<E?D-G:G;H=h<E?D-H:H;G<0&&(G=D*2+G);H<0&&(H=D*2+H);g&&G>H&&(G=G-D*2);!g&&H>G&&(H=H-D*2)}var I=H-G;if(B(I)>k){var J=H,K=h,L=i;H=G+k*(g&&H>G?1:-1);h=E+c*y.cos(H);i=F+d*y.sin(H);m=bt(h,i,c,d,e,0,g,K,L,[H,J,E,F])}I=H-G;var M=y.cos(G),N=y.sin(G),O=y.cos(H),P=y.sin(H),Q=y.tan(I/4),R=4/3*c*Q,S=4/3*d*Q,T=[a,b],U=[a+R*N,b-S*M],V=[h+R*P,i-S*O],W=[h,i];U[0]=2*T[0]-U[0];U[1]=2*T[1]-U[1];{if(j)return[U,V,W][n](m);m=[U,V,W][n](m)[v]()[s](",");var X=[];for(var Y=0,Z=m[w];Y<Z;Y++)X[Y]=Y%2?p(m[Y-1],m[Y],l).y:p(m[Y],m[Y+1],l).x;return X}},bu=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:C(j,3)*a+C(j,2)*3*i*c+j*3*i*i*e+C(i,3)*g,y:C(j,3)*b+C(j,2)*3*i*d+j*3*i*i*f+C(i,3)*h}},bv=bm(function(a,b,c,d,e,f,g,h){var i=e-2*c+a-(g-2*e+c),j=2*(c-a)-2*(e-c),k=a-c,l=(-j+y.sqrt(j*j-4*i*k))/2/i,n=(-j-y.sqrt(j*j-4*i*k))/2/i,o=[b,h],p=[a,g],q;B(l)>"1e12"&&(l=0.5);B(n)>"1e12"&&(n=0.5);if(l>0&&l<1){q=bu(a,b,c,d,e,f,g,h,l);p[L](q.x);o[L](q.y)}if(n>0&&n<1){q=bu(a,b,c,d,e,f,g,h,n);p[L](q.x);o[L](q.y)}i=f-2*d+b-(h-2*f+d);j=2*(d-b)-2*(f-d);k=b-d;l=(-j+y.sqrt(j*j-4*i*k))/2/i;n=(-j-y.sqrt(j*j-4*i*k))/2/i;B(l)>"1e12"&&(l=0.5);B(n)>"1e12"&&(n=0.5);if(l>0&&l<1){q=bu(a,b,c,d,e,f,g,h,l);p[L](q.x);o[L](q.y)}if(n>0&&n<1){q=bu(a,b,c,d,e,f,g,h,n);p[L](q.x);o[L](q.y)}return{min:{x:A[m](0,p),y:A[m](0,o)},max:{x:z[m](0,p),y:z[m](0,o)}}}),bw=bm(function(a,b){var c=bq(a),d=b&&bq(b),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1];b.Y=a[2];break;case"A":a=["C"][n](bt[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x));d=b.y+(b.y-(b.by||b.y));a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x));b.qy=b.y+(b.y-(b.qy||b.y));a=["C"][n](bs(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1];b.qy=a[2];a=["C"][n](bs(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](br(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](br(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](br(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](br(b.x,b.y,b.X,b.Y));break}return a},h=function(a,b){if(a[b][w]>7){a[b].shift();var e=a[b];while(e[w])a.splice(b++,0,["C"][n](e.splice(0,6)));a.splice(b,1);k=z(c[w],d&&d[w]||0)}},i=function(a,b,e,f,g){if(a&&b&&a[g][0]=="M"&&b[g][0]!="M"){b.splice(g,0,["M",f.x,f.y]);e.bx=0;e.by=0;e.x=a[g][1];e.y=a[g][2];k=z(c[w],d&&d[w]||0)}};for(var j=0,k=z(c[w],d&&d[w]||0);j<k;j++){c[j]=g(c[j],e);h(c,j);d&&(d[j]=g(d[j],f));d&&h(d,j);i(c,d,e,f,j);i(d,c,f,e,j);var l=c[j],o=d&&d[j],p=l[w],q=d&&o[w];e.x=l[p-2];e.y=l[p-1];e.bx=S(l[p-4])||e.x;e.by=S(l[p-3])||e.y;f.bx=d&&(S(o[q-4])||f.x);f.by=d&&(S(o[q-3])||f.y);f.x=d&&o[q-2];f.y=d&&o[q-1]}return d?[c,d]:c},null,bo),bx=bm(function(b){var c=[];for(var d=0,e=b[w];d<e;d++){var f={},g=b[d].match(/^([^:]*):?([\d\.]*)/);f.color=a.getRGB(g[1]);if(f.color.error)return null;f.color=f.color.hex;g[2]&&(f.offset=g[2]+"%");c[L](f)}for(d=1,e=c[w]-1;d<e;d++){if(!c[d].offset){var h=S(c[d-1].offset||0),i=0;for(var j=d+1;j<e;j++){if(c[j].offset){i=c[j].offset;break}}if(!i){i=100;j=e}i=S(i);var k=(i-h)/(j-d+1);for(;d<j;d++){h+=k;c[d].offset=h+"%"}}}return c}),by=function(b,c,d,e){var f;if(a.is(b,F)||a.is(b,"object")){f=a.is(b,F)?g.getElementById(b):b;if(f.tagName)return c==null?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d}}else return{container:1,x:b,y:c,width:d,height:e}},bz=function(a,b){var c=this;for(var d in b){if(b[f](d)&&!(d in a))switch(typeof b[d]){case"function":(function(b){a[d]=a===c?b:function(){return b[m](c,arguments)}})(b[d]);break;case"object":a[d]=a[d]||{};bz.call(this,a[d],b[d]);break;default:a[d]=b[d];break}}},bA=function(a,b){a==b.top&&(b.top=a.prev);a==b.bottom&&(b.bottom=a.next);a.next&&(a.next.prev=a.prev);a.prev&&(a.prev.next=a.next)},bB=function(a,b){if(b.top===a)return;bA(a,b);a.next=null;a.prev=b.top;b.top.next=a;b.top=a},bC=function(a,b){if(b.bottom===a)return;bA(a,b);a.next=b.bottom;a.prev=null;b.bottom.prev=a;b.bottom=a},bD=function(a,b,c){bA(a,c);b==c.top&&(c.top=a);b.next&&(b.next.prev=a);a.next=b.next;a.prev=b;b.next=a},bE=function(a,b,c){bA(a,c);b==c.bottom&&(c.bottom=a);b.prev&&(b.prev.next=a);a.prev=b.prev;b.prev=a;a.next=b},bF=function(a){return function(){throw new Error("Raphaël: you are calling to method “"+a+"” of removed object")}};a.pathToRelative=bp;if(a.svg){k.svgns="http://www.w3.org/2000/svg";k.xlink="http://www.w3.org/1999/xlink";Q=function(a){return+a+(~(~a)===a)*0.5};var bG=function(a,b){if(b)for(var c in b)b[f](c)&&a[R](c,r(b[c]));else{a=g.createElementNS(k.svgns,a);a.style.webkitTapHighlightColor="rgba(0,0,0,0)";return a}};a[H]=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var bH=function(a,b){var c=bG("path");b.canvas&&b.canvas[l](c);var d=new bN(c,b);d.type="path";bK(d,{fill:"none",stroke:"#000",path:a});return d},bI=function(a,b,c){var d="linear",e=0.5,f=0.5,h=a.style;b=r(b)[Y](bd,function(a,b,c){d="radial";if(b&&c){e=S(b);f=S(c);var g=(f>0.5)*2-1;C(e-0.5,2)+C(f-0.5,2)>0.25&&(f=y.sqrt(0.25-C(e-0.5,2))*g+0.5)&&f!=0.5&&(f=f.toFixed(5)-0.00001*g)}return p});b=b[s](/\s*\-\s*/);if(d=="linear"){var i=b.shift();i=-S(i);if(isNaN(i))return null;var j=[0,0,y.cos(i*D/180),y.sin(i*D/180)],k=1/(z(B(j[2]),B(j[3]))||1);j[2]*=k;j[3]*=k;if(j[2]<0){j[0]=-j[2];j[2]=0}if(j[3]<0){j[1]=-j[3];j[3]=0}}var m=bx(b);if(!m)return null;var n=a.getAttribute(I);n=n.match(/^url\(#(.*)\)$/);n&&c.defs.removeChild(g.getElementById(n[1]));var o=bG(d+"Gradient");o.id=bh();bG(o,d=="radial"?{fx:e,fy:f}:{x1:j[0],y1:j[1],x2:j[2],y2:j[3]});c.defs[l](o);for(var q=0,t=m[w];q<t;q++){var u=bG("stop");bG(u,{offset:m[q].offset?m[q].offset:q?"100%":"0%","stop-color":m[q].color||"#fff"});o[l](u)}bG(a,{fill:"url(#"+o.id+")",opacity:1,"fill-opacity":1});h.fill=p;h.opacity=1;h.fillOpacity=1;return 1},bJ=function(b){var c=b.getBBox();bG(b.pattern,{patternTransform:a.format("translate({0},{1})",c.x,c.y)})},bK=function(c,d){var e={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},h=c.node,i=c.attrs,j=c.rotate(),k=function(a,b){b=e[x.call(b)];if(b){var c=a.attrs["stroke-width"]||"1",f=({round:c,square:c,butt:0})[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],i=b[w];while(i--)g[i]=b[i]*c+(i%2?1:-1)*f;bG(h,{"stroke-dasharray":g[v](",")})}};d[f]("rotation")&&(j=d.rotation);var m=r(j)[s](b);if(m.length-1){m[1]=+m[1];m[2]=+m[2]}else m=null;S(j)&&c.rotate(0,true);for(var n in d){if(d[f](n)){if(!W[f](n))continue;var o=d[n];i[n]=o;switch(n){case"blur":c.blur(o);break;case"rotation":c.rotate(o,true);break;case"href":case"title":case"target":var t=h.parentNode;if(x.call(t.tagName)!="a"){var u=bG("a");t.insertBefore(u,h);u[l](h);t=u}n=="target"&&o=="blank"?t.setAttributeNS(c.paper.xlink,"show","new"):t.setAttributeNS(c.paper.xlink,n,o);break;case"cursor":h.style.cursor=o;break;case"clip-rect":var y=r(o)[s](b);if(y[w]==4){c.clip&&c.clip.parentNode.parentNode.removeChild(c.clip.parentNode);var z=bG("clipPath"),A=bG("rect");z.id=bh();bG(A,{x:y[0],y:y[1],width:y[2],height:y[3]});z[l](A);c.paper.defs[l](z);bG(h,{"clip-path":"url(#"+z.id+")"});c.clip=A}if(!o){var B=g.getElementById(h.getAttribute("clip-path")[Y](/(^url\(#|\)$)/g,p));B&&B.parentNode.removeChild(B);bG(h,{"clip-path":p});delete c.clip}break;case"path":c.type=="path"&&bG(h,{d:o?i.path=bq(o):"M0,0"});break;case"width":h[R](n,o);if(i.fx){n="x";o=i.x}else break;case"x":i.fx&&(o=-i.x-(i.width||0));case"rx":if(n=="rx"&&c.type=="rect")break;case"cx":m&&(n=="x"||n=="cx")&&(m[1]+=o-i[n]);h[R](n,o);c.pattern&&bJ(c);break;case"height":h[R](n,o);if(i.fy){n="y";o=i.y}else break;case"y":i.fy&&(o=-i.y-(i.height||0));case"ry":if(n=="ry"&&c.type=="rect")break;case"cy":m&&(n=="y"||n=="cy")&&(m[2]+=o-i[n]);h[R](n,o);c.pattern&&bJ(c);break;case"r":c.type=="rect"?bG(h,{rx:o,ry:o}):h[R](n,o);break;case"src":c.type=="image"&&h.setAttributeNS(c.paper.xlink,"href",o);break;case"stroke-width":h.style.strokeWidth=o;h[R](n,o);i["stroke-dasharray"]&&k(c,i["stroke-dasharray"]);break;case"stroke-dasharray":k(c,o);break;case"translation":var C=r(o)[s](b);C[0]=+C[0]||0;C[1]=+C[1]||0;if(m){m[1]+=C[0];m[2]+=C[1]}cz.call(c,C[0],C[1]);break;case"scale":C=r(o)[s](b);c.scale(+C[0]||1,+C[1]||+C[0]||1,isNaN(S(C[2]))?null:+C[2],isNaN(S(C[3]))?null:+C[3]);break;case I:var D=r(o).match(M);if(D){z=bG("pattern");var E=bG("image");z.id=bh();bG(z,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});bG(E,{x:0,y:0});E.setAttributeNS(c.paper.xlink,"href",D[1]);z[l](E);var F=g.createElement("img");F.style.cssText="position:absolute;left:-9999em;top-9999em";F.onload=function(){bG(z,{width:this.offsetWidth,height:this.offsetHeight});bG(E,{width:this.offsetWidth,height:this.offsetHeight});g.body.removeChild(this);c.paper.safari()};g.body[l](F);F.src=D[1];c.paper.defs[l](z);h.style.fill="url(#"+z.id+")";bG(h,{fill:"url(#"+z.id+")"});c.pattern=z;c.pattern&&bJ(c);break}var G=a.getRGB(o);if(G.error)if((({circle:1,ellipse:1})[f](c.type)||r(o).charAt()!="r")&&bI(h,o,c.paper)){i.gradient=o;i.fill="none";break}else{delete d.gradient;delete i.gradient;!a.is(i.opacity,"undefined")&&a.is(d.opacity,"undefined")&&bG(h,{opacity:i.opacity});!a.is(i["fill-opacity"],"undefined")&&a.is(d["fill-opacity"],"undefined")&&bG(h,{"fill-opacity":i["fill-opacity"]})}G[f]("opacity")&&bG(h,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(o);h[R](n,G.hex);n=="stroke"&&G[f]("opacity")&&bG(h,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity});break;case"gradient":(({circle:1,ellipse:1})[f](c.type)||r(o).charAt()!="r")&&bI(h,o,c.paper);break;case"opacity":i.gradient&&!i[f]("stroke-opacity")&&bG(h,{"stroke-opacity":o>1?o/100:o});case"fill-opacity":if(i.gradient){var H=g.getElementById(h.getAttribute(I)[Y](/^url\(#|\)$/g,p));if(H){var J=H.getElementsByTagName("stop");J[J[w]-1][R]("stop-opacity",o)}break}default:n=="font-size"&&(o=T(o,10)+"px");var K=n[Y](/(\-.)/g,function(a){return V.call(a.substring(1))});h.style[K]=o;h[R](n,o);break}}}bM(c,d);m?c.rotate(m.join(q)):S(j)&&c.rotate(j,true)},bL=1.2,bM=function(b,c){if(b.type!="text"||!(c[f]("text")||c[f]("font")||c[f]("font-size")||c[f]("x")||c[f]("y")))return;var d=b.attrs,e=b.node,h=e.firstChild?T(g.defaultView.getComputedStyle(e.firstChild,p).getPropertyValue("font-size"),10):10;if(c[f]("text")){d.text=c.text;while(e.firstChild)e.removeChild(e.firstChild);var i=r(c.text)[s]("\n");for(var j=0,k=i[w];j<k;j++)if(i[j]){var m=bG("tspan");j&&bG(m,{dy:h*bL,x:d.x});m[l](g.createTextNode(i[j]));e[l](m)}}else{i=e.getElementsByTagName("tspan");for(j=0,k=i[w];j<k;j++)j&&bG(i[j],{dy:h*bL,x:d.x})}bG(e,{y:d.y});var n=b.getBBox(),o=d.y-(n.y+n.height/2);o&&a.is(o,"finite")&&bG(e,{y:d.y+o})},bN=function(b,c){var d=0,e=0;this[0]=b;this.id=a._oid++;this.node=b;b.raphael=this;this.paper=c;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};!c.bottom&&(c.bottom=this);this.prev=c.top;c.top&&(c.top.next=this);c.top=this;this.next=null},bO=bN[e];bN[e].rotate=function(c,d,e){if(this.removed)return this;if(c==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][v](q);return this._.rt.deg}var f=this.getBBox();c=r(c)[s](b);if(c[w]-1){d=S(c[1]);e=S(c[2])}c=S(c[0]);d!=null&&d!==false?this._.rt.deg=c:this._.rt.deg+=c;e==null&&(d=null);this._.rt.cx=d;this._.rt.cy=e;d=d==null?f.x+f.width/2:d;e=e==null?f.y+f.height/2:e;if(this._.rt.deg){this.transformations[0]=a.format("rotate({0} {1} {2})",this._.rt.deg,d,e);this.clip&&bG(this.clip,{transform:a.format("rotate({0} {1} {2})",-this._.rt.deg,d,e)})}else{this.transformations[0]=p;this.clip&&bG(this.clip,{transform:p})}bG(this.node,{transform:this.transformations[v](q)});return this};bN[e].hide=function(){!this.removed&&(this.node.style.display="none");return this};bN[e].show=function(){!this.removed&&(this.node.style.display="");return this};bN[e].remove=function(){if(this.removed)return;bA(this,this.paper);this.node.parentNode.removeChild(this.node);for(var a in this)delete this[a];this.removed=true};bN[e].getBBox=function(){if(this.removed)return this;if(this.type=="path")return bn(this.attrs.path);if(this.node.style.display=="none"){this.show();var a=true}var b={};try{b=this.node.getBBox()}catch(a){}finally{b=b||{}}if(this.type=="text"){b={x:b.x,y:Infinity,width:0,height:0};for(var c=0,d=this.node.getNumberOfChars();c<d;c++){var e=this.node.getExtentOfChar(c);e.y<b.y&&(b.y=e.y);e.y+e.height-b.y>b.height&&(b.height=e.y+e.height-b.y);e.x+e.width-b.x>b.width&&(b.width=e.x+e.width-b.x)}}a&&this.hide();return b};bN[e].attr=function(b,c){if(this.removed)return this;if(b==null){var d={};for(var e in this.attrs)this.attrs[f](e)&&(d[e]=this.attrs[e]);this._.rt.deg&&(d.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(d.scale=this.scale());d.gradient&&d.fill=="none"&&(d.fill=d.gradient)&&delete d.gradient;return d}if(c==null&&a.is(b,F)){if(b=="translation")return cz.call(this);if(b=="rotation")return this.rotate();if(b=="scale")return this.scale();if(b==I&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[b]}if(c==null&&a.is(b,G)){var g={};for(var h=0,i=b.length;h<i;h++)g[b[h]]=this.attr(b[h]);return g}if(c!=null){var j={};j[b]=c}else b!=null&&a.is(b,"object")&&(j=b);for(var k in this.paper.customAttributes)if(this.paper.customAttributes[f](k)&&j[f](k)&&a.is(this.paper.customAttributes[k],"function")){var l=this.paper.customAttributes[k].apply(this,[][n](j[k]));this.attrs[k]=j[k];for(var m in l)l[f](m)&&(j[m]=l[m])}bK(this,j);return this};bN[e].toFront=function(){if(this.removed)return this;this.node.parentNode[l](this.node);var a=this.paper;a.top!=this&&bB(this,a);return this};bN[e].toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);bC(this,this.paper);var a=this.paper}return this};bN[e].insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode[l](this.node);bD(this,a,this.paper);return this};bN[e].insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;b.parentNode.insertBefore(this.node,b);bE(this,a,this.paper);return this};bN[e].blur=function(a){var b=this;if(+a!==0){var c=bG("filter"),d=bG("feGaussianBlur");b.attrs.blur=a;c.id=bh();bG(d,{stdDeviation:+a||1.5});c.appendChild(d);b.paper.defs.appendChild(c);b._blur=c;bG(b.node,{filter:"url(#"+c.id+")"})}else{if(b._blur){b._blur.parentNode.removeChild(b._blur);delete b._blur;delete b.attrs.blur}b.node.removeAttribute("filter")}};var bP=function(a,b,c,d){var e=bG("circle");a.canvas&&a.canvas[l](e);var f=new bN(e,a);f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"};f.type="circle";bG(e,f.attrs);return f},bQ=function(a,b,c,d,e,f){var g=bG("rect");a.canvas&&a.canvas[l](g);var h=new bN(g,a);h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"};h.type="rect";bG(g,h.attrs);return h},bR=function(a,b,c,d,e){var f=bG("ellipse");a.canvas&&a.canvas[l](f);var g=new bN(f,a);g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"};g.type="ellipse";bG(f,g.attrs);return g},bS=function(a,b,c,d,e,f){var g=bG("image");bG(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"});g.setAttributeNS(a.xlink,"href",b);a.canvas&&a.canvas[l](g);var h=new bN(g,a);h.attrs={x:c,y:d,width:e,height:f,src:b};h.type="image";return h},bT=function(a,b,c,d){var e=bG("text");bG(e,{x:b,y:c,"text-anchor":"middle"});a.canvas&&a.canvas[l](e);var f=new bN(e,a);f.attrs={x:b,y:c,"text-anchor":"middle",text:d,font:W.font,stroke:"none",fill:"#000"};f.type="text";bK(f,f.attrs);return f},bU=function(a,b){this.width=a||this.width;this.height=b||this.height;this.canvas[R]("width",this.width);this.canvas[R]("height",this.height);return this},bV=function(){var b=by[m](0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,h=b.height;if(!c)throw new Error("SVG container not found.");var i=bG("svg");d=d||0;e=e||0;f=f||512;h=h||342;bG(i,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:f,height:h});if(c==1){i.style.cssText="position:absolute;left:"+d+"px;top:"+e+"px";g.body[l](i)}else c.firstChild?c.insertBefore(i,c.firstChild):c[l](i);c=new j;c.width=f;c.height=h;c.canvas=i;bz.call(c,c,a.fn);c.clear();return c};k.clear=function(){var a=this.canvas;while(a.firstChild)a.removeChild(a.firstChild);this.bottom=this.top=null;(this.desc=bG("desc"))[l](g.createTextNode("Created with Raphaël"));a[l](this.desc);a[l](this.defs=bG("defs"))};k.remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bF(a)}}if(a.vml){var bW={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},bX=/([clmz]),?([^clmz]*)/gi,bY=/ progid:\S+Blur\([^\)]+\)/g,bZ=/-?[^,\s-]+/g,b$=1000+q+1000,b_=10,ca={path:1,rect:1},cb=function(a){var b=/[ahqstv]/ig,c=bq;r(a).match(b)&&(c=bw);b=/[clmz]/g;if(c==bq&&!r(a).match(b)){var d=r(a)[Y](bX,function(a,b,c){var d=[],e=x.call(b)=="m",f=bW[b];c[Y](bZ,function(a){if(e&&d[w]==2){f+=d+bW[b=="m"?"l":"L"];d=[]}d[L](Q(a*b_))});return f+d});return d}var e=c(a),f,g;d=[];for(var h=0,i=e[w];h<i;h++){f=e[h];g=x.call(e[h][0]);g=="z"&&(g="x");for(var j=1,k=f[w];j<k;j++)g+=Q(f[j]*b_)+(j!=k-1?",":p);d[L](g)}return d[v](q)};a[H]=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};bH=function(a,b){var c=cd("group");c.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";c.coordsize=b.coordsize;c.coordorigin=b.coordorigin;var d=cd("shape"),e=d.style;e.width=b.width+"px";e.height=b.height+"px";d.coordsize=b$;d.coordorigin=b.coordorigin;c[l](d);var f=new bN(d,c,b),g={fill:"none",stroke:"#000"};a&&(g.path=a);f.type="path";f.path=[];f.Path=p;bK(f,g);b.canvas[l](c);return f};bK=function(c,d){c.attrs=c.attrs||{};var e=c.node,h=c.attrs,i=e.style,j,k=(d.x!=h.x||d.y!=h.y||d.width!=h.width||d.height!=h.height||d.r!=h.r)&&c.type=="rect",m=c;for(var n in d)d[f](n)&&(h[n]=d[n]);if(k){h.path=cc(h.x,h.y,h.width,h.height,h.r);c.X=h.x;c.Y=h.y;c.W=h.width;c.H=h.height}d.href&&(e.href=d.href);d.title&&(e.title=d.title);d.target&&(e.target=d.target);d.cursor&&(i.cursor=d.cursor);"blur"in d&&c.blur(d.blur);if(d.path&&c.type=="path"||k)e.path=cb(h.path);d.rotation!=null&&c.rotate(d.rotation,true);if(d.translation){j=r(d.translation)[s](b);cz.call(c,j[0],j[1]);if(c._.rt.cx!=null){c._.rt.cx+=+j[0];c._.rt.cy+=+j[1];c.setBox(c.attrs,j[0],j[1])}}if(d.scale){j=r(d.scale)[s](b);c.scale(+j[0]||1,+j[1]||+j[0]||1,+j[2]||null,+j[3]||null)}if("clip-rect"in d){var o=r(d["clip-rect"])[s](b);if(o[w]==4){o[2]=+o[2]+ +o[0];o[3]=+o[3]+ +o[1];var q=e.clipRect||g.createElement("div"),t=q.style,u=e.parentNode;t.clip=a.format("rect({1}px {2}px {3}px {0}px)",o);if(!e.clipRect){t.position="absolute";t.top=0;t.left=0;t.width=c.paper.width+"px";t.height=c.paper.height+"px";u.parentNode.insertBefore(q,u);q[l](u);e.clipRect=q}}d["clip-rect"]||e.clipRect&&(e.clipRect.style.clip=p)}c.type=="image"&&d.src&&(e.src=d.src);if(c.type=="image"&&d.opacity){e.filterOpacity=U+".Alpha(opacity="+d.opacity*100+")";i.filter=(e.filterMatrix||p)+(e.filterOpacity||p)}d.font&&(i.font=d.font);d["font-family"]&&(i.fontFamily="\""+d["font-family"][s](",")[0][Y](/^['"]+|['"]+$/g,p)+"\"");d["font-size"]&&(i.fontSize=d["font-size"]);d["font-weight"]&&(i.fontWeight=d["font-weight"]);d["font-style"]&&(i.fontStyle=d["font-style"]);if(d.opacity!=null||d["stroke-width"]!=null||d.fill!=null||d.stroke!=null||d["stroke-width"]!=null||d["stroke-opacity"]!=null||d["fill-opacity"]!=null||d["stroke-dasharray"]!=null||d["stroke-miterlimit"]!=null||d["stroke-linejoin"]!=null||d["stroke-linecap"]!=null){e=c.shape||e;var v=e.getElementsByTagName(I)&&e.getElementsByTagName(I)[0],x=false;!v&&(x=v=cd(I));if("fill-opacity"in d||"opacity"in d){var y=((+h["fill-opacity"]+1||2)-1)*((+h.opacity+1||2)-1)*((+a.getRGB(d.fill).o+1||2)-1);y=A(z(y,0),1);v.opacity=y}d.fill&&(v.on=true);if(v.on==null||d.fill=="none")v.on=false;if(v.on&&d.fill){var B=d.fill.match(M);if(B){v.src=B[1];v.type="tile"}else{v.color=a.getRGB(d.fill).hex;v.src=p;v.type="solid";if(a.getRGB(d.fill).error&&(m.type in{circle:1,ellipse:1}||r(d.fill).charAt()!="r")&&bI(m,d.fill)){h.fill="none";h.gradient=d.fill}}}x&&e[l](v);var C=e.getElementsByTagName("stroke")&&e.getElementsByTagName("stroke")[0],D=false;!C&&(D=C=cd("stroke"));if(d.stroke&&d.stroke!="none"||d["stroke-width"]||d["stroke-opacity"]!=null||d["stroke-dasharray"]||d["stroke-miterlimit"]||d["stroke-linejoin"]||d["stroke-linecap"])C.on=true;(d.stroke=="none"||C.on==null||d.stroke==0||d["stroke-width"]==0)&&(C.on=false);var E=a.getRGB(d.stroke);C.on&&d.stroke&&(C.color=E.hex);y=((+h["stroke-opacity"]+1||2)-1)*((+h.opacity+1||2)-1)*((+E.o+1||2)-1);var F=(S(d["stroke-width"])||1)*0.75;y=A(z(y,0),1);d["stroke-width"]==null&&(F=h["stroke-width"]);d["stroke-width"]&&(C.weight=F);F&&F<1&&(y*=F)&&(C.weight=1);C.opacity=y;d["stroke-linejoin"]&&(C.joinstyle=d["stroke-linejoin"]||"miter");C.miterlimit=d["stroke-miterlimit"]||8;d["stroke-linecap"]&&(C.endcap=d["stroke-linecap"]=="butt"?"flat":d["stroke-linecap"]=="square"?"square":"round");if(d["stroke-dasharray"]){var G={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};C.dashstyle=G[f](d["stroke-dasharray"])?G[d["stroke-dasharray"]]:p}D&&e[l](C)}if(m.type=="text"){i=m.paper.span.style;h.font&&(i.font=h.font);h["font-family"]&&(i.fontFamily=h["font-family"]);h["font-size"]&&(i.fontSize=h["font-size"]);h["font-weight"]&&(i.fontWeight=h["font-weight"]);h["font-style"]&&(i.fontStyle=h["font-style"]);m.node.string&&(m.paper.span.innerHTML=r(m.node.string)[Y](/</g,"<")[Y](/&/g,"&")[Y](/\n/g,"<br>"));m.W=h.w=m.paper.span.offsetWidth;m.H=h.h=m.paper.span.offsetHeight;m.X=h.x;m.Y=h.y+Q(m.H/2);switch(h["text-anchor"]){case"start":m.node.style["v-text-align"]="left";m.bbx=Q(m.W/2);break;case"end":m.node.style["v-text-align"]="right";m.bbx=-Q(m.W/2);break;default:m.node.style["v-text-align"]="center";break}}};bI=function(a,b){a.attrs=a.attrs||{};var c=a.attrs,d,e="linear",f=".5 .5";a.attrs.gradient=b;b=r(b)[Y](bd,function(a,b,c){e="radial";if(b&&c){b=S(b);c=S(c);C(b-0.5,2)+C(c-0.5,2)>0.25&&(c=y.sqrt(0.25-C(b-0.5,2))*((c>0.5)*2-1)+0.5);f=b+q+c}return p});b=b[s](/\s*\-\s*/);if(e=="linear"){var g=b.shift();g=-S(g);if(isNaN(g))return null}var h=bx(b);if(!h)return null;a=a.shape||a.node;d=a.getElementsByTagName(I)[0]||cd(I);!d.parentNode&&a.appendChild(d);if(h[w]){d.on=true;d.method="none";d.color=h[0].color;d.color2=h[h[w]-1].color;var i=[];for(var j=0,k=h[w];j<k;j++)h[j].offset&&i[L](h[j].offset+q+h[j].color);d.colors&&(d.colors.value=i[w]?i[v]():"0% "+d.color);if(e=="radial"){d.type="gradientradial";d.focus="100%";d.focussize=f;d.focusposition=f}else{d.type="gradient";d.angle=(270-g)%360}}return 1};bN=function(b,c,d){var e=0,f=0,g=0,h=1;this[0]=b;this.id=a._oid++;this.node=b;b.raphael=this;this.X=0;this.Y=0;this.attrs={};this.Group=c;this.paper=d;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};!d.bottom&&(d.bottom=this);this.prev=d.top;d.top&&(d.top.next=this);d.top=this;this.next=null};bO=bN[e];bO.rotate=function(a,c,d){if(this.removed)return this;if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][v](q);return this._.rt.deg}a=r(a)[s](b);if(a[w]-1){c=S(a[1]);d=S(a[2])}a=S(a[0]);c!=null?this._.rt.deg=a:this._.rt.deg+=a;d==null&&(c=null);this._.rt.cx=c;this._.rt.cy=d;this.setBox(this.attrs,c,d);this.Group.style.rotation=this._.rt.deg;return this};bO.setBox=function(a,b,c){if(this.removed)return this;var d=this.Group.style,e=this.shape&&this.shape.style||this.node.style;a=a||{};for(var g in a)a[f](g)&&(this.attrs[g]=a[g]);b=b||this._.rt.cx;c=c||this._.rt.cy;var h=this.attrs,i,j,k,l;switch(this.type){case"circle":i=h.cx-h.r;j=h.cy-h.r;k=l=h.r*2;break;case"ellipse":i=h.cx-h.rx;j=h.cy-h.ry;k=h.rx*2;l=h.ry*2;break;case"image":i=+h.x;j=+h.y;k=h.width||0;l=h.height||0;break;case"text":this.textpath.v=["m",Q(h.x),", ",Q(h.y-2),"l",Q(h.x)+1,", ",Q(h.y-2)][v](p);i=h.x-Q(this.W/2);j=h.y-this.H/2;k=this.W;l=this.H;break;case"rect":case"path":if(this.attrs.path){var m=bn(this.attrs.path);i=m.x;j=m.y;k=m.width;l=m.height}else{i=0;j=0;k=this.paper.width;l=this.paper.height}break;default:i=0;j=0;k=this.paper.width;l=this.paper.height;break}b=b==null?i+k/2:b;c=c==null?j+l/2:c;var n=b-this.paper.width/2,o=c-this.paper.height/2,q;d.left!=(q=n+"px")&&(d.left=q);d.top!=(q=o+"px")&&(d.top=q);this.X=ca[f](this.type)?-n:i;this.Y=ca[f](this.type)?-o:j;this.W=k;this.H=l;if(ca[f](this.type)){e.left!=(q=-n*b_+"px")&&(e.left=q);e.top!=(q=-o*b_+"px")&&(e.top=q)}else if(this.type=="text"){e.left!=(q=-n+"px")&&(e.left=q);e.top!=(q=-o+"px")&&(e.top=q)}else{d.width!=(q=this.paper.width+"px")&&(d.width=q);d.height!=(q=this.paper.height+"px")&&(d.height=q);e.left!=(q=i-n+"px")&&(e.left=q);e.top!=(q=j-o+"px")&&(e.top=q);e.width!=(q=k+"px")&&(e.width=q);e.height!=(q=l+"px")&&(e.height=q)}};bO.hide=function(){!this.removed&&(this.Group.style.display="none");return this};bO.show=function(){!this.removed&&(this.Group.style.display="block");return this};bO.getBBox=function(){if(this.removed)return this;if(ca[f](this.type))return bn(this.attrs.path);return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H}};bO.remove=function(){if(this.removed)return;bA(this,this.paper);this.node.parentNode.removeChild(this.node);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)delete this[a];this.removed=true};bO.attr=function(b,c){if(this.removed)return this;if(b==null){var d={};for(var e in this.attrs)this.attrs[f](e)&&(d[e]=this.attrs[e]);this._.rt.deg&&(d.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(d.scale=this.scale());d.gradient&&d.fill=="none"&&(d.fill=d.gradient)&&delete d.gradient;return d}if(c==null&&a.is(b,"string")){if(b=="translation")return cz.call(this);if(b=="rotation")return this.rotate();if(b=="scale")return this.scale();if(b==I&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[b]}if(this.attrs&&c==null&&a.is(b,G)){var g,h={};for(e=0,g=b[w];e<g;e++)h[b[e]]=this.attr(b[e]);return h}var i;if(c!=null){i={};i[b]=c}c==null&&a.is(b,"object")&&(i=b);if(i){for(var j in this.paper.customAttributes)if(this.paper.customAttributes[f](j)&&i[f](j)&&a.is(this.paper.customAttributes[j],"function")){var k=this.paper.customAttributes[j].apply(this,[][n](i[j]));this.attrs[j]=i[j];for(var l in k)k[f](l)&&(i[l]=k[l])}i.text&&this.type=="text"&&(this.node.string=i.text);bK(this,i);i.gradient&&(({circle:1,ellipse:1})[f](this.type)||r(i.gradient).charAt()!="r")&&bI(this,i.gradient);(!ca[f](this.type)||this._.rt.deg)&&this.setBox(this.attrs)}return this};bO.toFront=function(){!this.removed&&this.Group.parentNode[l](this.Group);this.paper.top!=this&&bB(this,this.paper);return this};bO.toBack=function(){if(this.removed)return this;if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);bC(this,this.paper)}return this};bO.insertAfter=function(a){if(this.removed)return this;a.constructor==cC&&(a=a[a.length-1]);a.Group.nextSibling?a.Group.parentNode.insertBefore(this.Group,a.Group.nextSibling):a.Group.parentNode[l](this.Group);bD(this,a,this.paper);return this};bO.insertBefore=function(a){if(this.removed)return this;a.constructor==cC&&(a=a[0]);a.Group.parentNode.insertBefore(this.Group,a.Group);bE(this,a,this.paper);return this};bO.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;d=d.replace(bY,p);if(+b!==0){this.attrs.blur=b;c.filter=d+q+U+".Blur(pixelradius="+(+b||1.5)+")";c.margin=a.format("-{0}px 0 0 -{0}px",Q(+b||1.5))}else{c.filter=d;c.margin=0;delete this.attrs.blur}};bP=function(a,b,c,d){var e=cd("group"),f=cd("oval"),g=f.style;e.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";e.coordsize=b$;e.coordorigin=a.coordorigin;e[l](f);var h=new bN(f,e,a);h.type="circle";bK(h,{stroke:"#000",fill:"none"});h.attrs.cx=b;h.attrs.cy=c;h.attrs.r=d;h.setBox({x:b-d,y:c-d,width:d*2,height:d*2});a.canvas[l](e);return h};function cc(b,c,d,e,f){return f?a.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",b+f,c,d-f*2,f,-f,e-f*2,f*2-d,f*2-e):a.format("M{0},{1}l{2},0,0,{3},{4},0z",b,c,d,e,-d)}bQ=function(a,b,c,d,e,f){var g=cc(b,c,d,e,f),h=a.path(g),i=h.attrs;h.X=i.x=b;h.Y=i.y=c;h.W=i.width=d;h.H=i.height=e;i.r=f;i.path=g;h.type="rect";return h};bR=function(a,b,c,d,e){var f=cd("group"),g=cd("oval"),h=g.style;f.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";f.coordsize=b$;f.coordorigin=a.coordorigin;f[l](g);var i=new bN(g,f,a);i.type="ellipse";bK(i,{stroke:"#000"});i.attrs.cx=b;i.attrs.cy=c;i.attrs.rx=d;i.attrs.ry=e;i.setBox({x:b-d,y:c-e,width:d*2,height:e*2});a.canvas[l](f);return i};bS=function(a,b,c,d,e,f){var g=cd("group"),h=cd("image");g.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";g.coordsize=b$;g.coordorigin=a.coordorigin;h.src=b;g[l](h);var i=new bN(h,g,a);i.type="image";i.attrs.src=b;i.attrs.x=c;i.attrs.y=d;i.attrs.w=e;i.attrs.h=f;i.setBox({x:c,y:d,width:e,height:f});a.canvas[l](g);return i};bT=function(b,c,d,e){var f=cd("group"),g=cd("shape"),h=g.style,i=cd("path"),j=i.style,k=cd("textpath");f.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";f.coordsize=b$;f.coordorigin=b.coordorigin;i.v=a.format("m{0},{1}l{2},{1}",Q(c*10),Q(d*10),Q(c*10)+1);i.textpathok=true;h.width=b.width;h.height=b.height;k.string=r(e);k.on=true;g[l](k);g[l](i);f[l](g);var m=new bN(k,f,b);m.shape=g;m.textpath=i;m.type="text";m.attrs.text=e;m.attrs.x=c;m.attrs.y=d;m.attrs.w=1;m.attrs.h=1;bK(m,{font:W.font,stroke:"none",fill:"#000"});m.setBox();b.canvas[l](f);return m};bU=function(a,b){var c=this.canvas.style;a==+a&&(a+="px");b==+b&&(b+="px");c.width=a;c.height=b;c.clip="rect(0 "+a+" "+b+" 0)";return this};var cd;g.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!g.namespaces.rvml&&g.namespaces.add("rvml","urn:schemas-microsoft-com:vml");cd=function(a){return g.createElement("<rvml:"+a+" class=\"rvml\">")}}catch(a){cd=function(a){return g.createElement("<"+a+" xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">")}}bV=function(){var b=by[m](0,arguments),c=b.container,d=b.height,e,f=b.width,h=b.x,i=b.y;if(!c)throw new Error("VML container not found.");var k=new j,n=k.canvas=g.createElement("div"),o=n.style;h=h||0;i=i||0;f=f||512;d=d||342;f==+f&&(f+="px");d==+d&&(d+="px");k.width=1000;k.height=1000;k.coordsize=b_*1000+q+b_*1000;k.coordorigin="0 0";k.span=g.createElement("span");k.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";n[l](k.span);o.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d);if(c==1){g.body[l](n);o.left=h+"px";o.top=i+"px";o.position="absolute"}else c.firstChild?c.insertBefore(n,c.firstChild):c[l](n);bz.call(k,k,a.fn);return k};k.clear=function(){this.canvas.innerHTML=p;this.span=g.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[l](this.span);this.bottom=this.top=null};k.remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bF(a);return true}}var ce=navigator.userAgent.match(/Version\\x2f(.*?)\s/);navigator.vendor=="Apple Computer, Inc."&&(ce&&ce[1]<4||navigator.platform.slice(0,2)=="iP")?k.safari=function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});h.setTimeout(function(){a.remove()})}:k.safari=function(){};var cf=function(){this.returnValue=false},cg=function(){return this.originalEvent.preventDefault()},ch=function(){this.cancelBubble=true},ci=function(){return this.originalEvent.stopPropagation()},cj=(function(){{if(g.addEventListener)return function(a,b,c,d){var e=o&&u[b]?u[b]:b,g=function(e){if(o&&u[f](b))for(var g=0,h=e.targetTouches&&e.targetTouches.length;g<h;g++){if(e.targetTouches[g].target==a){var i=e;e=e.targetTouches[g];e.originalEvent=i;e.preventDefault=cg;e.stopPropagation=ci;break}}return c.call(d,e)};a.addEventListener(e,g,false);return function(){a.removeEventListener(e,g,false);return true}};if(g.attachEvent)return function(a,b,c,d){var e=function(a){a=a||h.event;a.preventDefault=a.preventDefault||cf;a.stopPropagation=a.stopPropagation||ch;return c.call(d,a)};a.attachEvent("on"+b,e);var f=function(){a.detachEvent("on"+b,e);return true};return f}}})(),ck=[],cl=function(a){var b=a.clientX,c=a.clientY,d=g.documentElement.scrollTop||g.body.scrollTop,e=g.documentElement.scrollLeft||g.body.scrollLeft,f,h=ck.length;while(h--){f=ck[h];if(o){var i=a.touches.length,j;while(i--){j=a.touches[i];if(j.identifier==f.el._drag.id){b=j.clientX;c=j.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}}else a.preventDefault();b+=e;c+=d;f.move&&f.move.call(f.move_scope||f.el,b-f.el._drag.x,c-f.el._drag.y,b,c,a)}},cm=function(b){a.unmousemove(cl).unmouseup(cm);var c=ck.length,d;while(c--){d=ck[c];d.el._drag={};d.end&&d.end.call(d.end_scope||d.start_scope||d.move_scope||d.el,b)}ck=[]};for(var cn=t[w];cn--;)(function(b){a[b]=bN[e][b]=function(c,d){if(a.is(c,"function")){this.events=this.events||[];this.events.push({name:b,f:c,unbind:cj(this.shape||this.node||g,b,c,d||this)})}return this};a["un"+b]=bN[e]["un"+b]=function(a){var c=this.events,d=c[w];while(d--)if(c[d].name==b&&c[d].f==a){c[d].unbind();c.splice(d,1);!c.length&&delete this.events;return this}return this}})(t[cn]);bO.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)};bO.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};bO.drag=function(b,c,d,e,f,h){this._drag={};this.mousedown(function(i){(i.originalEvent||i).preventDefault();var j=g.documentElement.scrollTop||g.body.scrollTop,k=g.documentElement.scrollLeft||g.body.scrollLeft;this._drag.x=i.clientX+k;this._drag.y=i.clientY+j;this._drag.id=i.identifier;c&&c.call(f||e||this,i.clientX+k,i.clientY+j,i);!ck.length&&a.mousemove(cl).mouseup(cm);ck.push({el:this,move:b,end:d,move_scope:e,start_scope:f,end_scope:h})});return this};bO.undrag=function(b,c,d){var e=ck.length;while(e--)ck[e].el==this&&(ck[e].move==b&&ck[e].end==d)&&ck.splice(e++,1);!ck.length&&a.unmousemove(cl).unmouseup(cm)};k.circle=function(a,b,c){return bP(this,a||0,b||0,c||0)};k.rect=function(a,b,c,d,e){return bQ(this,a||0,b||0,c||0,d||0,e||0)};k.ellipse=function(a,b,c,d){return bR(this,a||0,b||0,c||0,d||0)};k.path=function(b){b&&!a.is(b,F)&&!a.is(b[0],G)&&(b+=p);return bH(a.format[m](a,arguments),this)};k.image=function(a,b,c,d,e){return bS(this,a||"about:blank",b||0,c||0,d||0,e||0)};k.text=function(a,b,c){return bT(this,a||0,b||0,r(c))};k.set=function(a){arguments[w]>1&&(a=Array[e].splice.call(arguments,0,arguments[w]));return new cC(a)};k.setSize=bU;k.top=k.bottom=null;k.raphael=a;function co(){return this.x+q+this.y}bO.resetScale=function(){if(this.removed)return this;this._.sx=1;this._.sy=1;this.attrs.scale="1 1"};bO.scale=function(a,b,c,d){if(this.removed)return this;if(a==null&&b==null)return{x:this._.sx,y:this._.sy,toString:co};b=b||a;!(+b)&&(b=a);var e,f,g,h,i=this.attrs;if(a!=0){var j=this.getBBox(),k=j.x+j.width/2,l=j.y+j.height/2,m=B(a/this._.sx),o=B(b/this._.sy);c=+c||c==0?c:k;d=+d||d==0?d:l;var r=this._.sx>0,s=this._.sy>0,t=~(~(a/B(a))),u=~(~(b/B(b))),x=m*t,y=o*u,z=this.node.style,A=c+B(k-c)*x*(k>c==r?1:-1),C=d+B(l-d)*y*(l>d==s?1:-1),D=a*t>b*u?o:m;switch(this.type){case"rect":case"image":var E=i.width*m,F=i.height*o;this.attr({height:F,r:i.r*D,width:E,x:A-E/2,y:C-F/2});break;case"circle":case"ellipse":this.attr({rx:i.rx*m,ry:i.ry*o,r:i.r*D,cx:A,cy:C});break;case"text":this.attr({x:A,y:C});break;case"path":var G=bp(i.path),H=true,I=r?x:m,J=s?y:o;for(var K=0,L=G[w];K<L;K++){var M=G[K],N=V.call(M[0]);{if(N=="M"&&H)continue;H=false}if(N=="A"){M[G[K][w]-2]*=I;M[G[K][w]-1]*=J;M[1]*=m;M[2]*=o;M[5]=+(t+u?!(!(+M[5])):!(+M[5]))}else if(N=="H")for(var O=1,P=M[w];O<P;O++)M[O]*=I;else if(N=="V")for(O=1,P=M[w];O<P;O++)M[O]*=J;else for(O=1,P=M[w];O<P;O++)M[O]*=O%2?I:J}var Q=bn(G);e=A-Q.x-Q.width/2;f=C-Q.y-Q.height/2;G[0][1]+=e;G[0][2]+=f;this.attr({path:G});break}if(this.type in{text:1,image:1}&&(t!=1||u!=1))if(this.transformations){this.transformations[2]="scale("[n](t,",",u,")");this.node[R]("transform",this.transformations[v](q));e=t==-1?-i.x-(E||0):i.x;f=u==-1?-i.y-(F||0):i.y;this.attr({x:e,y:f});i.fx=t-1;i.fy=u-1}else{this.node.filterMatrix=U+".Matrix(M11="[n](t,", M12=0, M21=0, M22=",u,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");z.filter=(this.node.filterMatrix||p)+(this.node.filterOpacity||p)}else if(this.transformations){this.transformations[2]=p;this.node[R]("transform",this.transformations[v](q));i.fx=0;i.fy=0}else{this.node.filterMatrix=p;z.filter=(this.node.filterMatrix||p)+(this.node.filterOpacity||p)}i.scale=[a,b,c,d][v](q);this._.sx=a;this._.sy=b}return this};bO.clone=function(){if(this.removed)return null;var a=this.attr();delete a.scale;delete a.translation;return this.paper[this.type]().attr(a)};var cp={},cq=function(b,c,d,e,f,g,h,i,j){var k=0,l=100,m=[b,c,d,e,f,g,h,i].join(),n=cp[m],o,p;!n&&(cp[m]=n={data:[]});n.timer&&clearTimeout(n.timer);n.timer=setTimeout(function(){delete cp[m]},2000);if(j!=null){var q=cq(b,c,d,e,f,g,h,i);l=~(~q)*10}for(var r=0;r<l+1;r++){if(n.data[j]>r)p=n.data[r*l];else{p=a.findDotsAtSegment(b,c,d,e,f,g,h,i,r/l);n.data[r]=p}r&&(k+=C(C(o.x-p.x,2)+C(o.y-p.y,2),0.5));if(j!=null&&k>=j)return p;o=p}if(j==null)return k},cr=function(b,c){return function(d,e,f){d=bw(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;o<p;o++){i=d[o];if(i[0]=="M"){g=+i[1];h=+i[2]}else{j=cq(g,h,i[1],i[2],i[3],i[4],i[5],i[6]);if(n+j>e){if(c&&!l.start){m=cq(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);k+=["C",m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k;k=["M",m.x,m.y+"C",m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]][v]();n+=j;g=+i[5];h=+i[6];continue}if(!b&&!c){m=cq(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j;g=+i[5];h=+i[6]}k+=i}l.end=k;m=b?n:c?l:a.findDotsAtSegment(g,h,i[1],i[2],i[3],i[4],i[5],i[6],1);m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cs=cr(1),ct=cr(),cu=cr(0,1);bO.getTotalLength=function(){if(this.type!="path")return;if(this.node.getTotalLength)return this.node.getTotalLength();return cs(this.attrs.path)};bO.getPointAtLength=function(a){if(this.type!="path")return;return ct(this.attrs.path,a)};bO.getSubpath=function(a,b){if(this.type!="path")return;if(B(this.getTotalLength()-b)<"1e-6")return cu(this.attrs.path,a).end;var c=cu(this.attrs.path,b,1);return a?cu(c,a).end:c};a.easing_formulas={linear:function(a){return a},"<":function(a){return C(a,3)},">":function(a){return C(a-1,3)+1},"<>":function(a){a=a*2;if(a<1)return C(a,3)/2;a-=2;return(C(a,3)+2)/2},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==0||a==1)return a;var b=0.3,c=b/4;return C(2,-10*a)*y.sin((a-c)*(2*D)/b)+1},bounce:function(a){var b=7.5625,c=2.75,d;if(a<1/c)d=b*a*a;else if(a<2/c){a-=1.5/c;d=b*a*a+0.75}else if(a<2.5/c){a-=2.25/c;d=b*a*a+0.9375}else{a-=2.625/c;d=b*a*a+0.984375}return d}};var cv=[],cw=function(){var b=+(new Date);for(var c=0;c<cv[w];c++){var d=cv[c];if(d.stop||d.el.removed)continue;var e=b-d.start,g=d.ms,h=d.easing,i=d.from,j=d.diff,k=d.to,l=d.t,m=d.el,n={},o;if(e<g){var r=h(e/g);for(var s in i)if(i[f](s)){switch(X[s]){case"along":o=r*g*j[s];k.back&&(o=k.len-o);var t=ct(k[s],o);m.translate(j.sx-j.x||0,j.sy-j.y||0);j.x=t.x;j.y=t.y;m.translate(t.x-j.sx,t.y-j.sy);k.rot&&m.rotate(j.r+t.alpha,t.x,t.y);break;case E:o=+i[s]+r*g*j[s];break;case"colour":o="rgb("+[cy(Q(i[s].r+r*g*j[s].r)),cy(Q(i[s].g+r*g*j[s].g)),cy(Q(i[s].b+r*g*j[s].b))][v](",")+")";break;case"path":o=[];for(var u=0,x=i[s][w];u<x;u++){o[u]=[i[s][u][0]];for(var y=1,z=i[s][u][w];y<z;y++)o[u][y]=+i[s][u][y]+r*g*j[s][u][y];o[u]=o[u][v](q)}o=o[v](q);break;case"csv":switch(s){case"translation":var A=r*g*j[s][0]-l.x,B=r*g*j[s][1]-l.y;l.x+=A;l.y+=B;o=A+q+B;break;case"rotation":o=+i[s][0]+r*g*j[s][0];i[s][1]&&(o+=","+i[s][1]+","+i[s][2]);break;case"scale":o=[+i[s][0]+r*g*j[s][0],+i[s][1]+r*g*j[s][1],2 in k[s]?k[s][2]:p,3 in k[s]?k[s][3]:p][v](q);break;case"clip-rect":o=[];u=4;while(u--)o[u]=+i[s][u]+r*g*j[s][u];break}break;default:var C=[].concat(i[s]);o=[];u=m.paper.customAttributes[s].length;while(u--)o[u]=+C[u]+r*g*j[s][u];break}n[s]=o}m.attr(n);m._run&&m._run.call(m)}else{if(k.along){t=ct(k.along,k.len*!k.back);m.translate(j.sx-(j.x||0)+t.x-j.sx,j.sy-(j.y||0)+t.y-j.sy);k.rot&&m.rotate(j.r+t.alpha,t.x,t.y)}(l.x||l.y)&&m.translate(-l.x,-l.y);k.scale&&(k.scale+=p);m.attr(k);cv.splice(c--,1)}}a.svg&&m&&m.paper&&m.paper.safari();cv[w]&&setTimeout(cw)},cx=function(b,c,d,e,f){var g=d-e;c.timeouts.push(setTimeout(function(){a.is(f,"function")&&f.call(c);c.animate(b,g,b.easing)},e))},cy=function(a){return z(A(a,255),0)},cz=function(a,b){if(a==null)return{x:this._.tx,y:this._.ty,toString:co};this._.tx+=+a;this._.ty+=+b;switch(this.type){case"circle":case"ellipse":this.attr({cx:+a+this.attrs.cx,cy:+b+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+a+this.attrs.x,y:+b+this.attrs.y});break;case"path":var c=bp(this.attrs.path);c[0][1]+=+a;c[0][2]+=+b;this.attr({path:c});break}return this};bO.animateWith=function(a,b,c,d,e){for(var f=0,g=cv.length;f<g;f++)cv[f].el.id==a.id&&(b.start=cv[f].start);return this.animate(b,c,d,e)};bO.animateAlong=cA();bO.animateAlongBack=cA(1);function cA(b){return function(c,d,e,f){var g={back:b};a.is(e,"function")?f=e:g.rot=e;c&&c.constructor==bN&&(c=c.attrs.path);c&&(g.along=c);return this.animate(g,d,f)}}function cB(a,b,c,d,e,f){var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;function m(a){return((i*a+h)*a+g)*a}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function o(a,b){var c,d,e,f,j,k;for(e=a,k=0;k<8;k++){f=m(e)-a;if(B(f)<b)return e;j=(3*i*e+2*h)*e+g;if(B(j)<0.000001)break;e=e-f/j}c=0;d=1;e=a;if(e<c)return c;if(e>d)return d;while(c<d){f=m(e);if(B(f-a)<b)return e;a>f?c=e:d=e;e=(d-c)/2+c}return e}return n(a,1/(200*f))}bO.onAnimation=function(a){this._run=a||0;return this};bO.animate=function(c,d,e,g){var h=this;h.timeouts=h.timeouts||[];if(a.is(e,"function")||!e)g=e||null;if(h.removed){g&&g.call(h);return h}var i={},j={},k=false,l={};for(var m in c)if(c[f](m)){if(X[f](m)||h.paper.customAttributes[f](m)){k=true;i[m]=h.attr(m);i[m]==null&&(i[m]=W[m]);j[m]=c[m];switch(X[m]){case"along":var n=cs(c[m]),o=ct(c[m],n*!(!c.back)),p=h.getBBox();l[m]=n/d;l.tx=p.x;l.ty=p.y;l.sx=o.x;l.sy=o.y;j.rot=c.rot;j.back=c.back;j.len=n;c.rot&&(l.r=S(h.rotate())||0);break;case E:l[m]=(j[m]-i[m])/d;break;case"colour":i[m]=a.getRGB(i[m]);var q=a.getRGB(j[m]);l[m]={r:(q.r-i[m].r)/d,g:(q.g-i[m].g)/d,b:(q.b-i[m].b)/d};break;case"path":var t=bw(i[m],j[m]);i[m]=t[0];var u=t[1];l[m]=[];for(var v=0,x=i[m][w];v<x;v++){l[m][v]=[0];for(var y=1,z=i[m][v][w];y<z;y++)l[m][v][y]=(u[v][y]-i[m][v][y])/d}break;case"csv":var A=r(c[m])[s](b),B=r(i[m])[s](b);switch(m){case"translation":i[m]=[0,0];l[m]=[A[0]/d,A[1]/d];break;case"rotation":i[m]=B[1]==A[1]&&B[2]==A[2]?B:[0,A[1],A[2]];l[m]=[(A[0]-i[m][0])/d,0,0];break;case"scale":c[m]=A;i[m]=r(i[m])[s](b);l[m]=[(A[0]-i[m][0])/d,(A[1]-i[m][1])/d,0,0];break;case"clip-rect":i[m]=r(i[m])[s](b);l[m]=[];v=4;while(v--)l[m][v]=(A[v]-i[m][v])/d;break}j[m]=A;break;default:A=[].concat(c[m]);B=[].concat(i[m]);l[m]=[];v=h.paper.customAttributes[m][w];while(v--)l[m][v]=((A[v]||0)-(B[v]||0))/d;break}}}if(k){var G=a.easing_formulas[e];if(!G){G=r(e).match(P);if(G&&G[w]==5){var H=G;G=function(a){return cB(a,+H[1],+H[2],+H[3],+H[4],d)}}else G=function(a){return a}}cv.push({start:c.start||+(new Date),ms:d,easing:G,from:i,diff:l,to:j,el:h,t:{x:0,y:0}});a.is(g,"function")&&(h._ac=setTimeout(function(){g.call(h)},d));cv[w]==1&&setTimeout(cw)}else{var C=[],D;for(var F in c)if(c[f](F)&&Z.test(F)){m={value:c[F]};F=="from"&&(F=0);F=="to"&&(F=100);m.key=T(F,10);C.push(m)}C.sort(be);C[0].key&&C.unshift({key:0,value:h.attrs});for(v=0,x=C[w];v<x;v++)cx(C[v].value,h,d/100*C[v].key,d/100*(C[v-1]&&C[v-1].key||0),C[v-1]&&C[v-1].value.callback);D=C[C[w]-1].value.callback;D&&h.timeouts.push(setTimeout(function(){D.call(h)},d))}return this};bO.stop=function(){for(var a=0;a<cv.length;a++)cv[a].el.id==this.id&&cv.splice(a--,1);for(a=0,ii=this.timeouts&&this.timeouts.length;a<ii;a++)clearTimeout(this.timeouts[a]);this.timeouts=[];clearTimeout(this._ac);delete this._ac;return this};bO.translate=function(a,b){return this.attr({translation:a+" "+b})};bO[H]=function(){return"Raphaël’s object"};a.ae=cv;var cC=function(a){this.items=[];this[w]=0;this.type="set";if(a)for(var b=0,c=a[w];b<c;b++){if(a[b]&&(a[b].constructor==bN||a[b].constructor==cC)){this[this.items[w]]=this.items[this.items[w]]=a[b];this[w]++}}};cC[e][L]=function(){var a,b;for(var c=0,d=arguments[w];c<d;c++){a=arguments[c];if(a&&(a.constructor==bN||a.constructor==cC)){b=this.items[w];this[b]=this.items[b]=a;this[w]++}}return this};cC[e].pop=function(){delete this[this[w]--];return this.items.pop()};for(var cD in bO)bO[f](cD)&&(cC[e][cD]=(function(a){return function(){for(var b=0,c=this.items[w];b<c;b++)this.items[b][a][m](this.items[b],arguments);return this}})(cD));cC[e].attr=function(b,c){if(b&&a.is(b,G)&&a.is(b[0],"object"))for(var d=0,e=b[w];d<e;d++)this.items[d].attr(b[d]);else for(var f=0,g=this.items[w];f<g;f++)this.items[f].attr(b,c);return this};cC[e].animate=function(b,c,d,e){(a.is(d,"function")||!d)&&(e=d||null);var f=this.items[w],g=f,h,i=this,j;e&&(j=function(){!(--f)&&e.call(i)});d=a.is(d,F)?d:j;h=this.items[--g].animate(b,c,d,j);while(g--)this.items[g]&&!this.items[g].removed&&this.items[g].animateWith(h,b,c,d,j);return this};cC[e].insertAfter=function(a){var b=this.items[w];while(b--)this.items[b].insertAfter(a);return this};cC[e].getBBox=function(){var a=[],b=[],c=[],d=[];for(var e=this.items[w];e--;){var f=this.items[e].getBBox();a[L](f.x);b[L](f.y);c[L](f.x+f.width);d[L](f.y+f.height)}a=A[m](0,a);b=A[m](0,b);return{x:a,y:b,width:z[m](0,c)-a,height:z[m](0,d)-b}};cC[e].clone=function(a){a=new cC;for(var b=0,c=this.items[w];b<c;b++)a[L](this.items[b].clone());return a};a.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[f](d)&&(b.face[d]=a.face[d]);this.fonts[c]?this.fonts[c][L](b):this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=T(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[f](e)){var g=a.glyphs[e];b.glyphs[e]={w:g.w,k:{},d:g.d&&"M"+g.d[Y](/[mlcxtrv]/g,function(a){return({l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"})[a]||"M"})+"z"};if(g.k)for(var h in g.k)g[f](h)&&(b.glyphs[e].k[h]=g.k[h])}}return a};k.getFont=function(b,c,d,e){e=e||"normal";d=d||"normal";c=+c||({normal:400,bold:700,lighter:300,bolder:800})[c]||400;if(!a.fonts)return;var g=a.fonts[b];if(!g){var h=new RegExp("(^|\\s)"+b[Y](/[^\w\d\s+!~.:_-]/g,p)+"(\\s|$)","i");for(var i in a.fonts)if(a.fonts[f](i)){if(h.test(i)){g=a.fonts[i];break}}}var j;if(g)for(var k=0,l=g[w];k<l;k++){j=g[k];if(j.face["font-weight"]==c&&(j.face["font-style"]==d||!j.face["font-style"])&&j.face["font-stretch"]==e)break}return j};k.print=function(c,d,e,f,g,h,i){h=h||"middle";i=z(A(i||0,1),-1);var j=this.set(),k=r(e)[s](p),l=0,m=p,n;a.is(f,e)&&(f=this.getFont(f));if(f){n=(g||16)/f.face["units-per-em"];var o=f.face.bbox.split(b),q=+o[0],t=+o[1]+(h=="baseline"?o[3]-o[1]+ +f.face.descent:(o[3]-o[1])/2);for(var u=0,v=k[w];u<v;u++){var x=u&&f.glyphs[k[u-1]]||{},y=f.glyphs[k[u]];l+=u?(x.w||f.w)+(x.k&&x.k[k[u]]||0)+f.w*i:0;y&&y.d&&j[L](this.path(y.d).attr({fill:"#000",stroke:"none",translation:[l,0]}))}j.scale(n,n,q,t).translate(c-q,d-t)}return j};a.format=function(b,c){var e=a.is(c,G)?[0][n](c):arguments;b&&a.is(b,F)&&e[w]-1&&(b=b[Y](d,function(a,b){return e[++b]==null?p:e[b]}));return b||p};a.ninja=function(){i.was?h.Raphael=i.is:delete Raphael;return a};a.el=bO;a.st=cC[e];i.was?h.Raphael=a:Raphael=a})()
\ No newline at end of file
+// ┌────────────────────────────────────────────────────────────────────┐ \\
+// │ Raphaël 2.1.0 - JavaScript Vector Library │ \\
+// ├────────────────────────────────────────────────────────────────────┤ \\
+// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\
+// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\
+// ├────────────────────────────────────────────────────────────────────┤ \\
+// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\
+// └────────────────────────────────────────────────────────────────────┘ \\
+
+(function(a){var b="0.3.4",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;t<u;t++)"zIndex"in f[t]&&(o.push(f[t].zIndex),f[t].zIndex<0&&(p[f[t].zIndex]=f[t]));o.sort(g);while(o[l]<0){n=p[o[l++]],q.push(n.apply(b,e));if(i){i=d;return q}}for(t=0;t<u;t++){n=f[t];if("zIndex"in n)if(n.zIndex==o[l]){q.push(n.apply(b,e));if(i)break;do{l++,n=p[o[l]],n&&q.push(n.apply(b,e));if(i)break}while(n)}else p[n.zIndex]=n;else{q.push(n.apply(b,e));if(i)break}}i=d,h=r;return q.length?q:null};k.listeners=function(a){var b=a.split(d),c=j,f,g,h,i,k,l,m,n,o=[c],p=[];for(i=0,k=b.length;i<k;i++){n=[];for(l=0,m=o.length;l<m;l++){c=o[l].n,g=[c[b[i]],c[e]],h=2;while(h--)f=g[h],f&&(n.push(f),p=p.concat(f.f||[]))}o=n}return p},k.on=function(a,b){var c=a.split(d),e=j;for(var g=0,h=c.length;g<h;g++)e=e.n,!e[c[g]]&&(e[c[g]]={n:{}}),e=e[c[g]];e.f=e.f||[];for(g=0,h=e.f.length;g<h;g++)if(e.f[g]==b)return f;e.f.push(b);return function(a){+a==+a&&(b.zIndex=+a)}},k.stop=function(){i=1},k.nt=function(a){if(a)return(new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)")).test(h);return h},k.off=k.unbind=function(a,b){var f=a.split(d),g,h,i,k,l,m,n,o=[j];for(k=0,l=f.length;k<l;k++)for(m=0;m<o.length;m+=i.length-2){i=[m,1],g=o[m].n;if(f[k]!=e)g[f[k]]&&i.push(g[f[k]]);else for(h in g)g[c](h)&&i.push(g[h]);o.splice.apply(o,i)}for(k=0,l=o.length;k<l;k++){g=o[k];while(g.n){if(b){if(g.f){for(m=0,n=g.f.length;m<n;m++)if(g.f[m]==b){g.f.splice(m,1);break}!g.f.length&&delete g.f}for(h in g.n)if(g.n[c](h)&&g.n[h].f){var p=g.n[h].f;for(m=0,n=p.length;m<n;m++)if(p[m]==b){p.splice(m,1);break}!p.length&&delete g.n[h].f}}else{delete g.f;for(h in g.n)g.n[c](h)&&g.n[h].f&&delete g.n[h].f}g=g.n}}},k.once=function(a,b){var c=function(){var d=b.apply(this,arguments);k.unbind(a,c);return d};return k.on(a,c)},k.version=b,k.toString=function(){return"You are running Eve "+b},typeof module!="undefined"&&module.exports?module.exports=k:typeof define!="undefined"?define("eve",[],function(){return k}):a.eve=k})(this),function(){function cF(a){for(var b=0;b<cy.length;b++)cy[b].el.paper==a&&cy.splice(b--,1)}function cE(b,d,e,f,h,i){e=Q(e);var j,k,l,m=[],o,p,q,t=b.ms,u={},v={},w={};if(f)for(y=0,z=cy.length;y<z;y++){var x=cy[y];if(x.el.id==d.id&&x.anim==b){x.percent!=e?(cy.splice(y,1),l=1):k=x,d.attr(x.totalOrigin);break}}else f=+v;for(var y=0,z=b.percents.length;y<z;y++){if(b.percents[y]==e||b.percents[y]>f*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;y<z;y++){w[A][y]=[0];for(var F=1,G=u[A][y].length;F<G;F++)w[A][y][F]=(E[y][F]-u[A][y][F])/t}break;case"transform":var H=d._,I=ca(H[A],v[A]);if(I){u[A]=I.from,v[A]=I.to,w[A]=[],w[A].real=!0;for(y=0,z=u[A].length;y<z;y++){w[A][y]=[u[A][y][0]];for(F=1,G=u[A][y].length;F<G;F++)w[A][y][F]=(v[A][y][F]-u[A][y][F])/t}}else{var J=d.matrix||new cb,K={_:{transform:H.transform},getBBox:function(){return d.getBBox(1)}};u[A]=[J.a,J.b,J.c,J.d,J.e,J.f],b$(K,v[A]),v[A]=K._.transform,w[A]=[(K.matrix.a-J.a)/t,(K.matrix.b-J.b)/t,(K.matrix.c-J.c)/t,(K.matrix.d-J.d)/t,(K.matrix.e-J.e)/t,(K.matrix.f-J.f)/t]}break;case"csv":var L=r(j[A])[s](c),M=r(u[A])[s](c);if(A=="clip-rect"){u[A]=M,w[A]=[],y=M.length;while(y--)w[A][y]=(L[y]-u[A][y])/t}v[A]=L;break;default:L=[][n](j[A]),M=[][n](u[A]),w[A]=[],y=d.paper.customAttributes[A].length;while(y--)w[A][y]=((L[y]||0)-(M[y]||0))/t}}var O=j.easing,P=a.easing_formulas[O];if(!P){P=r(O).match(N);if(P&&P.length==5){var R=P;P=function(a){return cC(a,+R[1],+R[2],+R[3],+R[4],t)}}else P=bf}q=j.start||b.start||+(new Date),x={anim:b,percent:e,timestamp:q,start:q+(b.del||0),status:0,initstatus:f||0,stop:!1,ms:t,easing:P,from:u,diff:w,to:v,el:d,callback:j.callback,prev:p,next:o,repeat:i||b.times,origin:d.attr(),totalOrigin:h},cy.push(x);if(f&&!k&&!l){x.stop=!0,x.start=new Date-t*f;if(cy.length==1)return cA()}l&&(x.start=new Date-x.ms*f),cy.length==1&&cz(cA)}else k.initstatus=f,k.start=new Date-k.ms*f;eve("raphael.anim.start."+d.id,d,b)}}function cD(a,b){var c=[],d={};this.ms=b,this.times=1;if(a){for(var e in a)a[g](e)&&(d[Q(e)]=a[e],c.push(Q(e)));c.sort(bd)}this.anim=d,this.top=c[c.length-1],this.percents=c}function cC(a,b,c,d,e,f){function o(a,b){var c,d,e,f,j,k;for(e=a,k=0;k<8;k++){f=m(e)-a;if(z(f)<b)return e;j=(3*i*e+2*h)*e+g;if(z(j)<1e-6)break;e=e-f/j}c=0,d=1,e=a;if(e<c)return c;if(e>d)return d;while(c<d){f=m(e);if(z(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+" × "+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p<q;p++){var r=b[p];if(r[0]=="M")e=i=r[1],f=j=r[2];else{r[0]=="C"?(m=[e,f].concat(r.slice(1)),e=m[6],f=m[7]):(m=[e,f,e,f,i,j,i,j],e=i,f=j);for(var s=0,t=c.length;s<t;s++){var u=c[s];if(u[0]=="M")g=k=u[1],h=l=u[2];else{u[0]=="C"?(n=[g,h].concat(u.slice(1)),g=n[6],h=n[7]):(n=[g,h,g,h,k,l,k,l],g=k,h=l);var v=bG(m,n,d);if(d)o+=v;else{for(var w=0,x=v.length;w<x;w++)v[w].segment1=p,v[w].segment2=s,v[w].bez1=m,v[w].bez2=n;o=o.concat(v)}}}}}return o}function bG(b,c,d){var e=a.bezierBBox(b),f=a.bezierBBox(c);if(!a.isBBoxIntersect(e,f))return d?0:[];var g=bB.apply(0,b),h=bB.apply(0,c),i=~~(g/5),j=~~(h/5),k=[],l=[],m={},n=d?0:[];for(var o=0;o<i+1;o++){var p=a.findDotsAtSegment.apply(a,b.concat(o/i));k.push({x:p.x,y:p.y,t:o/i})}for(o=0;o<j+1;o++)p=a.findDotsAtSegment.apply(a,c.concat(o/j)),l.push({x:p.x,y:p.y,t:o/j});for(o=0;o<i;o++)for(var q=0;q<j;q++){var r=k[o],s=k[o+1],t=l[q],u=l[q+1],v=z(s.x-r.x)<.001?"y":"x",w=z(u.x-t.x)<.001?"y":"x",x=bD(r.x,r.y,s.x,s.y,t.x,t.y,u.x,u.y);if(x){if(m[x.x.toFixed(4)]==x.y.toFixed(4))continue;m[x.x.toFixed(4)]=x.y.toFixed(4);var y=r.t+z((x[v]-r[v])/(s[v]-r[v]))*(s.t-r.t),A=t.t+z((x[w]-t[w])/(u[w]-t[w]))*(u.t-t.t);y>=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)<y(e,g)||y(a,c)>x(e,g)||x(b,d)<y(f,h)||y(b,d)>x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)<i)){var j=1,k=j/2,l=j-k,m,n=.01;m=bB(a,b,c,d,e,f,g,h,l);while(z(m-i)>n)k/=2,l+=(m<i?1:-1)*k,m=bB(a,b,c,d,e,f,g,h,l);return l}}function bB(a,b,c,d,e,f,g,h,i){i==null&&(i=1),i=i>1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;o<k;o++){var p=j*l[o]+j,q=bA(p,a,c,e,g),r=bA(p,b,d,f,h),s=q*q+r*r;n+=m[o]*w.sqrt(s)}return j*n}function bA(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function by(a,b){var c=[];for(var d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function bm(a){if(Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[g](c)&&(b[c]=bm(a[c]));return b}function a(c){if(a.is(c,"function"))return b?c():eve.on("raphael.DOMload",c);if(a.is(c,E))return a._engine.create[m](a,c.splice(0,3+a.is(c[0],C))).add(c);var d=Array.prototype.slice.call(arguments,0);if(a.is(d[d.length-1],"function")){var e=d.pop();return b?e.call(a._engine.create[m](a,d)):eve.on("raphael.DOMload",function(){e.call(a._engine.create[m](a,d))})}return a._engine.create[m](a,arguments)}a.version="2.1.0",a.eve=eve;var b,c=/[, ]+/,d={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},e=/\{(\d+)\}/g,f="prototype",g="hasOwnProperty",h={doc:document,win:window},i={was:Object.prototype[g].call(h.win,"Raphael"),is:h.win.Raphael},j=function(){this.ca=this.customAttributes={}},k,l="appendChild",m="apply",n="concat",o="createTouch"in h.doc,p="",q=" ",r=String,s="split",t="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[s](q),u={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},v=r.prototype.toLowerCase,w=Math,x=w.max,y=w.min,z=w.abs,A=w.pow,B=w.PI,C="number",D="string",E="array",F="toString",G="fill",H=Object.prototype.toString,I={},J="push",K=a._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,L=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,M={NaN:1,Infinity:1,"-Infinity":1},N=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,O=w.round,P="setAttribute",Q=parseFloat,R=parseInt,S=r.prototype.toUpperCase,T=a._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0},U=a._availableAnimAttrs={blur:C,"clip-rect":"csv",cx:C,cy:C,fill:"colour","fill-opacity":C,"font-size":C,height:C,opacity:C,path:"path",r:C,rx:C,ry:C,stroke:"colour","stroke-opacity":C,"stroke-width":C,transform:"transform",width:C,x:C,y:C},V=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]/g,W=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,X={hs:1,rg:1},Y=/,?([achlmqrstvxz]),?/gi,Z=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,$=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,_=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/ig,ba=a._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,bb={},bc=function(a,b){return a.key-b.key},bd=function(a,b){return Q(a)-Q(b)},be=function(){},bf=function(a){return a},bg=a._rectPath=function(a,b,c,d,e){if(e)return[["M",a+e,b],["l",c-e*2,0],["a",e,e,0,0,1,e,e],["l",0,d-e*2],["a",e,e,0,0,1,-e,e],["l",e*2-c,0],["a",e,e,0,0,1,-e,-e],["l",0,e*2-d],["a",e,e,0,0,1,e,-e],["z"]];return[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},bh=function(a,b,c,d){d==null&&(d=c);return[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},bi=a._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return bh(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return bh(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return bg(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return bg(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return bg(b.x,b.y,b.width,b.height)}},bj=a.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;a=bR(a);for(e=0,g=a.length;e<g;e++){i=a[e];for(f=1,h=i.length;f<h;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d}return a};a._g=h,a.type=h.win.SVGAngle||h.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML";if(a.type=="VML"){var bk=h.doc.createElement("div"),bl;bk.innerHTML='<v:shape adj="1"/>',bl=bk.firstChild,bl.style.behavior="url(#default#VML)";if(!bl||typeof bl.adj!="object")return a.type=p;bk=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(f<d)return c-f;if(f>b-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("raphael.setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bo(b)},bp=function(){return"hsb("+[this.h,this.s,this.b]+")"},bq=function(){return"hsl("+[this.h,this.s,this.l]+")"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bw=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r<t)&&(z+=180);return{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:x,y:y},alpha:z}},a.bezierBBox=function(b,c,d,e,f,g,h,i){a.is(b,"array")||(b=[b,c,d,e,f,g,h,i]);var j=bQ.apply(null,b);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},a.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.x<c.x2&&b.x>c.x||c.x<b.x2&&c.x>b.x)&&(b.y<c.y2&&b.y>c.y||c.y<b.y2&&c.y>b.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[["M",c,d],["H",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h<i;h++){g=a[h];if(g[0]=="M")c=g[1],d=g[2],e.push(c),f.push(d);else{var j=bQ(c,d,g[1],g[2],g[3],g[4],g[5],g[6]);e=e[n](j.min.x,j.max.x),f=f[n](j.min.y,j.max.y),c=g[5],d=g[6]}}var k=y[m](0,e),l=y[m](0,f),o=x[m](0,e),p=x[m](0,f),q={x:k,y:l,x2:o,y2:p,width:o-k,height:p-l};b.bbox=bm(q);return q},bJ=function(b){var c=bm(b);c.toString=a._path2string;return c},bK=a._pathToRelative=function(b){var c=bz(b);if(c.rel)return bJ(c.rel);if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);var d=[],e=0,f=0,g=0,h=0,i=0;b[0][0]=="M"&&(e=b[0][1],f=b[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=b.length;j<k;j++){var l=d[j]=[],m=b[j];if(m[0]!=v.call(m[0])){l[0]=v.call(m[0]);switch(l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;n<o;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}}else{l=d[j]=[],m[0]=="m"&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;p<q;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}d.toString=a._path2string,c.rel=bJ(d);return d},bL=a._pathToAbsolute=function(b){var c=bz(b);if(c.abs)return bJ(c.abs);if(!a.is(b,E)||!a.is(b&&b[0],E))b=a.parsePathString(b);if(!b||!b.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,h=0,i=0;b[0][0]=="M"&&(e=+b[0][1],f=+b[0][2],g=e,h=f,i++,d[0]=["M",e,f]);var j=b.length==3&&b[0][0]=="M"&&b[1][0].toUpperCase()=="R"&&b[2][0].toUpperCase()=="Z";for(var k,l,m=i,o=b.length;m<o;m++){d.push(k=[]),l=b[m];if(l[0]!=S.call(l[0])){k[0]=S.call(l[0]);switch(k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":var p=[e,f][n](l.slice(1));for(var q=2,r=p.length;q<r;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[n](by(p,j));break;case"M":g=+l[1]+e,h=+l[2]+f;default:for(q=1,r=l.length;q<r;q++)k[q]=+l[q]+(q%2?e:f)}}else if(l[0]=="R")p=[e,f][n](l.slice(1)),d.pop(),d=d[n](by(p,j)),k=["R"][n](l.slice(-2));else for(var s=0,t=l.length;s<t;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=h;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],h=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}d.toString=a._path2string,c.abs=bJ(d);return d},bM=function(a,b,c,d){return[a,b,c,d,c,d]},bN=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},bO=function(a,b,c,d,e,f,g,h,i,j){var k=B*120/180,l=B/180*(+e||0),m=[],o,p=bv(function(a,b,c){var d=a*w.cos(c)-b*w.sin(c),e=a*w.sin(c)+b*w.cos(c);return{x:d,y:e}});if(!j){o=p(a,b,-l),a=o.x,b=o.y,o=p(h,i,-l),h=o.x,i=o.y;var q=w.cos(B/180*e),r=w.sin(B/180*e),t=(a-h)/2,u=(b-i)/2,v=t*t/(c*c)+u*u/(d*d);v>1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=a<C?B-E:E,F=h<C?B-F:F,E<0&&(E=B*2+E),F<0&&(F=B*2+F),g&&E>F&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W<X;W++)V[W]=W%2?p(m[W-1],m[W],l).y:p(m[W],m[W+1],l).x;return V},bP=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:A(j,3)*a+A(j,2)*3*i*c+j*3*i*i*e+A(i,3)*g,y:A(j,3)*b+A(j,2)*3*i*d+j*3*i*i*f+A(i,3)*h}},bQ=bv(function(a,b,c,d,e,f,g,h){var i=e-2*c+a-(g-2*e+c),j=2*(c-a)-2*(e-c),k=a-c,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,o=[b,h],p=[a,g],q;z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bM(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bM(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bM(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,["C"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);k<l;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var o=d[k],p=e&&e[k],q=o.length,r=e&&p.length;f.x=o[q-2],f.y=o[q-1],f.bx=Q(o[q-4])||f.x,f.by=Q(o[q-3])||f.y,g.bx=e&&(Q(p[r-4])||g.x),g.by=e&&(Q(p[r-3])||g.y),g.x=e&&p[r-2],g.y=e&&p[r-1]}e||(c.curve=bJ(d));return e?[d,e]:d},null,bJ),bS=a._parseDots=bv(function(b){var c=[];for(var d=0,e=b.length;d<e;d++){var f={},g=b[d].match(/^([^:]*):?([\d\.]*)/);f.color=a.getRGB(g[1]);if(f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),c.push(f)}for(d=1,e=c.length-1;d<e;d++)if(!c[d].offset){var h=Q(c[d-1].offset||0),i=0;for(var j=d+1;j<e;j++)if(c[j].offset){i=c[j].offset;break}i||(i=100,j=e),i=Q(i);var k=(i-h)/(j-d+1);for(;d<j;d++)h+=k,c[d].offset=h+"%"}return c}),bT=a._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)},bU=a._tofront=function(a,b){b.top!==a&&(bT(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},bV=a._toback=function(a,b){b.bottom!==a&&(bT(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},bW=a._insertafter=function(a,b,c){bT(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},bX=a._insertbefore=function(a,b,c){bT(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},bY=a.toMatrix=function(a,b){var c=bI(a),d={_:{transform:p},getBBox:function(){return c}};b$(d,b);return d.matrix},bZ=a.transformPath=function(a,b){return bj(a,bY(a,b))},b$=a._extractTransform=function(b,c){if(c==null)return b._.transform;c=r(c).replace(/\.{3}|\u2026/g,b._.transform||p);var d=a.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=b._,k=new cb;j.transform=d||[];if(d)for(var l=0,m=d.length;l<m;l++){var n=d[l],o=n.length,q=r(n[0]).toLowerCase(),s=n[0]!=q,t=s?k.invert():0,u,v,w,x,y;q=="t"&&o==3?s?(u=t.x(0,0),v=t.y(0,0),w=t.x(n[1],n[2]),x=t.y(n[1],n[2]),k.translate(w-u,x-v)):k.translate(n[1],n[2]):q=="r"?o==2?(y=y||b.getBBox(1),k.rotate(n[1],y.x+y.width/2,y.y+y.height/2),e+=n[1]):o==4&&(s?(w=t.x(n[2],n[3]),x=t.y(n[2],n[3]),k.rotate(n[1],w,x)):k.rotate(n[1],n[2],n[3]),e+=n[1]):q=="s"?o==2||o==3?(y=y||b.getBBox(1),k.scale(n[1],n[o-1],y.x+y.width/2,y.y+y.height/2),h*=n[1],i*=n[o-1]):o==5&&(s?(w=t.x(n[3],n[4]),x=t.y(n[3],n[4]),k.scale(n[1],n[2],w,x)):k.scale(n[1],n[2],n[3],n[4]),h*=n[1],i*=n[2]):q=="m"&&o==7&&k.add(n[1],n[2],n[3],n[4],n[5],n[6]),j.dirtyT=1,b.matrix=k}b.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,h==1&&i==1&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1},b_=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return a.length==4?[b,0,a[2],a[3]]:[b,0];case"s":return a.length==5?[b,1,1,a[3],a[4]]:a.length==3?[b,1,1]:[b,1]}},ca=a._equaliseTransform=function(b,c){c=r(c).replace(/\.{3}|\u2026/g,b),b=a.parseTransformString(b)||[],c=a.parseTransformString(c)||[];var d=x(b.length,c.length),e=[],f=[],g=0,h,i,j,k;for(;g<d;g++){j=b[g]||b_(c[g]),k=c[g]||b_(j);if(j[0]!=k[0]||j[0].toLowerCase()=="r"&&(j[2]!=k[2]||j[3]!=k[3])||j[0].toLowerCase()=="s"&&(j[3]!=k[3]||j[4]!=k[4]))return;e[g]=[],f[g]=[];for(h=0,i=x(j.length,k.length);h<i;h++)h in j&&(e[g][h]=j[h]),h in k&&(f[g][h]=k[h])}return{from:e,to:f}};a._getContainer=function(b,c,d,e){var f;f=e==null&&!a.is(b,"object")?h.doc.getElementById(b):b;if(f!=null){if(f.tagName)return c==null?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d};return{container:1,x:b,y:c,width:d,height:e}}},a.pathToRelative=bK,a._engine={},a.path2curve=bR,a.matrix=function(a,b,c,d,e,f){return new cb(a,b,c,d,e,f)},function(b){function d(a){var b=w.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}function c(a){return a[0]*a[0]+a[1]*a[1]}b.add=function(a,b,c,d,e,f){var g=[[],[],[]],h=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],i=[[a,c,e],[b,d,f],[0,0,1]],j,k,l,m;a&&a instanceof cb&&(i=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]);for(j=0;j<3;j++)for(k=0;k<3;k++){m=0;for(l=0;l<3;l++)m+=h[j][l]*i[l][k];g[j][k]=m}this.a=g[0][0],this.b=g[1][0],this.c=g[0][1],this.d=g[1][1],this.e=g[0][2],this.f=g[1][2]},b.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new cb(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},b.clone=function(){return new cb(this.a,this.b,this.c,this.d,this.e,this.f)},b.translate=function(a,b){this.add(1,0,0,1,a,b)},b.scale=function(a,b,c,d){b==null&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},b.rotate=function(b,c,d){b=a.rad(b),c=c||0,d=d||0;var e=+w.cos(b).toFixed(9),f=+w.sin(b).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},b.x=function(a,b){return a*this.a+b*this.c+this.e},b.y=function(a,b){return a*this.b+b*this.d+this.f},b.get=function(a){return+this[r.fromCharCode(97+a)].toFixed(4)},b.toString=function(){return a.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},b.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},b.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},b.split=function(){var b={};b.dx=this.e,b.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];b.scalex=w.sqrt(c(e[0])),d(e[0]),b.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*b.shear,e[1][1]-e[0][1]*b.shear],b.scaley=w.sqrt(c(e[1])),d(e[1]),b.shear/=b.scaley;var f=-e[0][1],g=e[1][1];g<0?(b.rotate=a.deg(w.acos(g)),f<0&&(b.rotate=360-b.rotate)):b.rotate=a.deg(w.asin(f)),b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate),b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate,b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b},b.toTransformString=function(a){var b=a||this[s]();if(b.isSimple){b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4);return(b.dx||b.dy?"t"+[b.dx,b.dy]:p)+(b.scalex!=1||b.scaley!=1?"s"+[b.scalex,b.scaley,0,0]:p)+(b.rotate?"r"+[b.rotate,0,0]:p)}return"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(cb.prototype);var cc=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);navigator.vendor=="Apple Computer, Inc."&&(cc&&cc[1]<4||navigator.platform.slice(0,2)=="iP")||navigator.vendor=="Google Inc."&&cc&&cc[1]<8?k.safari=function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:k.safari=be;var cd=function(){this.returnValue=!1},ce=function(){return this.originalEvent.preventDefault()},cf=function(){this.cancelBubble=!0},cg=function(){return this.originalEvent.stopPropagation()},ch=function(){if(h.doc.addEventListener)return function(a,b,c,d){var e=o&&u[b]?u[b]:b,f=function(e){var f=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,i=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,j=e.clientX+i,k=e.clientY+f;if(o&&u[g](b))for(var l=0,m=e.targetTouches&&e.targetTouches.length;l<m;l++)if(e.targetTouches[l].target==a){var n=e;e=e.targetTouches[l],e.originalEvent=n,e.preventDefault=ce,e.stopPropagation=cg;break}return c.call(d,e,j,k)};a.addEventListener(e,f,!1);return function(){a.removeEventListener(e,f,!1);return!0}};if(h.doc.attachEvent)return function(a,b,c,d){var e=function(a){a=a||h.win.event;var b=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;a.preventDefault=a.preventDefault||cd,a.stopPropagation=a.stopPropagation||cf;return c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){a.detachEvent("on"+b,e);return!0};return f}}(),ci=[],cj=function(a){var b=a.clientX,c=a.clientY,d=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,e=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft,f,g=ci.length;while(g--){f=ci[g];if(o){var i=a.touches.length,j;while(i--){j=a.touches[i];if(j.identifier==f.el._drag.id){b=j.clientX,c=j.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}}else a.preventDefault();var k=f.el.node,l,m=k.nextSibling,n=k.parentNode,p=k.style.display;h.win.opera&&n.removeChild(k),k.style.display="none",l=f.el.paper.getElementByPoint(b,c),k.style.display=p,h.win.opera&&(m?n.insertBefore(k,m):n.appendChild(k)),l&&eve("raphael.drag.over."+f.el.id,f.el,l),b+=e,c+=d,eve("raphael.drag.move."+f.el.id,f.move_scope||f.el,b-f.el._drag.x,c-f.el._drag.y,b,c,a)}},ck=function(b){a.unmousemove(cj).unmouseup(ck);var c=ci.length,d;while(c--)d=ci[c],d.el._drag={},eve("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,b);ci=[]},cl=a.el={};for(var cm=t.length;cm--;)(function(b){a[b]=cl[b]=function(c,d){a.is(c,"function")&&(this.events=this.events||[],this.events.push({name:b,f:c,unbind:ch(this.shape||this.node||h.doc,b,c,d||this)}));return this},a["un"+b]=cl["un"+b]=function(a){var c=this.events||[],d=c.length;while(d--)if(c[d].name==b&&c[d].f==a){c[d].unbind(),c.splice(d,1),!c.length&&delete this.events;return this}return this}})(t[cm]);cl.data=function(b,c){var d=bb[this.id]=bb[this.id]||{};if(arguments.length==1){if(a.is(b,"object")){for(var e in b)b[g](e)&&this.data(e,b[e]);return this}eve("raphael.data.get."+this.id,this,d[b],b);return d[b]}d[b]=c,eve("raphael.data.set."+this.id,this,c,b);return this},cl.removeData=function(a){a==null?bb[this.id]={}:bb[this.id]&&delete bb[this.id][a];return this},cl.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},cl.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var cn=[];cl.drag=function(b,c,d,e,f,g){function i(i){(i.originalEvent||i).preventDefault();var j=h.doc.documentElement.scrollTop||h.doc.body.scrollTop,k=h.doc.documentElement.scrollLeft||h.doc.body.scrollLeft;this._drag.x=i.clientX+k,this._drag.y=i.clientY+j,this._drag.id=i.identifier,!ci.length&&a.mousemove(cj).mouseup(ck),ci.push({el:this,move_scope:e,start_scope:f,end_scope:g}),c&&eve.on("raphael.drag.start."+this.id,c),b&&eve.on("raphael.drag.move."+this.id,b),d&&eve.on("raphael.drag.end."+this.id,d),eve("raphael.drag.start."+this.id,f||e||this,i.clientX+k,i.clientY+j,i)}this._drag={},cn.push({el:this,start:i}),this.mousedown(i);return this},cl.onDragOver=function(a){a?eve.on("raphael.drag.over."+this.id,a):eve.unbind("raphael.drag.over."+this.id)},cl.undrag=function(){var b=cn.length;while(b--)cn[b].el==this&&(this.unmousedown(cn[b].start),cn.splice(b,1),eve.unbind("raphael.drag.*."+this.id));!cn.length&&a.unmousemove(cj).unmouseup(ck)},k.circle=function(b,c,d){var e=a._engine.circle(this,b||0,c||0,d||0);this.__set__&&this.__set__.push(e);return e},k.rect=function(b,c,d,e,f){var g=a._engine.rect(this,b||0,c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.ellipse=function(b,c,d,e){var f=a._engine.ellipse(this,b||0,c||0,d||0,e||0);this.__set__&&this.__set__.push(f);return f},k.path=function(b){b&&!a.is(b,D)&&!a.is(b[0],E)&&(b+=p);var c=a._engine.path(a.format[m](a,arguments),this);this.__set__&&this.__set__.push(c);return c},k.image=function(b,c,d,e,f){var g=a._engine.image(this,b||"about:blank",c||0,d||0,e||0,f||0);this.__set__&&this.__set__.push(g);return g},k.text=function(b,c,d){var e=a._engine.text(this,b||0,c||0,r(d));this.__set__&&this.__set__.push(e);return e},k.set=function(b){!a.is(b,"array")&&(b=Array.prototype.splice.call(arguments,0,arguments.length));var c=new cG(b);this.__set__&&this.__set__.push(c);return c},k.setStart=function(a){this.__set__=a||this.set()},k.setFinish=function(a){var b=this.__set__;delete this.__set__;return b},k.setSize=function(b,c){return a._engine.setSize.call(this,b,c)},k.setViewBox=function(b,c,d,e,f){return a._engine.setViewBox.call(this,b,c,d,e,f)},k.top=k.bottom=null,k.raphael=a;var co=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,i=b.top+(h.win.pageYOffset||e.scrollTop||d.scrollTop)-f,j=b.left+(h.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:i,x:j}};k.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=h.doc.elementFromPoint(a,b);if(h.win.opera&&e.tagName=="svg"){var f=co(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var i=d.getIntersectionList(g,null);i.length&&(e=i[i.length-1])}if(!e)return null;while(e.parentNode&&e!=d.parentNode&&!e.raphael)e=e.parentNode;e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null;return e},k.getById=function(a){var b=this.bottom;while(b){if(b.id==a)return b;b=b.next}return null},k.forEach=function(a,b){var c=this.bottom;while(c){if(a.call(b,c)===!1)return this;c=c.next}return this},k.getElementsByPoint=function(a,b){var c=this.set();this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)});return c},cl.isPointInside=function(b,c){var d=this.realPath=this.realPath||bi[this.type](this);return a.isPointInsidePath(d,b,c)},cl.getBBox=function(a){if(this.removed)return{};var b=this._;if(a){if(b.dirty||!b.bboxwt)this.realPath=bi[this.type](this),b.bboxwt=bI(this.realPath),b.bboxwt.toString=cq,b.dirty=0;return b.bboxwt}if(b.dirty||b.dirtyT||!b.bbox){if(b.dirty||!this.realPath)b.bboxwt=0,this.realPath=bi[this.type](this);b.bbox=bI(bj(this.realPath,this.matrix)),b.bbox.toString=cq,b.dirty=b.dirtyT=0}return b.bbox},cl.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());this.__set__&&this.__set__.push(a);return a},cl.glow=function(a){if(this.type=="text")return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||bi[this.type](this);f=this.matrix?bj(f,this.matrix):f;for(var g=1;g<c+1;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cr={},cs=function(b,c,d,e,f,g,h,i,j){return j==null?bB(b,c,d,e,f,g,h,i):a.findDotsAtSegment(b,c,d,e,f,g,h,i,bC(b,c,d,e,f,g,h,i,j))},ct=function(b,c){return function(d,e,f){d=bR(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;o<p;o++){i=d[o];if(i[0]=="M")g=+i[1],h=+i[2];else{j=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6]);if(n+j>e){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type=="path")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx["ease-in"]=cx["<"],cx.easeOut=cx["ease-out"]=cx[">"],cx.easeInOut=cx["ease-in-out"]=cx["<>"],cx["back-in"]=cx.backIn,cx["back-out"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c<cy.length;c++){var d=cy[c];if(d.el.removed||d.paused)continue;var e=b-d.start,f=d.ms,h=d.easing,i=d.from,j=d.diff,k=d.to,l=d.t,m=d.el,o={},p,r={},s;d.initstatus?(e=(d.initstatus*d.anim.top-d.prev)/(d.percent-d.prev)*f,d.status=d.initstatus,delete d.initstatus,d.stop&&cy.splice(c--,1)):d.status=(d.prev+(d.percent-d.prev)*(e/f))/d.anim.top;if(e<0)continue;if(e<f){var t=h(e/f);for(var u in i)if(i[g](u)){switch(U[u]){case C:p=+i[u]+t*f*j[u];break;case"colour":p="rgb("+[cB(O(i[u].r+t*f*j[u].r)),cB(O(i[u].g+t*f*j[u].g)),cB(O(i[u].b+t*f*j[u].b))].join(",")+")";break;case"path":p=[];for(var v=0,w=i[u].length;v<w;v++){p[v]=[i[u][v][0]];for(var x=1,y=i[u][v].length;x<y;x++)p[v][x]=+i[u][v][x]+t*f*j[u][v][x];p[v]=p[v].join(q)}p=p.join(q);break;case"transform":if(j[u].real){p=[];for(v=0,w=i[u].length;v<w;v++){p[v]=[i[u][v][0]];for(x=1,y=i[u][v].length;x<y;x++)p[v][x]=i[u][v][x]+t*f*j[u][v][x]}}else{var z=function(a){return+i[u][a]+t*f*j[u][a]};p=[["m",z(0),z(1),z(2),z(3),z(4),z(5)]]}break;case"csv":if(u=="clip-rect"){p=[],v=4;while(v--)p[v]=+i[u][v]+t*f*j[u][v]}break;default:var A=[][n](i[u]);p=[],v=m.paper.customAttributes[u].length;while(v--)p[v]=+A[v]+t*f*j[u][v]}o[u]=p}m.attr(o),function(a,b,c){setTimeout(function(){eve("raphael.anim.frame."+a,b,c)})}(m.id,m,d.anim)}else{(function(b,c,d){setTimeout(function(){eve("raphael.anim.frame."+c.id,c,d),eve("raphael.anim.finish."+c.id,c,d),a.is(b,"function")&&b.call(c)})})(d.callback,m,d.anim),m.attr(k),cy.splice(c--,1);if(d.repeat>1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l<m;l++)if(cy[l].anim==c&&cy[l].el==b){cy[m-1].start=cy[l].start;break}return h},cl.onAnimation=function(a){a?eve.on("raphael.anim.frame."+this.id,a):eve.unbind("raphael.anim.frame."+this.id);return this},cD.prototype.delay=function(a){var b=new cD(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cD.prototype.repeat=function(a){var b=new cD(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(b instanceof cD)return b;if(a.is(d,"function")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&Q(i)+"%"!=i&&(h=!0,f[i]=b[i]);if(!h)return new cD(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cD({100:f},c)},cl.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cD?b:a.animation(b,c,d,e);cE(g,f,g.percents[0],null,f.attr());return f},cl.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},cl.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cE(a,this,-1,y(b,1));return this}e=cy.length;for(;d<e;d++){f=cy[d];if(f.el.id==this.id&&(!a||f.anim==a)){if(a)return f.status;c.push({anim:f.anim,status:f.status})}}if(a)return 0;return c},cl.pause=function(a){for(var b=0;b<cy.length;b++)cy[b].el.id==this.id&&(!a||cy[b].anim==a)&&eve("raphael.anim.pause."+this.id,this,cy[b].anim)!==!1&&(cy[b].paused=!0);return this},cl.resume=function(a){for(var b=0;b<cy.length;b++)if(cy[b].el.id==this.id&&(!a||cy[b].anim==a)){var c=cy[b];eve("raphael.anim.resume."+this.id,this,c.anim)!==!1&&(delete c.paused,this.status(c.anim,c.status))}return this},cl.stop=function(a){for(var b=0;b<cy.length;b++)cy[b].el.id==this.id&&(!a||cy[b].anim==a)&&eve("raphael.anim.stop."+this.id,this,cy[b].anim)!==!1&&cy.splice(b--,1);return this},eve.on("raphael.remove",cF),eve.on("raphael.clear",cF),cl.toString=function(){return"Raphaël’s object"};var cG=function(a){this.items=[],this.length=0,this.type="set";if(a)for(var b=0,c=a.length;b<c;b++)a[b]&&(a[b].constructor==cl.constructor||a[b].constructor==cG)&&(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},cH=cG.prototype;cH.push=function(){var a,b;for(var c=0,d=arguments.length;c<d;c++)a=arguments[c],a&&(a.constructor==cl.constructor||a.constructor==cG)&&(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},cH.pop=function(){this.length&&delete this[this.length--];return this.items.pop()},cH.forEach=function(a,b){for(var c=0,d=this.items.length;c<d;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var cI in cl)cl[g](cI)&&(cH[cI]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][m](c,b)})}}(cI));cH.attr=function(b,c){if(b&&a.is(b,E)&&a.is(b[0],"object"))for(var d=0,e=b.length;d<e;d++)this.items[d].attr(b[d]);else for(var f=0,g=this.items.length;f<g;f++)this.items[f].attr(b,c);return this},cH.clear=function(){while(this.length)this.pop()},cH.splice=function(a,b,c){a=a<0?x(this.length+a,0):a,b=x(0,y(this.length-a,b));var d=[],e=[],f=[],g;for(g=2;g<arguments.length;g++)f.push(arguments[g]);for(g=0;g<b;g++)e.push(this[a+g]);for(;g<this.length-a;g++)d.push(this[a+g]);var h=f.length;for(g=0;g<h+d.length;g++)this.items[a+g]=this[a+g]=g<h?f[g]:d[g-h];g=this.items.length=this.length-=b-h;while(this[g])delete this[g++];return new cG(e)},cH.exclude=function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]==a){this.splice(b,1);return!0}},cH.animate=function(b,c,d,e){(a.is(d,"function")||!d)&&(e=d||null);var f=this.items.length,g=f,h,i=this,j;if(!f)return this;e&&(j=function(){!--f&&e.call(i)}),d=a.is(d,D)?d:j;var k=a.animation(b,c,d,j);h=this.items[--g].animate(k);while(g--)this.items[g]&&!this.items[g].removed&&this.items[g].animateWith(h,k,k);return this},cH.insertAfter=function(a){var b=this.items.length;while(b--)this.items[b].insertAfter(a);return this},cH.getBBox=function(){var a=[],b=[],c=[],d=[];for(var e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}a=y[m](0,a),b=y[m](0,b),c=x[m](0,c),d=x[m](0,d);return{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},cH.clone=function(a){a=new cG;for(var b=0,c=this.items.length;b<c;b++)a.push(this.items[b].clone());return a},cH.toString=function(){return"Raphaël‘s set"},a.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[g](d)&&(b.face[d]=a.face[d]);this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=R(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[g](e)){var f=a.glyphs[e];b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"};if(f.k)for(var h in f.k)f[g](h)&&(b.glyphs[e].k[h]=f.k[h])}}return a},k.getFont=function(b,c,d,e){e=e||"normal",d=d||"normal",c=+c||{normal:400,bold:700,lighter:300,bolder:800}[c]||400;if(!!a.fonts){var f=a.fonts[b];if(!f){var h=new RegExp("(^|\\s)"+b.replace(/[^\w\d\s+!~.:_-]/g,p)+"(\\s|$)","i");for(var i in a.fonts)if(a.fonts[g](i)&&h.test(i)){f=a.fonts[i];break}}var j;if(f)for(var k=0,l=f.length;k<l;k++){j=f[k];if(j.face["font-weight"]==c&&(j.face["font-style"]==d||!j.face["font-style"])&&j.face["font-stretch"]==e)break}return j}},k.print=function(b,d,e,f,g,h,i){h=h||"middle",i=x(y(i||0,1),-1);var j=r(e)[s](p),k=0,l=0,m=p,n;a.is(f,e)&&(f=this.getFont(f));if(f){n=(g||16)/f.face["units-per-em"];var o=f.face.bbox[s](c),q=+o[0],t=o[3]-o[1],u=0,v=+o[1]+(h=="baseline"?t+ +f.face.descent:t/2);for(var w=0,z=j.length;w<z;w++){if(j[w]=="\n")k=0,B=0,l=0,u+=t;else{var A=l&&f.glyphs[j[w-1]]||{},B=f.glyphs[j[w]];k+=l?(A.w||f.w)+(A.k&&A.k[j[w]]||0)+f.w*i:0,l=1}B&&B.d&&(m+=a.transformPath(B.d,["t",k*n,u*n,"s",n,n,q,v,"t",(b-q)/n,(d-v)/n]))}}return this.path(m).attr({fill:"#000",stroke:"none"})},k.add=function(b){if(a.is(b,"array")){var c=this.set(),e=0,f=b.length,h;for(;e<f;e++)h=b[e]||{},d[g](h.type)&&c.push(this[h.type]().attr(h))}return c},a.format=function(b,c){var d=a.is(c,E)?[0][n](c):arguments;b&&a.is(b,D)&&d.length-1&&(b=b.replace(e,function(a,b){return d[++b]==null?p:d[b]}));return b||p},a.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),typeof e=="function"&&f&&(e=e()))}),e=(e==null||e==d?a:e)+"";return e};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),a.ninja=function(){i.was?h.win.Raphael=i.is:delete Raphael;return a},a.st=cH,function(b,c,d){function e(){/in/.test(b.readyState)?setTimeout(e,9):a.eve("raphael.DOMload")}b.readyState==null&&b.addEventListener&&(b.addEventListener(c,d=function(){b.removeEventListener(c,d,!1),b.readyState="complete"},!1),b.readyState="loading"),e()}(document,"DOMContentLoaded"),i.was?h.win.Raphael=a:Raphael=a,eve.on("raphael.DOMload",function(){b=!0})}(),window.Raphael.svg&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){typeof d=="string"&&(d=q(d));for(var f in e)e[b](f)&&(f.substring(0,6)=="xlink:"?d.setAttributeNS(n,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else d=a._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(b,e){var j="linear",k=b.id+e,m=.5,n=.5,o=b.node,p=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){e=c(e).replace(a._radial_gradient,function(a,b,c){j="radial";if(b&&c){m=d(b),n=d(c);var e=(n>.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x<y;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1;return 1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if(d.type=="path"){var g=c(e).toLowerCase().split("-"),h=d.paper,i=f?"end":"start",j=d.node,k=d.attrs,m=k["stroke-width"],n=g.length,r="classic",s,t,u,v,w,x=3,y=3,z=5;while(n--)switch(g[n]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":r=g[n];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}r=="open"?(x+=2,y+=2,z+=2,u=1,v=f?4:1,w={fill:"none",stroke:k.stroke}):(v=u=x/2,w={fill:k.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={};if(r!="none"){var A="raphael-marker-"+r,B="raphael-marker-"+i+r+x+y;a._g.doc.getElementById(A)?p[A]++:(h.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[r],id:A})),p[A]=1);var C=a._g.doc.getElementById(B),D;C?(p[B]++,D=C.getElementsByTagName("use")[0]):(C=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:v,refY:y/2}),D=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),C.appendChild(D),h.defs.appendChild(C),p[B]=1),q(D,w);var F=u*(r!="diamond"&&r!="oval");f?(s=d._.arrows.startdx*m||0,t=a.getTotalLength(k.path)-F*m):(s=F*m,t=a.getTotalLength(k.path)-(d._.arrows.enddx*m||0)),w={},w["marker-"+i]="url(#"+B+")";if(t||s)w.d=Raphael.getSubpath(k.path,s,t);q(j,w),d._.arrows[i+"Path"]=A,d._.arrows[i+"Marker"]=B,d._.arrows[i+"dx"]=F,d._.arrows[i+"Type"]=r,d._.arrows[i+"String"]=e}else f?(s=d._.arrows.startdx*m||0,t=a.getTotalLength(k.path)-s):(s=0,t=a.getTotalLength(k.path)-(d._.arrows.enddx*m||0)),d._.arrows[i+"Path"]&&q(j,{d:Raphael.getSubpath(k.path,s,t)}),delete d._.arrows[i+"Path"],delete d._.arrows[i+"Marker"],delete d._.arrows[i+"dx"],delete d._.arrows[i+"Type"],delete d._.arrows[i+"String"];for(w in p)if(p[b](w)&&!p[w]){var G=a._g.doc.getElementById(w);G&&G.parentNode.removeChild(G)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,b,d){b=u[c(b).toLowerCase()];if(b){var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=b.length;while(h--)g[h]=b[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[b](o)){if(!a._availableAttrs[b](o))continue;var p=f[o];k[o]=p;switch(o){case"blur":d.blur(p);break;case"href":case"title":case"target":var u=i.parentNode;if(u.tagName.toLowerCase()!="a"){var w=q("a");u.insertBefore(w,i),w.appendChild(i),u=w}o=="target"?u.setAttributeNS(n,"show",p=="blank"?"new":p):u.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var x=c(p).split(j);if(x.length==4){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var z=q("clipPath"),A=q("rect");z.id=a.createUUID(),q(A,{x:x[0],y:x[1],width:x[2],height:x[3]}),z.appendChild(A),d.paper.defs.appendChild(z),q(i,{"clip-path":"url(#"+z.id+")"}),d.clip=A}if(!p){var B=i.getAttribute("clip-path");if(B){var C=a._g.doc.getElementById(B.replace(/(^url\(#|\)$)/g,l));C&&C.parentNode.removeChild(C),q(i,{"clip-path":l}),delete d.clip}}break;case"path":d.type=="path"&&(q(i,{d:p?k.path=a._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":i.setAttribute(o,p),d._.dirty=1;if(k.fx)o="x",p=k.x;else break;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if(o=="rx"&&d.type=="rect")break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":i.setAttribute(o,p),d._.dirty=1;if(k.fy)o="y",p=k.y;else break;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if(o=="ry"&&d.type=="rect")break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":d.type=="rect"?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":d.type=="image"&&i.setAttributeNS(n,"href",p);break;case"stroke-width":if(d._.sx!=1||d._.sy!=1)p/=g(h(d._.sx),h(d._.sy))||1;d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var D=c(p).match(a._ISURL);if(D){z=q("pattern");var F=q("image");z.id=a.createUUID(),q(z,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(F,{x:0,y:0,"xlink:href":D[1]}),z.appendChild(F),function(b){a._preload(D[1],function(){var a=this.offsetWidth,c=this.offsetHeight;q(b,{width:a,height:c}),q(F,{width:a,height:c}),d.paper.safari()})}(z),d.paper.defs.appendChild(z),q(i,{fill:"url(#"+z.id+")"}),d.pattern=z,d.pattern&&s(d);break}var G=a.getRGB(p);if(!G.error)delete f.gradient,delete k.gradient,!a.is(k.opacity,"undefined")&&a.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!a.is(k["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});else if((d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(H){var I=H.getElementsByTagName("stop");q(I[I.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}G[b]("opacity")&&q(i,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n<o;n++)m=q("tspan"),n&&q(m,{dy:i*x,x:g.x}),m.appendChild(a._g.doc.createTextNode(j[n])),h.appendChild(m),k[n]=m}else{k=h.getElementsByTagName("tspan");for(n=0,o=k.length;n<o;n++)n?q(k[n],{dy:i*x,x:g.x}):q(k[0],{dy:0})}q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&a.is(r,"finite")&&q(k[0],{dy:r})}},z=function(b,c){var d=0,e=0;this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},A=a.el;z.prototype=A,A.constructor=z,a._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);d.type="path",w(d,{fill:"none",stroke:"#000",path:a});return d},A.rotate=function(a,b,e){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this.transform(this._.transform.concat([["r",a,b,e]]));return this},A.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]]));return this},A.translate=function(a,b){if(this.removed)return this;a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",a,b]]));return this},A.transform=function(c){var d=this._;if(c==null)return d.transform;a._extractTransform(this,c),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix});if(d.sx!=1||d.sy!=1){var e=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){!this.removed&&this.paper.safari(this.node.style.display="none");return this},A.show=function(){!this.removed&&this.paper.safari(this.node.style.display="");return this},A.remove=function(){if(!this.removed&&!!this.node.parentNode){var b=this.paper;b.__set__&&b.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&b.defs.removeChild(this.gradient),a._tear(this,b),this.node.parentNode.tagName.toLowerCase()=="a"?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var c in this)this[c]=typeof this[c]=="function"?a._removedFactory(c):null;this.removed=!0}},A._getBBox=function(){if(this.node.style.display=="none"){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}a&&this.hide();return b},A.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c=="fill"&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;if(c=="transform")return this._.transform;var g=c.split(j),h={};for(var i=0,l=g.length;i<l;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]}if(d==null&&a.is(c,"array")){h={};for(i=0,l=c.length;i<l;i++)h[c[i]]=this.attr(c[i]);return h}if(d!=null){var m={};m[c]=d}else c!=null&&a.is(c,"object")&&(m=c);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[b](p)&&(m[p]=o[p])}w(this,m);return this},A.toFront=function(){if(this.removed)return this;this.node.parentNode.tagName.toLowerCase()=="a"?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var b=this.paper;b.top!=this&&a._tofront(this,b);return this},A.toBack=function(){if(this.removed)return this;var b=this.node.parentNode;b.tagName.toLowerCase()=="a"?b.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):b.firstChild!=this.node&&b.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper);var c=this.paper;return this},A.insertAfter=function(b){if(this.removed)return this;var c=b.node||b[b.length-1].node;c.nextSibling?c.parentNode.insertBefore(this.node,c.nextSibling):c.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},A.insertBefore=function(b){if(this.removed)return this;var c=b.node||b[0].node;c.parentNode.insertBefore(this.node,c),a._insertbefore(this,b,this.paper);return this},A.blur=function(b){var c=this;if(+b!==0){var d=q("filter"),e=q("feGaussianBlur");c.attrs.blur=b,d.id=a.createUUID(),q(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,q(c.node,{filter:"url(#"+d.id+")"})}else c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute("filter")},a._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs);return f},a._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs);return h},a._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs);return g},a._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image";return h},a._engine.text=function(b,c,d,e){var f=q("text");b.canvas&&b.canvas.appendChild(f);var g=new z(f,b);g.attrs={x:c,y:d,"text-anchor":"middle",text:e,font:a._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs);return g},a._engine.setSize=function(a,b){this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox);return this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c)throw new Error("SVG container not found.");var h=q("svg"),i="overflow:hidden;",j;d=d||0,e=e||0,f=f||512,g=g||342,q(h,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),c==1?(h.style.cssText=i+"position:absolute;left:"+d+"px;top:"+e+"px",a._g.doc.body.appendChild(h),j=1):(h.style.cssText=i+"position:relative",c.firstChild?c.insertBefore(h,c.firstChild):c.appendChild(h)),c=new a._Paper,c.width=f,c.height=g,c.canvas=h,c.clear(),c._left=c._top=0,j&&(c.renderfix=function(){}),c.renderfix();return c},a._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f=g(c/this.width,d/this.height),h=this.top,i=e?"meet":"xMinYMin",j,l;a==null?(this._vbSize&&(f=1),delete this._vbSize,j="0 0 "+this.width+m+this.height):(this._vbSize=f,j=a+m+b+m+c+m+d),q(this.canvas,{viewBox:j,preserveAspectRatio:i});while(f&&h)l="stroke-width"in h.attrs?h.attrs["stroke-width"]:1,h.attr({"stroke-width":l}),h._.dirty=1,h._.dirtyT=1,h=h.prev;this._viewBox=[a,b,c,d,!!e];return this},a.prototype.renderfix=function(){var a=this.canvas,b=a.style,c;try{c=a.getScreenCTM()||a.createSVGMatrix()}catch(d){c=a.createSVGMatrix()}var e=-c.e%1,f=-c.f%1;if(e||f)e&&(this._left=(this._left+e)%1,b.left=this._left+"px"),f&&(this._top=(this._top+f)%1,b.top=this._top+"px")},a.prototype.clear=function(){a.eve("raphael.clear",this);var b=this.canvas;while(b.firstChild)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël "+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=q("defs"))},a.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null};var B=a.st;for(var C in A)A[b](C)&&!B[b](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}(window.Raphael),window.Raphael.vml&&function(a){var b="hasOwnProperty",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=a.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(b){var d=/[ahqstv]/ig,e=a._pathToAbsolute;c(b).match(d)&&(e=a._path2curve),d=/[clmz]/g;if(e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(q,function(a,b,c){var d=[],e=b.toLowerCase()=="m",g=p[b];c.replace(s,function(a){e&&d.length==2&&(g+=d+p[b=="m"?"l":"L"],d=[]),d.push(f(a*u))});return g+d});return g}var h=e(b),i,j;g=[];for(var k=0,l=h.length;k<l;k++){i=h[k],j=h[k][0].toLowerCase(),j=="z"&&(j="x");for(var m=1,r=i.length;m<r;m++)j+=f(i[m]*u)+(m!=r-1?",":o);g.push(j)}return g.join(n)},y=function(b,c,d){var e=a.matrix();e.rotate(-b,.5,.5);return{dx:e.x(c,d),dy:e.y(c,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q,r=u/b,s=u/c;m.visibility="hidden";if(!!b&&!!c){l.coordsize=i(r)+n+i(s),m.rotation=f*(b*c<0?-1:1);if(f){var t=y(f,d,e);d=t.dx,e=t.dy}b<0&&(p+="x"),c<0&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-r+n+e*-s;if(k||g.fillsize){var v=l.getElementsByTagName(j);v=v&&v[0],l.removeChild(v),k&&(t=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),v.position=t.dx*o+n+t.dy*o),g.fillsize&&(v.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(v)}m.visibility="visible"}};a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,b,d){var e=c(b).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";while(g--)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q,r=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),s=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),t=e;for(var y in i)i[b](y)&&(m[y]=i[y]);r&&(m.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur);if(i.path&&e.type=="path"||r)l.path=x(~c(m.path).toLowerCase().indexOf("r")?a._pathToAbsolute(m.path):m.path),e.type=="image"&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0));"transform"in i&&e.transform(i.transform);if(s){var B=+m.cx,D=+m.cy,E=+m.rx||+m.r||0,G=+m.ry||+m.r||0;l.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((B-E)*u),f((D-G)*u),f((B+E)*u),f((D+G)*u),f(B*u))}if("clip-rect"in i){var H=c(i["clip-rect"]).split(k);if(H.length==4){H[2]=+H[2]+ +H[0],H[3]=+H[3]+ +H[1];var I=l.clipRect||a._g.doc.createElement("div"),J=I.style;J.clip=a.format("rect({1}px {2}px {3}px {0}px)",H),l.clipRect||(J.position="absolute",J.top=0,J.left=0,J.width=e.paper.width+"px",J.height=e.paper.height+"px",l.parentNode.insertBefore(I,l),I.appendChild(l),l.clipRect=I)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var K=e.textpath.style;i.font&&(K.font=i.font),i["font-family"]&&(K.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(K.fontSize=i["font-size"]),i["font-weight"]&&(K.fontWeight=i["font-weight"]),i["font-style"]&&(K.fontStyle=i["font-style"])}"arrow-start"in i&&A(t,i["arrow-start"]),"arrow-end"in i&&A(t,i["arrow-end"],1);if(i.opacity!=null||i["stroke-width"]!=null||i.fill!=null||i.src!=null||i.stroke!=null||i["stroke-width"]!=null||i["stroke-opacity"]!=null||i["fill-opacity"]!=null||i["stroke-dasharray"]!=null||i["stroke-miterlimit"]!=null||i["stroke-linejoin"]!=null||i["stroke-linecap"]!=null){var L=l.getElementsByTagName(j),M=!1;L=L&&L[0],!L&&(M=L=F(j)),e.type=="image"&&i.src&&(L.src=i.src),i.fill&&(L.on=!0);if(L.on==null||i.fill=="none"||i.fill===null)L.on=!1;if(L.on&&i.fill){var N=c(i.fill).match(a._ISURL);if(N){L.parentNode==l&&l.removeChild(L),L.rotate=!0,L.src=N[1],L.type="tile";var O=e.getBBox(1);L.position=O.x+n+O.y,e._.fillpos=[O.x,O.y],a._preload(N[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else L.color=a.getRGB(i.fill).hex,L.src=o,L.type="solid",a.getRGB(i.fill).error&&(t.type in{circle:1,ellipse:1}||c(i.fill).charAt()!="r")&&C(t,i.fill,L)&&(m.fill="none",m.gradient=i.fill,L.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var P=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);P=h(g(P,0),1),L.opacity=P,L.src&&(L.color="none")}l.appendChild(L);var Q=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],T=!1;!Q&&(T=Q=F("stroke"));if(i.stroke&&i.stroke!="none"||i["stroke-width"]||i["stroke-opacity"]!=null||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])Q.on=!0;(i.stroke=="none"||i.stroke===null||Q.on==null||i.stroke==0||i["stroke-width"]==0)&&(Q.on=!1);var U=a.getRGB(i.stroke);Q.on&&i.stroke&&(Q.color=U.hex),P=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+U.o+1||2)-1);var V=(d(i["stroke-width"])||1)*.75;P=h(g(P,0),1),i["stroke-width"]==null&&(V=m["stroke-width"]),i["stroke-width"]&&(Q.weight=V),V&&V<1&&(P*=V)&&(Q.weight=1),Q.opacity=P,i["stroke-linejoin"]&&(Q.joinstyle=i["stroke-linejoin"]||"miter"),Q.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(Q.endcap=i["stroke-linecap"]=="butt"?"flat":i["stroke-linecap"]=="square"?"square":"round");if(i["stroke-dasharray"]){var W={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};Q.dashstyle=W[b](i["stroke-dasharray"])?W[i["stroke-dasharray"]]:o}T&&l.appendChild(Q)}if(t.type=="text"){t.paper.canvas.style.display=o;var X=t.paper.span,Y=100,Z=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=X.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),Z=d(m["font-size"]||Z&&Z[0])||10,p.fontSize=Z*Y+"px",t.textpath.string&&(X.innerHTML=c(t.textpath.string).replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba<bb;ba++)if(_[ba]in i){t._.dirty=1;break}switch(m["text-anchor"]){case"start":t.textpath.style["v-text-align"]="left",t.bbx=t.W/2;break;case"end":t.textpath.style["v-text-align"]="right",t.bbx=-t.W/2;break;default:t.textpath.style["v-text-align"]="center",t.bbx=0}t.textpath.style["v-text-kern"]=!0}},C=function(b,f,g){b.attrs=b.attrs||{};var h=b.attrs,i=Math.pow,j,k,l="linear",m=".5 .5";b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){l="radial",b&&c&&(b=d(b),c=d(c),i(b-.5,2)+i(c-.5,2)>.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s<t;s++)q[s].offset&&r.push(q[s].offset+n+q[s].color);g.colors=r.length?r.join():"0% "+g.color,l=="radial"?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=m,g.angle=0):(g.type="gradient",g.angle=(270-p)%360),b.appendChild(g)}return 1},D=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},E=a.el;D.prototype=E,E.constructor=D,E.transform=function(b){if(b==null)return this._.transform;var d=this.paper._viewBoxShift,e=d?"s"+[d.scale,d.scale]+"-1-1t"+[d.dx,d.dy]:o,f;d&&(f=b=c(b).replace(/\.{3}|\u2026/g,this._.transform||o)),a._extractTransform(this,e+b);var g=this.matrix.clone(),h=this.skew,i=this.node,j,k=~c(this.attrs.fill).indexOf("-"),l=!c(this.attrs.fill).indexOf("url(");g.translate(-0.5,-0.5);if(l||k||this.type=="image"){h.matrix="1 0 0 1",h.offset="0 0",j=g.split();if(k&&j.noRotation||!j.isSimple){i.style.filter=g.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;i.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else i.style.filter=o,z(this,j.scalex,j.scaley,j.dx,j.dy,j.rotate)}else i.style.filter=o,h.matrix=c(g),h.offset=g.offset();f&&(this._.transform=f);return this},E.rotate=function(a,b,e){if(this.removed)return this;if(a!=null){a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),e==null&&(b=e);if(b==null||e==null){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,b,e]]));return this}},E.translate=function(a,b){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",a,b]]));return this},E.scale=function(a,b,e,f){if(this.removed)return this;a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),b==null&&(b=a),f==null&&(e=f);if(e==null||f==null)var g=this.getBBox(1);e=e==null?g.x+g.width/2:e,f=f==null?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this._.dirtyT=1;return this},E.hide=function(){!this.removed&&(this.node.style.display="none");return this},E.show=function(){!this.removed&&(this.node.style.display=o);return this},E._getBBox=function(){if(this.removed)return{};return{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&!!this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),a.eve.unbind("raphael.*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;this.removed=!0}},E.attr=function(c,d){if(this.removed)return this;if(c==null){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);e.gradient&&e.fill=="none"&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform;return e}if(d==null&&a.is(c,"string")){if(c==j&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;var g=c.split(k),h={};for(var i=0,m=g.length;i<m;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return m-1?h:h[g[0]]}if(this.attrs&&d==null&&a.is(c,"array")){h={};for(i=0,m=c.length;i<m;i++)h[c[i]]=this.attr(c[i]);return h}var n;d!=null&&(n={},n[c]=d),d==null&&a.is(c,"object")&&(n=c);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[b](o)&&n[b](o)&&a.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[b](q)&&(n[q]=p[q])}n.text&&this.type=="text"&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&a._tofront(this,this.paper);return this},E.toBack=function(){if(this.removed)return this;this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper));return this},E.insertAfter=function(b){if(this.removed)return this;b.constructor==a.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper);return this},E.insertBefore=function(b){if(this.removed)return this;b.constructor==a.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper);return this},E.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;d=d.replace(r,o),+b!==0?(this.attrs.blur=b,c.filter=d+n+m+".Blur(pixelradius="+(+b||1.5)+")",c.margin=a.format("-{0}px 0 0 -{0}px",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur)},a._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");f.on=!0,c.appendChild(f),d.skew=f,d.transform(o);return d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect";return i},a._engine.ellipse=function(a,b,c,d,e){var f=a.path(),g=f.attrs;f.X=b-d,f.Y=c-e,f.W=d*2,f.H=e*2,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e});return f},a._engine.circle=function(a,b,c,d){var e=a.path(),f=e.attrs;e.X=b-d,e.Y=c-d,e.W=e.H=d*2,e.type="circle",B(e,{cx:b,cy:c,r:d});return e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0);return i},a._engine.text=function(b,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=a.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,b),l={fill:"#000",stroke:"none",font:a._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var m=F("skew");m.on=!0,h.appendChild(m),k.skew=m,k.transform(o);return k},a._engine.setSize=function(b,c){var d=this.canvas.style;this.width=b,this.height=c,b==+b&&(b+="px"),c==+c&&(c+="px"),d.width=b,d.height=c,d.clip="rect(0 "+b+" "+c+" 0)",this._viewBox&&a._engine.setViewBox.apply(this,this._viewBox);return this},a._engine.setViewBox=function(b,c,d,e,f){a.eve("raphael.setViewBox",this,this._viewBox,[b,c,d,e,f]);var h=this.width,i=this.height,j=1/g(d/h,e/i),k,l;f&&(k=i/e,l=h/d,d*k<h&&(b-=(h-d*k)/2/k),e*l<i&&(c-=(i-e*l)/2/l)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:j},this.forEach(function(a){a.transform("...")});return this};var F;a._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael)
\ No newline at end of file
--- a/web/res/js/underscore-min.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/js/underscore-min.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,30 +1,32 @@
-// Underscore.js 1.2.2
-// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore.js 1.3.3
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the MIT license.
// Portions of Underscore are inspired or borrowed from Prototype,
// Oliver Steele's Functional, and John Resig's Micro-Templating.
// For all details and documentation:
// http://documentcloud.github.com/underscore
-(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(b.isFunction(a.isEqual))return a.isEqual(c);if(b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return String(a)==String(c);case "[object Number]":return a=+a,c=+c,a!=a?c!=c:a==0?1/a==1/c:a==c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,H=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&define.amd?
-define("underscore",function(){return b}):s._=b;b.VERSION="1.2.2";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=
-d!==void 0;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),d!==void 0?a.reduceRight(c,d):a.reduceRight(c);a=(b.isArray(a)?a.slice():b.toArray(a)).reverse();return b.reduce(a,c,d,e)};b.find=b.detect=function(a,c,b){var e;
-D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});
-return e};var D=b.some=b.any=function(a,c,d){var c=c||b.identity,e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};
-b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var c=[],b;
-j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,c){var b=e(a,c);(d[b]||(d[b]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<
-f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||
-d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,
-true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);
-for(d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;
-e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=
-function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=
-null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=i.call(arguments);return function(){for(var b=i.call(arguments),d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=H||function(a){if(a!==
-Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?
-a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=l.call(arguments)=="[object Arguments]"?function(a){return l.call(a)=="[object Arguments]"}:
-function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};
-b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),function(c){I(c,b[c]=a[c])})};var J=0;b.uniqueId=function(a){var b=J++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,
-interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,
-"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e(a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},I=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);G.call(a,this._wrapped);return u(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,
-arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
+(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
+g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
+c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
+a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
+c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
+a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
+function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
+(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
+j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
+0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
+e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
+i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
+1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
+i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
+g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
+return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
+c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
+function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
+b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
+b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
+function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
+u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
+b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
+this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/AdaptivePlayer.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,33 @@
+IriSP.Widgets.AdaptivePlayer = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.AdaptivePlayer.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.AdaptivePlayer.prototype.defaults = {
+ mime_type: "video/mp4",
+ normal_player: "PopcornPlayer",
+ fallback_player: "JwpPlayer"
+}
+
+IriSP.Widgets.AdaptivePlayer.prototype.draw = function() {
+
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ var _props = [ "autostart", "video", "height", "width", "url_transform" ],
+ _opts = {},
+ _canPlayType = document.createElement('video').canPlayType(this.mime_type);
+
+ _opts.type = (_canPlayType == "maybe" || _canPlayType == "probably") ? this.normal_player : this.fallback_player;
+
+ for (var i = 0; i < _props.length; i++) {
+ if (typeof this[_props[i]] !== "undefined") {
+ _opts[_props[i]] = this[_props[i]];
+ }
+ }
+
+ this.insertSubwidget(this.$, _opts);
+
+}
\ No newline at end of file
--- a/web/res/metadataplayer/Annotation.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Annotation.css Mon Dec 10 10:47:14 2012 +0100
@@ -6,6 +6,10 @@
margin: 0;
}
+.Ldt-Annotation-Highlight {
+ background: #ffa0fc;
+}
+
.Ldt-Annotation-Widget.Ldt-Annotation-ShowTop {
border-top-style: solid;
padding-top: 1px;
@@ -23,6 +27,11 @@
font-weight: bold;
}
+.Ldt-Annotation-Description {
+ max-height: 150px;
+ overflow: auto;
+}
+
.Ldt-Annotation-Cleared {
clear: both;
}
@@ -56,12 +65,17 @@
color: #0068c4;
}
+.Ldt-Annotation-Type {
+ color: #8080A0;
+}
+
.Ldt-Annotation-Time {
color: #ff3b77
}
.Ldt-Annotation-Inner p {
font-size: 12px;
+ line-height: 16px;
}
.Ldt-Annotation-Label {
--- a/web/res/metadataplayer/Annotation.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Annotation.js Mon Dec 10 10:47:14 2012 +0100
@@ -15,26 +15,29 @@
on_site: " sur ",
tags_: "Mots-clés :",
description_: "Description :",
- excerpt_from: "Extrait de :"
+ excerpt_from: "Extrait de :",
+ untitled: "Segment sans titre"
},
en: {
watching: "I'm watching ",
on_site: " on ",
tags_: "Keywords:",
description_: "Description:",
- excerpt_from: "Excerpt from:"
+ excerpt_from: "Excerpt from:",
+ untitled: "Untitled segment"
}
}
IriSP.Widgets.Annotation.prototype.template =
- '<div class="Ldt-Annotation-Widget {{#show_top_border}}Ldt-Annotation-ShowTop{{/show_top_border}}">'
+ '{{#show_arrow}}<div class="Ldt-Annotation-Arrow"></div>{{/show_arrow}}'
+ + '<div class="Ldt-Annotation-Widget {{^show_arrow}}Ldt-Annotation-ShowTop{{/show_arrow}}">'
+ '<div class="Ldt-Annotation-Inner Ldt-Annotation-Empty{{#start_minimized}} Ldt-Annotation-Minimized{{/start_minimized}}">'
+ '<div class="Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-MaxMinButton"></div>'
- + '<div class="Ldt-Annotation-Social Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty"></div>'
- + '<h3 class="Ldt-Annotation-HiddenWhenEmpty"><span class="Ldt-Annotation-Title"></span> <span class="Ldt-Annotation-Time">'
- + '( <span class="Ldt-Annotation-Begin"></span> - <span class="Ldt-Annotation-End"></span> )</span></h3>'
- + '<h3 class="Ldt-Annotation-MashupOrigin Ldt-Annotation-HiddenWhenEmpty">{{l10n.excerpt_from}} <span class="Ldt-Annotation-MashupMedia"></span> <span class="Ldt-Annotation-Time">'
- + '( <span class="Ldt-Annotation-MashupBegin"></span> - <span class="Ldt-Annotation-MashupEnd"></span> )</span></h3>'
+ + '{{#show_social}}<div class="Ldt-Annotation-Social Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty"></div>{{/show_social}}'
+ + '<h3 class="Ldt-Annotation-HiddenWhenEmpty">{{#show_annotation_type}}<span class="Ldt-Annotation-Type"></span> » {{/show_annotation_type}}<span class="Ldt-Annotation-Title"></span> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">'
+ + '(<span class="Ldt-Annotation-Begin"></span> - <span class="Ldt-Annotation-End"></span>)</span></h3>'
+ + '<h3 class="Ldt-Annotation-MashupOrigin Ldt-Annotation-HiddenWhenEmpty">{{l10n.excerpt_from}} <span class="Ldt-Annotation-MashupMedia"></span> <span class="Ldt-Annotation-Time Ldt-Annotation-HiddenWhenMinimized">'
+ + '(<span class="Ldt-Annotation-MashupBegin"></span> - <span class="Ldt-Annotation-MashupEnd"></span>)</span></h3>'
+ '<div class="Ldt-Annotation-Cleared Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Description-Block"><div class="Ldt-Annotation-Label">{{l10n.description_}}</div>'
+ '<p class="Ldt-Annotation-Labelled Ldt-Annotation-Description"></p></div>'
+ '<div class="Ldt-Annotation-Tags-Block Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-Cleared">'
@@ -44,96 +47,140 @@
IriSP.Widgets.Annotation.prototype.defaults = {
annotation_type : "chap",
start_minimized: false,
- show_top_border : false,
- site_name : "Lignes de Temps"
+ show_arrow : true,
+ site_name : "Lignes de Temps",
+ search_on_tag_click: true,
+ show_social: true,
+ show_annotation_type: false
}
IriSP.Widgets.Annotation.prototype.draw = function() {
+
+ var _this = this,
+ currentAnnotation;
+
+ function timeupdate(_time) {
+ var _list = _this.getWidgetAnnotationsAtTime();
+ if (!_list.length) {
+ _this.$.find(".Ldt-Annotation-Inner").addClass("Ldt-Annotation-Empty");
+ if (_this.arrow) {
+ _this.arrow.moveToTime(_time);
+ }
+ _this.bounds = [ _time, _time ];
+ _this.sendBounds();
+ }
+ }
+
+ function highlightTitleAndDescription() {
+ if (!currentAnnotation) {
+ return;
+ }
+ var title = currentAnnotation.title,
+ description = currentAnnotation.description.replace(/(^\s+|\s+$)/g,'');
+ if (currentAnnotation.found) {
+ var rgxp = _this.source.getAnnotations().regexp || /^$/,
+ repl = '<span class="Ldt-Annotation-Highlight">$1</span>';
+ title = title.replace(rgxp,repl);
+ description = description.replace(rgxp,repl).replace(/[\n\r]+/gm,'<br />');
+ }
+ _this.$.find(".Ldt-Annotation-Title").html(title || "(" + _this.l10n.untitled + ")");
+ if (description) {
+ _this.$.find(".Ldt-Annotation-Description-Block").removeClass("Ldt-Annotation-EmptyBlock");
+ _this.$.find(".Ldt-Annotation-Description").html(description);
+ } else {
+ _this.$.find(".Ldt-Annotation-Description-Block").addClass("Ldt-Annotation-EmptyBlock");
+ }
+ }
+
+ function drawAnnotation(_annotation) {
+ currentAnnotation = _annotation;
+ var _url = (typeof _annotation.url !== "undefined"
+ ? _annotation.url
+ : (document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id)),
+ _text = _this.l10n.watching + _annotation.title + (_this.site_name ? _this.l10n.on_site + _this.site_name : ''),
+ _tags = _annotation.getTags(),
+ _tagblock = _this.$.find(".Ldt-Annotation-Tags");
+ _tagblock.empty();
+ if (_tags.length) {
+ _this.$.find(".Ldt-Annotation-Tags-Block").removeClass("Ldt-Annotation-EmptyBlock");
+ _tags.forEach(function(_tag) {
+ var _trimmedTitle = _tag.title.replace(/(^\s+|\s+$)/g,'');
+ if (_trimmedTitle) {
+ var _el = IriSP.jQuery('<li class="Ldt-Annotation-TagLabel"></li>').append(IriSP.jQuery('<span>').text(_trimmedTitle));
+ _el.click(function() {
+ if (_this.search_on_tag_click) {
+ _this.source.getAnnotations().search(_trimmedTitle);
+ }
+ _tag.trigger("click");
+ });
+ _tagblock.append(_el);
+ }
+ });
+ } else {
+ _this.$.find(".Ldt-Annotation-Tags-Block").addClass("Ldt-Annotation-EmptyBlock");
+ }
+ highlightTitleAndDescription();
+ if (_this.show_annotation_type) {
+ _this.$.find(".Ldt-Annotation-Type").text(_annotation.getAnnotationType().title)
+ }
+ _this.$.find(".Ldt-Annotation-Begin").text(_annotation.begin.toString());
+ _this.$.find(".Ldt-Annotation-End").text(_annotation.end.toString());
+ if (_annotation.elementType === "mashedAnnotation") {
+ _this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-isMashup");
+ _this.$.find(".Ldt-Annotation-MashupMedia").text(_annotation.getMedia().title);
+ _this.$.find(".Ldt-Annotation-MashupBegin").text(_annotation.annotation.begin.toString());
+ _this.$.find(".Ldt-Annotation-MashupEnd").text(_annotation.annotation.end.toString());
+ } else {
+ _this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-isMashup");
+ }
+ if (typeof _this.socialWidget !== "undefined") {
+ _this.socialWidget.updateUrls(_url, _text);
+ } else {
+ setTimeout(function() {
+ if (typeof _this.socialWidget !== "undefined") {
+ _this.socialWidget.updateUrls(_url, _text);
+ }
+ },800);
+ }
+ _this.$.find(".Ldt-Annotation-Inner").removeClass("Ldt-Annotation-Empty");
+ _this.bounds = [ _annotation.begin, _annotation.end ];
+ if (_this.arrow) {
+ _this.arrow.moveToTime((_annotation.begin + _annotation.end)/2);
+ }
+ _this.sendBounds();
+ }
+
this.renderTemplate();
- this.insertSubwidget(this.$.find(".Ldt-Annotation-Social"), "socialWidget", { type: "Social" });
- this.bindPopcorn("timeupdate","onTimeupdate");
- this.bindPopcorn("IriSP.Annotation.hide","hide");
- this.bindPopcorn("IriSP.Annotation.show","show");
- this.bindPopcorn("IriSP.Annotation.minimize","minimize");
- this.bindPopcorn("IriSP.Annotation.maximize","maximize");
- this.bindPopcorn("IriSP.Annotation.getBounds","sendBounds");
+
+ if (this.show_social) {
+ this.insertSubwidget(this.$.find(".Ldt-Annotation-Social"), { type: "Social" }, "socialWidget");
+ }
+
+ this.insertSubwidget(this.$.find(".Ldt-Annotation-Arrow"), { type: "Arrow" }, "arrow");
+ this.onMediaEvent("timeupdate",timeupdate);
+ this.onMdpEvent("Annotation.hide","hide");
+ this.onMdpEvent("Annotation.show","show");
+ this.onMdpEvent("Annotation.minimize","minimize");
+ this.onMdpEvent("Annotation.maximize","maximize");
+ this.onMdpEvent("Annotation.getBounds","sendBounds");
this.$.find(".Ldt-Annotation-MaxMinButton").click(this.functionWrapper("toggleSize"));
- this.onTimeupdate();
-}
-
-IriSP.Widgets.Annotation.prototype.onTimeupdate = function() {
- var _time = Math.floor(this.player.popcorn.currentTime() * 1000),
- _list = this.getWidgetAnnotationsAtTime();
- if (_list.length) {
- if (_list[0].id !== this.lastAnnotation) {
- this.drawAnnotation(_list[0]);
- this.bounds = [ _list[0].begin.valueOf(), _list[0].end.valueOf() ];
- }
- this.player.popcorn.trigger("IriSP.Arrow.updatePosition",{widget: this.type, time: ( _list[0].begin + _list[0].end ) / 2});
- }
- else {
- this.lastAnnotation = false;
- this.$.find(".Ldt-Annotation-Inner").addClass("Ldt-Annotation-Empty");
- this.player.popcorn.trigger("IriSP.Arrow.updatePosition",{widget: this.type, time: _time});
- this.bounds = [ _time, _time ];
- }
- this.sendBounds();
+ this.getWidgetAnnotations().forEach(function(_a) {
+ _a.on("enter", function() {
+ drawAnnotation(_a)
+ });
+ });
+ this.source.getAnnotations().on("found", highlightTitleAndDescription);
+ this.source.getAnnotations().on("not-found", highlightTitleAndDescription);
+ this.source.getAnnotations().on("search-cleared", highlightTitleAndDescription);
}
IriSP.Widgets.Annotation.prototype.sendBounds = function() {
- this.player.popcorn.trigger("IriSP.Annotation.boundsChanged",this.bounds);
+ this.player.trigger("Annotation.boundsChanged",this.bounds);
}
IriSP.Widgets.Annotation.prototype.drawAnnotation = function(_annotation) {
this.lastAnnotation = _annotation.id;
- var _url = (typeof _annotation.url !== "undefined"
- ? _annotation.url
- : (document.location.href.replace(/#.*$/,'') + '#id=' + _annotation.id));
- var _text = this.l10n.watching + _annotation.title + (this.site_name ? this.l10n.on_site + this.site_name : '');
- var _tags = _annotation.getTagTexts();
- if (_tags.length) {
- var _html = IriSP._(_tags).map(function(_tag) {
- return '<li class="Ldt-Annotation-TagLabel"><span>' + _tag + '</span></li>';
- }).join("");
- this.$.find(".Ldt-Annotation-Tags").html(_html);
- this.$.find(".Ldt-Annotation-Tags-Block").removeClass("Ldt-Annotation-EmptyBlock");
-
- /* Correct the empty tag bug */
- this.$.find('.Ldt-Annotation-TagLabel').each(function() {
- var _el = IriSP.jQuery(this);
- if (!_el.text().replace(/(^\s+|\s+$)/g,'')) {
- _el.detach();
- }
- });
-
- this.$.find('.Ldt-Annotation-TagLabel').click(function() {
- _this.player.popcorn.trigger("IriSP.search.triggeredSearch", IriSP.jQuery(this).text().replace(/(^\s+|\s+$)/g,''));
- });
- } else {
- this.$.find(".Ldt-Annotation-Tags-Block").addClass("Ldt-Annotation-EmptyBlock");
- }
- this.$.find(".Ldt-Annotation-Title").html(_annotation.title);
- var _desc = _annotation.description.replace(/(^\s+|\s+$)/g,'');
- if (_desc) {
- this.$.find(".Ldt-Annotation-Description-Block").removeClass("Ldt-Annotation-EmptyBlock");
- this.$.find(".Ldt-Annotation-Description").html(_desc);
- } else {
- this.$.find(".Ldt-Annotation-Description-Block").addClass("Ldt-Annotation-EmptyBlock");
- }
- this.$.find(".Ldt-Annotation-Begin").html(_annotation.begin.toString());
- this.$.find(".Ldt-Annotation-End").html(_annotation.end.toString());
- if (_annotation.elementType === "mashedAnnotation") {
- this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-isMashup");
- this.$.find(".Ldt-Annotation-MashupMedia").html(_annotation.getMedia().title);
- this.$.find(".Ldt-Annotation-MashupBegin").html(_annotation.annotation.begin.toString());
- this.$.find(".Ldt-Annotation-MashupEnd").html(_annotation.annotation.end.toString());
- } else {
- this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-isMashup");
- }
- if (typeof this.socialWidget !== "undefined") {
- this.socialWidget.updateUrls(_url, _text);
- }
- this.$.find(".Ldt-Annotation-Inner").removeClass("Ldt-Annotation-Empty");
+
}
IriSP.Widgets.Annotation.prototype.hide = function() {
--- a/web/res/metadataplayer/AnnotationsList.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/AnnotationsList.css Mon Dec 10 10:47:14 2012 +0100
@@ -1,10 +1,18 @@
/* AnnotationsListWidget */
.Ldt-AnnotationsListWidget {
+ border: none; margin: 0; padding: 0;
+ overflow: auto;
+ max-height: 480px;
}
.Ldt-AnnotationsListWidget a {
text-decoration: none;
}
+
+.Ldt-AnnotationsList-Audio {
+ width: 1px; height: 1px;
+}
+
ul.Ldt-AnnotationsList-ul {
list-style: none;
padding: 2px;
@@ -17,12 +25,11 @@
padding: 2px 0;
min-height: 60px;
}
-.Ldt-AnnotationsList-li:hover {
- background: url(img/pinstripe-grey.png) !important;
+.Ldt-AnnotationsList-li.selected {
+ background-image: url(img/pinstripe-grey.png);
}
.Ldt-AnnotationsList-highlight {
- background: #F7268E;
- color: #ffffff;
+ background: #FFA0FC;
}
.Ldt-AnnotationsList-ThumbContainer {
float: left;
@@ -46,7 +53,7 @@
}
h3.Ldt-AnnotationsList-Title {
color: #0068c4;
- font-size: 14px;
+ font-size: 13px;
margin: 2px 2px 0 82px;
font-weight: bold;
}
@@ -81,4 +88,14 @@
.Ldt-AnnotationsList-Tag-Li:hover span {
background-position: right -23px;
+}
+
+.Ldt-AnnotationsList-Play {
+ width: 125px; height: 20px; margin: 2px 0 2px 82px; text-align: center;
+ padding: 3px 5px 0 20px; font-size: 12px; cursor: pointer;
+ background: url(img/voiceannotation.png); color: #333333;
+}
+
+.Ldt-AnnotationsList-Play:hover {
+ background-position: 0 bottom;
}
\ No newline at end of file
--- a/web/res/metadataplayer/AnnotationsList.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/AnnotationsList.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,12 +1,12 @@
IriSP.Widgets.AnnotationsList = function(player, config) {
IriSP.Widgets.Widget.call(this, player, config);
- this.searchString = false;
this.lastIds = [];
var _this = this;
this.throttledRefresh = IriSP._.throttle(function() {
_this.refresh(false);
- }, 1500);
- this.mashupMode = (this.source.currentMedia.elementType === "mashup");
+ }, 800);
+ this.searchString = false;
+ this.lastSearch = false;
};
IriSP.Widgets.AnnotationsList.prototype = new IriSP.Widgets.Widget();
@@ -18,7 +18,7 @@
ajax_url : false,
/* number of milliseconds before/after the current timecode when calling the segment API
*/
- ajax_granularity : 300000,
+ ajax_granularity : 600000,
default_thumbnail : "",
/* URL when the annotation is not in the current project,
* e.g. http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}
@@ -26,8 +26,9 @@
foreign_url : "",
annotation_type : false,
refresh_interval : 0,
- limit_count : 10,
+ limit_count : 20,
newest_first : false,
+ show_audio: true,
polemics : [{
keyword: "++",
background_color: "#c9ecc6"
@@ -43,11 +44,26 @@
}]
};
+IriSP.Widgets.AnnotationsList.prototype.messages = {
+ en: {
+ voice_annotation: "Voice Annotation",
+ now_playing: "Now playing..."
+ },
+ fr: {
+ voice_annotation: "Annotation Vocale",
+ now_playing: "Lecture en cours..."
+ }
+}
+
IriSP.Widgets.AnnotationsList.prototype.template =
'<div class="Ldt-AnnotationsListWidget">'
+ + '{{#show_audio}}<div class="Ldt-AnnotationsList-Audio"></div>{{/show_audio}}'
+ '<ul class="Ldt-AnnotationsList-ul">'
- + '{{#annotations}}'
- + '<li class="Ldt-AnnotationsList-li Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}" style="{{specific_style}}">'
+ + '</ul>'
+ + '</div>';
+
+IriSP.Widgets.AnnotationsList.prototype.annotationTemplate =
+ '<li class="Ldt-AnnotationsList-li Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}" style="{{specific_style}}">'
+ '<div class="Ldt-AnnotationsList-ThumbContainer">'
+ '<a href="{{url}}">'
+ '<img class="Ldt-AnnotationsList-Thumbnail" src="{{thumbnail}}" />'
@@ -69,33 +85,15 @@
+ '{{/tags}}'
+ '</ul>'
+ '{{/tags.length}}'
- + '</li>'
- + '{{/annotations}}'
- + '</ul>'
- + '</div>';
-
-IriSP.Widgets.AnnotationsList.prototype.onSearch = function(searchString) {
- this.searchString = typeof searchString !== "undefined" ? searchString : '';
- var _n = this.refresh(true);
- if (this.searchString) {
- if (_n) {
- this.player.popcorn.trigger("IriSP.search.matchFound");
- } else {
- this.player.popcorn.trigger("IriSP.search.noMatchFound");
- }
- }
-}
+ + '{{#audio}}<div class="Ldt-AnnotationsList-Play" data-audio={{audio}}>{{l10n.voice_annotation}}</div>{{/audio}}'
+ + '</li>';
//obj.url = this.project_url + "/" + media + "/" + annotations[i].meta.project + "/" + annotations[i].meta["id-ref"] + '#id=' + annotations[i].id;
IriSP.Widgets.AnnotationsList.prototype.ajaxSource = function() {
- var _currentTime = this.player.popcorn.currentTime(),
- _duration = this.source.getDuration();
- if (typeof _currentTime == "undefined") {
- _currentTime = 0;
- }
+ var _currentTime = this.media.getCurrentTime(),
+ _duration = this.media.duration;
this.lastAjaxQuery = _currentTime;
- _currentTime = Math.floor(1000 * _currentTime);
var _url = Mustache.to_html(this.ajax_url, {
media : this.source.currentMedia.id,
begin : Math.max(0, _currentTime - this.ajax_granularity),
@@ -107,11 +105,8 @@
}
IriSP.Widgets.AnnotationsList.prototype.ajaxMashup = function() {
- var _currentTime = this.player.popcorn.currentTime();
- if (typeof _currentTime == "undefined") {
- _currentTime = 0;
- }
- var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime * 1000);
+ var _currentTime = this.media.getCurrentTime();
+ var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime);
if (typeof _currentAnnotation !== "undefined" && _currentAnnotation.id !== this.lastMashupAnnotation) {
this.lastMashupAnnotation = _currentAnnotation.id;
var _currentMedia = _currentAnnotation.getMedia(),
@@ -132,27 +127,25 @@
return 0;
}
var _this = this,
- _currentTime = this.player.popcorn.currentTime();
- if (typeof _currentTime == "undefined") {
- _currentTime = 0;
- }
+ _currentTime = this.media.getCurrentTime();
var _list = this.annotation_type ? this.currentSource.getAnnotationsByTypeTitle(this.annotation_type) : this.currentSource.getAnnotations();
if (this.mashupMode) {
- var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime * 1000);
+ var _currentAnnotation = this.source.currentMedia.getAnnotationAtTime(_currentTime);
if (typeof _currentAnnotation !== "undefined") {
- _currentTime = _currentTime - _currentAnnotation.begin.getSeconds() + _currentAnnotation.annotation.begin.getSeconds();
+ _currentTime = _currentTime - _currentAnnotation.begin + _currentAnnotation.annotation.begin;
var _mediaId = _currentAnnotation.getMedia().id;
_list = _list.filter(function(_annotation) {
return _annotation.getMedia().id === _mediaId;
});
}
}
- if (this.searchString) {
- _list = _list.searchByTextFields(this.searchString);
- }
+ _list = _list.filter(function(_annotation) {
+ return _annotation.found !== false;
+ });
if (this.limit_count) {
+ /* Get the n annotations closest to current timecode */
_list = _list.sortBy(function(_annotation) {
- return Math.abs(_annotation.begin.getSeconds() - _currentTime);
+ return Math.abs((_annotation.begin + _annotation.end) / 2 - _currentTime);
}).slice(0, this.limit_count)
}
if (this.newest_first) {
@@ -167,82 +160,114 @@
var _ids = _list.idIndex;
- if (_forceRedraw || !IriSP._.isEqual(_ids, this.lastIds)) {
+ if (_forceRedraw || !IriSP._.isEqual(_ids, this.lastIds) || this.searchString !== this.lastSearch) {
/* This part only gets executed if the list needs updating */
+ this.lastSearch = this.searchString;
this.lastIds = _ids;
- var _data = _list.map(function(_annotation) {
- var _url = (
- ( typeof _annotation.url !== "undefined" && _annotation.url)
- ? _annotation.url
- : (
- ( typeof _this.source.projectId !== "undefined" && typeof _annotation.project !== "undefined" && _annotation.project && _this.source.projectId !== _annotation.project )
- ? Mustache.to_html(
- _this.foreign_url,
- {
- project : _annotation.project,
- media : _annotation.media.id,
- annotation : _annotation.id,
- annotationType : _annotation.annotationType.id
- }
- )
- : '#id=' + _annotation.id
- )
- );
- var _title = (_annotation.title || "").replace(_annotation.description,''),
- _description = _annotation.description;
- if (!_annotation.title) {
- _title = _annotation.creator;
- }
- if (!_annotation.description && _annotation.creator) {
- _description = _annotation.title;
- _title = _annotation.creator;
- }
- var _bgcolor;
- IriSP._(_this.polemics).each(function(_polemic) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(_polemic.keyword, true);
- if (_rgxp.test(_title + " " + _description)) {
- _bgcolor = _polemic.background_color;
+ this.list_$.html("");
+ _list.forEach(function(_annotation) {
+ var _url = (
+ ( typeof _annotation.url !== "undefined" && _annotation.url)
+ ? _annotation.url
+ : (
+ ( typeof _this.source.projectId !== "undefined" && typeof _annotation.project !== "undefined" && _annotation.project && _this.source.projectId !== _annotation.project )
+ ? Mustache.to_html(
+ _this.foreign_url,
+ {
+ project : _annotation.project,
+ media : _annotation.media.id,
+ annotation : _annotation.id,
+ annotationType : _annotation.annotationType.id
}
- });
- var _res = {
- id : _annotation.id,
- media_id : _annotation.getMedia().id,
- title : _title,
- description : _description,
- begin : _annotation.begin.toString(),
- end : _annotation.end.toString(),
- thumbnail : typeof _annotation.thumbnail !== "undefined" && _annotation.thumbnail ? _annotation.thumbnail : _this.default_thumbnail,
- url : _url,
- tags : _annotation.getTagTexts(),
- specific_style : (typeof _bgcolor !== "undefined" ? "background: " + _bgcolor : "")
- }
- return _res;
- }),
- _html = Mustache.to_html(
- this.template,
- {
- annotations : _data
- });
-
- this.$.html(_html);
+ )
+ : '#id=' + _annotation.id
+ )
+ );
+ var _title = (_annotation.title || "").replace(_annotation.description,''),
+ _description = _annotation.description;
+ if (!_annotation.title) {
+ _title = _annotation.creator;
+ }
+ if (!_annotation.description && _annotation.creator) {
+ _description = _annotation.title;
+ _title = _annotation.creator;
+ }
+ var _bgcolor;
+ IriSP._(_this.polemics).each(function(_polemic) {
+ var _rgxp = IriSP.Model.regexpFromTextOrArray(_polemic.keyword, true);
+ if (_rgxp.test(_title + " " + _description)) {
+ _bgcolor = _polemic.background_color;
+ }
+ });
+ var _data = {
+ id : _annotation.id,
+ media_id : _annotation.getMedia().id,
+ title : _title,
+ description : _description,
+ begin : _annotation.begin.toString(),
+ end : _annotation.end.toString(),
+ thumbnail : typeof _annotation.thumbnail !== "undefined" && _annotation.thumbnail ? _annotation.thumbnail : _this.default_thumbnail,
+ url : _url,
+ tags : _annotation.getTagTexts(),
+ specific_style : (typeof _bgcolor !== "undefined" ? "background-color: " + _bgcolor : ""),
+ audio : (_this.show_audio && _annotation.audio && _annotation.audio.href && _annotation.audio.href != "null" ? _annotation.audio.href : undefined),
+ l10n: _this.l10n
+ };
+ var _html = Mustache.to_html(_this.annotationTemplate, _data),
+ _el = IriSP.jQuery(_html),
+ _onselect = function() {
+ _this.annotations_$.removeClass("selected");
+ _el.addClass("selected");
+ },
+ _onunselect = function() {
+ _this.annotations_$.removeClass("selected");
+ };
+ _el.mouseover(function() {
+ _annotation.trigger("select");
+ })
+ .mouseout(function() {
+ _annotation.trigger("unselect");
+ })
+ .appendTo(_this.list_$);
+ _el.on("remove", function() {
+ _annotation.off("select", _onselect);
+ _annotation.off("unselect", _onunselect);
+ });
+ _annotation.on("select", _onselect);
+ _annotation.on("unselect", _onunselect);
+ });
+
+ this.annotations_$ = this.$.find('.Ldt-AnnotationsList-li');
/* Correct the empty tag bug */
this.$.find('.Ldt-AnnotationsList-Tag-Li').each(function() {
var _el = IriSP.jQuery(this);
if (!_el.text().replace(/(^\s+|\s+$)/g,'')) {
- _el.detach();
+ _el.remove();
}
});
this.$.find('.Ldt-AnnotationsList-Tag-Li').click(function() {
- _this.player.popcorn.trigger("IriSP.search.triggeredSearch", IriSP.jQuery(this).text().replace(/(^\s+|\s+$)/g,''));
- })
+ _this.source.getAnnotations().search(IriSP.jQuery(this).text().replace(/(^\s+|\s+$)/g,''));
+ });
- if(this.searchString) {
- var _searchRe = IriSP.Model.regexpFromTextOrArray(this.searchString);
+ this.$.find(".Ldt-AnnotationsList-Play").click(function() {
+ var _el = IriSP.jQuery(this),
+ _audiofile = _el.attr("data-audio").replace(_this.rtmp_streamer,"");
+ _el.text(_this.l10n.now_playing);
+ _this.jwplayer.load({
+ file: _audiofile,
+ streamer: _this.rtmp_streamer
+ });
+ _this.jwplayer.play(true);
+ _this.media.pause();
+ _this.jw_paused_media = true;
+ });
+
+ if (this.source.getAnnotations().searching) {
this.$.find(".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description").each(function() {
var _$ = IriSP.jQuery(this);
- _$.html(_$.text().replace(/(^\s+|\s+$)/g,'').replace(_searchRe, '<span class="Ldt-AnnotationsList-highlight">$1</span>'))
+ _$.html(_$.text().replace(/(^\s+|\s+$)/g,'').replace(_this.source.getAnnotations().regexp, '<span class="Ldt-AnnotationsList-highlight">$1</span>'))
})
}
}
@@ -251,7 +276,7 @@
if (this.mashupMode) {
this.ajaxMashup();
} else {
- if (Math.abs(_currentTime - this.lastAjaxQuery) > (this.ajax_granularity / 2000)) {
+ if (Math.abs(_currentTime - this.lastAjaxQuery) > (this.ajax_granularity)) {
this.ajaxSource();
}
}
@@ -261,13 +286,71 @@
IriSP.Widgets.AnnotationsList.prototype.draw = function() {
- this.bindPopcorn("IriSP.search", "onSearch");
- this.bindPopcorn("IriSP.search.closed", "onSearch");
- this.bindPopcorn("IriSP.search.cleared", "onSearch");
- this.bindPopcorn("IriSP.AnnotationsList.refresh","refresh");
+ this.mashupMode = (this.media.elementType === "mashup");
+
+ this.renderTemplate();
var _this = this;
+ if (this.show_audio) {
+ var _tmpId = "jwplayer-" + IriSP.Model.getUID();
+ this.$.find(".Ldt-AnnotationsList-Audio").attr("id", _tmpId);
+ this.jwplayer = jwplayer(_tmpId);
+ this.jwplayer.setup({
+ flashplayer: IriSP.getLib("jwPlayerSWF"),
+ width: 1,
+ height: 1,
+ provider: "rtmp",
+ events: {
+ onIdle: function() {
+ if (_this.jw_paused_media) {
+ _this.jw_paused_media = false;
+ _this.media.play();
+ }
+ _this.$.find(".Ldt-AnnotationsList-Play").text(_this.l10n.voice_annotation)
+ }
+ }
+ });
+ this.jw_paused_media = false;
+ }
+
+ this.list_$ = this.$.find(".Ldt-AnnotationsList-ul");
+
+
+ this.source.getAnnotations().on("search", function(_text) {
+ _this.searchString = _text;
+ if (_this.source !== _this.currentSource) {
+ _this.currentSource.getAnnotations().search(_text);
+ _this.throttledRefresh();
+ }
+ });
+ this.source.getAnnotations().on("found", function() {
+ _this.throttledRefresh();
+ });
+ this.source.getAnnotations().on("not-found", function() {
+ _this.throttledRefresh();
+ });
+ this.source.getAnnotations().on("clear-search", function() {
+ _this.searchString = false;
+ if (_this.source !== _this.currentSource) {
+ _this.currentSource.getAnnotations().trigger("clear-search");
+ }
+ });
+ this.source.getAnnotations().on("search-cleared", function() {
+ _this.throttledRefresh();
+ });
+
+ this.onMdpEvent("AnnotationsList.refresh", function() {
+ if (_this.ajax_url) {
+ if (_this.mashupMode) {
+ _this.ajaxMashup();
+ } else {
+ _this.ajaxSource();
+ }
+ }
+ _this.throttledRefresh();
+ });
+
if (this.ajax_url) {
if (this.mashupMode) {
this.ajaxMashup();
@@ -284,14 +367,14 @@
}, this.refresh_interval);
}
+ this.onMdpEvent("createAnnotationWidget.addedAnnotation");
var _events = [
- "IriSP.createAnnotationWidget.addedAnnotation",
"timeupdate",
"seeked",
"loadedmetadata"
];
for (var _i = 0; _i < _events.length; _i++) {
- this.player.popcorn.listen(_events[_i], this.throttledRefresh);
+ this.onMediaEvent(_events[_i], this.throttledRefresh);
}
this.throttledRefresh();
--- a/web/res/metadataplayer/Arrow.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Arrow.js Mon Dec 10 10:47:14 2012 +0100
@@ -6,25 +6,25 @@
IriSP.Widgets.Arrow.prototype = new IriSP.Widgets.Widget();
IriSP.Widgets.Arrow.prototype.defaults = {
- arrow_height : 16,
- arrow_width : 24,
+ arrow_height : 12,
+ arrow_width : 20,
base_height : 0,
base_curve : 0,
fill_url: IriSP.widgetsDir + '/img/pinstripe.png',
fill_color: "#ffffff", //Gradients can be used, e.g. "90-#000-#fff" for vertical white-to-black
stroke_color: "#b7b7b7",
stroke_width: 1.5,
- animation_speed: 20,
- pilot_widget: "Annotation"
+ animation_speed: 20
}
IriSP.Widgets.Arrow.prototype.draw = function() {
this.height = this.arrow_height + this.base_height;
this.$.addClass("Ldt-Arrow").css({
- height: this.height + "px",
- "margin-top": "1px"
+ height: (1+this.height) + "px",
+ "margin-top": "1px",
+ overflow: "hidden"
});
- this.paper = new Raphael(this.container, this.width, this.height );
+ this.paper = new Raphael(this.container, this.width, 1+this.height );
window.myArrow = this;
this.svgArrow = this.paper.path('M0,' + this.height + 'L' + this.width + ',' + this.height);
this.svgArrow.attr({
@@ -32,14 +32,11 @@
"stroke-width": this.stroke_width,
fill: this.fill_url ? ( 'url(' + this.fill_url + ')' ) : this.fill_color
});
- this.moveTo(0);
- this.bindPopcorn("IriSP.Arrow.updatePosition","onUpdatePosition");
- this.bindPopcorn("IriSP.Arrow.takeover","onTakeover");
- this.bindPopcorn("IriSP.Arrow.release","onRelease");
+ this.moveToX(0);
}
IriSP.Widgets.Arrow.prototype.drawAt = function(_x) {
- _x = Math.floor(Math.max(0, Math.min(_x, this.width)));
+ _x = Math.max(0, Math.min(_x, this.width));
var _d = 'M0,' + this.height
+ 'L0,' + Math.min( this.height, this.arrow_height + this.base_curve)
+ 'Q0,' + this.arrow_height
@@ -58,8 +55,8 @@
});
}
-IriSP.Widgets.Arrow.prototype.moveTo = function(_x) {
- this.targetX = Math.floor(Math.max(0, Math.min(_x, this.width)));
+IriSP.Widgets.Arrow.prototype.moveToX = function(_x) {
+ this.targetX = Math.max(0, Math.min(_x, this.width));
if (typeof this.animInterval === "undefined") {
this.animInterval = window.setInterval(
this.functionWrapper("increment"),
@@ -69,6 +66,10 @@
this.increment();
}
+IriSP.Widgets.Arrow.prototype.moveToTime = function(_t) {
+ this.moveToX(this.width * _t / this.media.duration);
+}
+
IriSP.Widgets.Arrow.prototype.increment = function() {
if (typeof this.currentX === "undefined") {
this.currentX = this.targetX;
@@ -85,21 +86,3 @@
}
this.drawAt(this.currentX);
}
-
-IriSP.Widgets.Arrow.prototype.onUpdatePosition = function(_param) {
- if (_param.widget === this.current_pilot_widget) {
- if (typeof _param.x !== "undefined") {
- this.moveTo(_param.x);
- } else {
- this.moveTo(this.width * _param.time / this.source.getDuration());
- }
- }
-}
-
-IriSP.Widgets.Arrow.prototype.onTakeover = function(_widget) {
- this.current_pilot_widget = _widget;
-}
-
-IriSP.Widgets.Arrow.prototype.onRelease = function(_widget) {
- this.current_pilot_widget = this.pilot_widget;
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/AutoPlayer.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,76 @@
+IriSP.Widgets.AutoPlayer = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.AutoPlayer.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.AutoPlayer.prototype.defaults = {
+ default_type: "JwpPlayer"
+}
+
+IriSP.Widgets.AutoPlayer.prototype.draw = function() {
+
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ var _props = [ "live", "provider", "autostart", "streamer", "video", "height", "width", "url_transform" ],
+ _opts = {},
+ _types = [
+ {
+ regexp: /^rtmp:\/\//,
+ type: "JwpPlayer"
+ },
+ {
+ regexp: /\.(mp4|m4v)$/,
+ type: "AdaptivePlayer"
+ },
+ {
+ regexp: /\.(ogg|ogv|webm)$/,
+ type: "PopcornPlayer"
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?youtube\.com/,
+ type: "PopcornPlayer"
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?vimeo\.com/,
+ type: "PopcornPlayer"
+ },
+ {
+ regexp: /^(https?:\/\/)?(www\.)?dailymotion\.com/,
+ type: "DailymotionPlayer"
+ }
+ ],
+ _rtmprgx = /^rtmp:\/\//;
+
+ for (var i = 0; i < _types.length; i++) {
+ if (_types[i].regexp.test(this.video)) {
+ _opts.type = _types[i].type;
+ break;
+ }
+ }
+
+ if (typeof _opts.type === "undefined") {
+ _opts.type = this.default_type
+ }
+
+ if (_opts.type === "AdaptivePlayer") {
+ var _canPlayType = document.createElement('video').canPlayType("video/mp4");
+ _opts.type = (_canPlayType == "maybe" || _canPlayType == "probably") ? "PopcornPlayer" : "JwpPlayer";
+ }
+
+ if (_rtmprgx.test(this.video)) {
+ _opts.provider = "rtmp";
+ _opts.live = true;
+ }
+
+ for (var i = 0; i < _props.length; i++) {
+ if (typeof this[_props[i]] !== "undefined") {
+ _opts[_props[i]] = this[_props[i]];
+ }
+ }
+
+ this.insertSubwidget(this.$, _opts);
+
+}
\ No newline at end of file
--- a/web/res/metadataplayer/Controller.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Controller.css Mon Dec 10 10:47:14 2012 +0100
@@ -9,7 +9,7 @@
}
.Ldt-Ctrl-Left {
- float:left;
+ float:left; width: 300px;
}
.Ldt-Ctrl-Right {
@@ -82,13 +82,12 @@
}
.Ldt-Ctrl-Search {
- display: none;
- width: 165px;
- height: 25px;
- border: 1px;
- border-color: #CFCFCF;
- float: left;
- text-align: center;
+ width: 0; float: left; overflow: hidden;
+}
+
+input.Ldt-Ctrl-SearchInput {
+ width: 145px; height: 13px; margin: 2px; padding: 3px;
+ border: 1px solid #8080a0; border-radius: 3px; font-size: 13px;
}
.Ldt-Ctrl-Time {
--- a/web/res/metadataplayer/Controller.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Controller.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,16 +1,16 @@
/* Displays Play and Pause buttons, Search Button and Form, Volume Control */
IriSP.Widgets.Controller = function(player, config) {
- IriSP.Widgets.Widget.call(this, player, config);
-
- this._searchLastValue = "";
+ IriSP.Widgets.Widget.call(this, player, config);
+ this.lastSearchValue = "";
};
IriSP.Widgets.Controller.prototype = new IriSP.Widgets.Widget();
IriSP.Widgets.Controller.prototype.defaults = {
disable_annotate_btn: false,
- disable_search_btn: false
+ disable_search_btn: false,
+ disable_ctrl_f: false
}
IriSP.Widgets.Controller.prototype.template =
@@ -56,7 +56,7 @@
annotate: "Annotate",
search: "Search",
elapsed_time: "Elapsed time",
- total_time: "Total time",
+ total_time: "Total duration",
volume: "Volume",
volume_control: "Volume control"
},
@@ -69,7 +69,7 @@
unmute: "Activer le son",
annotate: "Annoter",
search: "Rechercher",
- elapsed_time: "Durée écoulée",
+ elapsed_time: "Temps écoulé",
total_time: "Durée totale",
volume: "Niveau sonore",
volume_control: "Réglage du niveau sonore"
@@ -87,25 +87,21 @@
this.$volumeBar = this.$.find(".Ldt-Ctrl-Volume-Bar");
// handle events
- this.bindPopcorn("play","playButtonUpdater");
- this.bindPopcorn("pause","playButtonUpdater");
- this.bindPopcorn("volumechange","volumeUpdater");
- this.bindPopcorn("timeupdate","timeDisplayUpdater");
- this.bindPopcorn("loadedmetadata","timeDisplayUpdater");
- this.bindPopcorn("loadedmetadata","volumeUpdater");
- this.bindPopcorn("IriSP.search.matchFound","searchMatch");
- this.bindPopcorn("IriSP.search.noMatchFound","searchNoMatch");
- this.bindPopcorn("IriSP.search.triggeredSearch","triggeredSearch");
+ this.onMediaEvent("play","playButtonUpdater");
+ this.onMediaEvent("pause","playButtonUpdater");
+ this.onMediaEvent("volumechange","volumeUpdater");
+ this.onMediaEvent("timeupdate","timeDisplayUpdater");
+ this.onMediaEvent("loadedmetadata","volumeUpdater");
// handle clicks
this.$playButton.click(this.functionWrapper("playHandler"));
this.$.find(".Ldt-Ctrl-Annotate").click(function() {
- _this.player.popcorn.trigger("IriSP.CreateAnnotation.toggle");
+ _this.player.trigger("CreateAnnotation.toggle");
});
this.$.find(".Ldt-Ctrl-SearchBtn").click(this.functionWrapper("searchButtonHandler"));
- this.$searchInput.keyup(this.functionWrapper("searchHandler") );
+ this.$searchInput.keyup(this.functionWrapper("searchHandler"));
var _volctrl = this.$.find(".Ldt-Ctrl-Volume-Control");
this.$.find('.Ldt-Ctrl-Sound')
@@ -121,13 +117,28 @@
}).mouseout(function() {
_volctrl.hide();
});
-
+
+ // Handle CTRL-F
+ if (!this.disable_ctrl_f) {
+ var _fKey = "F".charCodeAt(0),
+ _lastCtrlFTime = 0;
+ IriSP.jQuery(document).keydown(function(_event) {
+ if (_event.keyCode === _fKey && (_event.ctrlKey || _event.metaKey)) {
+ var _time = IriSP.jQuery.now();
+ if (_time - _lastCtrlFTime > 2000) {
+ _this.searchButtonHandler();
+ }
+ _lastCtrlFTime = _time;
+ return false;
+ }
+ });
+ }
// Allow Volume Cursor Dragging
this.$volumeBar.slider({
slide: function(event, ui) {
_this.$volumeBar.attr("title",_this.l10n.volume+': ' + ui.value + '%');
- _this.player.popcorn.volume(ui.value / 100);
+ _this.media.setVolume(ui.value / 100);
},
stop: this.functionWrapper("volumeUpdater")
});
@@ -135,33 +146,38 @@
// trigger an IriSP.Player.MouseOver to the widgets that are interested (i.e : sliderWidget)
this.$.hover(
function() {
- _this.player.popcorn.trigger("IriSP.Player.MouseOver");
+ _this.player.trigger("Player.MouseOver");
},
function() {
- _this.player.popcorn.trigger("IriSP.Player.MouseOut");
+ _this.player.trigger("Player.MouseOut");
});
- /* some players - including jwplayer - save the state of the mute button between sessions */
-
- window.setTimeout(this.functionWrapper("volumeUpdater"), 1000);
+
+ this.timeDisplayUpdater(new IriSP.Model.Time(0));
+
+ var annotations = this.source.getAnnotations();
+ annotations.on("search", function(_text) {
+ _this.$searchInput.val(_text);
+ _this.showSearchBlock();
+ });
+ annotations.on("found", function(_text) {
+ _this.$searchInput.css('background-color','#e1ffe1');
+ });
+ annotations.on("not-found", function(_text) {
+ _this.$searchInput.css('background-color', "#d62e3a");
+ });
+ annotations.on("search-cleared", function() {
+ _this.hideSearchBlock();
+ });
};
/* Update the elasped time div */
-IriSP.Widgets.Controller.prototype.timeDisplayUpdater = function() {
- var _curTime = this.player.popcorn.roundTime();
- if (typeof this._previousSecond !== "undefined" && _curTime === this._previousSecond) {
- return;
- }
+IriSP.Widgets.Controller.prototype.timeDisplayUpdater = function(_time) {
// we get it at each call because it may change.
- var _totalTime = this.source.getDuration(),
- _elapsedTime = new IriSP.Model.Time();
-
- _elapsedTime.setSeconds(_curTime);
-
- this.$.find(".Ldt-Ctrl-Time-Elapsed").html(_elapsedTime.toString());
+ var _totalTime = this.media.duration;
+ this.$.find(".Ldt-Ctrl-Time-Elapsed").html(_time.toString());
this.$.find(".Ldt-Ctrl-Time-Total").html(_totalTime.toString());
- this._previousSecond = _curTime;
};
/* update the icon of the button - separate function from playHandler
@@ -169,10 +185,7 @@
the jwplayer window) we have to change the icon without playing/pausing
*/
IriSP.Widgets.Controller.prototype.playButtonUpdater = function() {
-
- var status = this.player.popcorn.media.paused;
-
- if (status) {
+ if (this.media.getPaused()) {
/* the background sprite is changed by adding/removing the correct classes */
this.$playButton
.attr("title", this.l10n.play)
@@ -188,23 +201,20 @@
IriSP.Widgets.Controller.prototype.playHandler = function() {
-
- var status = this.player.popcorn.media.paused;
-
- if (status) {
- this.player.popcorn.play();
+ if (this.media.getPaused()) {
+ this.media.play();
} else {
- this.player.popcorn.pause();
+ this.media.pause();
}
};
IriSP.Widgets.Controller.prototype.muteHandler = function() {
- this.player.popcorn.muted(!this.player.popcorn.muted());
+ this.media.setMuted(!this.media.getMuted());
};
IriSP.Widgets.Controller.prototype.volumeUpdater = function() {
- var _muted = this.player.popcorn.muted(),
- _vol = this.player.popcorn.volume();
+ var _muted = this.media.getMuted(),
+ _vol = this.media.getVolume();
if (_vol === false) {
_vol = .5;
}
@@ -221,37 +231,23 @@
};
IriSP.Widgets.Controller.prototype.showSearchBlock = function() {
- this.$searchBlock.show("blind", { direction: "horizontal"}, 100);
+ this.$searchBlock.animate({ width:"160px" }, 200);
this.$searchInput.css('background-color','#fff');
-
this.$searchInput.focus();
-
- // we need this variable because some widgets can find a match in
- // their data while at the same time others don't. As we want the
- // search field to become green when there's a match, we need a
- // variable to remember that we had one.
- this._positiveMatch = false;
-
- // tell the world the field is open
- this.player.popcorn.trigger("IriSP.search.open");
};
IriSP.Widgets.Controller.prototype.hideSearchBlock = function() {
- this._searchLastValue = this.$searchInput.val();
- this.$searchInput.val('');
- this.$searchBlock.hide("blind", { direction: "horizontal"}, 75);
-
- this._positiveMatch = false;
-
- this.player.popcorn.trigger("IriSP.search.closed");
+ this.$searchBlock.animate( { width: 0 }, 200);
};
/** react to clicks on the search button */
IriSP.Widgets.Controller.prototype.searchButtonHandler = function() {
- if ( this.$searchBlock.is(":hidden") ) {
+ if ( !this.$searchBlock.width() ) {
this.showSearchBlock();
- this.$searchInput.val(this._searchLastValue);
- this.player.popcorn.trigger("IriSP.search", this._searchLastValue); // trigger the search to make it more natural.
+ var _val = this.$searchInput.val();
+ if (_val) {
+ this.source.getAnnotations().search(_val);
+ }
} else {
this.hideSearchBlock();
}
@@ -260,40 +256,22 @@
/** this handler is called whenever the content of the search
field changes */
IriSP.Widgets.Controller.prototype.searchHandler = function() {
- this._searchLastValue = this.$searchInput.val();
+ if ( !this.$searchBlock.width() ) {
+ this.$searchBlock.css({ width:"160px" });
+ this.$searchInput.css('background-color','#fff');
+ }
+ var _val = this.$searchInput.val();
this._positiveMatch = false;
-
+
// do nothing if the search field is empty, instead of highlighting everything.
- if (this._searchLastValue == "") {
- this.player.popcorn.trigger("IriSP.search.cleared");
- this.$searchInput.css('background-color','');
- } else {
- this.player.popcorn.trigger("IriSP.search", this._searchLastValue);
+ if (_val !== this.lastSearchValue) {
+ if (_val) {
+ this.source.getAnnotations().search(_val);
+ } else {
+ this.source.getAnnotations().trigger("clear-search");
+ this.$searchInput.css('background-color','');
+ }
}
+ this.lastSearchValue = _val;
};
-/**
- handler for the IriSP.search.found message, which is sent by some views when they
- highlight a match.
-*/
-IriSP.Widgets.Controller.prototype.searchMatch = function() {
- this._positiveMatch = true;
- this.$searchInput.css('background-color','#e1ffe1');
-};
-
-/** the same, except that no value could be found */
-IriSP.Widgets.Controller.prototype.searchNoMatch = function() {
- if (this._positiveMatch !== true) {
- this.$searchInput.css('background-color', "#d62e3a");
- }
-};
-
-/** react to an IriSP.Player.triggeredSearch - that is, when
- a widget ask the.Player to do a search on his behalf */
-IriSP.Widgets.Controller.prototype.triggeredSearch = function(searchString) {
- this.showSearchBlock();
- this.$searchInput.attr('value', searchString);
- this.player.popcorn.trigger("IriSP.search", searchString); // trigger the search to make it more natural.
-};
-
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/DailymotionPlayer.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,104 @@
+IriSP.Widgets.DailymotionPlayer = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.DailymotionPlayer.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.DailymotionPlayer.prototype.defaults = {
+ aspect_ratio: 14/9
+}
+
+IriSP.Widgets.DailymotionPlayer.prototype.draw = function() {
+
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ this.height = this.height || Math.floor(this.width / this.aspect_ratio);
+
+ var _media = this.media,
+ _this = this,
+ _pauseState = true;
+
+ /* Dailymotion utilise un système de fonctions référencées dans
+ * des variables globales pour la gestion des événements.
+ */
+
+ window.onDailymotionPlayerReady = function() {
+
+ var _player = document.getElementById(_this.container);
+
+ _media.getCurrentTime = function() {
+ return new IriSP.Model.Time(1000*_player.getCurrentTime());
+ }
+ _media.getVolume = function() {
+ return _player.getVolume() / 100;
+ }
+ _media.getPaused = function() {
+ return _pauseState;
+ }
+ _media.getMuted = function() {
+ return _player.isMuted();
+ }
+ _media.setCurrentTime = function(_milliseconds) {
+ _seekPause = _pauseState;
+ return _player.seekTo(_milliseconds / 1000);
+ }
+ _media.setVolume = function(_vol) {
+ return _player.setVolume(Math.floor(_vol*100));
+ }
+ _media.mute = function() {
+ return _player.mute();
+ }
+ _media.unmute = function() {
+ return _player.unMute();
+ }
+ _media.play = function() {
+ return _player.playVideo();
+ }
+ _media.pause = function() {
+ return _player.pauseVideo();
+ }
+
+ _player.addEventListener("onStateChange", "onDailymotionStateChange");
+ _player.addEventListener("onVideoProgress", "onDailymotionVideoProgress");
+
+ _player.cueVideoByUrl(_this.video);
+
+ _media.trigger("loadedmetadata");
+ }
+
+ window.onDailymotionStateChange = function(_state) {
+ switch(_state) {
+ case 1:
+ _media.trigger("play");
+ _pauseState = false;
+ break;
+
+ case 2:
+ _media.trigger("pause");
+ _pauseState = true;
+ break;
+
+ case 3:
+ _media.trigger("seeked");
+ break;
+ }
+ }
+
+ window.onDailymotionVideoProgress = function(_progress) {
+ _media.trigger("timeupdate", new IriSP.Model.Time(_progress.mediaTime * 1000));
+ }
+
+ var params = {
+ "allowScriptAccess" : "always",
+ "wmode": "opaque"
+ };
+
+ var atts = {
+ id : this.container
+ };
+
+ swfobject.embedSWF("http://www.dailymotion.com/swf?chromeless=1&enableApi=1", this.container, this.width, this.height, "8", null, null, params, atts);
+
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/JwpPlayer.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,132 @@
+IriSP.Widgets.JwpPlayer = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.JwpPlayer.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.JwpPlayer.prototype.defaults = {
+}
+
+IriSP.Widgets.JwpPlayer.prototype.draw = function() {
+
+ var _opts = {},
+ _player = jwplayer(this.$[0]),
+ _seekPause = false,
+ _pauseState = true,
+ _props = [ "live", "provider", "autostart" ];
+
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ if (typeof this.streamer === "undefined") {
+ this.streamer = this.media.streamer;
+ }
+
+ if (typeof this.streamer === "function") {
+ this.streamer = this.streamer(this.video);
+ }
+
+ if (typeof this.streamer === "string" && (this.provider === "http" || this.provider === "rtmp")) {
+ this.video = this.video.replace(this.streamer,"");
+ _opts.streamer = this.streamer;
+ }
+
+ _opts.file = this.video;
+ _opts.flashplayer = IriSP.getLib("jwPlayerSWF");
+ _opts["controlbar.position"] = "none";
+ _opts.width = this.width;
+ _opts.height = this.height || Math.floor(.643*this.width);
+
+ for (var i = 0; i < _props.length; i++) {
+ if (typeof this[_props[i]] !== "undefined") {
+ _opts[_props[i]] = this[_props[i]];
+ }
+ }
+
+ if (this.autostart) {
+ _pauseState = false;
+ this.media.trigger("play");
+ }
+
+ // Binding functions to jwplayer
+
+ var _media = this.media;
+
+ _media.on("setcurrenttime", function(_milliseconds) {
+ _seekPause = _pauseState;
+ _player.seek(_milliseconds / 1000);
+ });
+
+ _media.on("setvolume", function(_vol) {
+ _player.setVolume(Math.floor(_vol*100));
+ _media.volume = _vol;
+ });
+
+ _media.on("setmuted", function(_muted) {
+ _player.setMute(_muted);
+ _media.muted = _muted;
+ });
+
+ _media.on("setplay", function() {
+ _player.play(true);
+ _media.paused = false;
+ });
+
+ _media.on("setpause", function() {
+ _player.pause(true);
+ _media.paused = true;
+ });
+
+ // Binding jwplater events to media
+
+ function getVolume() {
+ _media.muted = _player.getMute();
+ _media.volume = _player.getVolume() / 100;
+ }
+
+ _opts.events = {
+ onReady: function() {
+ getVolume();
+ _media.currentTime = new IriSP.Model.Time(1000*_player.getPosition() || 0);
+ _media.trigger("loadedmetadata");
+ },
+ onTime: function(_progress) {
+ if (_seekPause) {
+ _player.pause(true);
+ _seekPause = false;
+ } else {
+ if (_pauseState && _player.getState() === "PLAYING") {
+ _pauseState = false;
+ _media.trigger("play");
+ }
+ }
+ _media.trigger("timeupdate", new IriSP.Model.Time(_progress.position * 1000));
+ },
+ onPlay: function() {
+ if (!_seekPause) {
+ _pauseState = false;
+ _media.trigger("play");
+ }
+ },
+ onPause: function() {
+ _pauseState = true;
+ _media.trigger("pause");
+ },
+ onSeek: function() {
+ _media.trigger("seeked");
+ },
+ onMute: function(_event) {
+ _media.muted = _event.mute;
+ _media.trigger("volumechange");
+ },
+ onVolume: function(_event) {
+ _media.volume = _event.volume / 100;
+ _media.trigger("volumechange");
+ }
+ }
+ _player.setup(_opts);
+
+ this.jwplayer = _player;
+
+}
\ No newline at end of file
--- a/web/res/metadataplayer/LdtPlayer-core.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/LdtPlayer-core.js Mon Dec 10 10:47:14 2012 +0100
@@ -20,11 +20,11 @@
v2.0.3 (c) Kyle Simpson
MIT License
*/
-(function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b<a.scripts.length;b++){if(a.scripts[b].ready&&a.scripts[b].exec_trigger){c=true;a.scripts[b].exec_trigger();a.scripts[b].exec_trigger=null}}return c}function t(a,c,b,d){a.onload=a.onreadystatechange=function(){if((a.readyState&&a.readyState!="complete"&&a.readyState!="loaded")||c[b])return;a.onload=a.onreadystatechange=null;d()}}function I(a){a.ready=a.finished=true;for(var c=0;c<a.finished_listeners.length;c++){a.finished_listeners[c]()}a.ready_listeners=[];a.finished_listeners=[]}function P(d,f,e,g,h){setTimeout(function(){var a,c=f.real_src,b;if("item"in i){if(!i[0]){setTimeout(arguments.callee,25);return}i=i[0]}a=document.createElement("script");if(f.type)a.type=f.type;if(f.charset)a.charset=f.charset;if(h){if(r){e.elem=a;if(E){a.preload=true;a.onpreload=g}else{a.onreadystatechange=function(){if(a.readyState=="loaded")g()}}a.src=c}else if(h&&c.indexOf(D)==0&&d[y]){b=new XMLHttpRequest();b.onreadystatechange=function(){if(b.readyState==4){b.onreadystatechange=function(){};e.text=b.responseText+"\n//@ sourceURL="+c;g()}};b.open("GET",c);b.send()}else{a.type="text/cache-script";t(a,e,"ready",function(){i.removeChild(a);g()});a.src=c;i.insertBefore(a,i.firstChild)}}else if(F){a.async=false;t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}else{t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}},0)}function J(){var l={},Q=r||M,n=[],p={},m;l[y]=true;l[z]=false;l[u]=false;l[A]=false;l[B]="";function R(a,c,b){var d;function f(){if(d!=null){d=null;I(b)}}if(p[c.src].finished)return;if(!a[u])p[c.src].finished=true;d=b.elem||document.createElement("script");if(c.type)d.type=c.type;if(c.charset)d.charset=c.charset;t(d,b,"finished",f);if(b.elem){b.elem=null}else if(b.text){d.onload=d.onreadystatechange=null;d.text=b.text}else{d.src=c.real_src}i.insertBefore(d,i.firstChild);if(b.text){f()}}function S(c,b,d,f){var e,g,h=function(){b.ready_cb(b,function(){R(c,b,e)})},j=function(){b.finished_cb(b,d)};b.src=N(b.src,c[B]);b.real_src=b.src+(c[A]?((/\?.*$/.test(b.src)?"&_":"?_")+~~(Math.random()*1E9)+"="):"");if(!p[b.src])p[b.src]={items:[],finished:false};g=p[b.src].items;if(c[u]||g.length==0){e=g[g.length]={ready:false,finished:false,ready_listeners:[h],finished_listeners:[j]};P(c,b,e,((f)?function(){e.ready=true;for(var a=0;a<e.ready_listeners.length;a++){e.ready_listeners[a]()}e.ready_listeners=[]}:function(){I(e)}),f)}else{e=g[0];if(e.finished){j()}else{e.finished_listeners.push(j)}}}function v(){var e,g=s(l,{}),h=[],j=0,w=false,k;function T(a,c){a.ready=true;a.exec_trigger=c;x()}function U(a,c){a.ready=a.finished=true;a.exec_trigger=null;for(var b=0;b<c.scripts.length;b++){if(!c.scripts[b].finished)return}c.finished=true;x()}function x(){while(j<h.length){if(G(h[j])){try{h[j++]()}catch(err){}continue}else if(!h[j].finished){if(O(h[j]))continue;break}j++}if(j==h.length){w=false;k=false}}function V(){if(!k||!k.scripts){h.push(k={scripts:[],finished:true})}}e={script:function(){for(var f=0;f<arguments.length;f++){(function(a,c){var b;if(!H(a)){c=[a]}for(var d=0;d<c.length;d++){V();a=c[d];if(G(a))a=a();if(!a)continue;if(H(a)){b=[].slice.call(a);b.unshift(d,1);[].splice.apply(c,b);d--;continue}if(typeof a=="string")a={src:a};a=s(a,{ready:false,ready_cb:T,finished:false,finished_cb:U});k.finished=false;k.scripts.push(a);S(g,a,k,(Q&&w));w=true;if(g[z])e.wait()}})(arguments[f],arguments[f])}return e},wait:function(){if(arguments.length>0){for(var a=0;a<arguments.length;a++){h.push(arguments[a])}k=h[h.length-1]}else k=false;x();return e}};return{script:e.script,wait:e.wait,setOptions:function(a){s(a,g);return e}}}m={setGlobalDefaults:function(a){s(a,l);return m},setOptions:function(){return v().setOptions.apply(null,arguments)},script:function(){return v().script.apply(null,arguments)},wait:function(){return v().wait.apply(null,arguments)},queueScript:function(){n[n.length]={type:"script",args:[].slice.call(arguments)};return m},queueWait:function(){n[n.length]={type:"wait",args:[].slice.call(arguments)};return m},runQueue:function(){var a=m,c=n.length,b=c,d;for(;--b>=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this);/* init.js - initialization and configuration of Popcorn and the widgets
+(function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b<a.scripts.length;b++){if(a.scripts[b].ready&&a.scripts[b].exec_trigger){c=true;a.scripts[b].exec_trigger();a.scripts[b].exec_trigger=null}}return c}function t(a,c,b,d){a.onload=a.onreadystatechange=function(){if((a.readyState&&a.readyState!="complete"&&a.readyState!="loaded")||c[b])return;a.onload=a.onreadystatechange=null;d()}}function I(a){a.ready=a.finished=true;for(var c=0;c<a.finished_listeners.length;c++){a.finished_listeners[c]()}a.ready_listeners=[];a.finished_listeners=[]}function P(d,f,e,g,h){setTimeout(function(){var a,c=f.real_src,b;if("item"in i){if(!i[0]){setTimeout(arguments.callee,25);return}i=i[0]}a=document.createElement("script");if(f.type)a.type=f.type;if(f.charset)a.charset=f.charset;if(h){if(r){e.elem=a;if(E){a.preload=true;a.onpreload=g}else{a.onreadystatechange=function(){if(a.readyState=="loaded")g()}}a.src=c}else if(h&&c.indexOf(D)==0&&d[y]){b=new XMLHttpRequest();b.onreadystatechange=function(){if(b.readyState==4){b.onreadystatechange=function(){};e.text=b.responseText+"\n//@ sourceURL="+c;g()}};b.open("GET",c);b.send()}else{a.type="text/cache-script";t(a,e,"ready",function(){i.removeChild(a);g()});a.src=c;i.insertBefore(a,i.firstChild)}}else if(F){a.async=false;t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}else{t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}},0)}function J(){var l={},Q=r||M,n=[],p={},m;l[y]=true;l[z]=false;l[u]=false;l[A]=false;l[B]="";function R(a,c,b){var d;function f(){if(d!=null){d=null;I(b)}}if(p[c.src].finished)return;if(!a[u])p[c.src].finished=true;d=b.elem||document.createElement("script");if(c.type)d.type=c.type;if(c.charset)d.charset=c.charset;t(d,b,"finished",f);if(b.elem){b.elem=null}else if(b.text){d.onload=d.onreadystatechange=null;d.text=b.text}else{d.src=c.real_src}i.insertBefore(d,i.firstChild);if(b.text){f()}}function S(c,b,d,f){var e,g,h=function(){b.ready_cb(b,function(){R(c,b,e)})},j=function(){b.finished_cb(b,d)};b.src=N(b.src,c[B]);b.real_src=b.src+(c[A]?((/\?.*$/.test(b.src)?"&_":"?_")+~~(Math.random()*1E9)+"="):"");if(!p[b.src])p[b.src]={items:[],finished:false};g=p[b.src].items;if(c[u]||g.length==0){e=g[g.length]={ready:false,finished:false,ready_listeners:[h],finished_listeners:[j]};P(c,b,e,((f)?function(){e.ready=true;for(var a=0;a<e.ready_listeners.length;a++){e.ready_listeners[a]()}e.ready_listeners=[]}:function(){I(e)}),f)}else{e=g[0];if(e.finished){j()}else{e.finished_listeners.push(j)}}}function v(){var e,g=s(l,{}),h=[],j=0,w=false,k;function T(a,c){a.ready=true;a.exec_trigger=c;x()}function U(a,c){a.ready=a.finished=true;a.exec_trigger=null;for(var b=0;b<c.scripts.length;b++){if(!c.scripts[b].finished)return}c.finished=true;x()}function x(){while(j<h.length){if(G(h[j])){try{h[j++]()}catch(err){}continue}else if(!h[j].finished){if(O(h[j]))continue;break}j++}if(j==h.length){w=false;k=false}}function V(){if(!k||!k.scripts){h.push(k={scripts:[],finished:true})}}e={script:function(){for(var f=0;f<arguments.length;f++){(function(a,c){var b;if(!H(a)){c=[a]}for(var d=0;d<c.length;d++){V();a=c[d];if(G(a))a=a();if(!a)continue;if(H(a)){b=[].slice.call(a);b.unshift(d,1);[].splice.apply(c,b);d--;continue}if(typeof a=="string")a={src:a};a=s(a,{ready:false,ready_cb:T,finished:false,finished_cb:U});k.finished=false;k.scripts.push(a);S(g,a,k,(Q&&w));w=true;if(g[z])e.wait()}})(arguments[f],arguments[f])}return e},wait:function(){if(arguments.length>0){for(var a=0;a<arguments.length;a++){h.push(arguments[a])}k=h[h.length-1]}else k=false;x();return e}};return{script:e.script,wait:e.wait,setOptions:function(a){s(a,g);return e}}}m={setGlobalDefaults:function(a){s(a,l);return m},setOptions:function(){return v().setOptions.apply(null,arguments)},script:function(){return v().script.apply(null,arguments)},wait:function(){return v().wait.apply(null,arguments)},queueScript:function(){n[n.length]={type:"script",args:[].slice.call(arguments)};return m},queueWait:function(){n[n.length]={type:"wait",args:[].slice.call(arguments)};return m},runQueue:function(){var a=m,c=n.length,b=c,d;for(;--b>=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this);/* init.js - initialization and configuration of the widgets
*/
if (typeof window.IriSP === "undefined") {
- IriSP = {};
+ window.IriSP = {};
}
/* The Metadataplayer Object, single point of entry, replaces IriSP.init_player */
@@ -32,43 +32,34 @@
IriSP.Metadataplayer = function(config) {
IriSP.log("IriSP.Metadataplayer constructor");
for (var key in IriSP.guiDefaults) {
- if (IriSP.guiDefaults.hasOwnProperty(key) && !config.gui.hasOwnProperty(key)) {
- config.gui[key] = IriSP.guiDefaults[key]
+ if (IriSP.guiDefaults.hasOwnProperty(key) && !config.hasOwnProperty(key)) {
+ config[key] = IriSP.guiDefaults[key]
}
}
- var _container = document.getElementById(config.gui.container);
+ var _container = document.getElementById(config.container);
_container.innerHTML = '<h3 class="Ldt-Loader">Loading... Chargement...</h3>';
this.sourceManager = new IriSP.Model.Directory();
this.config = config;
- this.callbackQueue = [];
- this.isLoaded = false;
+ this.__events = {};
this.loadLibs();
}
IriSP.Metadataplayer.prototype.toString = function() {
- return 'Metadataplayer in #' + this.config.gui.container;
-}
-
-IriSP.Metadataplayer.prototype.deferCallback = function(_callback) {
- var _this = this;
- IriSP._.defer(function() {
- _callback.call(_this);
- });
+ return 'Metadataplayer in #' + this.config.container;
}
-IriSP.Metadataplayer.prototype.handleCallbacks = function() {
- this.isLoaded = true;
- while (this.callbackQueue.length) {
- this.deferCallback(this.callbackQueue.splice(0,1)[0]);
+IriSP.Metadataplayer.prototype.on = function(_event, _callback) {
+ if (typeof this.__events[_event] === "undefined") {
+ this.__events[_event] = [];
}
+ this.__events[_event].push(_callback);
}
-IriSP.Metadataplayer.prototype.onLoad = function(_callback) {
- if (this.isLoaded) {
- this.deferCallback(_callback);
- } else {
- this.callbackQueue.push(_callback);
- }
+IriSP.Metadataplayer.prototype.trigger = function(_event, _data) {
+ var _element = this;
+ IriSP._(this.__events[_event]).each(function(_callback) {
+ _callback.call(_element, _data);
+ });
}
IriSP.Metadataplayer.prototype.loadLibs = function() {
@@ -76,8 +67,7 @@
var $L = $LAB
.script(IriSP.getLib("underscore"))
.script(IriSP.getLib("Mustache"))
- .script(IriSP.getLib("jQuery"))
- .script(IriSP.getLib("swfObject"));
+ .script(IriSP.getLib("jQuery"));
if (typeof JSON == "undefined") {
$L.script(IriSP.getLib("json"));
@@ -86,24 +76,18 @@
$L.wait()
.script(IriSP.getLib("jQueryUI"));
- if (this.config.player.type === "jwplayer" || this.config.player.type === "auto") {
- $L.script(IriSP.getLib("jwplayer"));
- }
-
- if (this.config.player.type !== "jwplayer" && this.config.player.type !== "allocine" && this.config.player.type !== "dailymotion") {
- $L.script(IriSP.getLib("popcorn"));
- }
-
/* widget specific requirements */
- for(var _i = 0; _i < this.config.gui.widgets.length; _i++) {
- var _t = this.config.gui.widgets[_i].type;
- if (typeof IriSP.widgetsRequirements[_t] !== "undefined" && typeof IriSP.widgetsRequirements[_t].requires !== "undefined") {
- $L.script(IriSP.getLib(IriSP.widgetsRequirements[_t].requires));
+ for(var _i = 0; _i < this.config.widgets.length; _i++) {
+ var _t = this.config.widgets[_i].type;
+ if (typeof IriSP.widgetsRequirements[_t] !== "undefined" && typeof IriSP.widgetsRequirements[_t].requires !== "undefined" ) {
+ for (var _j = 0; _j < IriSP.widgetsRequirements[_t].requires.length; _j++) {
+ $L.script(IriSP.getLib(IriSP.widgetsRequirements[_t].requires[_j]));
+ }
}
}
var _this = this;
- IriSP.log($L);
+
$L.wait(function() {
_this.onLibsLoaded();
});
@@ -112,37 +96,56 @@
IriSP.Metadataplayer.prototype.onLibsLoaded = function() {
IriSP.log("IriSP.Metadataplayer.prototype.onLibsLoaded");
if (typeof IriSP.jQuery === "undefined" && typeof window.jQuery !== "undefined") {
- IriSP.jQuery = window.jQuery.noConflict();
+ IriSP.jQuery = window.jQuery;
}
if (typeof IriSP._ === "undefined" && typeof window._ !== "undefined") {
- IriSP._ = window._.noConflict();
+ IriSP._ = window._;
}
IriSP.loadCss(IriSP.getLib("cssjQueryUI"));
- IriSP.loadCss(this.config.gui.css);
+ IriSP.loadCss(this.config.css);
- this.videoData = this.loadMetadata(this.config.player.metadata);
- this.$ = IriSP.jQuery('#' + this.config.gui.container);
+ this.$ = IriSP.jQuery('#' + this.config.container);
this.$.css({
- "width": this.config.gui.width,
+ "width": this.config.width,
"clear": "both"
});
- if (typeof this.config.gui.height !== "undefined") {
- this.$.css("height", this.config.gui.height);
+ if (typeof this.config.height !== "undefined") {
+ this.$.css("height", this.config.height);
}
+ this.widgets = [];
var _this = this;
- this.videoData.onLoad(function() {
- _this.onVideoDataLoaded();
+ IriSP._(this.config.widgets).each(function(widgetconf, key) {
+ _this.widgets.push(null);
+ _this.loadWidget(widgetconf, function(widget) {
+ _this.widgets[key] = widget;
+ });
});
+ this.$.find('.Ldt-Loader').detach();
+
+ var endload = false;
+
+ this.on("widget-loaded", function() {
+ if (endload) {
+ return;
+ }
+ var isloaded = !IriSP._(_this.widgets).any(function(w) {
+ return !(w && w.isLoaded())
+ });
+ if (isloaded) {
+ endload = true;
+ _this.trigger("widgets-loaded");
+ }
+ });
}
IriSP.Metadataplayer.prototype.loadMetadata = function(_metadataInfo) {
+ if (_metadataInfo.elementType === "source") {
+ return _metadataInfo;
+ }
if (typeof _metadataInfo.serializer === "undefined" && typeof _metadataInfo.format !== "undefined") {
_metadataInfo.serializer = IriSP.serializers[_metadataInfo.format];
}
- if (typeof _metadataInfo.url === "undefined" && typeof _metadataInfo.src !== "undefined") {
- _metadataInfo.url = _metadataInfo.src;
- }
if (typeof _metadataInfo.url !== "undefined" && typeof _metadataInfo.serializer !== "undefined") {
return this.sourceManager.remoteSource(_metadataInfo);
} else {
@@ -150,184 +153,6 @@
}
}
-IriSP.Metadataplayer.prototype.onVideoDataLoaded = function() {
-
- /* Setting default media from metadata */
-
- if (typeof this.videoData !== "undefined") {
-
- var _media;
-
- if (typeof this.videoData.mainMedia !== "undefined") {
- _media = this.videoData.getElement(this.videoData.mainMedia);
- }
-
- if (this.config.player.type === "mashup" || this.config.player.type === "mashup-html") {
- if (typeof _media === "undefined" || _media.elementType !== "mashup") {
- var _mashups = this.videoData.getMashups();
- if (_mashups.length) {
- _media = _mashups[0];
- }
- }
- } else {
- if (typeof _media === "undefined" || _media.elementType !== "media") {
- var _medias = this.videoData.getMedias();
- if (_medias.length) {
- _media = _medias[0];
- }
- }
- }
-
- this.videoData.currentMedia = _media;
-
- /* Getting video URL from metadata if it's not in the player config options */
-
- if (typeof _media !== "undefined" && typeof _media.video !== "undefined" && typeof this.config.player.video === "undefined") {
- this.config.player.video = _media.video;
- if (typeof this.config.player.streamer == "undefined" && typeof _media.streamer !== "undefined") {
- this.config.player.streamer = _media.streamer;
- }
- }
-
- }
-
- if (typeof this.config.player.video === "string" && this.config.player.url_transform === "function") {
- this.config.player.video = this.config.player.url_transform(this.config.player.video);
- }
-
- var _pop,
- _divs = this.layoutDivs("video",this.config.player.height || undefined),
- containerDiv = _divs[0],
- spacerDiv = _divs[1],
- _this = this,
- _types = {
- "html5" : /\.(ogg|ogv|webm)$/,
- "youtube" : /^(https?:\/\/)?(www\.)?youtube\.com/,
- "dailymotion" : /^(https?:\/\/)?(www\.)?dailymotion\.com/
- };
-
- if (this.config.player.type === "auto") {
- this.config.player.type = "jwplayer";
- IriSP._(_types).each(function(_v, _k) {
- if (_v.test(_this.config.player.video)) {
- _this.config.player.type = _k
- }
- });
- }
-
- switch(this.config.player.type) {
- case "html5":
- var _tmpId = Popcorn.guid("video"),
- _videoEl = IriSP.jQuery('<video>');
-
- _videoEl.attr({
- "src" : this.config.player.video,
- "id" : _tmpId
- })
-
- if(this.config.player.hasOwnProperty("width")) {
- _videoEl.attr("width", this.config.player.width);
- }
- if(this.config.player.hasOwnProperty("height")) {
- _videoEl.attr("height", this.config.player.height);
- }
- IriSP.jQuery("#" + containerDiv).append(_videoEl);
- _pop = Popcorn("#" + _tmpId);
- break;
-
- case "html5-audio":
- var _tmpId = Popcorn.guid("audio"),
- _videoEl = IriSP.jQuery('<audio>');
-
- _videoEl.attr({
- "src" : this.config.player.video,
- "id" : _tmpId
- })
-
- if(this.config.player.hasOwnProperty("width")) {
- _videoEl.attr("width", this.config.player.width);
- }
- if(this.config.player.hasOwnProperty("height")) {
- _videoEl.attr("height", this.config.player.height);
- }
- IriSP.jQuery("#" + containerDiv).append(_videoEl);
- _pop = Popcorn("#" + _tmpId);
- break;
-
- case "jwplayer":
- var opts = IriSP.jQuery.extend({}, this.config.player);
- delete opts.container;
- delete opts.type;
- if (typeof opts.streamer !== "undefined") {
- opts.video = opts.video.replace(opts.streamer,"");
- }
- opts.file = opts.video;
- delete opts.video;
- delete opts.metadata;
-
- if(!opts.hasOwnProperty("flashplayer")) {
- opts.flashplayer = IriSP.getLib("jwPlayerSWF");
- }
-
- if(!opts.hasOwnProperty("controlbar.position")) {
- opts["controlbar.position"] = "none";
- }
- _pop = new IriSP.PopcornReplacement.jwplayer("#" + containerDiv, opts);
- break;
-
- case "youtube":
- // Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.
- IriSP.jQuery("#" + containerDiv).css({
- width : this.config.player.width + "px",
- height : this.config.player.height + "px"
- });
- var _urlparts = this.config.player.video.split(/[?&]/),
- _params = {};
- for (var _j = 1; _j < _urlparts.length; _j++) {
- var _ppart = _urlparts[_j].split('=');
- _params[_ppart[0]] = decodeURIComponent(_ppart[1]);
- }
- _params.controls = 0;
- _params.modestbranding = 1;
- _url = _urlparts[0] + '?' + IriSP.jQuery.param(_params);
- _pop = Popcorn.youtube("#" + containerDiv, _url);
- break;
-
- case "dailymotion":
- _pop = new IriSP.PopcornReplacement.dailymotion("#" + containerDiv, this.config.player);
- break;
-
- case "mashup":
- _pop = new IriSP.PopcornReplacement.mashup("#" + containerDiv, this.config.player);
- break;
-
- case "allocine":
- _pop = new IriSP.PopcornReplacement.allocine("#" + containerDiv, this.config.player);
- break;
-
- case "mashup-html":
- _pop = new IriSP.PopcornReplacement.htmlMashup("#" + containerDiv, this.config.player, this.videoData);
- break;
-
- default:
- _pop = undefined;
- };
-
- this.popcorn = _pop;
-
- /* Now Loading Widgets */
-
- this.widgets = [];
- var _this = this;
- for(var i = 0; i < this.config.gui.widgets.length; i++) {
- this.loadWidget(this.config.gui.widgets[i], function(_widget) {
- _this.widgets.push(_widget)
- });
- };
- this.$.find('.Ldt-Loader').detach();
- this.handleCallbacks();
-}
-
IriSP.Metadataplayer.prototype.loadWidget = function(_widgetConfig, _callback) {
/* Creating containers if needed */
if (typeof _widgetConfig.container === "undefined") {
@@ -361,20 +186,20 @@
if (typeof(_name) === "undefined") {
_name = "";
}
- var newDiv = IriSP._.uniqueId(this.config.gui.container + "_widget_" + _name + "_"),
+ var newDiv = IriSP._.uniqueId(this.config.container + "_widget_" + _name + "_"),
spacerDiv = IriSP._.uniqueId("LdtPlayer_spacer_"),
divHtml = IriSP.jQuery('<div>')
.attr("id",newDiv)
.css({
- width: this.config.gui.width + "px",
+ width: this.config.width + "px",
position: "relative",
clear: "both"
}),
spacerHtml = IriSP.jQuery('<div>')
.attr("id",spacerDiv)
.css({
- width: this.config.gui.width + "px",
- height: this.config.gui.spacer_div_height + "px",
+ width: this.config.width + "px",
+ height: this.config.spacer_div_height + "px",
position: "relative",
clear: "both"
});
@@ -423,197 +248,97 @@
console.log.apply(console, arguments);
}
}
-/* wrapper that simulates popcorn.js because
- popcorn is a bit unstable at the time */
-
-/* Popcorn.code replacement has been disabled. It didn't work properly and was not even used */
-
-IriSP.PopcornReplacement = {
-};
-
-/** base class for our popcorn-compatible players.
- */
-IriSP.PopcornReplacement.player = function(container, options) {
-
- this.media = {
- "paused": true,
- "muted": false
- };
-
- this.container = container.replace(/^#/,''); //remove '#' at beginning
- this.msgPump = {}; /* dictionnary used to receive and send messages */
- this._options = options;
-
-};
-
-IriSP.PopcornReplacement.player.prototype.listen = function(msg, callback) {
- if (!this.msgPump.hasOwnProperty(msg)) {
- this.msgPump[msg] = [];
- }
- this.msgPump[msg].push(callback);
-};
-
-IriSP.PopcornReplacement.player.prototype.on = IriSP.PopcornReplacement.player.prototype.listen;
+/* TODO: Separate Project-specific data from Source */
-IriSP.PopcornReplacement.player.prototype.trigger = function(msg, params) {
- if (!this.msgPump.hasOwnProperty(msg)) {
- return;
- }
- var d = this.msgPump[msg];
- for(var i = 0; i < d.length; i++) {
- d[i].call(window, params);
+/* model.js is where data is stored in a standard form, whatever the serializer */
+IriSP.Model = (function (ns) {
+
+ function pad(n, x, b) {
+ b = b || 10;
+ var s = (x).toString(b);
+ while (s.length < n) {
+ s = "0" + s;
+ }
+ return s;
}
-};
-
-IriSP.PopcornReplacement.player.prototype.emit = IriSP.PopcornReplacement.player.prototype.trigger;
-/*
-IriSP.PopcornReplacement.player.prototype.guid = function(prefix) {
- var str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
- return v.toString(16);
- });
-
- return prefix + str;
-};
-
-/** init the api after that flash player has been setup - called by the callback
- defined by the embedded flash player
-
-IriSP.PopcornReplacement.player.prototype.__initApi = function() {
- this.trigger("loadedmetadata"); // we've done more than loading metadata of course,
- // but popcorn doesn't need to know more.
- this.media.muted = this.playerFns.getMute();
- /* some programmed segments are supposed to be run at the beginning
- var i = 0;
- for(i = 0; i < this.__codes.length; i++) {
- var c = this.__codes[i];
- if (0 == c.start) {
- c.onStart();
+
+ function rand16(n) {
+ return pad(n, Math.floor(Math.random()*Math.pow(16,n)), 16);
}
- if (0 == c.end) {
- c.onEnd();
- }
- }
-
-};
-*/
-
-IriSP.PopcornReplacement.player.prototype.currentTime = function(time) {
- if (typeof(time) === "undefined") {
- return this.playerFns.getPosition();
- } else {
- var currentTime = +time;
- this.playerFns.seek(currentTime);
- return currentTime;
- }
-};
-
-IriSP.PopcornReplacement.player.prototype.play = function() {
- this.media.paused = false;
- this.trigger("play");
- this.playerFns.play();
-};
+ var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
-IriSP.PopcornReplacement.player.prototype.pause = function() {
- this.media.paused = true;
- this.trigger("pause");
- this.playerFns.pause();
-};
-
-IriSP.PopcornReplacement.player.prototype.muted = function(val) {
- if (typeof(val) !== "undefined") {
-
- if (this.playerFns.getMute() !== val) {
- if (val) {
- this.playerFns.setMute(true);
- this.media.muted = true;
- } else {
- this.playerFns.setMute(false);
- this.media.muted = false;
- }
-
- this.trigger( "volumechange" );
- }
+ var charsub = [
+ [ 'a', 'á', 'à', 'â', 'ä' ],
+ [ 'c', 'ç' ],
+ [ 'e', 'é', 'è', 'ê', 'ë' ],
+ [ 'i', 'í', 'ì', 'î', 'ï' ],
+ [ 'o', 'ó', 'ò', 'ô', 'ö' ]
+ ];
- return this.playerFns.getMute();
- } else {
- return this.playerFns.getMute();
- }
-};
-
-IriSP.PopcornReplacement.player.prototype.volume = function(val) {
- if (typeof this.playerFns.getVolume == "undefined" || typeof this.playerFns.setVolume == "undefined") {
- return false;
- }
- var _vol = this.playerFns.getVolume();
- if (typeof(val) !== "undefined" && parseFloat(val) !== NaN) {
- val = Math.max(0, Math.min(1, val));
- if (parseFloat(val) != parseFloat(_vol)) {
- this.playerFns.setVolume(val);
- this.trigger("volumechange");
- _vol = this.playerFns.getVolume();
- }
- }
- return _vol;
-};
-
-IriSP.PopcornReplacement.player.prototype.mute = function() {
- this.muted(true);
-}
-
-IriSP.PopcornReplacement.player.prototype.unmute = function() {
- this.muted(false);
-}
-
-
-IriSP.PopcornReplacement.player.prototype.roundTime = function() {
- var currentTime = this.currentTime();
- return Math.round(currentTime);
-};/* TODO: Separate Project-specific data from Source */
-
-/* model.js is where data is stored in a standard form, whatever the serializer */
-
-IriSP.Model = {
+ var removeChars = [
+ String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),
+ "{", "}", "(", ")", "[", "]", "【", "】", "、", "・", "‥", "。", "「", "」", "『", "』", "〜", ":", "!", "?", " ",
+ ",", " ", ";", "(", ")", ".", "*", "+", "\\", "?", "|", "{", "}", "[", "]", "^", "#", "/"
+ ]
+
+var Model = {
_SOURCE_STATUS_EMPTY : 0,
_SOURCE_STATUS_WAITING : 1,
_SOURCE_STATUS_READY : 2,
- _ID_AUTO_INCREMENT : 0,
- _ID_BASE : (function(_d) {
- function pad(n){return n<10 ? '0'+n : n}
- function fillrand(n) {
- var _res = ''
- for (var i=0; i<n; i++) {
- _res += Math.floor(16*Math.random()).toString(16);
- }
- return _res;
+ getUID : function() {
+ return uidbase + pad(4, (++uidincrement % 0x10000), 16) + "-" + rand16(4) + "-" + rand16(6) + rand16(6);
+ },
+ isLocalURL : function(url) {
+ var matches = url.match(/^(\w+:)\/\/([^/]+)/);
+ if (matches) {
+ return(matches[1] === document.location.protocol && matches[2] === document.location.host)
}
- return _d.getUTCFullYear() + '-'
- + pad(_d.getUTCMonth()+1) + '-'
- + pad(_d.getUTCDate()) + '-'
- + fillrand(16);
- })(new Date()),
- getUID : function() {
- var _n = (++this._ID_AUTO_INCREMENT).toString();
- while (_n.length < 4) {
- _n = '0' + _n
- }
- return "autoid-" + this._ID_BASE + '-' + _n;
+ return true;
},
- regexpFromTextOrArray : function(_textOrArray, _testOnly) {
- var _testOnly = _testOnly || false;
+ regexpFromTextOrArray : function(_textOrArray, _testOnly, _iexact) {
+ var _testOnly = _testOnly || false,
+ _iexact = _iexact || false;
function escapeText(_text) {
return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
}
var _source =
typeof _textOrArray === "string"
? escapeText(_textOrArray)
- : IriSP._(_textOrArray).map(escapeText).join("|");
- if (_testOnly) {
- return new RegExp( _source, 'im');
- } else {
- return new RegExp( '(' + _source + ')', 'gim');
+ : ns._(_textOrArray).map(escapeText).join("|"),
+ _flags = 'im';
+ if (!_testOnly) {
+ _source = '(' + _source + ')';
+ _flags += 'g';
+ }
+ if (_iexact) {
+ _source = '^' + _source + '$';
}
+ return new RegExp( _source, _flags);
+ },
+ fullTextRegexps: function(_text) {
+ var remsrc = "[\\" + removeChars.join("\\") + "]",
+ remrx = new RegExp(remsrc,"gm"),
+ txt = _text.toLowerCase().replace(remrx,"")
+ res = [],
+ charsrc = ns._(charsub).map(function(c) {
+ return "(" + c.join("|") + ")";
+ }),
+ charsrx = ns._(charsrc).map(function(c) {
+ return new RegExp(c);
+ }),
+ src = "";
+ for (var j = 0; j < txt.length; j++) {
+ if (j) {
+ src += remsrc + "*";
+ }
+ var l = txt[j];
+ ns._(charsrc).each(function(v, k) {
+ l = l.replace(charsrx[k], v);
+ });
+ src += l;
+ }
+ return "(" + src + ")";
},
isoToDate : function(_str) {
// http://delete.me.uk/2005/03/iso8601.html
@@ -640,98 +365,104 @@
_res.setTime(Number(time));
return _res;
},
- dateToIso : function(d) {
- function pad(n){return n<10 ? '0'+n : n}
+ dateToIso : function(_d) {
+ var d = _d ? new Date(_d) : new Date();
return d.getUTCFullYear()+'-'
- + pad(d.getUTCMonth()+1)+'-'
- + pad(d.getUTCDate())+'T'
- + pad(d.getUTCHours())+':'
- + pad(d.getUTCMinutes())+':'
- + pad(d.getUTCSeconds())+'Z'
+ + pad(2, d.getUTCMonth()+1)+'-'
+ + pad(2, d.getUTCDate())+'T'
+ + pad(2, d.getUTCHours())+':'
+ + pad(2, d.getUTCMinutes())+':'
+ + pad(2, d.getUTCSeconds())+'Z'
}
}
/*
- * IriSP.Model.List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID)
+ * Model.List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID)
*/
-IriSP.Model.List = function(_directory) {
+Model.List = function(_directory) {
Array.call(this);
this.directory = _directory;
this.idIndex = [];
+ this.__events = {};
if (typeof _directory == "undefined") {
console.trace();
- throw "Error : new IriSP.Model.List(directory): directory is undefined";
+ throw "Error : new Model.List(directory): directory is undefined";
}
+ var _this = this;
+ this.on("clear-search", function() {
+ _this.searching = false;
+ _this.regexp = undefined;
+ _this.forEach(function(_element) {
+ _element.found = undefined;
+ });
+ _this.trigger("search-cleared");
+ })
}
-IriSP.Model.List.prototype = new Array();
+Model.List.prototype = new Array();
-IriSP.Model.List.prototype.getElement = function(_id) {
- return this[_id];
-}
-
-IriSP.Model.List.prototype.hasId = function(_id) {
- return (IriSP._(this.idIndex).indexOf(_id) !== -1);
+Model.List.prototype.hasId = function(_id) {
+ return ns._(this.idIndex).include(_id);
}
/* On recent browsers, forEach and map are defined and do what we want.
* Otherwise, we'll use the Underscore.js functions
*/
if (typeof Array.prototype.forEach === "undefined") {
- IriSP.Model.List.prototype.forEach = function(_callback) {
+ Model.List.prototype.forEach = function(_callback) {
var _this = this;
- IriSP._(this).forEach(function(_value, _key) {
+ ns._(this).forEach(function(_value, _key) {
_callback(_value, _key, _this);
});
}
}
if (typeof Array.prototype.map === "undefined") {
- IriSP.Model.List.prototype.map = function(_callback) {
+ Model.List.prototype.map = function(_callback) {
var _this = this;
- return IriSP._(this).map(function(_value, _key) {
+ return ns._(this).map(function(_value, _key) {
return _callback(_value, _key, _this);
});
}
}
-IriSP.Model.List.prototype.pluck = function(_key) {
+Model.List.prototype.pluck = function(_key) {
return this.map(function(_value) {
return _value[_key];
});
}
-/* We override Array's filter function because it doesn't return an IriSP.Model.List
+/* We override Array's filter function because it doesn't return an Model.List
*/
-IriSP.Model.List.prototype.filter = function(_callback) {
+Model.List.prototype.filter = function(_callback) {
var _this = this,
- _res = new IriSP.Model.List(this.directory);
- _res.addElements(IriSP._(this).filter(function(_value, _key) {
+ _res = new Model.List(this.directory);
+ _res.addElements(ns._(this).filter(function(_value, _key) {
return _callback(_value, _key, _this);
}));
return _res;
}
-IriSP.Model.List.prototype.slice = function(_start, _end) {
- var _res = new IriSP.Model.List(this.directory);
+Model.List.prototype.slice = function(_start, _end) {
+ var _res = new Model.List(this.directory);
_res.addElements(Array.prototype.slice.call(this, _start, _end));
return _res;
}
-IriSP.Model.List.prototype.splice = function(_start, _end) {
- var _res = new IriSP.Model.List(this.directory);
+Model.List.prototype.splice = function(_start, _end) {
+ var _res = new Model.List(this.directory);
_res.addElements(Array.prototype.splice.call(this, _start, _end));
this.idIndex.splice(_start, _end);
return _res;
}
/* Array has a sort function, but it's not as interesting as Underscore.js's sortBy
- * and won't return a new IriSP.Model.List
+ * and won't return a new Model.List
*/
-IriSP.Model.List.prototype.sortBy = function(_callback) {
+Model.List.prototype.sortBy = function(_callback) {
var _this = this,
- _res = new IriSP.Model.List(this.directory);
- _res.addElements(IriSP._(this).sortBy(function(_value, _key) {
+ _res = new Model.List(this.directory);
+ _res.addElements(ns._(this).sortBy(function(_value, _key) {
return _callback(_value, _key, _this);
}));
return _res;
@@ -740,34 +471,59 @@
/* Title and Description are basic information for (almost) all element types,
* here we can search by these criteria
*/
-IriSP.Model.List.prototype.searchByTitle = function(_text) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
+Model.List.prototype.searchByTitle = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
return this.filter(function(_element) {
return _rgxp.test(_element.title);
});
}
-IriSP.Model.List.prototype.searchByDescription = function(_text) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
+Model.List.prototype.searchByDescription = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
return this.filter(function(_element) {
return _rgxp.test(_element.description);
});
}
-IriSP.Model.List.prototype.searchByTextFields = function(_text) {
- var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
+Model.List.prototype.searchByTextFields = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
return this.filter(function(_element) {
return _rgxp.test(_element.description) || _rgxp.test(_element.title);
});
}
-IriSP.Model.List.prototype.getTitles = function() {
+Model.List.prototype.search = function(_text) {
+ if (!_text) {
+ this.trigger("clear-search");
+ return this;
+ }
+ this.searching = true;
+ this.trigger("search", _text);
+ var rxsource = Model.fullTextRegexps(_text)
+ rgxp = new RegExp(rxsource,"im"),
+ this.regexp = new RegExp(rxsource,"gim");
+ var res = this.filter(function(_element, _k) {
+ var titlematch = rgxp.test(_element.title),
+ descmatch = rgxp.test(_element.description),
+ _isfound = !!(titlematch || descmatch);
+ _element.found = _isfound;
+ _element.trigger(_isfound ? "found" : "not-found");
+ return _isfound;
+ });
+ this.trigger(res.length ? "found" : "not-found",res);
+ return res;
+}
+
+Model.List.prototype.getTitles = function() {
return this.map(function(_el) {
return _el.title;
});
}
-IriSP.Model.List.prototype.addId = function(_id) {
+Model.List.prototype.addId = function(_id) {
var _el = this.directory.getElement(_id)
if (!this.hasId(_id) && typeof _el !== "undefined") {
this.idIndex.push(_id);
@@ -775,11 +531,11 @@
}
}
-IriSP.Model.List.prototype.push = function(_el) {
+Model.List.prototype.push = function(_el) {
if (typeof _el === "undefined") {
return;
}
- var _index = (IriSP._(this.idIndex).indexOf(_el.id));
+ var _index = (ns._(this.idIndex).indexOf(_el.id));
if (_index === -1) {
this.idIndex.push(_el.id);
Array.prototype.push.call(this, _el);
@@ -788,24 +544,24 @@
}
}
-IriSP.Model.List.prototype.addIds = function(_array) {
+Model.List.prototype.addIds = function(_array) {
var _l = _array.length,
_this = this;
- IriSP._(_array).forEach(function(_id) {
+ ns._(_array).forEach(function(_id) {
_this.addId(_id);
});
}
-IriSP.Model.List.prototype.addElements = function(_array) {
+Model.List.prototype.addElements = function(_array) {
var _this = this;
- IriSP._(_array).forEach(function(_el) {
+ ns._(_array).forEach(function(_el) {
_this.push(_el);
});
}
-IriSP.Model.List.prototype.removeId = function(_id, _deleteFromDirectory) {
+Model.List.prototype.removeId = function(_id, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
- _index = (IriSP._(this.idIndex).indexOf(_id));
+ _index = (ns._(this.idIndex).indexOf(_id));
if (_index !== -1) {
this.splice(_index,1);
}
@@ -814,47 +570,69 @@
}
}
-IriSP.Model.List.prototype.removeElement = function(_el, _deleteFromDirectory) {
+Model.List.prototype.removeElement = function(_el, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false;
this.removeId(_el.id);
}
-IriSP.Model.List.prototype.removeIds = function(_list, _deleteFromDirectory) {
+Model.List.prototype.removeIds = function(_list, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
_this = this;
- IriSP._(_list).forEach(function(_id) {
+ ns._(_list).forEach(function(_id) {
_this.removeId(_id);
});
}
-IriSP.Model.List.prototype.removeElements = function(_list, _deleteFromDirectory) {
+Model.List.prototype.removeElements = function(_list, _deleteFromDirectory) {
var _deleteFromDirectory = _deleteFromDirectory || false,
_this = this;
- IriSP._(_list).forEach(function(_el) {
+ ns._(_list).forEach(function(_el) {
_this.removeElement(_el);
});
}
+Model.List.prototype.on = function(_event, _callback) {
+ if (typeof this.__events[_event] === "undefined") {
+ this.__events[_event] = [];
+ }
+ this.__events[_event].push(_callback);
+}
+
+Model.List.prototype.off = function(_event, _callback) {
+ if (typeof this.__events[_event] !== "undefined") {
+ this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
+ return _fn === _callback;
+ });
+ }
+}
+
+Model.List.prototype.trigger = function(_event, _data) {
+ var _list = this;
+ ns._(this.__events[_event]).each(function(_callback) {
+ _callback.call(_list, _data);
+ });
+}
+
/* A simple time management object, that helps converting millisecs to seconds and strings,
* without the clumsiness of the original Date object.
*/
-IriSP.Model.Time = function(_milliseconds) {
+Model.Time = function(_milliseconds) {
this.milliseconds = 0;
this.setMilliseconds(_milliseconds);
}
-IriSP.Model.Time.prototype.setMilliseconds = function(_milliseconds) {
- var _ante = _milliseconds;
+Model.Time.prototype.setMilliseconds = function(_milliseconds) {
+ var _ante = this.milliseconds;
switch(typeof _milliseconds) {
case "string":
- this.milliseconds = parseFloat(_milliseconds);
+ this.milliseconds = parseInt(_milliseconds);
break;
case "number":
- this.milliseconds = _milliseconds;
+ this.milliseconds = Math.floor(_milliseconds);
break;
case "object":
- this.milliseconds = parseFloat(_milliseconds.valueOf());
+ this.milliseconds = parseInt(_milliseconds.valueOf());
break;
default:
this.milliseconds = 0;
@@ -864,52 +642,49 @@
}
}
-IriSP.Model.Time.prototype.setSeconds = function(_seconds) {
+Model.Time.prototype.setSeconds = function(_seconds) {
this.milliseconds = 1000 * _seconds;
}
-IriSP.Model.Time.prototype.getSeconds = function() {
+Model.Time.prototype.getSeconds = function() {
return this.milliseconds / 1000;
}
-IriSP.Model.Time.prototype.getHMS = function() {
+Model.Time.prototype.getHMS = function() {
var _totalSeconds = Math.abs(Math.floor(this.getSeconds()));
return {
hours : Math.floor(_totalSeconds / 3600),
minutes : (Math.floor(_totalSeconds / 60) % 60),
- seconds : _totalSeconds % 60
+ seconds : _totalSeconds % 60,
+ milliseconds: this.milliseconds % 1000
}
}
-IriSP.Model.Time.prototype.add = function(_milliseconds) {
- this.milliseconds += new IriSP.Model.Time(_milliseconds).milliseconds;
+Model.Time.prototype.add = function(_milliseconds) {
+ this.milliseconds += new Model.Time(_milliseconds).milliseconds;
}
-IriSP.Model.Time.prototype.valueOf = function() {
+Model.Time.prototype.valueOf = function() {
return this.milliseconds;
}
-IriSP.Model.Time.prototype.toString = function() {
- function pad(_n) {
- var _res = _n.toString();
- while (_res.length < 2) {
- _res = '0' + _res;
- }
- return _res;
- }
+Model.Time.prototype.toString = function(showCs) {
var _hms = this.getHMS(),
_res = '';
if (_hms.hours) {
- _res += pad(_hms.hours) + ':'
+ _res += _hms.hours + ':'
}
- _res += pad(_hms.minutes) + ':' + pad(_hms.seconds);
+ _res += pad(2, _hms.minutes) + ':' + pad(2, _hms.seconds);
+ if (showCs) {
+ _res += "." + Math.round(_hms.milliseconds / 100)
+ }
return _res;
}
-/* IriSP.Model.Reference handles references between elements
+/* Model.Reference handles references between elements
*/
-IriSP.Model.Reference = function(_source, _idRef) {
+Model.Reference = function(_source, _idRef) {
this.source = _source;
this.id = _idRef;
if (typeof _idRef === "object") {
@@ -920,26 +695,26 @@
this.refresh();
}
-IriSP.Model.Reference.prototype.refresh = function() {
+Model.Reference.prototype.refresh = function() {
if (this.isList) {
- this.contents = new IriSP.Model.List(this.source.directory);
+ this.contents = new Model.List(this.source.directory);
this.contents.addIds(this.id);
} else {
- this.contents = this.source.directory.getElement(this.id);
+ this.contents = this.source.getElement(this.id);
}
}
-IriSP.Model.Reference.prototype.getContents = function() {
+Model.Reference.prototype.getContents = function() {
if (typeof this.contents === "undefined" || (this.isList && this.contents.length != this.id.length)) {
this.refresh();
}
return this.contents;
}
-IriSP.Model.Reference.prototype.isOrHasId = function(_idRef) {
+Model.Reference.prototype.isOrHasId = function(_idRef) {
if (this.isList) {
- return (IriSP._(this.id).indexOf(_idRef) !== -1)
+ return (ns._(this.id).indexOf(_idRef) !== -1)
} else {
return (this.id == _idRef);
}
@@ -947,229 +722,489 @@
/* */
-IriSP.Model.Element = function(_id, _source) {
+Model.Element = function(_id, _source) {
this.elementType = 'element';
+ this.title = "";
+ this.description = "";
+ this.__events = {}
if (typeof _source === "undefined") {
return;
}
if (typeof _id === "undefined" || !_id) {
- _id = IriSP.Model.getUID();
+ _id = Model.getUID();
}
- this.source = _source;
this.id = _id;
- this.title = "";
- this.description = "";
- this.source.directory.addElement(this);
+ this.source = _source;
+ if (_source !== this) {
+ this.source.directory.addElement(this);
+ }
}
-IriSP.Model.Element.prototype.toString = function() {
+Model.Element.prototype.toString = function() {
return this.elementType + (this.elementType !== 'element' ? ', id=' + this.id + ', title="' + this.title + '"' : '');
}
-IriSP.Model.Element.prototype.setReference = function(_elementType, _idRef) {
- this[_elementType] = new IriSP.Model.Reference(this.source, _idRef);
+Model.Element.prototype.setReference = function(_elementType, _idRef) {
+ this[_elementType] = new Model.Reference(this.source, _idRef);
}
-IriSP.Model.Element.prototype.getReference = function(_elementType) {
+Model.Element.prototype.getReference = function(_elementType) {
if (typeof this[_elementType] !== "undefined") {
return this[_elementType].getContents();
}
}
-IriSP.Model.Element.prototype.getRelated = function(_elementType, _global) {
+Model.Element.prototype.getRelated = function(_elementType, _global) {
_global = (typeof _global !== "undefined" && _global);
var _this = this;
return this.source.getList(_elementType, _global).filter(function(_el) {
var _ref = _el[_this.elementType];
- return _ref.isOrHasId(_this.id);
+ return _ref && _ref.isOrHasId(_this.id);
+ });
+}
+
+Model.Element.prototype.on = function(_event, _callback) {
+ if (typeof this.__events[_event] === "undefined") {
+ this.__events[_event] = [];
+ }
+ this.__events[_event].push(_callback);
+}
+
+Model.Element.prototype.off = function(_event, _callback) {
+ if (typeof this.__events[_event] !== "undefined") {
+ this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
+ return _fn === _callback;
+ });
+ }
+}
+
+Model.Element.prototype.trigger = function(_event, _data) {
+ var _element = this;
+ ns._(this.__events[_event]).each(function(_callback) {
+ _callback.call(_element, _data);
});
}
/* */
-IriSP.Model.Media = function(_id, _source) {
- IriSP.Model.Element.call(this, _id, _source);
- this.elementType = 'media';
- this.duration = new IriSP.Model.Time();
- this.video = '';
+Model.Playable = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
+ if (typeof _source === "undefined") {
+ return;
+ }
+ this.elementType = 'playable';
+ this.currentTime = new Model.Time();
+ this.volume = .5;
+ this.paused = true;
+ this.muted = false;
+ var _this = this;
+ this.on("play", function() {
+ _this.paused = false;
+ });
+ this.on("pause", function() {
+ _this.paused = true;
+ });
+ this.on("timeupdate", function(_time) {
+ _this.currentTime = _time;
+ _this.getAnnotations().filter(function(_a) {
+ return (_a.end <= _time || _a.begin > _time) && _a.playing
+ }).forEach(function(_a) {
+ _a.playing = false;
+ _a.trigger("leave");
+ _this.trigger("leave-annotation",_a);
+ });
+ _this.getAnnotations().filter(function(_a) {
+ return _a.begin <= _time && _a.end > _time && !_a.playing
+ }).forEach(function(_a) {
+ _a.playing = true;
+ _a.trigger("enter");
+ _this.trigger("enter-annotation",_a);
+ });
+ });
+}
+
+Model.Playable.prototype = new Model.Element();
+
+Model.Playable.prototype.getCurrentTime = function() {
+ return this.currentTime;
+}
+
+Model.Playable.prototype.getVolume = function() {
+ return this.volume;
}
-IriSP.Model.Media.prototype = new IriSP.Model.Element();
+Model.Playable.prototype.getPaused = function() {
+ return this.paused;
+}
+
+Model.Playable.prototype.getMuted = function() {
+ return this.muted;
+}
+
+Model.Playable.prototype.setCurrentTime = function(_time) {
+ this.trigger("setcurrenttime",_time);
+}
+
+Model.Playable.prototype.setVolume = function(_vol) {
+ this.trigger("setvolume",_vol);
+}
+
+Model.Playable.prototype.setMuted = function(_muted) {
+ this.trigger("setmuted",_muted);
+}
+
+Model.Playable.prototype.play = function() {
+ this.trigger("setplay");
+}
-IriSP.Model.Media.prototype.setDuration = function(_durationMs) {
+Model.Playable.prototype.pause = function() {
+ this.trigger("setpause");
+}
+
+Model.Playable.prototype.show = function() {}
+
+Model.Playable.prototype.hide = function() {}
+
+/* */
+
+Model.Media = function(_id, _source) {
+ Model.Playable.call(this, _id, _source);
+ this.elementType = 'media';
+ this.duration = new Model.Time();
+ this.video = '';
+ var _this = this;
+}
+
+Model.Media.prototype = new Model.Playable();
+
+/* Default functions to be overriden by players */
+
+Model.Media.prototype.setDuration = function(_durationMs) {
this.duration.setMilliseconds(_durationMs);
}
-IriSP.Model.Media.prototype.getAnnotations = function() {
+Model.Media.prototype.getAnnotations = function() {
return this.getRelated("annotation");
}
-IriSP.Model.Media.prototype.getAnnotationsByTypeTitle = function(_title) {
+Model.Media.prototype.getAnnotationsByTypeTitle = function(_title) {
var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
if (_annTypes.length) {
return this.getAnnotations().filter(function(_annotation) {
- return IriSP._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
});
} else {
- return new IriSP.Model.List(this.source.directory)
+ return new Model.List(this.source.directory)
}
}
/* */
-IriSP.Model.Tag = function(_id, _source) {
- IriSP.Model.Element.call(this, _id, _source);
+Model.Tag = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
this.elementType = 'tag';
}
-IriSP.Model.Tag.prototype = new IriSP.Model.Element();
+Model.Tag.prototype = new Model.Element();
-IriSP.Model.Tag.prototype.getAnnotations = function() {
+Model.Tag.prototype.getAnnotations = function() {
return this.getRelated("annotation");
}
/* */
-
-IriSP.Model.AnnotationType = function(_id, _source) {
- IriSP.Model.Element.call(this, _id, _source);
+Model.AnnotationType = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
this.elementType = 'annotationType';
}
-IriSP.Model.AnnotationType.prototype = new IriSP.Model.Element();
+Model.AnnotationType.prototype = new Model.Element();
-IriSP.Model.AnnotationType.prototype.getAnnotations = function() {
+Model.AnnotationType.prototype.getAnnotations = function() {
return this.getRelated("annotation");
}
/* Annotation
* */
-IriSP.Model.Annotation = function(_id, _source) {
- IriSP.Model.Element.call(this, _id, _source);
+Model.Annotation = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
this.elementType = 'annotation';
- this.begin = new IriSP.Model.Time();
- this.end = new IriSP.Model.Time();
+ this.begin = new Model.Time();
+ this.end = new Model.Time();
+ this.tag = new Model.Reference(_source, []);
+ this.playing = false;
+ var _this = this;
+ this.on("click", function() {
+ _this.getMedia().setCurrentTime(_this.begin);
+ });
}
-IriSP.Model.Annotation.prototype = new IriSP.Model.Element(null);
+Model.Annotation.prototype = new Model.Element();
-IriSP.Model.Annotation.prototype.setBegin = function(_beginMs) {
- this.begin.setMilliseconds(_beginMs);
+Model.Annotation.prototype.setBegin = function(_beginMs) {
+ this.begin.setMilliseconds(Math.max(0,_beginMs));
+ this.trigger("change-begin");
+ if (this.end < this.begin) {
+ this.setEnd(this.begin);
+ }
}
-IriSP.Model.Annotation.prototype.setEnd = function(_beginMs) {
- this.end.setMilliseconds(_beginMs);
+Model.Annotation.prototype.setEnd = function(_endMs) {
+ this.end.setMilliseconds(Math.min(_endMs, this.getMedia().duration.milliseconds));
+ this.trigger("change-end");
+ if (this.end < this.begin) {
+ this.setBegin(this.end);
+ }
}
-IriSP.Model.Annotation.prototype.setMedia = function(_idRef) {
+Model.Annotation.prototype.setDuration = function(_durMs) {
+ this.setEnd(_durMs + this.begin.milliseconds);
+}
+
+Model.Annotation.prototype.setMedia = function(_idRef) {
this.setReference("media", _idRef);
}
-IriSP.Model.Annotation.prototype.getMedia = function() {
+Model.Annotation.prototype.getMedia = function() {
return this.getReference("media");
}
-IriSP.Model.Annotation.prototype.setAnnotationType = function(_idRef) {
+Model.Annotation.prototype.setAnnotationType = function(_idRef) {
this.setReference("annotationType", _idRef);
}
-IriSP.Model.Annotation.prototype.getAnnotationType = function() {
+Model.Annotation.prototype.getAnnotationType = function() {
return this.getReference("annotationType");
}
-IriSP.Model.Annotation.prototype.setTags = function(_idRefs) {
+Model.Annotation.prototype.setTags = function(_idRefs) {
this.setReference("tag", _idRefs);
}
-IriSP.Model.Annotation.prototype.getTags = function() {
+Model.Annotation.prototype.getTags = function() {
return this.getReference("tag");
}
-IriSP.Model.Annotation.prototype.getTagTexts = function() {
+Model.Annotation.prototype.getTagTexts = function() {
return this.getTags().getTitles();
}
-IriSP.Model.Annotation.prototype.getDuration = function() {
- return new IriSP.Model.Time(this.end.milliseconds - this.begin.milliseconds)
+Model.Annotation.prototype.getDuration = function() {
+ return new Model.Time(this.end.milliseconds - this.begin.milliseconds)
+}
+
+/* */
+
+Model.MashedAnnotation = function(_mashup, _annotation) {
+ Model.Element.call(this, _mashup.id + "_" + _annotation.id, _annotation.source);
+ this.elementType = 'mashedAnnotation';
+ this.annotation = _annotation;
+ this.begin = new Model.Time();
+ this.end = new Model.Time();
+ this.duration = new Model.Time();
+ this.title = this.annotation.title;
+ this.description = this.annotation.description;
+ this.color = this.annotation.color;
+ var _this = this;
+ this.on("click", function() {
+ _mashup.setCurrentTime(_this.begin);
+ });
+ this.on("enter", function() {
+ _this.annotation.trigger("enter");
+ });
+ this.on("leave", function() {
+ _this.annotation.trigger("leave");
+ });
+}
+
+Model.MashedAnnotation.prototype = new Model.Element(null);
+
+Model.MashedAnnotation.prototype.getMedia = function() {
+ return this.annotation.getReference("media");
+}
+
+Model.MashedAnnotation.prototype.getAnnotationType = function() {
+ return this.annotation.getReference("annotationType");
+}
+
+Model.MashedAnnotation.prototype.getTags = function() {
+ return this.annotation.getReference("tag");
+}
+
+Model.MashedAnnotation.prototype.getTagTexts = function() {
+ return this.annotation.getTags().getTitles();
+}
+
+Model.MashedAnnotation.prototype.getDuration = function() {
+ return this.annotation.getDuration();
+}
+
+Model.MashedAnnotation.prototype.setBegin = function(_begin) {
+ this.begin.setMilliseconds(_begin);
+ this.duration.setMilliseconds(this.annotation.getDuration());
+ this.end.setMilliseconds(_begin + this.duration);
}
/* */
-IriSP.Model.MashedAnnotation = function(_mashup, _annotation) {
- IriSP.Model.Element.call(this, _mashup.id + "_" + _annotation.id, _annotation.source);
- this.elementType = 'mashedAnnotation';
- this.annotation = _annotation;
- this.begin = new IriSP.Model.Time(_mashup.duration);
- this.end = new IriSP.Model.Time(_mashup.duration + _annotation.getDuration());
- this.title = this.annotation.title;
- this.description = this.annotation.description;
- this.color = this.annotation.color;
-}
-
-IriSP.Model.MashedAnnotation.prototype = new IriSP.Model.Element(null);
-
-IriSP.Model.MashedAnnotation.prototype.getMedia = function() {
- return this.annotation.getReference("media");
-}
-
-IriSP.Model.MashedAnnotation.prototype.getAnnotationType = function() {
- return this.annotation.getReference("annotationType");
-}
-
-IriSP.Model.MashedAnnotation.prototype.getTags = function() {
- return this.annotation.getReference("tag");
+Model.Mashup = function(_id, _source) {
+ Model.Playable.call(this, _id, _source);
+ this.elementType = 'mashup';
+ this.duration = new Model.Time();
+ this.segments = new Model.List(_source.directory);
+ this.loaded = false;
+ var _this = this;
+ this._updateTimes = function() {
+ _this.updateTimes();
+ _this.trigger("change");
+ }
+ this.on("add", this._updateTimes);
+ this.on("remove", this._updateTimes);
}
-IriSP.Model.MashedAnnotation.prototype.getTagTexts = function() {
- return this.annotation.getTags().getTitles();
-}
-
-/* */
+Model.Mashup.prototype = new Model.Playable();
-IriSP.Model.Mashup = function(_id, _source) {
- IriSP.Model.Element.call(this, _id, _source);
- this.elementType = 'mashup';
- this.duration = new IriSP.Model.Time();
- this.segments = new IriSP.Model.List(_source.directory);
- this.medias = new IriSP.Model.List(_source.directory);
+Model.Mashup.prototype.checkLoaded = function() {
+ var loaded = !!this.segments.length;
+ this.getMedias().forEach(function(_m) {
+ loaded = loaded && _m.loaded;
+ });
+ this.loaded = loaded;
+ if (loaded) {
+ this.trigger("loadedmetadata");
+ }
}
-IriSP.Model.Mashup.prototype = new IriSP.Model.Element();
-
-IriSP.Model.Mashup.prototype.addSegment = function(_annotation) {
- var _mashedAnnotation = new IriSP.Model.MashedAnnotation(this, _annotation);
- this.duration.setMilliseconds(_mashedAnnotation.end);
- this.segments.push(_mashedAnnotation);
- this.medias.push(_annotation.getMedia());
+Model.Mashup.prototype.updateTimes = function() {
+ var _time = 0;
+ this.segments.forEach(function(_segment) {
+ _segment.setBegin(_time);
+ _time = _segment.end;
+ });
+ this.duration.setMilliseconds(_time);
}
-IriSP.Model.Mashup.prototype.addSegmentById = function(_elId) {
- var _annotation = this.source.getElement(_elId);
+Model.Mashup.prototype.addAnnotation = function(_annotation, _defer) {
+ var _mashedAnnotation = new Model.MashedAnnotation(this, _annotation),
+ _defer = _defer || false;
+ this.segments.push(_mashedAnnotation);
+ _annotation.on("change-begin", this._updateTimes);
+ _annotation.on("change-end", this._updateTimes);
+ if (!_defer) {
+ this.trigger("add");
+ }
+}
+
+Model.Mashup.prototype.addAnnotationById = function(_elId, _defer) {
+ var _annotation = this.source.getElement(_elId),
+ _defer = _defer || false;
if (typeof _annotation !== "undefined") {
- this.addSegment(_annotation);
+ this.addAnnotation(_annotation, _defer);
}
}
-IriSP.Model.Mashup.prototype.getAnnotations = function() {
+Model.Mashup.prototype.addAnnotations = function(_segments) {
+ var _this = this;
+ ns._(_segments).forEach(function(_segment) {
+ _this.addAnnotation(_segment, true);
+ });
+ this.trigger("add");
+}
+
+Model.Mashup.prototype.addAnnotationsById = function(_segments) {
+ var _this = this;
+ ns._(_segments).forEach(function(_segment) {
+ _this.addAnnotationById(_segment, true);
+ });
+ this.trigger("add");
+}
+
+Model.Mashup.prototype.removeAnnotation = function(_annotation, _defer) {
+ var _defer = _defer || false;
+ _annotation.off("change-begin", this._updateTimes);
+ _annotation.off("change-end", this._updateTimes);
+ this.segments.removeId(this.id + "_" + _annotation.id);
+ if (!_defer) {
+ this.trigger("remove");
+ }
+}
+
+Model.Mashup.prototype.removeAnnotationById = function(_annId, _defer) {
+ var _defer = _defer || false;
+ var _annotation = this.source.getElement(_annId);
+
+ if (_annotation) {
+ this.removeAnnotation(_annotation, _defer);
+ }
+ if (!_defer) {
+ this.trigger("remove");
+ }
+}
+
+Model.Mashup.prototype.setAnnotations = function(_segments) {
+ while (this.segments.length) {
+ this.removeAnnotation(this.segments[0].annotation, true);
+ }
+ this.addAnnotations(_segments);
+}
+
+Model.Mashup.prototype.setAnnotationsById = function(_segments) {
+ while (this.segments.length) {
+ this.removeAnnotation(this.segments[0].annotation, true);
+ }
+ this.addAnnotationsById(_segments);
+}
+
+Model.Mashup.prototype.hasAnnotation = function(_annotation) {
+ return !!ns._(this.segments).find(function(_s) {
+ return _s.annotation === _annotation
+ });
+}
+
+Model.Mashup.prototype.getAnnotation = function(_annotation) {
+ return ns._(this.segments).find(function(_s) {
+ return _s.annotation === _annotation
+ });
+}
+
+Model.Mashup.prototype.getAnnotationById = function(_id) {
+ return ns._(this.segments).find(function(_s) {
+ return _s.annotation.id === _id
+ });
+}
+
+Model.Mashup.prototype.getAnnotations = function() {
return this.segments;
}
-IriSP.Model.Mashup.prototype.getMedias = function() {
- return this.medias;
+Model.Mashup.prototype.getOriginalAnnotations = function() {
+ var annotations = new Model.List(this.source.directory);
+ this.segments.forEach(function(_s) {
+ annotations.push(_s.annotation);
+ });
+ return annotations;
}
-IriSP.Model.Mashup.prototype.getAnnotationsByTypeTitle = function(_title) {
+Model.Mashup.prototype.getMedias = function() {
+ var medias = new Model.List(this.source.directory);
+ this.segments.forEach(function(_annotation) {
+ medias.push(_annotation.getMedia())
+ })
+ return medias;
+}
+
+Model.Mashup.prototype.getAnnotationsByTypeTitle = function(_title) {
var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
if (_annTypes.length) {
return this.getAnnotations().filter(function(_annotation) {
- return IriSP._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
});
} else {
- return new IriSP.Model.List(this.source.directory)
+ return new Model.List(this.source.directory)
}
}
-IriSP.Model.Mashup.prototype.getAnnotationAtTime = function(_time) {
+Model.Mashup.prototype.getAnnotationAtTime = function(_time) {
var _list = this.segments.filter(function(_annotation) {
return _annotation.begin <= _time && _annotation.end > _time;
});
@@ -1180,7 +1215,7 @@
}
}
-IriSP.Model.Mashup.prototype.getMediaAtTime = function(_time) {
+Model.Mashup.prototype.getMediaAtTime = function(_time) {
var _annotation = this.getAnnotationAtTime(_time);
if (typeof _annotation !== "undefined") {
return _annotation.getMedia();
@@ -1191,11 +1226,13 @@
/* */
-IriSP.Model.Source = function(_config) {
- this.status = IriSP.Model._SOURCE_STATUS_EMPTY;
+Model.Source = function(_config) {
+ Model.Element.call(this, false, this);
+ this.status = Model._SOURCE_STATUS_EMPTY;
+ this.elementType = "source";
if (typeof _config !== "undefined") {
var _this = this;
- IriSP._(_config).forEach(function(_v, _k) {
+ ns._(_config).forEach(function(_v, _k) {
_this[_k] = _v;
})
this.callbackQueue = [];
@@ -1204,14 +1241,16 @@
}
}
-IriSP.Model.Source.prototype.addList = function(_listId, _contents) {
+Model.Source.prototype = new Model.Element();
+
+Model.Source.prototype.addList = function(_listId, _contents) {
if (typeof this.contents[_listId] === "undefined") {
- this.contents[_listId] = new IriSP.Model.List(this.directory);
+ this.contents[_listId] = new Model.List(this.directory);
}
this.contents[_listId].addElements(_contents);
}
-IriSP.Model.Source.prototype.getList = function(_listId, _global) {
+Model.Source.prototype.getList = function(_listId, _global) {
_global = (typeof _global !== "undefined" && _global);
if (_global || typeof this.contents[_listId] === "undefined") {
return this.directory.getGlobalList().filter(function(_e) {
@@ -1222,80 +1261,80 @@
}
}
-IriSP.Model.Source.prototype.forEach = function(_callback) {
+Model.Source.prototype.forEach = function(_callback) {
var _this = this;
- IriSP._(this.contents).forEach(function(_value, _key) {
+ ns._(this.contents).forEach(function(_value, _key) {
_callback.call(_this, _value, _key);
})
}
-IriSP.Model.Source.prototype.getElement = function(_elId) {
+Model.Source.prototype.getElement = function(_elId) {
return this.directory.getElement(_elId);
}
-IriSP.Model.Source.prototype.get = function() {
- this.status = IriSP.Model._SOURCE_STATUS_WAITING;
+Model.Source.prototype.get = function() {
+ this.status = Model._SOURCE_STATUS_WAITING;
this.handleCallbacks();
}
/* We defer the callbacks calls so they execute after the queue is cleared */
-IriSP.Model.Source.prototype.deferCallback = function(_callback) {
+Model.Source.prototype.deferCallback = function(_callback) {
var _this = this;
- IriSP._.defer(function() {
+ ns._.defer(function() {
_callback.call(_this);
});
}
-IriSP.Model.Source.prototype.handleCallbacks = function() {
- this.status = IriSP.Model._SOURCE_STATUS_READY;
+Model.Source.prototype.handleCallbacks = function() {
+ this.status = Model._SOURCE_STATUS_READY;
while (this.callbackQueue.length) {
this.deferCallback(this.callbackQueue.splice(0,1)[0]);
}
}
-IriSP.Model.Source.prototype.onLoad = function(_callback) {
- if (this.status === IriSP.Model._SOURCE_STATUS_READY) {
+Model.Source.prototype.onLoad = function(_callback) {
+ if (this.status === Model._SOURCE_STATUS_READY) {
this.deferCallback(_callback);
} else {
this.callbackQueue.push(_callback);
}
}
-IriSP.Model.Source.prototype.serialize = function() {
+Model.Source.prototype.serialize = function() {
return this.serializer.serialize(this);
}
-IriSP.Model.Source.prototype.deSerialize = function(_data) {
+Model.Source.prototype.deSerialize = function(_data) {
this.serializer.deSerialize(_data, this);
}
-IriSP.Model.Source.prototype.getAnnotations = function(_global) {
+Model.Source.prototype.getAnnotations = function(_global) {
_global = (typeof _global !== "undefined" && _global);
return this.getList("annotation", _global);
}
-IriSP.Model.Source.prototype.getMedias = function(_global) {
+Model.Source.prototype.getMedias = function(_global) {
_global = (typeof _global !== "undefined" && _global);
return this.getList("media", _global);
}
-IriSP.Model.Source.prototype.getTags = function(_global) {
+Model.Source.prototype.getTags = function(_global) {
_global = (typeof _global !== "undefined" && _global);
return this.getList("tag", _global);
}
-IriSP.Model.Source.prototype.getMashups = function(_global) {
+Model.Source.prototype.getMashups = function(_global) {
_global = (typeof _global !== "undefined" && _global);
return this.getList("mashup", _global);
}
-IriSP.Model.Source.prototype.getAnnotationTypes = function(_global) {
+Model.Source.prototype.getAnnotationTypes = function(_global) {
_global = (typeof _global !== "undefined" && _global);
return this.getList("annotationType", _global);
}
-IriSP.Model.Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) {
+Model.Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) {
_global = (typeof _global !== "undefined" && _global);
- var _res = new IriSP.Model.List(this.directory),
+ var _res = new Model.List(this.directory),
_annTypes = this.getAnnotationTypes(_global).searchByTitle(_title);
_annTypes.forEach(function(_annType) {
_res.addElements(_annType.getAnnotations(_global));
@@ -1303,14 +1342,31 @@
return _res;
}
-IriSP.Model.Source.prototype.getDuration = function() {
+Model.Source.prototype.getDuration = function() {
var _m = this.currentMedia;
if (typeof _m !== "undefined") {
return this.currentMedia.duration;
}
}
-IriSP.Model.Source.prototype.merge = function(_source) {
+Model.Source.prototype.getCurrentMedia = function(_opts) {
+ if (typeof this.currentMedia === "undefined") {
+ if (_opts.is_mashup) {
+ var _mashups = this.getMashups();
+ if (_mashups.length) {
+ this.currentMedia = _mashups[0];
+ }
+ } else {
+ var _medias = this.getMedias();
+ if (_medias.length) {
+ this.currentMedia = _medias[0];
+ }
+ }
+ }
+ return this.currentMedia;
+}
+
+Model.Source.prototype.merge = function(_source) {
var _this = this;
_source.forEach(function(_value, _key) {
_this.getList(_key).addElements(_value);
@@ -1319,60 +1375,72 @@
/* */
-IriSP.Model.RemoteSource = function(_config) {
- IriSP.Model.Source.call(this, _config);
+Model.RemoteSource = function(_config) {
+ Model.Source.call(this, _config);
}
-IriSP.Model.RemoteSource.prototype = new IriSP.Model.Source();
+Model.RemoteSource.prototype = new Model.Source();
-IriSP.Model.RemoteSource.prototype.get = function() {
- this.status = IriSP.Model._SOURCE_STATUS_WAITING;
- var _this = this;
- this.serializer.loadData(this.url, function(_result) {
- _this.deSerialize(_result);
- _this.handleCallbacks();
+Model.RemoteSource.prototype.get = function() {
+ this.status = Model._SOURCE_STATUS_WAITING;
+ var _this = this,
+ urlparams = this.url_params || {},
+ dataType = (Model.isLocalURL(this.url) ? "json" : "jsonp");
+ urlparams.format = dataType;
+ ns.jQuery.ajax({
+ url: this.url,
+ dataType: dataType,
+ data: urlparams,
+ success: function(_result) {
+ _this.deSerialize(_result);
+ _this.handleCallbacks();
+ }
});
}
/* */
-IriSP.Model.Directory = function() {
+Model.Directory = function() {
this.remoteSources = {};
this.elements = {};
}
-IriSP.Model.Directory.prototype.remoteSource = function(_properties) {
+Model.Directory.prototype.remoteSource = function(_properties) {
if (typeof _properties !== "object" || typeof _properties.url === "undefined") {
- throw "Error : IriSP.Model.Directory.remoteSource(configuration): configuration.url is undefined";
+ throw "Error : Model.Directory.remoteSource(configuration): configuration.url is undefined";
}
- var _config = IriSP._({ directory: this }).extend(_properties);
- if (typeof this.remoteSources[_properties.url] === "undefined") {
- this.remoteSources[_properties.url] = new IriSP.Model.RemoteSource(_config);
+ var _config = ns._({ directory: this }).extend(_properties);
+ _config.url_params = _config.url_params || {};
+ var _hash = _config.url + "?" + ns.jQuery.param(_config.url_params);
+ if (typeof this.remoteSources[_hash] === "undefined") {
+ this.remoteSources[_hash] = new Model.RemoteSource(_config);
}
- return this.remoteSources[_properties.url];
+ return this.remoteSources[_hash];
}
-IriSP.Model.Directory.prototype.newLocalSource = function(_properties) {
- var _config = IriSP._({ directory: this }).extend(_properties),
- _res = new IriSP.Model.Source(_config);
+Model.Directory.prototype.newLocalSource = function(_properties) {
+ var _config = ns._({ directory: this }).extend(_properties),
+ _res = new Model.Source(_config);
return _res;
}
-IriSP.Model.Directory.prototype.getElement = function(_id) {
+Model.Directory.prototype.getElement = function(_id) {
return this.elements[_id];
}
-IriSP.Model.Directory.prototype.addElement = function(_element) {
+Model.Directory.prototype.addElement = function(_element) {
this.elements[_element.id] = _element;
}
-IriSP.Model.Directory.prototype.getGlobalList = function() {
- var _res = new IriSP.Model.List(this);
- _res.addIds(IriSP._(this.elements).keys());
+Model.Directory.prototype.getGlobalList = function() {
+ var _res = new Model.List(this);
+ _res.addIds(ns._(this.elements).keys());
return _res;
}
-/* */
+return Model;
+
+})(IriSP);
IriSP.language = 'en';
IriSP.libFiles = {
@@ -1389,15 +1457,29 @@
raphael : "raphael-min.js",
tracemanager : "tracemanager.js",
jwPlayerSWF : "player.swf",
- json : "json2.js"
+ json : "json2.js",
+ zeroClipboardJs: "ZeroClipboard.js",
+ zeroClipboardSwf: "ZeroClipboard.swf",
+ backbone: "backbone.js",
+ backboneRelational: "backbone-relational.js",
+ paper: "paper.js",
+ jqueryMousewheel: "jquery.mousewheel.min.js",
+ renkanPublish: "renkan-publish.js",
+ processing: "processing-1.3.6.min.js",
+ recordMicSwf: "record_mic.swf"
},
locations : {
- // use to define locations outside defautl_dir
+ // use to define locations outside default_dir
},
cdn : {
- jQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.js",
+ jQuery : "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js",
+ jQueryUI : "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.min.js",
swfObject : "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
- cssjQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css"
+ cssjQueryUI : "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/themes/ui-lightness/jquery-ui.css",
+ underscore : "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
+ Mustache : "http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.5.0-dev/mustache.min.js",
+ raphael : "http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js",
+ json : "http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"
},
useCdn : false
}
@@ -1405,20 +1487,56 @@
IriSP.widgetsDir = 'widgets';
IriSP.widgetsRequirements = {
+ PopcornPlayer: {
+ noCss: true,
+ requires: [ "popcorn" ]
+ },
+ JwpPlayer: {
+ noCss: true,
+ requires: [ "jwplayer" ]
+ },
+ DailymotionPlayer: {
+ noCss: true,
+ requires: [ "swfObject" ]
+ },
+ AdaptivePlayer: {
+ noCss: true
+ },
+ AutoPlayer: {
+ noCss: true
+ },
+ AnnotationsList: {
+ requires: [ "jwplayer" ]
+ },
Sparkline: {
noCss: true,
- requires: "raphael"
+ requires: [ "raphael" ]
},
Arrow: {
noCss: true,
- requires: "raphael"
+ requires: [ "raphael" ]
},
Mediafragment: {
noCss: true
},
Trace : {
noCss: true,
- requires: "tracemanager"
+ requires: [ "tracemanager" ]
+ },
+ Slideshare: {
+ requires: [ "swfObject" ]
+ },
+ Social: {
+ requires: [ "zeroClipboardJs" ]
+ },
+ Renkan: {
+ requires: [ "backbone", "backboneRelational", "paper", "jqueryMousewheel", "renkanPublish" ]
+ },
+ KnowledgeConcierge: {
+ requires: [ "processing" ]
+ },
+ MultiSegments: {
+ noCss: true
}
}
@@ -1446,16 +1564,18 @@
IriSP.Widgets.Widget = function(player, config) {
-
+
if( typeof player === "undefined") {
/* Probably an abstract call of the class when
* individual widgets set their prototype */
return;
}
+ this.__subwidgets = [];
+
/* Setting all the configuration options */
var _type = config.type,
- _config = IriSP._.defaults({}, config, player.config.gui.default_options, this.defaults),
+ _config = IriSP._.defaults({}, config, player.config.default_options, this.defaults),
_this = this;
IriSP._(_config).forEach(function(_value, _key) {
@@ -1463,7 +1583,7 @@
});
if (typeof this.width === "undefined") {
- this.width = player.config.gui.width;
+ this.width = player.config.width;
}
/* Setting this.player at the end in case it's been overriden
@@ -1476,7 +1596,17 @@
/* Call draw when loaded */
this.source.onLoad(function() {
+ if (_this.media_id) {
+ _this.media = this.getElement(_this.media_id);
+ } else {
+ var _mediaopts = {
+ is_mashup: _this.is_mashup || false
+ }
+ _this.media = this.getCurrentMedia(_mediaopts);
+ }
+
_this.draw();
+ player.trigger("widget-loaded");
});
/* Adding classes and html attributes */
@@ -1517,36 +1647,77 @@
return _function.apply(_this, Array.prototype.slice.call(arguments, 0));
}
} else {
- console.log("Error, Unknown function IriSP." + this.type + "." + _name)
+ console.log("Error, Unknown function IriSP.Widgets." + this.type + "." + _name)
+ }
+}
+
+IriSP.Widgets.Widget.prototype.getFunctionOrName = function(_functionOrName) {
+ switch (typeof _functionOrName) {
+ case "function":
+ return _functionOrName;
+ case "string":
+ return this.functionWrapper(_functionOrName);
+ default:
+ return undefined;
}
}
-IriSP.Widgets.Widget.prototype.bindPopcorn = function(_popcornEvent, _functionName) {
- this.player.popcorn.listen(_popcornEvent, this.functionWrapper(_functionName))
+IriSP.Widgets.Widget.prototype.onMdpEvent = function(_eventName, _functionOrName) {
+ this.player.on(_eventName, this.getFunctionOrName(_functionOrName));
+}
+
+IriSP.Widgets.Widget.prototype.onMediaEvent = function(_eventName, _functionOrName) {
+ this.media.on(_eventName, this.getFunctionOrName(_functionOrName));
}
IriSP.Widgets.Widget.prototype.getWidgetAnnotations = function() {
- var _curmedia = this.source.currentMedia;
- return typeof this.annotation_type !== "undefined" && this.annotation_type ? _curmedia.getAnnotationsByTypeTitle(this.annotation_type) : _curmedia.getAnnotations();
+ if (typeof this.annotation_type === "undefined") {
+ return this.media.getAnnotations();
+ }
+ if (this.annotation_type.elementType === "annotationType") {
+ return this.annotation_type.getAnnotations();
+ }
+ return this.media.getAnnotationsByTypeTitle(this.annotation_type);
}
IriSP.Widgets.Widget.prototype.getWidgetAnnotationsAtTime = function() {
- var _time = Math.floor(this.player.popcorn.currentTime() * 1000);
+ var _time = this.media.getCurrentTime();
return this.getWidgetAnnotations().filter(function(_annotation) {
return _annotation.begin <= _time && _annotation.end > _time;
});
}
-IriSP.Widgets.Widget.prototype.insertSubwidget = function(_selector, _propname, _widgetoptions) {
+IriSP.Widgets.Widget.prototype.isLoaded = function() {
+ var isloaded = !IriSP._(this.__subwidgets).any(function(w) {
+ return !(w && w.isLoaded());
+ });
+ return isloaded;
+}
+
+IriSP.Widgets.Widget.prototype.insertSubwidget = function(_selector, _widgetoptions, _propname) {
var _id = _selector.attr("id"),
- _this = this;
+ _this = this,
+ _type = _widgetoptions.type,
+ $L = $LAB,
+ key = this.__subwidgets.length;
+ this.__subwidgets.push(null);
if (typeof _id == "undefined") {
_id = IriSP._.uniqueId(this.container + '_sub_widget_' + _widgetoptions.type);
_selector.attr("id", _id);
}
_widgetoptions.container = _id;
- _this.player.loadWidget(_widgetoptions, function(_widget) {
- _this[_propname] = _widget;
+ if (typeof IriSP.widgetsRequirements[_type] !== "undefined" && typeof IriSP.widgetsRequirements[_type].requires !== "undefined" ) {
+ for (var _j = 0; _j < IriSP.widgetsRequirements[_type].requires.length; _j++) {
+ $L.script(IriSP.getLib(IriSP.widgetsRequirements[_type].requires[_j]));
+ }
+ }
+ $L.wait(function() {
+ _this.player.loadWidget(_widgetoptions, function(_widget) {
+ if (_propname) {
+ _this[_propname] = _widget;
+ }
+ _this.__subwidgets[key] = _widget;
+ });
});
}
@@ -1555,641 +1726,6 @@
*/
IriSP.Widgets.Widget.prototype.draw = function() {
/* implemented by "sub-classes" */
-};/* To wrap a player the develop should create a new class derived from
-the IriSP.PopcornReplacement.player and defining the correct functions */
-
-/** allocine player wrapper */
-IriSP.PopcornReplacement.allocine = function(container, options) {
-// console.log("Calling allocine player");
- /* appel du parent pour initialiser les structures communes à tous les players */
- IriSP.PopcornReplacement.player.call(this, container, options);
-
- var _this = this;
-
- /* Définition des fonctions de l'API - */
-
- this.playerFns = {
- play : function() {
- return _this.apiCall("play");
- },
- pause : function() {
- return _this.apiCall("pause");
- },
- getPosition : function() {
- return _this.apiCall("getSeek","return") || 0;
- },
- seek : function(pos) {
- return _this.apiCall("seek",pos);
- },
- getMute : function() {
- return _this.apiCall("getMute","return");
- },
- setMute : function(p) {
- return _this.apiCall("setMute", p);
- }
- }
-
- window.onReady = function() {
- _this.ready();
- };
- window.onAllocineStateChange = function(_state) {
- _this.stateHandler(_state)
- }
- window.onTime = function(_progress) {
- _this.progressHandler(_progress)
- };
-
- var _flashVars = {
- "streamFMS" : true,
- "adVast" : false,
- "lg" : "fr_cinecast",
- "autoPlay" : options.autoPlay,
- "directVideoTitle" : "",
- "urlAcData" : options.urlAcData,
- "directVideoPath" : options.video,
- "host" : "http://allocine.fr"
- }
-
- if (typeof IriSP.__jsonMetadata["medias"][0].meta == "object" && typeof IriSP.__jsonMetadata["medias"][0].meta.subtitles == "string") {
- _flashVars.subTitlePath = IriSP.__jsonMetadata["medias"][0].meta.subtitles;
- }
-
-
- var params = {
- "allowScriptAccess" : "always",
- "wmode": "opaque",
- "flashvars" : IriSP.jQuery.param(_flashVars),
- "allowfullscreen" : true
- };
- var atts = {
- id : this.container
- };
- swfobject.embedSWF(options.acPlayerUrl, this.container, options.width, options.height, "10", null, null, params, atts);
-
-};
-
-IriSP.PopcornReplacement.allocine.prototype = new IriSP.PopcornReplacement.player("", {});
-
-IriSP.PopcornReplacement.allocine.prototype.ready = function() {
- this.player = document.getElementById(this.container);
- this.player.addEventListener("onStateChange", "onAllocineStateChange");
- this.player.cueVideoByUrl(this._options.video);
- this.trigger("loadedmetadata");
-};
-
-IriSP.PopcornReplacement.allocine.prototype.progressHandler = function(progressInfo) {
- this.trigger("timeupdate");
-}
-
-
-IriSP.PopcornReplacement.allocine.prototype.apiCall = function(_method, _arg) {
- if (this.player) {
- try {
- if (typeof _arg == "undefined") {
- return this.player.sendToActionScript(_method);
- } else {
- return this.player.sendToActionScript(_method, _arg);
- }
- } catch(e) {
- console.error('Exception while requesting AcPlayer for "' + _method + (typeof _arg == "undefined" ? '' : '" with argument "' + _arg ) + '"\n', e);
- return false;
- }
- } else {
- return false;
- }
-}
-
-IriSP.PopcornReplacement.allocine.prototype.stateHandler = function(state) {
- switch(state) {
- case 1:
- this.trigger("play");
- break;
-
- case 2:
- this.trigger("pause");
- break;
-
- case 3:
- this.trigger("seeked");
- break;
- }
-
-};/* To wrap a player the develop should create a new class derived from
-the IriSP.PopcornReplacement.player and defining the correct functions */
-
-/** jwplayer player wrapper */
-IriSP.PopcornReplacement.dailymotion = function(container, options) {
- /* Appel du constructeur de la classe parente */
- IriSP.PopcornReplacement.player.call(this, container, options);
-
- var _this = this;
-
- /* Définition des fonctions de commande :
- this.playerFns.play, .pause, .getPosition, .seek,
- .getMute, .setMute, .getVolume, .setVolume
- doivent être rattachés aux fonctions du player
- * */
-
- this.playerFns = {
- play : function() {
- if (_this.player) {
- return _this.player.playVideo();
- } else {
- return false;
- }
- },
- pause : function() {
- if (_this.player) {
- return _this.player.pauseVideo();
- } else {
- return false;
- }
- },
- getPosition : function() {
- if (_this.player) {
- return _this.player.getCurrentTime();
- } else {
- return 0;
- }
- },
- seek : function(pos) {
- if (_this.player) {
- return _this.player.seekTo(pos);
- } else {
- return false;
- }
- },
- getMute : function() {
- if (_this.player) {
- return _this.player.isMuted();
- } else {
- return false;
- }
- },
- setMute : function(p) {
- if (_this.player) {
- if (p) {
- _this.player.mute();
- }
- else {
- _this.player.unMute();
- }
- }
- },
- getVolume : function() {
- if (_this.player) {
- return _this.player.getVolume() / 100;
- } else {
- return false;
- }
- },
- setVolume : function(p) {
- if (_this.player) {
- _this.player.setVolume(Math.floor(100 * p));
- }
- },
- }
-
- /* Dailymotion utilise un système de fonctions référencées dans
- * des variables globales pour la gestion des événements.
- */
-
- window.onDailymotionPlayerReady = function() {
- _this.onReady();
- };
- window.onDailymotionStateChange = function(_state) {
- _this.onStateChange(_state);
- }
- window.onDailymotionVideoProgress = function(_progress) {
- _this.onProgress(_progress);
- }
-
- var params = {
- "allowScriptAccess" : "always",
- "wmode": "opaque"
- };
- var atts = {
- id : this.container
- };
- swfobject.embedSWF("http://www.dailymotion.com/swf?chromeless=1&enableApi=1", this.container, options.width, options.height, "8", null, null, params, atts);
-
-};
-
-IriSP.PopcornReplacement.dailymotion.prototype = new IriSP.PopcornReplacement.player("", {});
-
-IriSP.PopcornReplacement.dailymotion.prototype.onReady = function() {
-
- this.player = document.getElementById(this.container);
-
- this.player.addEventListener("onStateChange", "onDailymotionStateChange");
- this.player.addEventListener("onVideoProgress", "onDailymotionVideoProgress");
- this.player.cueVideoByUrl(this._options.video);
-
- this.trigger("loadedmetadata");
-};
-
-IriSP.PopcornReplacement.dailymotion.prototype.onProgress = function(progressInfo) {
- this.trigger("timeupdate");
-}
-
-IriSP.PopcornReplacement.dailymotion.prototype.onStateChange = function(state) {
-
- switch(state) {
- case 1:
- this.trigger("play");
- break;
-
- case 2:
- this.trigger("pause");
- break;
-
- case 3:
- this.trigger("seeked");
- break;
- }
-
-};/* To wrap a player the develop should create a new class derived from
- the IriSP.PopcornReplacement.player and defining the correct functions */
-
-/** jwplayer player wrapper */
-IriSP.PopcornReplacement.jwplayer = function(container, options) {
- /* appel du parent pour initialiser les structures communes à tous les players */
- IriSP.PopcornReplacement.player.call(this, container, options);
-
- if (options.autostart) {
- this.media.paused = false;
- this.trigger("play");
- }
-
- var _player = jwplayer(this.container),
- _this = this,
- _seekPause = false;
-
- /* Définition des fonctions de l'API - */
- this.playerFns = {
- play: function() { return _player.play(true); },
- pause: function() { return _player.pause(true); },
- getPosition: function() { return _player.getPosition(); },
- seek: function(pos) {
- _seekPause = _this.media.paused;
- return _player.seek(pos);
- },
- getMute: function() { return _player.getMute() },
- setMute: function(p) { return _player.setMute(p); },
- getVolume: function() { return _player.getVolume() / 100; },
- setVolume: function(p) { return _player.setVolume(Math.floor(100*p)); }
- }
-
- options.events = {
- onReady: function() {
- _this.trigger("loadedmetadata");
- },
- onTime: function() {
- if (_seekPause) {
- _player.pause(true);
- _seekPause = false;
- } else {
- if (_this.media.paused && _player.getState() === "PLAYING") {
- _this.media.paused = false;
- _this.trigger("play");
- }
- }
- _this.trigger("timeupdate");
- },
- onPlay: function() {
- if (!_seekPause) {
- _this.media.paused = false;
- _this.trigger("play");
- }
- },
- onPause: function() {
- _this.media.paused = true;
- _this.trigger("pause");
- },
- onSeek: function() {
- _this.trigger("seeked");
- }
- };
-
- _player.setup(options);
-};
-
-IriSP.PopcornReplacement.jwplayer.prototype = new IriSP.PopcornReplacement.player("", {});
-/* To wrap a player the develop should create a new class derived from
- the IriSP.PopcornReplacement.player and defining the correct functions */
-
-/** jwplayer player wrapper */
-IriSP.PopcornReplacement.htmlMashup = function(container, options, metadata) {
- /* appel du parent pour initialiser les structures communes à tous les players */
- IriSP.PopcornReplacement.player.call(this, container, options);
-
- this.mashup = metadata.currentMedia;
- this.$ = IriSP.jQuery(container);
-
- var _w = this.$.width(),
- _h = this.$.height(),
- _this = this;
-
- IriSP._(metadata.currentMedia.medias).each(function(_media) {
- var _tmpId = Popcorn.guid("video"),
- _videoEl = IriSP.jQuery('<video>'),
- _videoUrl = _media.video;
- if (typeof options.url_transform === "function") {
- _videoUrl = options.url_transform(_videoUrl);
- }
-
- _videoEl
- .attr({
- src : _videoUrl,
- id : _tmpId,
- width : _w,
- height : _h
- })
- .css({
- position: "absolute",
- top: 0,
- left: 0
- });
-
- _this.$.append(_videoEl);
- _media.videoEl = _videoEl;
- _media.popcorn = Popcorn("#" + _tmpId);
- _media.loadedMetadata = false;
- _media.popcorn.on("loadedmetadata", function() {
- _media.loadedMetadata = true;
- var _allLoaded = true;
- for (var _i = 0; _i < metadata.currentMedia.medias.length; _i++) {
- _allLoaded = _allLoaded && metadata.currentMedia.medias[_i].loadedMetadata;
- }
- if (_allLoaded) {
- _this.changeCurrentAnnotation();
- _this.trigger("loadedmetadata");
- }
- });
- _media.popcorn.on("timeupdate", function() {
- if (!_this.media.paused && _media === _this.currentMedia) {
- var _time = Math.round( 1000 * _media.popcorn.currentTime() );
-// var _status = "Timeupdate from " + _media.id + " at time " + _time;
- if ( _time < _this.segmentEnd ) {
- if ( _time >= _this.segmentBegin ) {
- _this.timecode = _time - _this.timedelta;
-// _status += " within segment";
- } else {
- _this.timecode = _this.segmentBegin - _this.timedelta;
- _media.popcorn.currentTime(_this.segmentBegin / 1000);
-// _status += " before segment";
- }
- } else {
- _this.timecode = _this.segmentEnd - _this.timedelta;
- _media.popcorn.pause();
- _this.changeCurrentAnnotation();
-// _status += " after segment";
- }
-// _status += " (" + _this.segmentBegin + " to " + _this.segmentEnd + ")" + ", translated to " + _this.timecode;
-// console.log(_status);
- _this.trigger("timeupdate");
- }
- });
- });
-
- this.timecode = 0;
-
- /* Définition des fonctions de l'API */
- this.playerFns = {
- play: function() {
- _this.changeCurrentAnnotation();
- },
- pause: function() {
- _this.currentMedia.popcorn.pause();
- },
- getPosition: function() {
- return _this.timecode / 1000;
- },
- seek: function(pos) {
- _this.timecode = Math.round(pos * 1000);
- _this.changeCurrentAnnotation();
- },
- getMute: function() {
- var _res = (
- typeof _this.currentMedia !== "undefined"
- ? _this.currentMedia.popcorn.muted()
- : false
- );
- return _res;
- },
- setMute: function(p) {
- var _mute = !!p;
- for (var _i = 0; _i < _this.mashup.medias.length; _i++) {
- _this.mashup.medias[_i].popcorn.muted(_mute);
- }
- },
- getVolume: function() {
- var _res = (
- typeof _this.currentMedia !== "undefined"
- ? _this.currentMedia.popcorn.volume()
- : .5
- );
- return _res;
- },
- setVolume: function(_vol) {
- for (var _i = 0; _i < _this.mashup.medias.length; _i++) {
- _this.mashup.medias[_i].popcorn.volume(_vol);
- }
- }
- }
-
-};
-
-IriSP.PopcornReplacement.htmlMashup.prototype = new IriSP.PopcornReplacement.player("", {});
-
-IriSP.PopcornReplacement.htmlMashup.prototype.changeCurrentAnnotation = function() {
- var _annotation = this.mashup.getAnnotationAtTime( this.timecode );
- if (typeof _annotation == "undefined") {
- if (typeof this.currentMedia !== "undefined") {
- this.currentMedia.popcorn.pause();
- if (!this.media.paused) {
- this.media.paused = true;
- this.trigger("pause");
- }
- }
- return;
- }
- if (_annotation !== this.currentAnnotation) {
- this.currentAnnotation = _annotation;
- this.segmentBegin = this.currentAnnotation.annotation.begin.milliseconds;
- this.segmentEnd = this.currentAnnotation.annotation.end.milliseconds;
- this.timedelta = this.segmentBegin - this.currentAnnotation.begin.milliseconds;
- this.currentMedia = this.currentAnnotation.getMedia();
-
- for (var _i = 0; _i < this.mashup.medias.length; _i++) {
- if (this.mashup.medias[_i].id !== this.currentMedia.id) {
- this.mashup.medias[_i].videoEl.hide();
- this.mashup.medias[_i].popcorn.pause();
- } else {
- this.mashup.medias[_i].videoEl.show();
- }
- }
-/* PRELOADING */
- var _this = this,
- _preloadedMedias = [],
- _toPreload = this.mashup.getAnnotations().filter(function(_a) {
- return (_a.begin >= _this.currentAnnotation.end && _a.getMedia().id !== _this.currentMedia.id);
- });
- IriSP._(_toPreload).each(function(_a) {
- var _media = _a.getMedia();
- if (IriSP._(_preloadedMedias).indexOf(_media.id) === -1) {
- _preloadedMedias.push(_media.id);
- _media.popcorn.currentTime(_a.annotation.begin.getSeconds());
- //console.log("Preloading ", _media.id, " at t=", _a.annotation.begin.getSeconds());
- }
- });
-
-// console.log("Changed segment: media="+ this.currentMedia.id + ", from=" + this.segmentBegin + " to=" + this.segmentEnd +", timedelta = ", this.timedelta)
-// } else {
-// console.log("changeCurrentAnnotation called, but segment hasn't changed");
- }
- if (this.currentMedia.popcorn.readyState()) {
- this.currentMedia.popcorn.currentTime( (this.timecode + this.timedelta) / 1000);
- this.trigger("timeupdate");
- }
- if (!this.media.paused) {
- this.currentMedia.popcorn.play();
- }
-}
-/* To wrap a player the develop should create a new class derived from
-the IriSP.PopcornReplacement.player and defining the correct functions */
-
-/** jwplayer player wrapper */
-IriSP.PopcornReplacement.mashup = function(container, options) {
- /* Appel du constructeur de la classe parente */
- IriSP.PopcornReplacement.player.call(this, container, options);
-
- var _this = this;
-
- /* Définition des fonctions de commande :
- this.playerFns.play, .pause, .getPosition, .seek,
- .getMute, .setMute, .getVolume, .setVolume
- doivent être rattachés aux fonctions du player
- * */
-
- this.playerFns = {
- play : function() {
- if (_this.player) {
- return _this.player.playVideo();
- } else {
- return false;
- }
- },
- pause : function() {
- if (_this.player) {
- return _this.player.pauseVideo();
- } else {
- return false;
- }
- },
- getPosition : function() {
- if (_this.player) {
- return _this.player.getCurrentTime();
- } else {
- return 0;
- }
- },
- seek : function(pos) {
- if (_this.player) {
- return _this.player.seekTo(pos);
- } else {
- return false;
- }
- },
- getMute : function() {
- if (_this.player) {
- return _this.player.isMuted();
- } else {
- return false;
- }
- },
- setMute : function(p) {
- if (_this.player) {
- if (p) {
- _this.player.mute();
- }
- else {
- _this.player.unMute();
- }
- }
- },
- getVolume : function() {
- if (_this.player) {
- return _this.player.getVolume() / 2;
- } else {
- return false;
- }
- },
- setVolume : function(p) {
- if (_this.player) {
- _this.player.setVolume(Math.floor(2 * p));
- }
- },
- }
-
- /* Dailymotion utilise un système de fonctions référencées dans
- * des variables globales pour la gestion des événements.
- */
-
- window.onBabPlayerReady = function() {
- _this.onReady();
- };
- window.onBabStateChange = function(_state) {
- _this.onStateChange(_state);
- }
- window.onBabVideoProgress = function(_progress) {
- _this.onProgress(_progress);
- }
-
- var params = {
- allowScriptAccess : "always",
- wmode: "transparent",
- quality: "high",
- menu: true,
- bgcolor: "#869ca7"
- };
- var atts = {
- id : this.container
- };
- var flashvars = {
- urlData: options.mashup_xml
- };
- swfobject.embedSWF(options.mashup_swf, this.container, options.width, options.height, "8", null, flashvars, params, atts);
-
-};
-
-IriSP.PopcornReplacement.mashup.prototype = new IriSP.PopcornReplacement.player("", {});
-
-IriSP.PopcornReplacement.mashup.prototype.onReady = function() {
- this.player = document.getElementById(this.container);
- this.trigger("loadedmetadata");
-};
-
-IriSP.PopcornReplacement.mashup.prototype.onProgress = function(progressInfo) {
- this.trigger("timeupdate");
-}
-
-IriSP.PopcornReplacement.mashup.prototype.onStateChange = function(state) {
-
- switch(state) {
- case 1:
- this.trigger("play");
- break;
-
- case 2:
- this.trigger("pause");
- break;
-
- case 3:
- this.trigger("seeked");
- break;
- }
-
};/* LDT Platform Serializer */
if (typeof IriSP.serializers === "undefined") {
@@ -2223,16 +1759,42 @@
}
return _res;
},
- serializer : function(_data, _source) {
- return {
+ serializer : function(_data, _source, _dest) {
+ var _res = {
id : _data.id,
url : _data.video,
meta : {
- "dc:title" : _data.title,
- "dc:description" : _data.description,
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
"dc:duration" : _data.duration.milliseconds
}
}
+ _dest.medias.push(_res);
+ var _list = {
+ id: IriSP.Model.getUID(),
+ meta : {
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ "id-ref": _data.id
+ },
+ items: _source.getAnnotationTypes().filter(function(_at) {
+ return _at.media === _data;
+ }).map(function(_at) {
+ return {
+ "id-ref": _at.id
+ }
+ })
+ }
+ _dest.lists.push(_list);
+ _dest.views[0].contents.push(_data.id);
}
},
tag : {
@@ -2243,13 +1805,19 @@
_res.title = _data.meta["dc:title"];
return _res;
},
- serializer : function(_data, _source) {
- return {
+ serializer : function(_data, _source, _dest) {
+ var _res = {
id : _data.id,
meta : {
- "dc:title" : _data.title
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
}
}
+ _dest.tags.push(_res);
}
},
annotationType : {
@@ -2260,12 +1828,18 @@
_res.description = _data["dc:description"];
return _res;
},
- serializer : function(_data, _source) {
- return {
+ serializer : function(_data, _source, _dest) {
+ var _res = {
id : _data.id,
- "dc:title" : _data.title,
- "dc:description" : _data.description
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
}
+ _dest["annotation-types"].push(_res);
+ _dest.views[0].annotation_types.push(_data.id);
}
},
annotation : {
@@ -2288,6 +1862,7 @@
_res.setMedia(_data.media);
_res.setAnnotationType(_data.meta["id-ref"]);
_res.setTags(IriSP._(_data.tags).pluck("id-ref"));
+ _res.keywords = _res.getTagTexts();
_res.setBegin(_data.begin);
_res.setEnd(_data.end);
_res.creator = _data.meta["dc:creator"] || "";
@@ -2300,22 +1875,29 @@
}
return _res;
},
- serializer : function(_data, _source) {
- return {
+ serializer : function(_data, _source, _dest) {
+ var _color = parseInt(_data.color.replace(/^#/,''),16).toString();
+ var _res = {
id : _data.id,
begin : _data.begin.milliseconds,
end : _data.end.milliseconds,
content : {
- title : _data.title,
- description : _data.description,
- audio : _data.audio
+ title : _data.title || "",
+ description : _data.description || "",
+ audio : _data.audio,
+ img: {
+ src: _data.thumbnail
+ }
},
+ color: _color,
media : _data.media.id,
meta : {
- "id-ref" : _data.annotationType.id,
- "dc:created" : IriSP.Model.dateToIso(_data.created),
- "dc:creator" : _data.creator,
- project : _source.projectId
+ "id-ref" : _data.getAnnotationType().id,
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+// project : _source.projectId
},
tags : IriSP._(_data.tag.id).map(function(_id) {
return {
@@ -2323,6 +1905,7 @@
}
})
}
+ _dest.annotations.push(_res);
}
},
mashup : {
@@ -2334,41 +1917,64 @@
var _res = new IriSP.Model.Mashup(_data.id, _source);
_res.title = _data.meta["dc:title"];
_res.description = _data.meta["dc:description"];
- for (var _i = 0; _i < _data.items.length; _i++) {
- _res.addSegmentById(_data.items[_i]);
- }
+ _res.creator = _data.meta["dc:creator"];
+ _res.setAnnotationsById(_data.items);
return _res;
},
- serializer : function(_data, _source) {
- return {
+ serializer : function(_data, _source, _dest) {
+ var _res = {
meta : {
- "dc:title": _data.title,
- "dc:description": _data.description,
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
listtype: "mashup"
},
items: _data.segments.map(function(_annotation) {
- return _id;
+ return _annotation.annotation.id;
}),
id: _data.id
}
+ _dest.lists.push(_res);
}
}
},
serialize : function(_source) {
- var _res = {},
+ var _res = {
+ meta: {
+ "dc:creator": _source.creator,
+ "dc:contributor" : _source.contributor || _source.creator,
+ "dc:created": IriSP.Model.dateToIso(_source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_source.modified),
+ "dc:title": _source.title || "",
+ "dc:description": _source.description || "",
+ id: _source.projectId || _source.id
+ },
+ views: [
+ {
+ id: IriSP.Model.getUID(),
+ contents: [],
+ annotation_types: []
+ }
+ ],
+ lists: [],
+ "annotation-types": [],
+ medias: [],
+ tags: [],
+ annotations: []
+ },
_this = this;
_source.forEach(function(_list, _typename) {
if (typeof _this.types[_typename] !== "undefined") {
- _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
- return _this.types[_typename].serializer(_el, _source);
+ _list.forEach(function(_el) {
+ _this.types[_typename].serializer(_el, _source, _res);
});
}
});
return JSON.stringify(_res);
},
- loadData : function(_url, _callback) {
- IriSP.jQuery.getJSON(_url, _callback)
- },
deSerialize : function(_data, _source) {
if (typeof _data !== "object" || _data === null) {
return;
@@ -2400,7 +2006,7 @@
}
if (typeof _data.meta !== "undefined" && typeof _data.meta.main_media !== "undefined" && typeof _data.meta.main_media["id-ref"] !== "undefined") {
- _source.mainMedia = _data.meta.main_media["id-ref"];
+ _source.currentMedia = _source.getElement(_data.meta.main_media["id-ref"]);
}
}
}
@@ -2412,85 +2018,71 @@
}
IriSP.serializers.ldt_annotate = {
- types : {
- annotation : {
- serialized_name : "annotations",
- serializer : function(_data, _source) {
- var _annType = _data.getAnnotationType();
- return {
- begin: _data.begin.milliseconds,
- end: _data.end.milliseconds,
- content: {
- data: _data.description,
- audio: _data.audio
- },
- tags: _data.getTagTexts(),
- media: _data.getMedia().id,
- type_title: _annType.title,
- type: ( typeof _annType.dont_send_id !== "undefined" && _annType.dont_send_id ? "" : _annType.id )
- }
+ serializeAnnotation : function(_data, _source) {
+ var _annType = _data.getAnnotationType();
+ return {
+ begin: _data.begin.milliseconds,
+ end: _data.end.milliseconds,
+ content: {
+ description: _data.description,
+ title: _data.title,
+ audio: _data.audio
+ },
+ tags: _data.getTagTexts(),
+ media: _data.getMedia().id,
+ type_title: _annType.title,
+ type: ( typeof _annType.dont_send_id !== "undefined" && _annType.dont_send_id ? "" : _annType.id ),
+ meta: {
+ created: _data.created,
+ creator: _data.creator
}
}
},
+ deserializeAnnotation : function(_anndata, _source) {
+ var _ann = new IriSP.Model.Annotation(_anndata.id, _source);
+ _ann.description = _anndata.content.description || "";
+ _ann.title = _anndata.content.title || "";
+ _ann.creator = _anndata.meta.creator || "";
+ _ann.created = new Date(_anndata.meta.created);
+ _ann.setMedia(_anndata.media, _source);
+ var _anntype = _source.getElement(_anndata.type);
+ if (!_anntype) {
+ _anntype = new IriSP.Model.AnnotationType(_anndata.type, _source);
+ _anntype.title = _anndata.type_title;
+ _source.getAnnotationTypes().push(_anntype);
+ }
+ _ann.setAnnotationType(_anntype.id);
+ var _tagIds = IriSP._(_anndata.tags).map(function(_title) {
+ var _tags = _source.getTags(true).searchByTitle(_title, true);
+ if (_tags.length) {
+ var _tag = _tags[0];
+ }
+ else {
+ _tag = new IriSP.Model.Tag(_title.replace(/\W/g,'_'),_source);
+ _tag.title = _title;
+ _source.getTags().push(_tag);
+ }
+ return _tag.id;
+ });
+ _ann.setTags(_tagIds);
+ _ann.setBegin(_anndata.begin);
+ _ann.setEnd(_anndata.end);
+ if (typeof _anndata.content.audio !== "undefined" && _anndata.content.audio.href) {
+ _ann.audio = _anndata.content.audio;
+ }
+ _source.getAnnotations().push(_ann);
+ },
serialize : function(_source) {
- var _res = {},
- _this = this;
- _source.forEach(function(_list, _typename) {
- if (typeof _this.types[_typename] !== "undefined") {
- _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
- return _this.types[_typename].serializer(_el, _source);
- });
- }
- });
- _res.meta = {
- creator: _source.creator,
- created: _source.created
- }
- return JSON.stringify(_res);
+ return JSON.stringify(this.serializeAnnotation(_source.getAnnotations()[0], _source));
},
deSerialize : function(_data, _source) {
if (typeof _data == "string") {
_data = JSON.parse(_data);
}
+
_source.addList('tag', new IriSP.Model.List(_source.directory));
_source.addList('annotationType', new IriSP.Model.List(_source.directory));
_source.addList('annotation', new IriSP.Model.List(_source.directory));
- if (typeof _data.annotations == "object" && _data.annotations && _data.annotations.length) {
- var _anndata = _data.annotations[0],
- _ann = new IriSP.Model.Annotation(_anndata.id, _source);
- _ann.description = _anndata.content.data || "";
- _ann.title = _data.creator || "";
- _ann.created = new Date(_data.meta.created);
- _ann.setMedia(_anndata.media, _source);
- var _anntypes = _source.getAnnotationTypes(true).searchByTitle(_anndata.type_title);
- if (_anntypes.length) {
- var _anntype = _anntypes[0];
- } else {
- var _anntype = new IriSP.Model.AnnotationType(_anndata.type, _source);
- _anntype.title = _anndata.type_title;
- _source.getAnnotationTypes().push(_anntype);
- }
- _ann.setAnnotationType(_anntype.id);
- var _tagIds = IriSP._(_anndata.tags).map(function(_title) {
- var _tags = _source.getTags(true).searchByTitle(_title);
- if (_tags.length) {
- var _tag = _tags[0];
- }
- else {
- _tag = new IriSP.Model.Tag(_title.replace(/\W/g,'_'),_source);
- _tag.title = _title;
- _source.getTags().push(_tag);
- }
- return _tag.id;
- });
- _ann.setTags(_tagIds);
- _ann.setBegin(_anndata.begin);
- _ann.setEnd(_anndata.end);
- _ann.creator = _data.meta.creator;
- if (typeof _anndata.content.audio !== "undefined" && _anndata.content.audio.href) {
- _ann.audio = _anndata.content.audio;
- }
- _source.getAnnotations().push(_ann);
- }
+ this.deserializeAnnotation(_data, _source);
}
}
\ No newline at end of file
--- a/web/res/metadataplayer/Mediafragment.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Mediafragment.js Mon Dec 10 10:47:14 2012 +0100
@@ -10,16 +10,22 @@
}
})
};
- this.bindPopcorn("pause","setHashToTime");
- this.bindPopcorn("seeked","setHashToTime");
- this.bindPopcorn("IriSP.Mediafragment.setHashToAnnotation","setHashToAnnotation");
+ this.onMdpEvent("Mediafragment.setHashToAnnotation","setHashToAnnotation");
this.blocked = false;
}
IriSP.Widgets.Mediafragment.prototype = new IriSP.Widgets.Widget();
IriSP.Widgets.Mediafragment.prototype.draw = function() {
+ this.onMediaEvent("pause","setHashToTime");
+ this.onMediaEvent("seeked","setHashToTime");
this.goToHash();
+ var _this = this;
+ this.getWidgetAnnotations().forEach(function(_annotation) {
+ _annotation.on("click", function() {
+ _this.setHashToAnnotation(_annotation.id);
+ })
+ })
}
IriSP.Widgets.Mediafragment.prototype.setWindowHash = function(_hash) {
@@ -52,11 +58,11 @@
if (this.last_hash_key == "id") {
var _annotation = this.source.getElement(this.last_hash_value);
if (typeof _annotation !== "undefined") {
- this.player.popcorn.currentTime(_annotation.begin.getSeconds());
+ this.media.setCurrentTime(_annotation.begin);
}
}
if (this.last_hash_key == "t") {
- this.player.popcorn.currentTime(this.last_hash_value);
+ this.media.setCurrentTime(1000*this.last_hash_value);
}
break;
}
@@ -68,10 +74,8 @@
this.setHash( 'id', _annotationId );
}
-IriSP.Widgets.Mediafragment.prototype.setHashToTime = function(_time) {
- if (_time !== NaN) {
- this.setHash( 't', this.player.popcorn.currentTime() );
- }
+IriSP.Widgets.Mediafragment.prototype.setHashToTime = function() {
+ this.setHash( 't', this.media.getCurrentTime().getSeconds() );
}
IriSP.Widgets.Mediafragment.prototype.setHash = function(_key, _value) {
@@ -100,5 +104,5 @@
window.clearTimeout(this.blockTimeout);
}
this.blocked = true;
- this.blockTimeout = window.setTimeout(this.functionWrapper("unblock"), 1000);
+ this.blockTimeout = window.setTimeout(this.functionWrapper("unblock"), 1500);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/MultiSegments.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,120 @@
+IriSP.Widgets.MultiSegments = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.MultiSegments.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.MultiSegments.prototype.defaults = {
+ annotation_show_arrow: true,
+ annotation_start_minimized: true,
+ annotation_show_annotation_type: true,
+ show_all: false
+}
+
+IriSP.Widgets.MultiSegments.prototype.draw = function() {
+ var _this = this,
+ lines = [],
+ currentLine = null,
+ segmentsopts = {},
+ annotationopts = {};
+ IriSP._(this).each(function(_v,_k) {
+ if (/^segments_/.test(_k)) {
+ segmentsopts[_k.replace(/^segments_/,"")] = _v;
+ }
+ if (/^annotation_/.test(_k)) {
+ annotationopts[_k.replace(/^annotation_/,"")] = _v;
+ }
+ })
+ this.source.getAnnotationTypes().forEach(function(_anntype) {
+ var segments = _anntype.getAnnotations().filter(function(_ann) {
+ return _ann.getDuration() > 0;
+ });
+ if (segments.length) {
+
+ var visible = false;
+
+ var line = {
+ segmentWidget: IriSP.jQuery("<div>"),
+ annotationWidget: IriSP.jQuery("<div>"),
+ hasSegmentsNow: function() {
+ var _time = _this.media.getCurrentTime();
+ return !!segments.filter(function(_annotation) {
+ return _annotation.begin <= _time && _annotation.end > _time;
+ }).length;
+ },
+ hide: function() {
+ if (visible) {
+ visible = false;
+ this.annotationWidget.slideUp();
+ }
+ },
+ show: function() {
+ if (!visible) {
+ visible = true;
+ this.annotationWidget.slideDown();
+ }
+ }
+ }
+
+
+ line.segmentWidget
+ .addClass("Ldt-MultiSegments-Segment")
+ .appendTo(_this.$);
+
+ if (!_this.show_all) {
+ line.segmentWidget.mouseenter(function() {
+ if (line.hasSegmentsNow()) {
+ currentLine = line;
+ checkVisibilities();
+ }
+ });
+ }
+
+ line.annotationWidget
+ .addClass("Ldt-MultiSegments-Annotation")
+ .appendTo(_this.$)
+ .hide();
+
+ _this.insertSubwidget(
+ line.segmentWidget,
+ IriSP._({
+ type: "Segments",
+ annotation_type: _anntype
+ }).extend(segmentsopts)
+ );
+
+ _this.insertSubwidget(
+ line.annotationWidget,
+ IriSP._({
+ type: "Annotation",
+ annotation_type: _anntype
+ }).extend(annotationopts)
+ );
+
+ lines.push(line);
+ }
+ });
+ var _annotationWidgets = _this.$.find(".Ldt-MultiSegments-Annotation")
+
+ function checkVisibilities(_time) {
+ if (!_this.show_all && currentLine && !currentLine.hasSegmentsNow()) {
+ currentLine = undefined;
+ }
+ IriSP._(lines).each(function(line) {
+ if (line.hasSegmentsNow()) {
+ if (!_this.show_all && !currentLine) {
+ currentLine = line;
+ }
+ if (_this.show_all || line === currentLine) {
+ line.show();
+ } else {
+ line.hide();
+ }
+ } else {
+ line.hide();
+ }
+ });
+ }
+
+ this.onMediaEvent("timeupdate", checkVisibilities);
+}
\ No newline at end of file
--- a/web/res/metadataplayer/Polemic.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Polemic.js Mon Dec 10 10:47:14 2012 +0100
@@ -47,45 +47,9 @@
]
};
-IriSP.Widgets.Polemic.prototype.onSearch = function(searchString) {
- this.searchString = typeof searchString !== "undefined" ? searchString : '';
- var _found = 0,
- _re = IriSP.Model.regexpFromTextOrArray(searchString, true),
- _this = this;
- this.$tweets.each(function() {
- var _el = IriSP.jQuery(this);
- if (_this.searchString) {
- if (_re.test(_el.attr("tweet-title"))) {
- _el.css({
- "background" : _this.foundcolor,
- "opacity" : 1
- });
- _found++;
- } else {
- _el.css({
- "background" : _el.attr("polemic-color"),
- "opacity" : .5
- });
- }
- } else {
- _el.css({
- "background" : _el.attr("polemic-color"),
- "opacity" : 1
- });
- }
- });
- if (this.searchString) {
- if (_found) {
- this.player.popcorn.trigger("IriSP.search.matchFound");
- } else {
- this.player.popcorn.trigger("IriSP.search.noMatchFound");
- }
- }
-}
-
IriSP.Widgets.Polemic.prototype.draw = function() {
- this.bindPopcorn("timeupdate", "onTimeupdate");
+ this.onMediaEvent("timeupdate", "onTimeupdate");
this.$zone = IriSP.jQuery('<div>');
this.$zone.addClass("Ldt-Polemic");
this.$.append(this.$zone);
@@ -145,39 +109,77 @@
position: "relative"
});
- var _x = 0,
- _html = '';
+ var _x = 0;
- function displayElement(_x, _y, _color, _id, _title, _polemic) {
- _html += Mustache.to_html(
- '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id={{media_id}}, polemic={{polemic}}" annotation-id="{{id}}" tweet-title="{{title}}" pos-x="{{posx}}" pos-y="{{top}}" polemic-color="{{color}}"'
- + ' style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
+ function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
+ var _html = Mustache.to_html(
+ '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id={{media_id}}, polemic={{polemic}}" polemic-color="{{color}}"'
+ + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
{
- id: _id,
+ id: _annotation.id,
media_id: _this.source.currentMedia.id,
- polemic: _polemic,
- title: _title,
- posx: Math.floor(_x + (_this.element_width - 1) / 2),
- left: _x,
- top: _y,
- color: _color,
+ polemic: _pol,
+ left: _elx,
+ top: _ely,
+ color: _col,
width: (_this.element_width-1),
- height: _this.element_height
+ height: _this.element_height,
+ title: _annotation.title
+ });
+ var _el = IriSP.jQuery(_html);
+ _el.mouseover(function() {
+ _annotation.trigger("select");
+ }).mouseout(function() {
+ _annotation.trigger("unselect");
+ }).click(function() {
+ _annotation.trigger("click");
});
+ _annotation.on("select", function() {
+ _this.tooltip.show(
+ Math.floor(_elx + (_this.element_width - 1) / 2),
+ _ely,
+ _annotation.title,
+ _col
+ );
+ _this.$tweets.each(function() {
+ var _e = IriSP.jQuery(this);
+ _e.css(
+ "opacity",
+ ( _e.attr("annotation-id") == _annotation.id ? 1 : .3 )
+ );
+ });
+ });
+ _annotation.on("unselect", function() {
+ _this.tooltip.hide();
+ _this.$tweets.css("opacity",1);
+ });
+ _annotation.on("found", function() {
+ _el.css({
+ "background" : _this.foundcolor,
+ "opacity" : 1
+ });
+ });
+ _annotation.on("not-found", function() {
+ _el.css({
+ "background" : _col,
+ "opacity" : .3
+ });
+ });
+ _this.$zone.append(_el);
}
IriSP._(_slices).forEach(function(_slice) {
var _y = _this.height;
_slice.annotations.forEach(function(_annotation) {
_y -= _this.element_height;
- displayElement(_x, _y, _this.defaultcolor, _annotation.id, _annotation.title, "none");
+ displayAnnotation(_x, _y, "none", _this.defaultcolor, _annotation);
});
IriSP._(_slice.polemicStacks).forEach(function(_annotations, _j) {
var _color = _this.polemics[_j].color,
_polemic = _this.polemics[_j].name;
_annotations.forEach(function(_annotation) {
_y -= _this.element_height;
- displayElement(_x, _y, _color, _annotation.id, _annotation.title, _polemic);
+ displayAnnotation(_x, _y, _polemic, _color, _annotation);
});
});
_x += _this.element_width;
@@ -187,23 +189,15 @@
this.$tweets = this.$.find(".Ldt-Polemic-TweetDiv");
- this.$tweets
- .mouseover(function() {
+ this.source.getAnnotations().on("search-cleared", function() {
+ _this.$tweets.each(function() {
var _el = IriSP.jQuery(this);
- _this.tooltip.show(_el.attr("pos-x"), _el.attr("pos-y"), _el.attr("tweet-title"), _el.attr("polemic-color"));
- })
- .mouseout(function() {
- _this.tooltip.hide();
- })
- .click(function() {
- var _id = IriSP.jQuery(this).attr("annotation-id");
- _this.player.popcorn.trigger("IriSP.Mediafragment.setHashToAnnotation", _id);
- _this.player.popcorn.trigger("IriSP.Tweet.show", _id);
+ _el.css({
+ "background" : _el.attr("polemic-color"),
+ "opacity" : 1
+ });
});
-
- this.bindPopcorn("IriSP.search", "onSearch");
- this.bindPopcorn("IriSP.search.closed", "onSearch");
- this.bindPopcorn("IriSP.search.cleared", "onSearch");
+ });
} else {
this.$zone.hide();
@@ -290,16 +284,16 @@
this.$zone.click(function(_e) {
var _x = _e.pageX - _this.$zone.offset().left;
- _this.player.popcorn.currentTime(_this.source.getDuration().getSeconds() * _x / _this.width);
+ _this.media.setCurrentTime(_this.media.duration * _x / _this.width);
});
this.$.append('<div class="Ldt-Polemic-Tooltip"></div>');
- this.insertSubwidget(this.$.find(".Ldt-Polemic-Tooltip"), "tooltip", { type: "Tooltip" });
+ this.insertSubwidget(this.$.find(".Ldt-Polemic-Tooltip"), { type: "Tooltip" }, "tooltip");
}
-IriSP.Widgets.Polemic.prototype.onTimeupdate = function() {
- var _x = Math.floor( this.width * this.player.popcorn.currentTime() / this.source.getDuration().getSeconds());
+IriSP.Widgets.Polemic.prototype.onTimeupdate = function(_time) {
+ var _x = Math.floor( this.width * _time / this.media.duration);
this.$elapsed.css({
width: _x + "px"
});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/PopcornPlayer.js Mon Dec 10 10:47:14 2012 +0100
@@ -0,0 +1,146 @@
+IriSP.Widgets.PopcornPlayer = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.PopcornPlayer.prototype = new IriSP.Widgets.Widget();
+
+/* A Popcorn-based player for HTML5 Video, Youtube and Vimeo */
+
+IriSP.Widgets.PopcornPlayer.prototype.defaults = {
+ aspect_ratio: 14/9
+}
+
+IriSP.Widgets.PopcornPlayer.prototype.draw = function() {
+
+
+ if (typeof this.video === "undefined") {
+ this.video = this.media.video;
+ }
+
+ if (this.url_transform) {
+ this.video = this.url_transform(this.video);
+ }
+
+ if (!this.height) {
+ this.height = Math.floor(this.width/this.aspect_ratio);
+ this.$.css({
+ height: this.height
+ });
+ }
+
+ if (/^(https?:\/\/)?(www\.)?vimeo\.com/.test(this.video)) {
+
+ /* VIMEO */
+
+ var _popcorn = Popcorn.vimeo(this.container, this.video);
+
+ } else if (/^(https?:\/\/)?(www\.)?youtube\.com/.test(this.video)) {
+
+ /* YOUTUBE */
+
+ var _urlparts = this.video.split(/[?&]/),
+ _params = {};
+ for (var i = 1; i < _urlparts.length; i++) {
+ var _ppart = _urlparts[i].split('=');
+ _params[_ppart[0]] = decodeURIComponent(_ppart[1]);
+ }
+ _params.controls = 0;
+ _params.modestbranding = 1;
+ if (this.autostart || this.autoplay) {
+ _params.autoplay = 1;
+ }
+ _url = _urlparts[0] + '?' + IriSP.jQuery.param(_params);
+
+ var _popcorn = Popcorn.youtube(this.container, _url);
+
+ } else {
+
+ /* DEFAULT HTML5 */
+
+ var _tmpId = IriSP._.uniqueId("popcorn"),
+ _videoEl = IriSP.jQuery('<video>');
+ _videoEl.attr({
+ id : _tmpId,
+ width : this.width,
+ height : this.height
+ });
+ if(typeof this.video === "string"){
+ _videoEl.attr("src",this.video);
+ } else {
+ for (var i = 0; i < this.video.length; i++) {
+ var _srcNode = IriSP.jQuery('<source>');
+ _srcNode.attr({
+ src: this.video[i].src,
+ type: this.video[i].type
+ });
+ _videoEl.append(_srcNode);
+ }
+ }
+ this.$.html(_videoEl);
+ var _popcorn = Popcorn("#" + _tmpId);
+ if (this.autostart || this.autoplay) {
+ _popcorn.autoplay(true);
+ }
+ }
+
+ var _media = this.media;
+
+ // Binding functions to Popcorn
+
+ _media.on("setcurrenttime", function(_milliseconds) {
+ _popcorn.currentTime(_milliseconds / 1000);
+ });
+
+ _media.on("setvolume", function(_vol) {
+ _popcorn.volume(_vol);
+ _media.volume = _vol;
+ });
+
+ _media.on("setmuted", function(_muted) {
+ _popcorn.muted(_muted);
+ _media.muted = _muted;
+ });
+
+ _media.on("setplay", function() {
+ _popcorn.play();
+ });
+
+ _media.on("setpause", function() {
+ _popcorn.pause();
+ });
+
+ // Binding Popcorn events to media
+
+ function getVolume() {
+ _media.muted = _popcorn.muted();
+ _media.volume = _popcorn.volume();
+ }
+
+ _popcorn.on("loadedmetadata", function() {
+ getVolume();
+ _media.trigger("loadedmetadata");
+ _media.trigger("volumechange");
+ })
+
+ _popcorn.on("timeupdate", function() {
+ _media.trigger("timeupdate", new IriSP.Model.Time(1000*_popcorn.currentTime()));
+ });
+
+ _popcorn.on("volumechange", function() {
+ getVolume();
+ _media.trigger("volumechange");
+ })
+
+ _popcorn.on("play", function() {
+ _media.trigger("play");
+ });
+
+ _popcorn.on("pause", function() {
+ _media.trigger("pause");
+ });
+
+ _popcorn.on("seeked", function() {
+ _media.trigger("seeked");
+ });
+
+}
\ No newline at end of file
--- a/web/res/metadataplayer/Segments.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Segments.css Mon Dec 10 10:47:14 2012 +0100
@@ -2,28 +2,17 @@
* Segments Widget
*/
-.Ldt-Segments-List {
- width: 100%; height: 100%;
-}
-
.Ldt-Segments-Segment {
- position: absolute; height: 100%; opacity: .5; filter:alpha(opacity=50); margin-left: -1px; border-left: 1px solid #ffffff;
-}
-
-.Ldt-Segments-Segment.inactive, .Ldt-Segments-Segment.unfound {
- opacity: .2; filter:alpha(opacity=20);
-}
-
-.Ldt-Segments-Segment.active, .Ldt-Segments-Segment.found {
- opacity: 1; filter:alpha(opacity=100);
+ position: absolute; margin-left: -1px; border: 1px solid #ffffff;
}
.Ldt-Segments-Position {
background: #fc00ff;
position: absolute;
- top: 0;
+ top: -1px;
left: 0;
margin-left: -1px;
width: 2px;
- height: 100%;
+ bottom: -1px;
+ z-index: 80000;
}
\ No newline at end of file
--- a/web/res/metadataplayer/Segments.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Segments.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,4 +1,4 @@
-// TODO: Trigger IriSP.SegmentsWidget.click and IriSP.Mediafragment.showAnnotation
+// TODO: Trigger IriSP.SegmentsWidget.click
IriSP.Widgets.Segments = function(player, config) {
IriSP.Widgets.Widget.call(this, player, config);
@@ -9,95 +9,144 @@
IriSP.Widgets.Segments.prototype.defaults = {
annotation_type : "chap",
colors: ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],
- height: 10
+ line_height: 8,
+ background: "#e0e0e0",
+ overlap: .25,
+ found_color: "#FF00FC",
+ faded_found_color: "#ff80fc"
};
IriSP.Widgets.Segments.prototype.template =
- '<div class="Ldt-Segments-List">{{#segments}}'
- + '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}" segment-id="{{id}}" segment-text="{{text}}" segment-color="{{color}}" center-pos="{{center}}" begin-seconds="{{beginseconds}}"'
- + 'style="left:{{left}}px; width:{{width}}px; background:{{color}}"></div>'
- + '{{/segments}}</div>'
+ '<div class="Ldt-Segments-List"></div>'
+ '<div class="Ldt-Segments-Position"></div>'
+ '<div class="Ldt-Segments-Tooltip"></div>';
+IriSP.Widgets.Segments.prototype.annotationTemplate =
+ '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}" segment-text="{{text}}"'
+ + 'style="top:{{top}}px; height:{{height}}px; left:{{left}}px; width:{{width}}px; background:{{medcolor}}" data-base-color="{{color}}" data-low-color="{{lowcolor}}" data-medium-color="{{medcolor}}"></div>'
+
+
IriSP.Widgets.Segments.prototype.draw = function() {
- this.bindPopcorn("IriSP.search", "onSearch");
- this.bindPopcorn("IriSP.search.closed", "onSearch");
- this.bindPopcorn("IriSP.search.cleared", "onSearch");
- this.bindPopcorn("timeupdate", "onTimeupdate");
+ this.onMediaEvent("timeupdate", "onTimeupdate");
+ this.renderTemplate();
+
+ var _list = this.getWidgetAnnotations().filter(function(_ann) {
+ return _ann.getDuration() > 0;
+ }),
+ _this = this,
+ _scale = this.width / this.source.getDuration(),
+ list_$ = this.$.find('.Ldt-Segments-List'),
+ lines = [],
+ zindex = 1,
+ searching = false;
+
+ function saturate(r, g, b, s) {
+ function satcomp(c) {
+ return Math.floor(240 * (1 - s) + c * s);
+ }
+ var res = ( 0x10000 * satcomp(r) + 0x100 * satcomp(g) + satcomp(b)).toString(16);
+ while (res.length < 6) {
+ res = "0" + res;
+ }
+ return "#" + res;
+ }
- var _list = this.getWidgetAnnotations(),
- _this = this,
- _scale = this.width / this.source.getDuration();
+ _list.forEach(function(_annotation, _k) {
+ var _left = _annotation.begin * _scale,
+ _width = ( _annotation.getDuration() ) * _scale,
+ _center = Math.floor( _left + _width / 2 ),
+ _fulltext = _annotation.title + ( _annotation.description ? ( '<br/>' + _annotation.description ) : '' ),
+ line = IriSP._(lines).find(function(line) {
+ return !IriSP._(line.annotations).find(function(a) {
+ return a.begin < _annotation.end && a.end > _annotation.begin
+ });
+ });
+ if (!line) {
+ line = { index: lines.length, annotations: []};
+ lines.push(line);
+ }
+ line.annotations.push(_annotation);
+ var _top = ((1 - _this.overlap) * line.index) * _this.line_height,
+ color = ( typeof _annotation.color !== "undefined" && _annotation.color ? _annotation.color : _this.colors[_k % _this.colors.length] ),
+ r = parseInt(color.substr(1,2),16),
+ g = parseInt(color.substr(3,2),16),
+ b = parseInt(color.substr(5,2),16),
+ medcolor = saturate(r, g, b, .5),
+ lowcolor = saturate(r, g, b, .2);
+ var _data = {
+ color : color,
+ medcolor: medcolor,
+ lowcolor: lowcolor,
+ text: _fulltext.replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{120,140})[\s].+$/m,'$1…'),
+ left : _left,
+ width : _width,
+ top: _top,
+ height: _this.line_height - 1,
+ id : _annotation.id,
+ media_id : _annotation.getMedia().id
+ };
+ var _html = Mustache.to_html(_this.annotationTemplate, _data),
+ _el = IriSP.jQuery(_html);
+ _el.mouseover(function() {
+ _annotation.trigger("select");
+ })
+ .mouseout(function() {
+ _annotation.trigger("unselect");
+ })
+ .click(function() {
+ _annotation.trigger("click");
+ })
+ .appendTo(list_$)
+ _annotation.on("select", function() {
+ _this.$segments.each(function() {
+ var _segment = IriSP.jQuery(this);
+ _segment.css({
+ background: _segment.hasClass("found") ? _this.faded_found_color : _segment.attr("data-low-color")
+ });
+ });
+ _el.css({
+ background: _el.hasClass("found") ? _this.found_color: color,
+ "z-index": ++zindex
+ });
+ _this.tooltip.show( _center, _top, _data.text, _data.color );
+ });
+ _annotation.on("unselect", function() {
+ _this.tooltip.hide();
+ _this.$segments.each(function() {
+ var _segment = IriSP.jQuery(this);
+ _segment.css("background", _segment.hasClass("found") ? _this.found_color : _segment.attr(searching ? "data-low-color" : "data-medium-color"));
+ });
+ });
+ _annotation.on("found", function() {
+ _el.css("background", _this.found_color).addClass("found");
+ });
+ _annotation.on("not-found", function() {
+ _el.css("background", lowcolor).removeClass("found");
+ });
+ });
+
this.$.css({
width : this.width + "px",
- height : (this.height - 2) + "px",
- margin : "1px 0"
+ height : (((1 - this.overlap) * lines.length + this.overlap) * this.line_height) + "px",
+ background : this.background,
+ margin: "1px 0"
});
- this.$.append(Mustache.to_html(this.template, {
- segments : _list.map(function(_annotation, _k) {
- var _left = _annotation.begin * _scale,
- _width = ( _annotation.end - _annotation.begin ) * _scale,
- _center = _left + _width / 2,
- _fulltext = _annotation.title + ( _annotation.description ? ( '<br/>' + _annotation.description ) : '' );
- return {
- text : _fulltext.replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{120,140})[\s].+$/m,'$1…'),
- color : ( typeof _annotation.color !== "undefined" && _annotation.color ? _annotation.color : _this.colors[_k % _this.colors.length] ),
- beginseconds : _annotation.begin.getSeconds() ,
- left : Math.floor( _left ),
- width : Math.floor( _width ),
- center : Math.floor( _center ),
- id : _annotation.id,
- media_id : _annotation.getMedia().id
- }
- })
- }));
- this.insertSubwidget(this.$.find(".Ldt-Segments-Tooltip"), "tooltip", { type: "Tooltip" });
+ this.insertSubwidget(this.$.find(".Ldt-Segments-Tooltip"), { type: "Tooltip" }, "tooltip");
this.$segments = this.$.find('.Ldt-Segments-Segment');
-
- this.$segments.mouseover(function() {
- var _el = IriSP.jQuery(this);
- _this.$segments.removeClass("active").addClass("inactive");
- _this.tooltip.show( _el.attr("center-pos"), 0, _el.attr("segment-text"), _el.attr("segment-color"));
- _el.removeClass("inactive").addClass("active");
- })
- .mouseout(function() {
- _this.tooltip.hide();
- _this.$segments.removeClass("inactive active");
- })
- .click(function() {
- var _el = IriSP.jQuery(this);
- _this.player.popcorn.currentTime(_el.attr("begin-seconds"));
- _this.player.popcorn.trigger("IriSP.Mediafragment.setHashToAnnotation", _el.attr("segment-id"));
+ this.source.getAnnotations().on("search", function() {
+ searching = true;
+ });
+ this.source.getAnnotations().on("search-cleared", function() {
+ searching = false;
+ _this.$segments.each(function() {
+ var _segment = IriSP.jQuery(this);
+ _segment.css("background", _segment.attr("data-medium-color")).removeClass("found");
+ });
});
}
-IriSP.Widgets.Segments.prototype.onSearch = function(searchString) {
- this.searchString = typeof searchString !== "undefined" ? searchString : '';
- var _found = 0,
- _re = IriSP.Model.regexpFromTextOrArray(searchString, true);
- if (this.searchString) {
- this.$segments.each(function() {
- var _el = IriSP.jQuery(this);
- if (_re.test(_el.attr("segment-text"))) {
- _el.removeClass("unfound").addClass("found");
- _found++;
- } else {
- _el.removeClass("found").addClass("unfound");
- }
- });
- if (_found) {
- this.player.popcorn.trigger("IriSP.search.matchFound");
- } else {
- this.player.popcorn.trigger("IriSP.search.noMatchFound");
- }
- } else {
- this.$segments.removeClass("found unfound");
- }
-}
-
-IriSP.Widgets.Segments.prototype.onTimeupdate = function() {
- var _x = Math.floor( this.width * this.player.popcorn.currentTime() / this.source.getDuration().getSeconds());
+IriSP.Widgets.Segments.prototype.onTimeupdate = function(_time) {
+ var _x = Math.floor( this.width * _time / this.media.duration);
this.$.find('.Ldt-Segments-Position').css({
left: _x + "px"
})
--- a/web/res/metadataplayer/Slider.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Slider.css Mon Dec 10 10:47:14 2012 +0100
@@ -12,3 +12,8 @@
background: #747474;
}
+.Ldt-Slider-Time {
+ position: absolute; top: -16px; background: #ffffc0; color: #000000; border-radius: 3px; z-index: 8;
+ font-size: 10px; width: 34px; border: 1px solid #999999; padding: 1px; margin-left: -20px;
+ display: none; text-align: center; font-weight: bold;
+}
--- a/web/res/metadataplayer/Slider.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Slider.js Mon Dec 10 10:47:14 2012 +0100
@@ -15,12 +15,16 @@
set to zero for fixed slider */
};
+IriSP.Widgets.Slider.prototype.template =
+ '<div class="Ldt-Slider"></div><div class="Ldt-Slider-Time">00:00</div>'
+
IriSP.Widgets.Slider.prototype.draw = function() {
- this.$slider = IriSP.jQuery('<div>')
- .addClass("Ldt-Slider");
+ this.renderTemplate();
- this.$.append(this.$slider);
+ this.$time = this.$.find(".Ldt-Slider-Time");
+
+ this.$slider = this.$.find(".Ldt-Slider");
var _this = this;
@@ -30,34 +34,41 @@
min: 0,
max: this.source.getDuration().milliseconds,
slide: function(event, ui) {
- _this.player.popcorn.currentTime(ui.value / 1000);
- _this.player.popcorn.trigger("IriSP.Mediafragment.setHashToTime");
+ _this.media.setCurrentTime(ui.value);
+ _this.player.trigger("Mediafragment.setHashToTime");
}
});
this.$handle = this.$slider.find('.ui-slider-handle');
- this.bindPopcorn("timeupdate","onTimeupdate");
- this.bindPopcorn("IriSP.PlayerWidget.MouseOver","onMouseover");
- this.bindPopcorn("IriSP.PlayerWidget.MouseOut","onMouseout");
+ this.onMediaEvent("timeupdate","onTimeupdate");
+ this.onMdpEvent("Player.MouseOver","onMouseover");
+ this.onMdpEvent("Player.MouseOut","onMouseout");
if (this.minimize_timeout) {
this.$slider.css(this.calculateSliderCss(this.minimized_height));
this.$handle.css(this.calculateHandleCss(this.minimized_height));
- this.$
- .mouseover(this.functionWrapper("onMouseover"))
- .mouseout(this.functionWrapper("onMouseout"));
-
this.maximized = false;
this.timeoutId = false;
}
+
+ this.$
+ .mouseover(function() {
+ _this.$time.show();
+ _this.onMouseover();
+ })
+ .mouseout(this.functionWrapper("onMouseout"))
+ .mousemove(function(_e) {
+ var _x = _e.pageX - _this.$.offset().left,
+ _t = new IriSP.Model.Time(_this.media.duration * _x / _this.width);
+ _this.$time.text(_t.toString()).css("left",_x);
+ });
};
-IriSP.Widgets.Slider.prototype.onTimeupdate = function() {
- var _time = 1000 * this.player.popcorn.currentTime();
+IriSP.Widgets.Slider.prototype.onTimeupdate = function(_time) {
this.$slider.slider("value",_time);
- this.player.popcorn.trigger("IriSP.Arrow.updatePosition",{widget: this.type, time: _time});
+ this.player.trigger("Arrow.updatePosition",{widget: this.type, time: _time});
}
IriSP.Widgets.Slider.prototype.onMouseover = function() {
@@ -74,6 +85,7 @@
}
IriSP.Widgets.Slider.prototype.onMouseout = function() {
+ this.$time.hide();
if (this.minimize_timeout) {
if (this.timeoutId) {
window.clearTimeout(this.timeoutId);
--- a/web/res/metadataplayer/Social.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Social.css Mon Dec 10 10:47:14 2012 +0100
@@ -2,6 +2,49 @@
display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; background: url(img/socialbuttons.png);
}
+.Ldt-Social-Url-Container {
+ display: inline-block; width: 24px; height: 24px; margin: 2px 0 0 2px; position: relative;
+}
+
+a.Ldt-Social-Url {
+ margin: 0; background-position: -96px 0;
+}
+
+a.Ldt-Social-Url:hover {
+ background-position: -96px -24px;
+}
+
+.Ldt-Social-UrlPop {
+ position: absolute; left: 20px; top: -2px; background: url(img/socialcopy.png);
+ padding: 3px 0 0 12px; width: 218px; height: 27px;
+ display: none;
+}
+
+.Ldt-Social-Input, .Ldt-Social-CopyBtn {
+ font-size: 11px; margin: 1px; border: 1px solid #ccc; height: 16px;
+ padding: 1px; border-radius: 2px; display: inline-block;
+}
+
+.Ldt-Social-Input:hover, .Ldt-Social-CopyBtn.hover {
+ border-color: #8080ff;
+}
+
+.Ldt-Social-Input {
+ width: 150px;
+}
+
+.Ldt-Social-CopyBtn {
+ font-weight: bold; width: 50px; text-align: center; background: #f0f0ff;
+}
+
+.Ldt-Social-CopyBtn.hover {
+ background: #ffe0a0;
+}
+
+.Ldt-Social-CopyBtn.active {
+ background: #ff8000;
+}
+
a.Ldt-Social-Twitter {
background-position: 0 0;
}
--- a/web/res/metadataplayer/Social.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Social.js Mon Dec 10 10:47:14 2012 +0100
@@ -2,6 +2,7 @@
IriSP.Widgets.Social = function(player, config) {
IriSP.Widgets.Widget.call(this, player, config);
+ ZeroClipboard.setMoviePath( IriSP.getLib('zeroClipboardSwf') );
}
IriSP.Widgets.Social.prototype = new IriSP.Widgets.Widget();
@@ -9,6 +10,7 @@
IriSP.Widgets.Social.prototype.defaults = {
text: "",
url: "",
+ show_url: true,
show_twitter: true,
show_fb: true,
show_gplus: true,
@@ -16,30 +18,77 @@
}
IriSP.Widgets.Social.prototype.template =
- '<span class="Ldt-Social">{{#show_fb}}<a href="#" target="_blank" class="Ldt-Social-Fb Ldt-TraceMe" title="{{l10n.share_on}} Facebook"></a>{{/show_fb}}'
- + '{{#show_twitter}}<a href="#" target="_blank" class="Ldt-Social-Twitter Ldt-TraceMe" title="{{l10n.share_on}} Twitter"></a>{{/show_twitter}}'
- + '{{#show_gplus}}<a href="#" target="_blank" class="Ldt-Social-Gplus Ldt-TraceMe" title="{{l10n.share_on}} Google+"></a>{{/show_gplus}}'
+ '<span class="Ldt-Social">{{#show_url}}<div class="Ldt-Social-Url-Container"><a href="#" target="_blank" class="Ldt-Social-Square Ldt-Social-Url Ldt-TraceMe" title="{{l10n.share_link}}">'
+ + '</a><div class="Ldt-Social-UrlPop"><input class="Ldt-Social-Input"/><div class="Ldt-Social-CopyBtn">{{l10n.copy}}</div></div></div>{{/show_url}}'
+ + '{{#show_fb}}<a href="#" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Facebook"></a>{{/show_fb}}'
+ + '{{#show_twitter}}<a href="#" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Twitter"></a>{{/show_twitter}}'
+ + '{{#show_gplus}}<a href="#" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext Ldt-TraceMe" title="{{l10n.share_on}} Google+"></a>{{/show_gplus}}'
+ '{{#show_mail}}<a href="#" target="_blank" class="Ldt-Social-Mail Ldt-TraceMe" title="{{l10n.share_mail}}"></a>{{/show_mail}}</span>';
IriSP.Widgets.Social.prototype.messages = {
"fr": {
share_on: "Partager sur",
- share_mail: "Envoyer par courriel"
+ share_mail: "Envoyer par courriel",
+ share_link: "Partager le lien hypertexte",
+ copy: "Copier"
},
"en" : {
share_on: "Share on",
- share_mail: "Share by e-mail"
+ share_mail: "Share by e-mail",
+ share_link: "Share hypertext link",
+ copy: "Copy"
}
}
IriSP.Widgets.Social.prototype.draw = function() {
this.renderTemplate();
+ this.clipId = IriSP._.uniqueId("Ldt-Social-CopyBtn-");
+ this.$.find(".Ldt-Social-CopyBtn").attr("id", this.clipId);
+ var _this = this;
+ this.$.find(".Ldt-Social-Url").click(function() {
+ _this.toggleCopy();
+ return false;
+ });
+ this.$.find(".Ldt-Social-Input").focus(function() {
+ this.select();
+ });
+ this.$.find(".Ldt-Social-Ext").click(function() {
+ window.open(
+ IriSP.jQuery(this).attr("href"),
+ "_blank",
+ "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0");
+ return false;
+ });
this.updateUrls(this.url, this.text);
}
+IriSP.Widgets.Social.prototype.toggleCopy = function() {
+ var _pop = this.$.find(".Ldt-Social-UrlPop");
+ _pop.toggle();
+ if (_pop.is(":visible")) {
+ if (typeof this.clip == "undefined") {
+ this.clip = new ZeroClipboard.Client();
+ this.clip.setHandCursor( true );
+ this.clip.glue(this.clipId);
+ var _this = this;
+ this.clip.addEventListener( 'onMouseUp', function() {
+ _pop.hide();
+ _this.clip.hide();
+ });
+ }
+ this.clip.show();
+ this.clip.setText( this.url );
+ this.$.find(".Ldt-Social-Input").val(this.url).focus();
+ } else {
+ this.clip.hide();
+ }
+}
+
IriSP.Widgets.Social.prototype.updateUrls = function(_url, _text) {
+ this.url = _url;
+ this.text = _text;
this.$.find(".Ldt-Social-Fb").attr("href", "http://www.facebook.com/share.php?" + IriSP.jQuery.param({ u: _url, t: _text }));
this.$.find(".Ldt-Social-Twitter").attr("href", "https://twitter.com/intent/tweet?" + IriSP.jQuery.param({ url: _url, text: _text }));
- this.$.find(".Ldt-Social-Gplus").attr("href", "https://plusone.google.com/_/+1/confirm?" + IriSP.jQuery.param({ url: _url, title: _text }));
+ this.$.find(".Ldt-Social-Gplus").attr("href", "https://plus.google.com/share?" + IriSP.jQuery.param({ url: _url, title: _text }));
this.$.find(".Ldt-Social-Mail").attr("href", "mailto:?" + IriSP.jQuery.param({ subject: _text, body: _text + ": " + _url }));
}
--- a/web/res/metadataplayer/Tagcloud.css Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Tagcloud.css Mon Dec 10 10:47:14 2012 +0100
@@ -2,9 +2,13 @@
*
*/
.Ldt-Tagcloud-Container {
+ border: 1px solid #b7b7b7;
+ padding: 1px;
+ margin: 0;
}
ul.Ldt-Tagcloud-List {
+ background: url(img/pinstripe.png);
padding: 5px;
margin: 0;
list-style: none;
--- a/web/res/metadataplayer/Tagcloud.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Tagcloud.js Mon Dec 10 10:47:14 2012 +0100
@@ -39,41 +39,29 @@
}
IriSP.Widgets.Tagcloud.prototype.draw = function() {
- this.bindPopcorn("IriSP.search", "onSearch");
- this.bindPopcorn("IriSP.search.closed", "onSearch");
- this.bindPopcorn("IriSP.search.cleared", "onSearch");
if (this.segment_annotation_type) {
- this.bindPopcorn("timeupdate","onTimeupdate");
+ var _this = this;
+ this.source.getAnnotationsByTypeTitle(this.segment_annotation_type).forEach(function(_a) {
+ _a.on("enter", function() {
+ _this.redraw(_a.begin, _a.end);
+ })
+ });
} else {
this.redraw();
}
}
-IriSP.Widgets.Tagcloud.prototype.onTimeupdate = function() {
- var _time = Math.floor(this.player.popcorn.currentTime() * 1000),
- _list = this.source.getAnnotationsByTypeTitle(this.segment_annotation_type).filter(function(_annotation) {
- return _annotation.begin <= _time && _annotation.end > _time;
- });
- if (_list.length) {
- if (_list[0].begin !== this.begin_time || _list[0].end !== this.end_time) {
- this.begin_time = _list[0].begin;
- this.end_time = _list[0].end;
- this.redraw();
- }
- }
-}
-
-IriSP.Widgets.Tagcloud.prototype.redraw = function() {
+IriSP.Widgets.Tagcloud.prototype.redraw = function(_from, _to) {
var _urlRegExp = /https?:\/\/[0-9a-zA-Z\.%\/-_]+/g,
_regexpword = /[^\s\.&;,'"!\?\d\(\)\+\[\]\\\…\-«»:\/]{3,}/g,
_words = {},
_this = this,
_annotations = this.getWidgetAnnotations();
- if (typeof this.begin_time !== "undefined" && typeof this.end_time !== "undefined") {
+ if (typeof _from !== "undefined" && typeof _to !== "undefined") {
_annotations = _annotations.filter(function(_annotation) {
- return _annotation.begin >= _this.begin_time && _annotation.end <= _this.end_time;
+ return _annotation.begin >= _from && _annotation.end <= _to;
})
}
@@ -117,9 +105,10 @@
this.$.html(Mustache.to_html(this.template, {words: _words }));
this.$.find(".Ldt-Tagcloud-item").click(function() {
var _txt = IriSP.jQuery(this).attr("content");
- _this.player.popcorn.trigger("IriSP.search.triggeredSearch", _txt);
+ _this.source.getAnnotations().search(_txt);
});
-
+ this.source.getAnnotations().on("search", this.functionWrapper("onSearch"));
+ this.source.getAnnotations().on("search-cleared", this.functionWrapper("onSearch"));
}
IriSP.Widgets.Tagcloud.prototype.onSearch = function(searchString) {
--- a/web/res/metadataplayer/Tooltip.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Tooltip.js Mon Dec 10 10:47:14 2012 +0100
@@ -1,6 +1,6 @@
/* this widget displays a small tooltip */
-IriSP.Widgets.Tooltip = function(Popcorn, config, Serializer) {
- IriSP.Widgets.Widget.call(this, Popcorn, config, Serializer);
+IriSP.Widgets.Tooltip = function(player, config) {
+ IriSP.Widgets.Widget.call(this, player, config);
};
IriSP.Widgets.Tooltip.prototype = new IriSP.Widgets.Widget();
--- a/web/res/metadataplayer/Trace.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Trace.js Mon Dec 10 10:47:14 2012 +0100
@@ -22,15 +22,17 @@
return;
}
var _this = this,
- _listeners = {
- "IriSP.search.open" : 0,
- "IriSP.search.closed" : 0,
- "IriSP.search" : 0,
- "IriSP.search.cleared" : 0,
- "IriSP.search.matchFound" : 0,
- "IriSP.search.noMatchFound" : 0,
- "IriSP.search.triggeredSearch" : 0,
- "IriSP.TraceWidget.MouseEvents" : 0,
+ _mdplisteners = {
+ "search.open" : 0,
+ "search.closed" : 0,
+ "search" : 0,
+ "search.cleared" : 0,
+ "search.matchFound" : 0,
+ "search.noMatchFound" : 0,
+ "search.triggeredSearch" : 0,
+ "TraceWidget.MouseEvents" : 0
+ }
+ _medialisteners = {
"play" : 0,
"pause" : 0,
"volumechange" : 0,
@@ -39,14 +41,23 @@
"pause" : 0,
"timeupdate" : 2000
};
- IriSP._(_listeners).each(function(_ms, _listener) {
+ IriSP._(_mdplisteners).each(function(_ms, _listener) {
var _f = function(_arg) {
_this.eventHandler(_listener, _arg);
}
if (_ms) {
_f = IriSP._.throttle(_f, _ms);
}
- _this.player.popcorn.listen(_listener, _f);
+ _this.onMdpEvent(_listener, _f);
+ });
+ IriSP._(_medialisteners).each(function(_ms, _listener) {
+ var _f = function(_arg) {
+ _this.eventHandler(_listener, _arg);
+ }
+ if (_ms) {
+ _f = IriSP._.throttle(_f, _ms);
+ }
+ _this.media.on(_listener, _f);
});
if (!this.tracer) {
@@ -63,12 +74,8 @@
this.tracer.trace("TraceWidgetInit", {});
this.mouseLocation = '';
- IriSP.jQuery(".Ldt-Widget").bind("click mouseover mouseout", function(_e) {
- var _target = IriSP.jQuery(_e.target);
-
- while (!_target.hasClass("Ldt-TraceMe") && !_target.hasClass("Ldt-Widget") && _target.length) {
- _target = _target.parent();
- }
+ IriSP.jQuery(".Ldt-Widget").on("click mouseover mouseout", ".Ldt-TraceMe", function(_e) {
+ var _target = IriSP.jQuery(this);
var _widget = IriSP.jQuery(this).attr("widget-type"),
_data = {
@@ -95,7 +102,7 @@
switch(_e.type) {
case "mouseover":
if (_this.lastTarget != _lastTarget) {
- _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+ _this.player.trigger('TraceWidget.MouseEvents', _data);
} else {
if (typeof _this.moTimeout != "undefined") {
clearTimeout(_this.moTimeout);
@@ -109,12 +116,12 @@
}
_this.moTimeout = setTimeout(function() {
if (_lastTarget != _this.lastTarget) {
- _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+ _this.player.trigger('TraceWidget.MouseEvents', _data);
}
},100);
break;
default:
- _this.player.popcorn.trigger('IriSP.TraceWidget.MouseEvents', _data);
+ _this.player.trigger('TraceWidget.MouseEvents', _data);
}
_this.lastTarget = _lastTarget;
});
@@ -134,23 +141,23 @@
delete _arg.widget;
delete _arg.type;
break;
- case 'timeupdate':
case 'play':
case 'pause':
- _arg.time = this.player.popcorn.currentTime() * 1000;
+ _arg.milliseconds = this.media.getCurrentTime().milliseconds;
+ case 'timeupdate':
case 'seeked':
case 'volumechange':
- _traceName += 'Popcorn_' + _listener;
+ _traceName += 'media_' + _listener;
break;
default:
- _traceName += _listener.replace('IriSP.','').replace('.','_');
+ _traceName += _listener.replace('.','_');
}
this.lastEvent = _traceName;
if (typeof this.extend === "object" && this.extend) {
IriSP._(_arg).extend(this.extend);
}
this.tracer.trace(_traceName, _arg);
- if (this.js_console) {
+ if (this.js_console && typeof window.console !== "undefined" && typeof console.log !== "undefined") {
console.log("tracer.trace('" + _traceName + "', " + JSON.stringify(_arg) + ");");
}
}
--- a/web/res/metadataplayer/Tweet.js Mon Oct 15 17:01:50 2012 +0200
+++ b/web/res/metadataplayer/Tweet.js Mon Dec 10 10:47:14 2012 +0100
@@ -25,6 +25,7 @@
"color" : "#05aae6"
}
],
+ annotation_type: "tweet",
pin_at_start: false
}
@@ -32,7 +33,7 @@
"fr": {
retweet: "Retweeter",
reply: "Répondre",
- keep_visible: "Garder visible",
+ keep_visible: "Empêcher la fermeture automatique",
dont_keep_visible: "Permettre la fermeture automatique",
close_widget: "Fermer l'affichage du tweet",
original_time: "Heure d'envoi : ",
@@ -66,7 +67,6 @@
IriSP.Widgets.Tweet.prototype.draw = function() {
this.renderTemplate();
- this.bindPopcorn("IriSP.Tweet.show","show");
this.pinned = this.pin_at_start;
var _this = this;
this.$.find(".Ldt-Tweet-Pin").click(function() {
@@ -84,10 +84,14 @@
_this.hide();
});
this.$.hide();
+ this.getWidgetAnnotations().forEach(function(_annotation) {
+ _annotation.on("click", function() {
+ _this.show(_annotation);
+ });
+ });
}
-IriSP.Widgets.Tweet.prototype.show = function(_id) {
- var _tweet = this.source.getElement(_id);
+IriSP.Widgets.Tweet.prototype.show = function(_tweet) {
if (typeof _tweet !== "undefined" && typeof _tweet.source !== "undefined") {
var _entities = [];
for (var _i = 0; _i < _tweet.source.entities.hashtags.length; _i++) {
@@ -170,7 +174,7 @@
this.$.find(".Ldt-Tweet-Retweet").attr("href", "https://twitter.com/intent/retweet?tweet_id=" + _tweet.source.id_str);
this.$.find(".Ldt-Tweet-Reply").attr("href", "https://twitter.com/intent/tweet?in_reply_to=" + _tweet.source.id_str);
this.$.find(".Ldt-Tweet-Original").attr("href", "https://twitter.com/" + _tweet.source.user.screen_name + "/status/" + _tweet.source.id_str);
- this.player.popcorn.trigger("IriSP.Annotation.minimize");
+ this.player.trigger("Annotation.minimize");
this.$.slideDown();
this.cancelTimeout();
if (!this.pinned) {
@@ -182,7 +186,7 @@
}
IriSP.Widgets.Tweet.prototype.hide = function() {
- this.player.popcorn.trigger("IriSP.Annotation.maximize");
+ this.player.trigger("Annotation.maximize");
this.$.slideUp();
this.cancelTimeout();
}
Binary file web/res/metadataplayer/img/pinstripe-grey.png has changed
Binary file web/res/metadataplayer/img/pinstripe-purple.png has changed
Binary file web/res/metadataplayer/img/polemic.png has changed
Binary file web/res/metadataplayer/img/profile_arrow.png has changed
Binary file web/res/metadataplayer/img/socialbuttons.png has changed
Binary file web/res/metadataplayer/img/socialcopy.png has changed
Binary file web/res/metadataplayer/img/submit_annotation.png has changed
Binary file web/res/metadataplayer/img/voiceannotation.png has changed
Binary file web/res/metadataplayer/img/zoombuttons.png has changed
--- a/web/tweet_ajax.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/tweet_ajax.php Mon Dec 10 10:47:14 2012 +0100
@@ -18,7 +18,7 @@
*/
$token = unserialize($_SESSION['TWITTER_ACCESS_TOKEN']);
$client = $token->getHttpClient($configuration);
- $client->setUri('http://twitter.com/statuses/update.json');
+ $client->setUri('http://api.twitter.com/1.1/statuses/update.json');
$client->setMethod(Zend_Http_Client::POST);
$client->setParameterPost('status', $_POST['status']);
$response = $client->request();
--- a/web/vivagora/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/vivagora/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -35,7 +35,7 @@
'link' => 'http://www.iri.centrepompidou.fr/evenement/seminaires-des-acteurs-de-l%E2%80%99innovation-responsable/?lang=fr_fr',
'islive' => true,
'keywords' => 'innovation, responsable, dialogue, logiciel',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.vivagora.fr/'
class='footerLink' target='_blank'> VivAgora </a>
| <a href='http://www.iri.centrepompidou.fr/' class='footerLink' target='_blank'>
--- a/web/www2012/config.php Mon Oct 15 17:01:50 2012 +0200
+++ b/web/www2012/config.php Mon Dec 10 10:47:14 2012 +0100
@@ -38,7 +38,7 @@
",
'link' => 'http://www2012.wwwconference.org/program/provisional-program/',
'keywords' => 'WWW, World Wide Web, WWW2012, Lyon, Tim Berners-Lee, Neelie Kroes, Bernard Stiegler, Chris Welty, conference',
- 'rep' => basename('__DIR__'),
+ 'rep' => basename(__DIR__),
'partenaires'=> "<a href='http://www.iw3c2.org/' class='footerLink' target='_blank'>IW3C2</a>
| <a href='http://www.w3c.org/' class='footerLink' target='_blank'>World Wide Web Consortium</a>
| <a href='http://www.universite-lyon.fr/' class='footerLink' target='_blank'>Université de Lyon</a>