dfecwecrw

  • このトピックは空です。
15件の投稿を表示中 - 24,481 - 24,495件目 (全24,508件中)
  • 投稿者
    投稿
  • #100082 返信
    internetFek
    ゲスト

    В новосибирске огромное количество провайдеров предлагают домашний интернет с разными тарифами. Студенты, как правило, ищут экономичные цены и максимальную скорость интернета; Рассмотрим самые выгодные предложения, которые являются идеальными для учебы и досуга. Самые известные провайдеры новосибирска предлагают стабильное соединение и широкие интернет-пакеты для студентов. Например, провайдеры с акциями и скидками могут предложить выгодные тарифы на интернет, включая кабельный и беспроводной интернет. домашний интернет тарифы новосибирск Выбирая провайдера стоит обратить внимание на отзывы о провайдерах, чтобы понимать о уровне услуг связи. Анализ тарифов поможет выбрать оптимальный вариант, удовлетворяющий вашим требованиям. Многие компании заключают специальные условия для студентов, что обеспечивает подключение интернета более выгодным. Не забывайте о мобильном интернете в новосибирске, который также может быть полезен для студентов. Изучите все варианты, чтобы определить лучший вариант!

    #100091 返信
    Davidbof
    ゲスト

    Клиника «ВладимирМед» предоставляет круглосуточную анонимную помощь при алкогольной зависимости с возможностью выезда врача на дом. Мы объединяем профессиональную наркологию, психологическую поддержку и современные технологии детоксикации, чтобы каждый пациент мог получить комплексное лечение в безопасной и комфортной обстановке. Конфиденциальность и оперативность — ключевые принципы нашей работы, помогающие начать новый этап жизни без страха осуждения и лишних процедур.
    Углубиться в тему - http://narkologicheskaya-klinika-vladimir10.ru/anonimnaya-narkologicheskaya-klinika-vladimir/

    #100094 返信
    lecheniecherepovecCig
    ゲスト

    лечение запоя
    vivod-iz-zapoya-cherepovec005.ru
    вывод из запоя круглосуточно

    #100095 返信
    Jerrydix
    ゲスト

    Перед оформлением вызова проводится предварительная телефонная консультация, позволяющая оценить тяжесть состояния и заранее подготовить необходимые препараты.
    Изучить вопрос глубже - [url=https://kapelnica-ot-zapoya-voronezh.ru/]врача капельницу от запоя[/url]

    #100123 返信
    JuniorFug
    ゲスト

    Hace un año, mi presencia digital era... inexistente. Tenía un buen producto, sí, pero nadie lo conocía. Publicaba en redes sociales de vez en cuando y enviaba uno que otro correo, pero sin estrategia. Hasta que decidí sentarme, aprender y aplicar Estrategias de Marketing Digital efectivas. Y créeme, fue un antes y un después.

    Lo primero que entendí fue que no se trata de estar en todas partes, sino de estar donde está tu cliente ideal. Empecé creando una estrategia de contenidos basada en sus necesidades reales, y usé herramientas de automatización para distribuirlos de forma consistente.

    También diseñé un embudo de ventas digital, con contenido gratuito al inicio, correos de valor en el medio, y una oferta irresistible al final. A eso le sumé campañas en redes sociales bien segmentadas y una página de aterrizaje optimizada para conversiones.

    El resultado: tripliqué mis ventas en 3 meses. Sin tener que invertir fortunas en publicidad, solo aplicando tácticas que funcionan.

    En mi blog comparto todo este proceso paso a paso: desde cómo crear tu buyer persona, hasta cómo automatizar tu email marketing y medir resultados con herramientas como Google Analytics o Meta Ads.

    Si sientes que estás haciendo “de todo” pero sin resultados claros, probablemente te falta estrategia. Y no te preocupes, no necesitas ser experto para aplicar lo que yo aprendí. Solo necesitas saber por dónde empezar.

    #100129 返信
    Davidchilm
    ゲスト

    Хризантемы великолепны - свежие и яркие!

    купить пионы томск

    #100132 返信
    AlfredDresk
    ゲスト

    Источник [url=https://tripscanwin28.top]tripscan.ru[/url]

    #100134 返信
    Jameslop
    ゲスト

    Каждый день запоя увеличивает риск для жизни. Не рискуйте — специалисты в Москве приедут на дом и окажут экстренную помощь. Без боли, стресса и ожидания.
    Получить дополнительную информацию - [url=https://kapelnica-ot-zapoya-lyubercy13.ru/]капельница от запоя анонимно в Москве[/url]

    #100137 返信
    JuniorFug
    ゲスト

    <!-- Meta -->
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Content-Language" content="en"/>
    <meta name="application-name" content="Bubbl.us"/>
    <meta name="application-url" content="
    https://bubbl.us"/&gt;
    <meta name="keywords" content="mind mapping, online mind mapping, free mind mapping software, visual learning, organize ideas, online collaboration, brainstorming, project planning, concept mapping, productivity tools, whiteboard, online whiteboard, virtual whiteboard, organizational chart, org chart, company hierarchy, business structure diagram"/>
    <meta name="description" content="Create dynamic mind maps, organizational charts, and collaborate on virtual whiteboards with Bubbl.us. Boost productivity, organize ideas, and collaborate in real-time. Free mind mapping software for visual learning, project planning, and concept mapping. Join millions worldwide using Bubbl.us for innovative thinking and effective presentations."/>
    <meta name="copyright" content="Copyright 2005-2025 LKCollab LLC. All rights reserved."/>
    <meta name="author" content="LKCollab LLC"/>
    <meta name="distribution" content="global"/>
    <meta name="robots" content="index,follow,all"/>
    <meta name="language" content="en"/>
    <meta name="revisit-after" content="5 days"/>

    <meta name="viewport" content="user-scalable=no, width=device-width" initial-scale=1">

    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="default" />
    <meta name="format-detection" content="telephone=no"/>

    <!-- Site icon -->
    <link rel="apple-touch-icon-precomposed" sizes="57x57" href="/images/apple-touch-icon-57x57.png" />
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/images/apple-touch-icon-114x114.png" />
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/images/apple-touch-icon-72x72.png" />
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/images/apple-touch-icon-144x144.png" />
    <link rel="apple-touch-icon-precomposed" sizes="60x60" href="/images/apple-touch-icon-60x60.png" />
    <link rel="apple-touch-icon-precomposed" sizes="120x120" href="/images/apple-touch-icon-120x120.png" />
    <link rel="apple-touch-icon-precomposed" sizes="76x76" href="/images/apple-touch-icon-76x76.png" />
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="/images/apple-touch-icon-152x152.png" />
    <link rel="icon" type="image/png" href="/images/favicon-196x196.png" sizes="196x196" />
    <link rel="icon" type="image/png" href="/images/favicon-96x96.png" sizes="96x96" />
    <link rel="icon" type="image/png" href="/images/favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="/images/favicon-16x16.png" sizes="16x16" />
    <link rel="icon" type="image/png" href="/images/favicon-128.png" sizes="128x128" />

    <!-- Fonts -->
    <style>
    /* latin */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 300;
    src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
    }
    /* cyrillic-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
    }
    /* cyrillic */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
    }
    /* greek-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+1F00-1FFF;
    }
    /* greek */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+0370-03FF;
    }
    /* vietnamese */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
    }
    /* latin-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2');
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
    }
    /* latin */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
    }
    /* latin-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 500;
    src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v15/oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
    }
    /* latin */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 500;
    src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v15/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
    }
    /* cyrillic-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
    }
    /* cyrillic */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
    }
    /* greek-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+1F00-1FFF;
    }
    /* greek */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0370-03FF;
    }
    /* vietnamese */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
    }
    /* latin-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
    }
    /* latin */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
    }
    /* latin-ext */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 900;
    src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v15/9_7S_tWeGDh5Pq3u05RVkoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
    }
    /* latin */
    @font-face { font-display: swap;
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 900;
    src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIpBw1xU1rKptJj_0jans920.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
    }

    </style>

    <!-- Polymer polyfill - inject -->
    <script crossorigin="anonymous">
    /**
    * @license
    * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
    * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
    * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
    * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
    * Code distributed by Google as part of the polymer project is also
    * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
    */
    // @version 0.7.24
    (function() {
    window.WebComponents = window.WebComponents || {
    flags: {}
    };
    var file = "webcomponents-lite.js";
    var script = document.querySelector('script[src*="' + file + '"]');
    var flags = {};
    if (!flags.noOpts) {
    location.search.slice(1).split("&").forEach(function(option) {
    var parts = option.split("=");
    var match;
    if (parts[0] && (match = parts[0].match(/wc-(.+)/))) {
    flags[match[1]] = parts[1] || true;
    }
    });
    if (script) {
    for (var i = 0, a; a = script.attributes[i]; i++) {
    if (a.name !== "src") {
    flags[a.name] = a.value || true;
    }
    }
    }
    if (flags.log && flags.log.split) {
    var parts = flags.log.split(",");
    flags.log = {};
    parts.forEach(function(f) {
    flags.log[f] = true;
    });
    } else {
    flags.log = {};
    }
    }
    if (flags.register) {
    window.CustomElements = window.CustomElements || {
    flags: {}
    };
    window.CustomElements.flags.register = flags.register;
    }
    WebComponents.flags = flags;
    })();

    (function(scope) {
    "use strict";
    var hasWorkingUrl = false;
    if (!scope.forceJURL) {
    try {
    var u = new URL("b", "http://a&quot;);
    u.pathname = "c%20d";
    hasWorkingUrl = u.href === "http://a/c%20d&quot;;
    } catch (e) {}
    }
    if (hasWorkingUrl) return;
    var relative = Object.create(null);
    relative["ftp"] = 21;
    relative["file"] = 0;
    relative["gopher"] = 70;
    relative["http"] = 80;
    relative["https"] = 443;
    relative["ws"] = 80;
    relative["wss"] = 443;
    var relativePathDotMapping = Object.create(null);
    relativePathDotMapping["%2e"] = ".";
    relativePathDotMapping[".%2e"] = "..";
    relativePathDotMapping["%2e."] = "..";
    relativePathDotMapping["%2e%2e"] = "..";
    function isRelativeScheme(scheme) {
    return relative[scheme] !== undefined;
    }
    function invalid() {
    clear.call(this);
    this._isInvalid = true;
    }
    function IDNAToASCII(h) {
    if ("" == h) {
    invalid.call(this);
    }
    return h.toLowerCase();
    }
    function percentEscape(c) {
    var unicode = c.charCodeAt(0);
    if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) {
    return c;
    }
    return encodeURIComponent(c);
    }
    function percentEscapeQuery(c) {
    var unicode = c.charCodeAt(0);
    if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) {
    return c;
    }
    return encodeURIComponent(c);
    }
    var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/;
    function parse(input, stateOverride, base) {
    function err(message) {
    errors.push(message);
    }
    var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = [];
    loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) {
    var c = input[cursor];
    switch (state) {
    case "scheme start":
    if (c && ALPHA.test(c)) {
    buffer += c.toLowerCase();
    state = "scheme";
    } else if (!stateOverride) {
    buffer = "";
    state = "no scheme";
    continue;
    } else {
    err("Invalid scheme.");
    break loop;
    }
    break;

    case "scheme":
    if (c && ALPHANUMERIC.test(c)) {
    buffer += c.toLowerCase();
    } else if (":" == c) {
    this._scheme = buffer;
    buffer = "";
    if (stateOverride) {
    break loop;
    }
    if (isRelativeScheme(this._scheme)) {
    this._isRelative = true;
    }
    if ("file" == this._scheme) {
    state = "relative";
    } else if (this._isRelative && base && base._scheme == this._scheme) {
    state = "relative or authority";
    } else if (this._isRelative) {
    state = "authority first slash";
    } else {
    state = "scheme data";
    }
    } else if (!stateOverride) {
    buffer = "";
    cursor = 0;
    state = "no scheme";
    continue;
    } else if (EOF == c) {
    break loop;
    } else {
    err("Code point not allowed in scheme: " + c);
    break loop;
    }
    break;

    case "scheme data":
    if ("?" == c) {
    this._query = "?";
    state = "query";
    } else if ("#" == c) {
    this._fragment = "#";
    state = "fragment";
    } else {
    if (EOF != c && "\t" != c && "\n" != c && "\r" != c) {
    this._schemeData += percentEscape(c);
    }
    }
    break;

    case "no scheme":
    if (!base || !isRelativeScheme(base._scheme)) {
    err("Missing scheme.");
    invalid.call(this);
    } else {
    state = "relative";
    continue;
    }
    break;

    case "relative or authority":
    if ("/" == c && "/" == input[cursor + 1]) {
    state = "authority ignore slashes";
    } else {
    err("Expected /, got: " + c);
    state = "relative";
    continue;
    }
    break;

    case "relative":
    this._isRelative = true;
    if ("file" != this._scheme) this._scheme = base._scheme;
    if (EOF == c) {
    this._host = base._host;
    this._port = base._port;
    this._path = base._path.slice();
    this._query = base._query;
    this._username = base._username;
    this._password = base._password;
    break loop;
    } else if ("/" == c || "\\" == c) {
    if ("\\" == c) err("\\ is an invalid code point.");
    state = "relative slash";
    } else if ("?" == c) {
    this._host = base._host;
    this._port = base._port;
    this._path = base._path.slice();
    this._query = "?";
    this._username = base._username;
    this._password = base._password;
    state = "query";
    } else if ("#" == c) {
    this._host = base._host;
    this._port = base._port;
    this._path = base._path.slice();
    this._query = base._query;
    this._fragment = "#";
    this._username = base._username;
    this._password = base._password;
    state = "fragment";
    } else {
    var nextC = input[cursor + 1];
    var nextNextC = input[cursor + 2];
    if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) {
    this._host = base._host;
    this._port = base._port;
    this._username = base._username;
    this._password = base._password;
    this._path = base._path.slice();
    this._path.pop();
    }
    state = "relative path";
    continue;
    }
    break;

    case "relative slash":
    if ("/" == c || "\\" == c) {
    if ("\\" == c) {
    err("\\ is an invalid code point.");
    }
    if ("file" == this._scheme) {
    state = "file host";
    } else {
    state = "authority ignore slashes";
    }
    } else {
    if ("file" != this._scheme) {
    this._host = base._host;
    this._port = base._port;
    this._username = base._username;
    this._password = base._password;
    }
    state = "relative path";
    continue;
    }
    break;

    case "authority first slash":
    if ("/" == c) {
    state = "authority second slash";
    } else {
    err("Expected '/', got: " + c);
    state = "authority ignore slashes";
    continue;
    }
    break;

    case "authority second slash":
    state = "authority ignore slashes";
    if ("/" != c) {
    err("Expected '/', got: " + c);
    continue;
    }
    break;

    case "authority ignore slashes":
    if ("/" != c && "\\" != c) {
    state = "authority";
    continue;
    } else {
    err("Expected authority, got: " + c);
    }
    break;

    case "authority":
    if ("@" == c) {
    if (seenAt) {
    err("@ already seen.");
    buffer += "%40";
    }
    seenAt = true;
    for (var i = 0; i < buffer.length; i++) {
    var cp = buffer[i];
    if ("\t" == cp || "\n" == cp || "\r" == cp) {
    err("Invalid whitespace in authority.");
    continue;
    }
    if (":" == cp && null === this._password) {
    this._password = "";
    continue;
    }
    var tempC = percentEscape(cp);
    null !== this._password ? this._password += tempC : this._username += tempC;
    }
    buffer = "";
    } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
    cursor -= buffer.length;
    buffer = "";
    state = "host";
    continue;
    } else {
    buffer += c;
    }
    break;

    case "file host":
    if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
    if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) {
    state = "relative path";
    } else if (buffer.length == 0) {
    state = "relative path start";
    } else {
    this._host = IDNAToASCII.call(this, buffer);
    buffer = "";
    state = "relative path start";
    }
    continue;
    } else if ("\t" == c || "\n" == c || "\r" == c) {
    err("Invalid whitespace in file host.");
    } else {
    buffer += c;
    }
    break;

    case "host":
    case "hostname":
    if (":" == c && !seenBracket) {
    this._host = IDNAToASCII.call(this, buffer);
    buffer = "";
    state = "port";
    if ("hostname" == stateOverride) {
    break loop;
    }
    } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) {
    this._host = IDNAToASCII.call(this, buffer);
    buffer = "";
    state = "relative path start";
    if (stateOverride) {
    break loop;
    }
    continue;
    } else if ("\t" != c && "\n" != c && "\r" != c) {
    if ("[" == c) {
    seenBracket = true;
    } else if ("]" == c) {
    seenBracket = false;
    }
    buffer += c;
    } else {
    err("Invalid code point in host/hostname: " + c);
    }
    break;

    case "port":
    if (/[0-9]/.test(c)) {
    buffer += c;
    } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) {
    if ("" != buffer) {
    var temp = parseInt(buffer, 10);
    if (temp != relative[this._scheme]) {
    this._port = temp + "";
    }
    buffer = "";
    }
    if (stateOverride) {
    break loop;
    }
    state = "relative path start";
    continue;
    } else if ("\t" == c || "\n" == c || "\r" == c) {
    err("Invalid code point in port: " + c);
    } else {
    invalid.call(this);
    }
    break;

    case "relative path start":
    if ("\\" == c) err("'\\' not allowed in path.");
    state = "relative path";
    if ("/" != c && "\\" != c) {
    continue;
    }
    break;

    case "relative path":
    if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) {
    if ("\\" == c) {
    err("\\ not allowed in relative path.");
    }
    var tmp;
    if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {
    buffer = tmp;
    }
    if (".." == buffer) {
    this._path.pop();
    if ("/" != c && "\\" != c) {
    this._path.push("");
    }
    } else if ("." == buffer && "/" != c && "\\" != c) {
    this._path.push("");
    } else if ("." != buffer) {
    if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") {
    buffer = buffer[0] + ":";
    }
    this._path.push(buffer);
    }
    buffer = "";
    if ("?" == c) {
    this._query = "?";
    state = "query";
    } else if ("#" == c) {
    this._fragment = "#";
    state = "fragment";
    }
    } else if ("\t" != c && "\n" != c && "\r" != c) {
    buffer += percentEscape(c);
    }
    break;

    case "query":
    if (!stateOverride && "#" == c) {
    this._fragment = "#";
    state = "fragment";
    } else if (EOF != c && "\t" != c && "\n" != c && "\r" != c) {
    this._query += percentEscapeQuery(c);
    }
    break;

    case "fragment":
    if (EOF != c && "\t" != c && "\n" != c && "\r" != c) {
    this._fragment += c;
    }
    break;
    }
    cursor++;
    }
    }
    function clear() {
    this._scheme = "";
    this._schemeData = "";
    this._username = "";
    this._password = null;
    this._host = "";
    this._port = "";
    this._path = [];
    this._query = "";
    this._fragment = "";
    this._isInvalid = false;
    this._isRelative = false;
    }
    function jURL(url, base) {
    if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base));
    this._url = url;
    clear.call(this);
    var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, "");
    parse.call(this, input, null, base);
    }
    jURL.prototype = {
    toString: function() {
    return this.href;
    },
    get href() {
    if (this._isInvalid) return this._url;
    var authority = "";
    if ("" != this._username || null != this._password) {
    authority = this._username + (null != this._password ? ":" + this._password : "") + "@";
    }
    return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment;
    },
    set href(href) {
    clear.call(this);
    parse.call(this, href);
    },
    get protocol() {
    return this._scheme + ":";
    },
    set protocol(protocol) {
    if (this._isInvalid) return;
    parse.call(this, protocol + ":", "scheme start");
    },
    get host() {
    return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host;
    },
    set host(host) {
    if (this._isInvalid || !this._isRelative) return;
    parse.call(this, host, "host");
    },
    get hostname() {
    return this._host;
    },
    set hostname(hostname) {
    if (this._isInvalid || !this._isRelative) return;
    parse.call(this, hostname, "hostname");
    },
    get port() {
    return this._port;
    },
    set port(port) {
    if (this._isInvalid || !this._isRelative) return;
    parse.call(this, port, "port");
    },
    get pathname() {
    return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData;
    },
    set pathname(pathname) {
    if (this._isInvalid || !this._isRelative) return;
    this._path = [];
    parse.call(this, pathname, "relative path start");
    },
    get search() {
    return this._isInvalid || !this._query || "?" == this._query ? "" : this._query;
    },
    set search(search) {
    if (this._isInvalid || !this._isRelative) return;
    this._query = "?";
    if ("?" == search[0]) search = search.slice(1);
    parse.call(this, search, "query");
    },
    get hash() {
    return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment;
    },
    set hash(hash) {
    if (this._isInvalid) return;
    this._fragment = "#";
    if ("#" == hash[0]) hash = hash.slice(1);
    parse.call(this, hash, "fragment");
    },
    get origin() {
    var host;
    if (this._isInvalid || !this._scheme) {
    return "";
    }
    switch (this._scheme) {
    case "data":
    case "file":
    case "javascript":
    case "mailto":
    return "null";
    }
    host = this.host;
    if (!host) {
    return "";
    }
    return this._scheme + "://" + host;
    }
    };
    var OriginalURL = scope.URL;
    if (OriginalURL) {
    jURL.createObjectURL = function(blob) {
    return OriginalURL.createObjectURL.apply(OriginalURL, arguments);
    };
    jURL.revokeObjectURL = function(url) {
    OriginalURL.revokeObjectURL(url);
    };
    }
    scope.URL = jURL;
    })(self);

    if (typeof WeakMap === "undefined") {
    (function() {
    var defineProperty = Object.defineProperty;
    var counter = Date.now() % 1e9;
    var WeakMap = function() {
    this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__");
    };
    WeakMap.prototype = {
    set: function(key, value) {
    var entry = key[this.name];
    if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, {
    value: [ key, value ],
    writable: true
    });
    return this;
    },
    get: function(key) {
    var entry;
    return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;
    },
    "delete": function(key) {
    var entry = key[this.name];
    if (!entry || entry[0] !== key) return false;
    entry[0] = entry[1] = undefined;
    return true;
    },
    has: function(key) {
    var entry = key[this.name];
    if (!entry) return false;
    return entry[0] === key;
    }
    };
    window.WeakMap = WeakMap;
    })();
    }

    (function(global) {
    if (global.JsMutationObserver) {
    return;
    }
    var registrationsTable = new WeakMap();
    var setImmediate;
    if (/Trident|Edge/.test(navigator.userAgent)) {
    setImmediate = setTimeout;
    } else if (window.setImmediate) {
    setImmediate = window.setImmediate;
    } else {
    var setImmediateQueue = [];
    var sentinel = String(Math.random());
    window.addEventListener("message", function(e) {
    if (e.data === sentinel) {
    var queue = setImmediateQueue;
    setImmediateQueue = [];
    queue.forEach(function(func) {
    func();
    });
    }
    });
    setImmediate = function(func) {
    setImmediateQueue.push(func);
    window.postMessage(sentinel, "*");
    };
    }
    var isScheduled = false;
    var scheduledObservers = [];
    function scheduleCallback(observer) {
    scheduledObservers.push(observer);
    if (!isScheduled) {
    isScheduled = true;
    setImmediate(dispatchCallbacks);
    }
    }
    function wrapIfNeeded(node) {
    return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;
    }
    function dispatchCallbacks() {
    isScheduled = false;
    var observers = scheduledObservers;
    scheduledObservers = [];
    observers.sort(function(o1, o2) {
    return o1.uid_ - o2.uid_;
    });
    var anyNonEmpty = false;
    observers.forEach(function(observer) {
    var queue = observer.takeRecords();
    removeTransientObserversFor(observer);
    if (queue.length) {
    observer.callback_(queue, observer);
    anyNonEmpty = true;
    }
    });
    if (anyNonEmpty) dispatchCallbacks();
    }
    function removeTransientObserversFor(observer) {
    observer.nodes_.forEach(function(node) {
    var registrations = registrationsTable.get(node);
    if (!registrations) return;
    registrations.forEach(function(registration) {
    if (registration.observer === observer) registration.removeTransientObservers();
    });
    });
    }
    function forEachAncestorAndObserverEnqueueRecord(target, callback) {
    for (var node = target; node; node = node.parentNode) {
    var registrations = registrationsTable.get(node);
    if (registrations) {
    for (var j = 0; j < registrations.length; j++) {
    var registration = registrations[j];
    var options = registration.options;
    if (node !== target && !options.subtree) continue;
    var record = callback(options);
    if (record) registration.enqueue(record);
    }
    }
    }
    }
    var uidCounter = 0;
    function JsMutationObserver(callback) {
    this.callback_ = callback;
    this.nodes_ = [];
    this.records_ = [];
    this.uid_ = ++uidCounter;
    }
    JsMutationObserver.prototype = {
    observe: function(target, options) {
    target = wrapIfNeeded(target);
    if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {
    throw new SyntaxError();
    }
    var registrations = registrationsTable.get(target);
    if (!registrations) registrationsTable.set(target, registrations = []);
    var registration;
    for (var i = 0; i < registrations.length; i++) {
    if (registrations[i].observer === this) {
    registration = registrations[i];
    registration.removeListeners();
    registration.options = options;
    break;
    }
    }
    if (!registration) {
    registration = new Registration(this, target, options);
    registrations.push(registration);
    this.nodes_.push(target);
    }
    registration.addListeners();
    },
    disconnect: function() {
    this.nodes_.forEach(function(node) {
    var registrations = registrationsTable.get(node);
    for (var i = 0; i < registrations.length; i++) {
    var registration = registrations[i];
    if (registration.observer === this) {
    registration.removeListeners();
    registrations.splice(i, 1);
    break;
    }
    }
    }, this);
    this.records_ = [];
    },
    takeRecords: function() {
    var copyOfRecords = this.records_;
    this.records_ = [];
    return copyOfRecords;
    }
    };
    function MutationRecord(type, target) {
    this.type = type;
    this.target = target;
    this.addedNodes = [];
    this.removedNodes = [];
    this.previousSibling = null;
    this.nextSibling = null;
    this.attributeName = null;
    this.attributeNamespace = null;
    this.oldValue = null;
    }
    function copyMutationRecord(original) {
    var record = new MutationRecord(original.type, original.target);
    record.addedNodes = original.addedNodes.slice();
    record.removedNodes = original.removedNodes.slice();
    record.previousSibling = original.previousSibling;
    record.nextSibling = original.nextSibling;
    record.attributeName = original.attributeName;
    record.attributeNamespace = original.attributeNamespace;
    record.oldValue = original.oldValue;
    return record;
    }
    var currentRecord, recordWithOldValue;
    function getRecord(type, target) {
    return currentRecord = new MutationRecord(type, target);
    }
    function getRecordWithOldValue(oldValue) {
    if (recordWithOldValue) return recordWithOldValue;
    recordWithOldValue = copyMutationRecord(currentRecord);
    recordWithOldValue.oldValue = oldValue;
    return recordWithOldValue;
    }
    function clearRecords() {
    currentRecord = recordWithOldValue = undefined;
    }
    function recordRepresentsCurrentMutation(record) {
    return record === recordWithOldValue || record === currentRecord;
    }
    function selectRecord(lastRecord, newRecord) {
    if (lastRecord === newRecord) return lastRecord;
    if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;
    return null;
    }
    function Registration(observer, target, options) {
    this.observer = observer;
    this.target = target;
    this.options = options;
    this.transientObservedNodes = [];
    }
    Registration.prototype = {
    enqueue: function(record) {
    var records = this.observer.records_;
    var length = records.length;
    if (records.length > 0) {
    var lastRecord = records[length - 1];
    var recordToReplaceLast = selectRecord(lastRecord, record);
    if (recordToReplaceLast) {
    records[length - 1] = recordToReplaceLast;
    return;
    }
    } else {
    scheduleCallback(this.observer);
    }
    records[length] = record;
    },
    addListeners: function() {
    this.addListeners_(this.target);
    },
    addListeners_: function(node) {
    var options = this.options;
    if (options.attributes) node.addEventListener("DOMAttrModified", this, true);
    if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true);
    if (options.childList) node.addEventListener("DOMNodeInserted", this, true);
    if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true);
    },
    removeListeners: function() {
    this.removeListeners_(this.target);
    },
    removeListeners_: function(node) {
    var options = this.options;
    if (options.attributes) node.removeEventListener("DOMAttrModified", this, true);
    if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true);
    if (options.childList) node.removeEventListener("DOMNodeInserted", this, true);
    if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true);
    },
    addTransientObserver: function(node) {
    if (node === this.target) return;
    this.addListeners_(node);
    this.transientObservedNodes.push(node);
    var registrations = registrationsTable.get(node);
    if (!registrations) registrationsTable.set(node, registrations = []);
    registrations.push(this);
    },
    removeTransientObservers: function() {
    var transientObservedNodes = this.transientObservedNodes;
    this.transientObservedNodes = [];
    transientObservedNodes.forEach(function(node) {
    this.removeListeners_(node);
    var registrations = registrationsTable.get(node);
    for (var i = 0; i < registrations.length; i++) {
    if (registrations[i] === this) {
    registrations.splice(i, 1);
    break;
    }
    }
    }, this);
    },
    handleEvent: function(e) {
    e.stopImmediatePropagation();
    switch (e.type) {
    case "DOMAttrModified":
    var name = e.attrName;
    var namespace = e.relatedNode.namespaceURI;
    var target = e.target;
    var record = new getRecord("attributes", target);
    record.attributeName = name;
    record.attributeNamespace = namespace;
    var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
    forEachAncestorAndObserverEnqueueRecord(target, function(options) {
    if (!options.attributes) return;
    if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {
    return;
    }
    if (options.attributeOldValue) return getRecordWithOldValue(oldValue);
    return record;
    });
    break;

    case "DOMCharacterDataModified":
    var target = e.target;
    var record = getRecord("characterData", target);
    var oldValue = e.prevValue;
    forEachAncestorAndObserverEnqueueRecord(target, function(options) {
    if (!options.characterData) return;
    if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);
    return record;
    });
    break;

    case "DOMNodeRemoved":
    this.addTransientObserver(e.target);

    case "DOMNodeInserted":
    var changedNode = e.target;
    var addedNodes, removedNodes;
    if (e.type === "DOMNodeInserted") {
    addedNodes = [ changedNode ];
    removedNodes = [];
    } else {
    addedNodes = [];
    removedNodes = [ changedNode ];
    }
    var previousSibling = changedNode.previousSibling;
    var nextSibling = changedNode.nextSibling;
    var record = getRecord("childList", e.target.parentNode);
    record.addedNodes = addedNodes;
    record.removedNodes = removedNodes;
    record.previousSibling = previousSibling;
    record.nextSibling = nextSibling;
    forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) {
    if (!options.childList) return;
    return record;
    });
    }
    clearRecords();
    }
    };
    global.JsMutationObserver = JsMutationObserver;
    if (!global.MutationObserver) {
    global.MutationObserver = JsMutationObserver;
    JsMutationObserver._isPolyfilled = true;
    }
    })(self);

    (function() {
    var needsTemplate = typeof HTMLTemplateElement === "undefined";
    if (/Trident/.test(navigator.userAgent)) {
    (function() {
    var importNode = document.importNode;
    document.importNode = function() {
    var n = importNode.apply(document, arguments);
    if (n.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
    var f = document.createDocumentFragment();
    f.appendChild(n);
    return f;
    } else {
    return n;
    }
    };
    })();
    }
    var needsCloning = function() {
    if (!needsTemplate) {
    var t = document.createElement("template");
    var t2 = document.createElement("template");
    t2.content.appendChild(document.createElement("div"));
    t.content.appendChild(t2);
    var clone = t.cloneNode(true);
    return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0;
    }
    }();
    var TEMPLATE_TAG = "template";
    var TemplateImpl = function() {};
    if (needsTemplate) {
    var contentDoc = document.implementation.createHTMLDocument("template");
    var canDecorate = true;
    var templateStyle = document.createElement("style");
    templateStyle.textContent = TEMPLATE_TAG + "{display:none;}";
    var head = document.head;
    head.insertBefore(templateStyle, head.firstElementChild);
    TemplateImpl.prototype = Object.create(HTMLElement.prototype);
    TemplateImpl.decorate = function(template) {
    if (template.content) {
    return;
    }
    template.content = contentDoc.createDocumentFragment();
    var child;
    while (child = template.firstChild) {
    template.content.appendChild(child);
    }
    template.cloneNode = function(deep) {
    return TemplateImpl.cloneNode(this, deep);
    };
    if (canDecorate) {
    try {
    Object.defineProperty(template, "innerHTML", {
    get: function() {
    var o = "";
    for (var e = this.content.firstChild; e; e = e.nextSibling) {
    o += e.outerHTML || escapeData(e.data);
    }
    return o;
    },
    set: function(text) {
    contentDoc.body.innerHTML = text;
    TemplateImpl.bootstrap(contentDoc);
    while (this.content.firstChild) {
    this.content.removeChild(this.content.firstChild);
    }
    while (contentDoc.body.firstChild) {
    this.content.appendChild(contentDoc.body.firstChild);
    }
    },
    configurable: true
    });
    } catch (err) {
    canDecorate = false;
    }
    }
    TemplateImpl.bootstrap(template.content);
    };
    TemplateImpl.bootstrap = function(doc) {
    var templates = doc.querySelectorAll(TEMPLATE_TAG);
    for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) {
    TemplateImpl.decorate(t);
    }
    };
    document.addEventListener("DOMContentLoaded", function() {
    TemplateImpl.bootstrap(document);
    });
    var createElement = document.createElement;
    document.createElement = function() {
    "use strict";
    var el = createElement.apply(document, arguments);
    if (el.localName === "template") {
    TemplateImpl.decorate(el);
    }
    return el;
    };
    var escapeDataRegExp = /[&\u00A0<>]/g;
    function escapeReplace(c) {
    switch (c) {
    case "&":
    return "&";

    case "<":
    return "<";

    case ">":
    return ">";

    case " ":
    return " ";
    }
    }
    function escapeData(s) {
    return s.replace(escapeDataRegExp, escapeReplace);
    }
    }
    if (needsTemplate || needsCloning) {
    var nativeCloneNode = Node.prototype.cloneNode;
    TemplateImpl.cloneNode = function(template, deep) {
    var clone = nativeCloneNode.call(template, false);
    if (this.decorate) {
    this.decorate(clone);
    }
    if (deep) {
    clone.content.appendChild(nativeCloneNode.call(template.content, true));
    this.fixClonedDom(clone.content, template.content);
    }
    return clone;
    };
    TemplateImpl.fixClonedDom = function(clone, source) {
    if (!source.querySelectorAll) return;
    var s$ = source.querySelectorAll(TEMPLATE_TAG);
    var t$ = clone.querySelectorAll(TEMPLATE_TAG);
    for (var i = 0, l = t$.length, t, s; i < l; i++) {
    s = s$[i];
    t = t$[i];
    if (this.decorate) {
    this.decorate(s);
    }
    t.parentNode.replaceChild(s.cloneNode(true), t);
    }
    };
    var originalImportNode = document.importNode;
    Node.prototype.cloneNode = function(deep) {
    var dom = nativeCloneNode.call(this, deep);
    if (deep) {
    TemplateImpl.fixClonedDom(dom, this);
    }
    return dom;
    };
    document.importNode = function(element, deep) {
    if (element.localName === TEMPLATE_TAG) {
    return TemplateImpl.cloneNode(element, deep);
    } else {
    var dom = originalImportNode.call(document, element, deep);
    if (deep) {
    TemplateImpl.fixClonedDom(dom, element);
    }
    return dom;
    }
    };
    if (needsCloning) {
    HTMLTemplateElement.prototype.cloneNode = function(deep) {
    return TemplateImpl.cloneNode(this, deep);
    };
    }
    }
    if (needsTemplate) {
    window.HTMLTemplateElement = TemplateImpl;
    }
    })();

    (function(scope) {
    "use strict";
    if (!(window.performance && window.performance.now)) {
    var start = Date.now();
    window.performance = {
    now: function() {
    return Date.now() - start;
    }
    };
    }
    if (!window.requestAnimationFrame) {
    window.requestAnimationFrame = function() {
    var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
    return nativeRaf ? function(callback) {
    return nativeRaf(function() {
    callback(performance.now());
    });
    } : function(callback) {
    return window.setTimeout(callback, 1e3 / 60);
    };
    }();
    }
    if (!window.cancelAnimationFrame) {
    window.cancelAnimationFrame = function() {
    return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) {
    clearTimeout(id);
    };
    }();
    }
    var workingDefaultPrevented = function() {
    var e = document.createEvent("Event");
    e.initEvent("foo", true, true);
    e.preventDefault();
    return e.defaultPrevented;
    }();
    if (!workingDefaultPrevented) {
    var origPreventDefault = Event.prototype.preventDefault;
    Event.prototype.preventDefault = function() {
    if (!this.cancelable) {
    return;
    }
    origPreventDefault.call(this);
    Object.defineProperty(this, "defaultPrevented", {
    get: function() {
    return true;
    },
    configurable: true
    });
    };
    }
    var isIE = /Trident/.test(navigator.userAgent);
    if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") {
    window.CustomEvent = function(inType, params) {
    params = params || {};
    var e = document.createEvent("CustomEvent");
    e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);
    return e;
    };
    window.CustomEvent.prototype = window.Event.prototype;
    }
    if (!window.Event || isIE && typeof window.Event !== "function") {
    var origEvent = window.Event;
    window.Event = function(inType, params) {
    params = params || {};
    var e = document.createEvent("Event");
    e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));
    return e;
    };
    window.Event.prototype = origEvent.prototype;
    }
    })(window.WebComponents);

    window.HTMLImports = window.HTMLImports || {
    flags: {}
    };

    (function(scope) {
    var IMPORT_LINK_TYPE = "import";
    var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link"));
    var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill);
    var wrap = function(node) {
    return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node;
    };
    var rootDocument = wrap(document);
    var currentScriptDescriptor = {
    get: function() {
    var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null);
    return wrap(script);
    },
    configurable: true
    };
    Object.defineProperty(document, "_currentScript", currentScriptDescriptor);
    Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor);
    var isIE = /Trident/.test(navigator.userAgent);
    function whenReady(callback, doc) {
    doc = doc || rootDocument;
    whenDocumentReady(function() {
    watchImportsLoad(callback, doc);
    }, doc);
    }
    var requiredReadyState = isIE ? "complete" : "interactive";
    var READY_EVENT = "readystatechange";
    function isDocumentReady(doc) {
    return doc.readyState === "complete" || doc.readyState === requiredReadyState;
    }
    function whenDocumentReady(callback, doc) {
    if (!isDocumentReady(doc)) {
    var checkReady = function() {
    if (doc.readyState === "complete" || doc.readyState === requiredReadyState) {
    doc.removeEventListener(READY_EVENT, checkReady);
    whenDocumentReady(callback, doc);
    }
    };
    doc.addEventListener(READY_EVENT, checkReady);
    } else if (callback) {
    callback();
    }
    }
    function markTargetLoaded(event) {
    event.target.__loaded = true;
    }
    function watchImportsLoad(callback, doc) {
    var imports = doc.querySelectorAll("link[rel=import]");
    var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = [];
    function checkDone() {
    if (parsedCount == importCount && callback) {
    callback({
    allImports: imports,
    loadedImports: newImports,
    errorImports: errorImports
    });
    }
    }
    function loadedImport(e) {
    markTargetLoaded(e);
    newImports.push(this);
    parsedCount++;
    checkDone();
    }
    function errorLoadingImport(e) {
    errorImports.push(this);
    parsedCount++;
    checkDone();
    }
    if (importCount) {
    for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) {
    if (isImportLoaded(imp)) {
    newImports.push(this);
    parsedCount++;
    checkDone();
    } else {
    imp.addEventListener("load", loadedImport);
    imp.addEventListener("error", errorLoadingImport);
    }
    }
    } else {
    checkDone();
    }
    }
    function isImportLoaded(link) {
    return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed;
    }
    if (useNative) {
    new MutationObserver(function(mxns) {
    for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) {
    if (m.addedNodes) {
    handleImports(m.addedNodes);
    }
    }
    }).observe(document.head, {
    childList: true
    });
    function handleImports(nodes) {
    for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
    if (isImport(n)) {
    handleImport(n);
    }
    }
    }
    function isImport(element) {
    return element.localName === "link" && element.rel === "import";
    }
    function handleImport(element) {
    var loaded = element.import;
    if (loaded) {
    markTargetLoaded({
    target: element
    });
    } else {
    element.addEventListener("load", markTargetLoaded);
    element.addEventListener("error", markTargetLoaded);
    }
    }
    (function() {
    if (document.readyState === "loading") {
    var imports = document.querySelectorAll("link[rel=import]");
    for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) {
    handleImport(imp);
    }
    }
    })();
    }
    whenReady(function(detail) {
    window.HTMLImports.ready = true;
    window.HTMLImports.readyTime = new Date().getTime();
    var evt = rootDocument.createEvent("CustomEvent");
    evt.initCustomEvent("HTMLImportsLoaded", true, true, detail);
    rootDocument.dispatchEvent(evt);
    });
    scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;
    scope.useNative = useNative;
    scope.rootDocument = rootDocument;
    scope.whenReady = whenReady;
    scope.isIE = isIE;
    })(window.HTMLImports);

    (function(scope) {
    var modules = [];
    var addModule = function(module) {
    modules.push(module);
    };
    var initializeModules = function() {
    modules.forEach(function(module) {
    module(scope);
    });
    };
    scope.addModule = addModule;
    scope.initializeModules = initializeModules;
    })(window.HTMLImports);

    window.HTMLImports.addModule(function(scope) {
    var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g;
    var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g;
    var path = {
    resolveUrlsInStyle: function(style, linkUrl) {
    var doc = style.ownerDocument;
    var resolver = doc.createElement("a");
    style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver);
    return style;
    },
    resolveUrlsInCssText: function(cssText, linkUrl, urlObj) {
    var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP);
    r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP);
    return r;
    },
    replaceUrls: function(text, urlObj, linkUrl, regexp) {
    return text.replace(regexp, function(m, pre, url, post) {
    var urlPath = url.replace(/["']/g, "");
    if (linkUrl) {
    urlPath = new URL(urlPath, linkUrl).href;
    }
    urlObj.href = urlPath;
    urlPath = urlObj.href;
    return pre + "'" + urlPath + "'" + post;
    });
    }
    };
    scope.path = path;
    });

    window.HTMLImports.addModule(function(scope) {
    var xhr = {
    async: true,
    ok: function(request) {
    return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0;
    },
    load: function(url, next, nextContext) {
    var request = new XMLHttpRequest();
    if (scope.flags.debug || scope.flags.bust) {
    url += "?" + Math.random();
    }
    request.open("GET", url, xhr.async);
    request.addEventListener("readystatechange", function(e) {
    if (request.readyState === 4) {
    var redirectedUrl = null;
    try {
    var locationHeader = request.getResponseHeader("Location");
    if (locationHeader) {
    redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader;
    }
    } catch (e) {
    console.error(e.message);
    }
    next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl);
    }
    });
    request.send();
    return request;
    },
    loadDocument: function(url, next, nextContext) {
    this.load(url, next, nextContext).responseType = "document";
    }
    };
    scope.xhr = xhr;
    });

    window.HTMLImports.addModule(function(scope) {
    var xhr = scope.xhr;
    var flags = scope.flags;
    var Loader = function(onLoad, onComplete) {
    this.cache = {};
    this.onload = onLoad;
    this.oncomplete = onComplete;
    this.inflight = 0;
    this.pending = {};
    };
    Loader.prototype = {
    addNodes: function(nodes) {
    this.inflight += nodes.length;
    for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
    this.require(n);
    }
    this.checkDone();
    },
    addNode: function(node) {
    this.inflight++;
    this.require(node);
    this.checkDone();
    },
    require: function(elt) {
    var url = elt.src || elt.href;
    elt.__nodeUrl = url;
    if (!this.dedupe(url, elt)) {
    this.fetch(url, elt);
    }
    },
    dedupe: function(url, elt) {
    if (this.pending[url]) {
    this.pending[url].push(elt);
    return true;
    }
    var resource;
    if (this.cache[url]) {
    this.onload(url, elt, this.cache[url]);
    this.tail();
    return true;
    }
    this.pending[url] = [ elt ];
    return false;
    },
    fetch: function(url, elt) {
    flags.load && console.log("fetch", url, elt);
    if (!url) {
    setTimeout(function() {
    this.receive(url, elt, {
    error: "href must be specified"
    }, null);
    }.bind(this), 0);
    } else if (url.match(/^data:/)) {
    var pieces = url.split(",");
    var header = pieces[0];
    var body = pieces[1];
    if (header.indexOf(";base64") > -1) {
    body = atob(body);
    } else {
    body = decodeURIComponent(body);
    }
    setTimeout(function() {
    this.receive(url, elt, null, body);
    }.bind(this), 0);
    } else {
    var receiveXhr = function(err, resource, redirectedUrl) {
    this.receive(url, elt, err, resource, redirectedUrl);
    }.bind(this);
    xhr.load(url, receiveXhr);
    }
    },
    receive: function(url, elt, err, resource, redirectedUrl) {
    this.cache[url] = resource;
    var $p = this.pending[url];
    for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
    this.onload(url, p, resource, err, redirectedUrl);
    this.tail();
    }
    this.pending[url] = null;
    },
    tail: function() {
    --this.inflight;
    this.checkDone();
    },
    checkDone: function() {
    if (!this.inflight) {
    this.oncomplete();
    }
    }
    };
    scope.Loader = Loader;
    });

    window.HTMLImports.addModule(function(scope) {
    var Observer = function(addCallback) {
    this.addCallback = addCallback;
    this.mo = new MutationObserver(this.handler.bind(this));
    };
    Observer.prototype = {
    handler: function(mutations) {
    for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) {
    if (m.type === "childList" && m.addedNodes.length) {
    this.addedNodes(m.addedNodes);
    }
    }
    },
    addedNodes: function(nodes) {
    if (this.addCallback) {
    this.addCallback(nodes);
    }
    for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) {
    if (n.children && n.children.length) {
    this.addedNodes(n.children);
    }
    }
    },
    observe: function(root) {
    this.mo.observe(root, {
    childList: true,
    subtree: true
    });
    }
    };
    scope.Observer = Observer;
    });

    window.HTMLImports.addModule(function(scope) {
    var path = scope.path;
    var rootDocument = scope.rootDocument;
    var flags = scope.flags;
    var isIE = scope.isIE;
    var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
    var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]";
    var importParser = {
    documentSelectors: IMPORT_SELECTOR,
    importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]:not([type])", "style:not([type])", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","),
    map: {
    link: "parseLink",
    script: "parseScript",
    style: "parseStyle"
    },
    dynamicElements: [],
    parseNext: function() {
    var next = this.nextToParse();
    if (next) {
    this.parse(next);
    }
    },
    parse: function(elt) {
    if (this.isParsed(elt)) {
    flags.parse && console.log("[%s] is already parsed", elt.localName);
    return;
    }
    var fn = this[this.map[elt.localName]];
    if (fn) {
    this.markParsing(elt);
    fn.call(this, elt);
    }
    },
    parseDynamic: function(elt, quiet) {
    this.dynamicElements.push(elt);
    if (!quiet) {
    this.parseNext();
    }
    },
    markParsing: function(elt) {
    flags.parse && console.log("parsing", elt);
    this.parsingElement = elt;
    },
    markParsingComplete: function(elt) {
    elt.__importParsed = true;
    this.markDynamicParsingComplete(elt);
    if (elt.__importElement) {
    elt.__importElement.__importParsed = true;
    this.markDynamicParsingComplete(elt.__importElement);
    }
    this.parsingElement = null;
    flags.parse && console.log("completed", elt);
    },
    markDynamicParsingComplete: function(elt) {
    var i = this.dynamicElements.indexOf(elt);
    if (i >= 0) {
    this.dynamicElements.splice(i, 1);
    }
    },
    parseImport: function(elt) {
    elt.import = elt.__doc;
    if (window.HTMLImports.__importsParsingHook) {
    window.HTMLImports.__importsParsingHook(elt);
    }
    if (elt.import) {
    elt.import.__importParsed = true;
    }
    this.markParsingComplete(elt);
    if (elt.__resource && !elt.__error) {
    elt.dispatchEvent(new CustomEvent("load", {
    bubbles: false
    }));
    } else {
    elt.dispatchEvent(new CustomEvent("error", {
    bubbles: false
    }));
    }
    if (elt.__pending) {
    var fn;
    while (elt.__pending.length) {
    fn = elt.__pending.shift();
    if (fn) {
    fn({
    target: elt
    });
    }
    }
    }
    this.parseNext();
    },
    parseLink: function(linkElt) {
    if (nodeIsImport(linkElt)) {
    this.parseImport(linkElt);
    } else {
    linkElt.href = linkElt.href;
    this.parseGeneric(linkElt);
    }
    },
    parseStyle: function(elt) {
    var src = elt;
    elt = cloneStyle(elt);
    src.__appliedElement = elt;
    elt.__importElement = src;
    this.parseGeneric(elt);
    },
    parseGeneric: function(elt) {
    this.trackElement(elt);
    this.addElementToDocument(elt);
    },
    rootImportForElement: function(elt) {
    var n = elt;
    while (n.ownerDocument.__importLink) {
    n = n.ownerDocument.__importLink;
    }
    return n;
    },
    addElementToDocument: function(elt) {
    var port = this.rootImportForElement(elt.__importElement || elt);
    port.parentNode.insertBefore(elt, port);
    },
    trackElement: function(elt, callback) {
    var self = this;
    var done = function(e) {
    elt.removeEventListener("load", done);
    elt.removeEventListener("error", done);
    if (callback) {
    callback(e);
    }
    self.markParsingComplete(elt);
    self.parseNext();
    };
    elt.addEventListener("load", done);
    elt.addEventListener("error", done);
    if (isIE && elt.localName === "style") {
    var fakeLoad = false;
    if (elt.textContent.indexOf("@import") == -1) {
    fakeLoad = true;
    } else if (elt.sheet) {
    fakeLoad = true;
    var csr = elt.sheet.cssRules;
    var len = csr ? csr.length : 0;
    for (var i = 0, r; i < len && (r = csr[i]); i++) {
    if (r.type === CSSRule.IMPORT_RULE) {
    fakeLoad = fakeLoad && Boolean(r.styleSheet);
    }
    }
    }
    if (fakeLoad) {
    setTimeout(function() {
    elt.dispatchEvent(new CustomEvent("load", {
    bubbles: false
    }));
    });
    }
    }
    },
    parseScript: function(scriptElt) {
    var script = document.createElement("script");
    script.__importElement = scriptElt;
    script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt);
    scope.currentScript = scriptElt;
    this.trackElement(script, function(e) {
    if (script.parentNode) {
    script.parentNode.removeChild(script);
    }
    scope.currentScript = null;
    });
    this.addElementToDocument(script);
    },
    nextToParse: function() {
    this._mayParse = [];
    return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic());
    },
    nextToParseInDoc: function(doc, link) {
    if (doc && this._mayParse.indexOf(doc) < 0) {
    this._mayParse.push(doc);
    var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc));
    for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
    if (!this.isParsed(n)) {
    if (this.hasResource(n)) {
    return nodeIsImport(n) ? this.nextToParseInDoc(n.__doc, n) : n;
    } else {
    return;
    }
    }
    }
    }
    return link;
    },
    nextToParseDynamic: function() {
    return this.dynamicElements[0];
    },
    parseSelectorsForNode: function(node) {
    var doc = node.ownerDocument || node;
    return doc === rootDocument ? this.documentSelectors : this.importsSelectors;
    },
    isParsed: function(node) {
    return node.__importParsed;
    },
    needsDynamicParsing: function(elt) {
    return this.dynamicElements.indexOf(elt) >= 0;
    },
    hasResource: function(node) {
    if (nodeIsImport(node) && node.__doc === undefined) {
    return false;
    }
    return true;
    }
    };
    function nodeIsImport(elt) {
    return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE;
    }
    function generateScriptDataUrl(script) {
    var scriptContent = generateScriptContent(script);
    return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent);
    }
    function generateScriptContent(script) {
    return script.textContent + generateSourceMapHint(script);
    }
    function generateSourceMapHint(script) {
    var owner = script.ownerDocument;
    owner.__importedScripts = owner.__importedScripts || 0;
    var moniker = script.ownerDocument.baseURI;
    var num = owner.__importedScripts ? "-" + owner.__importedScripts : "";
    owner.__importedScripts++;
    return "\n//# sourceURL=" + moniker + num + ".js\n";
    }
    function cloneStyle(style) {
    var clone = style.ownerDocument.createElement("style");
    clone.textContent = style.textContent;
    path.resolveUrlsInStyle(clone);
    return clone;
    }
    scope.parser = importParser;
    scope.IMPORT_SELECTOR = IMPORT_SELECTOR;
    });

    window.HTMLImports.addModule(function(scope) {
    var flags = scope.flags;
    var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;
    var IMPORT_SELECTOR = scope.IMPORT_SELECTOR;
    var rootDocument = scope.rootDocument;
    var Loader = scope.Loader;
    var Observer = scope.Observer;
    var parser = scope.parser;
    var importer = {
    documents: {},
    documentPreloadSelectors: IMPORT_SELECTOR,
    importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","),
    loadNode: function(node) {
    importLoader.addNode(node);
    },
    loadSubtree: function(parent) {
    var nodes = this.marshalNodes(parent);
    importLoader.addNodes(nodes);
    },
    marshalNodes: function(parent) {
    return parent.querySelectorAll(this.loadSelectorsForNode(parent));
    },
    loadSelectorsForNode: function(node) {
    var doc = node.ownerDocument || node;
    return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors;
    },
    loaded: function(url, elt, resource, err, redirectedUrl) {
    flags.load && console.log("loaded", url, elt);
    elt.__resource = resource;
    elt.__error = err;
    if (isImportLink(elt)) {
    var doc = this.documents[url];
    if (doc === undefined) {
    doc = err ? null : makeDocument(resource, redirectedUrl || url);
    if (doc) {
    doc.__importLink = elt;
    this.bootDocument(doc);
    }
    this.documents[url] = doc;
    }
    elt.__doc = doc;
    }
    parser.parseNext();
    },
    bootDocument: function(doc) {
    this.loadSubtree(doc);
    this.observer.observe(doc);
    parser.parseNext();
    },
    loadedAll: function() {
    parser.parseNext();
    }
    };
    var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer));
    importer.observer = new Observer();
    function isImportLink(elt) {
    return isLinkRel(elt, IMPORT_LINK_TYPE);
    }
    function isLinkRel(elt, rel) {
    return elt.localName === "link" && elt.getAttribute("rel") === rel;
    }
    function hasBaseURIAccessor(doc) {
    return !!Object.getOwnPropertyDescriptor(doc, "baseURI");
    }
    function makeDocument(resource, url) {
    var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE);
    doc._URL = url;
    var base = doc.createElement("base");
    base.setAttribute("href", url);
    if (!doc.baseURI && !hasBaseURIAccessor(doc)) {
    Object.defineProperty(doc, "baseURI", {
    value: url
    });
    }
    var meta = doc.createElement("meta");
    meta.setAttribute("charset", "utf-8");
    doc.head.appendChild(meta);
    doc.head.appendChild(base);
    doc.body.innerHTML = resource;
    if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {
    HTMLTemplateElement.bootstrap(doc);
    }
    return doc;
    }
    if (!document.baseURI) {
    var baseURIDescriptor = {
    get: function() {
    var base = document.querySelector("base");
    return base ? base.href : window.location.href;
    },
    configurable: true
    };
    Object.defineProperty(document, "baseURI", baseURIDescriptor);
    Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor);
    }
    scope.importer = importer;
    scope.importLoader = importLoader;
    });

    window.HTMLImports.addModule(function(scope) {
    var parser = scope.parser;
    var importer = scope.importer;
    var dynamic = {
    added: function(nodes) {
    var owner, parsed, loading;
    for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) {
    if (!owner) {
    owner = n.ownerDocument;
    parsed = parser.isParsed(owner);
    }
    loading = this.shouldLoadNode(n);
    if (loading) {
    importer.loadNode(n);
    }
    if (this.shouldParseNode(n) && parsed) {
    parser.parseDynamic(n, loading);
    }
    }
    },
    shouldLoadNode: function(node) {
    return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node));
    },
    shouldParseNode: function(node) {
    return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node));
    }
    };
    importer.observer.addCallback = dynamic.added.bind(dynamic);
    var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector;
    });

    (function(scope) {
    var initializeModules = scope.initializeModules;
    var isIE = scope.isIE;
    if (scope.useNative) {
    return;
    }
    initializeModules();
    var rootDocument = scope.rootDocument;
    function bootstrap() {
    window.HTMLImports.importer.bootDocument(rootDocument);
    }
    if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) {
    bootstrap();
    } else {
    document.addEventListener("DOMContentLoaded", bootstrap);
    }
    })(window.HTMLImports);

    window.CustomElements = window.CustomElements || {
    flags: {}
    };

    (function(scope) {
    var flags = scope.flags;
    var modules = [];
    var addModule = function(module) {
    modules.push(module);
    };
    var initializeModules = function() {
    modules.forEach(function(module) {
    module(scope);
    });
    };
    scope.addModule = addModule;
    scope.initializeModules = initializeModules;
    scope.hasNative = Boolean(document.registerElement);
    scope.isIE = /Trident/.test(navigator.userAgent);
    scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);
    })(window.CustomElements);

    window.CustomElements.addModule(function(scope) {
    var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none";
    function forSubtree(node, cb) {
    findAllElements(node, function(e) {
    if (cb(e)) {
    return true;
    }
    forRoots(e, cb);
    });
    forRoots(node, cb);
    }
    function findAllElements(node, find, data) {
    var e = node.firstElementChild;
    if (!e) {
    e = node.firstChild;
    while (e && e.nodeType !== Node.ELEMENT_NODE) {
    e = e.nextSibling;
    }
    }
    while (e) {
    if (find(e, data) !== true) {
    findAllElements(e, find, data);
    }
    e = e.nextElementSibling;
    }
    return null;
    }
    function forRoots(node, cb) {
    var root = node.shadowRoot;
    while (root) {
    forSubtree(root, cb);
    root = root.olderShadowRoot;
    }
    }
    function forDocumentTree(doc, cb) {
    _forDocumentTree(doc, cb, []);
    }
    function _forDocumentTree(doc, cb, processingDocuments) {
    doc = window.wrap(doc);
    if (processingDocuments.indexOf(doc) >= 0) {
    return;
    }
    processingDocuments.push(doc);
    var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]");
    for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) {
    if (n.import) {
    _forDocumentTree(n.import, cb, processingDocuments);
    }
    }
    cb(doc);
    }
    scope.forDocumentTree = forDocumentTree;
    scope.forSubtree = forSubtree;
    });

    window.CustomElements.addModule(function(scope) {
    var flags = scope.flags;
    var forSubtree = scope.forSubtree;
    var forDocumentTree = scope.forDocumentTree;
    function addedNode(node, isAttached) {
    return added(node, isAttached) || addedSubtree(node, isAttached);
    }
    function added(node, isAttached) {
    if (scope.upgrade(node, isAttached)) {
    return true;
    }
    if (isAttached) {
    attached(node);
    }
    }
    function addedSubtree(node, isAttached) {
    forSubtree(node, function(e) {
    if (added(e, isAttached)) {
    return true;
    }
    });
    }
    var hasThrottledAttached = window.MutationObserver._isPolyfilled && flags["throttle-attached"];
    scope.hasPolyfillMutations = hasThrottledAttached;
    scope.hasThrottledAttached = hasThrottledAttached;
    var isPendingMutations = false;
    var pendingMutations = [];
    function deferMutation(fn) {
    pendingMutations.push(fn);
    if (!isPendingMutations) {
    isPendingMutations = true;
    setTimeout(takeMutations);
    }
    }
    function takeMutations() {
    isPendingMutations = false;
    var $p = pendingMutations;
    for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) {
    p();
    }
    pendingMutations = [];
    }
    function attached(element) {
    if (hasThrottledAttached) {
    deferMutation(function() {
    _attached(element);
    });
    } else {
    _attached(element);
    }
    }
    function _attached(element) {
    if (element.__upgraded__ && !element.__attached) {
    element.__attached = true;
    if (element.attachedCallback) {
    element.attachedCallback();
    }
    }
    }
    function detachedNode(node) {
    detached(node);
    forSubtree(node, function(e) {
    detached(e);
    });
    }
    function detached(element) {
    if (hasThrottledAttached) {
    deferMutation(function() {
    _detached(element);
    });
    } else {
    _detached(element);
    }
    }
    function _detached(element) {
    if (element.__upgraded__ && element.__attached) {
    element.__attached = false;
    if (element.detachedCallback) {
    element.detachedCallback();
    }
    }
    }
    function inDocument(element) {
    var p = element;
    var doc = window.wrap(document);
    while (p) {
    if (p == doc) {
    return true;
    }
    p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host;
    }
    }
    function watchShadow(node) {
    if (node.shadowRoot && !node.shadowRoot.__watched) {
    flags.dom && console.log("watching shadow-root for: ", node.localName);
    var root = node.shadowRoot;
    while (root) {
    observe(root);
    root = root.olderShadowRoot;
    }
    }
    }
    function handler(root, mutations) {
    if (flags.dom) {
    var mx = mutations[0];
    if (mx && mx.type === "childList" && mx.addedNodes) {
    if (mx.addedNodes) {
    var d = mx.addedNodes[0];
    while (d && d !== document && !d.host) {
    d = d.parentNode;
    }
    var u = d && (d.URL || d._URL || d.host && d.host.localName) || "";
    u = u.split("/?").shift().split("/").pop();
    }
    }
    console.group("mutations (%d) [%s]", mutations.length, u || "");
    }
    var isAttached = inDocument(root);
    mutations.forEach(function(mx) {
    if (mx.type === "childList") {
    forEach(mx.addedNodes, function(n) {
    if (!n.localName) {
    return;
    }
    addedNode(n, isAttached);
    });
    forEach(mx.removedNodes, function(n) {
    if (!n.localName) {
    return;
    }
    detachedNode(n);
    });
    }
    });
    flags.dom && console.groupEnd();
    }
    function takeRecords(node) {
    node = window.wrap(node);
    if (!node) {
    node = window.wrap(document);
    }
    while (node.parentNode) {
    node = node.parentNode;
    }
    var observer = node.__observer;
    if (observer) {
    handler(node, observer.takeRecords());
    takeMutations();
    }
    }
    var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
    function observe(inRoot) {
    if (inRoot.__observer) {
    return;
    }
    var observer = new MutationObserver(handler.bind(this, inRoot));
    observer.observe(inRoot, {
    childList: true,
    subtree: true
    });
    inRoot.__observer = observer;
    }
    function upgradeDocument(doc) {
    doc = window.wrap(doc);
    flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop());
    var isMainDocument = doc === window.wrap(document);
    addedNode(doc, isMainDocument);
    observe(doc);
    flags.dom && console.groupEnd();
    }
    function upgradeDocumentTree(doc) {
    forDocumentTree(doc, upgradeDocument);
    }
    var originalCreateShadowRoot = Element.prototype.createShadowRoot;
    if (originalCreateShadowRoot) {
    Element.prototype.createShadowRoot = function() {
    var root = originalCreateShadowRoot.call(this);
    window.CustomElements.watchShadow(this);
    return root;
    };
    }
    scope.watchShadow = watchShadow;
    scope.upgradeDocumentTree = upgradeDocumentTree;
    scope.upgradeDocument = upgradeDocument;
    scope.upgradeSubtree = addedSubtree;
    scope.upgradeAll = addedNode;
    scope.attached = attached;
    scope.takeRecords = takeRecords;
    });

    window.CustomElements.addModule(function(scope) {
    var flags = scope.flags;
    function upgrade(node, isAttached) {
    if (node.localName === "template") {
    if (window.HTMLTemplateElement && HTMLTemplateElement.decorate) {
    HTMLTemplateElement.decorate(node);
    }
    }
    if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
    var is = node.getAttribute("is");
    var definition = scope.getRegisteredDefinition(node.localName) || scope.getRegisteredDefinition(is);
    if (definition) {
    if (is && definition.tag == node.localName || !is && !definition.extends) {
    return upgradeWithDefinition(node, definition, isAttached);
    }
    }
    }
    }
    function upgradeWithDefinition(element, definition, isAttached) {
    flags.upgrade && console.group("upgrade:", element.localName);
    if (definition.is) {
    element.setAttribute("is", definition.is);
    }
    implementPrototype(element, definition);
    element.__upgraded__ = true;
    created(element);
    if (isAttached) {
    scope.attached(element);
    }
    scope.upgradeSubtree(element, isAttached);
    flags.upgrade && console.groupEnd();
    return element;
    }
    function implementPrototype(element, definition) {
    if (Object.__proto__) {
    element.__proto__ = definition.prototype;
    } else {
    customMixin(element, definition.prototype, definition.native);
    element.__proto__ = definition.prototype;
    }
    }
    function customMixin(inTarget, inSrc, inNative) {
    var used = {};
    var p = inSrc;
    while (p !== inNative && p !== HTMLElement.prototype) {
    var keys = Object.getOwnPropertyNames(p);
    for (var i = 0, k; k = keys[i]; i++) {
    if (!used[k]) {
    Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k));
    used[k] = 1;
    }
    }
    p = Object.getPrototypeOf(p);
    }
    }
    function created(element) {
    if (element.createdCallback) {
    element.createdCallback();
    }
    }
    scope.upgrade = upgrade;
    scope.upgradeWithDefinition = upgradeWithDefinition;
    scope.implementPrototype = implementPrototype;
    });

    window.CustomElements.addModule(function(scope) {
    var isIE = scope.isIE;
    var upgradeDocumentTree = scope.upgradeDocumentTree;
    var upgradeAll = scope.upgradeAll;
    var upgradeWithDefinition = scope.upgradeWithDefinition;
    var implementPrototype = scope.implementPrototype;
    var useNative = scope.useNative;
    function register(name, options) {
    var definition = options || {};
    if (!name) {
    throw new Error("document.registerElement: first argument `name` must not be empty");
    }
    if (name.indexOf("-") < 0) {
    throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'.");
    }
    if (isReservedTag(name)) {
    throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid.");
    }
    if (getRegisteredDefinition(name)) {
    throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered");
    }
    if (!definition.prototype) {
    definition.prototype = Object.create(HTMLElement.prototype);
    }
    definition.__name = name.toLowerCase();
    if (definition.extends) {
    definition.extends = definition.extends.toLowerCase();
    }
    definition.lifecycle = definition.lifecycle || {};
    definition.ancestry = ancestry(definition.extends);
    resolveTagName(definition);
    resolvePrototypeChain(definition);
    overrideAttributeApi(definition.prototype);
    registerDefinition(definition.__name, definition);
    definition.ctor = generateConstructor(definition);
    definition.ctor.prototype = definition.prototype;
    definition.prototype.constructor = definition.ctor;
    if (scope.ready) {
    upgradeDocumentTree(document);
    }
    return definition.ctor;
    }
    function overrideAttributeApi(prototype) {
    if (prototype.setAttribute._polyfilled) {
    return;
    }
    var setAttribute = prototype.setAttribute;
    prototype.setAttribute = function(name, value) {
    changeAttribute.call(this, name, value, setAttribute);
    };
    var removeAttribute = prototype.removeAttribute;
    prototype.removeAttribute = function(name) {
    changeAttribute.call(this, name, null, removeAttribute);
    };
    prototype.setAttribute._polyfilled = true;
    }
    function changeAttribute(name, value, operation) {
    name = name.toLowerCase();
    var oldValue = this.getAttribute(name);
    operation.apply(this, arguments);
    var newValue = this.getAttribute(name);
    if (this.attributeChangedCallback && newValue !== oldValue) {
    this.attributeChangedCallback(name, oldValue, newValue);
    }
    }
    function isReservedTag(name) {
    for (var i = 0; i < reservedTagList.length; i++) {
    if (name === reservedTagList[i]) {
    return true;
    }
    }
    }
    var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ];
    function ancestry(extnds) {
    var extendee = getRegisteredDefinition(extnds);
    if (extendee) {
    return ancestry(extendee.extends).concat([ extendee ]);
    }
    return [];
    }
    function resolveTagName(definition) {
    var baseTag = definition.extends;
    for (var i = 0, a; a = definition.ancestry[i]; i++) {
    baseTag = a.is && a.tag;
    }
    definition.tag = baseTag || definition.__name;
    if (baseTag) {
    definition.is = definition.__name;
    }
    }
    function resolvePrototypeChain(definition) {
    if (!Object.__proto__) {
    var nativePrototype = HTMLElement.prototype;
    if (definition.is) {
    var inst = document.createElement(definition.tag);
    nativePrototype = Object.getPrototypeOf(inst);
    }
    var proto = definition.prototype, ancestor;
    var foundPrototype = false;
    while (proto) {
    if (proto == nativePrototype) {
    foundPrototype = true;
    }
    ancestor = Object.getPrototypeOf(proto);
    if (ancestor) {
    proto.__proto__ = ancestor;
    }
    proto = ancestor;
    }
    if (!foundPrototype) {
    console.warn(definition.tag + " prototype not found in prototype chain for " + definition.is);
    }
    definition.native = nativePrototype;
    }
    }
    function instantiate(definition) {
    return upgradeWithDefinition(domCreateElement(definition.tag), definition);
    }
    var registry = {};
    function getRegisteredDefinition(name) {
    if (name) {
    return registry[name.toLowerCase()];
    }
    }
    function registerDefinition(name, definition) {
    registry[name] = definition;
    }
    function generateConstructor(definition) {
    return function() {
    return instantiate(definition);
    };
    }
    var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml&quot;;
    function createElementNS(namespace, tag, typeExtension) {
    if (namespace === HTML_NAMESPACE) {
    return createElement(tag, typeExtension);
    } else {
    return domCreateElementNS(namespace, tag);
    }
    }
    function createElement(tag, typeExtension) {
    if (tag) {
    tag = tag.toLowerCase();
    }
    if (typeExtension) {
    typeExtension = typeExtension.toLowerCase();
    }
    var definition = getRegisteredDefinition(typeExtension || tag);
    if (definition) {
    if (tag == definition.tag && typeExtension == definition.is) {
    return new definition.ctor();
    }
    if (!typeExtension && !definition.is) {
    return new definition.ctor();
    }
    }
    var element;
    if (typeExtension) {
    element = createElement(tag);
    element.setAttribute("is", typeExtension);
    return element;
    }
    element = domCreateElement(tag);
    if (tag.indexOf("-") >= 0) {
    implementPrototype(element, HTMLElement);
    }
    return element;
    }
    var domCreateElement = document.createElement.bind(document);
    var domCreateElementNS = document.createElementNS.bind(document);
    var isInstance;
    if (!Object.__proto__ && !useNative) {
    isInstance = function(obj, ctor) {
    if (obj instanceof ctor) {
    return true;
    }
    var p = obj;
    while (p) {
    if (p === ctor.prototype) {
    return true;
    }
    p = p.__proto__;
    }
    return false;
    };
    } else {
    isInstance = function(obj, base) {
    return obj instanceof base;
    };
    }
    function wrapDomMethodToForceUpgrade(obj, methodName) {
    var orig = obj[methodName];
    obj[methodName] = function() {
    var n = orig.apply(this, arguments);
    upgradeAll(n);
    return n;
    };
    }
    wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode");
    wrapDomMethodToForceUpgrade(document, "importNode");
    document.registerElement = register;
    document.createElement = createElement;
    document.createElementNS = createElementNS;
    scope.registry = registry;
    scope.instanceof = isInstance;
    scope.reservedTagList = reservedTagList;
    scope.getRegisteredDefinition = getRegisteredDefinition;
    document.register = document.registerElement;
    });

    (function(scope) {
    var useNative = scope.useNative;
    var initializeModules = scope.initializeModules;
    var isIE = scope.isIE;
    if (useNative) {
    var nop = function() {};
    scope.watchShadow = nop;
    scope.upgrade = nop;
    scope.upgradeAll = nop;
    scope.upgradeDocumentTree = nop;
    scope.upgradeSubtree = nop;
    scope.takeRecords = nop;
    scope.instanceof = function(obj, base) {
    return obj instanceof base;
    };
    } else {
    initializeModules();
    }
    var upgradeDocumentTree = scope.upgradeDocumentTree;
    var upgradeDocument = scope.upgradeDocument;
    if (!window.wrap) {
    if (window.ShadowDOMPolyfill) {
    window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded;
    window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded;
    } else {
    window.wrap = window.unwrap = function(node) {
    return node;
    };
    }
    }
    if (window.HTMLImports) {
    window.HTMLImports.__importsParsingHook = function(elt) {
    if (elt.import) {
    upgradeDocument(wrap(elt.import));
    }
    };
    }
    function bootstrap() {
    upgradeDocumentTree(window.wrap(document));
    window.CustomElements.ready = true;
    var requestAnimationFrame = window.requestAnimationFrame || function(f) {
    setTimeout(f, 16);
    };
    requestAnimationFrame(function() {
    setTimeout(function() {
    window.CustomElements.readyTime = Date.now();
    if (window.HTMLImports) {
    window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime;
    }
    document.dispatchEvent(new CustomEvent("WebComponentsReady", {
    bubbles: true
    }));
    });
    });
    }
    if (document.readyState === "complete" || scope.flags.eager) {
    bootstrap();
    } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) {
    bootstrap();
    } else {
    var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded";
    window.addEventListener(loadEvent, bootstrap);
    }
    })(window.CustomElements);

    (function(scope) {
    var style = document.createElement("style");
    style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n";
    var head = document.querySelector("head");
    head.insertBefore(style, head.firstChild);
    })(window.WebComponents); </script>

    <!-- Vulcanized includes -->
    <link rel="import" href="/v3/include/polymer.min.html?v=1741893735"/>
    <link rel="import" href="/v3/include/bubble.min.html?v=1750953470"/>

    <link rel="import" href="/v3/include/bubble.full.min.html?v=1750953470"/>
    <script src="/v3/shell/lib/jspdf/jspdf.umd.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sharer.js@latest/sharer.min.js"></script&gt;

    <script>
    window.fullTime = 1750953470;
    window.language = 'en';
    window.languageFull = 'English';
    </script>

    <!-- Intercom -->
    <script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/l7psurdd&#039;;var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>

    <!-- Google Analytics -->
    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js&#039;,'ga');
    ga('set', 'campaignSource', 'shared-link' );
    ga('set', 'campaignMedium', 'link' );
    ga('create', 'UA-76870738-1', 'auto');
    ga('send', 'pageview');
    window.includeMinMode = true;
    </script>
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-9TJV31RFKZ"></script&gt;
    <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'G-9TJV31RFKZ');
    </script>

    <script type="text/javascript">
    window.blockedEmailRegex = "/^\\d+@qq.com$/i".replace( /(\/i$)|(^\/)/g, '' );
    window.beaconSuggestions = {
    "any": {
    "any": [],
    "editor": ['5b93e2470428631d7a8adba2', '5b94610b0428631d7a8add2c', '5b93e8eb2c7d3a03f89e96b2', '5b9a62cc0428631d7a8b11a6', '5b9b21462c7d3a03f89ec275', '5b9d21400428631d7a8b2ca4']
    },
    "loggedOut": { "/": ['5b93e2470428631d7a8adba2', '5baa21ba2c7d3a04dd5aee7b', '5ba848c42c7d3a04dd5adf91', '5b9468600428631d7a8add45'] },
    "loggedIn": {
    "free": {},
    "premium": {},
    "any": { "/": ['5b9464490428631d7a8add3a', '5b9d3aa00428631d7a8b2cdb', '5b9460402c7d3a03f89e97dd', '5b9d21400428631d7a8b2ca4', '5ba7dc132c7d3a04dd5ade91'] }
    }
    }
    window.getVars = {"s":"15391507","utm_source":"shared-link","utm_medium":"link","sh":"131c",};
    </script>
    <script type="text/javascript">!function(e,t,n){function a(){var e=t.getElementsByTagName("script")[0],n=t.createElement("script");n.type="text/javascript",n.async=!0,n.src="https://beacon-v2.helpscout.net&quot;,e.parentNode.insertBefore(n,e)}if(e.Beacon=n=function(t,n,a){e.Beacon.readyQueue.push({method:t,options:n,data:a})},n.readyQueue=[],"complete"===t.readyState)return a();e.attachEvent?e.attachEvent("onload",a):e.addEventListener("load",a,!1)}(window,document,window.Beacon||function(){});</script>
    <style>
    /* override beacon position */
    .BeaconFabButtonFrame { bottom: 22px !important; left: 16px !important; }
    @media print {
    #beacon-container { display: none !important; }
    }
    body response { display: none; }
    </style>

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css&quot; integrity="sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X" crossorigin="anonymous">
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.js&quot; integrity="sha384-Qsn9KnoKISj6dI8g7p1HBlNpVx0I8p1SvlwOldgi3IorMle61nQy4zEahWYtljaz" crossorigin="anonymous"></script>
    </head>

    <body>

    <!-- Loading spinner -->
    <svg width="32px" height="32px" xmlns="http://www.w3.org/2000/svg&quot; viewBox="0 0 24 24"
    preserveAspectRatio="xMidYMid" id="loadingSpinner" style="position: absolute; left: 50%; top: 50%; margin: -16px 0 0 -16px;">

    <g>
    <circle cx="20" cy="12" r="4" fill="#2d83bd"/>
    <path fill="#2d83bd" fill-opacity="0.7" d="M20,8c1.11,0,2.11,0.45,2.83,1.18c0.26-0.96,0.17-2-0.34-2.94c-1.05-1.94-3.48-2.66-5.42-1.61
    c-1.94,1.05-2.66,3.48-1.61,5.42c0.19,0.35,0.43,0.64,0.69,0.9C16.62,9.25,18.16,8,20,8z"/>
    <path fill="#2d83bd" fill-opacity="0.4" d="M17.07,4.62c0.97-0.53,2.07-0.61,3.05-0.31c-0.23-0.97-0.81-1.85-1.71-2.44
    c-1.86-1.2-4.33-0.67-5.53,1.19c-1.2,1.86-0.67,4.33,1.19,5.53c0.33,0.21,0.68,0.35,1.03,0.46C14.7,7.33,15.45,5.5,17.07,4.62z"/>
    <path fill="#2d83bd" fill-opacity="0.1" d="M12.88,3.06c0.61-0.94,1.54-1.53,2.55-1.74c-0.66-0.74-1.58-1.24-2.64-1.32
    c-2.2-0.18-4.13,1.46-4.31,3.66s1.46,4.13,3.66,4.31C12.52,8,12.9,7.95,13.27,7.88C12.1,6.57,11.88,4.6,12.88,3.06z"/>

    <animateTransform attributeName="transform"
    type="rotate"
    from="0 12 12"
    to="360 12 12"
    begin="0s"
    dur="0.5s"
    repeatCount="indefinite"
    />
    </g>
    </svg>

    <!-- Shell controller instance -->
    <shell-controller unresolved

    amazon-aws-url="https://s3-us-west-2.amazonaws.com/bubblus/&quot;
    intercom-app-id="l7psurdd"
    session-id="i2q761lnvkj6r6chk7f2qldmr5"
    visitor-id="294382736633"

    app-version="polymer.min.html?v=1741893735;bubble.min.html?v=1750953470"

    firebase-key="AIzaSyAVpdrCsd7ywygG8UVacUg-BKb1XGiN-Yc"
    firebase-auth="bubblus-39a05.firebaseapp.com"
    firebase-database="https://bubblus-39a05.firebaseio.com&quot;
    firebase-storage="bubblus-39a05.appspot.com"

    stripe-key="pk_live_23iuPQnrTcXDSx013rbccpBG"

    server-time="1751950736"

    initial-hash=""
    full-site-loaded="true"

    default-templates="Organization Chart:13468316;Process:14801258;Brainwriting:13468489;Circle Layout:13468348;Flow Chart:13468330;Grid Layout:13468342;Life Cycle:13468406;Outline Right Align:13468357;Project Roadmap:13468328;Sitemap:13468324;Tree View:13468358;1960823"

    keep-alive-interval="120"
    language="en"
    >

    </shell-controller>
    <response><title>Bookmarks

    Cuando lance mi primera pagina web, cometi todos los errores posibles: mala estructura, sin palabras clave, sin enlaces internos, y con tiempos de carga eternos. Por eso nadie la encontraba en Google. No tenia ni idea de como posicionar mi pagina web… hasta que empece a estudiar SEO en serio.

    Lo primero que entendi fue que el contenido es la base del posicionamiento, pero no cualquier contenido. Tiene que estar optimizado: con titulos claros, subtitulos (H2, H3), uso correcto de palabras clave y, sobre todo, pensado para responder lo que la gente realmente busca en los motores de busqueda.

    Despues me enfoque en mejorar la velocidad de carga, hacer que mi web sea responsive (adaptable a moviles) y corregir errores tecnicos que estaban perjudicando mi SEO sin que lo supiera.

    Tambien trabaje el SEO off-page: consegui backlinks desde blogs del mismo sector, cree contenido que otros quisieran enlazar y comparti mis articulos en comunidades relevantes.

    En menos de 4 meses, pase de estar en la pagina 7 de Google a la primera pagina para varias palabras clave importantes. Y lo mejor: sin gastar en anuncios.

    Por eso abri un blog donde explico cada paso, con herramientas gratuitas, ejemplos reales y consejos practicos.

    Si quieres aprender como posicionar tu pagina web sin morir en el intento, te invito a leerlo. Si yo lo logre desde cero, tu tambien puedes hacerlo.

    #100156 返信
    Harryneirl
    ゲスト

    В нашей клинике "Сила воли" в Иркутске вы можете получить помощь как в стационаре, так и на дому. Мы предлагаем два вида услуг:
    Ознакомиться с деталями - [url=https://kapelnica-ot-zapoya-irkutsk3.ru/]врача капельницу от запоя[/url]

    #100169 返信
    DanielRuica
    ゲスト

    Терапия наркотической зависимости — не просто избавление от тяги, а глубокий восстановительный процесс, включающий физическую, психическую и социальную реабилитацию. В Ярославле помощь наркозависимым оказывается в различных учреждениях, однако не все из них обеспечивают одинаково высокий уровень качества. Как показывает практика, эффективность лечения во многом зависит от грамотно подобранной программы и профессионализма команды.
    Разобраться лучше - [url=https://lechenie-narkomanii-yaroslavl0.ru/]центр лечения наркомании ярославль.[/url]

    #100172 返信
    Jameslop
    ゲスト

    Когда организм на пределе, важна срочная помощь в Москве — это команда опытных наркологов, которые помогут быстро и мягко выйти из запоя без вреда для здоровья.
    Детальнее - [url=https://kapelnica-ot-zapoya-lyubercy13.ru/]kapelnicza-ot-zapoya moskva[/url]

    #100174 返信
    vivodzapojchelyabinskCig
    ゲスト

    вывод из запоя круглосуточно челябинск
    vivod-iz-zapoya-chelyabinsk002.ru
    вывод из запоя круглосуточно

    #100175 返信
    internetFek
    ゲスト

    Советы по выбору интернет-провайдера в новосибирске без скрытых платежей Выбор провайдера интернета в новосибирске - это ключевой момент для пользователей. В новосибирске существует большое количество провайдеров, предлагающих различные тарифы на интернет. Как избежать скрытых платежей и неожиданных комиссий? Начните с изучения прозрачности условий подключения интернета. Изучите все тарифы на интернет, сравните провайдеров, обращая внимание на возможные скрытые платежи. Используйте рейтинги и отзывы клиентов, чтобы сделать осознанный выбор. провайдеры домашнего интернета новосибирск Не забывайте про качество соединения и цену подключения. Доступный интернет в новосибирске может быть хорошим, но внимательно изучите условия. Определяйтесь с провайдером, который предлагает услуги без скрытых платежей, чтобы не столкнуться с сюрпризами.

    #100177 返信
    Matthewunduh
    ゲスト

    Дополнительно выясняются аллергические реакции, приём других препаратов и предпочтения пациента по времени визита врача.
    Детальнее - [url=https://kapelnica-ot-zapoya-voronezh3.ru/]врача капельницу от запоя[/url]

15件の投稿を表示中 - 24,481 - 24,495件目 (全24,508件中)
返信先: dfecwecrwで#68966に返信
あなたの情報: