Mercurial > xmpp-account-manager
changeset 0:2a8d4e8600d0
Initial commit.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 21 Dec 2018 21:34:17 +0100 |
parents | |
children | d6df73b466f6 |
files | avatar.js client.js index.xhtml nickname.js prosody.css prosody.svg share/bootstrap/css/bootstrap.min.css share/bootstrap/fonts/glyphicons-halflings-regular.eot share/bootstrap/fonts/glyphicons-halflings-regular.svg share/bootstrap/fonts/glyphicons-halflings-regular.ttf share/bootstrap/fonts/glyphicons-halflings-regular.woff share/bootstrap/fonts/glyphicons-halflings-regular.woff2 strophe.js |
diffstat | 13 files changed, 6884 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/avatar.js @@ -0,0 +1,184 @@ +'use strict'; + +function initAvatar(connection) { + const DEFAULT_AVATAR = 'data:image/svg+xml,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 150 150"><rect width="150" height="150" fill="#888" stroke-width="1" stroke="#000"/><text x="75" y="100" text-anchor="middle" font-size="100">?</text></svg>'; + + const avatar_data = {}; + const avatar_img = document.getElementById('avatar'); + const avatar_size = document.getElementById('avatar-size'); + const avatar_file = document.getElementById('avatar-file'); + const avatar_upload = document.getElementById('avatar-upload'); + const avatar_change = document.getElementById('avatar-change'); + + avatar_img.src = DEFAULT_AVATAR; + const iq = $iq({type: 'get'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('items', {node: 'urn:xmpp:avatar:metadata'}); + connection.sendIQ(iq, onAvatarMetadata, onAvatarRetrievalError.bind(null, 'PubSub metadata query failed.')); + + function onAvatarMetadata(result_iq) + { + const item = parseXPath(result_iq, './pubsub:pubsub/pubsub:items/pubsub:item'); + if (item == null) + return onAvatarRetrievalError('no item found.'); + const id = item.getAttributeNS(null, 'id'); + const info = parseXPath(item, './avatar_metadata:metadata/avatar_metadata:info'); + if (info == null) + return onAvatarRetrievalError('no info found, your avatar metadata node is broken.'); + if (id != info.getAttributeNS(null, 'id')) + return onAvatarRetrievalError('invalid id in metadata.'); + + const parsed_info = { + id: id, + type: info.getAttributeNS(null, 'type'), + bytes: info.getAttributeNS(null, 'bytes'), + width: info.getAttributeNS(null, 'width'), + height: info.getAttributeNS(null, 'height'), + }; + const iq = $iq({type: 'get'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('items', {node: 'urn:xmpp:avatar:data'}) + .c('item', {id: id}); + connection.sendIQ(iq, onAvatarData.bind(null, parsed_info), onAvatarRetrievalError.bind(null, 'PubSub data query failed.')); + } + + function onAvatarData(info, result_iq) + { + const item = parseXPath(result_iq, './pubsub:pubsub/pubsub:items/pubsub:item'); + if (item == null) + return onAvatarRetrievalError('no item found.'); + if (info.id != item.getAttributeNS(null, 'id')) + return onAvatarRetrievalError('invalid id in data.'); + + const data = parseXPath(item, './avatar_data:data').textContent; + const url = 'data:' + info.type + ';base64,' + data; + // TODO: validate the bytes too. + /* + // TODO: figure out why this didn’t work. + avatar_img.onload = function (evt) { + const img = evt.target; + if (img.naturalWidth != info.width || img.naturalHeight != info.height) + return onAvatarRetrievalError('invalid width or height in image data.'); + avatar_img.onload = null; + }; + */ + avatar_img.src = url; + } + + function onAvatarRetrievalError(string) + { + console.log('Failed to retrieve avatar, an empty one is displayed instead: ' + string); + avatar_img.src = DEFAULT_AVATAR; + } + + avatar_upload.addEventListener('click', function (evt) { + avatar_file.click(); + }); + + avatar_change.addEventListener('click', function (evt) { + const metadata_iq = $iq({type: 'set'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('publish', {node: 'urn:xmpp:avatar:metadata'}) + .c('item', {id: avatar_data.id}) + .c('metadata', {xmlns: 'urn:xmpp:avatar:metadata'}) + .c('info', { + id: avatar_data.id, + type: avatar_data.type, + bytes: avatar_data.bytes, + width: avatar_img.naturalWidth, + height: avatar_img.naturalHeight, + }); + connection.sendIQ(metadata_iq, onAvatarMetadataUpload, onAvatarUploadError); + const data_iq = $iq({type: 'set'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('publish', {node: 'urn:xmpp:avatar:data'}) + .c('item', {id: avatar_data.id}) + .c('data', {xmlns: 'urn:xmpp:avatar:data'}) + .t(avatar_data.data); + connection.sendIQ(data_iq, onAvatarDataUpload, onAvatarUploadError); + }); + + function onAvatarMetadataUpload(iq) + { + console.log("onAvatarMetadataUpload", iq); + } + + function onAvatarDataUpload(iq) + { + console.log('Avatar successfully uploaded!', iq); + avatar_change.disabled = true; + avatar_size.innerHTML = ''; + } + + function onAvatarUploadError(iq) + { + console.log("onAvatarUploadError", iq); + } + + avatar_file.addEventListener('change', function (evt) { + const file = evt.target.files[0]; + avatar_data.type = file.type; + avatar_data.bytes = file.size; + + // Set the preview. + avatar_img.src = URL.createObjectURL(file); + const [size, unit] = friendlyDataSize(file.size); + avatar_size.innerHTML = Math.round(size) + ' ' + unit; + + // Obtain the base64 version of this file. + const base64_reader = new FileReader(); + base64_reader.onload = function (evt) { + const data = evt.target.result; + avatar_data.data = data.substr(data.indexOf(',') + 1); + } + base64_reader.readAsDataURL(file); + + // Compute the sha1 of this file. + const sha1_reader = new FileReader(); + sha1_reader.onload = async function (evt) { + const data = evt.target.result; + const digest = await window.crypto.subtle.digest('SHA-1', data); + const sha1 = (Array + .from(new Uint8Array(digest)) + .map(b => b.toString(16).padStart(2, "0")) + .join("")); + avatar_data.id = sha1; + avatar_change.disabled = false; + } + sha1_reader.readAsArrayBuffer(file); + }); + + function nsResolver(prefix) { + return { + pubsub: 'http://jabber.org/protocol/pubsub', + avatar_metadata: 'urn:xmpp:avatar:metadata', + avatar_data: 'urn:xmpp:avatar:data', + }[prefix] || null; + } + + function parseXPath(elem, xpath) + { + return elem.getRootNode().evaluate(xpath, elem, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + } + + function friendlyDataSize(bytes) { + let unit = 'B' + if (bytes >= 1024) { + bytes /= 1024; + unit = 'KiB'; + } + if (bytes >= 1024) { + bytes /= 1024; + unit = 'MiB'; + } + if (bytes >= 1024) { + bytes /= 1024; + unit = 'GiB'; + } + if (bytes >= 1024) { + bytes /= 1024; + unit = 'TiB'; + } + return [bytes, unit]; + } +}
new file mode 100644 --- /dev/null +++ b/client.js @@ -0,0 +1,70 @@ +'use strict'; + +const BOSH_SERVICE = 'https://bosh.linkmauve.fr/'; + +function rawInput(data) +{ + console.log('RECV', data); +} + +function rawOutput(data) +{ + console.log('SENT', data); +} + +document.addEventListener('DOMContentLoaded', function () { + const connection = new Strophe.Connection(BOSH_SERVICE); + connection.rawInput = rawInput; + connection.rawOutput = rawOutput; + + const jid_element = document.getElementById('jid'); + const pass_element = document.getElementById('pass'); + const connect_button = document.getElementById('connect'); + + const connected_div = document.getElementById('connected'); + + const avatar_img = document.getElementById('avatar'); + + connect_button.addEventListener('click', function (evt) { + if (connect_button.value == 'connect') { + connection.connect(jid_element.value, + pass_element.value, + onConnect); + } else { + connection.disconnect(); + } + evt.preventDefault(); + }); + + function onConnect(status) + { + if (status == Strophe.Status.CONNECTING) { + console.log('Strophe is connecting.'); + connect_button.value = 'disconnect'; + jid_element.disabled = true; + pass_element.disabled = true; + } else if (status == Strophe.Status.CONNFAIL) { + console.log('Strophe failed to connect.'); + connect_button.value = 'connect'; + jid_element.disabled = false; + pass_element.disabled = false; + } else if (status == Strophe.Status.DISCONNECTING) { + console.log('Strophe is disconnecting.'); + } else if (status == Strophe.Status.DISCONNECTED) { + console.log('Strophe is disconnected.'); + connect_button.value = 'connect'; + jid_element.disabled = false; + pass_element.disabled = false; + } else if (status == Strophe.Status.CONNECTED) { + console.log('Strophe is connected.'); + onConnected(); + } + } + + function onConnected() + { + connected_div.hidden = false; + initNickname(connection); + initAvatar(connection); + } +});
new file mode 100644 --- /dev/null +++ b/index.xhtml @@ -0,0 +1,98 @@ +<?xml version="1.0"?> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> + <meta charset="utf-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"/> + <title>Prosody IM account configuration</title> + <link rel="canonical" content-type="text/html" href="https://prosody.im/index"/> + <link rel="icon" href="prosody.svg"/> + <link rel="apple-touch-icon" href="prosody.svg"/> + <link rel="stylesheet" href="share/bootstrap/css/bootstrap.min.css"/> + <link rel="stylesheet" href="prosody.css"/> +</head> +<body> + +<nav class="navbar navbar-default"> + <div class="container"> + <div class="navbar-header"> + <a class="navbar-toggle collapsed" href="index.html#navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </a> + <a class="navbar-brand" href="index.html">Prosody IM</a> + </div> + <div id="navbar" class="navbar-collapse"> + <ul class="nav navbar-nav"> + <li><a href="https://prosody.im/download">Download</a></li> + <li><a href="https://prosody.im/doc">Documentation</a></li> + <li><a href="https://prosody.im/discuss">Support</a></li> + <li><a href="https://prosody.im/bugs">Issues</a></li> + <li><a href="https://prosody.im/source">Source</a></li> + <li><a href="https://prosody.im/doc/developers">Dev docs</a></li> + </ul> + </div> + </div> +</nav> + +<div id="main"> + +<form id="connection"> +<label>JID: <input type="email" id="jid"/></label><br/> +<label>Password: <input type="password" id="pass"/></label><br/> +<input type="submit" id="connect" value="connect"/> +</form> + +<div id="connected" hidden=""> +<h1>Account</h1> +<h2>Nickname</h2> +<p> +<label>Nickname: <input id="nick"/></label><br/> +<button id="nick-change">Change my nickname</button> +</p> +<h2>Avatar</h2> +<p> +<img id="avatar" style="max-width:96px;max-height:96px"/> <span id="avatar-size"/><br/> +<input type="file" style="display:none" accept="image/*" id="avatar-file"/> +<button id="avatar-upload">Choose a new avatar</button><br/> +<button id="avatar-change" disabled="">Upload this avatar</button> +</p> +<h2>Dangerous zone</h2> +<p> +<button disabled="">Change my password</button> +<button disabled="">⚠️ Delete my account</button> +</p> + +<h1>Message Archiving</h1> +<p> +<button disabled="">View my message archive</button><br/> +<button disabled="">Download my entire message archive</button><br/> +<button disabled="">⚠️ Purge my entire message archive</button> +</p> +</div> + +</div> + +<footer class="container"> + <dl class="col-xs-4"> + <dt class="hidden-xs">License</dt> + <dd><a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/" title="Creative Commons Attribution-ShareAlike 4.0 International License.">cc-by-sa</a></dd> + </dl> + <dl class="col-xs-4"> + <dt class="hidden-xs">Last change</dt> + <dd><datetime datetime="2018-12-18">2018-12-18</datetime></dd> + </dl> + <dl class="col-xs-4 pull-right"> + <dt class="hidden-xs">Page source</dt> + <dd><a rel="alternate" href="https://hg.prosody.im/site/file/e956afb61f21/index.md">index.md</a></dd> + </dl> +</footer> + +<script src="strophe.js"/> +<script src="client.js"/> +<script src="nickname.js"/> +<script src="avatar.js"/> + +</body> +</html>
new file mode 100644 --- /dev/null +++ b/nickname.js @@ -0,0 +1,58 @@ +'use strict'; + +function initNickname(connection) { + const nick_input = document.getElementById('nick'); + const nick_change = document.getElementById('nick-change'); + + const iq = $iq({type: 'get'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('items', {node: 'http://jabber.org/protocol/nick'}); + connection.sendIQ(iq, onNickname, onNicknameRetrievalError.bind(null, 'PubSub query failed.')); + + function nsResolver(prefix) { + return { + pubsub: 'http://jabber.org/protocol/pubsub', + nickname: 'http://jabber.org/protocol/nick', + }[prefix] || null; + } + + function parseXPath(elem, xpath) + { + return elem.getRootNode().evaluate(xpath, elem, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + } + + function onNickname(result_iq) + { + const item = parseXPath(result_iq, './pubsub:pubsub/pubsub:items/pubsub:item'); + if (item == null) + return onNicknameRetrievalError('no item found.'); + const id = item.getAttributeNS(null, 'id'); + const nick = parseXPath(item, './nickname:nick'); + nick_input.value = nick.textContent; + } + + function onNicknameRetrievalError(string) + { + console.log('Failed to retrieve nickname: ' + string); + } + + nick_change.addEventListener('click', function (evt) { + const iq = $iq({type: 'set'}) + .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'}) + .c('publish', {node: 'http://jabber.org/protocol/nick'}) + .c('item', {id: 'current'}) + .c('nick', {xmlns: 'http://jabber.org/protocol/nick'}) + .t(nick_input.value); + connection.sendIQ(iq, onNicknameChanged, onNicknameChangeError); + }); + + function onNicknameChanged(iq) + { + console.log("onNicknameChanged", iq); + } + + function onNicknameChangeError(iq) + { + console.log("onNicknameChangeError", iq); + } +}
new file mode 100644 --- /dev/null +++ b/prosody.css @@ -0,0 +1,74 @@ + +/* Branding */ +.jumbotron h1, .jumbotron > h2 { + text-align: center; +} +h1 img { + height: 1em; +} +.jumbotron p img { + height: 42pt; + float: left; + padding-right: 1ex; +} +@media (max-width: 767px) { + #navbar { + height: 0; + overflow: hidden; + } + #navbar:target { + height: auto; + } +} +.navbar { + background-color: #6197d6; + background-image: linear-gradient(to right, #000080, #6197d6); + border-width: 0 0 1em; + border-color: #e49200; + border-radius: 0; +} +.navbar .navbar-nav a, .navbar .navbar-nav a:focus, .navbar .navbar-nav a:hover, .navbar .navbar-brand, .navbar .navbar-brand, .navbar .navbar-brand { + background-color: inherit !important; + color: white !important; +} +.navbar .navbar-nav > .active > a, .navbar .navbar-nav > .active > a:focus, .navbar .navbar-nav > .active > a:hover { + font-weight: bold; +} +.navbar .navbar-nav a, .navbar .navbar-nav a:focus, .navbar .navbar-nav a:hover { + background-color: inherit !important; + color: white !important; +} +.navbar .navbar-toggle .icon-bar { + background-color: white; +} +section:target > :first-child::after { + content: "←"; + color: silver; +} +footer { + font-size: smaller; + margin-top: 7em; + text-align: center; +} +footer > dl:first-child { + text-align: left; +} +footer > dl:last-child { + text-align: right; +} + +.news ul li:last-child { + opacity: 0.50; +} + +.prosody-sponsors p a img { + height: 18pt; +} + +/* From Pandoc template */ +code{white-space: pre-wrap;} +span.smallcaps{font-variant: small-caps;} +span.underline{text-decoration: underline;} +div.column{display: inline-block; vertical-align: top; width: 50%;} +q { quotes: "“" "”" "‘" "’"; } +
new file mode 100644 --- /dev/null +++ b/prosody.svg @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" height="480" width="480"> + <g> + <title>Prosody Logo</title> + <rect fill="#6197df" height="220" id="svg_1" rx="60" ry="60" width="220" x="10" y="10"></rect> + <rect fill="#f29b00" height="220" id="svg_2" rx="60" ry="60" width="220" x="10" y="240"></rect> + <rect fill="#f29b00" height="220" id="svg_3" rx="60" ry="60" width="220" x="240" y="10"></rect> + <rect fill="#6197df" height="220" id="svg_4" rx="60" ry="60" width="220" x="240" y="240"></rect> + </g> +</svg>
new file mode 100644 --- /dev/null +++ b/share/bootstrap/css/bootstrap.min.css @@ -0,0 +1,1 @@ +/*!* Bootstrap v3.3.7(http://getbootstrap.com) * Copyright 2011-2016 Twitter,Inc. * Licensed under MIT(https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*!normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*!Source:https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:"(" attr(href) ")"}abbr[title]:after{content:"(" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot%3F') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media(min-width:768px){.container{width:750px}}@media(min-width:992px){.container{width:970px}}@media(min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media(min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media(min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media(min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media(min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media(min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media(min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media(min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #dddddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media(min-width:768px){.navbar{border-radius:4px}}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media(max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media(min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media(min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media(min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(max-width:767px){.visible-xs-block{display:block!important}}@media(max-width:767px){.visible-xs-inline{display:inline!important}}@media(max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media(min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media(min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media(min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media(min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media(min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media(min-width:1200px){.visible-lg-block{display:block!important}}@media(min-width:1200px){.visible-lg-inline{display:inline!important}}@media(min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media(max-width:767px){.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 Xa1ugufhlr@A=L`vC<+781Zjd`SV@Ta
new file mode 100644 --- /dev/null +++ b/share/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file
new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 XStY_=A$0InS6e%+*G_v`?YI6DA%94*
new file mode 100644 index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35 GIT binary patch literal 23424 zc${Q)b8sb2uywq#ZENF=ZD(U+W81c^jcwcB*u1eePHt@HzWu%T{r64Psh&R5GpBp1 zrpH53QW6Xt?BCE01Vj1HHtPMK|Njq3Ni_v9FmSDZQ^NmXN1whWB`zWPk8}O!ll%iI zxHuS;qAD}nKQ8s3FYynC7M(UxCU!=S|F|tMFo*##Fc{~J+JhhycUMv{FsPh=F;M>t zT8I}5BbR@1PzC>d*#7_mfk9f>dYS*@D!{-LaKOM)OZ@Z)9W2d^Ou@jE|D6TK{tukc z3e0Pk|Hyyb!~e^V5?&k%&C<@*6AVlR^`EvP7#O7M;uxu+t%J$GI90=cxzPLri^Kcx zSvw=of4b_C|JCrnby$O~*&ErJ{p0@Wg6I9)Thz=@knQN;@~>7+>3{h!f`P#=bQK?Q zc$gXg%TM>84j9aT7{XOk`e*<57N-S@=Kizu?m=$<XI;`gH%tso4GsT78pFY$8XEtb zn_@yHGZ+#>f<a4z$%6g2ZhmH-GcYhYFgQKr8Wa>n1~2-9$%w^x1N;!O6g3boiU>$_ zHTHL);07dg9|VFBb|Xhz7B-Tkq=H9`1!GM^K>VlWxpA2)WT`4bI2MpzVx>Af`V|#t zx7*9k-dH=&fb2A>Bo{*Jw1~K<C4sNsL<@z<1_vI&R0^mJ(QgSRB}bMZ%n@&guPyD| zwbB;{6za%6zV_<DptW{!zy3{`yYBV4zRLFK4~@)<97jP8(jae?gusF>b5sY^zZ0xN z?laAn(}q|eC(8}7D<are^X>oah`CY;@aeHIq#;A!oKR{~cvY8{ST2yQu9>V3rmt$M zs?tVwO8v$&W0G^kkJCA=p0~$C1Rx_?P$pWE$z9RTT@7QLyKg9x6MOu9it`<Axnyus zo$j|XPYrveY*kU2wqu6=Pp9xPo-t@9r?7G_4GazVbNd?1Rl3{-p6=x5N!`a;pOmW7 zr!Mz?jhds??3KQnr&>u(<L^Y@eYOSLSK~U2d=COY=-Ur1UX}ZP6Wm4jFv#5n^V7^t zF5Q*zlO;?PI|H;mR&sD=o9?%~j`^L4c~EkF81<hnzfw#RUT^dra)|2sWn$K^$yjVT z@u#_9gTr8E;`Y{jtb?Q&0N{#R6&MCBN;o~Hg|Ny2-C<7{BR&iO1@;D$LRw`}ty8cb zJF-~0a0UQEyLLr_v{4P)IuWj4^>hX<AxuUBI*Vwv2!L)aQPK};Hjn|R%>C`IB4G#` zAvc&t1dZdW5}meK5K>bZ>ruiJf4Znoe0Y3_dPp4?Z_Ts=h5|Ah5qD~QfO-fC7ta&% zQNfcigTLMA&?w~uIhMhejXy9cNFjWTg{@)Y29xuCw!k1fDeOe4pK>vg)29PDf}sVR zB6~D%o&eXUKw;Lyaa#0xk6XIv3yh+fGn326bcLG6KMJ3R!x{dE#~<=}6x}=t*W|S= z%?K#o&!t*kN^;DHOhL98kO>Ikj)Q)e>C-m<0d)AY;EVYQ^zvo-71Q`fU&{6KOzkvi zmv|Q}VF3mAzkcxFJNnlHAUroldf|KtmRnf_J+R|e@a!nG+st&6skC<(wN(gdoS#C6 zwa2a78pNqkN#TMRgx5sZ<Op=ErPnt~gz?dhAxcY27{gQ^CeOc@+P_=MW&773O`R9_ zq?MIYt{n26%v!c$oSuU|zYNT;wmMy|J5TISa(rex5vN*M5IbXSjJYLEdGo2{S5t?` z=RR1!YD8X^Q-=r<M2@wQi=kr$8Sux~Qiq@pFyaF#avVc-#@Qd&^1p^T;)v{wc1>YZ z%$hz(g~oHfd5sCgl?1)W@QUF_jgh8^Zyh|++QZ6}#CZ}#$|EK*L9iB)VTLNvWXg(1 zxh6?l2MWuxCtrjqg+HWN(%_NOjiVVa(z#2=YcZI=vM!kD(KPLwNX;Ox3^aziWh4l~ zpq<AO-?FX~BKQxwe*6`>y$wCXeIfHKe1ZJ~srJhWYM)rhi9i%QVsl<HIH`mJHCCRg zw^DpyA)CDZ5K~CI_T@9WYpi}Cr0W~WxV4ZFx8TnORU0$A(55mG?dH}dabwg%cBFM# zx{}{~zlA&Tty4ynDB&}%X`C$UxDB(<`HZk*fsimkS~D<1oMLgWlKb?brc;pE+MgzS zjkp`+xPWi5!LOlnuUN&KFIY4}mZS1D8VBjID-6AYCP`*fKg`fHAUhW=!%;{D#NLwz z0<r?a&&K=@A3eo-bM<Ixos5MMaWOmCZ=yWI<)|%JgJ#i?N--+g_1K`g#u`yLf3o^A z0{Cj@&aJaCuhS-wwA}#0;d|D=tL%kp&$qJ2@I0%I!|3uaJGpzr^Ud`*@fV3FWREhZ zAE4=WrtTgS5f9-uc2}l&i-X&X4;zb?3FihM|IH;$TmKp#(2A`lTQ~6O#t(6bjccBh z*obXfFOU<}0X5ZIxS6sA?G~eu2!H2XdRTR0M>>*_wA!LBd*QMX-T2XUPK)cFMJ~$~ zuw%j+@Q0x~V3~v~UGxsYLH_(SV>AK4i874S&Z*0gcDzD$Yqh6?)E~i+Y%8c1?szBH zoTDmbQKKh_bel`j{UY)NOYtMNdQGA=-YeK<@QTwNv+e?I<K#5#PuB@<I3J7~%8w;7 z0v#E`S?&vr3<a=o8zG`*?l!TEVofI>!wWI`sQG`tqM&qQ5Y!fHKl(41r*)hC=zt4L zx}5C1ItS}2MMau!crt%ety_z^cTw7hu>0`ONfv%28%1r;Nwe~r%Er<1;aU!xGDMVg z0aJv7rkf?mxpG0$%a89LuA^cnj1KT)RpAh!M9hankH2gjuD99(Ky5uPx69wn8$h#) zyWWkij+<`ZxEM42!b~48zj#LAAYJ~#21Hhx;giNT>+vv2vnP|WB$TS^kxn)S*sx_@ zlM7ina^>hj;IMg@uLA(KI}Ho20-aZ3ny)8%Wbblbidt57>Vp>~efAFS*%v5?n`8K# zO~kytr$<O^*rN#d@;WvmxSt|~GY0!kVz|edJE?HgO3=qdk=Iy8lB2*<nJSj81Hmt9 z-0RnXFl7XsAPUK1<<IT~+hai_k!C!S*$5~448^O!P}JbP+Rp>rIZ({Pcv;->FJU&W zGOTIaVTOu;-~?!wFPxXCh0{K0^Kat_eVqG_To4~yl|s317$AkO?AWMAR`*Dej4igP zGJQ&G^57Ug{3Q2HTN{6OBbNSmi;Gh0;<qjDuk5yM6>(mW1y1GaaX)OM$vJ28$cUE* z)Em`<#Xjv&UkKD11x?GWn`rAD#f8A@FJYk&!BNRI*iQ}PSe85zBm6zG8Y6jjS9C4+ z9^}FgaNZHgrzgwjCZ3pUYlBwLo!F1Q!ZYvrIlmT7d)RnCF2A-_oNnus`q9}e;@NAf zUg^rX+WxM#(LXzcR;8aKuE6ULxewLY{3xRt0xgM$E{QH<V*-3pW!ANcCv#YmR9M#} z&+rGy@wzR9c1ChjG$#>^=haa?AW6Hwq+v5^_bF$S)nU-@?<4~VAVATk!Fbc4-)iOc zYPbz`_x5lnYG3yy^!Q(XMkKw{9KK<aeG68>3XgDTmMxZD_qz!LPtuF+Z7$nQ{?sh5 z?ODIfY1MXzY@V|%#?88eK2Dpw`9|BRmcDcQ&exl0tO$p`qpm(H-847Yd(`xD|G}DL zhrc9-)_?!}j`p!y#ndAfV`so6x6<TJmQDQTfPr<ZaTjXrSn=)=*(CN^)wN3&!v~-t zgyC8hXL9cZj1jFQ0Fdls9vw(@810+ROP2pMn7w|RQwm1Ci?(uLCyMr$*FIzp@V5K% z_>~K~Bf-w?Tf4CMn(NK~`YaDn*_k7E-6>e2{^<bmGq9A7ooIAI0ijuJQ;H3(I!e#F zX_7n9l#y^kSdd~<(bb@B;DV#)yXOo}h8Z4{!JdA|YR})MS&U7o0`6>sW6}pZoY-gD zrBPQ_INWEKOz3H2bG&BRZ19HNML5KC9IB+)qyq4L{wS~-_V^uXh<&IRl+^7JVY4jY zGq>0{KHx5zp&JK=gMW}V{m7=tghRVdrvIz$VrDHMeg9SD<xSsrWHsx^mh*e|vcQY9 z#(@d4af{q?jA#qzt`+-lM2eOeJltQKxRt)tB=>?p-Ib$lDC!(Fe+wM;yLEA;;%`b% zG^kJ_ojm7WAwf3la$Lk@B4i>>&rDksV#C!!ww@7D-LTFb2JraxG|azGU|>LxeZ9?5 z3sYi~P<K=ifI6RJ3vFvsZv>E+SXE?h69ex2c#hX7aA)U&tG(Zau!UH?sp}qw8}Wak z8g0Cq_+lu1i<Qy6+~#$g=PRiHIvlg@UtkopVUPdBJC=IHF22=Xu=CY<Nc8xN<cIs7 zvLJ20pd!F1+IOD$_<`sTb7a?(SRTc+p4bS-G%)m7rr?ccz>wa3&XR}`K=p5T1KK2a z9Wf3TEPj;4XEnA|%`iQ^FUZBh*8y<X7(LMGt@w!p!tW<osbO(R>+{~<IAf~GJ<$9a z)Mn5K7Zd6wZNo2Ho4md2V?Q=1QL=5>0}rnz)$V_seBz+raih_+*BKEWPV8;}JfG-o zy2ijfKxZ9f%LM(pjo`uW0aw!|#6d4v;3Q4p`^0a~)uIdHRC|mfHmw4te1tw$7Oe`Q zU5Ihl0#z?)0$+Z@Q}nW=n%}Y+_;Z!k^TOxY1?68Vz{w<FM1I3IRCwZDiiVOd8-S>t zlWbb!xfMMu-{HO9%m3W7K*@hzQMGAz@V;EL$!@!+I8r@!$e*ro2r&6k5*V7@FH)3A zv(#y~+Sg{aWV32N^+zX>anb8dM+s?aOaMXMB$FmAdJ<SKL_MBxDp!b?F5y;eJIi-g z^(@FA2jTw172F4!n{nM2Vu%L*rP>VmV&spzaxo&!!`?KG=GjxU3Mn$e*ev|vg=DP8 zF3f^?VN9Vf9xJ}I01K7U3u$W|D6VSdzzZ#6G5_~zShe>;i4+^nn>UoNtc`Kc7u`!5 zm6+TaslCK!kx0}>FS3OLTSeX~0+aJeBxFxy<@g}YRiRJ+^fU-_6M5HlX)pW5=tbqO zQLgL#?-a3ENiEqLI_pD=*v_Se*v>^r@D1tr*N$dZ38{9n#SP3r%xx|2cl5Nhx~smk z^=y0ZG_+QC^ey2=&rGm~OWcQS;z>pdD}#bL49{EoAWFKr*#TV5kK}_AffYqP^Vh@s zKwZs%*p`&1FD-wK8lh?s?9~_UJPLxLyqQ%EFRwfM$}R~c1f@`nfXWxjea3GiC<>5C z$+JGUHu%xDr0jmCF)TGKjSrQ)*oDNv9AQyy)C^*~n0b)?m;q(<D>L5A>-D1fZq<$g z-%udl24D641aeLoTxr83Y+@+qYlD~;LGH3fN9jQM4FzyiE5IK?@+M@1KLFwcj`z!5 ztiRr*tJO=Cz!5{<J-WCiVTtvIBw$`L)tzFOCma%<8TiDlA$eZO!iu@{xAvDDBo4vD zrO@QDXOLjA-y47;P>Kt%5Ui&e>qy2Vj86E0-T`~{(cOq*{OU1LNb=oh%b_Y^nW&bc z8xW^7q`X*XKU~ep32&kkgjSnyA|6#(x}Q8q%S76ckJ*Jv5af2vXCI^Bw}Aa8X5^Dd zs5>XP3M~)y(0$T1Z^H8uDA}ER(d0AneH=3lBe&@l)vySDRUjW~mHb<QGqloNplycu zmBw`2E?7x_W9IK}A(#WOOA>G$9O3gKY0zOqm_Al6ewQwOM(K}%rvQ$?X)07j1Oo7i z9v}(bj-Eki!om@$4&PgbV4UQ0m#aB`HY2`Fm-kW~B3j@HSghBZTM+A(Tc!g)))DW7 zgAuQr(=KLQ@Uq99mkp#1>3&R3j30}TwR=;w*7t!^h~sT&KaFmb>{`_8Ln%s^uMPbC zE_flfJ5G|<s`~KH7VSwHYz~to%6l>MPh+xrtrB`)$vMD^K^JAfmSY#!wd3I>2S@qH zHuP>Ar*6Mp>tAb&pw5bhx*}V_T>7V5aCA5<IYnxC(#9z6=dIi#Xx_1gFdT<|;EK&- zQH0!)oqwi7pXwnaJ$tD{kDn6r`^F4a0fG&0q1h_=5v$0VY-HN$;J%oMR#r=AOf<Iu z9GHB_NRc3H!&W1)5nkC5DBa!X5ZPCb=?B8-=IV7|JFgy!XpQF>1X0O{$4%D}a)$AQ z88(q|;2ghwE%WWqgoG3DFzcUf*13vm$_o3SyLW=5-Q{x9tD{DXn;>2I)gIQmIoUg1 zY5G&sp?1*Onk*2CHc_Qe+wZEb<M69<d@+Nh#DusL0@G5A@5RWg+A=ngI#vwPiI0m} zRVv+nV)4<7#^C-Pe~ZThay3=A&1-6rP|}c{5A&R4)Xh=r7e!(Mr?MAKuBX@<(24m8 zLU}(>iF)DZX}N0vSQpe40=wf5%;}#qK%A2}#4{W7TIayDmB3>wWbK01`&Kv>f_Sk= zBLC)FFJo?<px_GYX1{xs^a!@lA%=NpHU~H09x?ojYKAkLa-wOA#<57=K)QZkYu4Bi zLnc`R&&ht}xc^(w&Y8#=cj=K_ss)WzFqyh{_@1gn7EG1Q>Mqgy;|>Sr`t#>cf!pqP zOUIcVjV+<VY}yNn5mM0Ktls`U4WiO!=l2<*otCpPE}Xo&&&QpQDUITdn5c>V{Z>q- zmIK9?&Mm$MnCIUm1q+TPU<mAai9gR&bnKX*(i8zNf}{#=eF^e3H51kxl~wyou!baj zEeftNBFbBB3ZdBq*AHIj8kd>p{D!DW$=FEWDDCKWys}C*nisS}GdIPJu6T*2_n@|e zpsKQ<oVr<aWuGLSnpru(OAZ-#Y&%Z%Lc)GT`D+y(GqO2Kg2ZpkqRv*B18&VR$YAPE z+3I?&PI&*O2tW*3e*X3OpxW|r4KoPDjB7)n#~)Tgi;RQ`yFn41=|$GRn$=zs|1q#; zZHh$jwgj^Rpg;ET-3Rta$<Oury%J0%*>H8l4Mofeu&f?(LWMd66nWFb)aJGAdpiVU z->~}2o_Mf)vZ&4h%u<v*s7jzx6Dfp6Wkulz3XrHEAyC&}zK15meb99D<_z$aAXAZ1 zSC*qA(A^MA!;CwTUU8XEI6X--mB$}9UCd9M1d**tY>dU5H(w+%pnmWyXN6Gmq>>&> z`}kv9eaj2ngv-}yzJZ`q^bJlRBaiqHXOfFrR7NynTZX5qEY8AZ(~Ko4MV|=PLphK4 zIm4#Ud=&NJ+Gof>=0RtAp)vCyRfjaF2+^!hpx&YEcIN46J#jXXdK7&)A@s1VDZ2w5 zCfh#oe=NN9Wd@*6wu4{csVWa11cyZ?SYD8kTJ<kfxF1~2%0eLVHV0@6ecV#K{_gm- zWXIn0?xcGY@%cIR{*K_c%FrWm|0v?4aYQ(u-xV2^Q-?XL<eMk{bYxK}#G_C-GA3gx z<Wm9#NmuudHpx7AGY`kCr%M`HE&IBd5Ym}@uKPE~oE=h1aOxZQpK0Ph%7JnP_XY)s zII(uC`<*zX;bnx`is@q{ucY9NTpmD7{i$ha;9%$j|2DGv59`qchT#dK!${tge(jW2 zrxE`GmgY<>Smsi@q?(ad6k)Mw>~yg$EXhD8{`RwEuM*EG%WrS7kHdNo(Pb<G=_(f5 z7p6(Hk9a+_zi#l^k~?D8CMJ!VBYqA0IJPSwV1{9-(HF+B<f+%Ds<maTlQlzInNwl| z@&UA(`z21LDq_4!1x7yvjGGn^NS)<aX&AeG3TB>uOP@~mN)vvvPVUhduG<jK)th-1 zQ6~2=by~*zY=s+^;7Fd8Ab4j>46)R`m~eO!nJX*|LqmlhCiMB8<nH#VeqR4pEvv~H zL>ZJD(f>(=du~p%>8Lc@iJ^*LZYXMJC%x#-Gt9mh8ESB0M;a#%M~PMlo)I0y5J<BX zN=zDx;CP`qQG11Lv1Y2lEZ@eLR<){ttRr803-frN0<3K<k{0v{WY`@d!LN>M@4_6M z&1kGTSbfgNxTtBL%}`c#K-#q3dVh79=(qfYcm)ZG^hdHeRV~dM4s3H2gaqb%(+NzV zhNcImXtBz3fb*_%7M(-2pgqk6e_!9;1uCNGyP36H$30?%j1W{%30-gYP%o`57-<Um zTo+9d)lRYLe)&x-5@-s|?#K?~2N>Ti&Sqxgl-kUpVKC|i#C7i&b49txT-4Z@Q_p5^ znFBjL{cHN$?JqJF8F`*HHcr52ky8ClA~ng!)4k}7_2@#`&=s6D8>h@8`4lei)z7&~ zLkMYf39#yC1`-}RlNn8zpIUI4`quhVvyUs>))lZ%zijiVNnWy;NMM&9c>tSqq*B0z z4YDCJO?tQvPFNPP=!H;<RO~IM;*pbRz>Bj}zT)<{+#emqSxpS5SB6pU=^zwlEyshn zo4HH1EX;}Vq(%#V!NI{2x(v)HU0Lp8C<jA$BEC0(s@{_7JPt&8-)O*7%D^6a3OH3( zxTXKiwBxj|>{K7Dq`w><?uCE^%g?J0<q)miG5pG%G5Qm{uZ0tCK5;ITC*|7()~Z%z zu^}oXWO|8UuX8WIkV4Wpbtxgi4;jN_L6}kCGtDF?f8O_y%iN`5PyqN38I3!O<+-{9 zFU9!x-{@7!l$xUMb%dL+(s1rqVMV99pK}RtY@qL-#fS-$G_atd4$hw)yW#wAptrou zv8##SZA4}1ND*wQAl2KWiY#0nP_tGzYk}VH{nX<3&)R8IbHO1f(Rly1rpe_Q#>iAx zY{4?kME&&($4VvVoGTsO#wMD)$)oY_CAp)q`>nR&Jo?w%P6xpk!D8iSWU*~D2<O5g z0V4H^ZlL*!!zy?(AykC`y)apYnc5liu{^qJwB6rR0*`<R4<V7?KLzJd(n9j427CP8 ztd;Tk#}XXJ3Jhj%?`Sc)1O56NdwW^0L%;W@un~>@bwZGAdS+MY3vI!%k{(V-zmicq zcjjJ%nBPS<D9_w@C9|-ry+0J}m<1)a%+l;VkM3-AST2l8d>GccOh-F(9?Wjo_T7eU z5|iOQ((?FU79qvpIL!b3qN2E=`|=+Rd9$Y65e{5Vjg)unl{z9(H1avCo7wF*pS>8W zOr>k^KCN0y)n4WQdaS=*yL}}3_}uhwc+HwKc+7{yGx@tXMV!^{azDRwe%#x2K+wMP z7T5GSxZU#ew~G4yJXH3w3IJLyRhx>NXmg;p<W6qd<;RdyKbon&L8Y>qG0itpgq&e- z0?+zybXU?XDRGjEl}e#@>a#jM*2>g5TAjC}K}RSK`Mdlq9o7@tQaz2>@c?LVpnh}& z^w&Bix5>%|^@=6tp;!KP&tuk%$84U@6p#naAfxB_kBj+k=TVlOuKUsQKrm6t&{8qk z1g*}ch)dk~X8G8x*B{a7o&kc7-?3P4+$#81fMU^F3r@mFpDA^_vSe2;O)}#w$FVw7 zB>NF&uj$~u$sS?%ktOEJ?nD69n8{~n`coA_zUQrkeKPOI5xe%#=Og}LQxAie4&$+n zb6fhGi8S@on8A4EoLCplcpZ&_T0kB0*mDX;SI*V_{1`9;)0vJonpWm?Q8trMeU&7Z znj&yJmJA8=yS4%oNcOr~Ld(E6cyMq>J`KFuL%1bzqwnIbP{+k$S9|HWr7JRw<U_9t zY~iXE+7k%KFKGJHkLS5W5Zdb11^JmSfBh)t<&YVc%zvvqsYprptQp5yN@z#59bV_W z9lmV(n3@@}+`D{}Op@qR_@NkO{FUGc>V_4O*b1DC-LXKJpPl_|itK|bDYv@2j!Mk& z?-D8LDayRtRV24_puZx62wBoq8_0=9Pq?$IF_m6WV_l*QgNK_yRl>#tB(kF$U{1fg zn45?|{%GH2hy-eh)ZQt@1C94>T&@ze|AxoFp=5bUM_PU=9nO54!r1?A9ITlr;8(iz z&IjJ#7mV3jL9RpX$q%kd=%uQGseQRZEl~Bvp5H@_mvqW1d&uGDA9TvF)L-I#ZT6aG zVW2Fk$6Tm18A=uR-7(mi#LQR89-@@AL@hboL`P7l=;S)h>@H7({FiRhiE<?ta~K4N zHrT-)hHrG^Ut%Yj;wNUk@+F?9w55}SgDO+2h5-ptOUf#O+#~nJ$AZSduq6Z!Mfnoa zFyQ=~xg#EQf)P>~gOK#Sh4iaATMbTRtBUbeSd%=wJDlK-`hcoKW?F**D>Fk@B*}0} zk-JHCgZ3Rnfs`G@!@x*IA`Za6L&Po)9q3(!I3+a3T$T)C2h2jVM1f&Mcv<62cR23Z zG+n_2wXsz{NyAr<nn?tz>>8hq%rTSWD<E;*akw?v4(jHcI*TPyYtJO&Y*EYP!W)ta zI=*M{l|3HGGA0=3{vBjwWcu5paj38{!Y)|ZBWc~A#(c#w&^0?3(pF#G6jHR~%HcOC zDE394%}=xYoM8&vdMw0XGWgQ>ac!C)WqyA2(ZjYF#Nv^Qf53TvkC$;LUt>wWW&S94 zShRWvnr(CBTOL~;>z`{=S~jgP0add0Nhro-Em-wYfu5cxMlxu{#SZtcHEY_Vsvb39 z&j{GELS^V8bJ5kFFs+6ZvVpBHl3;3^-i0jZf2vwvv(@V#NmX0FxHRfP;7FKuq9mG} zeA(#s_}V(^Mc%4-#B*vEg0v}?P+?(LlH~i)SUbIH=e_MQCATX2C%f<Rn{AoCW$*Hy z5xUDRSPb82eyaP{1=e@sf0Ovjf6ER{hmKhdu96lLjfP!-;s~=#AKl@uPEle3Jv>Bz zYmsr+ZatAnFA(Iv6;g45CK9E(^*Nj}i#l^9f+!m-?Q!@+_@|q5ov}w|L)>^^z+|lF zfS+!N;SE<;Z*t5_iB9>{Bzm^1lC34&G89I0nLHESPxWBG{?bAlr!AVbZTFG0$4E(K z=hgPNSY)56l6zJCd!2LnR}k&0@B#gss`((XL2%l4w<jgDUp5r+x4-e2Cb-XLCxW4= z;u4{k3+fqy!m5OSXBVr<6_<Ql2<s}x&xdz4OxjI~)B=cz^OXhT8;6$!`8s0ligfLB z-S|0u!&=1ZKZ9a}7uJ3^B-;MwUwZYY6|*fm62}TqBiH-RVx9lIsJ)Cvi<I}WsS^4& zwB&CPS+Q7-%N-&Zb}DcnNuD*8Bcgj0vn1~H?yj5zBL;C5t@Y@u^BCiz_#F1d|8uPD z-2|v4<C}+ey15cn^u~s`LV_E2UNAgTp9?-uz#8^Or0ffMbsj4ztp}}(bTy}zV3V=a zOS!)c_>tU;ajUho4xJ9-0L4w!iG;;Ejr{7qbawyqz;(YnF8qQY=YGRB6*%_^YxNC> zs(R86KWQzx$-Fx~PO0q;$H3>y!QCC%Yr|Xv;K6Qo<bm0YL{1K^V~W?WJ2j_PA~sn| zzMf4cHa(gRf<9WKFu0ln!UL{#z&n!@&0+CWrrG=JhdjH%9E&hD&Ye}|^xD@yF+_)U z^_4@3;Fs_3Mg1vKHR#tIvBy1;`XUW_Y9VO1NEXi>m<`3NuU89anC2fE5gsLuqZKvP z+#km=+Bp#}Pqts*6b$?&yjE=QYi1Cb1D+PDPX@-KJ8k2YGdLBh(JS+#ol?np{iM6i zj1G1N7$vkL$!ou0y~!WO6Ex%`IRcZDCb_Gax!_$FfC=KKf%X*Q^fc)MgIfkzGOO>+ z8O<-PA38+DevUXYYIdgbuvE`ny~3qXVmrLVl3zulUR0=e0eN7fz(<s$<bzd&dO1~o zxo#D+^O51|Z5M|wo0kdS@m%MKzXnS#U2d1z{_SsRo7WyGKihw`Y5<iGMmYImwEyT$ z>y6sZ+m+qUoy!zokjI5b;tr|Yz@xK)p|sCJy1G=bJRcaK`6ur^wq{>p!7spW^9@_z zNCe26U=xONbwd9+c+De!k4qbW<~NAgzieBl+_9i+@~Y~KtR!%$SeIXIsl=W*#GqU$ z025CTgws1@o-t?ov%Y-TEXfBoeGIbM!&kcfePJA7+U(5*NHm*iW8{o6Zt`kdn>HRW z(zLd><kEhSN7<8nC+lSo8SvQMcX5$S5bLr}uuPl&#d7~n5|%88u-B*n-K*17O-j;m z7ZG@EFLoJ_6N^~$@1^6TQJ`}$D?UM}Lk2AT)T8|Y<1j27ri+fkg<=?^V8QJ<w`);j z#%HeQb=#ZnYraxaiM*3kv8jJ<#Zgz`#NkA}BG^gO^{{_`-LrSpu&|4}{)6Mk*@w-X zHn27+hX{OEKr^4~WdHkYjF;z^%&ZxIO<&6Upi;t+Wuq3H(K*n4wIg_meDpQiMAqbO zFx!DddRj4D%uT;po+GKQ8ZsyxusC9ql2UfFkQRPl_83~O?|C2HL2w+6kOAY50ivkl zBTItW*`yQYz~`=jV#Zghfxbj~e3T~4T9Bk*iNeKi5T$*XbiD9ekaTff+`?1v&Fvhu zJ&By4(|4Wgp$^$j%j{=3$V|6)#b;=<)SW-nX5X%%#L4qeUQKRgm_o=C4v1O!n=opF zf0Sh?o*H7I?~Dv8&TRJuerWs6XgDQ%sEE-6FyeW19lAl4-%iR`XLGkqZ?q6O<8iX6 zX9Pg|Gk)opyA1=(^fL*1U{F)3bj=|X92Saq8Me7gW%aN%YkuqNth|DXpV8W533o2E zza2S=@`H8JgL6fhT~8u|=%))9?Rl}#8o_&!_~*-RFymlfPU*(qP!VeOz9;N7_&fdb z`#c;uckpyY5tOg1zYh7Pk%lC>JH9K`BWya$vpTBFf9t~Bb6K~^#Lsorc(dYiUoP4- zfthD|ohXV<)9#@a{E-viJllWx(X4aUTKuu6+4N^QeO-{PsaNQdZM?a@@tHgOq$Y29 zNx<jv!rUUk#6_%m>nLa0?%=3^Fl}?rdA|=C<<YF5k0LfZ3PM6K^6rD3qZJd~$$@uI zwipw81?r+ltGdC!%AqSoiNQ0b)x4FL*{k5Tr{12YJXhm>p;Wb;O91t(>+b3_*$sv9 zQm=yw;<wz<T$#Fi+bls3177!jb71J@2vA3WaK%0Qecz_OzvSlv{r6wxOrIOk`Hw4k z-BzDj8zBN7NW!JZwnbQW8O~1+f}1$GinU{t4h$NArsUQ0iCk|)YF-);`^_vz#S(rP z8E~2B)KLbGMOa36Mu}LRoV?Oyo#;x&-aSGENAOmpBR*q-$Mu-<q~Zs2byh&LuT3#3 zw^xhRRZVV|1k!uT?#s3b_x+&6Dw*=B-e#~L0+mQskU9HBfeU?|2zOi=QLsq!8q{nc z(UzciU7`R7vYSWS%Ht48mvuAHUJ41!8(N4hRT-s<Sw`S0W7GUo`tuaxnSI2*>j*nV zKl8XRFp@;u?xsqLym^A{P>E1tTRI?f#=O%VQ^!8<8~<PyM7old$gf2w=H_@M^a=6h z{u{W13QEd&0wRB^pI(;ETZ*O%dP$65v3B{ik%z*1&0Pr;y`eAw;Al_E;?L_7*?dJp zz|n!A(RUDOtD7uN1r$9kRnTCOq*AEtFob3*Y-(wAS?^2Q?oARy03}_*$ul_Jw<Ayn z(OYve2<W#8%78}})vHbWJNK*m`fUvBtIwlU<4m8FC44~*qf}9BC|cR?wC|jwaei>$ zM;gU}{xB1Zj}PkcG%0Vwd8}d|2>z%5Fgg0hQH!~Cu)wYg&r90!sSq1;b&Q?Ol}Kx& z&3g`BS=I5|d(kk`!VxK3Hr&N^D(bV*ou;X<%<N`S%E13{@lP5)q}7Rdb~kHQR#G%) zm#GNpnlQ~zQiz-AW30yJm0EtGrNv~PfTONv<C4$NiOLp<p&;IbZObN~bI3i*>V1~H z0{6}G3}ydBALvR<@+|4pn~+^8Wq^%sD*p%XWVV4tF(&i%JwoR%tETFfs2ha){`nE5 zoaBJ)xV}2UpG+$cLbK*ggJD~&8TZD}_`l=5Wj_lW#YrzpHQ>P=gt=6NIivXpzQCzu zBrDfgfOggbNQt@u@qRx8qV^X*Hls^8xH>@uj?j0|m0q#K?(D(@{4jR&wR`<&e^7bU zM($u7h2l0KRk(=Wa^Fh9qgfWSvsyNk=cGDxt?@%^=84C5*Jr$~cAwjgQ(E2#a{WVY znCU#kAcgiDui;iJj7k~5F-MC*)!C<HzB3K~-jqhP=KN6+m^=^F5sm5y^^%k#=WL0N zc|JEc`0Yw74JdOm8gIP|-yiHyd&>G}ga<w!1{2&Ipcn7I!HdUO23SauD@b6kBxvLk zh0&gQikc3O_ks?9rOFl;^EXR5wHw$GUeI5FeS-v14LE;QLaeO2u&Y7V!DWt+?AOiT zuShZOt6L;K3eH`=O9v}De$!YHy+|C?fAHa<1{rX6lK9TsB|m;ULinX5FE7IdF_v6r zHHlh>@py(vPNN2g3GFv}a4kg2-hGeLnH>h{8&Re!Iad4TitWa{{>zI`C$&dtlcZQW zT&|8qGuON1)P$mBeSMxTFy5bu(D_d^_HgO<Nztf=XvjulYT1UA5UB!|*D2l4`NQ=O z=p?4uLf8xE_I$-=Y@7IPJ`J(oQ3VcK6{K%?Gf#4Oo4KmH%>?II&TX#2N0&{Pp}gL~ zT6&Fdo^~;tvX-Ds6weOKoB5y5W0sp7sPzb?a;Ju2DA0UfrjU+I5+>Q~O<H;4{EXl& zwzjRCR*p>F2E=Roj?1gOaY*ZK3CvgBPajyBOw}XWy4TLOc!~ADj@di14tghuZM<hG z{l%Ta^tqVTe(|3sv_|%n?i{eoA(vC$jHYFPNHe={s6A4upAOrR!t*Ls3rRZgxInNV z*j8V;7=w?v=$GvH{d%rT1s4S=oX@@26Hvpc<=7C4M`~E-&_PiPi@s1(3kp;QvbnX< z3?_#WRJ>JO+I-n5IHy<-+k?Hs;BUl|lx6dR3xV4-x<^xkDNNA&llwKC(@&EFKzz&l zSB$NI+xp&xz7Sub`Ti@T#4?2c;l<M)!JPe^`^&N)M^MMyDj`*O)_LFa=Udvvsp4{X zv*~$Uzd)!C1Qob@XZ$JY5>)d%CX#)<TzUbf8|nOX3cYMuC@`0T_0TfZjTK+o`C=Z< zq5IPhl#2aG@TjV@?<UX|bLCOaS7tw#j;X$ea2<?4d~o<1<HN8(a{J_Zye+?1g3w;5 zyY%aQx7vofyJ%+JmZw1b@hU%_`0X;zv^v~EWFKdU`==_3)E*|Vc~U%|g-0O?OGM6x zXeUta$98lmL@i+zDwysseduH=O?K~<%}6(%Gd=&Kx1)3WAAkv<|Luggm2+C??HSU@ z(L+Uw)(@L~LnW7C;LFzJ$9}T?*wOWd0D&FaYu6wB7(j^Z6fuE~OX$qK+7gdx<|4$S znf6aZzr1?pcYSpV%+Y(}3_g`<!itpn0UTF`q7B=8SWEh+qE!l6(eDKCv@L}YR#KjN ze*Q8m&64fg?!s!%Q*Pm#E43X!*@_K#gvQ$EX;97(e4;R;d`@P?p2wm05Hh-U`ISX_ z>f6%3N0gz5C*y1X+EWXy>3WfV$m#^zrsUj@U(YXEK_=SCcFKT|lSGtV0!@-*;}S-w z%6UmdWQf8bOdymT?jy%CtSKXlF<Que#Ytia)L{BbMT*+@<D_5LI-#ChCQ~5jd24#Z z_xGbnzXV@T<bD4R`7y~v`VCcj2VlO!S`|>FcIG~<>67qEEsxc442r9jRVYRU(Nz%T z?7q8Ag@%ayEiq=`a1;mgkHnzY5}iYcQUVNDUg~l12pU!O)BvS3+K@ZZV-1pWe*b%~ znMCT?!5a2S>UWs9-fsI>Z`<u74cl!=XJ{MOi4~gGG8!Qjl)6wD8l4a^iDen$ayc)^ zZfH0QquD1G;;)zwoI-;=pkIL_lmuVcqnwk^;+`7wtI)L-Io0Lp4(serGRXLraR<=n zG@3n)H`R(3viY5~D4Kgze_+yCreo_Zb)#70w@;1fcooh}PN&}KZ;_dYCFOZ{#bMRu zM|~EiP2k&4$chUrEgqLnh-LReV<AOC3I7dAC3Qa%LWewE?JGG9yd&p<vy~f^TNIJb zq3INLs)(R+F7ZGQ93<jT;8Ua%0Ks^V`7+6J9O-gTWE~T~G09TNSa~f)R+M{L2C?h# zo6sJ<3=EY3)QDD+>lTJ$DPJe85>b*RWS9JfX)(+Kk}5b9>2DfjOVD;>zM${dD+)-h zJE>+%Luj2r@%J_);R(53f?*XGRMheT#^oQT7`FKnoNd9`W8_Zpy`~wYAoJN3yWbXk zIk}9NPodKoVzD$ir7LG{oeVJDg{8Bk-k9kkhKvwn>peYxC|5iY-Az)4Y}ndi%5*)` z9Q8~#jIlm0Q*37gx2*^*TU}an)~(!cP_T@KvWI}E3Jeyg!xgr-(SH>3{-${^ZQ(a( zbIH2z0M-Ylk~AVzH0NS|Hvir}beLtwi=y3N3~kjCHCPn0rPi>2XtdAo@B3p<D$cHJ zL&%xe9G-pgGhvmwwad@EJmrUWkFv+SFlCB5CGA+1LmMyShmKTF7zK6A2zod(QJ5b> zn$Ym>PruR9o?xy^5i*6AzaLPrmQOF5g2l(zLRMN$j*~>6uaM5!JtArAg@28|p6-R* z<{GnSJDV9TZx2z{F3*oR`MQCsAkjw(=HS*d;e~z-S-8=&FL*L4<yu%esMG;*Cte>} z8H1gqslrDkZ76&$bt&+ZNfKJL!GWIqr$WnSA!$1h5q=Fm)c8U)GCJ<DyNX2QrF8tm z2|!@$r=b#^a!!6}{BfWZPu-FvzCy%`>K=rGRQaPYTL~1Q1PNLcr80ag<(NyO|6#J4 z&CgcyRY*c)p1S355^(N!6QE?tEw}*?m0ak%)OrED0mL(X8BULdx~-&!XI#~WdZwd; zSVcn~la|<MYh3hd>rB+D({->MP?w<I<{u88<kE?0ZG#5*o{+kh3NP(X@xZ7IZgW)t z*0l_jBy`y2n4~Z5lNYQp!S+o33A<9yykhg$=J89|w7a(q8JF{XS)n+?EtTL8Due0$ zlIMB9{BLFta135v_(*#0OP8zr#rpyt_y{<CzcE`&NvWzzVc>;kOC>MG5BG@I+<F_U zT$eCw3H9E-N0SU)-l}hmIkK|5K|y3t8usn#?&e6db3MXxp~>9&mqz)^fN-6GyO}Pp zIIk3^`JAzv-;*puyRggxHSaiuJ>*g_r#mb;8PMS(SjAe&|K{REv>#VuZwS=d&7R&S zVwyFG+%4V5?x!IL^!<If3KCB7PT!iJ-)n*^b6LE{uytwHf8evRv26t|IoBAFyMz>; z<tA?lE>kau)-dX>?)r?#S}nHl=mu}MHjh_!GM?x+n(h>}Hkm9Uwu;!dZgz$oTAcU+ zlOu?Fx;cq0)vnXdKPJ*zgnmG}By4OO*wnto$^%W%wQ&)lBUy>gbugM*>~#a4OGAve zTlyq+!(&gDOCV=FYP$Z~`~a9|{yvHn3`h6^nJXNEqb`dFpN1_LbQm4oVv66KAtw0y zQ9q%;*8CCfDds?pb3=r(u&>A_Rva(l@2sUUM4&cas_AKD<ox?w#}`8K2U+WxJjs;4 z$*9m{@neTrJGHFEeFfm!F5i4prgdJk(qVI}4i>OmiSknW(Qb5g3J{Q1`86a=R8~Cv z-8zLW{Yi~JYOwf}>SBp`ro&;hq@cfX$!jkHh*X^3eU;4`0^nih$|f!N@*m~e`;2WN z`IWNy>M*nfT=^dSMJfJ4v{>)5^G!xNm-ocE7%t=nuEfhql6U*4<L3I%J??o5>vMoM zw%-(^PLUXooEHMQtiZu;4K#9Ls*uWkw1~)8lBdJt2Ar(?kQTGh!^@U~#$~3DivI*; z##zw!G2Y9ZE<B|-7C}Y+`Xf;Uo)e?ubcL)!^R8QJ{wO519H5@iD}wHj<ZcWnLJ2Z^ z)bCtojsWym6+2W4`Gx=zca-<-(%3Vxq>5rgxNfB~xqrlM{P>R4!v)120qG4zk3v^S zxg8@ru;wV<dX@6?4b~cu!*Sk;5U;O2#VkSGoH=)KR&aLnBkHu}Zz|PU+7OCGgl6kY zhfkRL{W-4%1JFLYzQeYuzg0a+4=sPrHIrrqqvn=s@nb<ExZ3aU9o|gtrCZUPSoSF} zBY9@4d$-H6(NBE}>pPBtF-=Tda(%S}Er-QHkH(PbvP@3Tp`yfxonZUIKyT$&Act3$ zx5ZPq-y89t(k;jjk<>~h#up{#H<UoMgq>=zi%|5tf@RL>Z*-W2o*c}Ou6(RnXpSkY zsqzI~JdYw<&A!jT?FG8e*1e-EEq%MVp!a(lNr^LQXy#jXKi&=oJO_D&Du=teZccQ4 z?E{5-j-n|bi<@rtuGeC9q`3yrvM)oZ<8ViU5mKc5m(_K3?(ViVdebct5*~mFp3`^d zh$GpMVs2T7@!7@wkGWIEQhsjsCD5gPCQA?(x9DKQ1BeMKxZ)B^N5eYuffGr23yWS{ z(Z>?)BRpTe@@BAlmZmX%4L#g*-w;YRl!*A93;*HC5b<Q!*x?;vI3uZh4P-NVbdR!h z%tWSwqy<bTKYjE~22Xsha{$Wtq&61f2`p1DOPiWI^>)0-`FzQ%*K@Ha(<*bFJ%hcm zr(8~zqNK&tR^2O<D8tSkZN2;=th_AU72?HS!<^~1DTX}jvSIt77`HH(XzyLA%-y;l zCI<s)H^a>S{Ki&SPjlFBf-iM!0XUfvEld?2{Z22%a=G*Bu<C--N;|eGHJlJ6F4n3S zW>b2pXF{rAn~4>ywh#49nq**RPcH`GfB6mG6(H8#2#H*FP|wKbV~39%JC}b?sJ$7Q zNKCjT64OZ0_lZBn#<|d$VF6==dwUfTNW+IcgqMVTsiQpqp1SmOOQqg{r4#2>R6Dqn z9^bIuq_T_z-7Xr^MF)x5|6Cfq@1e$x{YLT!opz7JX#HK~&ulRvBt7FmRr)9j@wy9s zpfiU%5)edY;Htxm#XKg5#X!?I2$V!3M&b$V7C6{AmWt#DEARLwcDaD>Mvy{I*~Qp* z)g<|RugZ2pdyg|A3D2Tjx%FKuF)QfCW1OK|U%>d;Qr9U@G)7q_83qyQtNe|Rj{MI^ zY}OLb)*{<M)&u8|v(O32lAmofj0WPEfH7)^ZboY{nsq%fY!Q2)h<ECJW-Q?|s@#SR zA-b}V8fZ|LDrJJQL9R&ok+FWk_Ls0NGaNM^C}ZNHp<+rL-MLCg=@*7+u>|X<|EG8Q zzJW}azi|W3b2-3y>$JzL&@H;hyt7v6H}lML7sVE$1n7H~s@{cE0C5B%5#yQ)dqrF| zT#{<t{mMUR9QG&iA>_`E)1w*gN_AkK(R0v@9lo1p%6GwM)Pwv>Hb#MPf5SNHQzf%- z7e_6P4GZ9Vfk8QM&4cWLpSs4B{wV!YC&fSKM6k3d?>3)z{U3r6i2ZcClQehzj)2v_ z{=|3>rE}W7EmHd{-cs!xTQl!D&rtjR!dHz<7+v(jIN(3Q%4OWAm!HdisorF$Y?oEe z_U@i3$+@X+FJ2#<I9c#b*6>Y`($IwPf0`oZw==fwZmZ0R8=D%v3li<5o_VUAuC>l8 z$O`c4ywGzNXgR(upgF1I*=v(NG^fh~Rn%;a0m7V@;5;BPu@Wc9`1ssiDgmOI2)JBJ zfqDHjcQ)ro^wn=x&aD-Z&(X$T%oTF)-vOzb!wV{z7mB3Nanqm?OG+}s7}iJKQfGv| za+0$5c-m|uJ+({~sHUvDj}AO?r97d3oq|sY5@C68Aq@T8OHM^=U-M2;EWrCdrWgo7 zhux~2lTNf&vj5!IZKycvj}GQLn~9LRPnmL>#o5$h8W1V{WTMX%W-g@DRF+m=-mhL) z50fVeXEO+EqGV7LP~HI^fkDv9`cH_;6sapk$R;)*1^@+snqtD6*9}qJ5Y$De{^F0- zyPEaKD2EsqOEyuuy;=Mt%L#rDOwZ)1{1hVR)q*qLaP6N6K+FpGztRQuBspl|_sta& z6L2M6P1;wu_DMx2((LcfTuMSbJhddV$Ge5Tij1x8m>kW~a7|PP?5%M4W6eNCX7*S4 zUrH`V(8*|O0KtBF<?LZ`+BbxZjfYoR?mLhqR_ok%I%_dw_-qAKw>35`6EtqhTh|7^ z9BO`{jwfUuTTM`ze=o#h|4h=+rhUp04~xhj0cuSFmoY&9Kza_;FOA^Ovn9VGA)6O< zT9P2U@E12IR|x=+z5{+kj_MBS(G}))3x8P$`PQ*bws{DJG+s1YGpHS<Pl*)zL!`i# zq!l8MR%b>YDxuw562IW`6H2GaucVGS;<TTgCDk@l1Fi<52{FcsO1>RrpkWwn?U=80 zxI2ZJN4UMpp^UGQzNP`R>6{;d_15C<9G(j>aA{5)Db{3Hr*~^9@Qas+ojl+^mi!_G zkrJKw1Anyli)NF{+%q$^pDMx&aEW%xiY!5#J|vfeT~+qWE$%8a!eICNrk5o{ENgi9 z($aBPV4jI(c4KwqLsiXDO}3OKLaRBf+U~i$a?!61o;#bl->esX>|G?2aN1S3q>QD( z74OGEu83u-^-Vac(TpWI%9EX1t00K6w`X<u8Ff9W+C??I=_VvlRj?Z|ji4`FG<Eth zq+`iPUp%6Te%9XztnzNh(Nr2kcP8MT<EJ2*+8xxq`)OonRg#=WX)^#_-=6q-w$^!S z^LhrOk+Y$9uY=&4dG#J-I3m-`#YNsLiy$*G-S94CFmomzB)g>93P_32g?ZWFcF7t5 z3DXey){l(ypA*7}>#YM)@$c9-At{lD?s6s`g#?*0DYiz=30+jS*(DM#oA3)jY-bd4 z9JBTiHIj-vE90z8?6P*@=CDvx_QbMm$lqh4P|4!b;m{ojYB@|Wr24_za&7cqQ_Jlx zr+RkP_>z0PiM++B>=5pR-E&$<;eq@ed@&oy-OlO7U&}XC>4!~N!<;upz=-zi-p}{W zt<nIgnL)z8bF*u&W3OWi<v2A3#FxGeF#DwzVGALDf^)+y%M;x%oLps}Wnsov<i@Tx zfzllY?osi*Ikn9ej<@AZ+bco==Q$lyq8*@}1C|a0r)TaqU-Ju9UBVvMbimP?m}l`~ zYEEZaz}MB~YE6cD{d_0<nE~Fbq-X?uo)V@NdgVOoH%&=Lm0flCO5T}}0`Ztwzk`XH z^&t0@iR-VR&4B#3Nk8_1b?-Ok-luN_>5}}RiPcJ{@x^*c<LWgu5GF$Ni|FjxF0x2C zhryF4*4BdM!hzMw&OMA9TPr1Bv+BPbILDSrrkuDQl~{rCQzhSLHzE3*NlZAaWZ=*B zNP)EU?$|ACJwfd1CbVcGAEeX8Ja0dqVvqI5yr0)Tx@)0P_*iHP2?P!|7r=?=8O%7A zIjg!g07eYcPL|W?^bhAvO2QuFH4Rct9n4FLE7s4xMCj9~lF%}CV{jBo-gxIEe6kfD zkdyIPet8A_1xarR`2#30-iT`G@nCP?T%n*MBK?aE2ge(wl&JWG5b8K+cW7bVDpDyB zQpd*Km!oCIZ!al$7=)y9UkhuD+2!;<l`R1IxXAj861sm89W5v8%OfB*rEsz_3;%vM zEZ7<z&TuRc8WG+TBtu4p-0&mE#Dt$&?CqFz766D1h;v+%a<cW6>1YE_p^m_y!GtjW zt|BzASlvvC#8t$=t6|W-NFb>HmUY8#<|Fs3Ttoi%MWz8`<ReWg4kyo+(u*|?@6MJq zzZBoIsn^A10GV%_V{Y8^Cn0&t$0y&6Zj=q^z42))0_1CbWtS2nz<Uki%_|*Q`%&H> zLs<sc{c|7^#Uh*4JuAM=(mQ8qd~2eQ`^hsG7`obAkE3++7CKT*;Bvd=*cJ(%^GiN9 zDj+%_`fg_L$GQ%=A4Vkg61ek&V!yBLBXG>Wa(mpSU#t(8S<_mOA8qPGbp*<j0DwMl zqyRKlO{q^ykHdenpw&m~m8I1|r^qJ`_r$K$qr_E25#vPe=VttC&g%mVQB7EEKFz9d z!2V?C%~_h-qQi+VokG<#?jd&@v2y#LQqD3c4rWWkNC*zWEl3Cu90DP@1&0hC7~C1$ zB@7mVCRlKH3l4)ra0#w6z@Whb3_b${XYcpbt=)TT@2}l{s`}L1Rek=PuKxM7*u}*K zby{zY?jN$=)-u+@-o@A7qGSPho)epJePv#d&m-&g?wkA6EuSl{*6gxV$-Zv9Q<x4y zDRL^>L0>sozvnmouD4WpYH+a8<2!$&UGLkGW>1*7lSLLd%l-_8v#P&d4K)UL4(-UD zZig<<2bAO*+qP8ZEueYXbhooTwymddy}Nget=!}D`qqs%^&DT081O9&mrsUNr(a6f z8LwW++~>wz`XRQW===d4PN6hJ$`0oSTQcLrc28}ZTkmAo7G&4#e?4|IW(rTw5$$V* z^nTZt7-F{12j(}6wW_Q{vs*;!1$SL$)7@;9j_sC-zrog~-@i^nnFOXyQDq;RK5SG@ zy<YJ-hBn1MEM2DwXG2FN;cnLfWkxirlik@iM}1BH9Mx1dD|f4RFJnUOZEX2b8EU8G zs+;Z*X3k5+msMo!<*iCM4yuZ=cIYv!k-)u|Gf^#@SWVxG&KOo>9W%SqaD)_~+Qpg^ zlhJfr5xAyqjQMiqHm;9|Bb)F~Vkx_|{%?nut0tbG2tg-uJQD_oGDM<*Q}}9c7f$tz zzU@jr-GvA0am7B`O_VM4tgFUkIn8Xw7#d~?4X^7be5p?sC$D+Xz2A?psnp|HmRVA! zi$JKH!Vjt#CgmllCNhkEa?F35=vkkdcQUo?2ihRv>gx4jRm{N{Y9>W8F`)~VU&}Mc zq<McU|53&Rfq@o7r_=C6*<-S(K!65TsSVLRu<uT}Og+RSe;T!vr%(J{{LJo|*I5V1 z%S+?Z&s$J3weOB|q4;=wXR$k94n4n5QOVOzRP}hG)3A<?C)x3HqRD$6SP-$@q`iFs zFXD~pgqDX;=~<@=x87>fW4Nh<Epc*(Ss;`<>8MKUt@OCi&ZD~CZgB4u3~w!WEVjY` zo~@p>!)gN_TX7%yej?RtxJQ_ur0#Y0b?$X06Pg79j1~PMS8|WZZ^~{hqq34vxwSWK zOf|&tGE@2<*RIpYBinJbSB8#$hu(R@z`VxP-o^72p=g}Ud5IJ7J{$akPr8MJoIQyj ze`FJn0-*DTJ##qCj^T9CAJU$Y`1_3K_|<}4-0v?3t_a~<D><6kT$)j7;^?=K&9g+v zs{n6H>L^%|OyfiB_=^V1`~HlAg1e4sTYoR`6;Al;53{n;k})#b8ymP-G+wOf+bLgq z#&^){y)%=H2-T6p_8anj`1MgrtGY5@#iraSB<|QRtmc6GBSRmYF=7Rlrs{>kSxXwo zBY^3p;#8x-2U}ky&%55FmkC~CeSBXkLQ|S2cY^9QJl9N`ekv|JPVKHH)aJ6^+_9Su zQ$_dIOTQ<-jc4i6c{17=PM{Cgm2y6O6>LUZ_L=U+I;LhCx+_*fJb)%t^ZtolusCL| zvha#N2#f#?7!C~?S_&fk1+0a>sXCMnh^|?2Z9TtEF!pf=??U7);gjc<`Q<~+@gSya zW+x1ph0+|i-&*fFEz$0mb(pk{q)0wtC2>((<A%6FXuFPC18d*ENXmJhK}8lCiQHu% z%Cxd(@KwfiO>Z6gO}5}h^XVhI?qQePz#h)W<L-4bH|m!NDl{=`A1y-nJR)mZ##1dt z>y`HnrE0~_vzpptM})<0AEYsnPW=b-gtfO|P#sSN!<Xi8D5HZW{J7k*<yvXMLi?io zhK<<Neel<|l=qxSaf%yTKkZ!2Oc-IYIq?xdNhgoIrl1BzO2+_yw$fzbT6eZpK(?a4 zl4aOv(O)<Y&s(i)(G$u;AJy*m6i^4^F1ste!_Du~$WIzon+0JI?4O_Z^t{u5xaZIT z8DGG!5xH{(PTOODE=|CfJre5>S01y69UlCv`m7<@qC7Q#JLO#U3);s1QXTthkl)!I z`hEAna-E6Vt+)<iNcYvZt#Xtjv8MaTZyUsrO_s0~v7xSi5GO;VaI_`DSUFt!)PV-x z<Rq99uSrjseKOtU`}{;#0CMW^)c~DDd>)OX-HA|s%-hD#OM_VV>Lh;2p})D{?(9Re za`n;o8@g=ZC1|9I`yyVy5o=_s(3CuGsn5H);DwRNqEE8o-Y$7^0Nz%OmeNL*ojLpW zm$;$YKVAs|%jL_)v9<E4N8JHqZ$Y<KuPpCxyc;mF#9pPHKW5Y@vlE2TNw@mZz?w>K zn#bN21@R(nzE>H!P~x^?R(yTr4E|J){-M&((6iqwU-Tq8t5rMrg%bQeHnyca_Bsgw zU|ISY2mVyWVuG0SpYErBFL4)mO%c2MW^IV}m#QHx>;e%q3($*!rP%pVE-*>Sc*k~( z9$^z^?t~wc#d0-t4`J?|UzluQt_vu-Ylt}9rOuSp>B~KKXt^JaF%}<q_|`=8jvnT0 zhgEj1mCzbrWSTYJ+?8#eQ(XFGHXCEpXmq<kIaDUpl(fqb%7Y>9$*n6YOEZH{dGV~d zo_WhmHBvpln8RU0bUCKN2a5wmOAxx1K5ywSIX@PInr*OzrPDI{tDu1wI%OF9<S?Go z{39}1st;Jpcj%vw7%A{INB~Z%gfO>dk|S8fYT4Z}3@gvTHx;&Tmu>&{*4S3|($I># z#lt}{TbFU?^EALg#8Km*Qs{N`gKo!<dw2a#Gq}tCqB&KHa1CpNTIJr#zW$15sx?1$ z=I0Hujv4dDW(|5^${NEp<}9Np%hsD8(qfM~Dz6LC3iWxqG(7?leUPHB1Z51O7rfA0 zwtUUZ3{zXY267ShcKrgC!hWn}^XFBC<}yMSfl=Tlg#CjaQ<qy9Iz$uN$t9LrL~3p9 z(9bM+XYt8_qUh^s^)`oo8I;BS(*Nhu{6zMG8%LVn-9=46k+7XZPE{Pn#N{SwTEhiV zN6E-0OUqy0h53R}V$m#G<I9`4r4Sb*rut$>e<!8rF9W>J1YyoWKXuc3+7+U6mahwD zEaQi(o1NRt@jB8-Nqmtme!n%@(rCmqYu~Fb9;F(@-30IV#K6ps-7@Ia^}l~1%gqAo zEgw?qEQFc}&lAHGmaLOl?TK4=GpYj42r#>dZ}#Bh3Q&DOZ&C)fu*W80&zkbP?~P+` zAIv`}wHZeJo<t+O63tf^a1vNu9tl@ANbjU&&m2r6nT5jbeW|lMSCfqH*UT%d48Nyp ziyMF?bv<T%l;a;nNe--d@eAf52&L_>vt;dWJ2>57ca!1tu}?8ybr@|%i{0?0&sG2z zu}ZQV<qT%R0cYv+SYG4PJg?eKid?w;W$sQ1@U5<B(lsnwA1Ho5^r<k;s8dGrGA4hd zq3Tr+!EaL(Js3U6%29u;Rzs~DwHK`c=R72r&-dx{C!JAr1o3sN@pVI`iw0a6@m-_R zp7*L3g#!zqabT18nC5+3E$eWao@w_o-ToeqQFZWjG*e5<c^FhbD!(>ZeE&xOH(|p^ z2A_KSVZO)(1|WluVEqpE@Q-AHs^TYq(4pmqT@s3MwUYdLC?nPs?Vz!kDYB1gbK8D1 zp8YUCBI&ZpbasshcYIPa{A4|z$tw%3Gfu77xY1rLm@y7e`7k$a9DMDdNbt|X!&A4^ zXUwN2c_80!D41j`tCC(r8Fc+5&%^8L0=w%QomB5Kfi32OKn`?=&ks2=C4KhfsAF5? zv<4tEr$r2%<Qxm@yC1$RC^(Ya242TH(iZ-KNCSw$RJv$>()GV!hGYE(-U|&Jk6YOL zCKD;^=dV+Fw$dIf;va<_&OZkwPYi6}@mg>FWAC6QOdWVNNBz8|vo-U1S$mQm^a@<$ z1yl=ufD1T|w^>t37nXrPKQFrhmo&mL)M6-k+oiY*THhI#cALA0F{Hg}cT82@bN4H} zt@~Xp#8BJiAZ77$5OWaASPmWxdpWwREdJ8%=T+yluv7b+Zi>KUO#FEj?N(vRm@xFZ zwXghTx7nvGn}?E>PoL`bcHhigCLFyyBx&6?<9#~gQxWcY>JMU&lCT=u=tqn_Yoj-- zEE=5F_`b9X`gp#3CdBqrx@UECJpYwA7@f2|?5D-#Z;M4S@LWRvp4Q<rMPkI4!UX&p zQ_}rDfZ_~VUBjd3@-AC7Ws&Unl-RHqm;$zC-faZD)3`ohOK=sW5Xj6mDizvm_oDiE zNw&q3sEv%zP58(3F;Rx(3OKE|yvx}>nKf-9FH?}iR3p>jhlJVIhxlf7gSUd#o+=(i z8I2+eY0n(asH@iRYd)MdhH*}j6AB7W1^D21ZS9Femo<j=>4@IRoaJ0|r`>Vq%@|wx zS_i&$<jwV7bR1V?6n&_FHNKrAF#T5E#HK#s<BC$3>XQaF2Hu6vz=$)Q%HRl=P#FR* z5>n<&aRD^Ok#aOd8)tD`a?J9ZGKQ7cW}(|8A1{O(U|MCC4voO5qOx_-tgx~r46Tb! z@tT)Yl=1$e5m1{SDtMVZhrv4~-z+_F-$|^^iz2Pvz}YJ*dKI^*M=dd@FfO_S&wYCW z*h@)r@|i>3s?(|vY%cBe8TN`z0Qs7{9LpwN+bA);#qM}LE<%G|9W>zZnglynG`%@% z0&`#m<PLP)qX`RCtQ_1sy|yl7peSCLpS5cKs+7dt^m~UbZH{+wGo6;#bfm@C*D5wt zsz;%b)XYTiHunQXRDA%$mY2WkQ<!bVZpCMBvuj?ecH@vo`t}D-#3e*OMRI&F5bC79 z3nPzp<)SyOIa${mFCshMPr&tA)GU$;iumk_Lt9v?+w4HE4-PVGE_RIs=}ZUmRNu*; z>C#z$#$V;pC8Fw)wHQVi*fwE6u+kZR3UX`8>RLHNmIz@#-hj4R13%Msra1pnc+T=J zF3h(uXRtzKMXIt&lr}z<dOP8;RaJj8q`Xd}<bqH1QL{o-ZUiXn&z&J-#qC9;fTdbX zKBhbD(Agz=h?XLvHF}mZcY(w9J(y`*87D9QL9^E>NR9RBQ0_JM>rY)X9c_enJbO07 z@&sUdvXAN^Ssg%ca8BYXuW09X;1@ujRSq#*wpcA9*-)r^Yc4~ih3twIAJzoxyux&D zNdIx->U<&h?(!*)*!1@NMx;~YNxDeJ<odu-aS&>3rL<51g4ykmqFc7!dsJ+ooNlnu z;dA8@s%NUAZeoJd7q=q^bOgN|^u)L7(YcL!mq^d@r9Ve9k&z|7!tpB5N~w+Q@(<tl zb?|P-df@JM_wMKrc9YrhjL%zgi4aoZR<ceS^m{VuMip8;B_)iEoF_LRPN(xcV{M=g zL^nFRh6CQ0iJ@>@Jj!a2?|qKy4blpd0v5MMkxxyB*VE3Mi_X#Ne@=4bjFd5heSPKz zXvH+)FXapkVcoLmNfIOh9>s*HwE^w|&ix~b6rsr-p*IP5hb>*!!bUI`WGT$)F>#`5 zNIv0iWqj(7O!1QQMf&j6nMibARvoboQ?1qDkMoz<-$2S)(*xEt)-pl7UmeDs`kh9y zzF}_LXj^?eRv6z7VQ0skILc59$<3H@?)yQFI8izPCd&$wbS>yyP_#5XmoY+jT3X;` zr5Qe;{*47IazO{kdtyhKxX^zx(_%bsNnu(N>amvw-$Iq{boZ1n1Zg0px;Zj7xO?`E zAq(75p>-Y@tvS!}Gz28-ruS0zsb`(I8hYyZD7kx6S--SZJ41dk{g_+M1TMN{1*9ru zW;OpYNso&vbo$m`opGL>J2YkFERh)SvJJez6($r_$Rx~0Wh|s~&Xex{a7RNV`%Gb- zV!;&toVN9_$}352o1kxOlD2w%ml_LjR&MIyZu0q9(RoddRp24aM|Jj;L!W0dP=gA< zYz`B3f^Z#5hO;tP?j97Os&$d+uSELL!ODVKv)|TlXUeY)4mE@HniCcwd+PRwKPFc2 zh2vnS1It<6Ob3$>(!Q?|3uymz37T6YC#1(o8K+!PDYCgXn3`c5?+nhosPCmuAD_>Q zS24@*Vq=milcQNZA=vxp9g6F9JT}Zn6N}D%G;&$=X!Nh~Pt86q1?qIFV#+?th3QBn zn3KdT!KtGwpWu@`iT<>7jYipL$?=wQ6F(|eN=AN|Y=C(W6KL$3lu!I3vN~@4aI($+ z=RUVt7u<Ch1WHN=Eit9Hy;O}L(lc<A@|Jru$Hoblz>s8#p};&OJM9Af_55Ub`SS|h zNf5}$8y=>MvpdAuviOjg+fy%Q<@gUfST=hr#9f#|+pyg`d_55RA0yc<l8@D*Q>!oL z*BbvQ0P^Ay>uDzxZywYm*yeH<PJJC3ydE+dpt<BWQ=xnB-D0FpzD7p)CY(fENGbh- zyV-)x$tD7D8tK+HpWI=YR#?CXe_Tmz$NW5P=J@Gaj_+Cm`3zVAacPr&b*638cAq)o z{!<yPt=jer<8>Mo2K+*&Td}P!>=o^=lB$qqe5^?MNPQr(Me>2LePo=$*>d7q%r;HE zo-Oen(?N9H;P3gEPk-(M5b#l(^51NPsHHEaC#NIQm(u6?B`ticCasPwr26`LEe8?@ zAW=I+jsyq1&CJbwhj@o7hh-w$B8eiG?wRh*ZZ2CtewOs^^b3U_khGxtQvKmzAj-ut z<yjM1BMb-#pb0R#61qw|lO}scibImlRHv$`R`=d5>si{jaLw3hbPJ9R(hYoOLuP$> zXL<doToNl1K{B;x%S@LV63PJ?Pm;oN<x>aVd?6$yW_eI?P_|W8Pmo~tQ$yw?XXr*i ziOOAP-Di!gW2{SuB@$B-yb~r8a+o`mE;F)ojWbrzuUW3u@Lce2$z#dK$bH#G*#SCB z1><E^#ZCprB>~FUA$Un&LsYXz-=rv2uvOqz_(SEP2xx9O_V*L5#{!E&t^9gL&ye3V zJVHEt)s)V>N1XITIRrT-Vy<2`UgBQed-i)J`#iH91yf}wrDkQ_DvyyNIkM5cta2~< zpY(f2@WtrHY{uBqtP1K0Gz(7huh}wNB$`9|wiC<a_9f=1Y<+BnY<<T|#_z{pWti1J zt8;_cHHcV@*zDWDE&PU5hd6&aq{1W*u;zW8Se!7NDB*W?LXbc!kj;XX@1SYF)KpN) zJs&o4<kLv2xc711>ZIyi*=wR|BI2THqI_;rJIucle?ca9vK*5S-U`2MA#LGtSzno0 z8Cz*-3r0Od@gq-B!$>=n$QH-8{RYi0e6wvddPHrC3kNOFvqJQ5TPQjeS{WM2->OxN zzx|<q8AN5!c+viLc~&QOs$<AL`}ydbpI}Fj5Y~sl!>8kmWd5u>B!Bi&mE~)y2h!am zVDH7NFB%(yi;KW397;vT-nFti{s&)!5T@|gYqp?ZabZDm!49;(j}cGL6!_(6K2Z|5 zOYYW;(f)QX0{(n+OpaX_tu!dha#sG4V8QU+nF#4p=q9dwlkeaQWaOsG_`b!U&UWi2 z&Nc81zwpMFsJ8BWnYSB@zf$_T%QbaXy<u}PwjHz-OFKU!Lq>1hCrd-oX#OkLlZ4VT zDhcn-(VVXAyXR^_U>5gbC4ad==$Hk8{ONYhaMN%Tz)x`u;Ir|>z`AZw=TCj)^CN+n zox*{A{-6vg>_)z=ue9!}F}ajVc=pec=Mwj`FRkul8u`f&T4<={f|MXc@sD&6>`+k~ z8v-?-%G&B_2$s=Oi$4RK9{b$)*A6MK!vS9m-919+h3mONq-rZA55S$hEZXXe9sd0z zWNOy<vX+5A6tChw3y^C-ncg<t43-=jTd=4TGjdQ^EzHBMg5bY1JT!cibUDBCY&D-C z;v#XKxW|Bw$H)IQA7|KyWE~K-;>KYpRoS~$6V&~Ps0sp;#oPA}1`n31xN~_&ho<j8 z7gf5`ab^=_EhV}EWg;QSVN+7G&@G&%y&r5!kaIV=r-#r(n9<7onPmY_Cz+m?63<Pi z1)YP?Flh$NBlw;7jY_S+w&v`D0%U@M_zePd4T9L70#u%Y#3%tqR0A45<QaYgPBer% zy5Wh<XZdhWQ7j?E8(?AyFw+K@x&zE5ig=w(^2WX%g9}2+)qqzCp{;Cq>Ik89Y#=&- zFdQ_X(?Lk+8gR29G+7N;Mi2_42Et_s{jy-9R*WsSk2Qh#>s0p`5Qwb~zhid9<#3YW zy|u=rrR$}I*`-x5(JvXIO>?3RO`<KgxL?X~n|5&<z__iC>c8aGH?7qzNXtBE%RHZg zJSah)M7tggyPoJ&9wbzrxM?0VX`Wd69u)eXgbN<@3!a$59%RCv_$?lEEuPrE9#p=b z#D6>(|De!_k<W-xIPpm8c+?XOB)JBPU<&zs3WdRkB;`Zl)gozYQBPfwl&&bE6C}e4 z3Y`&2!id7nL(=4-u*{GYW+=jSB>g%HQyNJojl%Cn(siS-gOOChDB?%kk{Ir>cAM1( z27{?8{dw_&BtX)|#Es2;13J9NN%O4;-K^(!`j;&w1%K_@$@-$Poj7DNU<U~$6mFwv zLHu^vm|tmMb`xL9GCZ0vTFuHK8)}j!pqpt*p`LH@bNskK8RR$PAZ;wD$K|V#$*^$V zTKZE+vSMEg5bprioh!=RVejziQ(yd2;mCIw-dRU=nb>K~2Uq)-Qfv7iaQNTwwWKYN z9qn9t__uYgn7aHGxeh6O@WjJ&`qVAT>U0)44xxw8AC<PX|BlOlz~bMSISxOT`%`dh z_o$`5w!*VgJ_TF7q%U}!4&IYKXS^Z4k9?4O{6EIk$iG`p2kuFEF}D9tB)|NBc8)JU zrt_gaQg?V%2CTUy8M#-w98=az9Z2v0D^mYJa$n-V5&Ks@luDiaIS~8z!|PzleewTH jQ(z0CT5oF7ZihstbZ_s9xTON_`qzh!uB+Kkg@*QDh+Zx)
new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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
new file mode 100644 --- /dev/null +++ b/strophe.js @@ -0,0 +1,6101 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["strophe"] = factory(); + else + root["strophe"] = factory(); +})(window, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/strophe.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/webpack/buildin/global.js": +/*!***********************************!*\ + !*** (webpack)/buildin/global.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1, eval)("this"); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), + +/***/ "./src/bosh.js": +/*!*********************!*\ + !*** ./src/bosh.js ***! + \*********************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core */ "./src/core.js"); +/* + This program is distributed under the terms of the MIT license. + Please see the LICENSE file for details. + + Copyright 2006-2008, OGG, LLC +*/ + +/* global window, setTimeout, clearTimeout, XMLHttpRequest, ActiveXObject */ + +var Strophe = core__WEBPACK_IMPORTED_MODULE_0__["default"].Strophe; +var $build = core__WEBPACK_IMPORTED_MODULE_0__["default"].$build; +/** PrivateClass: Strophe.Request + * _Private_ helper class that provides a cross implementation abstraction + * for a BOSH related XMLHttpRequest. + * + * The Strophe.Request class is used internally to encapsulate BOSH request + * information. It is not meant to be used from user's code. + */ + +/** PrivateConstructor: Strophe.Request + * Create and initialize a new Strophe.Request object. + * + * Parameters: + * (XMLElement) elem - The XML data to be sent in the request. + * (Function) func - The function that will be called when the + * XMLHttpRequest readyState changes. + * (Integer) rid - The BOSH rid attribute associated with this request. + * (Integer) sends - The number of times this same request has been sent. + */ + +Strophe.Request = function (elem, func, rid, sends) { + this.id = ++Strophe._requestId; + this.xmlData = elem; + this.data = Strophe.serialize(elem); // save original function in case we need to make a new request + // from this one. + + this.origFunc = func; + this.func = func; + this.rid = rid; + this.date = NaN; + this.sends = sends || 0; + this.abort = false; + this.dead = null; + + this.age = function () { + if (!this.date) { + return 0; + } + + var now = new Date(); + return (now - this.date) / 1000; + }; + + this.timeDead = function () { + if (!this.dead) { + return 0; + } + + var now = new Date(); + return (now - this.dead) / 1000; + }; + + this.xhr = this._newXHR(); +}; + +Strophe.Request.prototype = { + /** PrivateFunction: getResponse + * Get a response from the underlying XMLHttpRequest. + * + * This function attempts to get a response from the request and checks + * for errors. + * + * Throws: + * "parsererror" - A parser error occured. + * "bad-format" - The entity has sent XML that cannot be processed. + * + * Returns: + * The DOM element tree of the response. + */ + getResponse: function getResponse() { + var node = null; + + if (this.xhr.responseXML && this.xhr.responseXML.documentElement) { + node = this.xhr.responseXML.documentElement; + + if (node.tagName === "parsererror") { + Strophe.error("invalid response received"); + Strophe.error("responseText: " + this.xhr.responseText); + Strophe.error("responseXML: " + Strophe.serialize(this.xhr.responseXML)); + throw new Error("parsererror"); + } + } else if (this.xhr.responseText) { + // In React Native, we may get responseText but no responseXML. We can try to parse it manually. + Strophe.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."); + node = new DOMParser().parseFromString(this.xhr.responseText, 'application/xml').documentElement; + + if (!node) { + throw new Error('Parsing produced null node'); + } else if (node.querySelector('parsererror')) { + Strophe.error("invalid response received: " + node.querySelector('parsererror').textContent); + Strophe.error("responseText: " + this.xhr.responseText); + var error = new Error(); + error.name = Strophe.ErrorCondition.BAD_FORMAT; + throw error; + } + } + + return node; + }, + + /** PrivateFunction: _newXHR + * _Private_ helper function to create XMLHttpRequests. + * + * This function creates XMLHttpRequests across all implementations. + * + * Returns: + * A new XMLHttpRequest. + */ + _newXHR: function _newXHR() { + var xhr = null; + + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + + if (xhr.overrideMimeType) { + xhr.overrideMimeType("text/xml; charset=utf-8"); + } + } else if (window.ActiveXObject) { + xhr = new ActiveXObject("Microsoft.XMLHTTP"); + } // use Function.bind() to prepend ourselves as an argument + + + xhr.onreadystatechange = this.func.bind(null, this); + return xhr; + } +}; +/** Class: Strophe.Bosh + * _Private_ helper class that handles BOSH Connections + * + * The Strophe.Bosh class is used internally by Strophe.Connection + * to encapsulate BOSH sessions. It is not meant to be used from user's code. + */ + +/** File: bosh.js + * A JavaScript library to enable BOSH in Strophejs. + * + * this library uses Bidirectional-streams Over Synchronous HTTP (BOSH) + * to emulate a persistent, stateful, two-way connection to an XMPP server. + * More information on BOSH can be found in XEP 124. + */ + +/** PrivateConstructor: Strophe.Bosh + * Create and initialize a Strophe.Bosh object. + * + * Parameters: + * (Strophe.Connection) connection - The Strophe.Connection that will use BOSH. + * + * Returns: + * A new Strophe.Bosh object. + */ + +Strophe.Bosh = function (connection) { + this._conn = connection; + /* request id for body tags */ + + this.rid = Math.floor(Math.random() * 4294967295); + /* The current session ID. */ + + this.sid = null; // default BOSH values + + this.hold = 1; + this.wait = 60; + this.window = 5; + this.errors = 0; + this.inactivity = null; + this.lastResponseHeaders = null; + this._requests = []; +}; + +Strophe.Bosh.prototype = { + /** Variable: strip + * + * BOSH-Connections will have all stanzas wrapped in a <body> tag when + * passed to <Strophe.Connection.xmlInput> or <Strophe.Connection.xmlOutput>. + * To strip this tag, User code can set <Strophe.Bosh.strip> to "body": + * + * > Strophe.Bosh.prototype.strip = "body"; + * + * This will enable stripping of the body tag in both + * <Strophe.Connection.xmlInput> and <Strophe.Connection.xmlOutput>. + */ + strip: null, + + /** PrivateFunction: _buildBody + * _Private_ helper function to generate the <body/> wrapper for BOSH. + * + * Returns: + * A Strophe.Builder with a <body/> element. + */ + _buildBody: function _buildBody() { + var bodyWrap = $build('body', { + 'rid': this.rid++, + 'xmlns': Strophe.NS.HTTPBIND + }); + + if (this.sid !== null) { + bodyWrap.attrs({ + 'sid': this.sid + }); + } + + if (this._conn.options.keepalive && this._conn._sessionCachingSupported()) { + this._cacheSession(); + } + + return bodyWrap; + }, + + /** PrivateFunction: _reset + * Reset the connection. + * + * This function is called by the reset function of the Strophe Connection + */ + _reset: function _reset() { + this.rid = Math.floor(Math.random() * 4294967295); + this.sid = null; + this.errors = 0; + + if (this._conn._sessionCachingSupported()) { + window.sessionStorage.removeItem('strophe-bosh-session'); + } + + this._conn.nextValidRid(this.rid); + }, + + /** PrivateFunction: _connect + * _Private_ function that initializes the BOSH connection. + * + * Creates and sends the Request that initializes the BOSH connection. + */ + _connect: function _connect(wait, hold, route) { + this.wait = wait || this.wait; + this.hold = hold || this.hold; + this.errors = 0; + + var body = this._buildBody().attrs({ + "to": this._conn.domain, + "xml:lang": "en", + "wait": this.wait, + "hold": this.hold, + "content": "text/xml; charset=utf-8", + "ver": "1.6", + "xmpp:version": "1.0", + "xmlns:xmpp": Strophe.NS.BOSH + }); + + if (route) { + body.attrs({ + 'route': route + }); + } + + var _connect_cb = this._conn._connect_cb; + + this._requests.push(new Strophe.Request(body.tree(), this._onRequestStateChange.bind(this, _connect_cb.bind(this._conn)), body.tree().getAttribute("rid"))); + + this._throttledRequestHandler(); + }, + + /** PrivateFunction: _attach + * Attach to an already created and authenticated BOSH session. + * + * This function is provided to allow Strophe to attach to BOSH + * sessions which have been created externally, perhaps by a Web + * application. This is often used to support auto-login type features + * without putting user credentials into the page. + * + * Parameters: + * (String) jid - The full JID that is bound by the session. + * (String) sid - The SID of the BOSH session. + * (String) rid - The current RID of the BOSH session. This RID + * will be used by the next request. + * (Function) callback The connect callback function. + * (Integer) wait - The optional HTTPBIND wait value. This is the + * time the server will wait before returning an empty result for + * a request. The default setting of 60 seconds is recommended. + * Other settings will require tweaks to the Strophe.TIMEOUT value. + * (Integer) hold - The optional HTTPBIND hold value. This is the + * number of connections the server will hold at one time. This + * should almost always be set to 1 (the default). + * (Integer) wind - The optional HTTBIND window value. This is the + * allowed range of request ids that are valid. The default is 5. + */ + _attach: function _attach(jid, sid, rid, callback, wait, hold, wind) { + this._conn.jid = jid; + this.sid = sid; + this.rid = rid; + this._conn.connect_callback = callback; + this._conn.domain = Strophe.getDomainFromJid(this._conn.jid); + this._conn.authenticated = true; + this._conn.connected = true; + this.wait = wait || this.wait; + this.hold = hold || this.hold; + this.window = wind || this.window; + + this._conn._changeConnectStatus(Strophe.Status.ATTACHED, null); + }, + + /** PrivateFunction: _restore + * Attempt to restore a cached BOSH session + * + * Parameters: + * (String) jid - The full JID that is bound by the session. + * This parameter is optional but recommended, specifically in cases + * where prebinded BOSH sessions are used where it's important to know + * that the right session is being restored. + * (Function) callback The connect callback function. + * (Integer) wait - The optional HTTPBIND wait value. This is the + * time the server will wait before returning an empty result for + * a request. The default setting of 60 seconds is recommended. + * Other settings will require tweaks to the Strophe.TIMEOUT value. + * (Integer) hold - The optional HTTPBIND hold value. This is the + * number of connections the server will hold at one time. This + * should almost always be set to 1 (the default). + * (Integer) wind - The optional HTTBIND window value. This is the + * allowed range of request ids that are valid. The default is 5. + */ + _restore: function _restore(jid, callback, wait, hold, wind) { + var session = JSON.parse(window.sessionStorage.getItem('strophe-bosh-session')); + + if (typeof session !== "undefined" && session !== null && session.rid && session.sid && session.jid && (typeof jid === "undefined" || jid === null || Strophe.getBareJidFromJid(session.jid) === Strophe.getBareJidFromJid(jid) || // If authcid is null, then it's an anonymous login, so + // we compare only the domains: + Strophe.getNodeFromJid(jid) === null && Strophe.getDomainFromJid(session.jid) === jid)) { + this._conn.restored = true; + + this._attach(session.jid, session.sid, session.rid, callback, wait, hold, wind); + } else { + var error = new Error("_restore: no restoreable session."); + error.name = "StropheSessionError"; + throw error; + } + }, + + /** PrivateFunction: _cacheSession + * _Private_ handler for the beforeunload event. + * + * This handler is used to process the Bosh-part of the initial request. + * Parameters: + * (Strophe.Request) bodyWrap - The received stanza. + */ + _cacheSession: function _cacheSession() { + if (this._conn.authenticated) { + if (this._conn.jid && this.rid && this.sid) { + window.sessionStorage.setItem('strophe-bosh-session', JSON.stringify({ + 'jid': this._conn.jid, + 'rid': this.rid, + 'sid': this.sid + })); + } + } else { + window.sessionStorage.removeItem('strophe-bosh-session'); + } + }, + + /** PrivateFunction: _connect_cb + * _Private_ handler for initial connection request. + * + * This handler is used to process the Bosh-part of the initial request. + * Parameters: + * (Strophe.Request) bodyWrap - The received stanza. + */ + _connect_cb: function _connect_cb(bodyWrap) { + var typ = bodyWrap.getAttribute("type"); + + if (typ !== null && typ === "terminate") { + // an error occurred + var cond = bodyWrap.getAttribute("condition"); + Strophe.error("BOSH-Connection failed: " + cond); + var conflict = bodyWrap.getElementsByTagName("conflict"); + + if (cond !== null) { + if (cond === "remote-stream-error" && conflict.length > 0) { + cond = "conflict"; + } + + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, cond); + } else { + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "unknown"); + } + + this._conn._doDisconnect(cond); + + return Strophe.Status.CONNFAIL; + } // check to make sure we don't overwrite these if _connect_cb is + // called multiple times in the case of missing stream:features + + + if (!this.sid) { + this.sid = bodyWrap.getAttribute("sid"); + } + + var wind = bodyWrap.getAttribute('requests'); + + if (wind) { + this.window = parseInt(wind, 10); + } + + var hold = bodyWrap.getAttribute('hold'); + + if (hold) { + this.hold = parseInt(hold, 10); + } + + var wait = bodyWrap.getAttribute('wait'); + + if (wait) { + this.wait = parseInt(wait, 10); + } + + var inactivity = bodyWrap.getAttribute('inactivity'); + + if (inactivity) { + this.inactivity = parseInt(inactivity, 10); + } + }, + + /** PrivateFunction: _disconnect + * _Private_ part of Connection.disconnect for Bosh + * + * Parameters: + * (Request) pres - This stanza will be sent before disconnecting. + */ + _disconnect: function _disconnect(pres) { + this._sendTerminate(pres); + }, + + /** PrivateFunction: _doDisconnect + * _Private_ function to disconnect. + * + * Resets the SID and RID. + */ + _doDisconnect: function _doDisconnect() { + this.sid = null; + this.rid = Math.floor(Math.random() * 4294967295); + + if (this._conn._sessionCachingSupported()) { + window.sessionStorage.removeItem('strophe-bosh-session'); + } + + this._conn.nextValidRid(this.rid); + }, + + /** PrivateFunction: _emptyQueue + * _Private_ function to check if the Request queue is empty. + * + * Returns: + * True, if there are no Requests queued, False otherwise. + */ + _emptyQueue: function _emptyQueue() { + return this._requests.length === 0; + }, + + /** PrivateFunction: _callProtocolErrorHandlers + * _Private_ function to call error handlers registered for HTTP errors. + * + * Parameters: + * (Strophe.Request) req - The request that is changing readyState. + */ + _callProtocolErrorHandlers: function _callProtocolErrorHandlers(req) { + var reqStatus = this._getRequestStatus(req); + + var err_callback = this._conn.protocolErrorHandlers.HTTP[reqStatus]; + + if (err_callback) { + err_callback.call(this, reqStatus); + } + }, + + /** PrivateFunction: _hitError + * _Private_ function to handle the error count. + * + * Requests are resent automatically until their error count reaches + * 5. Each time an error is encountered, this function is called to + * increment the count and disconnect if the count is too high. + * + * Parameters: + * (Integer) reqStatus - The request status. + */ + _hitError: function _hitError(reqStatus) { + this.errors++; + Strophe.warn("request errored, status: " + reqStatus + ", number of errors: " + this.errors); + + if (this.errors > 4) { + this._conn._onDisconnectTimeout(); + } + }, + + /** PrivateFunction: _no_auth_received + * + * Called on stream start/restart when no stream:features + * has been received and sends a blank poll request. + */ + _no_auth_received: function _no_auth_received(callback) { + Strophe.warn("Server did not yet offer a supported authentication " + "mechanism. Sending a blank poll request."); + + if (callback) { + callback = callback.bind(this._conn); + } else { + callback = this._conn._connect_cb.bind(this._conn); + } + + var body = this._buildBody(); + + this._requests.push(new Strophe.Request(body.tree(), this._onRequestStateChange.bind(this, callback), body.tree().getAttribute("rid"))); + + this._throttledRequestHandler(); + }, + + /** PrivateFunction: _onDisconnectTimeout + * _Private_ timeout handler for handling non-graceful disconnection. + * + * Cancels all remaining Requests and clears the queue. + */ + _onDisconnectTimeout: function _onDisconnectTimeout() { + this._abortAllRequests(); + }, + + /** PrivateFunction: _abortAllRequests + * _Private_ helper function that makes sure all pending requests are aborted. + */ + _abortAllRequests: function _abortAllRequests() { + while (this._requests.length > 0) { + var req = this._requests.pop(); + + req.abort = true; + req.xhr.abort(); // jslint complains, but this is fine. setting to empty func + // is necessary for IE6 + + req.xhr.onreadystatechange = function () {}; // jshint ignore:line + + } + }, + + /** PrivateFunction: _onIdle + * _Private_ handler called by Strophe.Connection._onIdle + * + * Sends all queued Requests or polls with empty Request if there are none. + */ + _onIdle: function _onIdle() { + var data = this._conn._data; // if no requests are in progress, poll + + if (this._conn.authenticated && this._requests.length === 0 && data.length === 0 && !this._conn.disconnecting) { + Strophe.info("no requests during idle cycle, sending " + "blank request"); + data.push(null); + } + + if (this._conn.paused) { + return; + } + + if (this._requests.length < 2 && data.length > 0) { + var body = this._buildBody(); + + for (var i = 0; i < data.length; i++) { + if (data[i] !== null) { + if (data[i] === "restart") { + body.attrs({ + "to": this._conn.domain, + "xml:lang": "en", + "xmpp:restart": "true", + "xmlns:xmpp": Strophe.NS.BOSH + }); + } else { + body.cnode(data[i]).up(); + } + } + } + + delete this._conn._data; + this._conn._data = []; + + this._requests.push(new Strophe.Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid"))); + + this._throttledRequestHandler(); + } + + if (this._requests.length > 0) { + var time_elapsed = this._requests[0].age(); + + if (this._requests[0].dead !== null) { + if (this._requests[0].timeDead() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait)) { + this._throttledRequestHandler(); + } + } + + if (time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait)) { + Strophe.warn("Request " + this._requests[0].id + " timed out, over " + Math.floor(Strophe.TIMEOUT * this.wait) + " seconds since last activity"); + + this._throttledRequestHandler(); + } + } + }, + + /** PrivateFunction: _getRequestStatus + * + * Returns the HTTP status code from a Strophe.Request + * + * Parameters: + * (Strophe.Request) req - The Strophe.Request instance. + * (Integer) def - The default value that should be returned if no + * status value was found. + */ + _getRequestStatus: function _getRequestStatus(req, def) { + var reqStatus; + + if (req.xhr.readyState === 4) { + try { + reqStatus = req.xhr.status; + } catch (e) { + // ignore errors from undefined status attribute. Works + // around a browser bug + Strophe.error("Caught an error while retrieving a request's status, " + "reqStatus: " + reqStatus); + } + } + + if (typeof reqStatus === "undefined") { + reqStatus = typeof def === 'number' ? def : 0; + } + + return reqStatus; + }, + + /** PrivateFunction: _onRequestStateChange + * _Private_ handler for Strophe.Request state changes. + * + * This function is called when the XMLHttpRequest readyState changes. + * It contains a lot of error handling logic for the many ways that + * requests can fail, and calls the request callback when requests + * succeed. + * + * Parameters: + * (Function) func - The handler for the request. + * (Strophe.Request) req - The request that is changing readyState. + */ + _onRequestStateChange: function _onRequestStateChange(func, req) { + Strophe.debug("request id " + req.id + "." + req.sends + " state changed to " + req.xhr.readyState); + + if (req.abort) { + req.abort = false; + return; + } + + if (req.xhr.readyState !== 4) { + // The request is not yet complete + return; + } + + var reqStatus = this._getRequestStatus(req); + + this.lastResponseHeaders = req.xhr.getAllResponseHeaders(); + + if (this.disconnecting && reqStatus >= 400) { + this._hitError(reqStatus); + + this._callProtocolErrorHandlers(req); + + return; + } + + var valid_request = reqStatus > 0 && reqStatus < 500; + var too_many_retries = req.sends > this._conn.maxRetries; + + if (valid_request || too_many_retries) { + // remove from internal queue + this._removeRequest(req); + + Strophe.debug("request id " + req.id + " should now be removed"); + } + + if (reqStatus === 200) { + // request succeeded + var reqIs0 = this._requests[0] === req; + var reqIs1 = this._requests[1] === req; // if request 1 finished, or request 0 finished and request + // 1 is over Strophe.SECONDARY_TIMEOUT seconds old, we need to + // restart the other - both will be in the first spot, as the + // completed request has been removed from the queue already + + if (reqIs1 || reqIs0 && this._requests.length > 0 && this._requests[0].age() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait)) { + this._restartRequest(0); + } + + this._conn.nextValidRid(Number(req.rid) + 1); + + Strophe.debug("request id " + req.id + "." + req.sends + " got 200"); + func(req); // call handler + + this.errors = 0; + } else if (reqStatus === 0 || reqStatus >= 400 && reqStatus < 600 || reqStatus >= 12000) { + // request failed + Strophe.error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened"); + + this._hitError(reqStatus); + + this._callProtocolErrorHandlers(req); + + if (reqStatus >= 400 && reqStatus < 500) { + this._conn._changeConnectStatus(Strophe.Status.DISCONNECTING, null); + + this._conn._doDisconnect(); + } + } else { + Strophe.error("request id " + req.id + "." + req.sends + " error " + reqStatus + " happened"); + } + + if (!valid_request && !too_many_retries) { + this._throttledRequestHandler(); + } else if (too_many_retries && !this._conn.connected) { + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "giving-up"); + } + }, + + /** PrivateFunction: _processRequest + * _Private_ function to process a request in the queue. + * + * This function takes requests off the queue and sends them and + * restarts dead requests. + * + * Parameters: + * (Integer) i - The index of the request in the queue. + */ + _processRequest: function _processRequest(i) { + var _this = this; + + var req = this._requests[i]; + + var reqStatus = this._getRequestStatus(req, -1); // make sure we limit the number of retries + + + if (req.sends > this._conn.maxRetries) { + this._conn._onDisconnectTimeout(); + + return; + } + + var time_elapsed = req.age(); + var primary_timeout = !isNaN(time_elapsed) && time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait); + var secondary_timeout = req.dead !== null && req.timeDead() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait); + var server_error = req.xhr.readyState === 4 && (reqStatus < 1 || reqStatus >= 500); + + if (primary_timeout || secondary_timeout || server_error) { + if (secondary_timeout) { + Strophe.error("Request ".concat(this._requests[i].id, " timed out (secondary), restarting")); + } + + req.abort = true; + req.xhr.abort(); // setting to null fails on IE6, so set to empty function + + req.xhr.onreadystatechange = function () {}; + + this._requests[i] = new Strophe.Request(req.xmlData, req.origFunc, req.rid, req.sends); + req = this._requests[i]; + } + + if (req.xhr.readyState === 0) { + Strophe.debug("request id " + req.id + "." + req.sends + " posting"); + + try { + var content_type = this._conn.options.contentType || "text/xml; charset=utf-8"; + req.xhr.open("POST", this._conn.service, this._conn.options.sync ? false : true); + + if (typeof req.xhr.setRequestHeader !== 'undefined') { + // IE9 doesn't have setRequestHeader + req.xhr.setRequestHeader("Content-Type", content_type); + } + + if (this._conn.options.withCredentials) { + req.xhr.withCredentials = true; + } + } catch (e2) { + Strophe.error("XHR open failed: " + e2.toString()); + + if (!this._conn.connected) { + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "bad-service"); + } + + this._conn.disconnect(); + + return; + } // Fires the XHR request -- may be invoked immediately + // or on a gradually expanding retry window for reconnects + + + var sendFunc = function sendFunc() { + req.date = new Date(); + + if (_this._conn.options.customHeaders) { + var headers = _this._conn.options.customHeaders; + + for (var header in headers) { + if (Object.prototype.hasOwnProperty.call(headers, header)) { + req.xhr.setRequestHeader(header, headers[header]); + } + } + } + + req.xhr.send(req.data); + }; // Implement progressive backoff for reconnects -- + // First retry (send === 1) should also be instantaneous + + + if (req.sends > 1) { + // Using a cube of the retry number creates a nicely + // expanding retry window + var backoff = Math.min(Math.floor(Strophe.TIMEOUT * this.wait), Math.pow(req.sends, 3)) * 1000; + setTimeout(function () { + // XXX: setTimeout should be called only with function expressions (23974bc1) + sendFunc(); + }, backoff); + } else { + sendFunc(); + } + + req.sends++; + + if (this._conn.xmlOutput !== Strophe.Connection.prototype.xmlOutput) { + if (req.xmlData.nodeName === this.strip && req.xmlData.childNodes.length) { + this._conn.xmlOutput(req.xmlData.childNodes[0]); + } else { + this._conn.xmlOutput(req.xmlData); + } + } + + if (this._conn.rawOutput !== Strophe.Connection.prototype.rawOutput) { + this._conn.rawOutput(req.data); + } + } else { + Strophe.debug("_processRequest: " + (i === 0 ? "first" : "second") + " request has readyState of " + req.xhr.readyState); + } + }, + + /** PrivateFunction: _removeRequest + * _Private_ function to remove a request from the queue. + * + * Parameters: + * (Strophe.Request) req - The request to remove. + */ + _removeRequest: function _removeRequest(req) { + Strophe.debug("removing request"); + + for (var i = this._requests.length - 1; i >= 0; i--) { + if (req === this._requests[i]) { + this._requests.splice(i, 1); + } + } // IE6 fails on setting to null, so set to empty function + + + req.xhr.onreadystatechange = function () {}; + + this._throttledRequestHandler(); + }, + + /** PrivateFunction: _restartRequest + * _Private_ function to restart a request that is presumed dead. + * + * Parameters: + * (Integer) i - The index of the request in the queue. + */ + _restartRequest: function _restartRequest(i) { + var req = this._requests[i]; + + if (req.dead === null) { + req.dead = new Date(); + } + + this._processRequest(i); + }, + + /** PrivateFunction: _reqToData + * _Private_ function to get a stanza out of a request. + * + * Tries to extract a stanza out of a Request Object. + * When this fails the current connection will be disconnected. + * + * Parameters: + * (Object) req - The Request. + * + * Returns: + * The stanza that was passed. + */ + _reqToData: function _reqToData(req) { + try { + return req.getResponse(); + } catch (e) { + if (e.message !== "parsererror") { + throw e; + } + + this._conn.disconnect("strophe-parsererror"); + } + }, + + /** PrivateFunction: _sendTerminate + * _Private_ function to send initial disconnect sequence. + * + * This is the first step in a graceful disconnect. It sends + * the BOSH server a terminate body and includes an unavailable + * presence if authentication has completed. + */ + _sendTerminate: function _sendTerminate(pres) { + Strophe.info("_sendTerminate was called"); + + var body = this._buildBody().attrs({ + type: "terminate" + }); + + if (pres) { + body.cnode(pres.tree()); + } + + var req = new Strophe.Request(body.tree(), this._onRequestStateChange.bind(this, this._conn._dataRecv.bind(this._conn)), body.tree().getAttribute("rid")); + + this._requests.push(req); + + this._throttledRequestHandler(); + }, + + /** PrivateFunction: _send + * _Private_ part of the Connection.send function for BOSH + * + * Just triggers the RequestHandler to send the messages that are in the queue + */ + _send: function _send() { + var _this2 = this; + + clearTimeout(this._conn._idleTimeout); + + this._throttledRequestHandler(); + + this._conn._idleTimeout = setTimeout(function () { + return _this2._conn._onIdle(); + }, 100); + }, + + /** PrivateFunction: _sendRestart + * + * Send an xmpp:restart stanza. + */ + _sendRestart: function _sendRestart() { + this._throttledRequestHandler(); + + clearTimeout(this._conn._idleTimeout); + }, + + /** PrivateFunction: _throttledRequestHandler + * _Private_ function to throttle requests to the connection window. + * + * This function makes sure we don't send requests so fast that the + * request ids overflow the connection window in the case that one + * request died. + */ + _throttledRequestHandler: function _throttledRequestHandler() { + if (!this._requests) { + Strophe.debug("_throttledRequestHandler called with " + "undefined requests"); + } else { + Strophe.debug("_throttledRequestHandler called with " + this._requests.length + " requests"); + } + + if (!this._requests || this._requests.length === 0) { + return; + } + + if (this._requests.length > 0) { + this._processRequest(0); + } + + if (this._requests.length > 1 && Math.abs(this._requests[0].rid - this._requests[1].rid) < this.window) { + this._processRequest(1); + } + } +}; + +/***/ }), + +/***/ "./src/core.js": +/*!*********************!*\ + !*** ./src/core.js ***! + \*********************/ +/*! exports provided: Strophe, $build, $iq, $msg, $pres, SHA1, MD5, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Strophe", function() { return Strophe; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$build", function() { return $build; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$iq", function() { return $iq; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$msg", function() { return $msg; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$pres", function() { return $pres; }); +/* harmony import */ var md5__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! md5 */ "./src/md5.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MD5", function() { return md5__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var sha1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! sha1 */ "./src/sha1.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SHA1", function() { return sha1__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utils */ "./src/utils.js"); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* + This program is distributed under the terms of the MIT license. + Please see the LICENSE file for details. + + Copyright 2006-2018, OGG, LLC +*/ + +/*global define, document, sessionStorage, setTimeout, clearTimeout, ActiveXObject, DOMParser, btoa, atob, module */ + + + +/** Function: $build + * Create a Strophe.Builder. + * This is an alias for 'new Strophe.Builder(name, attrs)'. + * + * Parameters: + * (String) name - The root element name. + * (Object) attrs - The attributes for the root element in object notation. + * + * Returns: + * A new Strophe.Builder object. + */ + +function $build(name, attrs) { + return new Strophe.Builder(name, attrs); +} +/** Function: $msg + * Create a Strophe.Builder with a <message/> element as the root. + * + * Parameters: + * (Object) attrs - The <message/> element attributes in object notation. + * + * Returns: + * A new Strophe.Builder object. + */ + + +function $msg(attrs) { + return new Strophe.Builder("message", attrs); +} +/** Function: $iq + * Create a Strophe.Builder with an <iq/> element as the root. + * + * Parameters: + * (Object) attrs - The <iq/> element attributes in object notation. + * + * Returns: + * A new Strophe.Builder object. + */ + + +function $iq(attrs) { + return new Strophe.Builder("iq", attrs); +} +/** Function: $pres + * Create a Strophe.Builder with a <presence/> element as the root. + * + * Parameters: + * (Object) attrs - The <presence/> element attributes in object notation. + * + * Returns: + * A new Strophe.Builder object. + */ + + +function $pres(attrs) { + return new Strophe.Builder("presence", attrs); +} +/** Class: Strophe + * An object container for all Strophe library functions. + * + * This class is just a container for all the objects and constants + * used in the library. It is not meant to be instantiated, but to + * provide a namespace for library objects, constants, and functions. + */ + + +var Strophe = { + /** Constant: VERSION */ + VERSION: "1.3.1", + + /** Constants: XMPP Namespace Constants + * Common namespace constants from the XMPP RFCs and XEPs. + * + * NS.HTTPBIND - HTTP BIND namespace from XEP 124. + * NS.BOSH - BOSH namespace from XEP 206. + * NS.CLIENT - Main XMPP client namespace. + * NS.AUTH - Legacy authentication namespace. + * NS.ROSTER - Roster operations namespace. + * NS.PROFILE - Profile namespace. + * NS.DISCO_INFO - Service discovery info namespace from XEP 30. + * NS.DISCO_ITEMS - Service discovery items namespace from XEP 30. + * NS.MUC - Multi-User Chat namespace from XEP 45. + * NS.SASL - XMPP SASL namespace from RFC 3920. + * NS.STREAM - XMPP Streams namespace from RFC 3920. + * NS.BIND - XMPP Binding namespace from RFC 3920. + * NS.SESSION - XMPP Session namespace from RFC 3920. + * NS.XHTML_IM - XHTML-IM namespace from XEP 71. + * NS.XHTML - XHTML body namespace from XEP 71. + */ + NS: { + HTTPBIND: "http://jabber.org/protocol/httpbind", + BOSH: "urn:xmpp:xbosh", + CLIENT: "jabber:client", + AUTH: "jabber:iq:auth", + ROSTER: "jabber:iq:roster", + PROFILE: "jabber:iq:profile", + DISCO_INFO: "http://jabber.org/protocol/disco#info", + DISCO_ITEMS: "http://jabber.org/protocol/disco#items", + MUC: "http://jabber.org/protocol/muc", + SASL: "urn:ietf:params:xml:ns:xmpp-sasl", + STREAM: "http://etherx.jabber.org/streams", + FRAMING: "urn:ietf:params:xml:ns:xmpp-framing", + BIND: "urn:ietf:params:xml:ns:xmpp-bind", + SESSION: "urn:ietf:params:xml:ns:xmpp-session", + VERSION: "jabber:iq:version", + STANZAS: "urn:ietf:params:xml:ns:xmpp-stanzas", + XHTML_IM: "http://jabber.org/protocol/xhtml-im", + XHTML: "http://www.w3.org/1999/xhtml" + }, + + /** Constants: XHTML_IM Namespace + * contains allowed tags, tag attributes, and css properties. + * Used in the createHtml function to filter incoming html into the allowed XHTML-IM subset. + * See http://xmpp.org/extensions/xep-0071.html#profile-summary for the list of recommended + * allowed tags and their attributes. + */ + XHTML: { + tags: ['a', 'blockquote', 'br', 'cite', 'em', 'img', 'li', 'ol', 'p', 'span', 'strong', 'ul', 'body'], + attributes: { + 'a': ['href'], + 'blockquote': ['style'], + 'br': [], + 'cite': ['style'], + 'em': [], + 'img': ['src', 'alt', 'style', 'height', 'width'], + 'li': ['style'], + 'ol': ['style'], + 'p': ['style'], + 'span': ['style'], + 'strong': [], + 'ul': ['style'], + 'body': [] + }, + css: ['background-color', 'color', 'font-family', 'font-size', 'font-style', 'font-weight', 'margin-left', 'margin-right', 'text-align', 'text-decoration'], + + /** Function: XHTML.validTag + * + * Utility method to determine whether a tag is allowed + * in the XHTML_IM namespace. + * + * XHTML tag names are case sensitive and must be lower case. + */ + validTag: function validTag(tag) { + for (var i = 0; i < Strophe.XHTML.tags.length; i++) { + if (tag === Strophe.XHTML.tags[i]) { + return true; + } + } + + return false; + }, + + /** Function: XHTML.validAttribute + * + * Utility method to determine whether an attribute is allowed + * as recommended per XEP-0071 + * + * XHTML attribute names are case sensitive and must be lower case. + */ + validAttribute: function validAttribute(tag, attribute) { + if (typeof Strophe.XHTML.attributes[tag] !== 'undefined' && Strophe.XHTML.attributes[tag].length > 0) { + for (var i = 0; i < Strophe.XHTML.attributes[tag].length; i++) { + if (attribute === Strophe.XHTML.attributes[tag][i]) { + return true; + } + } + } + + return false; + }, + validCSS: function validCSS(style) { + for (var i = 0; i < Strophe.XHTML.css.length; i++) { + if (style === Strophe.XHTML.css[i]) { + return true; + } + } + + return false; + } + }, + + /** Constants: Connection Status Constants + * Connection status constants for use by the connection handler + * callback. + * + * Status.ERROR - An error has occurred + * Status.CONNECTING - The connection is currently being made + * Status.CONNFAIL - The connection attempt failed + * Status.AUTHENTICATING - The connection is authenticating + * Status.AUTHFAIL - The authentication attempt failed + * Status.CONNECTED - The connection has succeeded + * Status.DISCONNECTED - The connection has been terminated + * Status.DISCONNECTING - The connection is currently being terminated + * Status.ATTACHED - The connection has been attached + * Status.REDIRECT - The connection has been redirected + * Status.CONNTIMEOUT - The connection has timed out + */ + Status: { + ERROR: 0, + CONNECTING: 1, + CONNFAIL: 2, + AUTHENTICATING: 3, + AUTHFAIL: 4, + CONNECTED: 5, + DISCONNECTED: 6, + DISCONNECTING: 7, + ATTACHED: 8, + REDIRECT: 9, + CONNTIMEOUT: 10 + }, + ErrorCondition: { + BAD_FORMAT: "bad-format", + CONFLICT: "conflict", + MISSING_JID_NODE: "x-strophe-bad-non-anon-jid", + NO_AUTH_MECH: "no-auth-mech", + UNKNOWN_REASON: "unknown" + }, + + /** Constants: Log Level Constants + * Logging level indicators. + * + * LogLevel.DEBUG - Debug output + * LogLevel.INFO - Informational output + * LogLevel.WARN - Warnings + * LogLevel.ERROR - Errors + * LogLevel.FATAL - Fatal errors + */ + LogLevel: { + DEBUG: 0, + INFO: 1, + WARN: 2, + ERROR: 3, + FATAL: 4 + }, + + /** PrivateConstants: DOM Element Type Constants + * DOM element types. + * + * ElementType.NORMAL - Normal element. + * ElementType.TEXT - Text data element. + * ElementType.FRAGMENT - XHTML fragment element. + */ + ElementType: { + NORMAL: 1, + TEXT: 3, + CDATA: 4, + FRAGMENT: 11 + }, + + /** PrivateConstants: Timeout Values + * Timeout values for error states. These values are in seconds. + * These should not be changed unless you know exactly what you are + * doing. + * + * TIMEOUT - Timeout multiplier. A waiting request will be considered + * failed after Math.floor(TIMEOUT * wait) seconds have elapsed. + * This defaults to 1.1, and with default wait, 66 seconds. + * SECONDARY_TIMEOUT - Secondary timeout multiplier. In cases where + * Strophe can detect early failure, it will consider the request + * failed if it doesn't return after + * Math.floor(SECONDARY_TIMEOUT * wait) seconds have elapsed. + * This defaults to 0.1, and with default wait, 6 seconds. + */ + TIMEOUT: 1.1, + SECONDARY_TIMEOUT: 0.1, + + /** Function: addNamespace + * This function is used to extend the current namespaces in + * Strophe.NS. It takes a key and a value with the key being the + * name of the new namespace, with its actual value. + * For example: + * Strophe.addNamespace('PUBSUB', "http://jabber.org/protocol/pubsub"); + * + * Parameters: + * (String) name - The name under which the namespace will be + * referenced under Strophe.NS + * (String) value - The actual namespace. + */ + addNamespace: function addNamespace(name, value) { + Strophe.NS[name] = value; + }, + + /** Function: forEachChild + * Map a function over some or all child elements of a given element. + * + * This is a small convenience function for mapping a function over + * some or all of the children of an element. If elemName is null, all + * children will be passed to the function, otherwise only children + * whose tag names match elemName will be passed. + * + * Parameters: + * (XMLElement) elem - The element to operate on. + * (String) elemName - The child element tag name filter. + * (Function) func - The function to apply to each child. This + * function should take a single argument, a DOM element. + */ + forEachChild: function forEachChild(elem, elemName, func) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === Strophe.ElementType.NORMAL && (!elemName || this.isTagEqual(childNode, elemName))) { + func(childNode); + } + } + }, + + /** Function: isTagEqual + * Compare an element's tag name with a string. + * + * This function is case sensitive. + * + * Parameters: + * (XMLElement) el - A DOM element. + * (String) name - The element name. + * + * Returns: + * true if the element's tag name matches _el_, and false + * otherwise. + */ + isTagEqual: function isTagEqual(el, name) { + return el.tagName === name; + }, + + /** PrivateVariable: _xmlGenerator + * _Private_ variable that caches a DOM document to + * generate elements. + */ + _xmlGenerator: null, + + /** PrivateFunction: _makeGenerator + * _Private_ function that creates a dummy XML DOM document to serve as + * an element and text node generator. + */ + _makeGenerator: function _makeGenerator() { + var doc; // IE9 does implement createDocument(); however, using it will cause the browser to leak memory on page unload. + // Here, we test for presence of createDocument() plus IE's proprietary documentMode attribute, which would be + // less than 10 in the case of IE9 and below. + + if (document.implementation.createDocument === undefined || document.implementation.createDocument && document.documentMode && document.documentMode < 10) { + doc = this._getIEXmlDom(); + doc.appendChild(doc.createElement('strophe')); + } else { + doc = document.implementation.createDocument('jabber:client', 'strophe', null); + } + + return doc; + }, + + /** Function: xmlGenerator + * Get the DOM document to generate elements. + * + * Returns: + * The currently used DOM document. + */ + xmlGenerator: function xmlGenerator() { + if (!Strophe._xmlGenerator) { + Strophe._xmlGenerator = Strophe._makeGenerator(); + } + + return Strophe._xmlGenerator; + }, + + /** PrivateFunction: _getIEXmlDom + * Gets IE xml doc object + * + * Returns: + * A Microsoft XML DOM Object + * See Also: + * http://msdn.microsoft.com/en-us/library/ms757837%28VS.85%29.aspx + */ + _getIEXmlDom: function _getIEXmlDom() { + var doc = null; + var docStrings = ["Msxml2.DOMDocument.6.0", "Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"]; + + for (var d = 0; d < docStrings.length; d++) { + if (doc === null) { + try { + doc = new ActiveXObject(docStrings[d]); + } catch (e) { + doc = null; + } + } else { + break; + } + } + + return doc; + }, + + /** Function: xmlElement + * Create an XML DOM element. + * + * This function creates an XML DOM element correctly across all + * implementations. Note that these are not HTML DOM elements, which + * aren't appropriate for XMPP stanzas. + * + * Parameters: + * (String) name - The name for the element. + * (Array|Object) attrs - An optional array or object containing + * key/value pairs to use as element attributes. The object should + * be in the format {'key': 'value'} or {key: 'value'}. The array + * should have the format [['key1', 'value1'], ['key2', 'value2']]. + * (String) text - The text child data for the element. + * + * Returns: + * A new XML DOM element. + */ + xmlElement: function xmlElement(name) { + if (!name) { + return null; + } + + var node = Strophe.xmlGenerator().createElement(name); // FIXME: this should throw errors if args are the wrong type or + // there are more than two optional args + + for (var a = 1; a < arguments.length; a++) { + var arg = arguments[a]; + + if (!arg) { + continue; + } + + if (typeof arg === "string" || typeof arg === "number") { + node.appendChild(Strophe.xmlTextNode(arg)); + } else if (_typeof(arg) === "object" && typeof arg.sort === "function") { + for (var i = 0; i < arg.length; i++) { + var attr = arg[i]; + + if (_typeof(attr) === "object" && typeof attr.sort === "function" && attr[1] !== undefined && attr[1] !== null) { + node.setAttribute(attr[0], attr[1]); + } + } + } else if (_typeof(arg) === "object") { + for (var k in arg) { + if (Object.prototype.hasOwnProperty.call(arg, k) && arg[k] !== undefined && arg[k] !== null) { + node.setAttribute(k, arg[k]); + } + } + } + } + + return node; + }, + + /* Function: xmlescape + * Excapes invalid xml characters. + * + * Parameters: + * (String) text - text to escape. + * + * Returns: + * Escaped text. + */ + xmlescape: function xmlescape(text) { + text = text.replace(/\&/g, "&"); + text = text.replace(/</g, "<"); + text = text.replace(/>/g, ">"); + text = text.replace(/'/g, "'"); + text = text.replace(/"/g, """); + return text; + }, + + /* Function: xmlunescape + * Unexcapes invalid xml characters. + * + * Parameters: + * (String) text - text to unescape. + * + * Returns: + * Unescaped text. + */ + xmlunescape: function xmlunescape(text) { + text = text.replace(/\&/g, "&"); + text = text.replace(/</g, "<"); + text = text.replace(/>/g, ">"); + text = text.replace(/'/g, "'"); + text = text.replace(/"/g, "\""); + return text; + }, + + /** Function: xmlTextNode + * Creates an XML DOM text node. + * + * Provides a cross implementation version of document.createTextNode. + * + * Parameters: + * (String) text - The content of the text node. + * + * Returns: + * A new XML DOM text node. + */ + xmlTextNode: function xmlTextNode(text) { + return Strophe.xmlGenerator().createTextNode(text); + }, + + /** Function: xmlHtmlNode + * Creates an XML DOM html node. + * + * Parameters: + * (String) html - The content of the html node. + * + * Returns: + * A new XML DOM text node. + */ + xmlHtmlNode: function xmlHtmlNode(html) { + var node; //ensure text is escaped + + if (DOMParser) { + var parser = new DOMParser(); + node = parser.parseFromString(html, "text/xml"); + } else { + node = new ActiveXObject("Microsoft.XMLDOM"); + node.async = "false"; + node.loadXML(html); + } + + return node; + }, + + /** Function: getText + * Get the concatenation of all text children of an element. + * + * Parameters: + * (XMLElement) elem - A DOM element. + * + * Returns: + * A String with the concatenated text of all text element children. + */ + getText: function getText(elem) { + if (!elem) { + return null; + } + + var str = ""; + + if (elem.childNodes.length === 0 && elem.nodeType === Strophe.ElementType.TEXT) { + str += elem.nodeValue; + } + + for (var i = 0; i < elem.childNodes.length; i++) { + if (elem.childNodes[i].nodeType === Strophe.ElementType.TEXT) { + str += elem.childNodes[i].nodeValue; + } + } + + return Strophe.xmlescape(str); + }, + + /** Function: copyElement + * Copy an XML DOM element. + * + * This function copies a DOM element and all its descendants and returns + * the new copy. + * + * Parameters: + * (XMLElement) elem - A DOM element. + * + * Returns: + * A new, copied DOM element tree. + */ + copyElement: function copyElement(elem) { + var el; + + if (elem.nodeType === Strophe.ElementType.NORMAL) { + el = Strophe.xmlElement(elem.tagName); + + for (var i = 0; i < elem.attributes.length; i++) { + el.setAttribute(elem.attributes[i].nodeName, elem.attributes[i].value); + } + + for (var _i = 0; _i < elem.childNodes.length; _i++) { + el.appendChild(Strophe.copyElement(elem.childNodes[_i])); + } + } else if (elem.nodeType === Strophe.ElementType.TEXT) { + el = Strophe.xmlGenerator().createTextNode(elem.nodeValue); + } + + return el; + }, + + /** Function: createHtml + * Copy an HTML DOM element into an XML DOM. + * + * This function copies a DOM element and all its descendants and returns + * the new copy. + * + * Parameters: + * (HTMLElement) elem - A DOM element. + * + * Returns: + * A new, copied DOM element tree. + */ + createHtml: function createHtml(elem) { + var el; + + if (elem.nodeType === Strophe.ElementType.NORMAL) { + var tag = elem.nodeName.toLowerCase(); // XHTML tags must be lower case. + + if (Strophe.XHTML.validTag(tag)) { + try { + el = Strophe.xmlElement(tag); + + for (var i = 0; i < Strophe.XHTML.attributes[tag].length; i++) { + var attribute = Strophe.XHTML.attributes[tag][i]; + var value = elem.getAttribute(attribute); + + if (typeof value === 'undefined' || value === null || value === '' || value === false || value === 0) { + continue; + } + + if (attribute === 'style' && _typeof(value) === 'object' && typeof value.cssText !== 'undefined') { + value = value.cssText; // we're dealing with IE, need to get CSS out + } // filter out invalid css styles + + + if (attribute === 'style') { + var css = []; + var cssAttrs = value.split(';'); + + for (var j = 0; j < cssAttrs.length; j++) { + var attr = cssAttrs[j].split(':'); + var cssName = attr[0].replace(/^\s*/, "").replace(/\s*$/, "").toLowerCase(); + + if (Strophe.XHTML.validCSS(cssName)) { + var cssValue = attr[1].replace(/^\s*/, "").replace(/\s*$/, ""); + css.push(cssName + ': ' + cssValue); + } + } + + if (css.length > 0) { + value = css.join('; '); + el.setAttribute(attribute, value); + } + } else { + el.setAttribute(attribute, value); + } + } + + for (var _i2 = 0; _i2 < elem.childNodes.length; _i2++) { + el.appendChild(Strophe.createHtml(elem.childNodes[_i2])); + } + } catch (e) { + // invalid elements + el = Strophe.xmlTextNode(''); + } + } else { + el = Strophe.xmlGenerator().createDocumentFragment(); + + for (var _i3 = 0; _i3 < elem.childNodes.length; _i3++) { + el.appendChild(Strophe.createHtml(elem.childNodes[_i3])); + } + } + } else if (elem.nodeType === Strophe.ElementType.FRAGMENT) { + el = Strophe.xmlGenerator().createDocumentFragment(); + + for (var _i4 = 0; _i4 < elem.childNodes.length; _i4++) { + el.appendChild(Strophe.createHtml(elem.childNodes[_i4])); + } + } else if (elem.nodeType === Strophe.ElementType.TEXT) { + el = Strophe.xmlTextNode(elem.nodeValue); + } + + return el; + }, + + /** Function: escapeNode + * Escape the node part (also called local part) of a JID. + * + * Parameters: + * (String) node - A node (or local part). + * + * Returns: + * An escaped node (or local part). + */ + escapeNode: function escapeNode(node) { + if (typeof node !== "string") { + return node; + } + + return node.replace(/^\s+|\s+$/g, '').replace(/\\/g, "\\5c").replace(/ /g, "\\20").replace(/\"/g, "\\22").replace(/\&/g, "\\26").replace(/\'/g, "\\27").replace(/\//g, "\\2f").replace(/:/g, "\\3a").replace(/</g, "\\3c").replace(/>/g, "\\3e").replace(/@/g, "\\40"); + }, + + /** Function: unescapeNode + * Unescape a node part (also called local part) of a JID. + * + * Parameters: + * (String) node - A node (or local part). + * + * Returns: + * An unescaped node (or local part). + */ + unescapeNode: function unescapeNode(node) { + if (typeof node !== "string") { + return node; + } + + return node.replace(/\\20/g, " ").replace(/\\22/g, '"').replace(/\\26/g, "&").replace(/\\27/g, "'").replace(/\\2f/g, "/").replace(/\\3a/g, ":").replace(/\\3c/g, "<").replace(/\\3e/g, ">").replace(/\\40/g, "@").replace(/\\5c/g, "\\"); + }, + + /** Function: getNodeFromJid + * Get the node portion of a JID String. + * + * Parameters: + * (String) jid - A JID. + * + * Returns: + * A String containing the node. + */ + getNodeFromJid: function getNodeFromJid(jid) { + if (jid.indexOf("@") < 0) { + return null; + } + + return jid.split("@")[0]; + }, + + /** Function: getDomainFromJid + * Get the domain portion of a JID String. + * + * Parameters: + * (String) jid - A JID. + * + * Returns: + * A String containing the domain. + */ + getDomainFromJid: function getDomainFromJid(jid) { + var bare = Strophe.getBareJidFromJid(jid); + + if (bare.indexOf("@") < 0) { + return bare; + } else { + var parts = bare.split("@"); + parts.splice(0, 1); + return parts.join('@'); + } + }, + + /** Function: getResourceFromJid + * Get the resource portion of a JID String. + * + * Parameters: + * (String) jid - A JID. + * + * Returns: + * A String containing the resource. + */ + getResourceFromJid: function getResourceFromJid(jid) { + var s = jid.split("/"); + + if (s.length < 2) { + return null; + } + + s.splice(0, 1); + return s.join('/'); + }, + + /** Function: getBareJidFromJid + * Get the bare JID from a JID String. + * + * Parameters: + * (String) jid - A JID. + * + * Returns: + * A String containing the bare JID. + */ + getBareJidFromJid: function getBareJidFromJid(jid) { + return jid ? jid.split("/")[0] : null; + }, + + /** PrivateFunction: _handleError + * _Private_ function that properly logs an error to the console + */ + _handleError: function _handleError(e) { + if (typeof e.stack !== "undefined") { + Strophe.fatal(e.stack); + } + + if (e.sourceURL) { + Strophe.fatal("error: " + this.handler + " " + e.sourceURL + ":" + e.line + " - " + e.name + ": " + e.message); + } else if (e.fileName) { + Strophe.fatal("error: " + this.handler + " " + e.fileName + ":" + e.lineNumber + " - " + e.name + ": " + e.message); + } else { + Strophe.fatal("error: " + e.message); + } + }, + + /** Function: log + * User overrideable logging function. + * + * This function is called whenever the Strophe library calls any + * of the logging functions. The default implementation of this + * function logs only fatal errors. If client code wishes to handle the logging + * messages, it should override this with + * > Strophe.log = function (level, msg) { + * > (user code here) + * > }; + * + * Please note that data sent and received over the wire is logged + * via Strophe.Connection.rawInput() and Strophe.Connection.rawOutput(). + * + * The different levels and their meanings are + * + * DEBUG - Messages useful for debugging purposes. + * INFO - Informational messages. This is mostly information like + * 'disconnect was called' or 'SASL auth succeeded'. + * WARN - Warnings about potential problems. This is mostly used + * to report transient connection errors like request timeouts. + * ERROR - Some error occurred. + * FATAL - A non-recoverable fatal error occurred. + * + * Parameters: + * (Integer) level - The log level of the log message. This will + * be one of the values in Strophe.LogLevel. + * (String) msg - The log message. + */ + log: function log(level, msg) { + if (level === this.LogLevel.FATAL && _typeof(window.console) === 'object' && typeof window.console.error === 'function') { + window.console.error(msg); + } + }, + + /** Function: debug + * Log a message at the Strophe.LogLevel.DEBUG level. + * + * Parameters: + * (String) msg - The log message. + */ + debug: function debug(msg) { + this.log(this.LogLevel.DEBUG, msg); + }, + + /** Function: info + * Log a message at the Strophe.LogLevel.INFO level. + * + * Parameters: + * (String) msg - The log message. + */ + info: function info(msg) { + this.log(this.LogLevel.INFO, msg); + }, + + /** Function: warn + * Log a message at the Strophe.LogLevel.WARN level. + * + * Parameters: + * (String) msg - The log message. + */ + warn: function warn(msg) { + this.log(this.LogLevel.WARN, msg); + }, + + /** Function: error + * Log a message at the Strophe.LogLevel.ERROR level. + * + * Parameters: + * (String) msg - The log message. + */ + error: function error(msg) { + this.log(this.LogLevel.ERROR, msg); + }, + + /** Function: fatal + * Log a message at the Strophe.LogLevel.FATAL level. + * + * Parameters: + * (String) msg - The log message. + */ + fatal: function fatal(msg) { + this.log(this.LogLevel.FATAL, msg); + }, + + /** Function: serialize + * Render a DOM element and all descendants to a String. + * + * Parameters: + * (XMLElement) elem - A DOM element. + * + * Returns: + * The serialized element tree as a String. + */ + serialize: function serialize(elem) { + if (!elem) { + return null; + } + + if (typeof elem.tree === "function") { + elem = elem.tree(); + } + + var names = _toConsumableArray(Array(elem.attributes.length).keys()).map(function (i) { + return elem.attributes[i].nodeName; + }); + + names.sort(); + var result = names.reduce(function (a, n) { + return "".concat(a, " ").concat(n, "=\"").concat(Strophe.xmlescape(elem.attributes.getNamedItem(n).value), "\""); + }, "<".concat(elem.nodeName)); + + if (elem.childNodes.length > 0) { + result += ">"; + + for (var i = 0; i < elem.childNodes.length; i++) { + var child = elem.childNodes[i]; + + switch (child.nodeType) { + case Strophe.ElementType.NORMAL: + // normal element, so recurse + result += Strophe.serialize(child); + break; + + case Strophe.ElementType.TEXT: + // text element to escape values + result += Strophe.xmlescape(child.nodeValue); + break; + + case Strophe.ElementType.CDATA: + // cdata section so don't escape values + result += "<![CDATA[" + child.nodeValue + "]]>"; + } + } + + result += "</" + elem.nodeName + ">"; + } else { + result += "/>"; + } + + return result; + }, + + /** PrivateVariable: _requestId + * _Private_ variable that keeps track of the request ids for + * connections. + */ + _requestId: 0, + + /** PrivateVariable: Strophe.connectionPlugins + * _Private_ variable Used to store plugin names that need + * initialization on Strophe.Connection construction. + */ + _connectionPlugins: {}, + + /** Function: addConnectionPlugin + * Extends the Strophe.Connection object with the given plugin. + * + * Parameters: + * (String) name - The name of the extension. + * (Object) ptype - The plugin's prototype. + */ + addConnectionPlugin: function addConnectionPlugin(name, ptype) { + Strophe._connectionPlugins[name] = ptype; + } +}; +/** Class: Strophe.Builder + * XML DOM builder. + * + * This object provides an interface similar to JQuery but for building + * DOM elements easily and rapidly. All the functions except for toString() + * and tree() return the object, so calls can be chained. Here's an + * example using the $iq() builder helper. + * > $iq({to: 'you', from: 'me', type: 'get', id: '1'}) + * > .c('query', {xmlns: 'strophe:example'}) + * > .c('example') + * > .toString() + * + * The above generates this XML fragment + * > <iq to='you' from='me' type='get' id='1'> + * > <query xmlns='strophe:example'> + * > <example/> + * > </query> + * > </iq> + * The corresponding DOM manipulations to get a similar fragment would be + * a lot more tedious and probably involve several helper variables. + * + * Since adding children makes new operations operate on the child, up() + * is provided to traverse up the tree. To add two children, do + * > builder.c('child1', ...).up().c('child2', ...) + * The next operation on the Builder will be relative to the second child. + */ + +/** Constructor: Strophe.Builder + * Create a Strophe.Builder object. + * + * The attributes should be passed in object notation. For example + * > let b = new Builder('message', {to: 'you', from: 'me'}); + * or + * > let b = new Builder('messsage', {'xml:lang': 'en'}); + * + * Parameters: + * (String) name - The name of the root element. + * (Object) attrs - The attributes for the root element in object notation. + * + * Returns: + * A new Strophe.Builder. + */ + +Strophe.Builder = function (name, attrs) { + // Set correct namespace for jabber:client elements + if (name === "presence" || name === "message" || name === "iq") { + if (attrs && !attrs.xmlns) { + attrs.xmlns = Strophe.NS.CLIENT; + } else if (!attrs) { + attrs = { + xmlns: Strophe.NS.CLIENT + }; + } + } // Holds the tree being built. + + + this.nodeTree = Strophe.xmlElement(name, attrs); // Points to the current operation node. + + this.node = this.nodeTree; +}; + +Strophe.Builder.prototype = { + /** Function: tree + * Return the DOM tree. + * + * This function returns the current DOM tree as an element object. This + * is suitable for passing to functions like Strophe.Connection.send(). + * + * Returns: + * The DOM tree as a element object. + */ + tree: function tree() { + return this.nodeTree; + }, + + /** Function: toString + * Serialize the DOM tree to a String. + * + * This function returns a string serialization of the current DOM + * tree. It is often used internally to pass data to a + * Strophe.Request object. + * + * Returns: + * The serialized DOM tree in a String. + */ + toString: function toString() { + return Strophe.serialize(this.nodeTree); + }, + + /** Function: up + * Make the current parent element the new current element. + * + * This function is often used after c() to traverse back up the tree. + * For example, to add two children to the same element + * > builder.c('child1', {}).up().c('child2', {}); + * + * Returns: + * The Stophe.Builder object. + */ + up: function up() { + this.node = this.node.parentNode; + return this; + }, + + /** Function: root + * Make the root element the new current element. + * + * When at a deeply nested element in the tree, this function can be used + * to jump back to the root of the tree, instead of having to repeatedly + * call up(). + * + * Returns: + * The Stophe.Builder object. + */ + root: function root() { + this.node = this.nodeTree; + return this; + }, + + /** Function: attrs + * Add or modify attributes of the current element. + * + * The attributes should be passed in object notation. This function + * does not move the current element pointer. + * + * Parameters: + * (Object) moreattrs - The attributes to add/modify in object notation. + * + * Returns: + * The Strophe.Builder object. + */ + attrs: function attrs(moreattrs) { + for (var k in moreattrs) { + if (Object.prototype.hasOwnProperty.call(moreattrs, k)) { + if (moreattrs[k] === undefined) { + this.node.removeAttribute(k); + } else { + this.node.setAttribute(k, moreattrs[k]); + } + } + } + + return this; + }, + + /** Function: c + * Add a child to the current element and make it the new current + * element. + * + * This function moves the current element pointer to the child, + * unless text is provided. If you need to add another child, it + * is necessary to use up() to go back to the parent in the tree. + * + * Parameters: + * (String) name - The name of the child. + * (Object) attrs - The attributes of the child in object notation. + * (String) text - The text to add to the child. + * + * Returns: + * The Strophe.Builder object. + */ + c: function c(name, attrs, text) { + var child = Strophe.xmlElement(name, attrs, text); + this.node.appendChild(child); + + if (typeof text !== "string" && typeof text !== "number") { + this.node = child; + } + + return this; + }, + + /** Function: cnode + * Add a child to the current element and make it the new current + * element. + * + * This function is the same as c() except that instead of using a + * name and an attributes object to create the child it uses an + * existing DOM element object. + * + * Parameters: + * (XMLElement) elem - A DOM element. + * + * Returns: + * The Strophe.Builder object. + */ + cnode: function cnode(elem) { + var impNode; + var xmlGen = Strophe.xmlGenerator(); + + try { + impNode = xmlGen.importNode !== undefined; + } catch (e) { + impNode = false; + } + + var newElem = impNode ? xmlGen.importNode(elem, true) : Strophe.copyElement(elem); + this.node.appendChild(newElem); + this.node = newElem; + return this; + }, + + /** Function: t + * Add a child text element. + * + * This *does not* make the child the new current element since there + * are no children of text elements. + * + * Parameters: + * (String) text - The text data to append to the current element. + * + * Returns: + * The Strophe.Builder object. + */ + t: function t(text) { + var child = Strophe.xmlTextNode(text); + this.node.appendChild(child); + return this; + }, + + /** Function: h + * Replace current element contents with the HTML passed in. + * + * This *does not* make the child the new current element + * + * Parameters: + * (String) html - The html to insert as contents of current element. + * + * Returns: + * The Strophe.Builder object. + */ + h: function h(html) { + var fragment = document.createElement('body'); // force the browser to try and fix any invalid HTML tags + + fragment.innerHTML = html; // copy cleaned html into an xml dom + + var xhtml = Strophe.createHtml(fragment); + + while (xhtml.childNodes.length > 0) { + this.node.appendChild(xhtml.childNodes[0]); + } + + return this; + } +}; +/** PrivateClass: Strophe.Handler + * _Private_ helper class for managing stanza handlers. + * + * A Strophe.Handler encapsulates a user provided callback function to be + * executed when matching stanzas are received by the connection. + * Handlers can be either one-off or persistant depending on their + * return value. Returning true will cause a Handler to remain active, and + * returning false will remove the Handler. + * + * Users will not use Strophe.Handler objects directly, but instead they + * will use Strophe.Connection.addHandler() and + * Strophe.Connection.deleteHandler(). + */ + +/** PrivateConstructor: Strophe.Handler + * Create and initialize a new Strophe.Handler. + * + * Parameters: + * (Function) handler - A function to be executed when the handler is run. + * (String) ns - The namespace to match. + * (String) name - The element name to match. + * (String) type - The element type to match. + * (String) id - The element id attribute to match. + * (String) from - The element from attribute to match. + * (Object) options - Handler options + * + * Returns: + * A new Strophe.Handler object. + */ + +Strophe.Handler = function (handler, ns, name, type, id, from, options) { + this.handler = handler; + this.ns = ns; + this.name = name; + this.type = type; + this.id = id; + this.options = options || { + 'matchBareFromJid': false, + 'ignoreNamespaceFragment': false + }; // BBB: Maintain backward compatibility with old `matchBare` option + + if (this.options.matchBare) { + Strophe.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'); + this.options.matchBareFromJid = this.options.matchBare; + delete this.options.matchBare; + } + + if (this.options.matchBareFromJid) { + this.from = from ? Strophe.getBareJidFromJid(from) : null; + } else { + this.from = from; + } // whether the handler is a user handler or a system handler + + + this.user = true; +}; + +Strophe.Handler.prototype = { + /** PrivateFunction: getNamespace + * Returns the XML namespace attribute on an element. + * If `ignoreNamespaceFragment` was passed in for this handler, then the + * URL fragment will be stripped. + * + * Parameters: + * (XMLElement) elem - The XML element with the namespace. + * + * Returns: + * The namespace, with optionally the fragment stripped. + */ + getNamespace: function getNamespace(elem) { + var elNamespace = elem.getAttribute("xmlns"); + + if (elNamespace && this.options.ignoreNamespaceFragment) { + elNamespace = elNamespace.split('#')[0]; + } + + return elNamespace; + }, + + /** PrivateFunction: namespaceMatch + * Tests if a stanza matches the namespace set for this Strophe.Handler. + * + * Parameters: + * (XMLElement) elem - The XML element to test. + * + * Returns: + * true if the stanza matches and false otherwise. + */ + namespaceMatch: function namespaceMatch(elem) { + var _this = this; + + var nsMatch = false; + + if (!this.ns) { + return true; + } else { + Strophe.forEachChild(elem, null, function (elem) { + if (_this.getNamespace(elem) === _this.ns) { + nsMatch = true; + } + }); + return nsMatch || this.getNamespace(elem) === this.ns; + } + }, + + /** PrivateFunction: isMatch + * Tests if a stanza matches the Strophe.Handler. + * + * Parameters: + * (XMLElement) elem - The XML element to test. + * + * Returns: + * true if the stanza matches and false otherwise. + */ + isMatch: function isMatch(elem) { + var from = elem.getAttribute('from'); + + if (this.options.matchBareFromJid) { + from = Strophe.getBareJidFromJid(from); + } + + var elem_type = elem.getAttribute("type"); + + if (this.namespaceMatch(elem) && (!this.name || Strophe.isTagEqual(elem, this.name)) && (!this.type || (Array.isArray(this.type) ? this.type.indexOf(elem_type) !== -1 : elem_type === this.type)) && (!this.id || elem.getAttribute("id") === this.id) && (!this.from || from === this.from)) { + return true; + } + + return false; + }, + + /** PrivateFunction: run + * Run the callback on a matching stanza. + * + * Parameters: + * (XMLElement) elem - The DOM element that triggered the + * Strophe.Handler. + * + * Returns: + * A boolean indicating if the handler should remain active. + */ + run: function run(elem) { + var result = null; + + try { + result = this.handler(elem); + } catch (e) { + Strophe._handleError(e); + + throw e; + } + + return result; + }, + + /** PrivateFunction: toString + * Get a String representation of the Strophe.Handler object. + * + * Returns: + * A String. + */ + toString: function toString() { + return "{Handler: " + this.handler + "(" + this.name + "," + this.id + "," + this.ns + ")}"; + } +}; +/** PrivateClass: Strophe.TimedHandler + * _Private_ helper class for managing timed handlers. + * + * A Strophe.TimedHandler encapsulates a user provided callback that + * should be called after a certain period of time or at regular + * intervals. The return value of the callback determines whether the + * Strophe.TimedHandler will continue to fire. + * + * Users will not use Strophe.TimedHandler objects directly, but instead + * they will use Strophe.Connection.addTimedHandler() and + * Strophe.Connection.deleteTimedHandler(). + */ + +/** PrivateConstructor: Strophe.TimedHandler + * Create and initialize a new Strophe.TimedHandler object. + * + * Parameters: + * (Integer) period - The number of milliseconds to wait before the + * handler is called. + * (Function) handler - The callback to run when the handler fires. This + * function should take no arguments. + * + * Returns: + * A new Strophe.TimedHandler object. + */ + +Strophe.TimedHandler = function (period, handler) { + this.period = period; + this.handler = handler; + this.lastCalled = new Date().getTime(); + this.user = true; +}; + +Strophe.TimedHandler.prototype = { + /** PrivateFunction: run + * Run the callback for the Strophe.TimedHandler. + * + * Returns: + * true if the Strophe.TimedHandler should be called again, and false + * otherwise. + */ + run: function run() { + this.lastCalled = new Date().getTime(); + return this.handler(); + }, + + /** PrivateFunction: reset + * Reset the last called time for the Strophe.TimedHandler. + */ + reset: function reset() { + this.lastCalled = new Date().getTime(); + }, + + /** PrivateFunction: toString + * Get a string representation of the Strophe.TimedHandler object. + * + * Returns: + * The string representation. + */ + toString: function toString() { + return "{TimedHandler: " + this.handler + "(" + this.period + ")}"; + } +}; +/** Class: Strophe.Connection + * XMPP Connection manager. + * + * This class is the main part of Strophe. It manages a BOSH or websocket + * connection to an XMPP server and dispatches events to the user callbacks + * as data arrives. It supports SASL PLAIN, SASL DIGEST-MD5, SASL SCRAM-SHA1 + * and legacy authentication. + * + * After creating a Strophe.Connection object, the user will typically + * call connect() with a user supplied callback to handle connection level + * events like authentication failure, disconnection, or connection + * complete. + * + * The user will also have several event handlers defined by using + * addHandler() and addTimedHandler(). These will allow the user code to + * respond to interesting stanzas or do something periodically with the + * connection. These handlers will be active once authentication is + * finished. + * + * To send data to the connection, use send(). + */ + +/** Constructor: Strophe.Connection + * Create and initialize a Strophe.Connection object. + * + * The transport-protocol for this connection will be chosen automatically + * based on the given service parameter. URLs starting with "ws://" or + * "wss://" will use WebSockets, URLs starting with "http://", "https://" + * or without a protocol will use BOSH. + * + * To make Strophe connect to the current host you can leave out the protocol + * and host part and just pass the path, e.g. + * + * > let conn = new Strophe.Connection("/http-bind/"); + * + * Options common to both Websocket and BOSH: + * ------------------------------------------ + * + * cookies: + * + * The *cookies* option allows you to pass in cookies to be added to the + * document. These cookies will then be included in the BOSH XMLHttpRequest + * or in the websocket connection. + * + * The passed in value must be a map of cookie names and string values. + * + * > { "myCookie": { + * > "value": "1234", + * > "domain": ".example.org", + * > "path": "/", + * > "expires": expirationDate + * > } + * > } + * + * Note that cookies can't be set in this way for other domains (i.e. cross-domain). + * Those cookies need to be set under those domains, for example they can be + * set server-side by making a XHR call to that domain to ask it to set any + * necessary cookies. + * + * mechanisms: + * + * The *mechanisms* option allows you to specify the SASL mechanisms that this + * instance of Strophe.Connection (and therefore your XMPP client) will + * support. + * + * The value must be an array of objects with Strophe.SASLMechanism + * prototypes. + * + * If nothing is specified, then the following mechanisms (and their + * priorities) are registered: + * + * SCRAM-SHA1 - 70 + * DIGEST-MD5 - 60 + * PLAIN - 50 + * OAUTH-BEARER - 40 + * OAUTH-2 - 30 + * ANONYMOUS - 20 + * EXTERNAL - 10 + * + * WebSocket options: + * ------------------ + * + * If you want to connect to the current host with a WebSocket connection you + * can tell Strophe to use WebSockets through a "protocol" attribute in the + * optional options parameter. Valid values are "ws" for WebSocket and "wss" + * for Secure WebSocket. + * So to connect to "wss://CURRENT_HOSTNAME/xmpp-websocket" you would call + * + * > let conn = new Strophe.Connection("/xmpp-websocket/", {protocol: "wss"}); + * + * Note that relative URLs _NOT_ starting with a "/" will also include the path + * of the current site. + * + * Also because downgrading security is not permitted by browsers, when using + * relative URLs both BOSH and WebSocket connections will use their secure + * variants if the current connection to the site is also secure (https). + * + * BOSH options: + * ------------- + * + * By adding "sync" to the options, you can control if requests will + * be made synchronously or not. The default behaviour is asynchronous. + * If you want to make requests synchronous, make "sync" evaluate to true. + * > let conn = new Strophe.Connection("/http-bind/", {sync: true}); + * + * You can also toggle this on an already established connection. + * > conn.options.sync = true; + * + * The *customHeaders* option can be used to provide custom HTTP headers to be + * included in the XMLHttpRequests made. + * + * The *keepalive* option can be used to instruct Strophe to maintain the + * current BOSH session across interruptions such as webpage reloads. + * + * It will do this by caching the sessions tokens in sessionStorage, and when + * "restore" is called it will check whether there are cached tokens with + * which it can resume an existing session. + * + * The *withCredentials* option should receive a Boolean value and is used to + * indicate wether cookies should be included in ajax requests (by default + * they're not). + * Set this value to true if you are connecting to a BOSH service + * and for some reason need to send cookies to it. + * In order for this to work cross-domain, the server must also enable + * credentials by setting the Access-Control-Allow-Credentials response header + * to "true". For most usecases however this setting should be false (which + * is the default). + * Additionally, when using Access-Control-Allow-Credentials, the + * Access-Control-Allow-Origin header can't be set to the wildcard "*", but + * instead must be restricted to actual domains. + * + * The *contentType* option can be set to change the default Content-Type + * of "text/xml; charset=utf-8", which can be useful to reduce the amount of + * CORS preflight requests that are sent to the server. + * + * Parameters: + * (String) service - The BOSH or WebSocket service URL. + * (Object) options - A hash of configuration options + * + * Returns: + * A new Strophe.Connection object. + */ + +Strophe.Connection = function (service, options) { + var _this2 = this; + + // The service URL + this.service = service; // Configuration options + + this.options = options || {}; + var proto = this.options.protocol || ""; // Select protocal based on service or options + + if (service.indexOf("ws:") === 0 || service.indexOf("wss:") === 0 || proto.indexOf("ws") === 0) { + this._proto = new Strophe.Websocket(this); + } else { + this._proto = new Strophe.Bosh(this); + } + /* The connected JID. */ + + + this.jid = ""; + /* the JIDs domain */ + + this.domain = null; + /* stream:features */ + + this.features = null; // SASL + + this._sasl_data = {}; + this.do_session = false; + this.do_bind = false; // handler lists + + this.timedHandlers = []; + this.handlers = []; + this.removeTimeds = []; + this.removeHandlers = []; + this.addTimeds = []; + this.addHandlers = []; + this.protocolErrorHandlers = { + 'HTTP': {}, + 'websocket': {} + }; + this._idleTimeout = null; + this._disconnectTimeout = null; + this.authenticated = false; + this.connected = false; + this.disconnecting = false; + this.do_authentication = true; + this.paused = false; + this.restored = false; + this._data = []; + this._uniqueId = 0; + this._sasl_success_handler = null; + this._sasl_failure_handler = null; + this._sasl_challenge_handler = null; // Max retries before disconnecting + + this.maxRetries = 5; // Call onIdle callback every 1/10th of a second + + this._idleTimeout = setTimeout(function () { + return _this2._onIdle(); + }, 100); + utils__WEBPACK_IMPORTED_MODULE_2__["default"].addCookies(this.options.cookies); + this.registerSASLMechanisms(this.options.mechanisms); // initialize plugins + + for (var k in Strophe._connectionPlugins) { + if (Object.prototype.hasOwnProperty.call(Strophe._connectionPlugins, k)) { + var F = function F() {}; + + F.prototype = Strophe._connectionPlugins[k]; + this[k] = new F(); + this[k].init(this); + } + } +}; + +Strophe.Connection.prototype = { + /** Function: reset + * Reset the connection. + * + * This function should be called after a connection is disconnected + * before that connection is reused. + */ + reset: function reset() { + this._proto._reset(); // SASL + + + this.do_session = false; + this.do_bind = false; // handler lists + + this.timedHandlers = []; + this.handlers = []; + this.removeTimeds = []; + this.removeHandlers = []; + this.addTimeds = []; + this.addHandlers = []; + this.authenticated = false; + this.connected = false; + this.disconnecting = false; + this.restored = false; + this._data = []; + this._requests = []; + this._uniqueId = 0; + }, + + /** Function: pause + * Pause the request manager. + * + * This will prevent Strophe from sending any more requests to the + * server. This is very useful for temporarily pausing + * BOSH-Connections while a lot of send() calls are happening quickly. + * This causes Strophe to send the data in a single request, saving + * many request trips. + */ + pause: function pause() { + this.paused = true; + }, + + /** Function: resume + * Resume the request manager. + * + * This resumes after pause() has been called. + */ + resume: function resume() { + this.paused = false; + }, + + /** Function: getUniqueId + * Generate a unique ID for use in <iq/> elements. + * + * All <iq/> stanzas are required to have unique id attributes. This + * function makes creating these easy. Each connection instance has + * a counter which starts from zero, and the value of this counter + * plus a colon followed by the suffix becomes the unique id. If no + * suffix is supplied, the counter is used as the unique id. + * + * Suffixes are used to make debugging easier when reading the stream + * data, and their use is recommended. The counter resets to 0 for + * every new connection for the same reason. For connections to the + * same server that authenticate the same way, all the ids should be + * the same, which makes it easy to see changes. This is useful for + * automated testing as well. + * + * Parameters: + * (String) suffix - A optional suffix to append to the id. + * + * Returns: + * A unique string to be used for the id attribute. + */ + getUniqueId: function getUniqueId(suffix) { + var uuid = '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); + }); + + if (typeof suffix === "string" || typeof suffix === "number") { + return uuid + ":" + suffix; + } else { + return uuid + ""; + } + }, + + /** Function: addProtocolErrorHandler + * Register a handler function for when a protocol (websocker or HTTP) + * error occurs. + * + * NOTE: Currently only HTTP errors for BOSH requests are handled. + * Patches that handle websocket errors would be very welcome. + * + * Parameters: + * (String) protocol - 'HTTP' or 'websocket' + * (Integer) status_code - Error status code (e.g 500, 400 or 404) + * (Function) callback - Function that will fire on Http error + * + * Example: + * function onError(err_code){ + * //do stuff + * } + * + * let conn = Strophe.connect('http://example.com/http-bind'); + * conn.addProtocolErrorHandler('HTTP', 500, onError); + * // Triggers HTTP 500 error and onError handler will be called + * conn.connect('user_jid@incorrect_jabber_host', 'secret', onConnect); + */ + addProtocolErrorHandler: function addProtocolErrorHandler(protocol, status_code, callback) { + this.protocolErrorHandlers[protocol][status_code] = callback; + }, + + /** Function: connect + * Starts the connection process. + * + * As the connection process proceeds, the user supplied callback will + * be triggered multiple times with status updates. The callback + * should take two arguments - the status code and the error condition. + * + * The status code will be one of the values in the Strophe.Status + * constants. The error condition will be one of the conditions + * defined in RFC 3920 or the condition 'strophe-parsererror'. + * + * The Parameters _wait_, _hold_ and _route_ are optional and only relevant + * for BOSH connections. Please see XEP 124 for a more detailed explanation + * of the optional parameters. + * + * Parameters: + * (String) jid - The user's JID. This may be a bare JID, + * or a full JID. If a node is not supplied, SASL OAUTHBEARER or + * SASL ANONYMOUS authentication will be attempted (OAUTHBEARER will + * process the provided password value as an access token). + * (String) pass - The user's password. + * (Function) callback - The connect callback function. + * (Integer) wait - The optional HTTPBIND wait value. This is the + * time the server will wait before returning an empty result for + * a request. The default setting of 60 seconds is recommended. + * (Integer) hold - The optional HTTPBIND hold value. This is the + * number of connections the server will hold at one time. This + * should almost always be set to 1 (the default). + * (String) route - The optional route value. + * (String) authcid - The optional alternative authentication identity + * (username) if intending to impersonate another user. + * When using the SASL-EXTERNAL authentication mechanism, for example + * with client certificates, then the authcid value is used to + * determine whether an authorization JID (authzid) should be sent to + * the server. The authzid should not be sent to the server if the + * authzid and authcid are the same. So to prevent it from being sent + * (for example when the JID is already contained in the client + * certificate), set authcid to that same JID. See XEP-178 for more + * details. + */ + connect: function connect(jid, pass, callback, wait, hold, route, authcid) { + this.jid = jid; + /** Variable: authzid + * Authorization identity. + */ + + this.authzid = Strophe.getBareJidFromJid(this.jid); + /** Variable: authcid + * Authentication identity (User name). + */ + + this.authcid = authcid || Strophe.getNodeFromJid(this.jid); + /** Variable: pass + * Authentication identity (User password). + */ + + this.pass = pass; + /** Variable: servtype + * Digest MD5 compatibility. + */ + + this.servtype = "xmpp"; + this.connect_callback = callback; + this.disconnecting = false; + this.connected = false; + this.authenticated = false; + this.restored = false; // parse jid for domain + + this.domain = Strophe.getDomainFromJid(this.jid); + + this._changeConnectStatus(Strophe.Status.CONNECTING, null); + + this._proto._connect(wait, hold, route); + }, + + /** Function: attach + * Attach to an already created and authenticated BOSH session. + * + * This function is provided to allow Strophe to attach to BOSH + * sessions which have been created externally, perhaps by a Web + * application. This is often used to support auto-login type features + * without putting user credentials into the page. + * + * Parameters: + * (String) jid - The full JID that is bound by the session. + * (String) sid - The SID of the BOSH session. + * (String) rid - The current RID of the BOSH session. This RID + * will be used by the next request. + * (Function) callback The connect callback function. + * (Integer) wait - The optional HTTPBIND wait value. This is the + * time the server will wait before returning an empty result for + * a request. The default setting of 60 seconds is recommended. + * Other settings will require tweaks to the Strophe.TIMEOUT value. + * (Integer) hold - The optional HTTPBIND hold value. This is the + * number of connections the server will hold at one time. This + * should almost always be set to 1 (the default). + * (Integer) wind - The optional HTTBIND window value. This is the + * allowed range of request ids that are valid. The default is 5. + */ + attach: function attach(jid, sid, rid, callback, wait, hold, wind) { + if (this._proto instanceof Strophe.Bosh) { + this._proto._attach(jid, sid, rid, callback, wait, hold, wind); + } else { + var error = new Error('The "attach" method can only be used with a BOSH connection.'); + error.name = 'StropheSessionError'; + throw error; + } + }, + + /** Function: restore + * Attempt to restore a cached BOSH session. + * + * This function is only useful in conjunction with providing the + * "keepalive":true option when instantiating a new Strophe.Connection. + * + * When "keepalive" is set to true, Strophe will cache the BOSH tokens + * RID (Request ID) and SID (Session ID) and then when this function is + * called, it will attempt to restore the session from those cached + * tokens. + * + * This function must therefore be called instead of connect or attach. + * + * For an example on how to use it, please see examples/restore.js + * + * Parameters: + * (String) jid - The user's JID. This may be a bare JID or a full JID. + * (Function) callback - The connect callback function. + * (Integer) wait - The optional HTTPBIND wait value. This is the + * time the server will wait before returning an empty result for + * a request. The default setting of 60 seconds is recommended. + * (Integer) hold - The optional HTTPBIND hold value. This is the + * number of connections the server will hold at one time. This + * should almost always be set to 1 (the default). + * (Integer) wind - The optional HTTBIND window value. This is the + * allowed range of request ids that are valid. The default is 5. + */ + restore: function restore(jid, callback, wait, hold, wind) { + if (this._sessionCachingSupported()) { + this._proto._restore(jid, callback, wait, hold, wind); + } else { + var error = new Error('The "restore" method can only be used with a BOSH connection.'); + error.name = 'StropheSessionError'; + throw error; + } + }, + + /** PrivateFunction: _sessionCachingSupported + * Checks whether sessionStorage and JSON are supported and whether we're + * using BOSH. + */ + _sessionCachingSupported: function _sessionCachingSupported() { + if (this._proto instanceof Strophe.Bosh) { + if (!JSON) { + return false; + } + + try { + sessionStorage.setItem('_strophe_', '_strophe_'); + sessionStorage.removeItem('_strophe_'); + } catch (e) { + return false; + } + + return true; + } + + return false; + }, + + /** Function: xmlInput + * User overrideable function that receives XML data coming into the + * connection. + * + * The default function does nothing. User code can override this with + * > Strophe.Connection.xmlInput = function (elem) { + * > (user code) + * > }; + * + * Due to limitations of current Browsers' XML-Parsers the opening and closing + * <stream> tag for WebSocket-Connoctions will be passed as selfclosing here. + * + * BOSH-Connections will have all stanzas wrapped in a <body> tag. See + * <Strophe.Bosh.strip> if you want to strip this tag. + * + * Parameters: + * (XMLElement) elem - The XML data received by the connection. + */ + + /* jshint unused:false */ + xmlInput: function xmlInput(elem) { + return; + }, + + /* jshint unused:true */ + + /** Function: xmlOutput + * User overrideable function that receives XML data sent to the + * connection. + * + * The default function does nothing. User code can override this with + * > Strophe.Connection.xmlOutput = function (elem) { + * > (user code) + * > }; + * + * Due to limitations of current Browsers' XML-Parsers the opening and closing + * <stream> tag for WebSocket-Connoctions will be passed as selfclosing here. + * + * BOSH-Connections will have all stanzas wrapped in a <body> tag. See + * <Strophe.Bosh.strip> if you want to strip this tag. + * + * Parameters: + * (XMLElement) elem - The XMLdata sent by the connection. + */ + + /* jshint unused:false */ + xmlOutput: function xmlOutput(elem) { + return; + }, + + /* jshint unused:true */ + + /** Function: rawInput + * User overrideable function that receives raw data coming into the + * connection. + * + * The default function does nothing. User code can override this with + * > Strophe.Connection.rawInput = function (data) { + * > (user code) + * > }; + * + * Parameters: + * (String) data - The data received by the connection. + */ + + /* jshint unused:false */ + rawInput: function rawInput(data) { + return; + }, + + /* jshint unused:true */ + + /** Function: rawOutput + * User overrideable function that receives raw data sent to the + * connection. + * + * The default function does nothing. User code can override this with + * > Strophe.Connection.rawOutput = function (data) { + * > (user code) + * > }; + * + * Parameters: + * (String) data - The data sent by the connection. + */ + + /* jshint unused:false */ + rawOutput: function rawOutput(data) { + return; + }, + + /* jshint unused:true */ + + /** Function: nextValidRid + * User overrideable function that receives the new valid rid. + * + * The default function does nothing. User code can override this with + * > Strophe.Connection.nextValidRid = function (rid) { + * > (user code) + * > }; + * + * Parameters: + * (Number) rid - The next valid rid + */ + + /* jshint unused:false */ + nextValidRid: function nextValidRid(rid) { + return; + }, + + /* jshint unused:true */ + + /** Function: send + * Send a stanza. + * + * This function is called to push data onto the send queue to + * go out over the wire. Whenever a request is sent to the BOSH + * server, all pending data is sent and the queue is flushed. + * + * Parameters: + * (XMLElement | + * [XMLElement] | + * Strophe.Builder) elem - The stanza to send. + */ + send: function send(elem) { + if (elem === null) { + return; + } + + if (typeof elem.sort === "function") { + for (var i = 0; i < elem.length; i++) { + this._queueData(elem[i]); + } + } else if (typeof elem.tree === "function") { + this._queueData(elem.tree()); + } else { + this._queueData(elem); + } + + this._proto._send(); + }, + + /** Function: flush + * Immediately send any pending outgoing data. + * + * Normally send() queues outgoing data until the next idle period + * (100ms), which optimizes network use in the common cases when + * several send()s are called in succession. flush() can be used to + * immediately send all pending data. + */ + flush: function flush() { + // cancel the pending idle period and run the idle function + // immediately + clearTimeout(this._idleTimeout); + + this._onIdle(); + }, + + /** Function: sendPresence + * Helper function to send presence stanzas. The main benefit is for + * sending presence stanzas for which you expect a responding presence + * stanza with the same id (for example when leaving a chat room). + * + * Parameters: + * (XMLElement) elem - The stanza to send. + * (Function) callback - The callback function for a successful request. + * (Function) errback - The callback function for a failed or timed + * out request. On timeout, the stanza will be null. + * (Integer) timeout - The time specified in milliseconds for a + * timeout to occur. + * + * Returns: + * The id used to send the presence. + */ + sendPresence: function sendPresence(elem, callback, errback, timeout) { + var _this3 = this; + + var timeoutHandler = null; + + if (typeof elem.tree === "function") { + elem = elem.tree(); + } + + var id = elem.getAttribute('id'); + + if (!id) { + // inject id if not found + id = this.getUniqueId("sendPresence"); + elem.setAttribute("id", id); + } + + if (typeof callback === "function" || typeof errback === "function") { + var handler = this.addHandler(function (stanza) { + // remove timeout handler if there is one + if (timeoutHandler) { + _this3.deleteTimedHandler(timeoutHandler); + } + + if (stanza.getAttribute('type') === 'error') { + if (errback) { + errback(stanza); + } + } else if (callback) { + callback(stanza); + } + }, null, 'presence', null, id); // if timeout specified, set up a timeout handler. + + if (timeout) { + timeoutHandler = this.addTimedHandler(timeout, function () { + // get rid of normal handler + _this3.deleteHandler(handler); // call errback on timeout with null stanza + + + if (errback) { + errback(null); + } + + return false; + }); + } + } + + this.send(elem); + return id; + }, + + /** Function: sendIQ + * Helper function to send IQ stanzas. + * + * Parameters: + * (XMLElement) elem - The stanza to send. + * (Function) callback - The callback function for a successful request. + * (Function) errback - The callback function for a failed or timed + * out request. On timeout, the stanza will be null. + * (Integer) timeout - The time specified in milliseconds for a + * timeout to occur. + * + * Returns: + * The id used to send the IQ. + */ + sendIQ: function sendIQ(elem, callback, errback, timeout) { + var _this4 = this; + + var timeoutHandler = null; + + if (typeof elem.tree === "function") { + elem = elem.tree(); + } + + var id = elem.getAttribute('id'); + + if (!id) { + // inject id if not found + id = this.getUniqueId("sendIQ"); + elem.setAttribute("id", id); + } + + if (typeof callback === "function" || typeof errback === "function") { + var handler = this.addHandler(function (stanza) { + // remove timeout handler if there is one + if (timeoutHandler) { + _this4.deleteTimedHandler(timeoutHandler); + } + + var iqtype = stanza.getAttribute('type'); + + if (iqtype === 'result') { + if (callback) { + callback(stanza); + } + } else if (iqtype === 'error') { + if (errback) { + errback(stanza); + } + } else { + var error = new Error("Got bad IQ type of ".concat(iqtype)); + error.name = "StropheError"; + throw error; + } + }, null, 'iq', ['error', 'result'], id); // if timeout specified, set up a timeout handler. + + if (timeout) { + timeoutHandler = this.addTimedHandler(timeout, function () { + // get rid of normal handler + _this4.deleteHandler(handler); // call errback on timeout with null stanza + + + if (errback) { + errback(null); + } + + return false; + }); + } + } + + this.send(elem); + return id; + }, + + /** PrivateFunction: _queueData + * Queue outgoing data for later sending. Also ensures that the data + * is a DOMElement. + */ + _queueData: function _queueData(element) { + if (element === null || !element.tagName || !element.childNodes) { + var error = new Error("Cannot queue non-DOMElement."); + error.name = "StropheError"; + throw error; + } + + this._data.push(element); + }, + + /** PrivateFunction: _sendRestart + * Send an xmpp:restart stanza. + */ + _sendRestart: function _sendRestart() { + var _this5 = this; + + this._data.push("restart"); + + this._proto._sendRestart(); + + this._idleTimeout = setTimeout(function () { + return _this5._onIdle(); + }, 100); + }, + + /** Function: addTimedHandler + * Add a timed handler to the connection. + * + * This function adds a timed handler. The provided handler will + * be called every period milliseconds until it returns false, + * the connection is terminated, or the handler is removed. Handlers + * that wish to continue being invoked should return true. + * + * Because of method binding it is necessary to save the result of + * this function if you wish to remove a handler with + * deleteTimedHandler(). + * + * Note that user handlers are not active until authentication is + * successful. + * + * Parameters: + * (Integer) period - The period of the handler. + * (Function) handler - The callback function. + * + * Returns: + * A reference to the handler that can be used to remove it. + */ + addTimedHandler: function addTimedHandler(period, handler) { + var thand = new Strophe.TimedHandler(period, handler); + this.addTimeds.push(thand); + return thand; + }, + + /** Function: deleteTimedHandler + * Delete a timed handler for a connection. + * + * This function removes a timed handler from the connection. The + * handRef parameter is *not* the function passed to addTimedHandler(), + * but is the reference returned from addTimedHandler(). + * + * Parameters: + * (Strophe.TimedHandler) handRef - The handler reference. + */ + deleteTimedHandler: function deleteTimedHandler(handRef) { + // this must be done in the Idle loop so that we don't change + // the handlers during iteration + this.removeTimeds.push(handRef); + }, + + /** Function: addHandler + * Add a stanza handler for the connection. + * + * This function adds a stanza handler to the connection. The + * handler callback will be called for any stanza that matches + * the parameters. Note that if multiple parameters are supplied, + * they must all match for the handler to be invoked. + * + * The handler will receive the stanza that triggered it as its argument. + * *The handler should return true if it is to be invoked again; + * returning false will remove the handler after it returns.* + * + * As a convenience, the ns parameters applies to the top level element + * and also any of its immediate children. This is primarily to make + * matching /iq/query elements easy. + * + * Options + * ~~~~~~~ + * With the options argument, you can specify boolean flags that affect how + * matches are being done. + * + * Currently two flags exist: + * + * - matchBareFromJid: + * When set to true, the from parameter and the + * from attribute on the stanza will be matched as bare JIDs instead + * of full JIDs. To use this, pass {matchBareFromJid: true} as the + * value of options. The default value for matchBareFromJid is false. + * + * - ignoreNamespaceFragment: + * When set to true, a fragment specified on the stanza's namespace + * URL will be ignored when it's matched with the one configured for + * the handler. + * + * This means that if you register like this: + * > connection.addHandler( + * > handler, + * > 'http://jabber.org/protocol/muc', + * > null, null, null, null, + * > {'ignoreNamespaceFragment': true} + * > ); + * + * Then a stanza with XML namespace of + * 'http://jabber.org/protocol/muc#user' will also be matched. If + * 'ignoreNamespaceFragment' is false, then only stanzas with + * 'http://jabber.org/protocol/muc' will be matched. + * + * Deleting the handler + * ~~~~~~~~~~~~~~~~~~~~ + * The return value should be saved if you wish to remove the handler + * with deleteHandler(). + * + * Parameters: + * (Function) handler - The user callback. + * (String) ns - The namespace to match. + * (String) name - The stanza name to match. + * (String|Array) type - The stanza type (or types if an array) to match. + * (String) id - The stanza id attribute to match. + * (String) from - The stanza from attribute to match. + * (String) options - The handler options + * + * Returns: + * A reference to the handler that can be used to remove it. + */ + addHandler: function addHandler(handler, ns, name, type, id, from, options) { + var hand = new Strophe.Handler(handler, ns, name, type, id, from, options); + this.addHandlers.push(hand); + return hand; + }, + + /** Function: deleteHandler + * Delete a stanza handler for a connection. + * + * This function removes a stanza handler from the connection. The + * handRef parameter is *not* the function passed to addHandler(), + * but is the reference returned from addHandler(). + * + * Parameters: + * (Strophe.Handler) handRef - The handler reference. + */ + deleteHandler: function deleteHandler(handRef) { + // this must be done in the Idle loop so that we don't change + // the handlers during iteration + this.removeHandlers.push(handRef); // If a handler is being deleted while it is being added, + // prevent it from getting added + + var i = this.addHandlers.indexOf(handRef); + + if (i >= 0) { + this.addHandlers.splice(i, 1); + } + }, + + /** Function: registerSASLMechanisms + * + * Register the SASL mechanisms which will be supported by this instance of + * Strophe.Connection (i.e. which this XMPP client will support). + * + * Parameters: + * (Array) mechanisms - Array of objects with Strophe.SASLMechanism prototypes + * + */ + registerSASLMechanisms: function registerSASLMechanisms(mechanisms) { + this.mechanisms = {}; + mechanisms = mechanisms || [Strophe.SASLAnonymous, Strophe.SASLExternal, Strophe.SASLMD5, Strophe.SASLOAuthBearer, Strophe.SASLXOAuth2, Strophe.SASLPlain, Strophe.SASLSHA1]; + mechanisms.forEach(this.registerSASLMechanism.bind(this)); + }, + + /** Function: registerSASLMechanism + * + * Register a single SASL mechanism, to be supported by this client. + * + * Parameters: + * (Object) mechanism - Object with a Strophe.SASLMechanism prototype + * + */ + registerSASLMechanism: function registerSASLMechanism(mechanism) { + this.mechanisms[mechanism.prototype.name] = mechanism; + }, + + /** Function: disconnect + * Start the graceful disconnection process. + * + * This function starts the disconnection process. This process starts + * by sending unavailable presence and sending BOSH body of type + * terminate. A timeout handler makes sure that disconnection happens + * even if the BOSH server does not respond. + * If the Connection object isn't connected, at least tries to abort all pending requests + * so the connection object won't generate successful requests (which were already opened). + * + * The user supplied connection callback will be notified of the + * progress as this process happens. + * + * Parameters: + * (String) reason - The reason the disconnect is occuring. + */ + disconnect: function disconnect(reason) { + this._changeConnectStatus(Strophe.Status.DISCONNECTING, reason); + + Strophe.info("Disconnect was called because: " + reason); + + if (this.connected) { + var pres = false; + this.disconnecting = true; + + if (this.authenticated) { + pres = $pres({ + 'xmlns': Strophe.NS.CLIENT, + 'type': 'unavailable' + }); + } // setup timeout handler + + + this._disconnectTimeout = this._addSysTimedHandler(3000, this._onDisconnectTimeout.bind(this)); + + this._proto._disconnect(pres); + } else { + Strophe.info("Disconnect was called before Strophe connected to the server"); + + this._proto._abortAllRequests(); + + this._doDisconnect(); + } + }, + + /** PrivateFunction: _changeConnectStatus + * _Private_ helper function that makes sure plugins and the user's + * callback are notified of connection status changes. + * + * Parameters: + * (Integer) status - the new connection status, one of the values + * in Strophe.Status + * (String) condition - the error condition or null + * (XMLElement) elem - The triggering stanza. + */ + _changeConnectStatus: function _changeConnectStatus(status, condition, elem) { + // notify all plugins listening for status changes + for (var k in Strophe._connectionPlugins) { + if (Object.prototype.hasOwnProperty.call(Strophe._connectionPlugins, k)) { + var plugin = this[k]; + + if (plugin.statusChanged) { + try { + plugin.statusChanged(status, condition); + } catch (err) { + Strophe.error("".concat(k, " plugin caused an exception changing status: ").concat(err)); + } + } + } + } // notify the user's callback + + + if (this.connect_callback) { + try { + this.connect_callback(status, condition, elem); + } catch (e) { + Strophe._handleError(e); + + Strophe.error("User connection callback caused an exception: ".concat(e)); + } + } + }, + + /** PrivateFunction: _doDisconnect + * _Private_ function to disconnect. + * + * This is the last piece of the disconnection logic. This resets the + * connection and alerts the user's connection callback. + */ + _doDisconnect: function _doDisconnect(condition) { + if (typeof this._idleTimeout === "number") { + clearTimeout(this._idleTimeout); + } // Cancel Disconnect Timeout + + + if (this._disconnectTimeout !== null) { + this.deleteTimedHandler(this._disconnectTimeout); + this._disconnectTimeout = null; + } + + Strophe.info("_doDisconnect was called"); + + this._proto._doDisconnect(); + + this.authenticated = false; + this.disconnecting = false; + this.restored = false; // delete handlers + + this.handlers = []; + this.timedHandlers = []; + this.removeTimeds = []; + this.removeHandlers = []; + this.addTimeds = []; + this.addHandlers = []; // tell the parent we disconnected + + this._changeConnectStatus(Strophe.Status.DISCONNECTED, condition); + + this.connected = false; + }, + + /** PrivateFunction: _dataRecv + * _Private_ handler to processes incoming data from the the connection. + * + * Except for _connect_cb handling the initial connection request, + * this function handles the incoming data for all requests. This + * function also fires stanza handlers that match each incoming + * stanza. + * + * Parameters: + * (Strophe.Request) req - The request that has data ready. + * (string) req - The stanza a raw string (optiona). + */ + _dataRecv: function _dataRecv(req, raw) { + var _this6 = this; + + Strophe.info("_dataRecv called"); + + var elem = this._proto._reqToData(req); + + if (elem === null) { + return; + } + + if (this.xmlInput !== Strophe.Connection.prototype.xmlInput) { + if (elem.nodeName === this._proto.strip && elem.childNodes.length) { + this.xmlInput(elem.childNodes[0]); + } else { + this.xmlInput(elem); + } + } + + if (this.rawInput !== Strophe.Connection.prototype.rawInput) { + if (raw) { + this.rawInput(raw); + } else { + this.rawInput(Strophe.serialize(elem)); + } + } // remove handlers scheduled for deletion + + + while (this.removeHandlers.length > 0) { + var hand = this.removeHandlers.pop(); + var i = this.handlers.indexOf(hand); + + if (i >= 0) { + this.handlers.splice(i, 1); + } + } // add handlers scheduled for addition + + + while (this.addHandlers.length > 0) { + this.handlers.push(this.addHandlers.pop()); + } // handle graceful disconnect + + + if (this.disconnecting && this._proto._emptyQueue()) { + this._doDisconnect(); + + return; + } + + var type = elem.getAttribute("type"); + + if (type !== null && type === "terminate") { + // Don't process stanzas that come in after disconnect + if (this.disconnecting) { + return; + } // an error occurred + + + var cond = elem.getAttribute("condition"); + var conflict = elem.getElementsByTagName("conflict"); + + if (cond !== null) { + if (cond === "remote-stream-error" && conflict.length > 0) { + cond = "conflict"; + } + + this._changeConnectStatus(Strophe.Status.CONNFAIL, cond); + } else { + this._changeConnectStatus(Strophe.Status.CONNFAIL, Strophe.ErrorCondition.UNKOWN_REASON); + } + + this._doDisconnect(cond); + + return; + } // send each incoming stanza through the handler chain + + + Strophe.forEachChild(elem, null, function (child) { + // process handlers + var newList = _this6.handlers; + _this6.handlers = []; + + for (var _i5 = 0; _i5 < newList.length; _i5++) { + var _hand = newList[_i5]; // encapsulate 'handler.run' not to lose the whole handler list if + // one of the handlers throws an exception + + try { + if (_hand.isMatch(child) && (_this6.authenticated || !_hand.user)) { + if (_hand.run(child)) { + _this6.handlers.push(_hand); + } + } else { + _this6.handlers.push(_hand); + } + } catch (e) { + // if the handler throws an exception, we consider it as false + Strophe.warn('Removing Strophe handlers due to uncaught exception: ' + e.message); + } + } + }); + }, + + /** Attribute: mechanisms + * SASL Mechanisms available for Connection. + */ + mechanisms: {}, + + /** PrivateFunction: _connect_cb + * _Private_ handler for initial connection request. + * + * This handler is used to process the initial connection request + * response from the BOSH server. It is used to set up authentication + * handlers and start the authentication process. + * + * SASL authentication will be attempted if available, otherwise + * the code will fall back to legacy authentication. + * + * Parameters: + * (Strophe.Request) req - The current request. + * (Function) _callback - low level (xmpp) connect callback function. + * Useful for plugins with their own xmpp connect callback (when they + * want to do something special). + */ + _connect_cb: function _connect_cb(req, _callback, raw) { + Strophe.info("_connect_cb was called"); + this.connected = true; + var bodyWrap; + + try { + bodyWrap = this._proto._reqToData(req); + } catch (e) { + if (e.name !== Strophe.ErrorCondition.BAD_FORMAT) { + throw e; + } + + this._changeConnectStatus(Strophe.Status.CONNFAIL, Strophe.ErrorCondition.BAD_FORMAT); + + this._doDisconnect(Strophe.ErrorCondition.BAD_FORMAT); + } + + if (!bodyWrap) { + return; + } + + if (this.xmlInput !== Strophe.Connection.prototype.xmlInput) { + if (bodyWrap.nodeName === this._proto.strip && bodyWrap.childNodes.length) { + this.xmlInput(bodyWrap.childNodes[0]); + } else { + this.xmlInput(bodyWrap); + } + } + + if (this.rawInput !== Strophe.Connection.prototype.rawInput) { + if (raw) { + this.rawInput(raw); + } else { + this.rawInput(Strophe.serialize(bodyWrap)); + } + } + + var conncheck = this._proto._connect_cb(bodyWrap); + + if (conncheck === Strophe.Status.CONNFAIL) { + return; + } // Check for the stream:features tag + + + var hasFeatures; + + if (bodyWrap.getElementsByTagNameNS) { + hasFeatures = bodyWrap.getElementsByTagNameNS(Strophe.NS.STREAM, "features").length > 0; + } else { + hasFeatures = bodyWrap.getElementsByTagName("stream:features").length > 0 || bodyWrap.getElementsByTagName("features").length > 0; + } + + if (!hasFeatures) { + this._proto._no_auth_received(_callback); + + return; + } + + var matched = []; + var mechanisms = bodyWrap.getElementsByTagName("mechanism"); + + if (mechanisms.length > 0) { + for (var i = 0; i < mechanisms.length; i++) { + var mech = Strophe.getText(mechanisms[i]); + if (this.mechanisms[mech]) matched.push(this.mechanisms[mech]); + } + } + + if (matched.length === 0) { + if (bodyWrap.getElementsByTagName("auth").length === 0) { + // There are no matching SASL mechanisms and also no legacy + // auth available. + this._proto._no_auth_received(_callback); + + return; + } + } + + if (this.do_authentication !== false) { + this.authenticate(matched); + } + }, + + /** Function: sortMechanismsByPriority + * + * Sorts an array of objects with prototype SASLMechanism according to + * their priorities. + * + * Parameters: + * (Array) mechanisms - Array of SASL mechanisms. + * + */ + sortMechanismsByPriority: function sortMechanismsByPriority(mechanisms) { + // Sorting mechanisms according to priority. + for (var i = 0; i < mechanisms.length - 1; ++i) { + var higher = i; + + for (var j = i + 1; j < mechanisms.length; ++j) { + if (mechanisms[j].prototype.priority > mechanisms[higher].prototype.priority) { + higher = j; + } + } + + if (higher !== i) { + var swap = mechanisms[i]; + mechanisms[i] = mechanisms[higher]; + mechanisms[higher] = swap; + } + } + + return mechanisms; + }, + + /** PrivateFunction: _attemptSASLAuth + * + * Iterate through an array of SASL mechanisms and attempt authentication + * with the highest priority (enabled) mechanism. + * + * Parameters: + * (Array) mechanisms - Array of SASL mechanisms. + * + * Returns: + * (Boolean) mechanism_found - true or false, depending on whether a + * valid SASL mechanism was found with which authentication could be + * started. + */ + _attemptSASLAuth: function _attemptSASLAuth(mechanisms) { + mechanisms = this.sortMechanismsByPriority(mechanisms || []); + var mechanism_found = false; + + for (var i = 0; i < mechanisms.length; ++i) { + if (!mechanisms[i].prototype.test(this)) { + continue; + } + + this._sasl_success_handler = this._addSysHandler(this._sasl_success_cb.bind(this), null, "success", null, null); + this._sasl_failure_handler = this._addSysHandler(this._sasl_failure_cb.bind(this), null, "failure", null, null); + this._sasl_challenge_handler = this._addSysHandler(this._sasl_challenge_cb.bind(this), null, "challenge", null, null); + this._sasl_mechanism = new mechanisms[i](); + + this._sasl_mechanism.onStart(this); + + var request_auth_exchange = $build("auth", { + 'xmlns': Strophe.NS.SASL, + 'mechanism': this._sasl_mechanism.name + }); + + if (this._sasl_mechanism.isClientFirst) { + var response = this._sasl_mechanism.onChallenge(this, null); + + request_auth_exchange.t(btoa(response)); + } + + this.send(request_auth_exchange.tree()); + mechanism_found = true; + break; + } + + return mechanism_found; + }, + + /** PrivateFunction: _attemptLegacyAuth + * + * Attempt legacy (i.e. non-SASL) authentication. + * + */ + _attemptLegacyAuth: function _attemptLegacyAuth() { + if (Strophe.getNodeFromJid(this.jid) === null) { + // we don't have a node, which is required for non-anonymous + // client connections + this._changeConnectStatus(Strophe.Status.CONNFAIL, Strophe.ErrorCondition.MISSING_JID_NODE); + + this.disconnect(Strophe.ErrorCondition.MISSING_JID_NODE); + } else { + // Fall back to legacy authentication + this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null); + + this._addSysHandler(this._auth1_cb.bind(this), null, null, null, "_auth_1"); + + this.send($iq({ + 'type': "get", + 'to': this.domain, + 'id': "_auth_1" + }).c("query", { + xmlns: Strophe.NS.AUTH + }).c("username", {}).t(Strophe.getNodeFromJid(this.jid)).tree()); + } + }, + + /** Function: authenticate + * Set up authentication + * + * Continues the initial connection request by setting up authentication + * handlers and starting the authentication process. + * + * SASL authentication will be attempted if available, otherwise + * the code will fall back to legacy authentication. + * + * Parameters: + * (Array) matched - Array of SASL mechanisms supported. + * + */ + authenticate: function authenticate(matched) { + if (!this._attemptSASLAuth(matched)) { + this._attemptLegacyAuth(); + } + }, + + /** PrivateFunction: _sasl_challenge_cb + * _Private_ handler for the SASL challenge + * + */ + _sasl_challenge_cb: function _sasl_challenge_cb(elem) { + var challenge = atob(Strophe.getText(elem)); + + var response = this._sasl_mechanism.onChallenge(this, challenge); + + var stanza = $build('response', { + 'xmlns': Strophe.NS.SASL + }); + + if (response !== "") { + stanza.t(btoa(response)); + } + + this.send(stanza.tree()); + return true; + }, + + /** PrivateFunction: _auth1_cb + * _Private_ handler for legacy authentication. + * + * This handler is called in response to the initial <iq type='get'/> + * for legacy authentication. It builds an authentication <iq/> and + * sends it, creating a handler (calling back to _auth2_cb()) to + * handle the result + * + * Parameters: + * (XMLElement) elem - The stanza that triggered the callback. + * + * Returns: + * false to remove the handler. + */ + + /* jshint unused:false */ + _auth1_cb: function _auth1_cb(elem) { + // build plaintext auth iq + var iq = $iq({ + type: "set", + id: "_auth_2" + }).c('query', { + xmlns: Strophe.NS.AUTH + }).c('username', {}).t(Strophe.getNodeFromJid(this.jid)).up().c('password').t(this.pass); + + if (!Strophe.getResourceFromJid(this.jid)) { + // since the user has not supplied a resource, we pick + // a default one here. unlike other auth methods, the server + // cannot do this for us. + this.jid = Strophe.getBareJidFromJid(this.jid) + '/strophe'; + } + + iq.up().c('resource', {}).t(Strophe.getResourceFromJid(this.jid)); + + this._addSysHandler(this._auth2_cb.bind(this), null, null, null, "_auth_2"); + + this.send(iq.tree()); + return false; + }, + + /* jshint unused:true */ + + /** PrivateFunction: _sasl_success_cb + * _Private_ handler for succesful SASL authentication. + * + * Parameters: + * (XMLElement) elem - The matching stanza. + * + * Returns: + * false to remove the handler. + */ + _sasl_success_cb: function _sasl_success_cb(elem) { + var _this7 = this; + + if (this._sasl_data["server-signature"]) { + var serverSignature; + var success = atob(Strophe.getText(elem)); + var attribMatch = /([a-z]+)=([^,]+)(,|$)/; + var matches = success.match(attribMatch); + + if (matches[1] === "v") { + serverSignature = matches[2]; + } + + if (serverSignature !== this._sasl_data["server-signature"]) { + // remove old handlers + this.deleteHandler(this._sasl_failure_handler); + this._sasl_failure_handler = null; + + if (this._sasl_challenge_handler) { + this.deleteHandler(this._sasl_challenge_handler); + this._sasl_challenge_handler = null; + } + + this._sasl_data = {}; + return this._sasl_failure_cb(null); + } + } + + Strophe.info("SASL authentication succeeded."); + + if (this._sasl_mechanism) { + this._sasl_mechanism.onSuccess(); + } // remove old handlers + + + this.deleteHandler(this._sasl_failure_handler); + this._sasl_failure_handler = null; + + if (this._sasl_challenge_handler) { + this.deleteHandler(this._sasl_challenge_handler); + this._sasl_challenge_handler = null; + } + + var streamfeature_handlers = []; + + var wrapper = function wrapper(handlers, elem) { + while (handlers.length) { + _this7.deleteHandler(handlers.pop()); + } + + _this7._sasl_auth1_cb(elem); + + return false; + }; + + streamfeature_handlers.push(this._addSysHandler(function (elem) { + return wrapper(streamfeature_handlers, elem); + }, null, "stream:features", null, null)); + streamfeature_handlers.push(this._addSysHandler(function (elem) { + return wrapper(streamfeature_handlers, elem); + }, Strophe.NS.STREAM, "features", null, null)); // we must send an xmpp:restart now + + this._sendRestart(); + + return false; + }, + + /** PrivateFunction: _sasl_auth1_cb + * _Private_ handler to start stream binding. + * + * Parameters: + * (XMLElement) elem - The matching stanza. + * + * Returns: + * false to remove the handler. + */ + _sasl_auth1_cb: function _sasl_auth1_cb(elem) { + // save stream:features for future usage + this.features = elem; + + for (var i = 0; i < elem.childNodes.length; i++) { + var child = elem.childNodes[i]; + + if (child.nodeName === 'bind') { + this.do_bind = true; + } + + if (child.nodeName === 'session') { + this.do_session = true; + } + } + + if (!this.do_bind) { + this._changeConnectStatus(Strophe.Status.AUTHFAIL, null); + + return false; + } else { + this._addSysHandler(this._sasl_bind_cb.bind(this), null, null, null, "_bind_auth_2"); + + var resource = Strophe.getResourceFromJid(this.jid); + + if (resource) { + this.send($iq({ + type: "set", + id: "_bind_auth_2" + }).c('bind', { + xmlns: Strophe.NS.BIND + }).c('resource', {}).t(resource).tree()); + } else { + this.send($iq({ + type: "set", + id: "_bind_auth_2" + }).c('bind', { + xmlns: Strophe.NS.BIND + }).tree()); + } + } + + return false; + }, + + /** PrivateFunction: _sasl_bind_cb + * _Private_ handler for binding result and session start. + * + * Parameters: + * (XMLElement) elem - The matching stanza. + * + * Returns: + * false to remove the handler. + */ + _sasl_bind_cb: function _sasl_bind_cb(elem) { + if (elem.getAttribute("type") === "error") { + Strophe.info("SASL binding failed."); + var conflict = elem.getElementsByTagName("conflict"); + var condition; + + if (conflict.length > 0) { + condition = Strophe.ErrorCondition.CONFLICT; + } + + this._changeConnectStatus(Strophe.Status.AUTHFAIL, condition, elem); + + return false; + } // TODO - need to grab errors + + + var bind = elem.getElementsByTagName("bind"); + + if (bind.length > 0) { + var jidNode = bind[0].getElementsByTagName("jid"); + + if (jidNode.length > 0) { + this.jid = Strophe.getText(jidNode[0]); + + if (this.do_session) { + this._addSysHandler(this._sasl_session_cb.bind(this), null, null, null, "_session_auth_2"); + + this.send($iq({ + type: "set", + id: "_session_auth_2" + }).c('session', { + xmlns: Strophe.NS.SESSION + }).tree()); + } else { + this.authenticated = true; + + this._changeConnectStatus(Strophe.Status.CONNECTED, null); + } + } + } else { + Strophe.info("SASL binding failed."); + + this._changeConnectStatus(Strophe.Status.AUTHFAIL, null, elem); + + return false; + } + }, + + /** PrivateFunction: _sasl_session_cb + * _Private_ handler to finish successful SASL connection. + * + * This sets Connection.authenticated to true on success, which + * starts the processing of user handlers. + * + * Parameters: + * (XMLElement) elem - The matching stanza. + * + * Returns: + * false to remove the handler. + */ + _sasl_session_cb: function _sasl_session_cb(elem) { + if (elem.getAttribute("type") === "result") { + this.authenticated = true; + + this._changeConnectStatus(Strophe.Status.CONNECTED, null); + } else if (elem.getAttribute("type") === "error") { + Strophe.info("Session creation failed."); + + this._changeConnectStatus(Strophe.Status.AUTHFAIL, null, elem); + + return false; + } + + return false; + }, + + /** PrivateFunction: _sasl_failure_cb + * _Private_ handler for SASL authentication failure. + * + * Parameters: + * (XMLElement) elem - The matching stanza. + * + * Returns: + * false to remove the handler. + */ + + /* jshint unused:false */ + _sasl_failure_cb: function _sasl_failure_cb(elem) { + // delete unneeded handlers + if (this._sasl_success_handler) { + this.deleteHandler(this._sasl_success_handler); + this._sasl_success_handler = null; + } + + if (this._sasl_challenge_handler) { + this.deleteHandler(this._sasl_challenge_handler); + this._sasl_challenge_handler = null; + } + + if (this._sasl_mechanism) this._sasl_mechanism.onFailure(); + + this._changeConnectStatus(Strophe.Status.AUTHFAIL, null, elem); + + return false; + }, + + /* jshint unused:true */ + + /** PrivateFunction: _auth2_cb + * _Private_ handler to finish legacy authentication. + * + * This handler is called when the result from the jabber:iq:auth + * <iq/> stanza is returned. + * + * Parameters: + * (XMLElement) elem - The stanza that triggered the callback. + * + * Returns: + * false to remove the handler. + */ + _auth2_cb: function _auth2_cb(elem) { + if (elem.getAttribute("type") === "result") { + this.authenticated = true; + + this._changeConnectStatus(Strophe.Status.CONNECTED, null); + } else if (elem.getAttribute("type") === "error") { + this._changeConnectStatus(Strophe.Status.AUTHFAIL, null, elem); + + this.disconnect('authentication failed'); + } + + return false; + }, + + /** PrivateFunction: _addSysTimedHandler + * _Private_ function to add a system level timed handler. + * + * This function is used to add a Strophe.TimedHandler for the + * library code. System timed handlers are allowed to run before + * authentication is complete. + * + * Parameters: + * (Integer) period - The period of the handler. + * (Function) handler - The callback function. + */ + _addSysTimedHandler: function _addSysTimedHandler(period, handler) { + var thand = new Strophe.TimedHandler(period, handler); + thand.user = false; + this.addTimeds.push(thand); + return thand; + }, + + /** PrivateFunction: _addSysHandler + * _Private_ function to add a system level stanza handler. + * + * This function is used to add a Strophe.Handler for the + * library code. System stanza handlers are allowed to run before + * authentication is complete. + * + * Parameters: + * (Function) handler - The callback function. + * (String) ns - The namespace to match. + * (String) name - The stanza name to match. + * (String) type - The stanza type attribute to match. + * (String) id - The stanza id attribute to match. + */ + _addSysHandler: function _addSysHandler(handler, ns, name, type, id) { + var hand = new Strophe.Handler(handler, ns, name, type, id); + hand.user = false; + this.addHandlers.push(hand); + return hand; + }, + + /** PrivateFunction: _onDisconnectTimeout + * _Private_ timeout handler for handling non-graceful disconnection. + * + * If the graceful disconnect process does not complete within the + * time allotted, this handler finishes the disconnect anyway. + * + * Returns: + * false to remove the handler. + */ + _onDisconnectTimeout: function _onDisconnectTimeout() { + Strophe.info("_onDisconnectTimeout was called"); + + this._changeConnectStatus(Strophe.Status.CONNTIMEOUT, null); + + this._proto._onDisconnectTimeout(); // actually disconnect + + + this._doDisconnect(); + + return false; + }, + + /** PrivateFunction: _onIdle + * _Private_ handler to process events during idle cycle. + * + * This handler is called every 100ms to fire timed handlers that + * are ready and keep poll requests going. + */ + _onIdle: function _onIdle() { + var _this8 = this; + + // add timed handlers scheduled for addition + // NOTE: we add before remove in the case a timed handler is + // added and then deleted before the next _onIdle() call. + while (this.addTimeds.length > 0) { + this.timedHandlers.push(this.addTimeds.pop()); + } // remove timed handlers that have been scheduled for deletion + + + while (this.removeTimeds.length > 0) { + var thand = this.removeTimeds.pop(); + var i = this.timedHandlers.indexOf(thand); + + if (i >= 0) { + this.timedHandlers.splice(i, 1); + } + } // call ready timed handlers + + + var now = new Date().getTime(); + var newList = []; + + for (var _i6 = 0; _i6 < this.timedHandlers.length; _i6++) { + var _thand = this.timedHandlers[_i6]; + + if (this.authenticated || !_thand.user) { + var since = _thand.lastCalled + _thand.period; + + if (since - now <= 0) { + if (_thand.run()) { + newList.push(_thand); + } + } else { + newList.push(_thand); + } + } + } + + this.timedHandlers = newList; + clearTimeout(this._idleTimeout); + + this._proto._onIdle(); // reactivate the timer only if connected + + + if (this.connected) { + this._idleTimeout = setTimeout(function () { + return _this8._onIdle(); + }, 100); + } + } +}; +/** Class: Strophe.SASLMechanism + * + * encapsulates SASL authentication mechanisms. + * + * User code may override the priority for each mechanism or disable it completely. + * See <priority> for information about changing priority and <test> for informatian on + * how to disable a mechanism. + * + * By default, all mechanisms are enabled and the priorities are + * + * OAUTHBEARER - 60 + * SCRAM-SHA1 - 50 + * DIGEST-MD5 - 40 + * PLAIN - 30 + * ANONYMOUS - 20 + * EXTERNAL - 10 + * + * See: Strophe.Connection.addSupportedSASLMechanisms + */ + +/** + * PrivateConstructor: Strophe.SASLMechanism + * SASL auth mechanism abstraction. + * + * Parameters: + * (String) name - SASL Mechanism name. + * (Boolean) isClientFirst - If client should send response first without challenge. + * (Number) priority - Priority. + * + * Returns: + * A new Strophe.SASLMechanism object. + */ + +Strophe.SASLMechanism = function (name, isClientFirst, priority) { + /** PrivateVariable: name + * Mechanism name. + */ + this.name = name; + /** PrivateVariable: isClientFirst + * If client sends response without initial server challenge. + */ + + this.isClientFirst = isClientFirst; + /** Variable: priority + * Determines which <SASLMechanism> is chosen for authentication (Higher is better). + * Users may override this to prioritize mechanisms differently. + * + * In the default configuration the priorities are + * + * SCRAM-SHA1 - 40 + * DIGEST-MD5 - 30 + * Plain - 20 + * + * Example: (This will cause Strophe to choose the mechanism that the server sent first) + * + * > Strophe.SASLMD5.priority = Strophe.SASLSHA1.priority; + * + * See <SASL mechanisms> for a list of available mechanisms. + * + */ + + this.priority = priority; +}; + +Strophe.SASLMechanism.prototype = { + /** + * Function: test + * Checks if mechanism able to run. + * To disable a mechanism, make this return false; + * + * To disable plain authentication run + * > Strophe.SASLPlain.test = function() { + * > return false; + * > } + * + * See <SASL mechanisms> for a list of available mechanisms. + * + * Parameters: + * (Strophe.Connection) connection - Target Connection. + * + * Returns: + * (Boolean) If mechanism was able to run. + */ + + /* jshint unused:false */ + test: function test(connection) { + return true; + }, + + /* jshint unused:true */ + + /** PrivateFunction: onStart + * Called before starting mechanism on some connection. + * + * Parameters: + * (Strophe.Connection) connection - Target Connection. + */ + onStart: function onStart(connection) { + this._connection = connection; + }, + + /** PrivateFunction: onChallenge + * Called by protocol implementation on incoming challenge. If client is + * first (isClientFirst === true) challenge will be null on the first call. + * + * Parameters: + * (Strophe.Connection) connection - Target Connection. + * (String) challenge - current challenge to handle. + * + * Returns: + * (String) Mechanism response. + */ + + /* jshint unused:false */ + onChallenge: function onChallenge(connection, challenge) { + throw new Error("You should implement challenge handling!"); + }, + + /* jshint unused:true */ + + /** PrivateFunction: onFailure + * Protocol informs mechanism implementation about SASL failure. + */ + onFailure: function onFailure() { + this._connection = null; + }, + + /** PrivateFunction: onSuccess + * Protocol informs mechanism implementation about SASL success. + */ + onSuccess: function onSuccess() { + this._connection = null; + } +}; +/** Constants: SASL mechanisms + * Available authentication mechanisms + * + * Strophe.SASLAnonymous - SASL ANONYMOUS authentication. + * Strophe.SASLPlain - SASL PLAIN authentication. + * Strophe.SASLMD5 - SASL DIGEST-MD5 authentication + * Strophe.SASLSHA1 - SASL SCRAM-SHA1 authentication + * Strophe.SASLOAuthBearer - SASL OAuth Bearer authentication + * Strophe.SASLExternal - SASL EXTERNAL authentication + * Strophe.SASLXOAuth2 - SASL X-OAuth2 authentication + */ +// Building SASL callbacks + +/** PrivateConstructor: SASLAnonymous + * SASL ANONYMOUS authentication. + */ + +Strophe.SASLAnonymous = function () {}; + +Strophe.SASLAnonymous.prototype = new Strophe.SASLMechanism("ANONYMOUS", false, 20); + +Strophe.SASLAnonymous.prototype.test = function (connection) { + return connection.authcid === null; +}; +/** PrivateConstructor: SASLPlain + * SASL PLAIN authentication. + */ + + +Strophe.SASLPlain = function () {}; + +Strophe.SASLPlain.prototype = new Strophe.SASLMechanism("PLAIN", true, 50); + +Strophe.SASLPlain.prototype.test = function (connection) { + return connection.authcid !== null; +}; + +Strophe.SASLPlain.prototype.onChallenge = function (connection) { + var auth_str = connection.authzid; + auth_str = auth_str + "\0"; + auth_str = auth_str + connection.authcid; + auth_str = auth_str + "\0"; + auth_str = auth_str + connection.pass; + return utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(auth_str); +}; +/** PrivateConstructor: SASLSHA1 + * SASL SCRAM SHA 1 authentication. + */ + + +Strophe.SASLSHA1 = function () {}; + +Strophe.SASLSHA1.prototype = new Strophe.SASLMechanism("SCRAM-SHA-1", true, 70); + +Strophe.SASLSHA1.prototype.test = function (connection) { + return connection.authcid !== null; +}; + +Strophe.SASLSHA1.prototype.onChallenge = function (connection, challenge, test_cnonce) { + var cnonce = test_cnonce || md5__WEBPACK_IMPORTED_MODULE_0__["default"].hexdigest(Math.random() * 1234567890); + var auth_str = "n=" + utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(connection.authcid); + auth_str += ",r="; + auth_str += cnonce; + connection._sasl_data.cnonce = cnonce; + connection._sasl_data["client-first-message-bare"] = auth_str; + auth_str = "n,," + auth_str; + + this.onChallenge = function (connection, challenge) { + var nonce, salt, iter, Hi, U, U_old, i, k; + var responseText = "c=biws,"; + var authMessage = "".concat(connection._sasl_data["client-first-message-bare"], ",").concat(challenge, ","); + var cnonce = connection._sasl_data.cnonce; + var attribMatch = /([a-z]+)=([^,]+)(,|$)/; + + while (challenge.match(attribMatch)) { + var matches = challenge.match(attribMatch); + challenge = challenge.replace(matches[0], ""); + + switch (matches[1]) { + case "r": + nonce = matches[2]; + break; + + case "s": + salt = matches[2]; + break; + + case "i": + iter = matches[2]; + break; + } + } + + if (nonce.substr(0, cnonce.length) !== cnonce) { + connection._sasl_data = {}; + return connection._sasl_failure_cb(); + } + + responseText += "r=" + nonce; + authMessage += responseText; + salt = atob(salt); + salt += "\x00\x00\x00\x01"; + var pass = utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(connection.pass); + Hi = U_old = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].core_hmac_sha1(pass, salt); + + for (i = 1; i < iter; i++) { + U = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].core_hmac_sha1(pass, sha1__WEBPACK_IMPORTED_MODULE_1__["default"].binb2str(U_old)); + + for (k = 0; k < 5; k++) { + Hi[k] ^= U[k]; + } + + U_old = U; + } + + Hi = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].binb2str(Hi); + var clientKey = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].core_hmac_sha1(Hi, "Client Key"); + var serverKey = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].str_hmac_sha1(Hi, "Server Key"); + var clientSignature = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].core_hmac_sha1(sha1__WEBPACK_IMPORTED_MODULE_1__["default"].str_sha1(sha1__WEBPACK_IMPORTED_MODULE_1__["default"].binb2str(clientKey)), authMessage); + connection._sasl_data["server-signature"] = sha1__WEBPACK_IMPORTED_MODULE_1__["default"].b64_hmac_sha1(serverKey, authMessage); + + for (k = 0; k < 5; k++) { + clientKey[k] ^= clientSignature[k]; + } + + responseText += ",p=" + btoa(sha1__WEBPACK_IMPORTED_MODULE_1__["default"].binb2str(clientKey)); + return responseText; + }; + + return auth_str; +}; +/** PrivateConstructor: SASLMD5 + * SASL DIGEST MD5 authentication. + */ + + +Strophe.SASLMD5 = function () {}; + +Strophe.SASLMD5.prototype = new Strophe.SASLMechanism("DIGEST-MD5", false, 60); + +Strophe.SASLMD5.prototype.test = function (connection) { + return connection.authcid !== null; +}; +/** PrivateFunction: _quote + * _Private_ utility function to backslash escape and quote strings. + * + * Parameters: + * (String) str - The string to be quoted. + * + * Returns: + * quoted string + */ + + +Strophe.SASLMD5.prototype._quote = function (str) { + return '"' + str.replace(/\\/g, "\\\\").replace(/"/g, '\\"') + '"'; //" end string workaround for emacs +}; + +Strophe.SASLMD5.prototype.onChallenge = function (connection, challenge, test_cnonce) { + var attribMatch = /([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/; + var cnonce = test_cnonce || md5__WEBPACK_IMPORTED_MODULE_0__["default"].hexdigest("" + Math.random() * 1234567890); + var realm = ""; + var host = null; + var nonce = ""; + var qop = ""; + + while (challenge.match(attribMatch)) { + var matches = challenge.match(attribMatch); + challenge = challenge.replace(matches[0], ""); + matches[2] = matches[2].replace(/^"(.+)"$/, "$1"); + + switch (matches[1]) { + case "realm": + realm = matches[2]; + break; + + case "nonce": + nonce = matches[2]; + break; + + case "qop": + qop = matches[2]; + break; + + case "host": + host = matches[2]; + break; + } + } + + var digest_uri = connection.servtype + "/" + connection.domain; + + if (host !== null) { + digest_uri = digest_uri + "/" + host; + } + + var cred = utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(connection.authcid + ":" + realm + ":" + this._connection.pass); + var A1 = md5__WEBPACK_IMPORTED_MODULE_0__["default"].hash(cred) + ":" + nonce + ":" + cnonce; + var A2 = 'AUTHENTICATE:' + digest_uri; + var responseText = ""; + responseText += 'charset=utf-8,'; + responseText += 'username=' + this._quote(utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(connection.authcid)) + ','; + responseText += 'realm=' + this._quote(realm) + ','; + responseText += 'nonce=' + this._quote(nonce) + ','; + responseText += 'nc=00000001,'; + responseText += 'cnonce=' + this._quote(cnonce) + ','; + responseText += 'digest-uri=' + this._quote(digest_uri) + ','; + responseText += 'response=' + md5__WEBPACK_IMPORTED_MODULE_0__["default"].hexdigest(md5__WEBPACK_IMPORTED_MODULE_0__["default"].hexdigest(A1) + ":" + nonce + ":00000001:" + cnonce + ":auth:" + md5__WEBPACK_IMPORTED_MODULE_0__["default"].hexdigest(A2)) + ","; + responseText += 'qop=auth'; + + this.onChallenge = function () { + return ""; + }; + + return responseText; +}; +/** PrivateConstructor: SASLOAuthBearer + * SASL OAuth Bearer authentication. + */ + + +Strophe.SASLOAuthBearer = function () {}; + +Strophe.SASLOAuthBearer.prototype = new Strophe.SASLMechanism("OAUTHBEARER", true, 40); + +Strophe.SASLOAuthBearer.prototype.test = function (connection) { + return connection.pass !== null; +}; + +Strophe.SASLOAuthBearer.prototype.onChallenge = function (connection) { + var auth_str = 'n,'; + + if (connection.authcid !== null) { + auth_str = auth_str + 'a=' + connection.authzid; + } + + auth_str = auth_str + ','; + auth_str = auth_str + "\x01"; + auth_str = auth_str + 'auth=Bearer '; + auth_str = auth_str + connection.pass; + auth_str = auth_str + "\x01"; + auth_str = auth_str + "\x01"; + return utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(auth_str); +}; +/** PrivateConstructor: SASLExternal + * SASL EXTERNAL authentication. + * + * The EXTERNAL mechanism allows a client to request the server to use + * credentials established by means external to the mechanism to + * authenticate the client. The external means may be, for instance, + * TLS services. + */ + + +Strophe.SASLExternal = function () {}; + +Strophe.SASLExternal.prototype = new Strophe.SASLMechanism("EXTERNAL", true, 10); + +Strophe.SASLExternal.prototype.onChallenge = function (connection) { + /** According to XEP-178, an authzid SHOULD NOT be presented when the + * authcid contained or implied in the client certificate is the JID (i.e. + * authzid) with which the user wants to log in as. + * + * To NOT send the authzid, the user should therefore set the authcid equal + * to the JID when instantiating a new Strophe.Connection object. + */ + return connection.authcid === connection.authzid ? '' : connection.authzid; +}; +/** PrivateConstructor: SASLXOAuth2 + * SASL X-OAuth2 authentication. + */ + + +Strophe.SASLXOAuth2 = function () {}; + +Strophe.SASLXOAuth2.prototype = new Strophe.SASLMechanism("X-OAUTH2", true, 30); + +Strophe.SASLXOAuth2.prototype.test = function (connection) { + return connection.pass !== null; +}; + +Strophe.SASLXOAuth2.prototype.onChallenge = function (connection) { + var auth_str = "\0"; + + if (connection.authcid !== null) { + auth_str = auth_str + connection.authzid; + } + + auth_str = auth_str + "\0"; + auth_str = auth_str + connection.pass; + return utils__WEBPACK_IMPORTED_MODULE_2__["default"].utf16to8(auth_str); +}; + + +/* harmony default export */ __webpack_exports__["default"] = ({ + 'Strophe': Strophe, + '$build': $build, + '$iq': $iq, + '$msg': $msg, + '$pres': $pres, + 'SHA1': sha1__WEBPACK_IMPORTED_MODULE_1__["default"], + 'MD5': md5__WEBPACK_IMPORTED_MODULE_0__["default"], + 'b64_hmac_sha1': sha1__WEBPACK_IMPORTED_MODULE_1__["default"].b64_hmac_sha1, + 'b64_sha1': sha1__WEBPACK_IMPORTED_MODULE_1__["default"].b64_sha1, + 'str_hmac_sha1': sha1__WEBPACK_IMPORTED_MODULE_1__["default"].str_hmac_sha1, + 'str_sha1': sha1__WEBPACK_IMPORTED_MODULE_1__["default"].str_sha1 +}); + +/***/ }), + +/***/ "./src/md5.js": +/*!********************!*\ + !*** ./src/md5.js ***! + \********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MD5; }); +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* + * Everything that isn't used by Strophe has been stripped here! + */ + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +var safe_add = function safe_add(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xFFFF; +}; +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +var bit_rol = function bit_rol(num, cnt) { + return num << cnt | num >>> 32 - cnt; +}; +/* + * Convert a string to an array of little-endian words + */ + + +var str2binl = function str2binl(str) { + var bin = []; + + for (var i = 0; i < str.length * 8; i += 8) { + bin[i >> 5] |= (str.charCodeAt(i / 8) & 255) << i % 32; + } + + return bin; +}; +/* + * Convert an array of little-endian words to a string + */ + + +var binl2str = function binl2str(bin) { + var str = ""; + + for (var i = 0; i < bin.length * 32; i += 8) { + str += String.fromCharCode(bin[i >> 5] >>> i % 32 & 255); + } + + return str; +}; +/* + * Convert an array of little-endian words to a hex string. + */ + + +var binl2hex = function binl2hex(binarray) { + var hex_tab = "0123456789abcdef"; + var str = ""; + + for (var i = 0; i < binarray.length * 4; i++) { + str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 0xF) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 0xF); + } + + return str; +}; +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +var md5_cmn = function md5_cmn(q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); +}; + +var md5_ff = function md5_ff(a, b, c, d, x, s, t) { + return md5_cmn(b & c | ~b & d, a, b, x, s, t); +}; + +var md5_gg = function md5_gg(a, b, c, d, x, s, t) { + return md5_cmn(b & d | c & ~d, a, b, x, s, t); +}; + +var md5_hh = function md5_hh(a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +}; + +var md5_ii = function md5_ii(a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | ~d), a, b, x, s, t); +}; +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ + + +var core_md5 = function core_md5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[(len + 64 >>> 9 << 4) + 14] = len; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + var olda, oldb, oldc, oldd; + + for (var i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + + return [a, b, c, d]; +}; +/* + * These are the functions you'll usually want to call. + * They take string arguments and return either hex or base-64 encoded + * strings. + */ + + +var MD5 = { + hexdigest: function hexdigest(s) { + return binl2hex(core_md5(str2binl(s), s.length * 8)); + }, + hash: function hash(s) { + return binl2str(core_md5(str2binl(s), s.length * 8)); + } +}; + + +/***/ }), + +/***/ "./src/sha1.js": +/*!*********************!*\ + !*** ./src/sha1.js ***! + \*********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return SHA1; }); +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +/* jshint undef: true, unused: true:, noarg: true, latedef: false */ + +/* global define */ + +/* Some functions and variables have been stripped for use with Strophe */ + +/* + * Calculate the SHA-1 of an array of big-endian words, and a bit length + */ +function core_sha1(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << 24 - len % 32; + x[(len + 64 >> 9 << 4) + 15] = len; + var w = new Array(80); + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + var e = -1009589776; + var i, j, t, olda, oldb, oldc, oldd, olde; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + olde = e; + + for (j = 0; j < 80; j++) { + if (j < 16) { + w[j] = x[i + j]; + } else { + w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1); + } + + t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j))); + e = d; + d = c; + c = rol(b, 30); + b = a; + a = t; + } + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + e = safe_add(e, olde); + } + + return [a, b, c, d, e]; +} +/* + * Perform the appropriate triplet combination function for the current + * iteration + */ + + +function sha1_ft(t, b, c, d) { + if (t < 20) { + return b & c | ~b & d; + } + + if (t < 40) { + return b ^ c ^ d; + } + + if (t < 60) { + return b & c | b & d | c & d; + } + + return b ^ c ^ d; +} +/* + * Determine the appropriate additive constant for the current iteration + */ + + +function sha1_kt(t) { + return t < 20 ? 1518500249 : t < 40 ? 1859775393 : t < 60 ? -1894007588 : -899497514; +} +/* + * Calculate the HMAC-SHA1 of a key and some data + */ + + +function core_hmac_sha1(key, data) { + var bkey = str2binb(key); + + if (bkey.length > 16) { + bkey = core_sha1(bkey, key.length * 8); + } + + var ipad = new Array(16), + opad = new Array(16); + + for (var i = 0; i < 16; i++) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * 8); + return core_sha1(opad.concat(hash), 512 + 160); +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safe_add(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xFFFF; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function rol(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * Convert an 8-bit or 16-bit string to an array of big-endian words + * In 8-bit function, characters >255 have their hi-byte silently ignored. + */ + + +function str2binb(str) { + var bin = []; + var mask = 255; + + for (var i = 0; i < str.length * 8; i += 8) { + bin[i >> 5] |= (str.charCodeAt(i / 8) & mask) << 24 - i % 32; + } + + return bin; +} +/* + * Convert an array of big-endian words to a base-64 string + */ + + +function binb2b64(binarray) { + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var str = ""; + var triplet, j; + + for (var i = 0; i < binarray.length * 4; i += 3) { + triplet = (binarray[i >> 2] >> 8 * (3 - i % 4) & 0xFF) << 16 | (binarray[i + 1 >> 2] >> 8 * (3 - (i + 1) % 4) & 0xFF) << 8 | binarray[i + 2 >> 2] >> 8 * (3 - (i + 2) % 4) & 0xFF; + + for (j = 0; j < 4; j++) { + if (i * 8 + j * 6 > binarray.length * 32) { + str += "="; + } else { + str += tab.charAt(triplet >> 6 * (3 - j) & 0x3F); + } + } + } + + return str; +} +/* + * Convert an array of big-endian words to a string + */ + + +function binb2str(bin) { + var str = ""; + var mask = 255; + + for (var i = 0; i < bin.length * 32; i += 8) { + str += String.fromCharCode(bin[i >> 5] >>> 24 - i % 32 & mask); + } + + return str; +} +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ + + +var SHA1 = { + b64_hmac_sha1: function b64_hmac_sha1(key, data) { + return binb2b64(core_hmac_sha1(key, data)); + }, + b64_sha1: function b64_sha1(s) { + return binb2b64(core_sha1(str2binb(s), s.length * 8)); + }, + binb2str: binb2str, + core_hmac_sha1: core_hmac_sha1, + str_hmac_sha1: function str_hmac_sha1(key, data) { + return binb2str(core_hmac_sha1(key, data)); + }, + str_sha1: function str_sha1(s) { + return binb2str(core_sha1(str2binb(s), s.length * 8)); + } +}; + + +/***/ }), + +/***/ "./src/strophe.js": +/*!************************!*\ + !*** ./src/strophe.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core */ "./src/core.js"); +/* harmony import */ var bosh__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bosh */ "./src/bosh.js"); +/* harmony import */ var websocket__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! websocket */ "./src/websocket.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "default", function() { return core__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/*global global*/ + + + +global.Strophe = core__WEBPACK_IMPORTED_MODULE_0__["default"].Strophe; +global.$build = core__WEBPACK_IMPORTED_MODULE_0__["default"].$build; +global.$iq = core__WEBPACK_IMPORTED_MODULE_0__["default"].$iq; +global.$msg = core__WEBPACK_IMPORTED_MODULE_0__["default"].$msg; +global.$pres = core__WEBPACK_IMPORTED_MODULE_0__["default"].$pres; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./src/utils.js": +/*!**********************!*\ + !*** ./src/utils.js ***! + \**********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return utils; }); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var utils = { + utf16to8: function utf16to8(str) { + var i, c; + var out = ""; + var len = str.length; + + for (i = 0; i < len; i++) { + c = str.charCodeAt(i); + + if (c >= 0x0000 && c <= 0x007F) { + out += str.charAt(i); + } else if (c > 0x07FF) { + out += String.fromCharCode(0xE0 | c >> 12 & 0x0F); + out += String.fromCharCode(0x80 | c >> 6 & 0x3F); + out += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } else { + out += String.fromCharCode(0xC0 | c >> 6 & 0x1F); + out += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } + } + + return out; + }, + addCookies: function addCookies(cookies) { + /* Parameters: + * (Object) cookies - either a map of cookie names + * to string values or to maps of cookie values. + * + * For example: + * { "myCookie": "1234" } + * + * or: + * { "myCookie": { + * "value": "1234", + * "domain": ".example.org", + * "path": "/", + * "expires": expirationDate + * } + * } + * + * These values get passed to Strophe.Connection via + * options.cookies + */ + cookies = cookies || {}; + + for (var cookieName in cookies) { + if (Object.prototype.hasOwnProperty.call(cookies, cookieName)) { + var expires = ''; + var domain = ''; + var path = ''; + var cookieObj = cookies[cookieName]; + var isObj = _typeof(cookieObj) === "object"; + var cookieValue = escape(unescape(isObj ? cookieObj.value : cookieObj)); + + if (isObj) { + expires = cookieObj.expires ? ";expires=" + cookieObj.expires : ''; + domain = cookieObj.domain ? ";domain=" + cookieObj.domain : ''; + path = cookieObj.path ? ";path=" + cookieObj.path : ''; + } + + document.cookie = cookieName + '=' + cookieValue + expires + domain + path; + } + } + } +}; + + +/***/ }), + +/***/ "./src/websocket.js": +/*!**************************!*\ + !*** ./src/websocket.js ***! + \**************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core */ "./src/core.js"); +/* + This program is distributed under the terms of the MIT license. + Please see the LICENSE file for details. + + Copyright 2006-2008, OGG, LLC +*/ + +/* global window, clearTimeout, WebSocket, DOMParser */ + +var Strophe = core__WEBPACK_IMPORTED_MODULE_0__["default"].Strophe; +var $build = core__WEBPACK_IMPORTED_MODULE_0__["default"].$build; +/** Class: Strophe.WebSocket + * _Private_ helper class that handles WebSocket Connections + * + * The Strophe.WebSocket class is used internally by Strophe.Connection + * to encapsulate WebSocket sessions. It is not meant to be used from user's code. + */ + +/** File: websocket.js + * A JavaScript library to enable XMPP over Websocket in Strophejs. + * + * This file implements XMPP over WebSockets for Strophejs. + * If a Connection is established with a Websocket url (ws://...) + * Strophe will use WebSockets. + * For more information on XMPP-over-WebSocket see RFC 7395: + * http://tools.ietf.org/html/rfc7395 + * + * WebSocket support implemented by Andreas Guth (andreas.guth@rwth-aachen.de) + */ + +/** PrivateConstructor: Strophe.Websocket + * Create and initialize a Strophe.WebSocket object. + * Currently only sets the connection Object. + * + * Parameters: + * (Strophe.Connection) connection - The Strophe.Connection that will use WebSockets. + * + * Returns: + * A new Strophe.WebSocket object. + */ + +Strophe.Websocket = function (connection) { + this._conn = connection; + this.strip = "wrapper"; + var service = connection.service; + + if (service.indexOf("ws:") !== 0 && service.indexOf("wss:") !== 0) { + // If the service is not an absolute URL, assume it is a path and put the absolute + // URL together from options, current URL and the path. + var new_service = ""; + + if (connection.options.protocol === "ws" && window.location.protocol !== "https:") { + new_service += "ws"; + } else { + new_service += "wss"; + } + + new_service += "://" + window.location.host; + + if (service.indexOf("/") !== 0) { + new_service += window.location.pathname + service; + } else { + new_service += service; + } + + connection.service = new_service; + } +}; + +Strophe.Websocket.prototype = { + /** PrivateFunction: _buildStream + * _Private_ helper function to generate the <stream> start tag for WebSockets + * + * Returns: + * A Strophe.Builder with a <stream> element. + */ + _buildStream: function _buildStream() { + return $build("open", { + "xmlns": Strophe.NS.FRAMING, + "to": this._conn.domain, + "version": '1.0' + }); + }, + + /** PrivateFunction: _check_streamerror + * _Private_ checks a message for stream:error + * + * Parameters: + * (Strophe.Request) bodyWrap - The received stanza. + * connectstatus - The ConnectStatus that will be set on error. + * Returns: + * true if there was a streamerror, false otherwise. + */ + _check_streamerror: function _check_streamerror(bodyWrap, connectstatus) { + var errors; + + if (bodyWrap.getElementsByTagNameNS) { + errors = bodyWrap.getElementsByTagNameNS(Strophe.NS.STREAM, "error"); + } else { + errors = bodyWrap.getElementsByTagName("stream:error"); + } + + if (errors.length === 0) { + return false; + } + + var error = errors[0]; + var condition = ""; + var text = ""; + var ns = "urn:ietf:params:xml:ns:xmpp-streams"; + + for (var i = 0; i < error.childNodes.length; i++) { + var e = error.childNodes[i]; + + if (e.getAttribute("xmlns") !== ns) { + break; + } + + if (e.nodeName === "text") { + text = e.textContent; + } else { + condition = e.nodeName; + } + } + + var errorString = "WebSocket stream error: "; + + if (condition) { + errorString += condition; + } else { + errorString += "unknown"; + } + + if (text) { + errorString += " - " + text; + } + + Strophe.error(errorString); // close the connection on stream_error + + this._conn._changeConnectStatus(connectstatus, condition); + + this._conn._doDisconnect(); + + return true; + }, + + /** PrivateFunction: _reset + * Reset the connection. + * + * This function is called by the reset function of the Strophe Connection. + * Is not needed by WebSockets. + */ + _reset: function _reset() { + return; + }, + + /** PrivateFunction: _connect + * _Private_ function called by Strophe.Connection.connect + * + * Creates a WebSocket for a connection and assigns Callbacks to it. + * Does nothing if there already is a WebSocket. + */ + _connect: function _connect() { + // Ensure that there is no open WebSocket from a previous Connection. + this._closeSocket(); // Create the new WobSocket + + + this.socket = new WebSocket(this._conn.service, "xmpp"); + this.socket.onopen = this._onOpen.bind(this); + this.socket.onerror = this._onError.bind(this); + this.socket.onclose = this._onClose.bind(this); + this.socket.onmessage = this._connect_cb_wrapper.bind(this); + }, + + /** PrivateFunction: _connect_cb + * _Private_ function called by Strophe.Connection._connect_cb + * + * checks for stream:error + * + * Parameters: + * (Strophe.Request) bodyWrap - The received stanza. + */ + _connect_cb: function _connect_cb(bodyWrap) { + var error = this._check_streamerror(bodyWrap, Strophe.Status.CONNFAIL); + + if (error) { + return Strophe.Status.CONNFAIL; + } + }, + + /** PrivateFunction: _handleStreamStart + * _Private_ function that checks the opening <open /> tag for errors. + * + * Disconnects if there is an error and returns false, true otherwise. + * + * Parameters: + * (Node) message - Stanza containing the <open /> tag. + */ + _handleStreamStart: function _handleStreamStart(message) { + var error = false; // Check for errors in the <open /> tag + + var ns = message.getAttribute("xmlns"); + + if (typeof ns !== "string") { + error = "Missing xmlns in <open />"; + } else if (ns !== Strophe.NS.FRAMING) { + error = "Wrong xmlns in <open />: " + ns; + } + + var ver = message.getAttribute("version"); + + if (typeof ver !== "string") { + error = "Missing version in <open />"; + } else if (ver !== "1.0") { + error = "Wrong version in <open />: " + ver; + } + + if (error) { + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, error); + + this._conn._doDisconnect(); + + return false; + } + + return true; + }, + + /** PrivateFunction: _connect_cb_wrapper + * _Private_ function that handles the first connection messages. + * + * On receiving an opening stream tag this callback replaces itself with the real + * message handler. On receiving a stream error the connection is terminated. + */ + _connect_cb_wrapper: function _connect_cb_wrapper(message) { + if (message.data.indexOf("<open ") === 0 || message.data.indexOf("<?xml") === 0) { + // Strip the XML Declaration, if there is one + var data = message.data.replace(/^(<\?.*?\?>\s*)*/, ""); + if (data === '') return; + var streamStart = new DOMParser().parseFromString(data, "text/xml").documentElement; + + this._conn.xmlInput(streamStart); + + this._conn.rawInput(message.data); //_handleStreamSteart will check for XML errors and disconnect on error + + + if (this._handleStreamStart(streamStart)) { + //_connect_cb will check for stream:error and disconnect on error + this._connect_cb(streamStart); + } + } else if (message.data.indexOf("<close ") === 0) { + // <close xmlns="urn:ietf:params:xml:ns:xmpp-framing /> + // Parse the raw string to an XML element + var parsedMessage = new DOMParser().parseFromString(message.data, "text/xml").documentElement; // Report this input to the raw and xml handlers + + this._conn.xmlInput(parsedMessage); + + this._conn.rawInput(message.data); + + var see_uri = parsedMessage.getAttribute("see-other-uri"); + + if (see_uri) { + var service = this._conn.service; // Valid scenarios: WSS->WSS, WS->ANY + + var isSecureRedirect = service.indexOf("wss:") >= 0 && see_uri.indexOf("wss:") >= 0 || service.indexOf("ws:") >= 0; + + if (isSecureRedirect) { + this._conn._changeConnectStatus(Strophe.Status.REDIRECT, "Received see-other-uri, resetting connection"); + + this._conn.reset(); + + this._conn.service = see_uri; + + this._connect(); + } + } else { + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "Received closing stream"); + + this._conn._doDisconnect(); + } + } else { + var string = this._streamWrap(message.data); + + var elem = new DOMParser().parseFromString(string, "text/xml").documentElement; + this.socket.onmessage = this._onMessage.bind(this); + + this._conn._connect_cb(elem, null, message.data); + } + }, + + /** PrivateFunction: _disconnect + * _Private_ function called by Strophe.Connection.disconnect + * + * Disconnects and sends a last stanza if one is given + * + * Parameters: + * (Request) pres - This stanza will be sent before disconnecting. + */ + _disconnect: function _disconnect(pres) { + if (this.socket && this.socket.readyState !== WebSocket.CLOSED) { + if (pres) { + this._conn.send(pres); + } + + var close = $build("close", { + "xmlns": Strophe.NS.FRAMING + }); + + this._conn.xmlOutput(close.tree()); + + var closeString = Strophe.serialize(close); + + this._conn.rawOutput(closeString); + + try { + this.socket.send(closeString); + } catch (e) { + Strophe.info("Couldn't send <close /> tag."); + } + } + + this._conn._doDisconnect(); + }, + + /** PrivateFunction: _doDisconnect + * _Private_ function to disconnect. + * + * Just closes the Socket for WebSockets + */ + _doDisconnect: function _doDisconnect() { + Strophe.info("WebSockets _doDisconnect was called"); + + this._closeSocket(); + }, + + /** PrivateFunction _streamWrap + * _Private_ helper function to wrap a stanza in a <stream> tag. + * This is used so Strophe can process stanzas from WebSockets like BOSH + */ + _streamWrap: function _streamWrap(stanza) { + return "<wrapper>" + stanza + '</wrapper>'; + }, + + /** PrivateFunction: _closeSocket + * _Private_ function to close the WebSocket. + * + * Closes the socket if it is still open and deletes it + */ + _closeSocket: function _closeSocket() { + if (this.socket) { + try { + this.socket.onerror = null; + this.socket.close(); + } catch (e) { + Strophe.debug(e.message); + } + } + + this.socket = null; + }, + + /** PrivateFunction: _emptyQueue + * _Private_ function to check if the message queue is empty. + * + * Returns: + * True, because WebSocket messages are send immediately after queueing. + */ + _emptyQueue: function _emptyQueue() { + return true; + }, + + /** PrivateFunction: _onClose + * _Private_ function to handle websockets closing. + * + * Nothing to do here for WebSockets + */ + _onClose: function _onClose(e) { + if (this._conn.connected && !this._conn.disconnecting) { + Strophe.error("Websocket closed unexpectedly"); + + this._conn._doDisconnect(); + } else if (e && e.code === 1006 && !this._conn.connected && this.socket) { + // in case the onError callback was not called (Safari 10 does not + // call onerror when the initial connection fails) we need to + // dispatch a CONNFAIL status update to be consistent with the + // behavior on other browsers. + Strophe.error("Websocket closed unexcectedly"); + + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected."); + + this._conn._doDisconnect(); + } else { + Strophe.info("Websocket closed"); + } + }, + + /** PrivateFunction: _no_auth_received + * + * Called on stream start/restart when no stream:features + * has been received. + */ + _no_auth_received: function _no_auth_received(callback) { + Strophe.error("Server did not offer a supported authentication mechanism"); + + this._changeConnectStatus(Strophe.Status.CONNFAIL, Strophe.ErrorCondition.NO_AUTH_MECH); + + if (callback) { + callback.call(this._conn); + } + + this._conn._doDisconnect(); + }, + + /** PrivateFunction: _onDisconnectTimeout + * _Private_ timeout handler for handling non-graceful disconnection. + * + * This does nothing for WebSockets + */ + _onDisconnectTimeout: function _onDisconnectTimeout() {}, + + /** PrivateFunction: _abortAllRequests + * _Private_ helper function that makes sure all pending requests are aborted. + */ + _abortAllRequests: function _abortAllRequests() {}, + + /** PrivateFunction: _onError + * _Private_ function to handle websockets errors. + * + * Parameters: + * (Object) error - The websocket error. + */ + _onError: function _onError(error) { + Strophe.error("Websocket error " + error); + + this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, "The WebSocket connection could not be established or was disconnected."); + + this._disconnect(); + }, + + /** PrivateFunction: _onIdle + * _Private_ function called by Strophe.Connection._onIdle + * + * sends all queued stanzas + */ + _onIdle: function _onIdle() { + var data = this._conn._data; + + if (data.length > 0 && !this._conn.paused) { + for (var i = 0; i < data.length; i++) { + if (data[i] !== null) { + var stanza = void 0; + + if (data[i] === "restart") { + stanza = this._buildStream().tree(); + } else { + stanza = data[i]; + } + + var rawStanza = Strophe.serialize(stanza); + + this._conn.xmlOutput(stanza); + + this._conn.rawOutput(rawStanza); + + this.socket.send(rawStanza); + } + } + + this._conn._data = []; + } + }, + + /** PrivateFunction: _onMessage + * _Private_ function to handle websockets messages. + * + * This function parses each of the messages as if they are full documents. + * [TODO : We may actually want to use a SAX Push parser]. + * + * Since all XMPP traffic starts with + * <stream:stream version='1.0' + * xml:lang='en' + * xmlns='jabber:client' + * xmlns:stream='http://etherx.jabber.org/streams' + * id='3697395463' + * from='SERVER'> + * + * The first stanza will always fail to be parsed. + * + * Additionally, the seconds stanza will always be <stream:features> with + * the stream NS defined in the previous stanza, so we need to 'force' + * the inclusion of the NS in this stanza. + * + * Parameters: + * (string) message - The websocket message. + */ + _onMessage: function _onMessage(message) { + var elem; // check for closing stream + + var close = '<close xmlns="urn:ietf:params:xml:ns:xmpp-framing" />'; + + if (message.data === close) { + this._conn.rawInput(close); + + this._conn.xmlInput(message); + + if (!this._conn.disconnecting) { + this._conn._doDisconnect(); + } + + return; + } else if (message.data.search("<open ") === 0) { + // This handles stream restarts + elem = new DOMParser().parseFromString(message.data, "text/xml").documentElement; + + if (!this._handleStreamStart(elem)) { + return; + } + } else { + var data = this._streamWrap(message.data); + + elem = new DOMParser().parseFromString(data, "text/xml").documentElement; + } + + if (this._check_streamerror(elem, Strophe.Status.ERROR)) { + return; + } //handle unavailable presence stanza before disconnecting + + + if (this._conn.disconnecting && elem.firstChild.nodeName === "presence" && elem.firstChild.getAttribute("type") === "unavailable") { + this._conn.xmlInput(elem); + + this._conn.rawInput(Strophe.serialize(elem)); // if we are already disconnecting we will ignore the unavailable stanza and + // wait for the </stream:stream> tag before we close the connection + + + return; + } + + this._conn._dataRecv(elem, message.data); + }, + + /** PrivateFunction: _onOpen + * _Private_ function to handle websockets connection setup. + * + * The opening stream tag is sent here. + */ + _onOpen: function _onOpen() { + Strophe.info("Websocket open"); + + var start = this._buildStream(); + + this._conn.xmlOutput(start.tree()); + + var startString = Strophe.serialize(start); + + this._conn.rawOutput(startString); + + this.socket.send(startString); + }, + + /** PrivateFunction: _reqToData + * _Private_ function to get a stanza out of a request. + * + * WebSockets don't use requests, so the passed argument is just returned. + * + * Parameters: + * (Object) stanza - The stanza. + * + * Returns: + * The stanza that was passed. + */ + _reqToData: function _reqToData(stanza) { + return stanza; + }, + + /** PrivateFunction: _send + * _Private_ part of the Connection.send function for WebSocket + * + * Just flushes the messages that are in the queue + */ + _send: function _send() { + this._conn.flush(); + }, + + /** PrivateFunction: _sendRestart + * + * Send an xmpp:restart stanza. + */ + _sendRestart: function _sendRestart() { + clearTimeout(this._conn._idleTimeout); + + this._conn._onIdle.bind(this._conn)(); + } +}; + +/***/ }) + +/******/ })["default"]; +}); +//# sourceMappingURL=strophe.js.map \ No newline at end of file