No OneTemporary

File Metadata

Created
Fri, Jun 21, 8:09 PM
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/.commit-template b/.commit-template
index f34fbea7f..1048e02b8 100644
--- a/.commit-template
+++ b/.commit-template
@@ -1,37 +1,39 @@
+
+
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# You MUST wrap all lines at 72 characters.
# Please see http://techbase.kde.org/Policies/Commit_Policy
#
# ==[ Subject: One line only short meaningful description for logs ]===|
# ==[ Blank: Follow the Subject with a blank line, do NOT remove ]=====|
# ==[ Details: Describe what changed and explain why it changed]=======|
# ==[ Fields: Uncomment and edit where applicable ]====================|
#
# --[ Close bug in bugs.kde.org as fixed ]-----------------------------|
#BUG: <bug number>
#FIXED-IN: <optional release version>
#
# --[ Add to release changelog optionally close wish in bugs.kde.org ]-|
#FEATURE: <optional bug number>
#FIXED-IN: <optional release version>
#
# --[ Copy commit message to a bug or wish in bugs.kde.org ]-----------|
#CCBUG: <bug number>
#
# --[ Copy commit message to an email address ]------------------------|
#CCMAIL: <email>
#
# --[ Close a review on git.reviewboard.kde.org as submitted ]---------|
#REVIEW: <review number>
#
# --[ Notify documentation team of user visible changes ]--------------|
#GUI:
#
# --[ Notify Commit Digest team of something interesting ]-------------|
#DIGEST:
diff --git a/TODO.org b/TODO.org
new file mode 100644
index 000000000..30b095141
--- /dev/null
+++ b/TODO.org
@@ -0,0 +1,23 @@
+* Blockers
+** DONE implement comments on news posts
+** DONE blog post describing new site
+** DONE edit meta pages
+* Nice-to-have
+** TODO Run link checker and fix all broken links (Right now we don't resolve Drupal comment anchor links & misc other broken links, nothing major)
+** DONE make the footer a bit more viable, as its a bit empty
+** DONE replace the screenshot placeholder in the index
+** DONE News post headers don't need to be anchor links
+
+** TODO implement search capability
+** TODO continue to refine and edit the content
+** TODO migrate all images off flickr/imgur
+** DONE Link to google drive repo to download Pre-Release Bundles is missing.
+** DONE Add an ability to subscribe to digikam news and posts on the website.
+** DONE The Meta subchapters should not be hidden behind the main "Meta" topic in the bottom menu bar.
+** DONE In my opinion the meta chapters would fit better under Documentation.
+** DONE About subtopics should be alphabetically ordered (now it is maybe ordered by importance, but I think that's confusing).
+** TODO (LOW PRIORITY) In the download page the two-line "Linux AppImage" resulting in non-aligned 64-/32-bit links looks not so nice.
+** TODO Make legacy comments prettier
+** TODO Restyle news/post meta (author, publish date stamp, social share links)
+** TODO Center Recipes book image in sidebar
+** TODO Towards the skinnier end of the medium grid layout size, the header doesn't look good
diff --git a/archetypes/news.md b/archetypes/news.md
index 286730427..5decdceb1 100644
--- a/archetypes/news.md
+++ b/archetypes/news.md
@@ -1,7 +1,7 @@
---
date: ""
title: """
author: """
description: ""
-category: ""
+category: "news"
---
diff --git a/config.yaml b/config.yaml
index d99e77da3..9921d88d8 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,17 +1,12 @@
baseurl: http://digikam.org
languageCode: en-us
title: digiKam
-copyright: "Except where otherwise noted, content on this site is licensed under a [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by-sa/4.0/)."
theme: "hugo-theme-digikam"
taxonomies:
tag: "tags"
category: "categories"
params:
custom_navbar: true
sidebar:
menu: ""
-menu:
- sidebar:
- - name: RSS
- url: https://digikam.org/feed.xml
...
diff --git a/content/about/_index.md b/content/about/_index.md
new file mode 100644
index 000000000..69170045c
--- /dev/null
+++ b/content/about/_index.md
@@ -0,0 +1,27 @@
+---
+date: "2017-03-22T13:13:45-06:00"
+title: "About"
+author: "digiKam"
+description: "Learn about digiKam"
+category: "about"
+aliases: "/about"
+menu: "navbar"
+---
+
+### What is digiKam?
+
+digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and macOS X. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.
+
+### Highlights
+
+You can use digiKam's import capabilities to easily transfer photos, raw files, and videos directly from your camera and external storage devices (SD cards, USB disks, etc.). The application allows you to configure import settings and rules that process and organize imported items on-the-fly.
+
+digiKam organizes photos, raw files, and videos into albums. But the application also features powerful tagging tools that allow you to assign tags, ratings, and labels to photos and raw files. You can then use filtering functionality to quickly find items that match specific criteria.
+
+In addition to filtering functionality, digiKam features powerful searching capabilities that let you search the photo library by a wide range of criteria. You can search photos by tags, labels, rating, data, location, and even specific EXIF metadata. You can also combine several criteria for more advanced searches.
+
+digiKam can handle raw files, and the application uses the excellent [LibRaw](https://www.libraw.org/) library for decoding raw files. The library is actively maintained and regularly updated to include support for the latest camera models.
+
+The application provides a comprehensive set of editing tools. This includes basic tools for adjusting colors, cropping, and sharpening as well as advanced tools for lens correction, curves adjustment, panorama stitching, and much more.
+
+Extended functionality in digiKam is implemented via [Kipi plugins](https://projects.kde.org/projects/extragear/graphics/kipi-plugins). These plugins are shared by other KDE applications, including [Gwenview](https://userbase.kde.org/Gwenview) and [KPhotoAlbum](https://www.kphotoalbum.org/). You can easily customize digiKam by enable and disable individual plugins.
diff --git a/content/about/about.md b/content/about/about.md
deleted file mode 100644
index 4e0694e14..000000000
--- a/content/about/about.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-date: "2017-03-22T13:13:45-06:00"
-title: "About"
-author: "digiKam"
-description: "Find out more about digiKam photo management application!"
-category: "about"
-aliases: "/about"
-menu: "navbar"
----
-
-<!-- <img border="0" align="right" id="txtimg" src="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/entry/data/pics/logo-digikam.png" alt="logo"/> -->
-
-digiKam is an advanced digital photo management application for Linux, Windows, and Mac-OSX.
-
-The people who inspired digiKam's design are the photographers like you who want to view, manage, edit, enhance, organize, tag, and share photographs under Linux systems.
-
-You can take a look into the digiKam <a href="?q=about/overview">Overview</a> page to take a tour or the <a href="?q=about/features">Features</a> page to see more advanced information about.
diff --git a/content/about/awards.md b/content/about/awards.md
deleted file mode 100644
index 41d6406f0..000000000
--- a/content/about/awards.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-date: "2017-03-21"
-title: "DigiKam awards and reviews"
-author: "digiKam"
-description: "Awards and reviews of the digiKam software."
-category: "about"
-aliases: "/about/awards"
----
-
-<div class="content"><h3>Awards received by digiKam</h3>
-<p>
-</p><ul>
- <li><a href="http://www.linuxjournal.com/slideshow/readers-choice-2012?page=12">Linux Journal 2012 Readers Choice</a></li>
- <li><a href="http://www.linuxjournal.com/slideshow/readers-choice-2011?page=11">Linux Journal 2011 Readers Choice</a></li>
- <li><a href="http://www.linuxjournal.com/content/readers-choice-awards-2010">Linux Journal 2010 Readers Choice</a></li>
- <li><a href="/?q=node/314">TUX 2008 Readers Choice</a></li>
- <li><a href="/?q=node/31">TUX 2005 Readers Choice</a></li>
-</ul>
-<p></p>
-
-<h3>digiKam reviews</h3>
-
-<br><b>2005</b><br>
-<p></p><ul>
-
- <li><a href="http://digikam3rdparty.free.fr/Documents/TuxMagazineArticle-digiKam.pdf">Article from Tux Magazine</a></li>
-
- <li><a href="http://digikam3rdparty.free.fr/Documents/LPMagazineArticle-digiKam.pdf">Article from Linux Pratique (French)</a></li>
-
- <li><a href="http://digikam3rdparty.free.fr/Documents/LXFMagazineArticle-digiKam.pdf">Article from Linux Format Magazine</a></li>
-
-</ul><p></p>
-<br><b>2006</b><br>
-<p></p><ul>
-
- <li><a href="http://cyberborean.wordpress.com/2006/04/27/tools-digikam-manage-your-photos">Article from Cyberborean Chronicles : Manage your photos</a></li>
-
- <li><a href="http://www.gienux.org/site/index.php?itemid=77">Article from gienux.org : gérer vos photos et images numériques (French)</a></li>
-
- <li><a href="http://canllaith.org/?page_id=16">Blog from Canllaith.org : Photography management using digiKam 0.8.2</a></li>
-
-</ul><p></p>
-<br><b>2007</b><br>
-<p></p><ul>
-
- <li><a href="http://linux.vilars.com/dotclear/index.php?2007/01/03/6-color-management-workflow-using-digikam"> Blog from Nicolas Vilars : Color Management Workflow using digiKam 0.9.0</a></li>
-
- <li><a href="http://linux.vilars.com/dotclear/index.php?2007/01/08/8-io-files-settings-advanced-options-how-to-get-the-most-out-of-your-pictures"> Blog from Nicolas Vilars : RAW files decoding settings using digiKam 0.9.0</a></li>
-
- <li><a href="http://www.szdavid.com/wordpress/2007/01/05/digikam-09-la-classe/">Blog from Szdavid: digiKam 0.9 la classe (French), report from a gnome user</a></li>
-
- <li><a href="http://www.declencheur.com/clic/archives/2007/03/digikam-le-catalogueur-libre">Gilles Caulier interview in French about digiKam 0.9.x (podcast from declencheur.com)</a></li>
-
- <li><a href="http://www.linuxgraphics.ru/news.php?readmore=407">digiKam 0.9.2 review by Alexandre Prokoudine (Russian)</a></li>
-
- <li><a href="http://www.mscgizcast.com/2007/06/msc-giz-cast-episode-15-digikam.html">Podcast about an Ubuntu user which use digiKam</a></li>
-
- <li><a href="http://www.nautile.org/Utilisation-basique-de-Digikam.html">Notice for beginners about to use digiKam (French)</a></li>
-
- <li><a href="/?q=node/239">digiKam 0.9.2 favorably compared by c't magazine #14 to Kphotoalbum, Gthumb, F-Spot, Picasa (German)</a></li>
-
-<li><a href="http://www.freesoftwaremagazine.com/articles/manage_your_photos_with_digikam">Article from freesoftwaremagazine.com about how to manage your photos with digiKam 0.9.2</a></li>
-
-<li><a href="http://www.linuxplanet.com/linuxplanet/tutorials/6424/1">Article from linuxplanet.com about digital photo-management using digiKam</a></li>
-
-<li><a href="http://www.xwing.info/index.php?p=digikam">Tutorials from xwing.info about Raw Workflow and Color Management under digiKam (French)</a></li>
-
-<li><a href="http://www.associatedcontent.com/article/223272/digikam_an_iphoto_replacement_for_linux.html">digiKam: an iphoto replacement for Linux</a></li>
-
-</ul><p></p>
-<br><b>2008</b><br>
-<p></p><ul>
-
-<li><a href="http://polishlinux.org/kde/kde-4-tour-digikam-010">digiKam 0.10: port to KDE4 review</a></li>
-
-<li><a href="http://www.questionsphoto.com/article/144-linux-pour-les-photographes-troisieme-partie">digiKam 0.9.4 review (French)</a></li>
-
-
-<li><a href="http://blog.roozeec.fr/2008/07/02/album-photo-picassaweb-et-digikam">digiKam and PicasaWeb export plugin (French)</a></li>
-
-<li><a href="http://www.ubuntuproductivity.com/journal/ubuntu/07/2008/ubuntu-photo-manager-experiment/">digiKam is not even considered in this FOSS for photos review, but read the reader comments!</a></li>
-
-<li><a href="http://www.kdedevelopers.org/node/3612">digiKam Levels adjust tutorial by Unai Garro</a></li>
-
-<li><a href="http://www.kdedevelopers.org/node/3618">digiKam Curves adjust tutorial by Unai Garro</a></li>
-
-<li><a href="http://www.kdedevelopers.org/node/3655">digiKam White Balance tutorial by Unai Garro</a></li>
-
-<li><a href="http://www.ugarro.com/blog/blog4.php/2008/09/06/photo-kde-tutorial-1-4-brightness-contra">digiKam Brightness/Contrast/Gamma and Hue/Saturation/Lightness tutorial by Unai Garro</a></li>
-
-<li><a href="http://njanes.free.fr/wordpress2/?p=33">How to install pre-compiled digiKam under Microsoft Windows (French)</a></li>
-
-<li><a href="http://www.ixbt.com/soft/linux-photo-3.shtml">digiKam 0.9.3 review (Russian)</a></li>
-
-</ul><p></p>
-
-<br><b>2009</b><br>
-<p></p><ul>
-
-<li><a href="http://www.jesusda.com/blog/index.php?id=284">How to create a Calendar with digiKam (Spanish)</a></li>
-<li><a href="http://colegota.fotolibre.net/como/como-georreferenciar-vuestas-fotos-con-rutas-gps-y-digikam/">How to geolocalize images with digiKam (Spanish)</a></li>
-<li><a href="http://larrazun.blogspot.com/2009/01/ordenando-nuestras-fotografias.html">Introduction to digiKam for KDE4 (Spanish)</a></li>
-<li><a href="http://ningning.org/blog2/2009/02/09/software-review-digikam-linux-users-lightroom">digiKam: Linux User’s Lightroom ++</a></li>
-<li><a href="http://suovainaja.blogspot.com/2009/03/i-wish-i-had-camera-now.html">digiKam 0.10.0 review</a></li>
-<li><a href="http://koplowicz.com/2009/03/15/perfect-color-correction-in-one-step">Levels and Curves adjustments with digiKam</a></li>
-<li><a href="http://www.genbeta.com/linux/digikam-010-por-fin-soporte-para-kde4-y-muchas-novedades-mas">digiKam 0.10.0 review (Spanish)</a></li>
-<li><a href="http://prokoudine.info/blog/?p=129">Alexandre Prokoudine talking about digiKam+libkdcraw using LibRaw for Raw workflow</a></li>
-<li><a href="http://zwabel.wordpress.com/2009/04/06/kde-for-painters">Review of reverse perspective tool from digiKam image editor</a></li>
-<li><a href="http://photographsbyme.com/2009/04/19/digikam-on-windows">Install and use digiKam under Windows</a></li>
-<li><a href="http://gunthera.wordpress.com/2009/04/24/digikam-kombajn-fotograficzny">digiKam 0.10.0 review (Polish)</a></li>
-<li><a href="http://www.ugarro.com/blog/blog4.php/2009/06/17/photo-kde-tutorial-1-5-perspective-adjustment">digiKam Perspective adjust tutorial by Unai Garro</a></li>
-<li><a href="http://www.dedoimedo.com/computers/digikam.html">digiKam is da blast</a></li>
-<li><a href="http://temporaryland.wordpress.com/2009/09/03/open-source-photo-processing-comes-of-age">digiKam 1.0.0-beta release review</a></li>
-<li><a href="http://maketecheasier.com/use-digikam-export-photos-flickr-picasaweb-and-facebook/2009/09/14">How to Use digiKam 1.0.0 to Export Photos to Flickr, PicasaWeb, and Facebook</a></li>
-<li><a href="http://www.shutter-speed.ch/wordpress/?p=887">digiKam review in German</a></li>
-<li><a href="http://www.gpaumier.org/blog/297_digikam-the-perfect-tool-for-wikimedia-commons-photographers">
-digiKam, the perfect tool for Wikimedia Commons photographers</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2009/11/03/geotagging-photos-with-digikam">
-Geotagging images with digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2009/11/04/finding-geotagged-photos-in-digikam">
-How to find geotagged images with digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2009/11/09/color-management-in-digikam">
-How to use Color Management in digiKam</a></li>
-<li><a href="http://lwn.net/Articles/363460">
-Article on LWN about digiKam 1.0.0</a></li>
-<li><a href="http://hitchedhiker.com/2009/12/29/photography-with-digikam">
-digiKam 1.0.0 review</a></li>
-<li><a href="http://maketecheasier.com/two-ways-to-edit-multiple-photos-with-digikam/2009/12/21">
-Batch process in digiKam 1.0.0</a></li>
-
-</ul><p></p>
-
-<br><b>2010</b><br>
-<p></p><ul>
-
-<li><a href="http://pysnippet.blogspot.com/2010/01/digikam-light-table.html">Do you know digiKam Light Table?</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/01/09/searching-and-filtering-photos-in-digikam-%E2%80%94-part-2">digiKam search tools review</a></li>
-<li><a href="http://hitchedhiker.com/2010/01/17/batch-actions-digikam">
-Batch Queue Manager review in digiKam 1.0.0</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/05/25/exposure-blending-with-digikam">
-How to make Pseudo HDR image with digiKam</a></li>
-<li><a href="http://www.linux-magazine.com/Online/Blogs/Productivity-Sauce-Dmitri-s-open-source-blend-of-productive-computing/Perfect-Cloud-based-Photo-Setup-with-digiKam-and-Piwigo">digiKam and Piwigo export</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/06/03/renaming-photos-with-digikam">Mass files renaming in digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/08/30/correct-lens-distortion-with-digikam">Lens auto correction with digiKam</a></li>
-<li><a href="http://www.sanderdekievit.nl/blog/?cat=10">digiKam versus Aperture</a></li>
-<li><a href="http://www.linux-magazine.com/Online/Blogs/Productivity-Sauce-Dmitri-s-open-source-blend-of-productive-computing/Five-Simple-Photo-Fixes-with-digiKam">digiKam Image Editor review</a></li>
-<li><a href="http://www.ghacks.net/2010/09/11/manage-your-digital-camera-in-linux-with-digikam" "="">Manage your digital camera with digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/06/18/improve-photos-with-digikams-local-contrast-tool">Improve image with Local Contrast tool from digiKam image editor</a></li>
-<li><a href="http://www.grainworks.eu/wp/180/photography/photo-workflow-in-linux-with-digikam">Photo work-flow with digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2010/10/15/using-digikam-with-mysql">Using Mysql with digiKam</a></li>
-<li><a href="http://www.thephotoargus.com/freelance/introduction-to-digikam">Introduction to digiKam</a></li>
-<li><a href="http://gadiempire.blogspot.com/2010/12/digikam.html">digiKam review (Spanish)</a></li>
-<li><a href="http://kde-mg.org/2010/12/21/aplicativo-essencial-digikam">digiKam review (Portuguese)</a></li>
-
-</ul><p></p>
-
-<br><b>2011</b><br>
-<p></p><ul>
-
-<li><a href="http://bellette.tuxfamily.org/carnets/?p=408">How to make HDR images with digiKam (French)</a></li>
-<li><a href="http://hitchedhiker.com/2010/01/17/batch-actions-digikam">digiKam Batch Queue Manager Review</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=587">Wavelets Noise Reduction with digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=587">Reducing Noise Using digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=616">Geotag Photos With digiKam</a></li>
-<li><a href="http://scribblesandsnaps.wordpress.com/2011/02/16/geotag-photos-with-open-gps-tracker-and-digikam">How to use Android Open-GPS-Tracker with digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=688">How to geo-localize your photo with GoogleMaps under digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=711">Straighten Your Pictures Using digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=639">How to find duplicate images on digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=595">Face Detection In digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=735">Creating Calendars Using digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=723">Remove Red Eyes From Your Pictures Using digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=750">Applying Image Effects Using digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=761">Batch Rename Photos In digiKam</a></li>
-<li><a href="http://www.mohamedmalik.com/?p=755">Re-compress Images Using digiKam</a></li>
-<li><a href="http://chrisharvey.id.au/geotagging-ubuntu-and-nikon-nef-with-digikam>Geotagging NEF with digiKam (including screencast)</a></li>
-<li><a href=" http:="" tutorialgeek.blogspot.com="" 2011="" 02="" how-to-add-watermarks-in-batch-to-your.html="">How to Add Watermarks in batch to Your Photos with digiKam</a></li>
-</ul><p></p></div>
diff --git a/content/about/features.md b/content/about/features.md
index 689fb84f4..aa5bcc5e3 100644
--- a/content/about/features.md
+++ b/content/about/features.md
@@ -1,457 +1,164 @@
---
date: "2017-03-21"
title: "Features"
author: "digiKam"
description: "A non-exhaustive list of digiKam features."
category: "about"
aliases: "/features"
---
-<div class="content"><h1>Summary</h1>
-With digiKam you can :
-<ul>
- <li> <a name="import">import pictures</a></li>
- <li> <a name="organize">organize</a> your collection </li>
- <li> <a name="view">view</a> items </li>
- <li> <a name="edit">edit</a> and enhance </li>
- <li> <a name="create">create</a> (slideshows, calendar, print, ...)</li>
- <li> <a name="share">share</a> your creations (using social web services, email, your own web allery, ...)</li>
-</ul>
-<br>
-<h1 id="organize">Organize </h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul><li>
- Organization of Photos in Albums and sub-Albums<br>
- Comments can be added to Albums<br>
- Tags can be added to Albums<br>
- </li></ul>
- </td>
- <td width="40%" align="right">
- <br>
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Exif support<br>
- Makernotes support<br>
- Iptc support<br>
- Xmp support
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Tags, Rating, Date and Time, Comments, Photographers ID, and Copyrights are stored in<br>
- pictures metadata. Comments are also stored in JPEG files to JFIF section.<br>
- For a better interoperability with other photo management programs, digiKam information<br>
- as tags and rating as are saved to metadata.<br>
- This way your pictures contain all your comments and other information you have set in digiKam!
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- DateTime/PhotographerId/Copyright Exif metadata and/or IPTC tags can be set on the fly
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Metadata from new pictures imported to digiKam album collection are scanned automatically.<br>
- digiKam information are created automatically in database accordingly with pictures metadata
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- A SQLite database is used to store all Albums and items meta-information
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Albums can be classified by user-specified categories and tags
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Automatic sorting of Photo Albums in chronological order:
- <ul>
- <li>By folder</li>
- <li>By category</li>
- <li>By creation date</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Automatic sorting of Album items in chronological order:
- <ul>
- <li>By name</li>
- <li>By path</li>
- <li>By date</li>
- <li>By files size</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Filtering album items:
- <ul>
- <li>By rating</li>
- <li>By filename</li>
- <li>By file type</li>
- <li>By tags</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
- </tbody></table>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul><li>
- Drag and drop support between digiKam and other applications
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-</tbody></table>
-
-<h1> Import </h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr><td width="60%" align="left">
- <ul><li>
- Driving all digital camera types supported by Gphoto2 project:
- <ul>
- <li>Over <a href="http://www.gphoto.org/proj/libgphoto2/support.php">1200 digital camera devices</a> supported</li>
- <li>Serial connection</li>
- <li>USB connection</li>
- <li>USB/IEEE Mass storage connection</li>
- <li>Connecting auto-detection of camera</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
-
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Importing pictures from digital still cameras. Operations currently supported are:
- <ul>
- <li>Deleting images</li>
- <li>Uploading images</li>
- <li>Lock images</li>
- <li>Auto-rename pictures during import</li>
- <li>Auto-rotate pictures during import</li>
- <li>Auto-creation of albums during import</li>
- <li>LossLess conversion during import</li>
- <li>Advanced camera information</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Capture images from camera (GPhoto2 devices only)
- </li></ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
-</tbody></table>
-
-<h1> View </h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul><li>
- Support for RAW pictures using <a href="http://www.libraw.org">LibRaw</a> included in libKdcraw<br>
- Support of more 800 proprietary RAW camera file formats.<br>
- Complete camera list is given <a href="http://lxr.kde.org/source/KDE/kdegraphics/libs/libkdcraw/libraw/src/libraw_cxx.cpp#1584">here</a>
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
- <tr>
- <td width="60%">
- <ul><li>
- Easy comparing similar pictures using Light Table:
- <ul>
- <li>Files displayed side by side</li>
- <li>Synchronized panning and zooming</li>
- <li>Navigation by pair</li>
- <li>Raw files support</li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
- <tr>
- <td width="60%" align="left">
- <ul><li>
- digiKam core, image editor and image filters support 16 bits color depth pictures (RAW, TIFF, PNG, JPEG2000).<br>
- Image Editor has a full Color Management support using ICC color profiles.
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Thumbnail sizes can be adapted to your screen size on the fly
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Sidebar used everywhere to display
- <ul>
- <li>metadata
- <ul>
- <li>Image information</li>
- <li>Metadata</li>
- <li>Geolocation</li>
- </ul>
- </li>
- <li>image file properties
- <ul>
- <li>comments/tags/rating/date</li>
- <li>tag filter information</li>
- <li>colors information: histogram and ICC profile</li>
- </ul>
- </li>
- </ul>
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
- <tr>
- <td width="60%" align="left">
- <ul><li>
- Fast preview pictures mode embedded into albums interface with zoom and panning features
- </li></ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
-</tbody></table>
-
-<h1>Plugins architectures</h1>
+### Summary
+
+The following is a concise overview of features and tools available in digiKam. The application covers the photographic workflow consisting of five major stages:
+
+* Import photos, raw files, and videos
+* Organize your library
+* Browse and view items in the library
+* Process and edit raw files and photos
+* Share and publish photos
+
+#### Import
+
+* Support for all digital camera models that [work with Gphoto2](http://www.gphoto.org/proj/libgphoto2/support.php)
+
+* Import module supports the following actions:
+ * Delete images
+ * Upload images
+ * Lock images
+ * Auto-rename pictures during import
+ * Auto-rotate pictures during import
+ * Auto-creation of albums during import
+ * Lossless conversion during import
+ * Show camera information
+
+#### Organize
+
+* Group photos, raw files, photos, and videos into albums and sub-albums
+* Add tags and comments to albums
+* Sort albums by folder, category, and creation date
+* Sort items in albums by name, path, date, and file size
+* Filter album items by rating, filename, file type, tags, and labels
+
+### View
+
+* Support for RAW pictures using [LibRaw](http://www.libraw.org) included in libKdcraw
+ Support of more 800 proprietary RAW camera file formats.
+ Complete camera list is given [here](http://lxr.kde.org/source/KDE/kdegraphics/libs/libkdcraw/libraw/src/libraw_cxx.cpp#1584)
+
+* Easy comparing similar pictures using Light Table:
+ * Files displayed side by side
+ * Synchronized panning and zooming
+ * Navigation by pair
+ * Raw files support
+
+* digiKam core, image editor and image filters support 16 bits color depth pictures (RAW, TIFF, PNG, JPEG2000). Image Editor has a full Color Management support using ICC color profiles.
+* Thumbnail sizes can be adapted to your screen size on the fly
+* Sidebar used everywhere to display
+ * metadata
+ * Image information
+ * Metadata
+ * Geolocation
+ * image file properties
+ * comments/tags/rating/date
+ * tag filter information
+ * colors information: histogram and ICC profile
+
+* Fast preview pictures mode embedded into albums interface with zoom and panning features
+
+### Plugins architectures
To ease development and to share code with other applications, digiKam make use of kipi-plugins architecture.
-<h1>Share</h1>
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul>
-
-
- <li>Export to HTML</li>
- <li>Send pictures by email</li>
- <li>Export to <a href="http://www.23hq.com">23</a></li>
- <li>Export to <a href="http://www.flickr.com">Flickr</a></li>
- <li>Export to Flash</li>
- <li>Export to <a href="http://picasaweb.google.com">PicasaWeb</a></li>
- <li>Export to <a href="http://www.smugmug.com">SmugMug</a></li>
- <li>Export to <a href="http://piwigo.org/">Piwigo</a></li>
- <li>Import From/Export to <a href="http://www.facebook.com">FaceBook</a></li>
- <li>Import From/Export to <a href="http://www.shwup.com">Shwup</a></li>
- <li>Export to <a href="http://www.zooomr.com">Zooomr</a></li>
- <li>Export to <a href="http://gallery.menalto.com">Gallery</a> powered websites</li>
- <li>Export to <a href="http://code.google.com/intl/fr-FR/apis/kml/documentation/">KML</a></li>
- <li>Export to a local directory or remote computer using KIO protocols (ftp, ssh, smb, fish, svn, tar ...)</li>
- </ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
-</tbody></table>
-
-<h1>Create</h1>
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul>
- <li>Calendar creation wizard</li>
- <li>Print wizard</li>
- <li>Create slideshow</li>
-
- </ul>
- </td>
- <td width="40%" align="right">
-
- </td>
- </tr>
-
-</tbody></table>
-<h1> Other tools available in digiKam core</h1>
- <table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul>
- <li>Lossless transformations with JPEG pictures</li>
- <li>Add GPS coordinates to images by synchronizing them with a GPX files (created by GPS receivers and/or GPS tools), or by manually editing the longitude/latitude/altitude or also by using Google Map capabilities.</li>
- <li>Acquire image (eg. with a flat scanner)</li>
- <li>RAW image converter</li>
- <li>DNG converter</li>
- <li>Adjust time and date</li>
- <li>Edit Pictures Metadata</li>
- <li>Create slideshow</li>
- <li>Images batch processing</li>
- </ul>
- </td>
- <td width="40%" align="right">
- </td>
-</tr></tbody></table>
-
-<h1> Edit </h1>
- <table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tbody><tr>
- <td width="60%" align="left">
- <ul><li>
- Fast image editor with keyboard shortcuts and basic photo editing/management features<br>
- without losing metadata. Features available in Image editor are:
- <ul>
- <li>16 bits image color depth support.</li>
- <li>RAW camera image support.</li>
- <li>Histogram viewer</li>
- <li>Color Management support.</li>
- <li>ICC profiles tool to perform advanced color corrections into images</li>
- <li>ICC profile viewer</li>
- <li>Exporting to another image format</li>
- <li>Removing images from current Album</li>
- <li>Image comments editing</li>
- <li>Image file properties</li>
- <li>EXIF/MakerNote/IPTC/GPS viewer</li>
- <li>Zooming</li>
- <li>Printing images</li>
- </ul>
- </li>
-</ul>
-<ul>
- <li>Red eyes correction</li>
- <li>Brightness / Contrast / Gamma correction</li>
- <li>Hue / Saturation / Luminosity correction</li>
- <li>Color balance</li>
- <li>Invert colors</li>
- <li>Color auto-correction tools: Normalize / Equalize / Auto levels / Stretch Contrast</li>
- <li>Blur / Sharpen</li>
- <li>Ratio-cropping with proportion aids and composing tools based on Fibonacci rules</li>
- <li>Free cropping</li>
- <li>Black and White and tonality converter using curves adjustments</li>
- <li>Rotation</li>
- <li>Flipping</li>
- <li>Adjust levels : a tool to adjust the photograph histogram levels manually</li>
- <li>Adjust curves : a tool to adjust the photograph colors using curves</li>
- <li>Noise Reduction : noise filter based on wavelet algorithm</li>
- <li>Liquid Rescale : content aware resizing to change ratio of a picture while keeping the content intact</li>
- <li>Local Contrast : a pseudo HDR-tonemapping tool to recover highlights and shadows while keeping local contrast</li>
- <li>Unsharp Mask : a photograph unsharp mask filter to unblur picture without increase noise</li>
- <li>Lens Distortion : a tool for correct lens spherical aberration on photograph</li>
- <li>Vignetting : a tool for removing or adding vignetting on photograph</li>
- <li>Channel Mixer : a tool to mix the photograph color channels</li>
- <li>White Balance : a tool to adjust white color temperature balance of photograph</li>
- <li>Photograph Inpainting : a tool to remove unwanted photograph area using CImg library</li>
- <li>Photograph Refocus : a sharpness editor to refocus a photograph</li>
- <li>Hot Pixels Correction : a tool to remove photograph hot pixels generated by a deficient camera</li>
- <li>Photograph Restoration : a tool to reduce photograph artifacts using CImg library</li>
- <li>Free Rotation : a plugin to rotate a photograph with a free angle in degrees</li>
- <li>Shear Tool : a plugin to shear a photograph horizontally and vertically</li>
- <li>Perspective Tool : a plugin to adjust the photograph perspective</li>
- <li>Add Border : a tool to add decorative frame around a photograph</li>
- <li>Insert Text : a tool to insert text under a photograph</li>
- <li>Apply Texture : a tool to apply a decorative texture to a photograph</li>
- <li>Solarize : a tool to solarize a photograph</li>
- <li>Oil Paint : simulate oil painting on photograph</li>
- <li>Emboss : an effect filter to emboss photograph</li>
- <li>Rain Drops : adding the visual effect of raindrops on photograph</li>
- <li>Charcoal : simulate charcoal drawing on photograph</li>
- <li>Film Grain : simulate film grain on photograph</li>
- <li>Infrared : simulate infrared film effect on photograph</li>
- <li>Blur FX : apply blurring special effects on photograph</li>
- <li>Distortion FX : apply distortion special effects on photograph</li>
- </ul>
- </td>
- <td width="40%" align="right">
- </td>
- </tr>
-
-</tbody></table>
-<table class="sticky-header" style="position: fixed; top: 0px; width: 149.467px; left: 264px; visibility: hidden;"><thead><tr><th style="width: 81px;">Attachment</th><th style="width: 42.1333px;">Size</th> </tr></thead></table><table id="attachments" class="sticky-enabled sticky-table">
- <thead class="tableHeader-processed"><tr><th>Attachment</th><th>Size</th> </tr></thead>
-<tbody>
- <tr class="odd"><td><a href="https://www.digikam.org//srv/www/drupal6/sites/digikam.org/files//vol/www/webdocs/org.digikam/www/files/filters.png">filters.png</a></td><td>4.63 KB</td> </tr>
-</tbody>
-</table>
-</div>
+### Share
+
+* Export to HTML
+* Send pictures by email
+* Export to [23](http://www.23hq.com)
+* Export to [Flickr](http://www.flickr.com)
+* Export to Flash
+* Export to [PicasaWeb](http://picasaweb.google.com)
+* Export to [SmugMug](http://www.smugmug.com)
+* Export to [Piwigo](http://piwigo.org/)
+* Import From/Export to [FaceBook](http://www.facebook.com)
+* Import From/Export to [Shwup](http://www.shwup.com)
+* Export to [Zooomr](http://www.zooomr.com)
+* Export to [Gallery](http://gallery.menalto.com) powered websites
+* Export to [KML](http://code.google.com/intl/fr-FR/apis/kml/documentation/)
+* Export to a local directory or remote computer using KIO protocols (ftp, ssh, smb, fish, svn, tar ...)
+
+### Create
+
+* Calendar creation wizard
+* Print wizard
+* Create slideshow
+
+### Other tools available in digiKam core
+
+* Lossless transformations with JPEG pictures
+* Add GPS coordinates to images by synchronizing them with a GPX files (created by GPS receivers and/or GPS tools), or by manually editing the longitude/latitude/altitude or also by using Google Map capabilities.
+* Acquire image (eg. with a flat scanner)
+* RAW image converter
+* DNG converter
+* Adjust time and date
+* Edit Pictures Metadata
+* Create slideshow
+* Images batch processing
+
+### Edit
+
+* Fast image editor with keyboard shortcuts and basic photo editing/management features without losing metadata. Features available in Image editor are:
+ * 16 bits image color depth support.
+ * RAW camera image support.
+ * Histogram viewer
+ * Color Management support.
+ * ICC profiles tool to perform advanced color corrections into images
+ * ICC profile viewer
+ * Exporting to another image format
+ * Removing images from current Album
+ * Image comments editing
+ * Image file properties
+ * EXIF/MakerNote/IPTC/GPS viewer
+ * Zooming
+ * Printing images
+
+* Red eyes correction
+* Brightness / Contrast / Gamma correction
+* Hue / Saturation / Luminosity correction
+* Color balance
+* Invert colors
+* Color auto-correction tools: Normalize / Equalize / Auto levels / Stretch Contrast
+* Blur / Sharpen
+* Ratio-cropping with proportion aids and composing tools based on Fibonacci rules
+* Free cropping
+* Black and White and tonality converter using curves adjustments
+* Rotation
+* Flipping
+* Adjust levels : a tool to adjust the photograph histogram levels manually
+* Adjust curves : a tool to adjust the photograph colors using curves
+* Noise Reduction : noise filter based on wavelet algorithm
+* Liquid Rescale : content aware resizing to change ratio of a picture while keeping the content intact
+* Local Contrast : a pseudo HDR-tonemapping tool to recover highlights and shadows while keeping local contrast
+* Unsharp Mask : a photograph unsharp mask filter to unblur picture without increase noise
+* Lens Distortion : a tool for correct lens spherical aberration on photograph
+* Vignetting : a tool for removing or adding vignetting on photograph
+* Channel Mixer : a tool to mix the photograph color channels
+* White Balance : a tool to adjust white color temperature balance of photograph
+* Photograph Inpainting : a tool to remove unwanted photograph area using CImg library
+* Photograph Refocus : a sharpness editor to refocus a photograph
+* Hot Pixels Correction : a tool to remove photograph hot pixels generated by a deficient camera
+* Photograph Restoration : a tool to reduce photograph artifacts using CImg library
+* Free Rotation : a plugin to rotate a photograph with a free angle in degrees
+* Shear Tool : a plugin to shear a photograph horizontally and vertically
+* Perspective Tool : a plugin to adjust the photograph perspective
+* Add Border : a tool to add decorative frame around a photograph
+* Insert Text : a tool to insert text under a photograph
+* Apply Texture : a tool to apply a decorative texture to a photograph
+* Solarize : a tool to solarize a photograph
+* Oil Paint : simulate oil painting on photograph
+* Emboss : an effect filter to emboss photograph
+* Rain Drops : adding the visual effect of raindrops on photograph
+* Charcoal : simulate charcoal drawing on photograph
+* Film Grain : simulate film grain on photograph
+* Infrared : simulate infrared film effect on photograph
+* Blur FX : apply blurring special effects on photograph
+* Distortion FX : apply distortion special effects on photograph
diff --git a/content/about/overview.md b/content/about/overview.md
index 1e773be65..63f463fc4 100644
--- a/content/about/overview.md
+++ b/content/about/overview.md
@@ -1,32 +1,32 @@
---
date: "2017-03-22T13:14:13-06:00"
title: "Overview"
author: "digiKam"
description: "A brief description of the digiKam sotware."
category: "about"
aliases: "/about/overview"
---
<div class="content"><h3>A digiKam Overview</h3>
<p>digiKam is an advanced digital <b>photo management application</b>, which makes importing and organizing digital photos a "snap". The photos are organized in albums which can be sorted chronologically, by folder layout or by custom collections.</p>
<a href="https://www.flickr.com/photos/digikam/5508779067" title="digiKamsc by Caulier Gilles, on Flickr"><img src="https://farm6.staticflickr.com/5055/5508779067_11c67b8a40_z.jpg" alt="digiKamsc" width="640" height="418"></a>
-<p>Tired of the folder constraints? Don’t worry, digiKam also provides <b>tagging</b>. You tag your images which can be spread out across multiple folders, and digiKam provides <a href="http://www.digikam.org/drupal/node/324">fast and intuitive ways</a> to browse these tagged images. You can also add comments to your images. digiKam makes use of a fast and robust database to store these meta-informations which makes adding and editing of comments and tags very reliable.</p>
+<p>Tired of the folder constraints? Don’t worry, digiKam also provides <b>tagging</b>. You tag your images which can be spread out across multiple folders, and digiKam provides <!-- a href="http://www.digikam.org/drupal/node/324" -->fast and intuitive ways<!-- /a --> to browse these tagged images. You can also add comments to your images. digiKam makes use of a fast and robust database to store these meta-informations which makes adding and editing of comments and tags very reliable.</p>
<p>digiKam makes use of <a href="https://projects.kde.org/projects/extragear/graphics/kipi-plugins">KIPI plugins </a>for lots of added functionalities. KIPI is an initiative to create a common plugin infrastructure for digiKam, <a href="http://ktown.kde.org/kimdaba">KPhotoAlbum</a>, and <a href="http://gwenview.sourceforge.net">GwenView</a>. Its aim is to allow development of image plugins which can be shared among graphical applications.</p>
-<p>An easy-to-use interface is provided that enables you to <a href="http://www.digikam.org/node/328">connect to your camera</a> and preview, download and/or delete your images. Basic auto-transformations can be deployed on the fly during image downloading.</p>
+<p>An easy-to-use interface is provided that enables you to <!-- a href="http://www.digikam.org/node/328" -->connect to your camera<!--/a --> and preview, download and/or delete your images. Basic auto-transformations can be deployed on the fly during image downloading.</p>
-<p>Another tool, which most artists and photographers will be familiar with, is a <a href="http://www.digikam.org/node/329">Light Table</a>. This tool assists artists and photographers with reviewing their work ensuring the highest quality only. A classical light table will show the artist the place on the images to touch up. Well in digiKam, the light table function provides the user a similar experience. You can import a photo, drag it onto the light table, and touch up only the areas that need it.</p>
+<p>Another tool, which most artists and photographers will be familiar with, is a <!-- a href="http://www.digikam.org/node/329" -->Light Table<!-- /a -->. This tool assists artists and photographers with reviewing their work ensuring the highest quality only. A classical light table will show the artist the place on the images to touch up. Well in digiKam, the light table function provides the user a similar experience. You can import a photo, drag it onto the light table, and touch up only the areas that need it.</p>
<a href="http://www.flickr.com/photos/digikam/2583231945/" title="frontpage by cauliergilles, on Flickr"><img src="http://farm4.static.flickr.com/3080/2583231945_311054dca4.jpg" alt="frontpage" width="500" height="388"></a>
-<p>The digiKam <b>Image Editor</b> has its own plugin subsystem with some <a href="http://www.digikam.org/drupal/node/325">common tools</a> e.g. red eye correction or colors correction. Additional plugins are provided with the main application to process <a href="http://www.digikam.org/node/327">advanced corrections</a> on image like color management, noise reduction, or special effects. digiKam Image Editor supports all camera RAW file formats, 16 bits color depth, Exif/Makernote/IPTC/GPS/XMP metadata, Color management, tagging/rating/comments pictures, etc.</p>
+<p>The digiKam <b>Image Editor</b> has its own plugin subsystem with some <!-- a href="http://www.digikam.org/drupal/node/325" -->common tools<!-- /a --> e.g. red eye correction or colors correction. Additional plugins are provided with the main application to process <!-- a href="http://www.digikam.org/node/327" -->advanced corrections<!-- /a --> on image like color management, noise reduction, or special effects. digiKam Image Editor supports all camera RAW file formats, 16 bits color depth, Exif/Makernote/IPTC/GPS/XMP metadata, Color management, tagging/rating/comments pictures, etc.</p>
-<p>A stand-alone image editor version named <a href="http://www.digikam.org/node/326">ShowFoto</a> is also available. It runs without digiKam images database support, but provides all Image Editor functions.</p>
+<p>A stand-alone image editor version named <!-- a href="http://www.digikam.org/node/326" -->ShowFoto<!-- /a --> is also available. It runs without digiKam images database support, but provides all Image Editor functions.</p>
-<p>You want to know more about digiKam? Continue to <a href="http://www.digikam.org/node/341">Features page</a>
+<p>You want to know more about digiKam? Continue to <a href="/about/features/">Features page</a>
</p></div>
diff --git a/content/about/related.md b/content/about/related.md
deleted file mode 100644
index 20e44e220..000000000
--- a/content/about/related.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-date: "2017-03-21"
-title: "Related projects"
-author: "digiKam"
-description: "Projects digiKam relies on."
-category: "about"
-aliases: "/about/related"
----
-
-<div class="content"><h3>Related projects</h3>
-<p>
-</p><ul>
- <li><a href="http://www.exiv2.org">Exiv2 library</a> used by digiKam to handle pictures metadata.</li>
-
- <li><a href="http://www.gphoto.org">Gphoto library</a> used by digiKam to handle camera devices.</li>
-
- <li><a href="http://www.libraw.org">Libraw library</a> used by digiKam to handle RAW files.</li>
-
- <li><a href="http://lensfun.sourceforge.net/">Lensfun library</a> used by digiKam to fix optical distorsion.</li>
-
-</ul>
-<p></p>
-
-<h3>Links</h3>
-<p>
-</p><ul>
-
- <li><a href="https://plus.google.com/u/0/communities/118125649609548399367">digiKam Google+ Users Community</a></li>
-
- <li><a href="https://plus.google.com/100127992760143250422/posts">digiKam Google+ Fan page</a></li>
-
- <li><a href="http://www.facebook.com/group.php?gid=45903315969">digiKam Facebook discussion group</a></li>
-
- <li><a href="http://userbase.kde.org/Digikam">digiKam user wiki page from kde.org</a></li>
-
- <li><a href="http://www.flickr.com/groups/digikam">digiKam Flickr discussion group</a></li>
-
- <li><a href="http://www.flickr.com/groups/digikam-labs">digiKam Flickr screenshots repository</a></li>
-
- <li><a href="https://www.linux-apps.com/content/show.php/digiKam+Software+Collection?content=137059">digiKam page from linux-apps.com</a></li>
-
- <li><a href="https://www.openhub.net/p/digikam/">digiKam project statistics from OpenHub network</a></li>
-
-</ul>
-
-<br>
-<p></p></div>
diff --git a/content/about/splashcreens.md b/content/about/splashcreens.md
deleted file mode 100644
index 1d28f013d..000000000
--- a/content/about/splashcreens.md
+++ /dev/null
@@ -1,912 +0,0 @@
----
-date: "2017-03-21"
-title: "Splash-Screens"
-author: "digiKam"
-description: "All of the splashscreens from the digiKam releases!"
-category: "about"
-aliases: "/splashcreens"
----
-
-
-<div class="content"><h1>Notice To Contribe</h1>
-
-<p>You are a photographer, and you use digiKam to manage your collections. Why not to propose your best shots as splash-screens. It's your chance to join the ranks of the precious few who have had their artwork associated with a release of digiKam!</p>
-
-<p>Splash-screens are a simple way for users to contribute to the digiKam project. The pictures must be correctly exposed and composed, and the subject must be chosen using a real photographer inspiration.</p>
-
-<p>We need two new splash-screens: one dedicated to digiKam and another one to Showfoto. You can send us <a href="mailto: caulier dot gilles at gmail dot com">by e-mail</a> your color or black and white pictures, taken horizontally. We need only scaled-down photos. No need to put few marks about program name and version. We have two SVG templates <a href="http://inkscape.org/">created with Inkscape</a> for <a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/data/pics/splash-digikam.svgz">digiKam</a> and for <a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/data/pics/splash-showfoto.svgz">showfoto</a> to try your images with application logo and chart. Shots will be review by team and best selected...</p>
-
-<p>As example, see below the official digiKam and Showfoto splash-screens release used until now releases.</p>
-
-<p>Have fun to contribute to digiKam project... and thanks in advance...</p>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>5.x Official Splash-screens</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 5.4.0 splash-screen by <a href="https://plus.google.com/u/0/118393660693739377704/about">Wolfgang Scheffner</a></p>
- <a href="https://www.flickr.com/photos/digikam/31201458721/"><img src="https://c2.staticflickr.com/6/5349/31201458721_ab764b8646_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 5.4.0 splash-screen by <a href="https://plus.google.com/u/0/118393660693739377704/about">Wolfgang Scheffner</a></p>
- <a href="https://www.flickr.com/photos/digikam/31172231722/"><img src="https://c2.staticflickr.com/6/5670/31172231722_482eccaee5_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 5.3.0 splash-screen by <a href="https://plus.google.com/100878069909840773243/about">Swati Lodha</a></p>
- <a href="https://www.flickr.com/photos/digikam/30268048831/"><img src="https://c1.staticflickr.com/9/8127/30268048831_e384725617_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 5.3.0 splash-screen by <a href="https://plus.google.com/100878069909840773243/about">Swati Lodha</a></p>
- <a href="https://www.flickr.com/photos/digikam/30237699412/"><img src="https://c2.staticflickr.com/6/5775/30237699412_241fc00895_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 5.2.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="https://www.flickr.com/photos/digikam/30354057665/"><img src="https://c1.staticflickr.com/9/8267/30354057665_f3edab00be_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 5.2.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="https://www.flickr.com/photos/digikam/30318839966/"><img src="https://c2.staticflickr.com/6/5711/30318839966_6708088cd8_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 5.1.0 splash-screen by <a href="https://plus.google.com/u/0/+ChristianPietzsch/about">Christian Pietzsch</a></p>
- <a href="https://www.flickr.com/photos/digikam/29499933741/"><img src="https://c1.staticflickr.com/9/8509/29499933741_09e42bb36c_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 5.1.0 splash-screen by <a href="https://plus.google.com/u/0/+ChristianPietzsch/about">Christian Pietzsch</a></p>
- <a href="https://www.flickr.com/photos/digikam/28284766931/"><img src="https://c1.staticflickr.com/9/8120/28284766931_7be532c852_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 5.0.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="https://www.flickr.com/photos/digikam/15960225159/"><img src="https://farm8.staticflickr.com/7530/15960225159_3acd71f4e5_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 5.0.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="https://www.flickr.com/photos/digikam/15958860348/"><img src="https://farm8.staticflickr.com/7477/15958860348_763d4b9e5a_o.png" width="400" height="245"></a>
-
- </td></tr>
-
-</tbody></table>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>4.x Official Splash-screens</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 4.10.0 splash-screen by <a href="https://plus.google.com/117123510903763139230">Martin Zahnd</a></p>
- <a href="https://www.flickr.com/photos/digikam/17096102172/"><img src="https://farm8.staticflickr.com/7622/17096102172_0325c97067_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.10.0 splash-screen by <a href="https://plus.google.com/117123510903763139230">Martin Zahnd</a></p>
- <a href="https://www.flickr.com/photos/digikam/17096102372/"><img src="https://farm9.staticflickr.com/8811/17096102372_46cf42f04a_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.9.0 splash-screen by <a href="https://plus.google.com/117123510903763139230">Martin Zahnd</a></p>
- <a href="https://www.flickr.com/photos/digikam/16681234162/"><img src="https://farm9.staticflickr.com/8569/16681234162_b239a85c13_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.9.0 splash-screen by <a href="https://plus.google.com/117123510903763139230">Martin Zahnd</a></p>
- <a href="https://www.flickr.com/photos/digikam/16494848860/"><img src="https://farm9.staticflickr.com/8604/16494848860_0e5795cf20_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.8.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/16252310199/"><img src="https://farm9.staticflickr.com/8628/16252310199_2b8b20415b_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.8.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/15816046824/"><img src="https://farm8.staticflickr.com/7418/15816046824_84b2a0b516_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.7.0 splash-screen by <a href="https://www.google.com/+MattiaVerga">Mattia Verga</a></p>
- <a href="https://www.flickr.com/photos/digikam/15892647840/"><img src="https://farm8.staticflickr.com/7467/15892647840_2dbddc012f_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.7.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="https://www.flickr.com/photos/digikam/16078007361/"><img src="https://farm8.staticflickr.com/7521/16078007361_51164378cf_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.6.0 splash-screen by <b>Jan Wolter</b></p>
- <a href="https://www.flickr.com/photos/digikam/15794176706/"><img src="https://farm8.staticflickr.com/7525/15794176706_dd65e5813c_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.6.0 splash-screen by <a href="https://www.google.com/+MattiaVerga">Mattia Verga</a></p>
- <a href="https://www.flickr.com/photos/digikam/15815959701/"><img src="https://farm8.staticflickr.com/7501/15815959701_4cd7d7c6bb_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.5.0 splash-screen by <a href="https://plus.google.com/u/0/+LeandroConcaDeLuccia">Leandro Conca De Luccia</a></p>
- <a href="https://www.flickr.com/photos/digikam/15458245956/"><img src="https://farm3.staticflickr.com/2946/15458245956_850a0a5236_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.5.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/15480981152/"><img src="https://farm3.staticflickr.com/2947/15480981152_80a6477948_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.4.0 splash-screen by <a href="https://plus.google.com/109055896272515422686">Asa Sourdiffe</a></p>
- <a href="https://www.flickr.com/photos/digikam/15012121857/"><img src="https://farm4.staticflickr.com/3901/15012121857_c8f2fe4711_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.4.0 splash-screen by <a href="https://plus.google.com/109055896272515422686">Asa Sourdiffe</a></p>
- <a href="https://www.flickr.com/photos/digikam/15198692245"><img src="https://farm4.staticflickr.com/3906/15198692245_ca43e98603_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.3.0 splash-screen by <a href="https://plus.google.com/u/0/100132670292782724076">Isabelle Myja</a></p>
- <a href="https://www.flickr.com/photos/digikam/14750029039/"><img src="https://farm4.staticflickr.com/3900/14750029039_a33d6c33d7_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.3.0 splash-screen by <a href="https://plus.google.com/109055896272515422686">Asa Sourdiffe</a></p>
- <a href="https://www.flickr.com/photos/digikam/14750032870"><img src="https://farm4.staticflickr.com/3898/14750032870_1b9ee204f6_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.2.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/14560599182/"><img src="https://farm4.staticflickr.com/3858/14560599182_2d19967645_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.2.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/14374829338/"><img src="https://farm6.staticflickr.com/5154/14374829338_3220fcb20f_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.1.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="https://www.flickr.com/photos/digikam/14363326134/"><img src="https://farm3.staticflickr.com/2907/14363326134_08847e82f8_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.1.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="https://www.flickr.com/photos/digikam/14177646800"><img src="https://farm4.staticflickr.com/3896/14177646800_ce1c02665a_o.png" width="400" height="245"></a>
-
- </td></tr>
- <!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.0.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/14193682691/"><img src="https://farm3.staticflickr.com/2934/14193682691_d66b94cf44_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.0.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="https://www.flickr.com/photos/digikam/14194435702/"><img src="https://farm6.staticflickr.com/5487/14194435702_e913eebbc8_o.png" width="400" height="245"></a>
-
- </td></tr>
-
-
- <!---------------------------------->
- <tr><td width="40%" align="left">
-
- <p>digiKam 4.0.0-beta1 splash-screen by <a href="http://farm8.staticflickr.com/7369/10153962233_d88b8d0f53_o.png">Bogdan Hlevca</a></p>
- <a href="http://www.flickr.com/photos/digikam/10153962233/"><img src="http://farm8.staticflickr.com/7369/10153962233_d88b8d0f53_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 4.0.0-beta1 splash-screen by <a href="https://plus.google.com/117446415823731940221">Cristiano Dri</a></p>
- <a href="http://www.flickr.com/photos/digikam/10153821535/"><img src="http://farm4.staticflickr.com/3758/10153821535_40e60d76ac_o.png" width="400" height="245"></a>
-
- </td></tr>
-
-</tbody></table>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>3.x Official Splash-screens</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 3.5.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="http://www.flickr.com/photos/digikam/10153902836/"><img src="http://farm6.staticflickr.com/5474/10153902836_1cc62476e3_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.4.0 splash-screen by <a href="https://plus.google.com/u/0/117645224135055516566">Marie-Noelle Augendre</a></p>
- <a href="http://www.flickr.com/photos/digikam/10153725064"><img src="http://farm3.staticflickr.com/2891/10153725064_2cb695a4e1_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.4.0 splash-screen by <a href="https://plus.google.com/109322132979274206387">Donagh Horgan</a></p>
- <a href="http://www.flickr.com/photos/digikam/9449250531/"><img src="http://farm6.staticflickr.com/5462/9449250531_a7706f302a_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.4.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/9449250509/"><img src="http://farm6.staticflickr.com/5448/9449250509_8118d1a06c_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.3.0 splash-screen by <a href="https://plus.google.com/115115161887111700191">Cyril Bosselut</a></p>
- <a href="http://www.flickr.com/photos/digikam/8744026064/"><img src="http://farm8.staticflickr.com/7286/8744026064_991b9af5b9_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.3.0 splash-screen by <a href="https://plus.google.com/115115161887111700191">Cyril Bosselut</a></p>
- <a href="http://www.flickr.com/photos/digikam/8744026072/"><img src="http://farm8.staticflickr.com/7287/8744026072_cfdbeb3b43_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.2.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/8551641098/"><img src="http://farm9.staticflickr.com/8512/8551641098_9ae8dc6d0d_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.2.0 splash-screen by <a href="https://plus.google.com/u/0/111599124138123376638">Mohamed Malik</a></p>
- <a href="http://www.flickr.com/photos/digikam/8550539557/"><img src="http://farm9.staticflickr.com/8093/8550539557_b3b5ccef48_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.1.0 splash-screen by <a href="https://plus.google.com/112054192726777329477">Martin Lubich</a></p>
- <a href="http://www.flickr.com/photos/digikam/8456040242/"><img src="http://farm9.staticflickr.com/8518/8456040242_6884ac2977_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.1.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/8456040238/"><img src="http://farm9.staticflickr.com/8385/8456040238_0a39ff7af2_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.0.0 splash-screen by <a href="https://plus.google.com/113660207909584662178">Thomas Caswell</a></p>
- <a href="http://www.flickr.com/photos/digikam/8361022380/"><img src="http://farm9.staticflickr.com/8235/8361022380_190b27686b_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.0.0 splash-screen by <a href="https://plus.google.com/109055896272515422686">Asa Sourdiffe</a></p>
- <a href="http://www.flickr.com/photos/digikam/8358547425/"><img src="http://farm9.staticflickr.com/8194/8358547425_183010ea5d_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.0.0-RC splash-screen by <a href="https://plus.google.com/106269732565986821600">Andreas K. Huttel</a></p>
- <a href="http://www.flickr.com/photos/digikam/8189996351/"><img src="http://farm9.staticflickr.com/8348/8189996351_9b30caee80_o.png" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.0.0-RC splash-screen by <a href="https://plus.google.com/u/0/111599124138123376638">Mohamed Malik</a></p>
- <a href="http://www.flickr.com/photos/digikam/8191079140/"><img src="http://farm9.staticflickr.com/8201/8191079140_632dae76fd_o.png" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.0.0-beta3 splash-screen by <a href="https://plus.google.com/113418324269340652300">Theodor Fruendt</a></p>
- <a href="http://www.flickr.com/photos/digikam/8154264538/"><img src="http://farm8.staticflickr.com/7271/8154264538_131ed768c1.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.0.0-beta3 splash-screen by <a href="https://plus.google.com/113792016708075766674">Matthew Fulgo</a></p>
- <a href="http://www.flickr.com/photos/digikam/8154236755/"><img src="http://farm9.staticflickr.com/8343/8154236755_94a5946f09.jpg" width="400" height="245"></a>
-
- </td></tr>
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 3.0.0-beta1 splash-screen by <a href="https://plus.google.com/u/0/108692126583358704252">Thomas Jacquin</a></p>
- <a href="http://www.flickr.com/photos/digikam/7176819743/"><img src="http://farm9.staticflickr.com/8002/7176819743_1a105fbf62.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 3.0.0-beta1 splash-screen by <a href="https://plus.google.com/u/0/108692126583358704252">Thomas Jacquin</a></p>
- <a href="http://www.flickr.com/photos/digikam/7362043208/"><img src="http://farm8.staticflickr.com/7215/7362043208_dbdb150261.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
-</tbody></table>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>2.x Official Splash-screens</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 2.9.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/7739392406/"><img src="http://farm9.staticflickr.com/8428/7739392406_3516223e77.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.9.0 splash-screen by <a href="https://plus.google.com/u/0/108692126583358704252">Thomas Jacquin</a></p>
- <a href="http://www.flickr.com/photos/digikam/7739392258/"><img src="http://farm8.staticflickr.com/7253/7739392258_7f46aa1e6c.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.8.0 splash-screen by <a href="https://plus.google.com/101012177574051097239">Alberto Garcia</a></p>
- <a href="http://www.flickr.com/photos/digikam/7548869960/"><img src="http://farm9.staticflickr.com/8001/7548869960_c50311b0f4.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.8.0 splash-screen by <b>Thomas Rees</b></p>
- <a href="http://www.flickr.com/photos/digikam/7548914016/"><img src="http://farm9.staticflickr.com/8434/7548914016_ed35e4e976.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.7.0 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7361524148/"><img src="http://farm8.staticflickr.com/7105/7361524148_d5258beff0.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.7.0 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7176300307/"><img src="http://farm8.staticflickr.com/7089/7176300307_36f4e317f3.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.6.0 splash-screen by <a href="https://plus.google.com/u/0/111032271470857945868">Hervé Le Roy</a></p>
- <a href="http://www.flickr.com/photos/digikam/7361474312/"><img src="http://farm8.staticflickr.com/7084/7361474312_d1fb4d8b01.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.6.0 splash-screen by <a href="https://plus.google.com/u/0/111032271470857945868">Hervé Le Roy</a></p>
- <a href="http://www.flickr.com/photos/digikam/7176250547/"><img src="http://farm9.staticflickr.com/8005/7176250547_a9b510e099.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.6.0-RC splash-screen by <a href="https://plus.google.com/u/0/108692126583358704252">Thomas Jacquin</a></p>
- <a href="http://www.flickr.com/photos/digikam/7361458368/"><img src="http://farm8.staticflickr.com/7077/7361458368_27c496e9e1_n.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.6.0-RC splash-screen by <a href="https://plus.google.com/u/0/108692126583358704252">Thomas Jacquin</a></p>
- <a href="http://www.flickr.com/photos/digikam/7361458292/"><img src="http://farm8.staticflickr.com/7074/7361458292_b3cd51cb0b.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.6.0-beta3 splash-screen by <a href="https://plus.google.com/u/0/112342248775237115466">Daniel Isenmann</a></p>
- <a href="http://www.flickr.com/photos/digikam/7176206233/"><img src="http://farm8.staticflickr.com/7077/7176206233_56ffb82afa.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.6.0-beta3 splash-screen by <a href="https://plus.google.com/u/0/112342248775237115466">Daniel Isenmann</a></p>
- <a href="http://www.flickr.com/photos/digikam/7176206145/"><img src="http://farm8.staticflickr.com/7238/7176206145_8c0dd75ded.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.6.0-beta2 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/7365240604/"><img src="http://farm9.staticflickr.com/8143/7365240604_0fdfeaa3b8.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.6.0-beta2 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/7180012863/"><img src="http://farm8.staticflickr.com/7235/7180012863_758c03b934.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.6.0-beta1 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7365248430/"><img src="http://farm6.staticflickr.com/5333/7365248430_1bb8fb2150.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.6.0-beta1 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7365254200/"><img src="http://farm8.staticflickr.com/7076/7365254200_eca5c29700.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.5.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7180052929/"><img src="http://farm8.staticflickr.com/7237/7180052929_58466d5209.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.5.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7365283074/"><img src="http://farm8.staticflickr.com/7238/7365283074_77c24cfb05.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.4.0 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7181107013/"><img src="http://farm9.staticflickr.com/8168/7181107013_3d4c548635.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.4.0 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7181106809/"><img src="http://farm8.staticflickr.com/7243/7181106809_e6ab09d5dd.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.3.0 splash-screen by <b>Alex Krebs</b></p>
- <a href="http://www.flickr.com/photos/digikam/7181117459/"><img src="http://farm6.staticflickr.com/5448/7181117459_d2c4a70c2a.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.3.0 splash-screen by <a href="https://plus.google.com/u/0/101649006174508717051">Mihael Simonic</a></p>
- <a href="http://www.flickr.com/photos/digikam/7181117367/"><img src="http://farm9.staticflickr.com/8003/7181117367_44bf91d774.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.2.0 splash-screen by <a href="https://plus.google.com/u/0/105274031445877094012">Chris Mason</a></p>
- <a href="http://www.flickr.com/photos/digikam/7366350690/"><img src="http://farm8.staticflickr.com/7224/7366350690_95a3849fed.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.2.0 splash-screen by <a href="https://plus.google.com/u/0/109808627000858943020">Sankar Nair</a></p>
- <a href="http://www.flickr.com/photos/digikam/7366350458/"><img src="http://farm8.staticflickr.com/7240/7366350458_5c27a3c991.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.1.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7366384128/"><img src="http://farm6.staticflickr.com/5330/7366384128_955ac8fdcb.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.1.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7181156465/"><img src="http://farm6.staticflickr.com/5329/7181156465_c91f9dc262.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371095680/"><img src="http://farm8.staticflickr.com/7240/7371095680_770e8458e2.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0 splash-screen by <a href="https://plus.google.com/u/0/111599124138123376638">Mohamed Malik</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371095630/"><img src="http://farm8.staticflickr.com/7091/7371095630_6f87ebfd99.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0-beta6 splash-screen by <a href="https://plus.google.com/u/0/111599124138123376638">Mohamed Malik</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371099360/"><img src="http://farm6.staticflickr.com/5152/7371099360_b8b69eb858.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0-beta6 splash-screen by <a href="https://plus.google.com/u/0/113408942588672463601">Rinus Bakker</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185868419/"><img src="http://farm8.staticflickr.com/7100/7185868419_0c6b9b6a02.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0-beta5 splash-screen by <a href="http://www.facebook.com/michael.thaler.9">Michael Thaler</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371103856/"><img src="http://farm8.staticflickr.com/7227/7371103856_efdc679dc3.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0-beta5 splash-screen by <b>Alex Krebs</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371103814/"><img src="http://farm6.staticflickr.com/5320/7371103814_c1b00d89c3.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0-beta4 splash-screen by <a href="http://www.facebook.com/michael.thaler.9">Michael Thaler</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371107518/"><img src="http://farm6.staticflickr.com/5326/7371107518_296dee527f.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0-beta4 splash-screen by <b>Susan Voitel</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185876837/"><img src="http://farm8.staticflickr.com/7240/7185876837_ede6783518.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0-beta3 splash-screen by <a href="http://www.facebook.com/michael.thaler.9">Michael Thaler</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185880449/"><img src="http://farm6.staticflickr.com/5444/7185880449_ca854b2085.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0-beta3 splash-screen by <a href="http://www.facebook.com/ruben.marquez.7370">Ruben Marquez</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371111136/"><img src="http://farm9.staticflickr.com/8009/7371111136_ba335cc03c.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 2.0.0-beta2 splash-screen by <a href="https://plus.google.com/u/0/101026761070865237619">Martin Klapetek</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371115040/"><img src="http://farm8.staticflickr.com/7079/7371115040_9425284660.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 2.0.0-beta2 splash-screen by <a href="https://plus.google.com/u/0/111599124138123376638">Mohamed Malik</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185884213/"><img src="http://farm8.staticflickr.com/7083/7185884213_349d7998bc.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-</tbody></table>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>1.x Official Splash-screens</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 1.9.0 splash-screen by <a href="http://www.facebook.com/alexander.heinlein">Alexander Heinlein</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371122918/"><img src="http://farm9.staticflickr.com/8159/7371122918_0392bbcf36.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.9.0 splash-screen by <b>Frank Steinmetzger</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185891945/"><img src="http://farm8.staticflickr.com/7080/7185891945_8fd24c6d46.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.8.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371127940/"><img src="http://farm9.staticflickr.com/8148/7371127940_c527843151.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.8.0 splash-screen by <a href="http://www.facebook.com/mathias.ball">Mathias Ball</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185897173/"><img src="http://farm6.staticflickr.com/5312/7185897173_9146d3d694.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.7.0 splash-screen by <a href="http://www.facebook.com/oerdnj">Ondrej Sury</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185902737/"><img src="http://farm9.staticflickr.com/8023/7185902737_32ca16f0f7.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.7.0 splash-screen by <b>Wolfgang Ruth</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371132162/"><img src="http://farm8.staticflickr.com/7228/7371132162_9062962020.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.6.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185905755/"><img src="http://farm9.staticflickr.com/8017/7185905755_13c6f33867.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.6.0 splash-screen by <b>Santoro Domenico</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371136350/"><img src="http://farm9.staticflickr.com/8004/7371136350_d993bb0a62.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.5.0 splash-screen by <a href="https://plus.google.com/u/0/106772984759351281130">Johannes Wienke</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185908445/"><img src="http://farm8.staticflickr.com/7101/7185908445_ba79a1207d.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.5.0 splash-screen by <a href="https://plus.google.com/u/0/106772984759351281130">Johannes Wienke</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371138986/"><img src="http://farm9.staticflickr.com/8146/7371138986_24b4d562b0.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.4.0 splash-screen by <a href="https://plus.google.com/u/0/102162250767186195018">Kalyan Varma</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185911473/"><img src="http://farm8.staticflickr.com/7081/7185911473_9a208e82b0.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.4.0 splash-screen by <a href="https://plus.google.com/u/0/113174485241075479693">Dmitri Popov</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185911399/"><img src="http://farm8.staticflickr.com/7086/7185911399_eb10b4eb61.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.3.0 splash-screen by <b>Santoro Domenico</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185914387/"><img src="http://farm9.staticflickr.com/8159/7185914387_57128ba9b6.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.3.0 splash-screen by <a href="https://plus.google.com/u/0/102162250767186195018">Kalyan Varma</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371144834/"><img src="http://farm8.staticflickr.com/7104/7371144834_e851c7aa71.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.2.0 splash-screen by <a href="https://plus.google.com/u/0/106772984759351281130">Johannes Wienke</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185917557/"><img src="http://farm8.staticflickr.com/7216/7185917557_55062f8930.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.2.0 splash-screen by <a href="http://www.facebook.com/petr.sigut.5">Petr Sigut</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371148014/"><img src="http://farm9.staticflickr.com/8145/7371148014_cc00177ab9.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.1.0 splash-screen by <a href="https://plus.google.com/u/0/107189467219077174520">Kanwar Plaha</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371152012/"><img src="http://farm6.staticflickr.com/5117/7371152012_cbf8897603.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.1.0 splash-screen by <a href="https://plus.google.com/u/0/104991114888555962774">Elisa Mattos</a></p>
- <a href="http://www.flickr.com/photos/digikam/7185921599/"><img src="http://farm9.staticflickr.com/8157/7185921599_47cb99224e.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 1.0.0 splash-screen by <b>Arturo Mann</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371154514/"><img src="http://farm8.staticflickr.com/7093/7371154514_9f5e81b323.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 1.0.0 splash-screen by <b>Arturo Mann</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371154460/"><img src="http://farm8.staticflickr.com/7213/7371154460_9690a8d539.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-</tbody></table>
-
-<!----------------------------------------------------------------------------------------->
-
-<h1>Old Official Splash-screens With Obsolete Logo And Chart</h1>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-
- <tbody><tr><td width="40%" align="left">
-
- <p>digiKam 0.10.0 splash-screen by <b>Fernando Batista</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371158698/"><img src="http://farm8.staticflickr.com/7211/7371158698_68f6424d3b.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>digiKam 0.9.2 splash-screen by <b>Juergen Flosbach</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185928235/"><img src="http://farm8.staticflickr.com/7077/7185928235_aa05fe4a28.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 0.9.1 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371173072/"><img src="http://farm8.staticflickr.com/7091/7371173072_d1fd7aa4c9.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>digiKam 0.9.0 splash-screen by <b>Dennis Gnad</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371173104/"><img src="http://farm8.staticflickr.com/7078/7371173104_815eefa10d.jpg" width="400" height="245"></a>
- </td>
-
- </tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>Showfoto 0.8.0 splash-screen by <b>Boris</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185948079/"><img src="http://farm8.staticflickr.com/7084/7185948079_2667445269.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>digiKam 0.7.3 splash-screen by <b>Andreas Fischer</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185948115/"><img src="http://farm6.staticflickr.com/5349/7185948115_1817d0341a.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 0.7.2 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371196482/"><img src="http://farm6.staticflickr.com/5240/7371196482_c8f93612bd.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>digiKam 0.7.1 splash-screen by <b>Yemu</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371196528/"><img src="http://farm6.staticflickr.com/5347/7371196528_60347df93d.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>digiKam 0.7.0 splash-screen by <b>Yves Chaufour</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185972213/"><img src="http://farm8.staticflickr.com/7076/7185972213_117b674a10.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>digiKam 0.6.2 splash-screen by <b>Yves Chaufour</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371202478/"><img src="http://farm8.staticflickr.com/7093/7371202478_882d778a43.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>Showfoto 0.6.0 splash-screen by <b>Juergen Flosbach</b></p>
- <a href="http://www.flickr.com/photos/digikam/7371206174/"><img src="http://farm8.staticflickr.com/7224/7371206174_22473962f3.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 0.5.0 splash-screen by <b>Rainer Krienke</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185975839/"><img src="http://farm8.staticflickr.com/7224/7185975839_8095a35c0c.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-<!---------------------------------->
-
- <tr><td width="40%" align="left">
-
- <p>Showfoto 0.4.0 splash-screen by <b>Dudas Gabor</b></p>
- <a href="http://www.flickr.com/photos/digikam/7185979401/"><img src="http://farm8.staticflickr.com/7222/7185979401_1464a3e3b6.jpg" width="400" height="245"></a>
-
- </td><td width="50%" align="right">
-
- <p>Showfoto 0.3.0 splash-screen by <a href="https://plus.google.com/u/0/116398684787400584523">Gilles Caulier</a></p>
- <a href="http://www.flickr.com/photos/digikam/7371209666/"><img src="http://farm8.staticflickr.com/7226/7371209666_28395128b3.jpg" width="400" height="245"></a>
-
- </td></tr>
-
-</tbody></table></div>
diff --git a/content/about/splashscreens.md b/content/about/splashscreens.md
new file mode 100644
index 000000000..64fa3b3a3
--- /dev/null
+++ b/content/about/splashscreens.md
@@ -0,0 +1,529 @@
+---
+date: "2017-03-21"
+title: "Splash-Screens"
+author: "digiKam"
+description: "digiKam splashscreens"
+category: "about"
+aliases: "/splashcreens"
+---
+
+
+# Contributing Splash Screens
+
+Want to show your photos to thousands of digiKam users? Consider submitting your best photos for use with digiKam splash screen. This is also the easiest way to contribute to the digiKam project.
+
+We need two new splash screens: one for digiKam and another one for Showfoto. Send your photos in the landscape format to *caulier dot gilles at gmail dot com*. Do not add any text, watermark, or other elements to the photo.
+
+We have two SVG templates <a href="http://inkscape.org/">created with Inkscape</a> for <a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/data/pics/splash-digikam.svgz">digiKam</a> and for <a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/data/pics/splash-showfoto.svgz">Showfoto</a>. You can use them to try your photos with application logo. Once you'be submitted your photos, we'lol review them and notify you if they've been selected.
+
+Thank you in advance!
+
+Take a look at the official digiKam and Showfoto splash screens
+
+## digiKam and Showfoto 5.x Splash Screens
+
+digiKam 5.4.0 splash screen by [Wolfgang Scheffner](https://plus.google.com/u/0/118393660693739377704/about)
+
+[![](https://c2.staticflickr.com/6/5349/31201458721_ab764b8646_o.png)](https://www.flickr.com/photos/digikam/31201458721/)
+
+Showfoto 5.4.0 splash screen by [Wolfgang Scheffner](https://plus.google.com/u/0/118393660693739377704/about)
+
+[![](https://c2.staticflickr.com/6/5670/31172231722_482eccaee5_o.png)](https://www.flickr.com/photos/digikam/31172231722/)
+
+digiKam 5.3.0 splash screen by [Swati Lodha](https://plus.google.com/100878069909840773243/about)
+
+[![](https://c1.staticflickr.com/9/8127/30268048831_e384725617_o.png)](https://www.flickr.com/photos/digikam/30268048831/)
+
+Showfoto 5.3.0 splash screen by [Swati Lodha](https://plus.google.com/100878069909840773243/about)
+
+[![](https://c2.staticflickr.com/6/5775/30237699412_241fc00895_o.png)](https://www.flickr.com/photos/digikam/30237699412/)
+
+digiKam 5.2.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](https://c1.staticflickr.com/9/8267/30354057665_f3edab00be_o.png)](https://www.flickr.com/photos/digikam/30354057665/)
+
+Showfoto 5.2.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](https://c2.staticflickr.com/6/5711/30318839966_6708088cd8_o.png)](https://www.flickr.com/photos/digikam/30318839966/)
+
+digiKam 5.1.0 splash screen by [Christian Pietzsch](https://plus.google.com/u/0/+ChristianPietzsch/about)
+
+[![](https://c1.staticflickr.com/9/8509/29499933741_09e42bb36c_o.png)](https://www.flickr.com/photos/digikam/29499933741/)
+
+Showfoto 5.1.0 splash screen by [Christian Pietzsch](https://plus.google.com/u/0/+ChristianPietzsch/about)
+
+[![](https://c1.staticflickr.com/9/8120/28284766931_7be532c852_o.png)](https://www.flickr.com/photos/digikam/28284766931/)
+
+digiKam 5.0.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](https://farm8.staticflickr.com/7530/15960225159_3acd71f4e5_o.png)](https://www.flickr.com/photos/digikam/15960225159/)
+
+Showfoto 5.0.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](https://farm8.staticflickr.com/7477/15958860348_763d4b9e5a_o.png)](https://www.flickr.com/photos/digikam/15958860348/)
+
+# digiKam and Showfoto 4.x Splash Screens
+
+digiKam 4.10.0 splash screen by [Martin Zahnd](https://plus.google.com/117123510903763139230)
+
+[![](https://farm8.staticflickr.com/7622/17096102172_0325c97067_o.png)](https://www.flickr.com/photos/digikam/17096102172/)</td>
+
+Showfoto 4.10.0 splash screen by [Martin Zahnd](https://plus.google.com/117123510903763139230)
+
+[![](https://farm9.staticflickr.com/8811/17096102372_46cf42f04a_o.png)](https://www.flickr.com/photos/digikam/17096102372/)</td>
+
+digiKam 4.9.0 splash screen by [Martin Zahnd](https://plus.google.com/117123510903763139230)
+
+[![](https://farm9.staticflickr.com/8569/16681234162_b239a85c13_o.png)](https://www.flickr.com/photos/digikam/16681234162/)</td>
+
+Showfoto 4.9.0 splash screen by [Martin Zahnd](https://plus.google.com/117123510903763139230)
+
+[![](https://farm9.staticflickr.com/8604/16494848860_0e5795cf20_o.png)](https://www.flickr.com/photos/digikam/16494848860/)
+
+digiKam 4.8.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm9.staticflickr.com/8628/16252310199_2b8b20415b_o.png)](https://www.flickr.com/photos/digikam/16252310199/)
+
+Showfoto 4.8.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm8.staticflickr.com/7418/15816046824_84b2a0b516_o.png)](https://www.flickr.com/photos/digikam/15816046824/)
+
+digiKam 4.7.0 splash screen by [Mattia Verga](https://www.google.com/+MattiaVerga)
+
+[![](https://farm8.staticflickr.com/7467/15892647840_2dbddc012f_o.png)](https://www.flickr.com/photos/digikam/15892647840/)
+
+Showfoto 4.7.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](https://farm8.staticflickr.com/7521/16078007361_51164378cf_o.png)](https://www.flickr.com/photos/digikam/16078007361/)
+
+digiKam 4.6.0 splash screen by **Jan Wolter**
+
+[![](https://farm8.staticflickr.com/7525/15794176706_dd65e5813c_o.png)](https://www.flickr.com/photos/digikam/15794176706/)
+
+Showfoto 4.6.0 splash screen by [Mattia Verga](https://www.google.com/+MattiaVerga)
+
+[![](https://farm8.staticflickr.com/7501/15815959701_4cd7d7c6bb_o.png)](https://www.flickr.com/photos/digikam/15815959701/)
+
+digiKam 4.5.0 splash screen by [Leandro Conca De Luccia](https://plus.google.com/u/0/+LeandroConcaDeLuccia)
+
+[![](https://farm3.staticflickr.com/2946/15458245956_850a0a5236_o.png)](https://www.flickr.com/photos/digikam/15458245956/)
+
+Showfoto 4.5.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm3.staticflickr.com/2947/15480981152_80a6477948_o.png)](https://www.flickr.com/photos/digikam/15480981152/)
+
+digiKam 4.4.0 splash screen by [Asa Sourdiffe](https://plus.google.com/109055896272515422686)
+
+[![](https://farm4.staticflickr.com/3901/15012121857_c8f2fe4711_o.png)](https://www.flickr.com/photos/digikam/15012121857/)
+
+Showfoto 4.4.0 splash screen by [Asa Sourdiffe](https://plus.google.com/109055896272515422686)
+
+[![](https://farm4.staticflickr.com/3906/15198692245_ca43e98603_o.png)](https://www.flickr.com/photos/digikam/15198692245)
+
+digiKam 4.3.0 splash screen by [Isabelle Myja](https://plus.google.com/u/0/100132670292782724076)
+
+[![](https://farm4.staticflickr.com/3900/14750029039_a33d6c33d7_o.png)](https://www.flickr.com/photos/digikam/14750029039/)
+
+Showfoto 4.3.0 splash screen by [Asa Sourdiffe](https://plus.google.com/109055896272515422686)
+
+[![](https://farm4.staticflickr.com/3898/14750032870_1b9ee204f6_o.png)](https://www.flickr.com/photos/digikam/14750032870)
+
+digiKam 4.2.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm4.staticflickr.com/3858/14560599182_2d19967645_o.png)](https://www.flickr.com/photos/digikam/14560599182/)
+
+Showfoto 4.2.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm6.staticflickr.com/5154/14374829338_3220fcb20f_o.png)](https://www.flickr.com/photos/digikam/14374829338/)
+
+digiKam 4.1.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](https://farm3.staticflickr.com/2907/14363326134_08847e82f8_o.png)](https://www.flickr.com/photos/digikam/14363326134/)
+
+Showfoto 4.1.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](https://farm4.staticflickr.com/3896/14177646800_ce1c02665a_o.png)](https://www.flickr.com/photos/digikam/14177646800)
+
+digiKam 4.0.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm3.staticflickr.com/2934/14193682691_d66b94cf44_o.png)](https://www.flickr.com/photos/digikam/14193682691/)
+
+Showfoto 4.0.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](https://farm6.staticflickr.com/5487/14194435702_e913eebbc8_o.png)](https://www.flickr.com/photos/digikam/14194435702/)
+
+digiKam 4.0.0-beta1 splash screen by [Bogdan Hlevca](http://farm8.staticflickr.com/7369/10153962233_d88b8d0f53_o.png)
+
+[![](http://farm8.staticflickr.com/7369/10153962233_d88b8d0f53_o.png)](http://www.flickr.com/photos/digikam/10153962233/)
+
+Showfoto 4.0.0-beta1 splash screen by [Cristiano Dri](https://plus.google.com/117446415823731940221)
+
+[![](http://farm4.staticflickr.com/3758/10153821535_40e60d76ac_o.png)](http://www.flickr.com/photos/digikam/10153821535/)
+
+# digiKam and Showfoto 3.x Splash Screens
+
+digiKam 3.5.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](http://farm6.staticflickr.com/5474/10153902836_1cc62476e3_o.png)](http://www.flickr.com/photos/digikam/10153902836/)
+
+Showfoto 3.4.0 splash screen by [Marie-Noelle Augendre](https://plus.google.com/u/0/117645224135055516566)
+
+[![](http://farm3.staticflickr.com/2891/10153725064_2cb695a4e1_o.png)](http://www.flickr.com/photos/digikam/10153725064)
+
+digiKam 3.4.0 splash screen by [Donagh Horgan](https://plus.google.com/109322132979274206387)
+
+[![](http://farm6.staticflickr.com/5462/9449250531_a7706f302a_o.png)](http://www.flickr.com/photos/digikam/9449250531/)
+
+Showfoto 3.4.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm6.staticflickr.com/5448/9449250509_8118d1a06c_o.png)](http://www.flickr.com/photos/digikam/9449250509/)
+
+digiKam 3.3.0 splash screen by [Cyril Bosselut](https://plus.google.com/115115161887111700191)
+
+[![](http://farm8.staticflickr.com/7286/8744026064_991b9af5b9_o.png)](http://www.flickr.com/photos/digikam/8744026064/)
+
+Showfoto 3.3.0 splash screen by [Cyril Bosselut](https://plus.google.com/115115161887111700191)
+
+[![](http://farm8.staticflickr.com/7287/8744026072_cfdbeb3b43_o.png)](http://www.flickr.com/photos/digikam/8744026072/)
+
+digiKam 3.2.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm9.staticflickr.com/8512/8551641098_9ae8dc6d0d_o.png)](http://www.flickr.com/photos/digikam/8551641098/)
+
+Showfoto 3.2.0 splash screen by [Mohamed Malik](https://plus.google.com/u/0/111599124138123376638)
+
+[![](http://farm9.staticflickr.com/8093/8550539557_b3b5ccef48_o.png)](http://www.flickr.com/photos/digikam/8550539557/)
+
+digiKam 3.1.0 splash screen by [Martin Lubich](https://plus.google.com/112054192726777329477)
+
+[![](http://farm9.staticflickr.com/8518/8456040242_6884ac2977_o.png)](http://www.flickr.com/photos/digikam/8456040242/)
+
+Showfoto 3.1.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm9.staticflickr.com/8385/8456040238_0a39ff7af2_o.png)](http://www.flickr.com/photos/digikam/8456040238/)
+
+digiKam 3.0.0 splash screen by [Thomas Caswell](https://plus.google.com/113660207909584662178)
+
+[![](http://farm9.staticflickr.com/8235/8361022380_190b27686b_o.png)](http://www.flickr.com/photos/digikam/8361022380/)
+
+Showfoto 3.0.0 splash screen by [Asa Sourdiffe](https://plus.google.com/109055896272515422686)
+
+[![](http://farm9.staticflickr.com/8194/8358547425_183010ea5d_o.png)](http://www.flickr.com/photos/digikam/8358547425/)
+
+digiKam 3.0.0-RC splash screen by [Andreas K. Huttel](https://plus.google.com/106269732565986821600)
+
+[![](http://farm9.staticflickr.com/8348/8189996351_9b30caee80_o.png)](http://www.flickr.com/photos/digikam/8189996351/)
+
+Showfoto 3.0.0-RC splash screen by [Mohamed Malik](https://plus.google.com/u/0/111599124138123376638)
+
+[![](http://farm9.staticflickr.com/8201/8191079140_632dae76fd_o.png)](http://www.flickr.com/photos/digikam/8191079140/)
+
+digiKam 3.0.0-beta3 splash screen by [Theodor Fruendt](https://plus.google.com/113418324269340652300)
+
+[![](http://farm8.staticflickr.com/7271/8154264538_131ed768c1.jpg)](http://www.flickr.com/photos/digikam/8154264538/)
+
+Showfoto 3.0.0-beta3 splash screen by [Matthew Fulgo](https://plus.google.com/113792016708075766674)
+
+[![](http://farm9.staticflickr.com/8343/8154236755_94a5946f09.jpg)](http://www.flickr.com/photos/digikam/8154236755/)
+
+digiKam 3.0.0-beta1 splash screen by [Thomas Jacquin](https://plus.google.com/u/0/108692126583358704252)
+
+[![](http://farm9.staticflickr.com/8002/7176819743_1a105fbf62.jpg)](http://www.flickr.com/photos/digikam/7176819743/)
+
+Showfoto 3.0.0-beta1 splash screen by [Thomas Jacquin](https://plus.google.com/u/0/108692126583358704252)
+
+[![](http://farm8.staticflickr.com/7215/7362043208_dbdb150261.jpg)](http://www.flickr.com/photos/digikam/7362043208/)
+
+## digiKam and Showfoto 2.x Splash Screens
+
+digiKam 2.9.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm9.staticflickr.com/8428/7739392406_3516223e77.jpg)](http://www.flickr.com/photos/digikam/7739392406/)
+
+Showfoto 2.9.0 splash screen by [Thomas Jacquin](https://plus.google.com/u/0/108692126583358704252)
+
+[![](http://farm8.staticflickr.com/7253/7739392258_7f46aa1e6c.jpg)](http://www.flickr.com/photos/digikam/7739392258/)
+
+digiKam 2.8.0 splash screen by [Alberto Garcia](https://plus.google.com/101012177574051097239)
+
+[![](http://farm9.staticflickr.com/8001/7548869960_c50311b0f4.jpg)](http://www.flickr.com/photos/digikam/7548869960/)
+
+Showfoto 2.8.0 splash screen by **Thomas Rees**
+
+[![](http://farm9.staticflickr.com/8434/7548914016_ed35e4e976.jpg)](http://www.flickr.com/photos/digikam/7548914016/)
+
+digiKam 2.7.0 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7105/7361524148_d5258beff0.jpg)](http://www.flickr.com/photos/digikam/7361524148/)
+
+Showfoto 2.7.0 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7089/7176300307_36f4e317f3.jpg)](http://www.flickr.com/photos/digikam/7176300307/)
+
+digiKam 2.6.0 splash screen by [Hervé Le Roy](https://plus.google.com/u/0/111032271470857945868)
+
+[![](http://farm8.staticflickr.com/7084/7361474312_d1fb4d8b01.jpg)](http://www.flickr.com/photos/digikam/7361474312/)
+
+Showfoto 2.6.0 splash screen by [Hervé Le Roy](https://plus.google.com/u/0/111032271470857945868)
+
+[![](http://farm9.staticflickr.com/8005/7176250547_a9b510e099.jpg)](http://www.flickr.com/photos/digikam/7176250547/)
+
+digiKam 2.6.0-RC splash screen by [Thomas Jacquin](https://plus.google.com/u/0/108692126583358704252)
+
+[![](http://farm8.staticflickr.com/7077/7361458368_27c496e9e1_n.jpg)](http://www.flickr.com/photos/digikam/7361458368/)
+
+Showfoto 2.6.0-RC splash screen by [Thomas Jacquin](https://plus.google.com/u/0/108692126583358704252)
+
+[![](http://farm8.staticflickr.com/7074/7361458292_b3cd51cb0b.jpg)](http://www.flickr.com/photos/digikam/7361458292/)
+
+digiKam 2.6.0-beta3 splash screen by [Daniel Isenmann](https://plus.google.com/u/0/112342248775237115466)
+
+[![](http://farm8.staticflickr.com/7077/7176206233_56ffb82afa.jpg)](http://www.flickr.com/photos/digikam/7176206233/)
+
+Showfoto 2.6.0-beta3 splash screen by [Daniel Isenmann](https://plus.google.com/u/0/112342248775237115466)
+
+[![](http://farm8.staticflickr.com/7238/7176206145_8c0dd75ded.jpg)](http://www.flickr.com/photos/digikam/7176206145/)
+
+digiKam 2.6.0-beta2 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm9.staticflickr.com/8143/7365240604_0fdfeaa3b8.jpg)](http://www.flickr.com/photos/digikam/7365240604/)
+
+Showfoto 2.6.0-beta2 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm8.staticflickr.com/7235/7180012863_758c03b934.jpg)](http://www.flickr.com/photos/digikam/7180012863/)
+
+digiKam 2.6.0-beta1 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm6.staticflickr.com/5333/7365248430_1bb8fb2150.jpg)](http://www.flickr.com/photos/digikam/7365248430/)
+
+Showfoto 2.6.0-beta1 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7076/7365254200_eca5c29700.jpg)](http://www.flickr.com/photos/digikam/7365254200/)
+
+digiKam 2.5.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm8.staticflickr.com/7237/7180052929_58466d5209.jpg)](http://www.flickr.com/photos/digikam/7180052929/)
+
+Showfoto 2.5.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm8.staticflickr.com/7238/7365283074_77c24cfb05.jpg)](http://www.flickr.com/photos/digikam/7365283074/)
+
+digiKam 2.4.0 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm9.staticflickr.com/8168/7181107013_3d4c548635.jpg)](http://www.flickr.com/photos/digikam/7181107013/)
+
+Showfoto 2.4.0 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7243/7181106809_e6ab09d5dd.jpg)](http://www.flickr.com/photos/digikam/7181106809/)
+
+digiKam 2.3.0 splash screen by **Alex Krebs**
+
+[![](http://farm6.staticflickr.com/5448/7181117459_d2c4a70c2a.jpg)](http://www.flickr.com/photos/digikam/7181117459/)
+
+Showfoto 2.3.0 splash screen by [Mihael Simonic](https://plus.google.com/u/0/101649006174508717051)
+
+[![](http://farm9.staticflickr.com/8003/7181117367_44bf91d774.jpg)](http://www.flickr.com/photos/digikam/7181117367/)
+
+digiKam 2.2.0 splash screen by [Chris Mason](https://plus.google.com/u/0/105274031445877094012)
+
+[![](http://farm8.staticflickr.com/7224/7366350690_95a3849fed.jpg)](http://www.flickr.com/photos/digikam/7366350690/)
+
+Showfoto 2.2.0 splash screen by [Sankar Nair](https://plus.google.com/u/0/109808627000858943020)
+
+[![](http://farm8.staticflickr.com/7240/7366350458_5c27a3c991.jpg)](http://www.flickr.com/photos/digikam/7366350458/)
+
+digiKam 2.1.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm6.staticflickr.com/5330/7366384128_955ac8fdcb.jpg)](http://www.flickr.com/photos/digikam/7366384128/)
+
+Showfoto 2.1.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm6.staticflickr.com/5329/7181156465_c91f9dc262.jpg)](http://www.flickr.com/photos/digikam/7181156465/)
+
+digiKam 2.0.0 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7240/7371095680_770e8458e2.jpg)](http://www.flickr.com/photos/digikam/7371095680/)
+
+Showfoto 2.0.0 splash screen by [Mohamed Malik](https://plus.google.com/u/0/111599124138123376638)
+
+[![](http://farm8.staticflickr.com/7091/7371095630_6f87ebfd99.jpg)](http://www.flickr.com/photos/digikam/7371095630/)
+
+digiKam 2.0.0-beta6 splash screen by [Mohamed Malik](https://plus.google.com/u/0/111599124138123376638)
+
+[![](http://farm6.staticflickr.com/5152/7371099360_b8b69eb858.jpg)](http://www.flickr.com/photos/digikam/7371099360/)
+
+Showfoto 2.0.0-beta6 splash screen by [Rinus Bakker](https://plus.google.com/u/0/113408942588672463601)
+
+[![](http://farm8.staticflickr.com/7100/7185868419_0c6b9b6a02.jpg)](http://www.flickr.com/photos/digikam/7185868419/)
+
+digiKam 2.0.0-beta5 splash screen by [Michael Thaler](http://www.facebook.com/michael.thaler.9)
+
+[![](http://farm8.staticflickr.com/7227/7371103856_efdc679dc3.jpg)](http://www.flickr.com/photos/digikam/7371103856/)
+
+Showfoto 2.0.0-beta5 splash screen by **Alex Krebs**
+
+[![](http://farm6.staticflickr.com/5320/7371103814_c1b00d89c3.jpg)](http://www.flickr.com/photos/digikam/7371103814/)
+
+digiKam 2.0.0-beta4 splash screen by [Michael Thaler](http://www.facebook.com/michael.thaler.9)
+
+[![](http://farm6.staticflickr.com/5326/7371107518_296dee527f.jpg)](http://www.flickr.com/photos/digikam/7371107518/)
+
+Showfoto 2.0.0-beta4 splash screen by **Susan Voitel**
+
+[![](http://farm8.staticflickr.com/7240/7185876837_ede6783518.jpg)](http://www.flickr.com/photos/digikam/7185876837/)
+
+digiKam 2.0.0-beta3 splash screen by [Michael Thaler](http://www.facebook.com/michael.thaler.9)
+
+[![](http://farm6.staticflickr.com/5444/7185880449_ca854b2085.jpg)](http://www.flickr.com/photos/digikam/7185880449/)
+
+Showfoto 2.0.0-beta3 splash screen by [Ruben Marquez](http://www.facebook.com/ruben.marquez.7370)
+
+[![](http://farm9.staticflickr.com/8009/7371111136_ba335cc03c.jpg)](http://www.flickr.com/photos/digikam/7371111136/)
+
+digiKam 2.0.0-beta2 splash screen by [Martin Klapetek](https://plus.google.com/u/0/101026761070865237619)
+
+[![](http://farm8.staticflickr.com/7079/7371115040_9425284660.jpg)](http://www.flickr.com/photos/digikam/7371115040/)
+
+Showfoto 2.0.0-beta2 splash screen by [Mohamed Malik](https://plus.google.com/u/0/111599124138123376638)
+
+[![](http://farm8.staticflickr.com/7083/7185884213_349d7998bc.jpg)](http://www.flickr.com/photos/digikam/7185884213/)
+
+## digiKam and Showfoto 1.x Splash Screens
+
+digiKam 1.9.0 splash screen by [Alexander Heinlein](http://www.facebook.com/alexander.heinlein)
+
+[![](http://farm9.staticflickr.com/8159/7371122918_0392bbcf36.jpg)](http://www.flickr.com/photos/digikam/7371122918/)
+
+Showfoto 1.9.0 splash screen by **Frank Steinmetzger**
+
+[![](http://farm8.staticflickr.com/7080/7185891945_8fd24c6d46.jpg)](http://www.flickr.com/photos/digikam/7185891945/)
+
+digiKam 1.8.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm9.staticflickr.com/8148/7371127940_c527843151.jpg)](http://www.flickr.com/photos/digikam/7371127940/)
+
+Showfoto 1.8.0 splash screen by [Mathias Ball](http://www.facebook.com/mathias.ball)
+
+[![](http://farm6.staticflickr.com/5312/7185897173_9146d3d694.jpg)](http://www.flickr.com/photos/digikam/7185897173/)
+
+digiKam 1.7.0 splash screen by [Ondrej Sury](http://www.facebook.com/oerdnj)
+
+[![](http://farm9.staticflickr.com/8023/7185902737_32ca16f0f7.jpg)](http://www.flickr.com/photos/digikam/7185902737/)
+
+Showfoto 1.7.0 splash screen by **Wolfgang Ruth**
+
+[![](http://farm8.staticflickr.com/7228/7371132162_9062962020.jpg)](http://www.flickr.com/photos/digikam/7371132162/)
+
+digiKam 1.6.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm9.staticflickr.com/8017/7185905755_13c6f33867.jpg)](http://www.flickr.com/photos/digikam/7185905755/)
+
+Showfoto 1.6.0 splash screen by **Santoro Domenico**
+
+[![](http://farm9.staticflickr.com/8004/7371136350_d993bb0a62.jpg)](http://www.flickr.com/photos/digikam/7371136350/)
+
+digiKam 1.5.0 splash screen by [Johannes Wienke](https://plus.google.com/u/0/106772984759351281130)
+
+[![](http://farm8.staticflickr.com/7101/7185908445_ba79a1207d.jpg)](http://www.flickr.com/photos/digikam/7185908445/)
+
+Showfoto 1.5.0 splash screen by [Johannes Wienke](https://plus.google.com/u/0/106772984759351281130)
+
+[![](http://farm9.staticflickr.com/8146/7371138986_24b4d562b0.jpg)](http://www.flickr.com/photos/digikam/7371138986/)
+
+digiKam 1.4.0 splash screen by [Kalyan Varma](https://plus.google.com/u/0/102162250767186195018)
+
+[![](http://farm8.staticflickr.com/7081/7185911473_9a208e82b0.jpg)](http://www.flickr.com/photos/digikam/7185911473/)
+
+Showfoto 1.4.0 splash screen by [Dmitri Popov](https://plus.google.com/u/0/113174485241075479693)
+
+[![](http://farm8.staticflickr.com/7086/7185911399_eb10b4eb61.jpg)](http://www.flickr.com/photos/digikam/7185911399/)
+
+digiKam 1.3.0 splash screen by **Santoro Domenico**
+
+[![](http://farm9.staticflickr.com/8159/7185914387_57128ba9b6.jpg)](http://www.flickr.com/photos/digikam/7185914387/)
+
+Showfoto 1.3.0 splash screen by [Kalyan Varma](https://plus.google.com/u/0/102162250767186195018)
+
+[![](http://farm8.staticflickr.com/7104/7371144834_e851c7aa71.jpg)](http://www.flickr.com/photos/digikam/7371144834/)
+
+digiKam 1.2.0 splash screen by [Johannes Wienke](https://plus.google.com/u/0/106772984759351281130)
+
+[![](http://farm8.staticflickr.com/7216/7185917557_55062f8930.jpg)](http://www.flickr.com/photos/digikam/7185917557/)
+
+Showfoto 1.2.0 splash screen by [Petr Sigut](http://www.facebook.com/petr.sigut.5)
+
+[![](http://farm9.staticflickr.com/8145/7371148014_cc00177ab9.jpg)](http://www.flickr.com/photos/digikam/7371148014/)
+
+digiKam 1.1.0 splash screen by [Kanwar Plaha](https://plus.google.com/u/0/107189467219077174520)
+
+[![](http://farm6.staticflickr.com/5117/7371152012_cbf8897603.jpg)](http://www.flickr.com/photos/digikam/7371152012/)
+
+Showfoto 1.1.0 splash screen by [Elisa Mattos](https://plus.google.com/u/0/104991114888555962774)
+
+[![](http://farm9.staticflickr.com/8157/7185921599_47cb99224e.jpg)](http://www.flickr.com/photos/digikam/7185921599/)
+
+digiKam 1.0.0 splash screen by **Arturo Mann**
+
+[![](http://farm8.staticflickr.com/7093/7371154514_9f5e81b323.jpg)](http://www.flickr.com/photos/digikam/7371154514/)
+
+Showfoto 1.0.0 splash screen by **Arturo Mann**
+
+[![](http://farm8.staticflickr.com/7213/7371154460_9690a8d539.jpg)](http://www.flickr.com/photos/digikam/7371154460/)
+
+## Old Splash Screens With Obsolete Logo
+
+digiKam 0.10.0 splash screen by **Fernando Batista**
+
+[![](http://farm8.staticflickr.com/7211/7371158698_68f6424d3b.jpg)](http://www.flickr.com/photos/digikam/7371158698/)
+
+digiKam 0.9.2 splash screen by **Juergen Flosbach**
+
+[![](http://farm8.staticflickr.com/7077/7185928235_aa05fe4a28.jpg)](http://www.flickr.com/photos/digikam/7185928235/)
+
+digiKam 0.9.1 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm8.staticflickr.com/7091/7371173072_d1fd7aa4c9.jpg)](http://www.flickr.com/photos/digikam/7371173072/)
+
+digiKam 0.9.0 splash screen by **Dennis Gnad**
+
+[![](http://farm8.staticflickr.com/7078/7371173104_815eefa10d.jpg)](http://www.flickr.com/photos/digikam/7371173104/)
+
+Showfoto 0.8.0 splash screen by **Boris**
+
+[![](http://farm8.staticflickr.com/7084/7185948079_2667445269.jpg)](http://www.flickr.com/photos/digikam/7185948079/)
+
+digiKam 0.7.3 splash screen by **Andreas Fischer**
+
+[![](http://farm6.staticflickr.com/5349/7185948115_1817d0341a.jpg)](http://www.flickr.com/photos/digikam/7185948115/)
+
+digiKam 0.7.2 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm6.staticflickr.com/5240/7371196482_c8f93612bd.jpg)](http://www.flickr.com/photos/digikam/7371196482/)
+
+digiKam 0.7.1 splash screen by **Yemu**
+
+[![](http://farm6.staticflickr.com/5347/7371196528_60347df93d.jpg)](http://www.flickr.com/photos/digikam/7371196528/)
+
+digiKam 0.7.0 splash screen by **Yves Chaufour**
+
+[![](http://farm8.staticflickr.com/7076/7185972213_117b674a10.jpg)](http://www.flickr.com/photos/digikam/7185972213/)
+
+digiKam 0.6.2 splash screen by **Yves Chaufour**
+
+[![](http://farm8.staticflickr.com/7093/7371202478_882d778a43.jpg)](http://www.flickr.com/photos/digikam/7371202478/)
+
+Showfoto 0.6.0 splash screen by **Juergen Flosbach**
+
+[![](http://farm8.staticflickr.com/7224/7371206174_22473962f3.jpg)](http://www.flickr.com/photos/digikam/7371206174/)
+
+Showfoto 0.5.0 splash screen by **Rainer Krienke**
+
+[![](http://farm8.staticflickr.com/7224/7185975839_8095a35c0c.jpg)](http://www.flickr.com/photos/digikam/7185975839/)
+
+Showfoto 0.4.0 splash screen by **Dudas Gabor**
+
+[![](http://farm8.staticflickr.com/7222/7185979401_1464a3e3b6.jpg)](http://www.flickr.com/photos/digikam/7185979401/)
+
+Showfoto 0.3.0 splash screen by [Gilles Caulier](https://plus.google.com/u/0/116398684787400584523)
+
+[![](http://farm8.staticflickr.com/7226/7371209666_28395128b3.jpg)](http://www.flickr.com/photos/digikam/7371209666/)
diff --git a/content/about/testimonials.md b/content/about/testimonials.md
deleted file mode 100644
index eb4f4fef8..000000000
--- a/content/about/testimonials.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-date: "2017-03-21"
-title: "Testimonials"
-author: "digiKam"
-description: "Hear what others have to say about digiKam"
-category: "about"
-aliases: "/testimonials"
----
-
-<div class="content"><p><i>Hey: this digikam is just fantastic! How could I ever organize my photos in the old days (some weeks ago) when I still had to work on win and had only photoshop and a file-maker database, where I had to write all the scripts on my own...? You've got a fan with me :-))</i></p>
-<p>Daniel Bauer, <a href="http://www.daniel-bauer.com"> photographer from Basel, Switzerland</a> from digiKam user mailing list.</p>
-<hr>
-<p><i>I'm surprised I got the black and white photos look almost like film texture-wise, a process I couldn't do before with conventional Levels, Curves and Saturation adjustments in Photoshop or Gimp. I am getting more and more impressed with the power digiKam's editing tools<br>
-have! I don't think I would be needing GIMP for photos anymore.</i></p>
-<p><a href="http://glibberish.org/archives/171"> From Joon Guillen blog's</a> a digiKam user from Hong Kong.</p>
-<hr>
-<p><i>digiKam is great! Just thought I'd thank you and your team for great program. I have been using it to organize my photos since starting to use my Powershot camera and now have nearly 25000 photos neatly arranged. thanks to your program. digiKam has been working nicely through different versions with minor bugs now and then. Keep up the good work and thanks for making it open source.</i></p>
-<p>From a private mail sent in April 2008 to Gilles Caulier by a digiKam user.</p>
-<hr>
-<p><i>I am using digiKam since version 0.6.0, and i am more and more amazed of it. Thats just all i want to tell you. I am a professional C++ programmer, and my judgment is: excellent, really, really excellent work! I thank you and the team very much. "Chapeau!"</i></p>
-<p>From a private mail sent in April 2008 to Gilles Caulier by Edgar Hermanns.</p>
-<hr>
-<p><i>For my picture albums I use digikam, and I always install the kipi-plugins, that allow me to do batch resizing and other fun stuff with my pictures. digiKam is quickly growing into a respectable application, that rivals paid alternatives...</i></p>
-<p><a href="http://ruipires.blogspot.com/2008/05/what-i-do-right-after-installing.html"> From Rui Pires blog's</a> a digiKam user from Lisbon, Portugal.</p>
-<hr>
-<p><i>I fell in love with <a href="http://www.panopixel.org">panorama photography...</a> Creating, editing and storing high resolution panoramas is not an easy task because they can reach great file sizes very easily, and most programs are optimised to work only for what most people use them for - small photos. Luckily I found digiKam, it stores my growing collection in an intuitive manner, and I can access my panoramas quickly and easily. Showfoto, digiKam's image editor, lets me do crucial global adjustments (white balance, curves, etc) to my panoramas in 48bpp mode, which guarantees smooth skies and plenty of space for maneuver, and then I can export to Gimp (which currently only supports 24bpp images) to do reprojection, tripod removal and local corrections. My digiKam typically handles 15 000 x 7 500 px panoramas at 48bpp, but I can also easily cross the 1 gigapixel barrier.</i></p>
-<p>From a private mail sent in Mai 2008 to Gilles Caulier by Maciek Dworak, a digiKam user from Poland.</p>
-<hr>
-<p><i>The FOSS world offers an abundance of excellent digital image-editing applications. Here is a sampling of my favorites: digiKam is an awesome all-in-one photo archiving and management, editing, and printing application. It's not an advanced editor like Gimp and Krita, but its feature set is comprehensive enough that you won't need Gimp or Krita for every editing job. It includes dcraw for high-quality RAW file manipulation, all kinds of handy batch processes, tags for organizing vast quantities of photos, and a super-nice composition and cropping editor.</i></p>
-<p><a href="http://www.e-linux.it/news_detail.php?id=6677"> From Carla Schroder web paper</a> named <b>Professional-Level Photography With Linux, And Nobody Goes To Jail</b>.</p>
-<hr>
-<p><i>I run SUSE Linux and have since 2004. One of the aps that come with my distro is Digikam; which is a photo organiser and a fairly powerful image editor; and integrates with flickr. I like that-it simplifies things greatly. Another feature integrated with Digikam is Simpleviewer, which generates Flash photo galleries. You can caption photos with Digikam; and use Simpleviewer to generate a gallery.</i></p>
-<p><a href="http://surewhynotnow.blogspot.com/2008/10/im-back-and-im-beautiful.html"> From Otto Yamamoto blog's</a> a digiKam user from New York, USA.</p>
-<hr>
-<p><i>After a lot of research I chose digiKam which is amazing. It allows you to import images, organize them in a database, tag, comment, rate and all the rest of that stuff. It also comes with an image editor which supports 16 bits. You also get a slide show feature and a very handy Light table. Colors profiling and calibration are also supported and integrated in digiKam.</i></p>
-<p><a href="http://paulindigo.blogspot.com/2008/10/credit-crunch-photo-software.html"> From Paul Indigo blog's</a> a photographer from UK.</p>
-<hr>
-<p><i>Honestly, I do not see the need for Windows these days. I have even stopped using Picasa because digiKam is so amazing - it has automatic DSLR lens correction built in! So unless anybody can give me a damn solid reason for Windows 7, I’m going to keep using my combination of Linux (for the most part) and the Mac (for my mobile computing) and will keep recommending that combination to everyone I meet.</i></p>
-<p><a href="http://carlmenezes.blogspot.com/2009/04/convince-me-windows-7-is-better.html"> From Carl blog's</a> a digiKam user.</p>
-<hr>
-<p><i>I thought I'd drop you a note to thank you for your work on digiKam. My wife has been using digiKam for over 4 years now (under Gnome). We just upgraded her system to Ubuntu 10.4 and she *really* likes some of<br>
-the new features. You've made her very happy (and thus me too).</i></p>
-<p>Mark Elendt, from digiKam user mailing list.</p>
-<hr>
-<p><i>At the moment, I am investing a good bit of energy into learning my way around Arch Linux, and digiKam is probably my favorite piece of software ever. I am investing a lot of energy into learning to be a good photographer, and Digikam is my digital photo workhorse. It's an amazing piece of work that keeps getting better.</i></p>
-<p><a href="http://www.linuxpromagazine.com/Online/News/The-Audacity-of-Carla-Schroder"> From Carla Schroder article's</a>, writer at linuxpromagazine.com.</p>
-</div>
diff --git a/content/contribute/_index.md b/content/contribute/_index.md
new file mode 100644
index 000000000..b769751f2
--- /dev/null
+++ b/content/contribute/_index.md
@@ -0,0 +1,73 @@
+---
+date: "2017-03-21"
+title: "Contribute"
+author: "digiKam"
+description: "Contribute to the digiKam project"
+category: "donate"
+aliases: "/contrib"
+menu: "navbar"
+---
+
+The easiest way to contribute is to spread the word about digiKam. We also encourage you to test digiKam, report bugs, and submit feature requests. You might also want to subscribe to the [digikam-users](https://mail.kde.org/mailman/listinfo/digikam-users) mailing list and help other digiKam users with their questions and problems.
+
+## Reporting Bugs and Submitting Feature Requests
+
+Use the bug tracking system for all bug reports and new feature requests. Take a look at the [support page](/?q=support) for further information.
+
+## Dealing with Crashes in digiKam
+
+In case digiKam crashes, you can provide a backtrace using GDB debugger. digiKam needs to be compiled with all debug info; otherwise the backtrace will be useless. If you installed digiKam using the packages provided by your distribution, make sure to install the corresponding debug package. [The debugging guide](https://community.kde.org/Guidelines_and_HOWTOs/Debugging) provides further information on debugging.
+
+To get a backtrace on Linux with GDB, use following commands:
+
+```
+$ gdb digikam
+(gdb) catch throw
+(gdb) run
+(gdb) ...
+(gdb) _crash here_
+(gdb) ...
+(gdb) bt
+(gdb) _the backtrace is here_
+(gdb) quit
+```
+
+On Windows, the binary installer comes with a dedicated GDB, while macOS users can run **lldb** debugger as follows:
+
+ lldb /opt/digikam/Applications/KF5/digikam.app/Contents/MacOS/digikam
+
+## Checking for Memory Leaks
+
+To check for memory leaks in digiKam, use the [valgrind](http://valgrind.org) tool. Run the command below, and report the trace to developers:
+
+ valgrind --tool=memcheck --leak-check=full --error-limit=no digikam
+
+## Freezes and Other Issues
+
+On Linux, run digiKam from the command line to get the output generated by the application. On macOS, digiKam executable is installed in _/opt/digikam/Applications/KF5/digikam.app/Contents/MacOS/digikam_, and you can use it to start the application from the command line to view debug traces. On Windows, trace is not sent to the console. You need to install [DebugView tool](http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx) to capture debug traces generated by digiKam.
+
+## Submitting Patches
+
+Before you submit patches, please read the [HACKING file](https://cgit.kde.org/digikam.git/tree/HACKING). Send patches against the current version of the code (latest git/master revision) and not the stable release or an old beta version. Patches can be created using the following command:
+
+ git diff HEAD > mydiff.patch
+
+The patches must be attached to a new entry in [Bugzilla](https://www.digikam.org/support). Please do not use mailing lists or private mail.
+
+## Translations
+
+If you want to contribute to the digiKam internationalization effort, contact the translation teams at [http://l10n.kde.org/](http://l10n.kde.org/). Also, please read the [Translation HOWTO](http://l10n.kde.org/docs/translation-howto/).
+
+## Documentation
+
+Help with digiKam documentation is always welcome. For all documentation-related matters, write to [digiKam-devel mailing list](https://mail.kde.org/mailman/listinfo/digikam-devel). Our [documentation](http://docs.kde.org/development/en/extragear-graphics/digikam/index.html) is based on the [docbook format standard](http://l10n.kde.org/docs/doc-primer/index.html). The [README](https://cgit.kde.org/digikam-doc.git/tree/README) file explains in detail how structure the documents, take screenshots, etc.
+
+It's also possible to submit additions and changes in the ASCII format. To do this, create a new Bugzilla entry with a patch against git/master code, so it can be incorporated in the documentation.
+
+### Pictures Samples
+
+We need raw and JPEG files from different manufacturers (Canon, Nikon, Sony, Olympus, Sigma, etc.). We use these files to analyze embedded metadata to improve camera support in digiKam. We also need sample files produced by different applications (including other platforms and proprietary software like Adobe Photoshop) that include IPTC/XMP metadata. This can help us to improve compatibility with other tools and implement automatic import of this data into the digiKam database.
+
+## Splash Screens
+
+As a photographer, you can submit your best photos for use as digiKam splash screen. Take a look [at this page](http://www.digikam.org/splashcreens) for further information.
diff --git a/content/documentation/FAQ.md b/content/documentation/FAQ.md
index 44ec8a933..031851ede 100644
--- a/content/documentation/FAQ.md
+++ b/content/documentation/FAQ.md
@@ -1,667 +1,665 @@
---
date: "2017-03-21"
title: "FAQs"
author: "digiKam"
description: "Frequently asked questions about digiKam"
category: "documentation"
aliases: "/faq/digikam"
---
-## My camera is not in the list of supported cameras in digiKam.
+### My camera is not in the list of supported cameras in digiKam.
Can you add drivers for my camera ?
Only if you pay me. ;)
Seriously, digiKam doesn't included any camera drivers with it. It makes use of <a href="http://www.gphoto.org/">gphoto2</a> to do camera operations. If your camera is not in the supported list, i would recommend doing some <a href="http://www.google.com">searching</a> around. Many of the new cameras actually provide a USB MassStorage Device Interface, so that you can access the camera like a hard disk. (See, the FAQ about using a USB MassStorage Camera with digiKam).
If you have still have no luck, i would recommend contacting the gphoto2 people.
-## How can I inform you about bugs and wishes?
+### How can I inform you about bugs and wishes?
-##### Reporting bugs and wishes
+##### Reporting bugs and wishes
Please use the KDE bug tracking system for all bugreports and new feature wishlists. You can checkout the current bugreports and wishlists at these urls
* <a href="http://bugs.kde.org/buglist.cgi?product=digikam&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED">digiKam bugs and wishes</a>
* <a href="http://bugs.kde.org/buglist.cgi?product=digikamimageplugins&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED">digiKamImagePlugins bugs and wishes</a>
* <a href="http://bugs.kde.org/buglist.cgi?product=kipiplugins&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED">KIPI bugs and wishes</a>
-## I have a USB Mass Storage Camera. How do I use it with digiKam ?
+### I have a USB Mass Storage Camera. How do I use it with digiKam ?
-### The Easy Way!
+#### The Easy Way!
If you have a relatively modern Linux distribution that is pre-configured to work with USB Mass Storage Devices, there's nothing you need to set up!. It should be truly "plug and play":
* Plug your device in to the USB slot
* It will be automatically detected by the kernel, and an appropriate entry in /etc/fstab will be added automatically.
* The device will be mounted under /mnt/flash or /mnt/camera
-* Run digikam setup and add a "Mounted Camera". Set the path to the above path, where the camera is mounted.
+* Run digiKam setup and add a "Mounted Camera". Set the path to the above path, where the camera is mounted.
-### Manual Setup
+#### Manual Setup
If you're running a Linux distribution that doesn't set up USB Mass Storage devices automatically, here are the steps you need to follow:
-* Most users using a recent Linux Distribution can skip this step. Configure the Linux Kernel:
- * Add SCSI Support
- SCSI Support (CONFIG_SCSI)
- SCSI IDE Support (CONFIG_BLK_DEV_IDESCSI)
- SCSI disk support (CONFIG_BLK_DEV_SD)
- SCSI generic support (CONFIG_CHR_DEV_SG)
- * Add USB Support
- Support for USB (CONFIG_USB)
- USB drivers. One or more of: ECHI HCD (CONFIG_USB_EHCI_HCD), UHCI (CONFIG_USB_UHCI), OHCI (CONFIG_USB_OHCI)
- Preliminary USB device file system (CONFIG_USB_DEVICEFS)
- USB Mass Storage support (CONFIG_USB_STORAGE)
+* Most users using a recent Linux Distribution can skip this step. Configure the Linux Kernel:
+ * Add SCSI Support
+ SCSI Support (CONFIG_SCSI)
+ SCSI IDE Support (CONFIG_BLK_DEV_IDESCSI)
+ SCSI disk support (CONFIG_BLK_DEV_SD)
+ SCSI generic support (CONFIG_CHR_DEV_SG)
+ * Add USB Support
+ Support for USB (CONFIG_USB)
+ USB drivers. One or more of: ECHI HCD (CONFIG_USB_EHCI_HCD), UHCI (CONFIG_USB_UHCI), OHCI (CONFIG_USB_OHCI)
+ Preliminary USB device file system (CONFIG_USB_DEVICEFS)
+ USB Mass Storage support (CONFIG_USB_STORAGE)
* Load the required kernel modules: modprobe ide-scsi sd_mod sg vfat modprobe usb-ohci (or usb-uhci depending on your usb bus) modprobe usb-storage (or usb-uhci depending on your usb bus)
* Plug in your USB device. You should see your device listed in /proc/bus/usb/devices. If not, you need to fix the kernel or check your cabling.
* Use the sg3-utils package to determine the device name of your USB Mass Storage Device:
* Install the sg3-utils package (e.g. on Debian, Lindows: apt-get install sg3-utils)
* Connect the camera and turn it onto the picture display mode
- * List your raw SCSI devices by running sg_scan -i. The output will look something like this:
+ * List your raw SCSI devices by running sg_scan -i. The output will look something like this:
```
/dev/sg0: scsi0 channel=0 id=0 lun=0 [em] type=5 _NEC CD-ROM CD-3002A C000 [wide=0 sync=0 cmdq=0 sftre=0 pq=0x0]
/dev/sg1: scsi1 channel=0 id=0 lun=0 [em] type=0 OLYMPUS C-120/D-380 1.00 [wide=0 sync=0 cmdq=0 sftre=0 pq=0x0]
```
* This tells me that I have 2 SCSI devices on my system: My CD drive on /dev/sg0, and a OLYMPUS D-380 Camera on /dev/sg1
* Determine the real SCSI device associated with your USB Mass Storage Device with sg_map. The output looks like: /dev/sg0 /dev/sr0 /dev/sg1 /dev/sda
* Now we can match the results of these last two steps. For example the Olympus camera is on the /dev/sda device.
* In most cases, USB Mass Storage Devices will only have one partition on them, so we can safely assume that the final, mountable device is /dev/sda1 (the first partition on /dev/sda).
* Make a directory where you can mount the camera: mkdir /mnt/camera; chmod 666 /mnt/camera
* Try mounting the camera now: mount -t vfat /dev/sda1 /mnt/camera
- * If no errors show up, then you have performed all the steps correctly. To verify everything is right, point you file manager to /mnt/camera and you should be able to see the folder/pictures on the camera
+ * If no errors show up, then you have performed all the steps correctly. To verify everything is right, point you file manager to /mnt/camera and you should be able to see the folder/pictures on the camera
* Add an entry to /etc/fstab for the mount point: /dev/sda1 /mnt/camera auto defaults,user,noauto 0 0
* Now it's ready to go. Any user can mount the device: mount /mnt/camera
* Make sure you unmount it before taking the card out or unplugging it: umount /mnt/camera
-* Run digikam setup and add a USB MassStorage Camera. Set the path to the above path, where the camera is mounted.
+* Run digiKam setup and add a USB MassStorage Camera. Set the path to the above path, where the camera is mounted.
-## Thumbnail generation fails on large files
+### Thumbnail generation fails on large files
-Q: On all my albums, digikam fails to generate thumbnails on some images. The only pattern I can spot is that it fails on largish files (bigger than 1MB). When the thumnails are generated, the ones that fail appear at first and then are replaced by the broken picture icon.
+Q: On all my albums, digiKam fails to generate thumbnails on some images. The only pattern I can spot is that it fails on largish files (bigger than 1MB). When the thumnails are generated, the ones that fail appear at first and then are replaced by the broken picture icon.
A: try changing the following setting:
kcontrol-&gt;kde components-&gt;file manager-&gt;Previes &amp; Metadata (tab)-&gt;Maximum file size
-## Using hotplugging with digiKam
+### Using hotplugging with digiKam
-### Introduction
+#### Introduction
With Kernel 2.4 came a hotplug support into Linux. This feature is also supported by gPhoto, which is used as camera driver from digiKam. So it should (and is) possible to add an hotplug feature into digiKam. This article tells you what are the requirements and what you have to do.
When you put a device into a hotplug bus like USB, the kernel detects it and looks if it has a suitable driver compiled inside. If not, the hotplug module is called and asked what to do. <a href="http://www.gphoto.org/">gPhoto2</a> offers a way to configure hotplug for USB cameras. Doing so, the hotplug module will call a gphoto2 library to add a driver and afterthat a customizable script calls the application that should interact with the device. This implementation uses two scripts. The first one, usbcam, is called as root and his job is to determine the active user and call the 2nd script digikam-hotplug using the users id. Both scripts could be downloaded here.
-### Requirements
+#### Requirements
The following requirements should be fullfilled to use digiKam with the hotplugging feature. Notice, it is also possible to change some of the requirements, but then you&amp;apsll have to do additional research to get the solution up and running.
* Linux with Kernel &gt;= 2.4, compiled with hotplugging Support
* gphoto 2.x and libgphoto 2.x
* Perl 5.6.x
* KDE 3.x
* digiKam digiKam 0.7.1+
As an additional remark, i should mention that the digikam-hotplug script that you could donwload requires KDE not only installed, it has to be the active Window Manager.
-### Installation and Configuration
+#### Installation and Configuration
This section gives the same information like <a href="http://www.gphoto.org/doc/manual/permissions-usb.html#setting-up-linux-hotplug/">chapter 4.3</a> from the gPhoto manual. It simply describes howto setup the kernel hotplugging feature. The only difference are digiKam specific <a href="http://digikam.free.fr/hotplug/usbcam.tar.gz">scripts</a>.
-#### Checking the kernel hotplugging feature
+##### Checking the kernel hotplugging feature
First you should check whether your kernel comes with the required hotplugging feature. Therefore look if you have a file
`cat /proc/sys/kernel/hotplug`
and if it points to a valid hotplug binary. If not, you'll have to compile a new kernel with hotplugging support. It does'nt matter whether the hotplugging support is directly compiled into the kernel or if it is compiled as module.
libgphoto comes with the program print-usb-usermap which is usually located under
`/usr/lib/libgphoto2/print-usb-usermap` or `/usr/local/lib/libgphoto2/print-usb-usermap`
This program tells the hotplug module, which cameras are supported by the installed version from gPhoto. All you have normally to do is
`/usr/lib/libgphoto2/print-usb-usermap > /etc/hotplug/usb/usbcam.usermap`
Now you have to download the scripts, untar them using
`tar xvzf usbcam.tar.gz`
<strong>Notice:</strong> There are two versions of the scripts. The 0.2.x series support digiKam 0.6.x and the 0.3.x series digiKam 0.7.1+. Rename your version to usbcam and digikam-hotplug, and copy them to
`/etc/hotplug/usb/usbcam`
and make usbcam executable for root and digikam-hotplug executable for the users that it should work for. For security reasons you should also check, that only root has write permissions on each file.
To test your installation, you'll have to unplug your camera, wait a few seconds and plug it in again. After a few moments digiKam should start and connect automaticly to your camera.
If you have problems doing this, you should read the original gphoto documentation and check the syslog for notices from the two scripts.
-### Copyright
+#### Copyright
This script was writen by Oliver Dörr based on the usbcam script original distributed from the gPhoto Project. Because i'm using their code using the GPL license, this code is also distributed under the same license.
-## Which file format should I use?
+### Which file format should I use?
Most digital cameras store images in jpeg format on the memory card. JPEG is a compressed format, whose compression causes loss of quality. Heavy compression may make the loss of quality visible to the eye. Every time you open a JPEG image, edit it, save the file and close it, the image is compressed and quality is lost. Lost quality can not be regained.
-To avoid this repeated loss of quality you should save your edited files in a lossless format. Digikam understands two of these: Tiff and png. In digiKam it is advisable to use png. Digikam supports the exif data in png files, whereas (currently) for tiff files, exif data are lost.
+To avoid this repeated loss of quality you should save your edited files in a lossless format. digiKam understands two of these: Tiff and png. In digiKam it is advisable to use png. digiKam supports the exif data in png files, whereas (currently) for tiff files, exif data are lost.
So the recommendation is to save any edited files as png.
You have now finished editing your photos and are content with the results. Should you keep the png-files or convert them to the far smaller JPEG files for storage?. If you are very concerned about storage space, you can do the latter. You could, however rather keep the lossless png files and only create JPEG copies in the moment you want to take your images to the print shop, send them by email or post them on the web.
-## Why are my RAW images so dark?
+### Why are my RAW images so dark?
In 16-bit mode, many are surprised that a relatively dark photograph shows up after RAW conversion with digiKam, even so the 'ColorManagement' and 'RAW Conversion' options have been meticulously set-up for the intended purpose. The simple reason is that digiKam uses Dave Coffin's <a href="http://cybercom.net/~dcoffin/dcraw/">dcraw</a> for linear conversion, and if the ICC profile does not include gamma correction and/or tone mapping (most Canon profiles), the result is dark (in 8-bit mode the gamma correction is applied automatically). But nothing is lost, read on!
A RAW file is a container including the raw sensor data, EXIF metadata, and often a JPEG preview thumbnail. It does normally not include an ICC profile. The embedded JPEG file is used by digiKam to display RAW image thumbnails or in slide shows, and it can be used for TV display from the camera. This is fast, but a preview only, no raw data.
RAW conversion requires a couple of steps in order to produce a satisfying result, better adapted to your needs than JPEG out-of-the-camera images:
1. Choice of the internal working space in regard to the intended use
2. Adjust tonal range - define thresholds for highlights and shadows
3. Adjust gradation - adjust mid tones, for example using numerical numbers in the histogram or curves like features
4. Alter white balance if necessary
5. Color cast removal ideally using color temperature (or an according eyedropper tool) as well as a tint / tone slider. An according eye-dropper tool can be applied simply by clicking inside the image on neutral grey subject tones. This procedure doesn't always create the expected result, because quite often the light situation while capturing the image wasn't neutral either.
6. Smoothing and noise removal (if not done in the conversion process already)
7. Apply sharpening (refocus, unsharpmask)
8. Choose final color bitdepth (saving as JPEG always reverts to 8-bit depth, use PNG or TIFF for 16-bit)
9. Select output and pixel dimensions – upsampling on the RAW file often gives better results in comparison to already processed files
10. Continue editing for example retouching or small enhancements in the favorite imaging application
Now, most profiles that come with the camera OEM software are not so suited for linear conversion. If you'd like a good profile, do it yourself or via a service. It will be more precise than the standard profile and it will <b>include gamma correction</b> - no dark images anymore in 16-bit mode!
Some good reading on the subject:
* [digiKam documentation](http://docs.kde.org/development/en/extragear-graphics/digikam/using-setup.html#setup-raw-decoder)
* [Primer for ColorManagement](http://www.scribus.net/index.php?name=Web_Links&amp;req=viewlink&amp;cid=4)
* [Wikipedia](http://en.wikipedia.org/wiki/Color_management)
* [OpenRAW.org](http://www.openraw.org/actnow/)
* [European Color Initative ECI](http://eci.org/eci/en/020_eci.php)
-## digiKam doesn't work when album library is on a network share (nfs, samba)
+### digiKam doesn't work when album library is on a network share (nfs, samba)
DigiKam freezes when I store my album library on a NFS server, NAS, windows shared folder, etc. What can I do ?
digiKam uses sqlite to store informations about images (tags, comments, rates, ...). Sqlite relies on file locking features provided by filesystems (check <a href="http://www.sqlite.org/faq.html#q5">this FAQ entry</a>). But, network file systems often have troubles with locking and this can cause unexpected problems with sqlite.
In order to solve this problem, try one of the following workarounds :
* Use a <a href="http://thoughtsonrails.wordpress.com/2007/03/03/digikam-albums-on-network-filesystem/">symlink for some albums stored on a network path</a>
* Use a <a href="http://lists.kde.org/?l=kde-bugs-dist&amp;m=117536777106366&amp;w=2">symlink for the sqlite database file</a>. This method is preferred if you want to have all your album library on a network path.
Note: the digiKam team is aware of this problem and is working on it. In the future, it will be possible to use another database backend to solve it.
-## How to create a digikam theme?
+### How to create a digiKam theme?
#### Header
Since 0.9.3 release, theme are based on pure XML format. Comments in the theme are done by using common XML markers to include comments. The header is the place where you can add some comments, give credit to yourself... Look an existing XML theme file for details.
-#### Base Properties XML Markers
+##### Base Properties XML Markers
name: Marine
CaseColor: #FFFFFF
TextRegularColor: #000000
TextSelectedColor: #000000
TextSpecialRegularColor: #658857
TextSpecialSelectedColor: #FFFFFF
-BaseColor is the background color which shall be used for the thumbnail view on the right and album/tag tree on the left.
-TextRegularColor is used for regular (unselected) text and TextSelectedColor is used for selected text. usually the selected region tends to be brighter or darker and the selected text needs to contrast with it. TextSpecial... are the colors which are used for rendering of some special text like the tags at the bottom of the thumbnails and the collection/date names in the left view.
+BaseColor is the background color which shall be used for the thumbnail view on the right and album/tag tree on the left.
+TextRegularColor is used for regular (unselected) text and TextSelectedColor is used for selected text. usually the selected region tends to be brighter or darker and the selected text needs to contrast with it. TextSpecial... are the colors which are used for rendering of some special text like the tags at the bottom of the thumbnails and the collection/date names in the left view.
The color specification is done by using standard HTML color format (RGB/hexadecimal).
-#### Banner Properties XML Markers
+##### Banner Properties XML Markers
BannerColor: #4BFF9C
BannerColorTo: #35B56F
BannerBevel: RAISED
BannerGradient: HORIZONTAL
BannerBorder: TRUE
BannerBorderColor: #2FA062
-These specifications are used to render the banner at the top of the thumbnail view.
-BannerBevel indicates the type of bevel to use for the banner, possible choices are RAISED (for a raised appearance), SUNKEN (for a sunken appearance), FLAT (for a flat appearance). BannerGradient is used for rendering a gradient; the possible choices are SOLID (no gradient), HORIZONTAL (horizontal gradient), VERTICAL (vertical gradient), DIAGONAL (diagonal gradient). There are two color specifications: Color and ColorTo. If a SOLID gradient is specified only "Color" is used, for other cases the gradient is rendered from "Color" to "ColorTo". BannerBorder indicates whether a border should be drawn around the banner, using BannerBorderColor. set it to "TRUE" for rendering a border and to "FALSE" otherwise.
+These specifications are used to render the banner at the top of the thumbnail view.
+BannerBevel indicates the type of bevel to use for the banner, possible choices are RAISED (for a raised appearance), SUNKEN (for a sunken appearance), FLAT (for a flat appearance). BannerGradient is used for rendering a gradient; the possible choices are SOLID (no gradient), HORIZONTAL (horizontal gradient), VERTICAL (vertical gradient), DIAGONAL (diagonal gradient). There are two color specifications: Color and ColorTo. If a SOLID gradient is specified only "Color" is used, for other cases the gradient is rendered from "Color" to "ColorTo". BannerBorder indicates whether a border should be drawn around the banner, using BannerBorderColor. set it to "TRUE" for rendering a border and to "FALSE" otherwise.
-#### Thumbnail Properties XML Markers
+##### Thumbnail Properties XML Markers
ThumbnailRegularColor: #E7FFF4
ThumbnailRegularColorTo: #C4D8CF
ThumbnailRegularBevel: RAISED
ThumbnailRegularGradient: HORIZONTAL
ThumbnailRegularBorder: TRUE
ThumbnailRegularBorderColor: #769286
ThumbnailSelectedColor: #4BFF9C
ThumbnailSelectedColorTo: #35B56F
ThumbnailSelectedBevel: RAISED
ThumbnailSelectedGradient: HORIZONTAL
ThumbnailSelectedBorder: TRUE
ThumbnailSelectedBorderColor: #2FA062
These specifications are used for rendering the thumbnails. Regular... is used for unselected thumbnails and Selected... for selected thumbnails. The specifications are similar to that of the banner.
-#### Listview Properties XML Markers
+##### Listview Properties XML Markers
ListviewRegularColor: #FFFFFF
ListviewRegularColorTo: #FFFFFF
ListviewRegular.bevel: FLAT
ListviewRegular.gradient: SOLID
ListviewRegular.border: FALSE
ListviewRegularBorderColor: #FFFFFF
ListviewSelectedColor: #4BFF9C
ListviewSelectedColorTo: #35B56F
ListviewSelectedBevel: RAISED
ListviewSelectedGradient: HORIZONTAL
ListviewSelectedBorder: TRUE
ListviewSelectedBorderColor: #2FA062
These are used for rendering the items on the left treeview. again, the specifications are same as that of the banner.
-Notes:
+Notes:
-* Case sensitivity is important for specifiying the property names, but not for the property values.
-* System level installation of themes is done in $(INSTALLATION_PREFIX)/share/apps/digikam/themes and user level installation in $(HOME)/.kde/share/apps/digikam/themes
+* Case sensitivity is important for specifiying the property names, but not for the property values.
+* System level installation of themes is done in $(INSTALLATION_PREFIX)/share/apps/digikam/themes and user level installation in $(HOME)/.kde/share/apps/digikam/themes
* Theme names appear in the menu with the filename. Make sure to capitalize the first letter of the filename
-* Its not necessary to restart digikam if you modify the theme. switch to a different theme and switch back. But if you add a new theme, you will have to restart digikam for the new theme to be recognized.
+* Its not necessary to restart digiKam if you modify the theme. switch to a different theme and switch back. But if you add a new theme, you will have to restart digiKam for the new theme to be recognized.
-#### Theme editor
+##### Theme editor
You can also try the theme editor include in digiKam since 0.9.3 release.
<a href="http://www.digikam.org/?q=system/files&amp;file=images/digikamthemedesigner_0.png"><img src="http://www.digikam.org/?q=system/files&amp;file=images/digikamthemedesigner_0.preview.png" width="800" height="549" alt="TimeAdjust kipi-plugin for KDE4 in action">
</a>
-## Color Management with X on Linux
+### Color Management with X on Linux
Color management of your monitor is possible with digiKam from version 0.9.0 onwards, but it is slow. The better and more fundamental way is to include the display color management in your X server using profiles. Then all other applications will profit as well.
This <a href="http://linux.vilars.com/">site</a> explains it all, go there for the installation procedure and the How-To's.
Note:
The best way to color-manage the display is to establish a custom profile and use that one, a procedure to be repeated every other year or so for aging reasons. But if you go the easier way and use the profiles delivered from the manufacturer, it is paramount to do a normalization as described for example on the<a href="http://www.alpenglowimaging.com/monitor-calibration.htm"> alpenglow</a> web site.
-## Thumbnail generation fails on video files
+### Thumbnail generation fails on video files
-#### Why don't I have thumbnails for my video files?
+#### Why don't I have thumbnails for my video files?
-#### Why thumbnail generation stops at the first video file I have ?
+#### Why thumbnail generation stops at the first video file I have ?
First, check if it's the same in konqueror.
-Digikam uses KDE to generate thumbnails and KDE rely on aRts to do that.
+Digikam uses KDE to generate thumbnails and KDE rely on aRts to do that.
So, you should check your aRts configuration. ARts can use xine plugin for video files, so try if xine is able to play your video files. You may have to use additional codecs (eg libxine-extracodecs on debian/ubuntu if you already have libarts1-xine) for that.
Try also to play your video files using xine (if libarts1-xine is installed).
Remember that if it doesn't work in konqueror, it won't work in digikam...
-## How can I change the default video player ?
+### How can I change the default video player ?
-#### When I double-click on a video thumbnail, it opens -unwanted video player-, how could I change it to another video player ?
+#### When I double-click on a video thumbnail, it opens -unwanted video player-, how could I change it to another video player ?
-Start kcontrol then go to KDE Components/File Associations, then
-click on video. Here you have a list of file types with the list of
+Start kcontrol then go to KDE Components/File Associations, then
+click on video. Here you have a list of file types with the list of
applications that can open them.
-E.g. if you want another video player for your .avi files, go to
+E.g. if you want another video player for your .avi files, go to
x-msvideo. The first application listed here will be the default one.
-## How can I change the text font size ?
+### How can I change the text font size ?
-#### Size of fonts for text and menus is too big/too small in Digikam. How can I adjust it ?
+#### Size of fonts for text and menus is too big/too small in Digikam. How can I adjust it ?
Start kcontrol then go to Appearance &amp; Thems", then click on "Fonts". Here you can adjust the font size but also choose another font.
Please be warned that this will change the font behavior of all KDE applications !
-## Single-click on a thumbnail opens digikam editor
+### Single-click on a thumbnail opens digiKam editor
-#### When I click on a thumbnail, it opens the digikam editor. How can I disable that ?
+#### When I click on a thumbnail, it opens the digiKam editor. How can I disable that ?
-Start kcontrol then go to Peripherals/Mouse and choose "double-click
+Start kcontrol then go to Peripherals/Mouse and choose "double-click
to open files and folders"
-## Some "Properties" in digikam sidebar are unknown or unavailable
+### Some "Properties" in digiKam sidebar are unknown or unavailable
-#### Why can't I get Image Properties Dimensions or other items ?
+#### Why can't I get Image Properties Dimensions or other items ?
Digikam uses KDE metainfo plugins to display the file properties.
If the "Dimensions" value is "unknown", it means you don't have this plugin.
On debian based distribution (eg Ubuntu), install kdegraphics-kfile-plugins package.
Note: even if you have the right plugin, some other properties (Bits depth, Sensitivity, Compression, ...) can still be unavailable depending on the image file (and your digital camera).
-## digiKam uses konqueror and kmail
+### digiKam uses konqueror and kmail
The kipi-plugins use the default KDE application settings to invoke web browser and email clients.
#### In Metadata/GPS sidebar, when I click on "More Info...", it opens konqueror, how could I change it to another browser (firefox or anything else) ?
Start kcontrol (or systemsettings), then go to "KDE Components/Component Chooser", navigate to "Default Applications", then click on "Web Browser" and choose "in the following browser" where you can put any command.
-#### In Menu-&gt;Image-&gt;Email Images, kmail is invoked, but I use Thunderbird (or any other email client)
+#### In Menu-&gt;Image-&gt;Email Images, kmail is invoked, but I use Thunderbird (or any other email client)
Start kcontrol (or system settings), then go to "KDE Components/Component Chooser", navigate to "Default Applications", then click on "Email Client" and select you preference
The email client can also be specified in the -&gt;Email Images dialog itself on the mail page. The setting will be remembered by digiKam.
Note: If you use Ubuntu, the kcontrol or systemsettings menus will not be available to you, you have do do in the digiKam dialog box as described above.
-## How to deal with utf-8 encoding ?
+### How to deal with utf-8 encoding ?
-#### I just upgraded my preferred linux distribution but now I have warnings about utf-8. I have a warning when starting digiKam about new character encoding. What should I do ?
+##### I just upgraded my preferred linux distribution but now I have warnings about utf-8. I have a warning when starting digiKam about new character encoding. What should I do ?
Nowadays, most linux distributions use utf8 by default for the character encoding. It includes the content of files, but also the file names.
Look here to learn more about utf-8 and unicode :
<a href="http://en.wikipedia.org/wiki/UTF-8">http://en.wikipedia.org/wiki/UTF-8</a>
Digikam will warn you when you change your locale with a new encoding.
Eg, if you switched from iso latin1 (iso8859-1) to utf8, digiKam will send you this warning :
<pre><small>Your locale has changed from the previous time this album was opened.
Old Locale : ISO 8859-1, New Locale : UTF-8
-This can cause unexpected problems. If you are sure that you want to
-continue, click on 'Yes' to work with this album. Otherwise, click on 'No'
+This can cause unexpected problems. If you are sure that you want to
+continue, click on 'Yes' to work with this album. Otherwise, click on 'No'
and correct your locale setting before restarting digiKam
</small></pre>
-Before accepting this modification, you should migrate at least the file names in your albums to utf-8 or you might have troubles because digikam won't be able to access directories which contains accents non encoded in utf-8.
+Before accepting this modification, you should migrate at least the file names in your albums to utf-8 or you might have troubles because digiKam won't be able to access directories which contains accents non encoded in utf-8.
For that purpose, linux distributions propose various solutions and tools, but mainly based on convmv :
</p>
-##### Gentoo
+###### Gentoo
Gentoo has a very nice page about using UTF-8 :
<a href="http://www.gentoo.org/doc/en/utf-8.xml">Using UTF-8 with Gentoo</a>
This could also be useful for users of other distributions.
-##### Mandriva
+###### Mandriva
For Mandriva 2007, it seems that the same convmv can be applied.
-Mandriva provide also a script in their
+Mandriva provide also a script in their
<a href="http://qa.mandriva.com/twiki/bin/view/Main/MandrivaLinux2007Errata#UTF8_issue_when_reinstalling_and">Mandriva 2007 Errata</a> page.
There is also a <a href="http://sebdeblinux.free.fr/">french page</a> to explain how to convert the filename and the content of the files to utf-8.
-##### Suse
+###### Suse
There's a FAQ entry about that :
<a href="http://www.novell.com/coolsolutions/qna/1786.html">Converting filenames to UTF-8 encoding</a>
There are also some informations here :
<a href="http://www.suse.de/~mfabian/suse-cjk/encodings-file-names.html">Converting file names</a> (part of CJK Support in SuSE Linux)
-##### Ubuntu
+###### Ubuntu
With ubuntu, there's a migration tool written in python to do the job :
<a href="http://packages.ubuntulinux.org/dapper/misc/utf8-migration-tool">utf8-migration-tool package</a>
-##### Other unix or linux operating systems
+###### Other unix or linux operating systems
The most used tool to do that is <a href="http://j3e.de/linux/convmv/man/">convmv</a> (written in perl)
Eg (try it first in a test directory and backup everything before!) :
<small>
<pre>convmv --notest -r -f latin1 -t utf-8
</pre>
</small>
-## Is Digikam available in my language ?
+### Is digiKam available in my language ?
-#### How can I use another language instead of the default (english) one ?
+##### How can I use another language instead of the default (english) one ?
-##### Distribution package
+###### Distribution package
-If you installed digikam using your distribution package, language files should be included with it and you can run digikam in any supported language.
+If you installed digiKam using your distribution package, language files should be included with it and you can run digiKam in any supported language.
You can change the default language by using KDE Control Center (kcontrol) :
Go to "Regional &amp; Accessibility" and then in "Country/Region &amp; Language" to use your default language.
Note, that will affects all your KDE applications.
-You can also change the language used in digikam with the $LANG environment variable.
+You can also change the language used in digiKam with the $LANG environment variable.
Eg :
<pre>export LANG=fr.UTF-8 ; digikam</pre>
-##### Compiled from stable or beta release
+###### Compiled from stable or beta release
-If you compiled yourself digikam using the official tarballs, you can use digikam in any supported language. The language files are installed with digikam.
+If you compiled yourself digiKam using the official tarballs, you can use digiKam in any supported language. The language files are installed with digikam.
See above for details about how to use another language.
-##### Compiled from svn (Subversion)
+###### Compiled from svn (Subversion)
-If you compiled yourself digikam from the latest trunk files, you will have to get the languages files you need. Check the <a href="http://www.digikam.org/?q=download/svn#homeinstall">svn download page</a> for more details (eg: sample script to compile digikam in your homedir).
+If you compiled yourself digiKam from the latest trunk files, you will have to get the languages files you need. Check the <a href="http://www.digikam.org/?q=download/svn#homeinstall">svn download page</a> for more details (eg: sample script to compile digiKam in your homedir).
-## Digikam doesn't compile
+### digiKam doesn't compile
-#### I can't compile digikam. What can I do ?
+##### I can't compile digikam. What can I do ?
-First, check that you have development files installed in your linux system. digikam depends on a lot of libs and you must have the headers to compile it.
+First, check that you have development files installed in your linux system. digiKam depends on a lot of libs and you must have the headers to compile it.
Usually, linux distributions have <b>-dev</b> packages when you want to compile something against a specific library. For a list of required dependencies, read the README file. Here's the <a href="http://websvn.kde.org/branches/stable/extragear/graphics/digikam/README?view=markup">current README (svn version)</a>.
On debian-based distribution (eg Debian, Ubuntu), you can install the required packages with :
<pre>apt-get build-dep digikam</pre>
If there are some warnings about unsermake, set the $UNSERMAKE environment variable as "no". Eg :
<pre>export UNSERMAKE=no</pre>
Look also at the <a href="/?q=download">download page</a> for more informations (tarball and svn sections). If you still have problems, check the <a href="http://www.digikam.org/?q=support">support page</a>.
-## Digikam always crashes when doing xxxx. What can I do ?
+### digiKam always crashes when doing xxxx. What can I do ?
-#### When editing IPTC, playing with tags, assigning keywords or doing xxxx, digikam crashes. What's the problem ?
+##### When editing IPTC, playing with tags, assigning keywords or doing xxxx, digiKam crashes. What's the problem ?
It could be a problem with exiv2. It's mandatory to use at least version 0.11 with digikam. So, install a recent version (0.14 is highly recommended).
-If digikam still crash, first check if you already have a former exiv2 library with version &lt; 0.11 installed on your system. There are been many reports about crashes due to old exiv2 libs still present in /usr/lib or /usr/local/lib.
+If digiKam still crash, first check if you already have a former exiv2 library with version &lt; 0.11 installed on your system. There are been many reports about crashes due to old exiv2 libs still present in /usr/lib or /usr/local/lib.
If you found one old lib, remove it if possible, or try at least to rename it to see if it solves the problem.
It's strongly recommended to use the latest stable exiv2 version (0.14 now).
-Then, check the <a href="/?q=support">support</a> and the <a href="/?q=contrib">contrib</a> pages.
+Then, check the <a href="/?q=support">support</a> and the <a href="/?q=contrib">contrib</a> pages.
Try to see if your problem has already been reported by another user in bugs.kde.org .
-If it's not the case, check the contrib page, you will find instructions on how to compile digikam with full debug and how to send us a backtrace.
-
-
+If it's not the case, check the contrib page, you will find instructions on how to compile digiKam with full debug and how to send us a backtrace.
diff --git a/content/documentation/_index.md b/content/documentation/_index.md
new file mode 100644
index 000000000..7e62c75f6
--- /dev/null
+++ b/content/documentation/_index.md
@@ -0,0 +1,43 @@
+---
+date: "2017-03-21"
+title: "Documentation"
+author: "digiKam"
+description: "digiKam Documentation and Resources"
+category: "documentation"
+aliases: "/docs"
+menu: "navbar"
+---
+
+### Documentation and Useful Resources
+
+![digiKam Online Handbook](https://c1.staticflickr.com/1/686/31487551224_35f5203362_z.jpg)
+
+The digiKam documentation comes as a package usually called _digikam-doc_ that you can install locally. You can also read it online (updated automatically every Friday). Some options might differ from your local installation, because the online manuals cover to the development version:
+
+* [digiKam HTML version](http://docs.kde.org/development/en/extragear-graphics/digikam/index.html)
+* [Showfoto HTML version](http://docs.kde.org/development/en/extragear-graphics/showfoto/index.html)
+* [digiKam PDF version](http://docs.kde.org/development/en/extragear-graphics/digikam/digikam.pdf)
+* [Showfoto PDF version](http://docs.kde.org/development/en/extragear-graphics/showfoto/showfoto.pdf)
+
+[digiKam tutorials](https://userbase.kde.org/Digikam/Tutorials) wiki offers tutorials that cover various digiKam tools and functionality.
+
+#### API and Database Schema
+
+If you plan contribute as a developer to digiKam, you might find the following links useful:
+
+* [digiKam API](http://api.kde.org/extragear-api/graphics-apidocs/digikam/html/index.html)
+* [libkipi API](http://api.kde.org/4.x-api/kdegraphics-apidocs/libs/libkipi/libkipi/html/index.html)
+* [libkipiplugins API](https://api.kde.org/extragear-api/graphics-apidocs/kipi-plugins/common/libkipiplugins/html/index.html)
+* [Database schema](https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/project/documents/DBSCHEMA.ODS)
+
+Use [SQliteBrowser](http://sqlitebrowser.sourceforge.net) or the sqlite [Firefox add-on](https://addons.mozilla.org/en-US/firefox/addon/5817) to work with SQlite3 database files.
+
+#### digiKam Source Code
+
+* [digiKam source code](https://projects.kde.org/projects/extragear/graphics/digikam/repository)
+* [kipi-plugins source code](https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository)
+* [libkipi source code](https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository)
+
+### Contributing
+
+We encourage you to improve the existing documentation by submitting comments, corrections, and patches. If you'd like to contribute to the documentation, have a look at the [Contributing](?q=contrib#documentation) page.
diff --git a/content/releases/changelog.md b/content/documentation/changelog.md
similarity index 99%
rename from content/releases/changelog.md
rename to content/documentation/changelog.md
index 828183418..0fde9fe39 100644
--- a/content/releases/changelog.md
+++ b/content/documentation/changelog.md
@@ -1,296 +1,296 @@
---
date: "2017-03-21"
title: "Changelog"
author: "digiKam"
description: "Links to digiKam release change logs."
category: "releases"
aliases: "/changelog"
---
- <div class="content"><a><h5>Files Closed into Bugzilla</h5></a>
+ <div class="content"><a><h3>Files Closed into Bugzilla</h3></a>
<ul>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.5.0&amp;product=digikam&amp;product=kipiplugins">
5.5.0 Release</a> (published at 12/03/2017)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.4.0&amp;product=digikam&amp;product=kipiplugins">
5.4.0 Release</a> (published at 08/01/2017)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.3.0&amp;product=digikam&amp;product=kipiplugins">
5.3.0 Release</a> (published at 06/11/2016)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.2.0&amp;product=digikam&amp;product=kipiplugins">
5.2.0 Release</a> (published at 11/09/2016)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.1.0&amp;product=digikam&amp;product=kipiplugins">
5.1.0 Release</a> (published at 07/08/2016)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=5.0.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
5.0.0 Release</a> (published at 03/07/2016)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.14.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.14.0 Release</a> (published at 11/10/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.13.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.13.0 Release</a> (published at 30/08/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.12.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.12.0 Release</a> (published at 26/07/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.11.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.11.0 Release</a> (published at 14/06/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.10.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.10.0 Release</a> (published at 10/05/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.9.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.9.0 Release</a> (published at 05/04/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.8.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.8.0 Release</a> (published at 01/03/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.7.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.7.0 Release</a> (published at 25/01/2015)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.6.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.6.0 Release</a> (published at 14/12/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.5.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.5.0 Release</a> (published at 09/11/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.4.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.4.0 Release</a> (published at 06/10/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.3.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.3.0 Release</a> (published at 08/09/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.2.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.2.0 Release</a> (published at 03/08/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.1.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.1.0 Release</a> (published at 22/06/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=4.0.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
4.0.0 Release</a> (published at 12/05/2014)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.5.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.5.0 Release</a> (published at 29/09/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.4.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.4.0 Release</a> (published at 01/09/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.3.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.3.0 Release</a> (published at 04/08/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.2.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.2.0 Release</a> (published at 12/05/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.1.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.1.0 Release</a> (published at 10/03/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=3.0.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
3.0.0 Release</a> (published at 27/01/2013)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.9.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.9.0 Release</a> (published at 02/09/2012)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.8.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.8.0 Release</a> (published at 05/08/2012)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.7.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.7.0 Release</a> (published at 08/07/2012)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.6.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.6.0 Release</a> (published at 03/06/2012)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.5.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.5.0 Release</a> (published at 01/01/2012)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.4.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.4.0 Release</a> (published at 04/12/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.3.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.3.0 Release</a> (published at 06/11/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.2.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.2.0 Release</a> (published at 02/10/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.1.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.1.0 Release</a> (published at 04/09/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=2.0.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
2.0.0 Release</a> (published at 24/07/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.9.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.9.0 Release</a> (published at 19/02/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.8.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.8.0 Release</a> (published at 23/01/2011)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.7.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.7.0 Release</a> (published at 19/12/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.6.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.6.0 Release</a> (published at 22/11/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.5.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.5.0 Release</a> (published at 10/10/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.4.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.4.0 Release</a> (published at 22/08/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.3.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.3.0 Release</a> (published at 07/06/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.2.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.2.0 Release</a> (published at 28/03/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.1.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.1.0 Release</a> (published at 31/01/2010)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=1.0.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
1.0.0 Release</a> (published at 20/12/2009)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.10.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.10.0 Release</a> (published at 15/03/2009)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.5&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.5 Release</a> (published at 15/03/2009)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.4&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.4 Release</a> (published at 16/07/2008)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.3&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.3 Release</a> (published at 23/12/2007)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.2&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.2 Release</a> (published at 13/06/2007)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.1&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.1 Release</a> (published at 04/03/2007)
</li>
<li>
<a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;o1=equals&amp;query_format=advanced&amp;v1=0.9.0&amp;product=digikam&amp;product=digikamimageplugins&amp;product=kipiplugins&amp;product=showfoto">
0.9.0 Release</a> (published at 18/12/2006)
</li>
</ul>
-<a><h5>Source Code Repository Changelog</h5></a>
+<a><h3>Source Code Repository Changelog</h3></a>
<ul>
<li>
<a href="https://quickgit.kde.org/?p=digikam.git&amp;a=tree&amp;f=project">digiKam NEWS files</a>
</li>
<li>
<a href="https://quickgit.kde.org/?p=kipi-plugins.git&amp;a=tree&amp;f=project">Kipi-plugins NEWS files</a>
</li>
</ul></div>
diff --git a/content/documentation/docs.md b/content/documentation/docs.md
deleted file mode 100644
index 5d39d8547..000000000
--- a/content/documentation/docs.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-date: "2017-03-21"
-title: "Documentation"
-author: "digiKam"
-description: "How to hack on digiKam!"
-category: "documentation"
-aliases: "/docs"
-menu: "navbar"
----
-
- <div class="content"><h1>User Handbooks</h1>
-<p><a href="https://www.flickr.com/photos/digikam/31487551224/in/dateposted-public/" title="digiKam Online Handbook"><img src="https://c1.staticflickr.com/1/686/31487551224_35f5203362_z.jpg" alt="digiKam Online Handbook" width="640" height="463"></a></p>
-<p>
-The digiKam documentation comes as a separate package usually called <em>digikam-doc</em>) which you have to install for local use. But you can read it online as well (updated automatically each Friday). Some options might differ from your local installation because the online manuals belongs to the development version:
-</p>
-<ul>
-<li><a href="http://docs.kde.org/development/en/extragear-graphics/digikam/index.html">digiKam HTML version</a></li>
-<li><a href="http://docs.kde.org/development/en/extragear-graphics/showfoto/index.html">Showfoto HTML version</a></li>
-</ul>
-<ul>
-<li><a href="http://docs.kde.org/development/en/extragear-graphics/digikam/digikam.pdf">digiKam PDF version</a></li>
-<li><a href="http://docs.kde.org/development/en/extragear-graphics/showfoto/showfoto.pdf">Showfoto PDF version</a></li>
-</ul>
-<p>A <b>wiki page</b> hosted by KDE project is under contruction. Every one can contribute to add and fix wiki contents. Look <a href="http://userbase.kde.org/Digikam">here</a> for details.</p>
-<h1>API and Database schema</h1>
-<p>If you plan contribute as developer to digiKam, you might find these links interesting:</p>
-<ul>
-<li><a href="http://api.kde.org/extragear-api/graphics-apidocs/digikam/html/index.html">digiKam API</a></li>
-<li><a href="http://api.kde.org/4.x-api/kdegraphics-apidocs/libs/libkipi/libkipi/html/index.html">libkipi API</a></li>
-<li><a href="https://api.kde.org/extragear-api/graphics-apidocs/kipi-plugins/common/libkipiplugins/html/index.html">libkipiplugins API</a></li>
-<li><a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/raw/project/documents/DBSCHEMA.ODS">Database schema</a></li>
-</ul>
-<p>Use <a href="http://sqlitebrowser.sourceforge.net">SQliteBrowser</a> or the sqlite <a href="https://addons.mozilla.org/en-US/firefox/addon/5817">firefox extension</a> to play with SQlite3 database files.</p>
-<h1>Online Source Code</h1>
-<ul>
-<li><a href="https://projects.kde.org/projects/extragear/graphics/digikam/repository">digiKam source code.</a></li>
-<li><a href="https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository">kipi-plugins source code.</a></li>
-<li><a href="https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository">libkipi source code.</a></li>
-</ul>
-<h1>Contributions</h1>
-<p>We'll be happy to take up your remarks, corrections or patches to make our manuals even better, we care for details like wrong plural forms etc.</p>
-<p>If you'd like to contribute to the documentation, have a look at the <a href="?q=contrib#documentation">contrib</a> page.</p>
-</div>
diff --git a/content/documentation/meta/design.md b/content/documentation/meta/design.md
new file mode 100644
index 000000000..513333503
--- /dev/null
+++ b/content/documentation/meta/design.md
@@ -0,0 +1,55 @@
+---
+date: "2017-03-30T15:05:23-06:00"
+title: "Meta - Design"
+author: "Pat David"
+description: "Meta Design page about www.digikam.org"
+---
+
+These are design notes created during the migration and re-design of the website (2017-03).
+
+![/img/mockup-front-B.png](/img/mockup-front-B.png)
+
+This mockup source svg file: [mockup-digikam.svg](/img/mockup-digikam.svg)
+
+### Typography
+
+* [Fira Sans][]
+* [Oxygen][]
+* [Libre Baskerville][]
+
+[Fira Sans]: https://fonts.google.com/specimen/Fira+Sans
+[Oxygen]: https://fonts.google.com/specimen/Oxygen
+[Libre Baskerville]: https://fonts.google.com/specimen/Libre+Baskerville
+
+### Colors
+
+Modified [solarized][] (dark) colorscheme (shifted to true grays)
+
+Use | name | hex
+----|-------|-----
+Background | base 03 | #262626
+Background (highlights)| base 02 | #303030
+Comments/Secondary content | base 01 | #6B6B6B
+Body/Default/Primary Text | base 0 | #919191
+Optional Emphasized Content | base 1 | #9E9E9E
+
+<div style='width: 100%; background-color: #262626; color: #919191; padding:1rem; border: solid 1px gray;'>
+Background: #262626
+<div style='background-color: #303030; color: #919191;'>
+Background (highglights): #303030</div>
+<div style='color: #6b6b6b;'>Secondary content: #6b6b6b</div>
+<div style='color: #919191;'>Primary content: #919191</div>
+<div style='color: #9E9E9E;'>Emphasized content: #9E9E9E</div>
+<div style='color: #af8700;'>Yellow: #af8700</div>
+<div style='color: #d75f00;'>Orange: #d75f00</div>
+<div style='color: #d70000;'>Red: #d70000</div>
+<div style='color: #af005f;'>Magenta: #af005f</div>
+<div style='color: #5f5faf;'>Violet: #5f5faf</div>
+<div style='color: #0087ff;'>Blue: #0087ff</div>
+<div style='color: #00afaf;'>Cyan: #00afaf</div>
+<div style='color: #5f8700;'>Green: #5f8700</div>
+<div style='color: #0068C6;'>KDE Blue: #0068C6</div>
+
+</div>
+
+[solarized]: http://ethanschoonover.com/solarized
diff --git a/content/documentation/meta/index.md b/content/documentation/meta/index.md
new file mode 100644
index 000000000..563bc2d97
--- /dev/null
+++ b/content/documentation/meta/index.md
@@ -0,0 +1,83 @@
+---
+date: "2017-03-30T14:09:49-06:00"
+title: "Meta"
+author: "Pat David"
+description: "Meta page about www.digikam.org"
+---
+
+
+This page contains information about contributing to the digiKam website.
+
+There are two URLs in use for the website:
+
+* https://www.digikam.org
+
+ The main digiKam website.
+
+* https://staging.digikam.org
+
+ The test/staging website.
+ This should normally mirror the main website for the most part.
+ This is where new content is tested before pushing to the main site.
+
+**Other meta pages:**
+
+* [Design](/documentation/meta/design/) - Colors, typography, layout ideas for the migration.
+* [Writing](/documentation/meta/writing/) - How to write content for the new site.
+* [Markdown Reference](/documentation/meta/markdown/) - A reference for markdown formatting.
+
+### Overview
+
+The site is now being served as a statically built website.
+
+This means that the website is now being pre-compiled from various source files ahead of time.
+These files are then made available through the web server as static assets (nothing needs to be dynamically created on the server).
+This significantly reduces the server requirements (no in-between scripting language or database required) as well as reduces the possible attack vectors for malicious actors.
+
+The website will now be managed in a git repository.
+Pushes to the git repo will be reflected on the server for the branch that was pushed (see below).
+
+
+### Git Repository
+
+The digiKam website is now being version controlled in a [git repository][].
+
+If you have a [developer account][] (you have been granted push access) you can get the website by cloning it with this address:
+
+
+ git clone git@git.kde.org:websites/digikam-org
+
+If you want to view the website or write content and create a patch to publish (that you'll submit to someone with push access) you can get the website by cloning it with this address:
+
+ git clone https://anongit.kde.org/websites/digikam-org
+
+Note: If you just need to write new content for the website, you can do this step and send a patch to the developers (or you can zip up your markdown file + assets and send that along as well).
+
+
+[git repository]: https://cgit.kde.org/websites/digikam-org.git/
+[developer account]: https://community.kde.org/Infrastructure/Get_a_Developer_Account
+
+There are two main branches that will be visible publicly, `dev` and `master`.
+They map to live websites like this:
+
+git branch | website
+-----------|---------
+dev | https://staging.digikam.org
+master | https://digikam.org
+
+Changes should always first be tested against the `dev` branch.
+
+If they work (and don't implode the website) then they can be merged into the `master` branch.
+
+The two branches should be maintained roughly in-sync with each other, and may occasionally need to be merged or rebased to make sure of this.
+
+
+### Hugo
+
+The site now uses [Hugo][] to precompile everything into the final output.
+
+There are binaries available for all major OS's.
+
+You can also build it from source if you want.
+
+[Hugo]: http://gohugo.io/
diff --git a/content/documentation/meta/markdown.md b/content/documentation/meta/markdown.md
new file mode 100644
index 000000000..4fe6b9a08
--- /dev/null
+++ b/content/documentation/meta/markdown.md
@@ -0,0 +1,81 @@
+---
+date: "2017-03-30T14:09:49-06:00"
+title: "Meta - Markdown Reference"
+author: "Pat David"
+description: "Meta page about www.digikam.org"
+---
+
+### Markdown
+
+Markdown is a simple markup syntax for formatting plain text documents.
+
+* [Paragraphs](#paragraphs)
+
+---
+
+### Paragraphs
+
+One or more consecutive lines of text.
+Text with a blank line between them will be rendered as a new paragraph.
+
+```
+This is a line in a paragraph.
+This is another line in the same paragraph
+```
+
+Renders as:
+
+This is a line in a paragraph.
+This is another line in the same paragraph
+
+Empty lines indicate a new paragraph:
+
+```
+This is a different line in some other paragraph.
+With some extra sentences here for illustration.
+
+This will be in a different paragraph (notice the blank line separating it).
+```
+Renders as:
+
+This is a different line in some other paragraph.
+With some extra sentences here for illustration.
+
+This will be in a different paragraph (notice the blank line separating it).
+
+---
+### Headers
+
+```
+# Heading 1
+## Heading 2
+### Heading 3
+```
+
+Will produce:
+
+# Heading 1
+## Heading 2
+### Heading 3
+
+---
+
+### Emphasis
+
+```
+Emphasis can be done with *asterisks* or _underscores_.
+
+Strong (bold) can be done with double **asterisks** or __underscores__.
+
+They _can be **combined**_.
+
+You can also strikethrough <del> with ~~double tildes~~.
+```
+
+Emphasis can be done with *asterisks* or _underscores_.
+
+Strong (bold) can be done with double **asterisks** or __underscores__.
+
+They _can be **combined**_.
+
+You can also strikethrough <del> with ~~double tildes~~.
diff --git a/content/documentation/meta/writing.md b/content/documentation/meta/writing.md
new file mode 100644
index 000000000..9e2e86b9e
--- /dev/null
+++ b/content/documentation/meta/writing.md
@@ -0,0 +1,90 @@
+---
+date: "2017-03-30T14:09:49-06:00"
+title: "Meta - Writing"
+author: "Pat David"
+description: "Meta page about www.digikam.org"
+---
+
+Writing content for the website is a bit different compared to using a CMS (like the previously used [Drupal][]).
+
+The biggest change is that the website data is now being tracked in a version control system, [Git][].
+
+[Drupal]: https://www.drupal.org/
+[Git]: https://git-scm.com/
+
+Contributors that want to write content for the site only need to write their content as a plain text [markdown][] file.
+
+This file and any associated assets required (such as images) can then be delivered to responsible team members to be checked and then published.
+
+[markdown]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
+
+### Writing Quick Start
+
+1. Download or install Hugo (at least v0.19) (and put it in your path).
+2. Clone the [digikam-org website from the git repository].
+3. Open a terminal and navigate to `/path/to/digikam-org/`
+4. Use the `hugo new` command to create new content. For example, the command `hugo new news/2017-01-01-my-new-post.md` creates a new News article with the necessary metadata.
+5. Open the new file in your text editor of choice.
+6. Fill in the YAML metadata at the top of the file.
+7. Write the page content in markdown.
+4. Visually inspect your new post using the command `hugo serve`. Open a web browser and go to http://localhost:1313
+
+### Markdown
+
+Markdown is a method for marking up plain text files with basic information and formatting using a very simple syntax.
+
+### File Naming Convention
+
+News items have been using a naming convention:
+
+`YYYY-MM-DD_The_News_Item_Descriptive_Name.md`
+
+You can use the `hugo new` command to create new content using a template. The template will automatically be chosen according to what path your choose to create your new content. For example, `hugo new news/2000-01-01-the-party-is-over.md` will use the news template located in `digikam-org/archetypes/news.md`.
+
+Contributors can help ease management of data by following a similar convention. :)
+
+If they do not, the committer should probably remember to rename contributed files if possible (it won't break the build or anything, just makes it easier to manage files).
+
+### Image Storage Location
+
+For News articles: `digikam-org/static/img/news/<news article name>/`
+
+For example, `digikam-org/static/img/news/2017-01-01_happy_new_year/ball-drop.jpg` would be the file system path to your image. You could then reference it from your news article `![The ball dropping](/img/news/2017-01-01_happy_new_year/ball-drop.jpg)`. Note that the path starts with `/` making it an absolute location from the web server root.
+
+For other pages: `digikam-org/static/img/<page category>/`
+
+For example, `digikam-org/static/about/digikam-team-photo.jpg` would be the file system path to your image. You could then reference it from your news article `![The ball dropping](/img/about/digikam-team-photo.jpg)`. Note that the path starts with `/` making it an absolute location from the web server root.
+
+### Viewing the Site Locally
+
+Before submitting a patch or pushing to the git repo, you should preview the site locally and ensure that everything appears as you would like it to.
+
+You can view the site locally by completing the following steps:
+
+1. Download or install Hugo (at least v0.19) (and put it in your path).
+2. Clone the [digikam-org website from the git repository].
+3. Open a terminal and navigate to `/path/to/digikam-org/`
+4. Run the command `hugo serve`.
+5. Open a web browser and go to http://localhost:1313
+
+ You see the digiKam website.
+
+[digikam-org website from the git repository]: {{< ref "documentation/meta/index.md#git-repository" >}}
+
+### Publishing Changes
+
+#### Git Access
+
+If your account is a developer account (has push access to the repository), you can publish news items by committing and pushing to the repository.
+This should normally be done against the `dev` branch first to check that everything works and looks good.
+
+If so, it can then be merged into the `master` branch.
+
+#### Out-of-band Submissions
+
+If you do not have developer access to the website repository or did not want to clone the repo, you can submit your article in several ways:
+
+* Email the markdown content and images to someone with a developer account
+* Post the content to the mailing list
+* Use a gist or pastebin service to post the text, then send the link to someone with access
+* Open a bugzilla bug and include the text of the post
diff --git a/content/releases/releaseplan.md b/content/documentation/releaseplan.md
similarity index 92%
rename from content/releases/releaseplan.md
rename to content/documentation/releaseplan.md
index 65a03788a..591074fbf 100644
--- a/content/releases/releaseplan.md
+++ b/content/documentation/releaseplan.md
@@ -1,106 +1,106 @@
---
date: "2017-03-21"
title: "Release Plan"
author: "digiKam"
description: "The release plan for the digiKam software."
category: "release"
aliases: "/about/releaseplan"
---
-<div class="content"><a><h5>digiKam Software Collection 5.x Release Plan</h5></a>
+<div class="content"><a><h3>digiKam Software Collection 5.x Release Plan</h3></a>
<p>
Version ported to Qt5 and KF5 frameworks. See this <a href="https://techbase.kde.org/Projects/Digikam/CodingSprint2014">wiki page</a> for details.</p>
<p>This version will include also GoSC 2015/2016 projects. See ideas at this <a href="https://community.kde.org/GSoC/2015/Ideas#digiKam">wiki page</a> for details.</p>
<ul>
<li>18/10/2015: 5.0.0-beta1</li>
<li>29/11/2015: 5.0.0-beta2</li>
<li>17/01/2016: 5.0.0-beta3</li>
<li>28/02/2016: 5.0.0-beta4</li>
<li>27/03/2016: 5.0.0-beta5</li>
<li>24/04/2016: 5.0.0-beta6</li>
<li>29/05/2016: 5.0.0-beta7</li>
<li>03/07/2016: 5.0.0</li>
<li>07/08/2016: 5.1.0</li>
<li>18/09/2016: 5.2.0</li>
<li>06/11/2016: 5.3.0</li>
<li>08/01/2017: 5.4.0 (ported to QtAv for Video Files support)</li>
<li>12/03/2017: 5.5.0 (including database garbage collector)</li>
<li>07/05/2017: 5.6.0</li>
<li>09/07/2017: 5.7.0</li>
</ul>
<a href="https://www.flickr.com/photos/digikam/16392674337"><img src="https://farm8.staticflickr.com/7343/16392674337_c279e5e020_z.jpg" <="" a="" width="640" height="355">
-</a><a><h5>digiKam Software Collection 4.x Release Plan (not maintained anymore)</h5></a>
+</a><a><h3>digiKam Software Collection 4.x Release Plan (not maintained anymore)</h3></a>
<p>
Version including all <a href="http://community.kde.org/Digikam/GSoC2013">GoSC 2013 and 2014 projects</a>.</p>
<ul>
<li>01/12/2013: 4.0.0-beta1</li>
<li>12/01/2014: 4.0.0-beta2</li>
<li>23/02/2014: 4.0.0-beta3</li>
<li>30/03/2014: 4.0.0-beta4</li>
<li>13/04/2014: 4.0.0-RC</li>
<li>11/05/2014: 4.0.0 (including all <a href="https://community.kde.org/Digikam/GSoC2013#digiKam_Google_Summer_of_Code_2013_Projects_list">GSoC 2013 projects completed</a>)</li>
<li>22/06/2014: 4.1.0</li>
<li>03/08/2014: 4.2.0 (including <a href="https://community.kde.org/Digikam/GSoC2014#Add_a_quick_access_to_Labels_in_dedicated_tree-view">Quick Labels Access feature</a>)</li>
<li>08/09/2014: 4.3.0</li>
<li>06/10/2014: 4.4.0</li>
<li>09/11/2014: 4.5.0</li>
<li>14/12/2014: 4.6.0</li>
<li>25/01/2015: 4.7.0</li>
<li>22/02/2015: 4.8.0</li>
<li>05/04/2015: 4.9.0</li>
<li>10/05/2015: 4.10.0</li>
<li>14/06/2015: 4.11.0</li>
<li>26/07/2015: 4.12.0</li>
<li>30/08/2015: 4.13.0</li>
<li>11/10/2015: 4.14.0</li>
</ul>
<a href="https://www.flickr.com/photos/digikam/14560599182/"><img src="https://farm4.staticflickr.com/3858/14560599182_2d19967645_o.png" width="320" height="196"></a>
<a href="https://www.flickr.com/photos/digikam/14374829338/"><img src="https://farm6.staticflickr.com/5154/14374829338_3220fcb20f_o.png" width="320" height="196"></a>
-<a><h5>digiKam Software Collection 3.x Release Plan (not maintained anymore)</h5></a>
+<a><h3>digiKam Software Collection 3.x Release Plan (not maintained anymore)</h3></a>
<p>
Version including all <a href="http://community.kde.org/Digikam/GSoC2012">GoSC 2012 projects</a>.
</p>
<ul>
<li>06/02/2013: 3.0.0 (sync with <a href="http://www.kde.org/announcements/4.10">KDE 4.10 release</a>)</li>
<li>10/03/2013: 3.1.0 (including bugs-fixes detected by <a href="http://scan.coverity.com/">Coverity SCAN</a>)</li>
<li>07/04/2013: 3.2.0-beta1</li>
<li>28/04/2013: 3.2.0-beta2</li>
<li>12/05/2013: 3.2.0 (including new <a href="http://www.flickr.com/photos/digikam/8632965113/sizes/l/in/photostream/">Table-View Mode</a>)</li>
<li>02/06/2013: 3.3.0-beta1</li>
<li>16/06/2013: 3.3.0-beta2</li>
<li>03/07/2013: 3.3.0-beta3</li>
<li>04/08/2013: 3.3.0 (including <a href="http://youtu.be/iaFGy0n0R-g">Face Recognition feature</a>)</li>
<li>01/09/2013: 3.4.0 (sync with <a href="http://techbase.kde.org/Schedules/KDE4/4.11_Release_Schedule">KDE 4.11 release</a>)</li>
<li>29/09/2013: 3.5.0</li>
</ul>
<a href="http://www.flickr.com/photos/digikam/8456040242/"><img src="http://farm9.staticflickr.com/8518/8456040242_2b833945a6_n.jpg" width="320" height="196"></a>
<a href="http://www.flickr.com/photos/digikam/8456040238/"><img src="http://farm9.staticflickr.com/8385/8456040238_69e5a9b387_n.jpg" width="320" height="196"></a>
-<a><h5>digiKam Software Collection 2.x Release Plan (not maintained anymore)</h5></a>
+<a><h3>digiKam Software Collection 2.x Release Plan (not maintained anymore)</h3></a>
<p>
Version including XMP Sidecar support, Face Recognition, Image Versioning, and Reverse Geo-location, Color and Pick labels, Tags keyboard shortcuts, Group of items, etc...
</p>
<ul>
<li>08/01/2012: 2.5.0</li>
<li>06/05/2012: 2.6.0</li>
<li>08/07/2012: 2.7.0</li>
<li>05/08/2012: 2.8.0</li>
<li>02/09/2012: 2.9.0</li>
</ul>
<a href="http://www.flickr.com/photos/digikam/7739392406/"><img src="http://farm9.staticflickr.com/8428/7739392406_3516223e77_n.jpg" width="320" height="196"></a>
<a href="http://www.flickr.com/photos/digikam/7739392258/"><img src="http://farm8.staticflickr.com/7253/7739392258_7f46aa1e6c_n.jpg" width="320" height="196"></a>
</div>
diff --git a/content/donate/_index.md b/content/donate/_index.md
new file mode 100644
index 000000000..0c4b90183
--- /dev/null
+++ b/content/donate/_index.md
@@ -0,0 +1,773 @@
+---
+date: "2017-03-21"
+title: "Donate"
+author: "digiKam"
+description: "Help support the continued development of digiKam"
+category: "donations"
+aliases: "/donation"
+menu: "navbar"
+---
+
+Do you love digiKam?
+Would you like to see the project grow and become better in the future?
+
+
+<img src="https://farm8.staticflickr.com/7315/13030420234_3a196bf2fc_c.jpg" width="800" height="312">
+
+
+One of the best ways to help and support our work is to donate to the project.
+We use funds to purchase equipment relevant to photography that we want to support in digiKam.
+We also find value in being able to attend open source events such as meetings and coding sprints.
+Donations help to offset the costs that team members incur for attending these events.
+
+As described in <a href="http://www.packtpub.com/article/the-economics-of-open-source-donations">The Economics of Open Source Donations</a>, financial contributions play a crucial role in support Free/Libre and Open Source Software projects.
+
+Almost every person and every organization can support the digiKam project. Whether you are an individual, or represent a company, an administration or a University, your contribution can take many forms:
+
+
+### For individuals
+
+#### Make a Donation
+
+If you would like to help digiKam project to promote the development and usage of the digiKam photo manager and its by-products, you can use Paypal buttons listed below or use the Flattr link. Making payments with **PayPal** or donations with **[Flattr][]**, is fast, free and secure.
+
+[Flattr]: https://flattr.com/profile/digikam "digiKam on Flattr"
+
+
+<table>
+<tbody><tr>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="20.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="30.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="40.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="50.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="100.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="amount" value="200.00" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+<td width="10">&nbsp;</td>
+
+<td align="center">
+<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
+<input name="cmd" value="_xclick" type="hidden">
+<input name="business" value="caulier.gilles@gmail.com" type="hidden">
+<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
+<input name="no_shipping" value="1" type="hidden">
+<input name="no_note" value="1" type="hidden">
+<input name="currency_code" value="EUR" type="hidden">
+<input name="tax" value="0" type="hidden">
+<input name="bn" value="PP-DonationsBF" type="hidden">
+<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
+</form>
+</td>
+
+</tr>
+
+<tr>
+<td align="center">20 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">30 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">40 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">50 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">100 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">200 euro</td>
+<td width="10">&nbsp;</td>
+<td align="center">Other</td>
+</tr>
+</tbody></table>
+
+<a href="https://flattr.com/profile/digikam" title="digiKam on Flattr"><img src="http://farm9.staticflickr.com/8111/8518458812_720cd7256a_m.jpg" alt="digiKam on Flattr" width="240" height="81"></a>
+
+Your name will be added to the list below.
+
+
+
+### For companies and administrations
+
+Companies or administrations willing to become a new sponsor of digiKam project can reach us <a href="mailto:caulier dot gilles at gmail dot com">by e-mail</a> for details.
+
+Thank you in advance for your generous donation!
+
+
+### Thanks to Our Sponsors:
+
+#### 2017
+
+* Patrick van Elk
+* Umberto Valentinotti
+* Karl Ove Hufthammer
+* Richard Clayton
+* Francesco Bertoldi
+* Stefan Grosse
+* Prateek Panjla
+* Frank Cook
+* Jakub Svoboda
+* Werner Lauckner
+* Alberto Ponti
+* Serge Muscat
+
+---
+
+#### 2016
+
+* Richard Clayton
+* Alexandre Alapetite
+* Lukas Matasovsky
+* Michael Krumnow
+* Michael Ast
+* Karl Ove Hufthammer
+* Damian Rychlinski
+* James Russell
+* Christian Comes
+* Dusan Pavlik
+* Hugo Costelha
+* bradley noyes
+* Nikolaj Petersen
+* Govindarajan Soundararajan
+* Laurent Espitallier
+* Deborah Swarts
+* Geoffrey King
+* Maria Calzetti
+* Julio Rodriguez
+* Elena Botoeva
+* Heinz Herger
+* Werner Lauckner
+* Phil Landmeier
+* Harald Knierim
+* Kjetil Kjernsmo
+* Jonas Kemmer
+* Dzmitry Lahoda
+* Guillermo Perez Hernandez
+* Graham Monkman
+* Varfolomeeva Marina
+* Franck Quélain
+* Lars-Goran Larsson
+* Juan Zamanillo
+* Olaf Scheel
+* Rainer Schaffer
+* Martin Zahnd
+* Peter McBride
+* Ivan Dragomereckyj
+* Roland Bohrer
+* Mattia Verga
+* Klaus Wünschel
+* Danie van der Merwe
+* Michael Scholz
+* Jens P Benecke
+* Laurent Espitallier
+
+---
+
+#### 2015
+
+* Benno Hansen
+* Filippo Valeri
+* Liokumovich Gregory
+* Mike Bing
+* Robert Berg
+* Umberto Valentinotti
+* Chrysoula Kotsanidou
+* Jan Ott
+* Udo Lembke
+* Jakob Nielsen
+* Casper Blom
+* Balthas Seibold
+* Jari Kirvesoja
+* Jerry Argetsinger
+* Hans Becker
+* James Lunn
+* keith lindsay
+* Eberhard Hoyer
+* Karl Ove Hufthammer
+* Wayne Powell
+* Fabien Maussion
+* Bradley Noyes
+* Marcus Lucke
+* Koen Bailleul
+* Sven Braner
+* Richard Clayton
+* Ulf Rompe
+* Andrew Kingwell
+* Casper Blom
+* Vicente Salvador Cubedo
+* Steffen Ullrich
+* Felix Keppmann
+* Martin Stolpe
+* Andreas Berntsen
+* Sander Boer
+* Anton Vigura
+* Xavier Arnau
+* Randolf Mock
+* Jean Frédéric Jolimaitre
+* Stefanos Charchalakis
+* Shantikumar Kulkarni
+* Alberto Ponti
+* Julian Weißgerber
+* Dietmar Neuss
+* Michael Schweizer
+* Michael Zabel
+* Martin Zahnd
+* Graham Osborne
+* Ivo Jossart
+
+
+---
+
+#### 2014
+
+<img src="https://farm6.staticflickr.com/5601/15464697590_2489e5cabb_m.jpg" title="Buki Koshoni (bukikoshoni.com)" width="240" height="130">
+
+* Richard Clayton
+* Dominik Keller
+* Bradley Noyes
+* Julien Morot
+* Martin Lubich
+* Ralf Duhlmeyer
+* Ryan Henderson
+* Christoph Baldauf
+* Sergey Romanov
+* Dominique Denis
+* Piter Dias
+* Anna Timm
+* Daisy Vogt
+* Tim Kozusko
+* Martina Huber
+* Gunner Gewiss
+* Michael Mason
+* Sven Ehlert
+* Alexander Bryan
+* Anders Lund
+* Otto Dämon
+* Holger Hampe
+* Martin Mohr
+* Arnaud Labro
+* Jochen Siebert
+* John F Moore
+* Smit Mehta
+* Christopher Burkey
+* Aldo Ellena
+* Christian Graesser
+* Stefan Ronnecke
+* Rainer Schaffer
+* Robert MacKenzie
+* Ute Stolzer
+* Martin Zahnd
+* Bernd Holzum
+* Lukasz Mierzwa
+
+---
+
+#### 2013
+
+<img src="https://farm8.staticflickr.com/7469/15464661470_d961a1a8fe_m.jpg" title="Lhorens b. sartori (photo.sarto.com)" width="126" height="46"><br>
+<img src="https://farm8.staticflickr.com/7468/15651200612_b3033bd50e_m.jpg" title="Digital Marketing Agency (seosilly.co.uk)" width="240" height="66">
+
+* Thierry Nemes
+* Richard Clayton
+* Vincent Petry
+* Nikolaj Petersen
+* Christian González-Schiller
+* Christoph Baldauf
+* Jose Antonio Diaz Romero
+* Christian jacobsen
+* Kjetil Kjernsmo
+* Dana Ross
+* Georg Fries
+* Laurent Espitallier
+* Mónica Mora Guerra
+* Michael Marending
+* Axel Hengemuehle
+* Alberto Ponti
+* Jean Fréderic Jolimaitre
+* Frederik Bertling
+* Christoph Zimmermann
+* Christoph Baldauf
+* Christian Storzer
+* Glen Thomson
+* Bjorn Olsson
+* Lukasz Mierzwa
+* Jean-Paul Assouvie
+* Michael Mason
+* Jason Robinson
+* Andreas Blumer
+* Marc Winkelmann
+* Ulf Berwaldt
+* Alex Ruddick
+* Christian Comes
+* Donald Fredricks
+* Christoph Baldauf
+* Yevgeniy Ivanisenko
+* Martin Zahnd
+* Danny Schmarsel
+* Mike Bing
+* Antonio Trincone
+* Michael Schweizer
+
+---
+
+#### 2012
+
+
+<img src="https://farm4.staticflickr.com/3940/15462462129_50f093232b_m.jpg" title="KDE-ev (ev.kde.org)" width="240" height="154">
+
+* Richard Clayton
+* Laurent Espitallier
+* Oswaldo J Asprino Brine
+* Martin Senftleben
+* Thierry Nemes
+* Tim Taylor
+* Martin Hunger
+* Christian Hugues
+* Raul Sampe
+* Christian Karitnig
+* Slonska Vladimir
+* Kevin O'Brien
+* Ralph Scharpf
+* Marios Andreopoulos
+* Klaus Binder
+* Carlos Mazon
+* Stephan Kuhnert
+* Dotan Cohen
+* Carlos Mazon
+* Michael Marending
+* Christine Nicoll
+* Ben vant Ende
+* Filippo Valeri
+* Christoph Baldauf
+* Gregory Dawes
+* Nicolas Martinez Frances
+* Ivan Ruano
+* Krishna G S
+* Philippe Quaglia
+* Stefan Habetz
+* Robert Evert
+* Michael Zabel
+* Ilko Brauch
+* Alessandro Di Renzo
+* Anrypa Ahtoh
+* Jean-Pierre Imhof
+* Martin Zahnd
+* Roronba Orbra
+* Christer Wendel
+* Mark Fraser
+* Michael Klitgaard
+* Martin Senftleben
+* Osvaldo de Dona
+
+
+---
+
+
+
+#### 2011
+
+<img src="https://farm4.staticflickr.com/3940/15028102934_b9f16f1849_o.png" title="Entertainment where You want it (excito.com)" width="151" height="72">
+
+* Per Jensen
+* Joel Hallklint
+* George Shuklin
+* John Bestevaar
+* Norbert Eisinger
+* Thomas Arnold
+* John Bestevaar
+* Matti Rintala
+* Eric Keller
+* Philip M Thomas
+* Dmitri Popov
+* Thierry Nemes
+* Thomas Guettler
+* Stephan Martin
+* Philippe Quaglia
+* Sankarshan Mukhopadhyay
+* Alexey Chelmodeev
+* Steffen Eibicht
+* Rinus Bakker
+* Carla Schroder
+* Daniel Baer
+* Vincent Audibert
+* Sam Shefrin
+* Chieh Teng
+* Robert Zmigrodzki
+* Fabrizio Arias
+* Manfred Mislik
+* Chambers Tristan
+* Radek Jun
+* Philippe Dezac
+* Orlando Gonzalez
+* Alan Alpert
+* Robert Rader
+* Jean-Baptiste Rouquier
+* Martin Senftleben
+* Jörg Platte
+* Moritz Klingmann
+* Sam Shefrin
+* Vincent Körber
+* Michael Gajda
+* Roger Larsson
+* Mark Fraser
+* Francois Guay
+* Sylvain Leterreur
+* Harald Ulver
+* Denis Zalevskiy
+* Krzysztof Onak
+* Raymond Meijer
+* Kamil Stepinski
+* Christoph Baldauf
+* Martin Zahnd
+* Andreas Schroeder
+* Michael Beckmann
+* Franck Costa
+* Harald Wilmersdorf
+* Bernhard Hennlich
+
+---
+
+#### 2010
+
+
+<img src="https://farm6.staticflickr.com/5600/15462642628_ba22acb219_o.gif" title="Sino-Pictures, a photo agency from China (sinopictures.com)" width="167" height="67"><br>
+<img src="https://farm8.staticflickr.com/7465/15651144892_0a08bbf9cb_m.jpg" title="Dany Nativel (danynativel.com)" width="240" height="63">
+
+* Fabio Adamo
+* Antonio Cunyat
+* Andreas Floeter
+* Fabio Borgatta
+* Gaetan Hache
+* Will Becker
+* Jan Ott
+* Benoit Courty
+* Andreas Bank
+* Martin Senftleben
+* Hubert Furey
+* Dmitri Popov
+* Michael Hagmann
+* Andreas Weigl
+* Branislav Bozgai
+* Moritz Klingmann
+* Andreas Wolff
+* Geoff Whale
+* Michael Sacher
+* Christian Müller
+* Christophe Muller
+* Richard Crosby
+* Piombetti Claudio
+* Jakob Löwen jun
+* Joachim Pottkamp
+* Cristiano Dri
+* Andreas Tiemeyer
+* Dietrich Scheller
+* Alexander Wauck
+* Gary Toth
+* Thierry Moy
+* Michael Beckmann
+* Agostino Marconi
+* Waldemar Andrukiewicz
+* Kamil Stepinski
+* Yngve Inntjore Levinsen
+* Stefan Kofler
+* Leonid Mutti
+* Sheikh Tuhin
+* Odd Karsten Hanken
+* Hanns Weschta
+* Thomas Kloss
+* Mattias Wenz
+* Donald Mac Laughlin
+* Christopher Ludwig
+* Kent Vander Velden
+* Gregor Tätzner
+* Daniel de Kok
+* Michael Neubauer
+* Dietmar Neuss
+* Carla Schroder
+* Lorenzo Ciani
+* Reilly Butler
+* Marek Otahal
+* Milan Zamazal
+* Roger Larsson
+* Salvatore Brigaglia
+* Martin Zahnd
+* Dominik Klüter
+* Nikolaj Petersen
+* Ilias Bartolini
+* Michael Sacher
+* Alan Swartz
+* Bruce Lamb
+* Christian Weiske
+
+
+---
+
+
+#### 2009
+
+<img src="https://farm4.staticflickr.com/3937/15029975413_c330b90d43_m.jpg" title="Natur Photo (natur-fotograf.ch)" width="204" height="72">
+
+* Manfred Mislik
+* Jean-François Begot
+* Salvatore Brigaglia
+* Richard Crosby
+* Gwendal Blanchard
+* Serguei Romanov
+* Giorgio Cioni
+* Markus Lang
+* Thomas Moertel
+* Yair Kavalerchik
+* Ewald Müller
+* Vasileios Lourdas
+* Oscar Haeger
+* Jaroslaw Nikoniuk
+* Vladimir Kulev
+* Odin Hørthe Omdal
+* Gys van Zyl
+* Andrea Doglioni Majer
+* Herve Le Roy
+* Bastiaan Hovestreijdt
+* Jonathan Dubovsky
+* Claus Rebler
+* Per Jensen
+* Andreas Scherf
+* Aleksey Konovalov
+* Kamil Stepinski
+* Franz Senftl
+* Teemu Autto
+* Carla Schroder
+* Bruce Press
+* Geoffrey King
+* Thierry Moy
+* Martin Banszel
+* Xavier Mazellier
+* Chris Fabre
+* Branislav Bozgai
+* Nick Alderweireldt
+* Felix Michel
+* Simon Marti
+* Martin Schögler
+* Timothy Edwards
+* Daniel Scharrer
+* Philippe Arnone
+* Jochen Bleis
+* Klaas Buitenkamp
+* Dmitri Popov
+* Martin Zahnd
+* Gregory Dawes
+* Jakob Lowen jun
+* Nikolaj Petersen
+* Arnoud Assenberg
+* Stefan Lombaard
+* Hallvard Indgjerd
+* bradley noyes
+
+
+---
+
+
+#### 2008
+
+
+<img src="https://farm4.staticflickr.com/3945/15028293784_b5b437d83f_m.jpg" title="Distro Watch (distrowatch.com)" width="240" height="31">
+
+* Malte Rohs
+* Nick Alderweireldt
+* Hubert Furey
+* Mark Ashworth
+* Stoyan Dafov
+* Sebastian Pentenrieder
+* Georg Kovalcik
+* Mikolaj Machowski
+* Christian Weiske
+* Lawrence Plug
+* Lorenzo Ciani
+* Wilko Quak
+* Arnfinn Forness
+* Henri Soufarapis
+* Carla Schroder
+* Jens Albers
+* Gerard Milhaud
+* Emanuele Caratti
+* Dotan Cohen
+* Christian Imiela
+* Karl Ove Hufthammer
+* Dorian Okrucinski
+* Gaizka Villate
+* Nikolaj Petersen
+* Jordan Levy
+* Paul Radford
+* Robert Hartl
+* Ralph Pastel
+* Peter Schopen
+* Piotr Mienkowski
+* Sylvain Leterreur
+* Milan Zamazal
+* Jean-Pierre Imhof
+* Julien Morot
+* Frank Schneider
+* Marny Reed
+* Will Stephenson
+
+---
+
+
+#### 2007
+
+<img src="https://farm8.staticflickr.com/7485/15649033995_2b4d2fa197_m.jpg" title="Open Magazine (openmagazine.net)" width="240" height="81">
+
+* Lars Mathiassen
+* Odd Karsten Hanken
+* Marcus Popp
+* Florent Remeuf
+* Christian Imiela
+* Milan Zamazal
+* Volker Faisst
+* Giuseppe Mureddu
+* Marek Wawrzyczny
+* Axel Franke
+* Martin Seidel
+* Herve Le Roy
+* Stefan Grosse
+* Nikolaj Petersen
+* Zoltan Meggyesi
+* Paul Worrall
+* Aaron Kushner
+* Ravi Swamy
+* Martin Zahnd
+* Jean-Pierre Imhof
+
+---
+
+
+#### 2006
+
+<img src="https://farm4.staticflickr.com/3950/15462344019_bdc1d442b1_m.jpg" title="VA Software (vasoftware.com)" width="240" height="48">
+
+* S.Alexander
+* Christian Kiewiet
+* Julien Narboux
+* David Nagy
+* J.E Shepley
+* Nikolaj Petersen
+* Ralph Pastel
+* juergen flosbach
+* Martin Zahnd
+* Goncalo Valverde
+* David Preuss
+* Martin Lubich
+* Frédéric Coiffier
+
+---
+
+
+#### 2005
+
+<img src="https://farm4.staticflickr.com/3944/15463310370_67c5401294_q.jpg" title="Web hosting (kovoks.nl)" width="150" height="150">
+
+* Tom Albers
+* Tung Nguyen
+* Lionel Nicolas
+* Martin Zahnd
+* Duncan Hill
+* Peter Neubauer
+* Jason Harris
+* Stephen Koermer
+* Maxime Delorme
+* Christian Weiske
+* Dirk Bergstrom
+* Julien Narboux
+* Thorsten Schnebeck
+* Raffaele Borrelli
+* Danilo Barbuio
diff --git a/content/donate/contrib.md b/content/donate/contrib.md
deleted file mode 100644
index 7d98fa9f3..000000000
--- a/content/donate/contrib.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-date: "2017-03-21"
-title: "Contribute"
-author: "digiKam"
-description: "Give back to the digiKam project!"
-category: "donate"
-aliases: "/contrib"
-menu: "navbar"
----
-
-<div class="content">
-<h1>How can I contribute ?</h1>
-
-<p>
-You can start by promoting digiKam to your friends and colleagues by showing them how powerful digiKam is :)
-</p>
-
-<p>
-You are also welcome to strongly test all digiKam features and to report bugs, see below.
-</p>
-
-<p>
-Subscribing to digiKam-users and helping newbies is also a good way to increase the number of digiKam users !
-</p>
-
-<p>
-If you are new to the free software world, we recommend to take a look at <a href="http://schlitt.info/opensource/blog/0541_10_golden_rules_for_starting_with_open_source.html">this article</a> which summarizes they way open source projects work very well.
-</p>
-
-<a name="bugsreport"><h1>Reporting bugs and wishes</h1></a>
-
-<p>
-Please use the bug tracking system for all bug-reports and new feature wishlists. Take a look at <a href="/?q=support">support page</a> for details.
-</p>
-
-<h1>If you are experiencing crashes with digiKam</h1>
-
-<p>
-If you found a context to crash digiKam, you can provide a backtrace using GDB debugger.
-digiKam needs to be compiled with all debug info else the backtrace will be useless.
-If you installed digiKam using the packages provided by your distribution please install the corresponding debug package. To find the name of these packages more information can be found <a href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports"> here</a>.
-
-In order to test recent changes made by the developers, it would be even better to build the current development version yourself,
-the instructions are given <a href="https://www.digikam.org/download?q=download/GIT">here</a>.
-
-</p><p>To get a backtrace under <b>Linux</b> with GDB, use following command:</p>
-
-<p>
-</p><pre>$ gdb digikam
-(gdb) catch throw
-(gdb) run
-(gdb) ...
-(gdb) _crash here_
-(gdb) ...
-(gdb) bt
-(gdb) _the backtrace is here_
-(gdb) quit
-</pre>
-<p></p>
-
-<p>
-For a detailed and very helpful guide on providing useful crash reports see <a href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_cra
-sh_reports">this guide</a>.
-</p>
-
-<p>
-For <b>Windows</b> users, The binary installer come with a dedicated GDB available in same installation directory than digiKam.
-</p>
-
-<p>
-For <b>MacOS</b> users, you can use <b>lldb</b> debugger from XCode command line tools-set as under Linux with GDB.
-</p>
-
-<p>
-</p><pre>lldb /opt/digikam/Applications/KF5/digikam.app/Contents/MacOS/digikam
-</pre>
-<p></p>
-
-<h1>For memory leaks</h1>
-
-<p>
-To check any memory leak problem in digiKam, <a href="http://valgrind.org">valgrind</a> is your friend.
-Try to run the command line below into a console and report the the trace to developers. digiKam must be previously compiled with debug symbols.
-</p>
-
-<p>
-</p><pre>valgrind --tool=memcheck --leak-check=full --error-limit=no digikam
-</pre>
-<p></p>
-
-<h1>For hangs out or dysfunctions</h1>
-
-<p>
-digiKam trace main debug statements into the console while it run. Under Linux, just run digiKam from a console.
-</p>
-
-<p>Under <b>MacOS</b>, digiKam executable is installed at <i>/opt/digikam/Applications/KF5/digikam.app/Contents/MacOS/digikam</i>, and can be started directly from the console to see debug traces.</p>
-
-<p>Under <b>Windows</b>, no trace is printed to the console directly. You need to install <a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx">DebugView tool</a> to capture debug traces generated by digiKam while it's running.</p>
-
-<h1>Submitting patches</h1>
-
-<p>
-You are welcome to propose patches. But, please read the <a href="https://cgit.kde.org/digikam.git/tree/HACKING">HACKING file</a> first.
-</p>
-
-<p>
-Send patches against the current version of the code (latest git/master revision), not the stable release or an old beta version published. Patches can be created with :
-</p>
-
-<p>
-</p><pre>git diff HEAD &gt; mydiff.patch
-</pre>
-<p></p>
-
-<p>The patches must be attached to a new file in <a href="https://www.digikam.org/support">Bugzilla</a>. Please do not use mailing list or private mail.</p>
-
-<a name="translations"><h1>Translations</h1></a>
-
-<p>
-If you want to contribute to the digiKam internationalization effort, you need to contact directly the translation teams at <a href="http://l10n.kde.org/">http://l10n.kde.org/</a>.
-</p>
-
-<p>You can start by reading the <a href="http://l10n.kde.org/docs/translation-howto/">Translation HOWTO</a>.
-</p>
-
-<a name="Documentation"><h1>Documentation</h1></a>
-
-<p>
-Help to our excellent documentation is always welcome. For all matters concerning it, write to digiKam developers mailing list. Our <a href="http://docs.kde.org/development/en/extragear-graphics/digikam/index.html">documentation</a> is established in <a href="http://l10n.kde.org/docs/doc-primer/index.html">docbook format standard</a>. This <a href="https://cgit.kde.org/digikam-doc.git/tree/README">README</a> file explains in more detail how to do structure the documents, how to do screenshots, compress them and so on.
-</p>
-
-<p>
-Even small additions/changes in ASCII format are possible, and should be create a new bugzilla entry with a patch against git/master code, so that they can be incorporated in the docbook.
-</p>
-
-<a name="samples"><h1>Pictures samples</h1></a>
-
-<p>
-We need some sample files produced by recent digital cameras, especially RAW and JPEG files from different manufacturers (like Canon, Nikon, Sony, Olympus, Sigma and so on).
-</p>
-
-<p>
-With these files, we'll be able to look at metadata (Maker-Notes) embedded in the files to improve their support in digiKam (via the exiv2 and libraw libraries).
-</p>
-
-<p>
-We also need sample files produced by all kind of applications (including other OS and proprietary software like Photoshop) that include IPTC/XMP metadata. It's to ensure compatibility with other tools and to test the new automatic import of this data in the digiKam database (comments and tags update and so on).
-</p>
-
-<a name="splashscreens"><h1>Splash-screens</h1></a>
-
-<p>
-If you is a photographer you can contribute to the digiKam to propose your best shots as splash-screens. Take a look <a href="http://www.digikam.org/splashcreens">at this page</a> for details.
-</p></div>
diff --git a/content/donate/donation.md b/content/donate/donation.md
deleted file mode 100644
index 5197d0701..000000000
--- a/content/donate/donation.md
+++ /dev/null
@@ -1,895 +0,0 @@
----
-date: "2017-03-21"
-title: "Donation and Sponsor"
-author: "digiKam"
-description: "Help support the continued development of digiKam"
-category: "donations"
-aliases: "/donation"
----
-
-<div class="content"><img src="https://farm8.staticflickr.com/7315/13030420234_3a196bf2fc_c.jpg" width="800" height="312">
-
-<p>You love digiKam ? You want to see this project become better and better in the future ? You can help us to sponsor the team... Like you can read in this <a href="http://www.packtpub.com/article/the-economics-of-open-source-donations">paper</a>, money is important for an open-source project.</p>
-
-<p>Almost every person and every organization can support digiKam project. Whether you are an individual, or represent a company, an administration or a University, your contribution can take many forms:</p>
-
-<h1 id="donation">For individuals: make a donation</h1>
-
-<p>If you would like to help digiKam project to promote development and usage of the digiKam photo manager and its by products, you can use Paypal buttons listed below or using Flattr link. Make payments with <b>PayPal</b> or donations with <b>Flattr</b>, is fast, free and secure.</p>
-
-<p>
-</p><table>
-<tbody><tr>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="20.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="30.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="40.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="50.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="100.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="amount" value="200.00" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-<td width="10">&nbsp;</td>
-
-<td align="center">
-<form action="https://www.paypal.com/en/cgi-bin/webscr" method="post">
-<input name="cmd" value="_xclick" type="hidden">
-<input name="business" value="caulier.gilles@gmail.com" type="hidden">
-<input name="item_name" value="Donation to the developers of digiKam" type="hidden">
-<input name="no_shipping" value="1" type="hidden">
-<input name="no_note" value="1" type="hidden">
-<input name="currency_code" value="EUR" type="hidden">
-<input name="tax" value="0" type="hidden">
-<input name="bn" value="PP-DonationsBF" type="hidden">
-<input src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Donation" border="0" type="image">
-</form>
-</td>
-
-</tr>
-
-<tr>
-<td align="center">20 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">30 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">40 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">50 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">100 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">200 euro</td>
-<td width="10">&nbsp;</td>
-<td align="center">Other</td>
-</tr>
-</tbody></table>
-
-
-<p></p>
-
-<a href="https://flattr.com/profile/digikam" title="digiKam on Flattr"><img src="http://farm9.staticflickr.com/8111/8518458812_720cd7256a_m.jpg" alt="digiKam on Flattr" width="240" height="81"></a>
-
-<p></p>
-
-<p>Your name will be added to the list below.</p>
-
-<p>Money will be used to buy new cameras, lens, printers, GPS, or others devices relevant of photography to perform tests with digiKam. Also, it will help team to attend to open-source events as meetings and coding sprints.</p>
-
-<h1 id="enterprise">For companies and administrations</h1>
-
-<p>Companies or administrations willing to become a new sponsor of digiKam project can reach us <a href="mailto:caulier dot gilles at gmail dot com">by e-mail</a> for details.</p>
-
-<p>Thanks in advance for your generous donation...</p>
-
-<p></p>
-<h1>Thanks to:</h1>
-
-<p><b>2005</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
- <li>Tom Albers</li>
- <li>Tung Nguyen</li>
- <li>Lionel Nicolas</li>
- <li>Martin Zahnd</li>
- <li>Duncan Hill</li>
- <li>Peter Neubauer</li>
- <li>Jason Harris</li>
- <li>Stephen Koermer</li>
- <li>Maxime Delorme</li>
- <li>Christian Weiske</li>
- <li>Dirk Bergstrom</li>
- <li>Julien Narboux</li>
- <li>Thorsten Schnebeck</li>
- <li>Raffaele Borrelli</li>
- <li>Danilo Barbuio</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
- <img src="https://farm4.staticflickr.com/3944/15463310370_67c5401294_q.jpg" title="Web hosting (kovoks.nl)" width="150" height="150">
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2006</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>S.Alexander</li>
- <li>Christian Kiewiet</li>
- <li>Julien Narboux</li>
- <li>David Nagy</li>
- <li>J.E Shepley</li>
- <li>Nikolaj Petersen</li>
- <li>Ralph Pastel</li>
- <li>juergen flosbach</li>
- <li>Martin Zahnd</li>
- <li>Goncalo Valverde</li>
- <li>David Preuss</li>
- <li>Martin Lubich</li>
- <li>Frédéric Coiffier</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
-
- <img src="https://farm4.staticflickr.com/3950/15462344019_bdc1d442b1_m.jpg" title="VA Software (vasoftware.com)" width="240" height="48">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2007</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>Lars Mathiassen</li>
- <li>Odd Karsten Hanken</li>
- <li>Marcus Popp</li>
- <li>Florent Remeuf</li>
- <li>Christian Imiela</li>
- <li>Milan Zamazal</li>
- <li>Volker Faisst</li>
- <li>Giuseppe Mureddu</li>
- <li>Marek Wawrzyczny</li>
- <li>Axel Franke</li>
- <li>Martin Seidel</li>
- <li>Herve Le Roy</li>
- <li>Stefan Grosse</li>
- <li>Nikolaj Petersen</li>
- <li>Zoltan Meggyesi</li>
- <li>Paul Worrall</li>
- <li>Aaron Kushner</li>
- <li>Ravi Swamy</li>
- <li>Martin Zahnd</li>
- <li>Jean-Pierre Imhof</li>
- </ul>
- </td>
-
- <td width="50%" align="center">
-
- <img src="https://farm8.staticflickr.com/7485/15649033995_2b4d2fa197_m.jpg" title="Open Magazine (openmagazine.net)" width="240" height="81">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2008</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>Malte Rohs</li>
- <li>Nick Alderweireldt</li>
- <li>Hubert Furey</li>
- <li>Mark Ashworth</li>
- <li>Stoyan Dafov</li>
- <li>Sebastian Pentenrieder</li>
- <li>Georg Kovalcik</li>
- <li>Mikolaj Machowski</li>
- <li>Christian Weiske</li>
- <li>Lawrence Plug</li>
- <li>Lorenzo Ciani</li>
- <li>Wilko Quak</li>
- <li>Arnfinn Forness</li>
- <li>Henri Soufarapis</li>
- <li>Carla Schroder</li>
- <li>Jens Albers</li>
- <li>Gerard Milhaud</li>
- <li>Emanuele Caratti</li>
- <li>Dotan Cohen</li>
- <li>Christian Imiela</li>
- <li>Karl Ove Hufthammer</li>
- <li>Dorian Okrucinski</li>
- <li>Gaizka Villate</li>
- <li>Nikolaj Petersen</li>
- <li>Jordan Levy</li>
- <li>Paul Radford</li>
- <li>Robert Hartl</li>
- <li>Ralph Pastel</li>
- <li>Peter Schopen</li>
- <li>Piotr Mienkowski</li>
- <li>Sylvain Leterreur</li>
- <li>Milan Zamazal</li>
- <li>Jean-Pierre Imhof</li>
- <li>Julien Morot</li>
- <li>Frank Schneider</li>
- <li>Marny Reed</li>
- <li>Will Stephenson</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
-
- <img src="https://farm4.staticflickr.com/3945/15028293784_b5b437d83f_m.jpg" title="Distro Watch (distrowatch.com)" width="240" height="31">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2009</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>Manfred Mislik</li>
- <li>Jean-François Begot</li>
- <li>Salvatore Brigaglia</li>
- <li>Richard Crosby</li>
- <li>Gwendal Blanchard</li>
- <li>Serguei Romanov</li>
- <li>Giorgio Cioni</li>
- <li>Markus Lang</li>
- <li>Thomas Moertel</li>
- <li>Yair Kavalerchik</li>
- <li>Ewald Müller</li>
- <li>Vasileios Lourdas</li>
- <li>Oscar Haeger</li>
- <li>Jaroslaw Nikoniuk</li>
- <li>Vladimir Kulev</li>
- <li>Odin Hørthe Omdal</li>
- <li>Gys van Zyl</li>
- <li>Andrea Doglioni Majer</li>
- <li>Herve Le Roy</li>
- <li>Bastiaan Hovestreijdt</li>
- <li>Jonathan Dubovsky</li>
- <li>Claus Rebler</li>
- <li>Per Jensen</li>
- <li>Andreas Scherf</li>
- <li>Aleksey Konovalov</li>
- <li>Kamil Stepinski</li>
- <li>Franz Senftl</li>
- <li>Teemu Autto</li>
- <li>Carla Schroder</li>
- <li>Bruce Press</li>
- <li>Geoffrey King</li>
- <li>Thierry Moy</li>
- <li>Martin Banszel</li>
- <li>Xavier Mazellier</li>
- <li>Chris Fabre</li>
- <li>Branislav Bozgai</li>
- <li>Nick Alderweireldt</li>
- <li>Felix Michel</li>
- <li>Simon Marti</li>
- <li>Martin Schögler</li>
- <li>Timothy Edwards</li>
- <li>Daniel Scharrer</li>
- <li>Philippe Arnone</li>
- <li>Jochen Bleis</li>
- <li>Klaas Buitenkamp</li>
- <li>Dmitri Popov</li>
- <li>Martin Zahnd</li>
- <li>Gregory Dawes</li>
- <li>Jakob Lowen jun</li>
- <li>Nikolaj Petersen</li>
- <li>Arnoud Assenberg</li>
- <li>Stefan Lombaard</li>
- <li>Hallvard Indgjerd</li>
- <li>bradley noyes</li>
-
- </ul>
-
- </td>
-
- <td width="50%" align="center">
-
- <img src="https://farm4.staticflickr.com/3937/15029975413_c330b90d43_m.jpg" title="Natur Photo (natur-fotograf.ch)" width="204" height="72">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2010</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>Fabio Adamo</li>
- <li>Antonio Cunyat</li>
- <li>Andreas Floeter</li>
- <li>Fabio Borgatta</li>
- <li>Gaetan Hache</li>
- <li>Will Becker</li>
- <li>Jan Ott</li>
- <li>Benoit Courty</li>
- <li>Andreas Bank</li>
- <li>Martin Senftleben</li>
- <li>Hubert Furey</li>
- <li>Dmitri Popov</li>
- <li>Michael Hagmann</li>
- <li>Andreas Weigl</li>
- <li>Branislav Bozgai</li>
- <li>Moritz Klingmann</li>
- <li>Andreas Wolff</li>
- <li>Geoff Whale</li>
- <li>Michael Sacher</li>
- <li>Christian Müller</li>
- <li>Christophe Muller</li>
- <li>Richard Crosby</li>
- <li>Piombetti Claudio</li>
- <li>Jakob Löwen jun</li>
- <li>Joachim Pottkamp</li>
- <li>Cristiano Dri</li>
- <li>Andreas Tiemeyer</li>
- <li>Dietrich Scheller</li>
- <li>Alexander Wauck</li>
- <li>Gary Toth</li>
- <li>Thierry Moy</li>
- <li>Michael Beckmann</li>
- <li>Agostino Marconi</li>
- <li>Waldemar Andrukiewicz</li>
- <li>Kamil Stepinski</li>
- <li>Yngve Inntjore Levinsen</li>
- <li>Stefan Kofler</li>
- <li>Leonid Mutti</li>
- <li>Sheikh Tuhin</li>
- <li>Odd Karsten Hanken</li>
- <li>Hanns Weschta</li>
- <li>Thomas Kloss</li>
- <li>Mattias Wenz</li>
- <li>Donald Mac Laughlin</li>
- <li>Christopher Ludwig</li>
- <li>Kent Vander Velden</li>
- <li>Gregor Tätzner</li>
- <li>Daniel de Kok</li>
- <li>Michael Neubauer</li>
- <li>Dietmar Neuss</li>
- <li>Carla Schroder</li>
- <li>Lorenzo Ciani</li>
- <li>Reilly Butler</li>
- <li>Marek Otahal</li>
- <li>Milan Zamazal</li>
- <li>Roger Larsson</li>
- <li>Salvatore Brigaglia</li>
- <li>Martin Zahnd</li>
- <li>Dominik Klüter</li>
- <li>Nikolaj Petersen</li>
- <li>Ilias Bartolini</li>
- <li>Michael Sacher</li>
- <li>Alan Swartz</li>
- <li>Bruce Lamb</li>
- <li>Christian Weiske</li>
-
- </ul></td>
-
- <td width="50%" align="center">
-
- <img src="https://farm6.staticflickr.com/5600/15462642628_ba22acb219_o.gif" title="Sino-Pictures, a photo agency from China (sinopictures.com)" width="167" height="67"><br>
- <img src="https://farm8.staticflickr.com/7465/15651144892_0a08bbf9cb_m.jpg" title="Dany Nativel (danynativel.com)" width="240" height="63">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2011</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
- <ul>
- <li>Per Jensen</li>
- <li>Joel Hallklint</li>
- <li>George Shuklin</li>
- <li>John Bestevaar</li>
- <li>Norbert Eisinger</li>
- <li>Thomas Arnold</li>
- <li>John Bestevaar</li>
- <li>Matti Rintala</li>
- <li>Eric Keller</li>
- <li>Philip M Thomas</li>
- <li>Dmitri Popov</li>
- <li>Thierry Nemes</li>
- <li>Thomas Guettler</li>
- <li>Stephan Martin</li>
- <li>Philippe Quaglia</li>
- <li>Sankarshan Mukhopadhyay</li>
- <li>Alexey Chelmodeev</li>
- <li>Steffen Eibicht</li>
- <li>Rinus Bakker</li>
- <li>Carla Schroder</li>
- <li>Daniel Baer</li>
- <li>Vincent Audibert</li>
- <li>Sam Shefrin</li>
- <li>Chieh Teng</li>
- <li>Robert Zmigrodzki</li>
- <li>Fabrizio Arias</li>
- <li>Manfred Mislik</li>
- <li>Chambers Tristan</li>
- <li>Radek Jun</li>
- <li>Philippe Dezac</li>
- <li>Orlando Gonzalez</li>
- <li>Alan Alpert</li>
- <li>Robert Rader</li>
- <li>Jean-Baptiste Rouquier</li>
- <li>Martin Senftleben</li>
- <li>Jörg Platte</li>
- <li>Moritz Klingmann</li>
- <li>Sam Shefrin</li>
- <li>Vincent Körber</li>
- <li>Michael Gajda</li>
- <li>Roger Larsson</li>
- <li>Mark Fraser</li>
- <li>Francois Guay</li>
- <li>Sylvain Leterreur</li>
- <li>Harald Ulver</li>
- <li>Denis Zalevskiy</li>
- <li>Krzysztof Onak</li>
- <li>Raymond Meijer</li>
- <li>Kamil Stepinski</li>
- <li>Christoph Baldauf</li>
- <li>Martin Zahnd</li>
- <li>Andreas Schroeder</li>
- <li>Michael Beckmann</li>
- <li>Franck Costa</li>
- <li>Harald Wilmersdorf</li>
- <li>Bernhard Hennlich</li>
-
- </ul>
-
- </td><td width="50%" align="center">
-
- <img src="https://farm4.staticflickr.com/3940/15028102934_b9f16f1849_o.png" title="Entertainment where You want it (excito.com)" width="151" height="72">
-
- </td>
-</tr>
-</tbody></table>
-
-<p><b>2012</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
- <li>Richard Clayton</li>
- <li>Laurent Espitallier</li>
- <li>Oswaldo J Asprino Brine</li>
- <li>Martin Senftleben</li>
- <li>Thierry Nemes</li>
- <li>Tim Taylor</li>
- <li>Martin Hunger</li>
- <li>Christian Hugues</li>
- <li>Raul Sampe</li>
- <li>Christian Karitnig</li>
- <li>Slonska Vladimir</li>
- <li>Kevin O'Brien</li>
- <li>Ralph Scharpf</li>
- <li>Marios Andreopoulos</li>
- <li>Klaus Binder</li>
- <li>Carlos Mazon</li>
- <li>Stephan Kuhnert</li>
- <li>Dotan Cohen</li>
- <li>Carlos Mazon</li>
- <li>Michael Marending</li>
- <li>Christine Nicoll</li>
- <li>Ben vant Ende</li>
- <li>Filippo Valeri</li>
- <li>Christoph Baldauf</li>
- <li>Gregory Dawes</li>
- <li>Nicolas Martinez Frances</li>
- <li>Ivan Ruano</li>
- <li>Krishna G S</li>
- <li>Philippe Quaglia</li>
- <li>Stefan Habetz</li>
- <li>Robert Evert</li>
- <li>Michael Zabel</li>
- <li>Ilko Brauch</li>
- <li>Alessandro Di Renzo</li>
- <li>Anrypa Ahtoh</li>
- <li>Jean-Pierre Imhof</li>
- <li>Martin Zahnd</li>
- <li>Roronba Orbra</li>
- <li>Christer Wendel</li>
- <li>Mark Fraser</li>
- <li>Michael Klitgaard</li>
- <li>Martin Senftleben</li>
- <li>Osvaldo de Dona</li>
- </ul>
-
- </td><td width="50%" align="center">
-
- <img src="https://farm4.staticflickr.com/3940/15462462129_50f093232b_m.jpg" title="KDE-ev (ev.kde.org)" width="240" height="154">
-
- </td>
-</tr>
-
-</tbody></table>
-
-<p><b>2013</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
-
- <li>Thierry Nemes</li>
- <li>Richard Clayton</li>
- <li>Vincent Petry</li>
- <li>Nikolaj Petersen</li>
- <li>Christian González-Schiller</li>
- <li>Christoph Baldauf</li>
- <li>Jose Antonio Diaz Romero</li>
- <li>Christian jacobsen</li>
- <li>Kjetil Kjernsmo</li>
- <li>Dana Ross</li>
- <li>Georg Fries</li>
- <li>Laurent Espitallier</li>
- <li>Mónica Mora Guerra</li>
- <li>Michael Marending</li>
- <li>Axel Hengemuehle</li>
- <li>Alberto Ponti</li>
- <li>Jean Fréderic Jolimaitre</li>
- <li>Frederik Bertling</li>
- <li>Christoph Zimmermann</li>
- <li>Christoph Baldauf</li>
- <li>Christian Storzer</li>
- <li>Glen Thomson</li>
- <li>Bjorn Olsson</li>
- <li>Lukasz Mierzwa</li>
- <li>Jean-Paul Assouvie</li>
- <li>Michael Mason</li>
- <li>Jason Robinson</li>
- <li>Andreas Blumer</li>
- <li>Marc Winkelmann</li>
- <li>Ulf Berwaldt</li>
- <li>Alex Ruddick</li>
- <li>Christian Comes</li>
- <li>Donald Fredricks</li>
- <li>Christoph Baldauf</li>
- <li>Yevgeniy Ivanisenko</li>
- <li>Martin Zahnd</li>
- <li>Danny Schmarsel</li>
- <li>Mike Bing</li>
- <li>Antonio Trincone</li>
- <li>Michael Schweizer</li>
-
- </ul>
-
- </td><td width="50%" align="center">
- <img src="https://farm8.staticflickr.com/7469/15464661470_d961a1a8fe_m.jpg" title="Lhorens b. sartori (photo.sarto.com)" width="126" height="46"><br>
- <img src="https://farm8.staticflickr.com/7468/15651200612_b3033bd50e_m.jpg" title="Digital Marketing Agency (seosilly.co.uk)" width="240" height="66">
- </td>
-</tr>
-
-</tbody></table>
-
-<p><b>2014</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
- <li>Richard Clayton</li>
- <li>Dominik Keller</li>
- <li>Bradley Noyes</li>
- <li>Julien Morot</li>
- <li>Martin Lubich</li>
- <li>Ralf Duhlmeyer</li>
- <li>Ryan Henderson</li>
- <li>Christoph Baldauf</li>
- <li>Sergey Romanov</li>
- <li>Dominique Denis</li>
- <li>Piter Dias</li>
- <li>Anna Timm</li>
- <li>Daisy Vogt</li>
- <li>Tim Kozusko</li>
- <li>Martina Huber</li>
- <li>Gunner Gewiss</li>
- <li>Michael Mason</li>
- <li>Sven Ehlert</li>
- <li>Alexander Bryan</li>
- <li>Anders Lund</li>
- <li>Otto Dämon</li>
- <li>Holger Hampe</li>
- <li>Martin Mohr</li>
- <li>Arnaud Labro</li>
- <li>Jochen Siebert</li>
- <li>John F Moore</li>
- <li>Smit Mehta</li>
- <li>Christopher Burkey</li>
- <li>Aldo Ellena</li>
- <li>Christian Graesser</li>
- <li>Stefan Ronnecke</li>
- <li>Rainer Schaffer</li>
- <li>Robert MacKenzie</li>
- <li>Ute Stolzer</li>
- <li>Martin Zahnd</li>
- <li>Bernd Holzum</li>
- <li>Lukasz Mierzwa</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
- <img src="https://farm6.staticflickr.com/5601/15464697590_2489e5cabb_m.jpg" title="Buki Koshoni (bukikoshoni.com)" width="240" height="130">
- </td>
-</tr>
-
-</tbody></table>
-
-<p><b>2015</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
- <li>Benno Hansen</li>
- <li>Filippo Valeri</li>
- <li>Liokumovich Gregory</li>
- <li>Mike Bing</li>
- <li>Robert Berg</li>
- <li>Umberto Valentinotti</li>
- <li>Chrysoula Kotsanidou</li>
- <li>Jan Ott</li>
- <li>Udo Lembke</li>
- <li>Jakob Nielsen</li>
- <li>Casper Blom</li>
- <li>Balthas Seibold</li>
- <li>Jari Kirvesoja</li>
- <li>Jerry Argetsinger</li>
- <li>Hans Becker</li>
- <li>James Lunn</li>
- <li>keith lindsay</li>
- <li>Eberhard Hoyer</li>
- <li>Karl Ove Hufthammer</li>
- <li>Wayne Powell</li>
- <li>Fabien Maussion</li>
- <li>Bradley Noyes</li>
- <li>Marcus Lucke</li>
- <li>Koen Bailleul</li>
- <li>Sven Braner</li>
- <li>Richard Clayton</li>
- <li>Ulf Rompe</li>
- <li>Andrew Kingwell</li>
- <li>Casper Blom</li>
- <li>Vicente Salvador Cubedo</li>
- <li>Steffen Ullrich</li>
- <li>Felix Keppmann</li>
- <li>Martin Stolpe</li>
- <li>Andreas Berntsen</li>
- <li>Sander Boer</li>
- <li>Anton Vigura</li>
- <li>Xavier Arnau</li>
- <li>Randolf Mock</li>
- <li>Jean Frédéric Jolimaitre</li>
- <li>Stefanos Charchalakis</li>
- <li>Shantikumar Kulkarni</li>
- <li>Alberto Ponti</li>
- <li>Julian Weißgerber</li>
- <li>Dietmar Neuss</li>
- <li>Michael Schweizer</li>
- <li>Michael Zabel</li>
- <li>Martin Zahnd</li>
- <li>Graham Osborne</li>
- <li>Ivo Jossart</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
- </td>
-</tr>
-
-</tbody></table>
-
-<p><b>2016</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
-
- <li>Richard Clayton</li>
- <li>Alexandre Alapetite</li>
- <li>Lukas Matasovsky</li>
- <li>Michael Krumnow</li>
- <li>Michael Ast</li>
- <li>Karl Ove Hufthammer</li>
- <li>Damian Rychlinski</li>
- <li>James Russell</li>
- <li>Christian Comes</li>
- <li>Dusan Pavlik</li>
- <li>Hugo Costelha</li>
- <li>bradley noyes</li>
- <li>Nikolaj Petersen</li>
- <li>Govindarajan Soundararajan</li>
- <li>Laurent Espitallier</li>
- <li>Deborah Swarts</li>
- <li>Geoffrey King</li>
- <li>Maria Calzetti</li>
- <li>Julio Rodriguez</li>
- <li>Elena Botoeva</li>
- <li>Heinz Herger</li>
- <li>Werner Lauckner</li>
- <li>Phil Landmeier</li>
- <li>Harald Knierim</li>
- <li>Kjetil Kjernsmo</li>
- <li>Jonas Kemmer</li>
- <li>Dzmitry Lahoda</li>
- <li>Guillermo Perez Hernandez</li>
- <li>Graham Monkman</li>
- <li>Varfolomeeva Marina</li>
- <li>Franck Quélain</li>
- <li>Lars-Goran Larsson</li>
- <li>Juan Zamanillo</li>
- <li>Olaf Scheel</li>
- <li>Rainer Schaffer</li>
- <li>Martin Zahnd</li>
- <li>Peter McBride</li>
- <li>Ivan Dragomereckyj</li>
- <li>Roland Bohrer</li>
- <li>Mattia Verga</li>
- <li>Klaus Wünschel</li>
- <li>Danie van der Merwe</li>
- <li>Michael Scholz</li>
- <li>Jens P Benecke</li>
- <li>Laurent Espitallier</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
- </td>
-</tr>
-
-</tbody></table>
-
-<p><b>2017</b></p>
-
-<table cellspacing="0" cellpadding="0" border="0" width="100%">
-<tbody><tr>
- <td width="50%">
-
- <ul>
- <li>Patrick van Elk</li>
- <li>Umberto Valentinotti</li>
- <li>Karl Ove Hufthammer</li>
- <li>Richard Clayton</li>
- <li>Francesco Bertoldi</li>
- <li>Stefan Grosse</li>
- <li>Prateek Panjla</li>
- <li>Frank Cook</li>
- <li>Jakub Svoboda</li>
- <li>Werner Lauckner</li>
- <li>Alberto Ponti</li>
- <li>Serge Muscat</li>
- </ul>
-
- </td>
-
- <td width="50%" align="center">
- </td>
-</tr>
-
-</tbody></table>
-</div>
diff --git a/content/download/_index.md b/content/download/_index.md
new file mode 100644
index 000000000..8cbbc53bb
--- /dev/null
+++ b/content/download/_index.md
@@ -0,0 +1,81 @@
+---
+date: "2017-03-21"
+title: "Download"
+author: "digiKam"
+description: "Where to obtain digiKam."
+category: "downloads"
+aliases: "/download"
+---
+
+<div class="row text-center">
+<div class="large-4 medium-4 columns download-icons">
+ <i class="fa fa-linux fa-5x"></i>
+ <h3 class="index-header">Linux AppImage</h3>
+ <p>
+ <a href="https://download.kde.org/stable/digikam/digikam-5.5.0-01-x86-64.appimage">64-bit</a> / <a href="https://download.kde.org/stable/digikam/digikam-5.5.0-01-i386.appimage">32-bit</a>
+ </p>
+</div>
+<div class="large-4 medium-4 columns download-icons">
+ <i class="fa fa-windows fa-5x"></i>
+ <h3 class="index-header">Windows</h3>
+ <p>
+ <a href="https://download.kde.org/stable/digikam/digiKam-5.5.0-01-Win64.exe">64-bit</a> / <a href="https://download.kde.org/stable/digikam/digiKam-5.5.0-01-Win32.exe">32-bit</a>
+ </p>
+ </div>
+<div class="large-4 medium-4 columns download-icons">
+ <i class="fa fa-apple fa-5x"></i>
+ <h3 class="index-header">Mac</h3>
+ <p>
+ <a href="https://download.kde.org/stable/digikam/digiKam-5.5.0-01-MacOS-x86-64.pkg">64-bit</a>
+ </p>
+</div>
+</div>
+
+<div class="row">
+ <div class="large-12 columns all-downloads">
+ <p>
+ <a href="http://download.kde.org/stable/digikam/">See all downloads! </a>
+ </p>
+ </div>
+</div>
+
+<!-- Before you can use digiKam, you must first download and install it. There are many ways to achieve that: -->
+
+<!-- ### Official Bundles -->
+
+<!-- This is the easiest, and recommended, way to get the most recent stable version. -->
+<!-- This includes a universal Linux AppImage bundle, macOS package, and Windows Installer. -->
+
+<!-- You can find the bundles here: http://download.kde.org/stable/digikam/ -->
+
+### Package By Distribution
+
+[Install a package](/download/binary/) that is made available through your distribution.
+
+Keep in mind that distro-provided versions of digiKam could be out of date.
+macOS and Windows users should refer to the [official bundles](#official-bundles) listed above.
+
+### Pre-Release Bundles
+
+These are compiled pre-release versions provided by the team for testing purposes only.
+
+This is the easiest way to try the current implementation that hasn't been released yet.
+This includes a universal Linux AppImage, macOS package, and Windows installer.
+
+[Get the latest Pre-Release bundles here](https://drive.google.com/drive/folders/0BzeiVr-byqt5Y0tIRWVWelRJenM).
+
+### Compile the Official Release
+
+This is an option for those that are comfortable with compiling the project themselves.
+
+Get the source for the [latest official release](http://download.kde.org/stable/digikam/) and build.
+
+### Compile Latest Development Version
+
+This is more complicated, but is as recent as possible.
+This is for when you want to help with finding bugs or to hack on the project as a contributor.o
+
+Get the latest code [from our git repository](/download/git/).
+
+You can choose the one which fits you best. We provide detailed instructions for each of them.
+Note: check the [dependencies](/download/dependencies/) before trying to compile digiKam.
diff --git a/content/download/binary.md b/content/download/binary.md
index 07795c99e..0b8acf45f 100644
--- a/content/download/binary.md
+++ b/content/download/binary.md
@@ -1,101 +1,101 @@
---
date: "2017-03-22T13:13:45-06:00"
title: "Installing a package"
author: "digiKam"
description: "Install a binary package of digikam."
category: "download"
aliases: "/download/binary"
---
-<div class="content"><h1>Jump to:</h1>
+<div class="content"><h3>Jump to:</h3>
<div style="display:inline-block;width:100%;clear:both;font-size:150%;margin-bottom:20px;height:40px;">
<div style="float:left;height:100%;margin-right:50px;"><a href="#Linux"><img src="http://www.digikam.org/drupal/system/files/images/linux.png" alt="Linux" title="Linux" class="image image-_original " width="32" height="32"><span style="height:100%;line-height:100%;display:inline-block;vertical-align:middle;">Linux</span></a></div>
<div style="float:left;height:100%;margin-right:50px;"><a href="#FreeBSD"><img src="http://www.digikam.org/drupal/system/files/images/freebsd.png" alt="FreeBSD" title="FreeBSD" class="image image-_original " width="32" height="32"><span style="height:100%;line-height:100%;display:inline-block;vertical-align:middle;">FreeBSD</span></a></div>
<div style="float:left;height:100%;margin-right:50px;"><a href="#MacOS"><img src="http://www.digikam.org/drupal/system/files/images/macosx.png" alt="MacOS" title="MacOS" class="image image-_original " width="32" height="32"><span style="height:100%;line-height:100%;display:inline-block;vertical-align:middle;">MacOS</span></a></div>
<div style="float:left;height:100%;margin-right:50px;"><a href="#Windows"><img src="http://www.digikam.org/drupal/system/files/images/winvista.png" alt="Windows" title="Windows" class="image image-_original " width="32" height="32"><span style="height:100%;line-height:100%;display:inline-block;vertical-align:middle;">Windows</span></a></div>
</div>
-<h1>Installing a package</h1>
+<h3>Installing a package</h3>
<p>You can install digiKam using pre-compiled version. This is done by your distribution. A disadvantage is that in some cases the version provided by your distribution is not the latest stable version the digiKam team has released. The links given below will give you information about which version your distribution packages.</p>
<p><a name="Linux"></a><br>
<span class="inline inline-left"><img src="http://www.digikam.org/drupal/system/files/images/linux.png" alt="Linux" title="Linux" class="image image-_original " width="32" height="32"></span></p>
-<h2>Linux</h2>
+<h4>Linux</h4>
<p></p>
<table border="1">
<tbody><tr>
<td>Distribution</td>
<td>Link to the list of digiKam packages</td>
<td>Command line to install</td>
</tr>
<tr>
<td>Kubuntu</td>
<td><a href="https://launchpad.net/~kubuntu-ppa/+archive/backports">here</a></td>
<td>apt-get install digikam</td>
</tr>
<tr><td>Ubuntu</td>
<td><a href="http://packages.ubuntu.com/search?keywords=digikam&amp;searchon=names&amp;suite=all&amp;section=all">here</a></td>
<td>apt-get install digikam</td>
</tr><tr>
<td>Debian</td>
<td><a href="http://packages.debian.org/search?searchon=names&amp;keywords=digikam">here</a> and reason why the latest version of packages is not in testing can be found <a href="http://release.debian.org/migration/testing.pl?package=digikam">here</a></td>
<td>apt-get install digikam</td>
</tr>
<tr>
<td>Arch Linux</td>
<td><a href="http://www.archlinux.org/packages/?q=digikam">here</a></td>
<td>pacman -Sy digikam</td>
</tr>
<tr>
<td>Ark Linux</td>
<td><a href="https://www.archlinux.org/packages/?sort=&amp;q=digikam">here</a></td>
<td>apt-get install digikam</td>
</tr>
<tr>
<td>Mandriva/Mageia Linux</td>
<td><a href="http://mageia.madb.org/package/show/name/digikam">here</a></td>
<td>urpmi digikam</td>
</tr>
<tr>
<td>SUSE Linux</td>
<td><a href="http://software.opensuse.org/search?baseproject=ALL&amp;p=1&amp;q=digikam">here</a></td>
<td>yast -i digikam</td>
</tr>
<tr>
<td>Fedora Linux</td>
<td><a href="https://admin.fedoraproject.org/pkgdb/package/digikam">here</a></td>
<td>yum install digikam</td>
</tr>
<tr>
<td>Gentoo Linux</td>
<td><a href="http://packages.gentoo.org/package/media-gfx/digikam">here</a></td>
<td>emerge digikam</td>
</tr>
</tbody></table>
<p>Here, we provide some usefull tips for getting a slightly more up-to-date version:</p>
<p>Under Ubuntu 10.10 you can use some PPA, look <a href="http://scribblesandsnaps.wordpress.com/2010/12/10/install-digikam-1-6-on-ubuntu-10-10/">here</a>.</p>
<p><a name="FreeBSD"></a><br>
<span class="inline inline-left"><img src="http://www.digikam.org/drupal/system/files/images/freebsd.png" alt="FreeBSD" title="FreeBSD" class="image image-_original " width="32" height="32"></span></p>
-<h2>FreeBSD</h2>
+<h4>FreeBSD</h4>
<p>The list of digiKam packages in FreshPorts can be found <a href="http://www.freshports.org/search.php?query=digikam&amp;search=go&amp;num=10&amp;stype=name&amp;method=match&amp;deleted=excludedeleted&amp;start=1&amp;casesensitivity=caseinsensitive">here</a>.</p>
<p><a name="MacOS"></a><br>
<span class="inline inline-left"><img src="http://www.digikam.org/drupal/system/files/images/macosx.png" alt="MacOS" title="MacOS" class="image image-_original " width="32" height="32"></span></p>
-<h2>MacOS</h2>
+<h4>MacOS</h4>
<p>digiKam for MacOS can installed using our self-contained package available on <a href="http://download.kde.org/stable/digikam/">download.kde.org</a>.</p>
<p>Be careful as digiKam is not as stable under MacOS as under Linux because of some bugs in the underlying KDE Software Collection libraries that digiKam depends on.</p>
<p><a name="Windows"></a><br>
<span class="inline inline-left"><img src="http://www.digikam.org/drupal/system/files/images/winvista.png" alt="Windows" title="Windows" class="image image-_original " width="32" height="32"></span></p>
-<h2>Windows</h2>
+<h4>Windows</h4>
<p>digiKam for Windows can installed using our self-contained installer available on <a href="http://download.kde.org/stable/digikam/">download.kde.org</a>.</p>
<p>Be careful as digiKam is not as stable under Windows as under Linux because of some bugs in the underlying KDE Software Collection libraries that digiKam depends on.</p>
<p><span class="inline inline-left"><img src="http://i18n.kde.org/media/images/trademark_kde_gear_black_logo.png" alt="KDEi18n" title="KDEi18n" class="image image-_original " width="32" height="32"></span></p>
-<h2>Internationalization</h2>
-<p>If you installed digikam using your Linux distribution package, language files should<br>
-be included with it and you can run digikam in any supported language.</p>
+<h4>Internationalization</h4>
+<p>If you installed digiKam using your Linux distribution package, language files should<br>
+be included with it and you can run digiKam in any supported language.</p>
<p>You can change the default language by using Help Menu in digiKam.</p>
<p>If you don't find the required language in it, you can add a language by<br>
installing that particular language pack. For example, in debian based distros,<br>
if you want to add "french" language, you can do it by following:</p>
<p># sudo apt-get install language-pack-kde-fr-base<br>
# sudo apt-get install language-pack-kde-fr</p>
<p>Note: Windows and MacOS installers include already all translation files.</p>
</div>
diff --git a/content/download/download.md b/content/download/download.md
deleted file mode 100644
index 89e76e2a9..000000000
--- a/content/download/download.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-date: "2017-03-21"
-title: "Download"
-author: "digiKam"
-description: "Where to obtain digiKam."
-category: "downloads"
-aliases: "/download"
-menu: "navbar"
----
-
-<div class="content"><p>Before you can use digiKam, you must first download and install it. There are many ways to achieve that:</p>
-<ul>
-<li>
-Use a compiled <a href="http://download.kde.org/stable/digikam/">official bundle</a> provided by the team.<br>
-This is the most easy way to test the recent stable version everywhere. This include universal Linux AppImage bundle, MacOS Package, and Windows Installer.
-</li>
-<li>
-Use a compiled <a href="?q=download/binary/">package</a> provided by your operating system.<br>
-Take a care, digiKam version can be outdated.
-</li>
-<li>
-Use a compiled <a href="https://drive.google.com/drive/folders/0BzeiVr-byqt5Y0tIRWVWelRJenM">pre-version bundle</a> provided by the team for testing purpose only.<br>
-This is the most easy way to try the current implementation not yet released officially. This include universal Linux AppImage bundle, MacOS Package, and Windows Installer.
-</li>
-<li>
-Compile the last source code archive from <a href="http://download.kde.org/stable/digikam/">official repository</a>.
-</li>
-<li>
-Compile the latest version from <a href="?q=download/GIT">git repository</a> where we currently work in.<br>
-This is even more complicated, but as recent as it gets. This is needed when you want to help us to find bugs or help us develop. This way is for peoples who want to contribute or if pre-version bundles are not enough to investigates problems at run-time.
-</li>
-</ul>
-<p>You can choose the one which fits you best. We provide detailed instructions for each of them.</p>
-<p>Note: check the <a href="?q=download/dependencies">dependencies</a> before trying to compile digiKam.</p>
-</div>
diff --git a/content/download/git.md b/content/download/git.md
index 94e65253d..820daadb4 100644
--- a/content/download/git.md
+++ b/content/download/git.md
@@ -1,37 +1,41 @@
---
date: "2017-03-22T13:13:45-06:00"
title: "Download from git"
author: "digiKam"
-description: "Download the digikam source from git."
+description: "Download the digiKam source from git."
category: "download"
aliases: "/download/GIT"
---
-<div class="taxonomy"><ul class="links inline"><li class="taxonomy_term_2 first last"><a href="/taxonomy/term/2" rel="tag" title="">Download</a></li>
-</ul></div>
- <div class="content"><p><a id="checkout-git"></a></p>
-<h1>HOW TO GET DIGIKAM FROM GIT MASTER REPOSITORY</h1>
-<h3>Checkout source code</h3>
-<p>Note: check the <a href="?q=download/dependencies">dependencies</a> before trying to compile digiKam.
-</p>
-<p>To Checkout the <a href="https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation">digiKam Sofware Compilation</a> from GIT master repository, and enter these command lines in a clean directory:
-</p><p><tt><br>
-</tt></p><div dir="ltr" align="left"><tt>
-# git clone git://anongit.kde.org/digikam-software-compilation dk<br>
-# cd dk <br>
-# export GITSLAVE=.gitslave.devel <br>
+### How to get digiKam from git master repository
+
+#### Checkout source code
+
+Note: check the <a href="?q=download/dependencies">dependencies</a> before trying to compile digiKam.
+
+To Checkout the <a href="https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation">digiKam Sofware Compilation</a> from GIT master repository, and enter these command lines in a clean directory:
+
+
+
+```
+# git clone git://anongit.kde.org/digikam-software-compilation dk
+# cd dk
+# export GITSLAVE=.gitslave.devel
# ./download-repos
-</tt></div><tt>
-<p></p></tt><p></p>
-<h3>Installation in your Linux system</h3>
-<p>To compile the source code under linux you have to give these commands in the source code folder. You should use a separate build folder to help cleaning up sources if something goes wrong. All configuration tasks can be performed by <b>bootstrap.linux</b> script.</p>
-<p><tt><br>
-</tt></p><div dir="ltr" align="left"><tt>
-# ./bootstrap.linux <br>
-# cd build <br>
-# make <br>
-# su <br>
+```
+
+
+
+### Installation in your Linux system
+
+To compile the source code under linux you have to give these commands in the source code folder. You should use a separate build folder to help cleaning up sources if something goes wrong. All configuration tasks can be performed by <b>bootstrap.linux</b> script.
+
+
+
+```
+# ./bootstrap.linux
+# cd build
+# make
+# su
# make install
-</tt></div><tt>
-<p></p></tt><p></p>
-</div>
+```
diff --git a/content/download/tarball.md b/content/download/tarball.md
index f6e43b2c8..5db461cb9 100644
--- a/content/download/tarball.md
+++ b/content/download/tarball.md
@@ -1,28 +1,28 @@
---
date: "2017-03-22T13:13:45-06:00"
title: "Installing a tarball"
author: "digiKam"
-description: "Build and install digikam from a tarball."
+description: "Build and install digiKam from a tarball."
category: "download"
aliases: "/download/tarball"
---
<div class="content"><p>Installing a tarball will get you the most up-to-date stable version of digiKam. But it can happen that you run into all kinds of problems related to compiling. </p>
<p>So, if your distribution is running behind a lot, you can install a tarball.</p>
<p>Before installing a tarball, it is better to prevent conflicts to uninstall the digiKam and Kipi plugins packages provided by your distribution. </p>
<p>First you have to download digiKam from :</p>
<p>- This repository for <a href="http://download.kde.org/stable/digikam/">stable releases</a>.</p>
<p>- For older releases deprecated and not maintained <a href="http://download.kde.org/Attic/digikam/">look here</a>.</p>
<p>Second you need to install all digiKam <a href="?q=download/dependencies">dependencies</a>.</p>
<p>Extract the tarball via <code>tar -xvjf filename.bz2</code>, enter the extracted directory and then you need to issue a set of commands. You need to specify an installation prefix. This will be the base path of the installation. To determine the correct installation path, use <code>`kf5-config --prefix`</code> and provide it as a parameter for cmake, as shown in the example commands below:</p>
<p><code><br>
bootstrap.linux<br>
cd build<br>
make<br>
su<br>
make install<br>
</code></p>
<p>Notes: </p>
<p>- A bootstrap script is also available to configure for OSX through Macports.<br>
- A bootstrap script is also available to configure for Windows through MXE (cross compiling with MinGW). Forget a native compilation using Microsoft Visual C++. It's a waste of time as this compiler is a big weird puzzle...</p>
</div>
diff --git a/content/events.md b/content/events.md
index 075d4ee57..24d3f466d 100644
--- a/content/events.md
+++ b/content/events.md
@@ -1,131 +1,131 @@
---
date: "2017-03-21"
title: "Events"
author: "digiKam"
description: "A list of events related to digiKam."
category: "events"
aliases: "/node/354"
---
-<div class="content"><h5>2008</h5>
+<div class="content"><h3>2008</h3>
<p>
</p><ul>
<li><b><a href="http://www.libregraphicsmeeting.org">Linux Graphic Meeting</a></b>: Wroclaw, Poland - 8-11th May - <a href="http://www.digikam.org/drupal/node/315">See details here</a></li>
<img src="http://farm4.static.flickr.com/3162/2513282729_2d5ba64b0f_m.jpg" width="160" height="240"><br>
<li><b><a href="http://akademy.kde.org">Akademy</a></b>: Sint-Katelijne-Waver, Belgium - 9-10th August - <a href="http://www.digikam.org/drupal/node/366">See details here</a></li>
- <img src="https://lh5.googleusercontent.com/-RqdFzbHqyHk/Tmdw_0gkGYI/AAAAAAAAAqo/KIaZ0Y3C2P8/s604/n1117543793_30072033_763.jpg" width="240" height="160"><br>
+ <img src="https://lh3.googleusercontent.com/-RqdFzbHqyHk/Tmdw_0gkGYI/AAAAAAAAAqo/KIaZ0Y3C2P8/s604/n1117543793_30072033_763.jpg" width="240" height="160"><br>
<li><b>KDE Graphics Coding Sprint</b>:<br>
Planed at <a href="http://snipurl.com/3zpqa">Genoa, Italia</a><br>
Date: 31 october - 2 november<br>
Organized by Angelo Naselli<br>
Hosted by <a href="http://www.alid.it">Alid Association</a><br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a>
</li>
<img src="https://lh3.googleusercontent.com/-sFJ2a3QUxXA/TmdxeQP2_LI/AAAAAAAAAsE/smaFjwXy3Vo/s604/n1117543793_30091022_7013.jpg" width="240" height="160"><br>
</ul>
<p></p>
-<h5>2009</h5>
+<h3>2009</h3>
<p>
</p><ul>
<li><b>KDE Graphics Coding Sprint</b>:<br>
Planed at <a href="http://maps.google.de/maps?f=q&amp;source=s_q&amp;hl=de&amp;geocode=&amp;q=Bernhardstra%C3%9Fe+12,+Essen&amp;sll=51.392833,7.024748&amp;sspn=0.006494,0.019119&amp;ie=UTF8&amp;hq=&amp;hnear=Bernhardstra%C3%9Fe+12,+Fischlaken+45239+Essen,+Nordrhein-Westfalen&amp;ll=51.391681,7.026787&amp;spn=0.006494,0.019119&amp;z=16">Essen, Germany</a><br>
Date: 13 - 15 november<br>
Organized and hosted by Marcel Wiesweg<br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a><br>
<a href="http://techbase.kde.org/Projects/Digikam/CodingSprint2009">Wiki page</a><br>
<a href="http://dot.kde.org/2009/11/22/digikam-and-kipi-sprint">See event resume details here</a>
</li>
<a href="http://www.flickr.com/photos/digikam/4107577420/" title="PICT2891.jpg by cauliergilles, on Flickr"><img src="http://farm3.static.flickr.com/2604/4107577420_71301d1155_m.jpg" alt="PICT2891.jpg" width="240" height="160"></a>
<a href="http://www.flickr.com/photos/digikam/4104932135/" title="PICT2892.jpg by cauliergilles, on Flickr"><img src="http://farm3.static.flickr.com/2602/4104932135_3cb3f69536_m.jpg" alt="PICT2892.jpg" width="240" height="160"></a>
</ul>
<p></p>
-<h5>2010</h5>
+<h3>2010</h3>
<p>
</p><ul>
<li><b>KDE Graphics Coding Sprint</b>:<br>
Planed at <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=1%2C%20Rue%20Emile%20Tavan%2C%2013100%20%2C%20Aix-en-Provence%2C%20France">Maison des associations Tavan, Aix en provence, France</a><br>
Date: 27 - 29 august<br>
Organized by Gilles Caulier<br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a><br>
<a href="http://techbase.kde.org/Projects/Digikam/CodingSprint2010">Wiki page</a><br>
<a href="http://www.digikam.org/drupal/node/538">See event resume details here</a>
</li>
<a href="http://www.flickr.com/photos/digikam/4941067580/" title="DSC01577.JPG by cauliergilles, on Flickr"><img src="http://farm5.static.flickr.com/4142/4941067580_017df32ccd_m.jpg" alt="DSC01577.JPG" width="160" height="240"></a>
<a href="http://www.flickr.com/photos/50387249@N04/4936994695/" title="P1030859 by zzzahu, on Flickr"><img src="http://farm5.static.flickr.com/4097/4936994695_e80a8f2e1e_m.jpg" alt="P1030859" width="240" height="180"></a>
</ul>
<p></p>
-<h5>2012</h5>
+<h3>2012</h3>
<p>
</p><ul>
<li><b>KDE Graphics Coding Sprint</b>:<br>
Planed at Genoa<br>
Date: 13 - 15 january 2012<br>
Organized by Angelo Naselli<br>
Hosted by <a href="http://www.alid.it">Alid Association</a><br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a><br>
<a href="http://techbase.kde.org/Projects/Digikam/CodingSprint2011">Wiki page</a><br>
<a href="http://dot.kde.org/2012/02/22/digikam-team-meets-genoa-italy">See event resume details here</a>
</li>
<a href="https://lh3.googleusercontent.com/-0_Nc31NkByE/TxHVtpHP8EI/AAAAAAAAAmc/fo7MyE7mUm0/w284-h270-k/DSC00499_v1.JPG" title="DSC00499_v1.JPG by cauliergilles, on Google+"><img src="https://lh3.googleusercontent.com/-0_Nc31NkByE/TxHVtpHP8EI/AAAAAAAAAmc/fo7MyE7mUm0/w284-h270-k/DSC00499_v1.JPG" alt="DSC00499_v1.JPG" width="284" height="270"></a>
</ul>
<p></p>
-<h5>2014</h5>
+<h3>2014</h3>
<p>
</p><ul>
<li><b>digiKam Coding Sprint</b>:<br>
Planed at Berlin<br>
Date: 14 - 16 november 2014<br>
Organized by Tobias Hunger<br>
Hosted by <a href="http://www.digia.com/en/Contact/">Digia Germany GmbH</a><br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a><br>
<a href="https://sprints.kde.org/sprint/248">Wiki page</a><br>
<a href="https://dot.kde.org/2015/03/05/digikam-sprint-2014">See event resume details here</a>
</li>
<a href="https://www.flickr.com/photos/digikam/15772576686" title="DSC00079 by Caulier Gilles, on Flickr"><img src="https://farm6.staticflickr.com/5615/15772576686_e5ea277655_n.jpg" alt="DSC00079" width="320" height="213"></a>
</ul>
<p></p>
-<h5>2015</h5>
+<h3>2015</h3>
<p>
</p><ul>
<li><b>digiKam Coding Sprint</b>:<br>
Planed while KDE Randa Reunion<br>
Date: 09 - 13 september 2015<br>
Organized by Mario Fux<br>
Hosted at <a href="http://randa-meetings.ch/">Randa, Switzerland </a><br>
Sponsored by <a href="http://ev.kde.org">KDE-ev</a><br>
<a href="https://sprints.kde.org/sprint/271">Wiki page</a><br>
<a href="https://dot.kde.org/2015/12/07/randa-meetings-2015-huge-success-again">See event resume details here</a>
</li>
<a href="https://www.flickr.com/photos/digikam/21363200575/in/album-72157658453239225/" title="DSC08226"><img src="https://farm1.staticflickr.com/632/21363200575_4cd510654b_n.jpg" alt="DSC08226" width="320" height="213"></a>
</ul>
<p></p>
</div>
diff --git a/content/news/2000-01-01_Altitude_information_available_in_kipi_Geolocator_plugin__3D_info_.md b/content/news/2000-01-01_Altitude_information_available_in_kipi_Geolocator_plugin_3D_info.md
similarity index 100%
rename from content/news/2000-01-01_Altitude_information_available_in_kipi_Geolocator_plugin__3D_info_.md
rename to content/news/2000-01-01_Altitude_information_available_in_kipi_Geolocator_plugin_3D_info.md
diff --git a/content/news/2000-01-01_Building_Digikam_for_Dummies_on_Ubuntu_and_other_linux_based_distro_s.md b/content/news/2000-01-01_Building_Digikam_for_Dummies_on_Ubuntu_and_other_linux_based_distros.md
similarity index 100%
rename from content/news/2000-01-01_Building_Digikam_for_Dummies_on_Ubuntu_and_other_linux_based_distro_s.md
rename to content/news/2000-01-01_Building_Digikam_for_Dummies_on_Ubuntu_and_other_linux_based_distros.md
diff --git a/content/news/2006-09-15_digiKam_0.9.0-beta2_and_digiKamImagePlugins_0.9.0-beta2_are_out_there__catch_them_.md b/content/news/2006-09-15_digiKam_0.9.0-beta2_and_digiKamImagePlugins_0.9.0-beta2_are_out_there_catch_them.md
similarity index 100%
rename from content/news/2006-09-15_digiKam_0.9.0-beta2_and_digiKamImagePlugins_0.9.0-beta2_are_out_there__catch_them_.md
rename to content/news/2006-09-15_digiKam_0.9.0-beta2_and_digiKamImagePlugins_0.9.0-beta2_are_out_there_catch_them.md
diff --git a/content/news/2006-10-20_I_can_see_the_light__digiKam-0.9.0-beta3_and_DigikamImagePlugins-0.9.0-beta3_have_been_released..md b/content/news/2006-10-20_I_can_see_the_light_digiKam-0.9.0-beta3_and_DigikamImagePlugins-0.9.0-beta3_have_been_released.md
similarity index 100%
rename from content/news/2006-10-20_I_can_see_the_light__digiKam-0.9.0-beta3_and_DigikamImagePlugins-0.9.0-beta3_have_been_released..md
rename to content/news/2006-10-20_I_can_see_the_light_digiKam-0.9.0-beta3_and_DigikamImagePlugins-0.9.0-beta3_have_been_released.md
diff --git a/content/news/2006-11-17_Digikam_website_updated___more_useful_informations_for_users__.md b/content/news/2006-11-17_Digikam_website_updated_more_useful_informations_for_users.md
similarity index 100%
rename from content/news/2006-11-17_Digikam_website_updated___more_useful_informations_for_users__.md
rename to content/news/2006-11-17_Digikam_website_updated_more_useful_informations_for_users.md
diff --git a/content/news/2006-11-21_digikam_and_DigikamImagePlugins_0.9.0_Release_Candidate_1_published_.md b/content/news/2006-11-21_digikam_and_DigikamImagePlugins_0.9.0_Release_Candidate_1_published.md
similarity index 100%
rename from content/news/2006-11-21_digikam_and_DigikamImagePlugins_0.9.0_Release_Candidate_1_published_.md
rename to content/news/2006-11-21_digikam_and_DigikamImagePlugins_0.9.0_Release_Candidate_1_published.md
diff --git a/content/news/2006-12-11_digiKam_and_digiKamPlugins_RC2_released__.md b/content/news/2006-12-11_digiKam_and_digiKamPlugins_RC2_released.md
similarity index 100%
rename from content/news/2006-12-11_digiKam_and_digiKamPlugins_RC2_released__.md
rename to content/news/2006-12-11_digiKam_and_digiKamPlugins_RC2_released.md
diff --git a/content/news/2006-12-18_It_s_a_Masterpiece__digiKam___digikamImagePlugins_0.9.0_major_release.md b/content/news/2006-12-18_It_s_a_Masterpiece_digiKam_digikamImagePlugins_0.9.0_major_release.md
similarity index 100%
rename from content/news/2006-12-18_It_s_a_Masterpiece__digiKam___digikamImagePlugins_0.9.0_major_release.md
rename to content/news/2006-12-18_It_s_a_Masterpiece_digiKam_digikamImagePlugins_0.9.0_major_release.md
diff --git a/content/news/2007-07-26_digiKam_splashscreens___call_to_photographers.md b/content/news/2007-07-26_digiKam_splashscreens_call_to_photographers.md
similarity index 100%
rename from content/news/2007-07-26_digiKam_splashscreens___call_to_photographers.md
rename to content/news/2007-07-26_digiKam_splashscreens_call_to_photographers.md
diff --git a/content/news/2007-09-24_digiKam_splashscreens_contest___and_the_winners_are.md b/content/news/2007-09-24_digiKam_splashscreens_contest_and_the_winners_are.md
similarity index 100%
rename from content/news/2007-09-24_digiKam_splashscreens_contest___and_the_winners_are.md
rename to content/news/2007-09-24_digiKam_splashscreens_contest_and_the_winners_are.md
diff --git a/content/news/2007-10-17_Renovating_our_foundations__new_database_schema.md b/content/news/2007-10-17_Renovating_our_foundations_new_database_schema.md
similarity index 100%
rename from content/news/2007-10-17_Renovating_our_foundations__new_database_schema.md
rename to content/news/2007-10-17_Renovating_our_foundations_new_database_schema.md
diff --git a/content/news/2007-11-21_digiKam_0.9.3-beta3_Release___doc_en_.md b/content/news/2007-11-21_digiKam_0.9.3-beta3_Release_doc_en.md
similarity index 100%
rename from content/news/2007-11-21_digiKam_0.9.3-beta3_Release___doc_en_.md
rename to content/news/2007-11-21_digiKam_0.9.3-beta3_Release_doc_en.md
diff --git a/content/news/2007-12-22_digiKam_0.9.3_release__final_.md b/content/news/2007-12-22_digiKam_0.9.3_release_final.md
similarity index 100%
rename from content/news/2007-12-22_digiKam_0.9.3_release__final_.md
rename to content/news/2007-12-22_digiKam_0.9.3_release_final.md
diff --git a/content/news/2007-12-30_digiKam_0.9.4_splashscreens___call_to_photographers.md b/content/news/2007-12-30_digiKam_0.9.4_splashscreens_call_to_photographers.md
similarity index 100%
rename from content/news/2007-12-30_digiKam_0.9.4_splashscreens___call_to_photographers.md
rename to content/news/2007-12-30_digiKam_0.9.4_splashscreens_call_to_photographers.md
diff --git a/content/news/2008-01-20_digiKam_has_a_new_Time-Line_view_.md b/content/news/2008-01-20_digiKam_has_a_new_Time-Line_view.md
similarity index 100%
rename from content/news/2008-01-20_digiKam_has_a_new_Time-Line_view_.md
rename to content/news/2008-01-20_digiKam_has_a_new_Time-Line_view.md
diff --git a/content/news/2008-02-18_Wanted__new_slogan__logo_and_website_design.md b/content/news/2008-02-18_Wanted_new_slogan_logo_and_website_design.md
similarity index 100%
rename from content/news/2008-02-18_Wanted__new_slogan__logo_and_website_design.md
rename to content/news/2008-02-18_Wanted_new_slogan_logo_and_website_design.md
diff --git a/content/news/2008-03-31_digiKam___Google_summer_of_code_-_call_for_students.md b/content/news/2008-03-31_digiKam_Google_summer_of_code_-_call_for_students.md
similarity index 100%
rename from content/news/2008-03-31_digiKam___Google_summer_of_code_-_call_for_students.md
rename to content/news/2008-03-31_digiKam_Google_summer_of_code_-_call_for_students.md
diff --git a/content/news/2008-05-13_digiKam_at_LGM_2008__a_great_event_.md b/content/news/2008-05-13_digiKam_at_LGM_2008_a_great_event.md
similarity index 100%
rename from content/news/2008-05-13_digiKam_at_LGM_2008__a_great_event_.md
rename to content/news/2008-05-13_digiKam_at_LGM_2008_a_great_event.md
diff --git a/content/news/2008-08-24_digiKam_Image_Editor_Usability_Improvements__screencast_.md b/content/news/2008-08-24_digiKam_Image_Editor_Usability_Improvements_screencast.md
similarity index 100%
rename from content/news/2008-08-24_digiKam_Image_Editor_Usability_Improvements__screencast_.md
rename to content/news/2008-08-24_digiKam_Image_Editor_Usability_Improvements_screencast.md
diff --git a/content/news/2008-09-24_digiKam_has_a_new_friend__LibRaw.md b/content/news/2008-09-24_digiKam_has_a_new_friend_LibRaw.md
similarity index 100%
rename from content/news/2008-09-24_digiKam_has_a_new_friend__LibRaw.md
rename to content/news/2008-09-24_digiKam_has_a_new_friend_LibRaw.md
diff --git a/content/news/2008-10-02_digiKam_event__KDE_Imaging_coding_sprint_planed.md b/content/news/2008-10-02_digiKam_event_KDE_Imaging_coding_sprint_planed.md
similarity index 100%
rename from content/news/2008-10-02_digiKam_event__KDE_Imaging_coding_sprint_planed.md
rename to content/news/2008-10-02_digiKam_event_KDE_Imaging_coding_sprint_planed.md
diff --git a/content/news/2008-10-09_digiKam_for_Microsoft_Windows__.md b/content/news/2008-10-09_digiKam_for_Microsoft_Windows.md
similarity index 100%
rename from content/news/2008-10-09_digiKam_for_Microsoft_Windows__.md
rename to content/news/2008-10-09_digiKam_for_Microsoft_Windows.md
diff --git a/content/news/2008-11-10_New_kipi-plugin__Automatically_remove_red-eyes__in_batch_mode_.md b/content/news/2008-11-10_New_kipi-plugin_Automatically_remove_red-eyes_in_batch_mode.md
similarity index 100%
rename from content/news/2008-11-10_New_kipi-plugin__Automatically_remove_red-eyes__in_batch_mode_.md
rename to content/news/2008-11-10_New_kipi-plugin_Automatically_remove_red-eyes_in_batch_mode.md
diff --git a/content/news/2009-03-29_New_0.11_Splash-screen__call_to_photographers__.md b/content/news/2009-03-29_New_0.11_Splash-screen_call_to_photographers.md
similarity index 100%
rename from content/news/2009-03-29_New_0.11_Splash-screen__call_to_photographers__.md
rename to content/news/2009-03-29_New_0.11_Splash-screen_call_to_photographers.md
diff --git a/content/news/2009-04-11_digiKam_and_Showfoto_0.11_splash-screen_contest___best_shots_selection.md b/content/news/2009-04-11_digiKam_and_Showfoto_0.11_splash-screen_contest_best_shots_selection.md
similarity index 100%
rename from content/news/2009-04-11_digiKam_and_Showfoto_0.11_splash-screen_contest___best_shots_selection.md
rename to content/news/2009-04-11_digiKam_and_Showfoto_0.11_splash-screen_contest_best_shots_selection.md
diff --git a/content/news/2009-05-06_New__auto-correction-mode__for_the_Free_Rotation_image_plugin.md b/content/news/2009-05-06_New_auto-correction-mode_for_the_Free_Rotation_image_plugin.md
similarity index 100%
rename from content/news/2009-05-06_New__auto-correction-mode__for_the_Free_Rotation_image_plugin.md
rename to content/news/2009-05-06_New_auto-correction-mode_for_the_Free_Rotation_image_plugin.md
diff --git a/content/news/2009-11-28_Notes_about__Modifiers__in_the_digiKam_rename_tool.md b/content/news/2009-11-28_Notes_about_Modifiers_in_the_digiKam_rename_tool.md
similarity index 100%
rename from content/news/2009-11-28_Notes_about__Modifiers__in_the_digiKam_rename_tool.md
rename to content/news/2009-11-28_Notes_about_Modifiers_in_the_digiKam_rename_tool.md
diff --git a/content/news/2009-12-21_Merry_Christmas___digiKam_1.0.0_is_there.md b/content/news/2009-12-21_Merry_Christmas_digiKam_1.0.0_is_there.md
similarity index 100%
rename from content/news/2009-12-21_Merry_Christmas___digiKam_1.0.0_is_there.md
rename to content/news/2009-12-21_Merry_Christmas_digiKam_1.0.0_is_there.md
diff --git a/content/news/2009-12-22_Merry_Christmas_Again___Kipi-plugins_1.0.0_is_there.md b/content/news/2009-12-22_Merry_Christmas_Again_Kipi-plugins_1.0.0_is_there.md
similarity index 100%
rename from content/news/2009-12-22_Merry_Christmas_Again___Kipi-plugins_1.0.0_is_there.md
rename to content/news/2009-12-22_Merry_Christmas_Again_Kipi-plugins_1.0.0_is_there.md
diff --git a/content/news/2009-12-27_digiKam_1.x_Splash-screens__call_to_photographers__.md b/content/news/2009-12-27_digiKam_1.x_Splash-screens_call_to_photographers.md
similarity index 100%
rename from content/news/2009-12-27_digiKam_1.x_Splash-screens__call_to_photographers__.md
rename to content/news/2009-12-27_digiKam_1.x_Splash-screens_call_to_photographers.md
diff --git a/content/news/2010-04-30_GSoC__Non-destructive_image_editing_for_digiKam.md b/content/news/2010-04-30_GSoC_Non-destructive_image_editing_for_digiKam.md
similarity index 100%
rename from content/news/2010-04-30_GSoC__Non-destructive_image_editing_for_digiKam.md
rename to content/news/2010-04-30_GSoC_Non-destructive_image_editing_for_digiKam.md
diff --git a/content/news/2010-05-11_GSoC__Reverse_Geocoding_and_Improved_Map_Search_project_for_digiKam.md b/content/news/2010-05-11_GSoC_Reverse_Geocoding_and_Improved_Map_Search_project_for_digiKam.md
similarity index 100%
rename from content/news/2010-05-11_GSoC__Reverse_Geocoding_and_Improved_Map_Search_project_for_digiKam.md
rename to content/news/2010-05-11_GSoC_Reverse_Geocoding_and_Improved_Map_Search_project_for_digiKam.md
diff --git a/content/news/2010-06-15_GSoC__update_on_digiKam_s_non-destructive_image_editing.md b/content/news/2010-06-15_GSoC_update_on_digiKam_s_non-destructive_image_editing.md
similarity index 100%
rename from content/news/2010-06-15_GSoC__update_on_digiKam_s_non-destructive_image_editing.md
rename to content/news/2010-06-15_GSoC_update_on_digiKam_s_non-destructive_image_editing.md
diff --git a/content/news/2010-06-17_GSoC__explaining_digiKam_s_non-destructive_editing_concept.md b/content/news/2010-06-17_GSoC_explaining_digiKam_s_non-destructive_editing_concept.md
similarity index 100%
rename from content/news/2010-06-17_GSoC__explaining_digiKam_s_non-destructive_editing_concept.md
rename to content/news/2010-06-17_GSoC_explaining_digiKam_s_non-destructive_editing_concept.md
diff --git a/content/news/2010-06-24_digiKam_GSoC_progress__libkface_is_almost_ready.md b/content/news/2010-06-24_digiKam_GSoC_progress_libkface_is_almost_ready.md
similarity index 100%
rename from content/news/2010-06-24_digiKam_GSoC_progress__libkface_is_almost_ready.md
rename to content/news/2010-06-24_digiKam_GSoC_progress_libkface_is_almost_ready.md
diff --git a/content/news/2010-07-11_GSoC_update__Reverse_Geotagging_widget_is_ready_.md b/content/news/2010-07-11_GSoC_update_Reverse_Geotagging_widget_is_ready.md
similarity index 100%
rename from content/news/2010-07-11_GSoC_update__Reverse_Geotagging_widget_is_ready_.md
rename to content/news/2010-07-11_GSoC_update_Reverse_Geotagging_widget_is_ready.md
diff --git a/content/news/2010-08-18_GSoC__How_is_digiKam_s_non-destructive_editing___This_time_with_pictures__.md b/content/news/2010-08-18_GSoC_How_is_digiKam_s_non-destructive_editing_This_time_with_pictures.md
similarity index 100%
rename from content/news/2010-08-18_GSoC__How_is_digiKam_s_non-destructive_editing___This_time_with_pictures__.md
rename to content/news/2010-08-18_GSoC_How_is_digiKam_s_non-destructive_editing_This_time_with_pictures.md
diff --git a/content/news/2011-01-13_digiKam_2.x_splash-screens__call_to_photographers__.md b/content/news/2011-01-13_digiKam_2.x_splash-screens_call_to_photographers.md
similarity index 100%
rename from content/news/2011-01-13_digiKam_2.x_splash-screens__call_to_photographers__.md
rename to content/news/2011-01-13_digiKam_2.x_splash-screens_call_to_photographers.md
diff --git a/content/news/2011-03-22_New_Features_in_digiKam_2.0__Color_Labels_and_Picks.md b/content/news/2011-03-22_New_Features_in_digiKam_2.0_Color_Labels_and_Picks.md
similarity index 100%
rename from content/news/2011-03-22_New_Features_in_digiKam_2.0__Color_Labels_and_Picks.md
rename to content/news/2011-03-22_New_Features_in_digiKam_2.0_Color_Labels_and_Picks.md
diff --git a/content/news/2011-03-24_New_Features_in_digiKam_2.0__Geolocation.md b/content/news/2011-03-24_New_Features_in_digiKam_2.0_Geolocation.md
similarity index 100%
rename from content/news/2011-03-24_New_Features_in_digiKam_2.0__Geolocation.md
rename to content/news/2011-03-24_New_Features_in_digiKam_2.0_Geolocation.md
diff --git a/content/news/2011-03-28_New_Features_in_digiKam_2.0__Versioning.md b/content/news/2011-03-28_New_Features_in_digiKam_2.0_Versioning.md
similarity index 100%
rename from content/news/2011-03-28_New_Features_in_digiKam_2.0__Versioning.md
rename to content/news/2011-03-28_New_Features_in_digiKam_2.0_Versioning.md
diff --git a/content/news/2011-04-11_New_Features_in_digiKam_2.0__Face_Recognition.md b/content/news/2011-04-11_New_Features_in_digiKam_2.0_Face_Recognition.md
similarity index 100%
rename from content/news/2011-04-11_New_Features_in_digiKam_2.0__Face_Recognition.md
rename to content/news/2011-04-11_New_Features_in_digiKam_2.0_Face_Recognition.md
diff --git a/content/news/2011-05-09_How_to_install_digiKam_2.0_beta_5_in_Ubuntu___Kubuntu_11.04.md b/content/news/2011-05-09_How_to_install_digiKam_2.0_beta_5_in_Ubuntu_Kubuntu_11.04.md
similarity index 100%
rename from content/news/2011-05-09_How_to_install_digiKam_2.0_beta_5_in_Ubuntu___Kubuntu_11.04.md
rename to content/news/2011-05-09_How_to_install_digiKam_2.0_beta_5_in_Ubuntu_Kubuntu_11.04.md
diff --git a/content/news/2011-05-12_New_Features_in_digiKam_2.0__XMP_Sidecar.md b/content/news/2011-05-12_New_Features_in_digiKam_2.0_XMP_Sidecar.md
similarity index 100%
rename from content/news/2011-05-12_New_Features_in_digiKam_2.0__XMP_Sidecar.md
rename to content/news/2011-05-12_New_Features_in_digiKam_2.0_XMP_Sidecar.md
diff --git a/content/news/2011-06-21_Submit_a_digiKam_Tip__Win_a_ZaReason_Teo_Pro_Netbook.md b/content/news/2011-06-21_Submit_a_digiKam_Tip_Win_a_ZaReason_Teo_Pro_Netbook.md
similarity index 100%
rename from content/news/2011-06-21_Submit_a_digiKam_Tip__Win_a_ZaReason_Teo_Pro_Netbook.md
rename to content/news/2011-06-21_Submit_a_digiKam_Tip_Win_a_ZaReason_Teo_Pro_Netbook.md
diff --git a/content/news/2011-08-03_Quick_Tip__Disable_Certain_File_Types_in_digiKam.md b/content/news/2011-08-03_Quick_Tip_Disable_Certain_File_Types_in_digiKam.md
similarity index 100%
rename from content/news/2011-08-03_Quick_Tip__Disable_Certain_File_Types_in_digiKam.md
rename to content/news/2011-08-03_Quick_Tip_Disable_Certain_File_Types_in_digiKam.md
diff --git a/content/news/2015-01-12_digiKam_Quick_Tip__Group_Photos_by_Format.md b/content/news/2015-01-12_digiKam_Quick_Tip_Group_Photos_by_Format.md
similarity index 100%
rename from content/news/2015-01-12_digiKam_Quick_Tip__Group_Photos_by_Format.md
rename to content/news/2015-01-12_digiKam_Quick_Tip_Group_Photos_by_Format.md
diff --git a/content/news/2015-01-23_digiKam_Quick_Tip__Transfer_Photos_from_digiKam_Directly_to_a_Mobile_Device.md b/content/news/2015-01-23_digiKam_Quick_Tip_Transfer_Photos_from_digiKam_Directly_to_a_Mobile_Device.md
similarity index 100%
rename from content/news/2015-01-23_digiKam_Quick_Tip__Transfer_Photos_from_digiKam_Directly_to_a_Mobile_Device.md
rename to content/news/2015-01-23_digiKam_Quick_Tip_Transfer_Photos_from_digiKam_Directly_to_a_Mobile_Device.md
diff --git a/content/news/2015-02-02_digiKam_Quick_Tip__Using_Album_Categories.md b/content/news/2015-02-02_digiKam_Quick_Tip_Using_Album_Categories.md
similarity index 100%
rename from content/news/2015-02-02_digiKam_Quick_Tip__Using_Album_Categories.md
rename to content/news/2015-02-02_digiKam_Quick_Tip_Using_Album_Categories.md
diff --git a/content/news/2016-01-30_digiKam_Explained__Chroma_Subsampling.md b/content/news/2016-01-30_digiKam_Explained_Chroma_Subsampling.md
similarity index 100%
rename from content/news/2016-01-30_digiKam_Explained__Chroma_Subsampling.md
rename to content/news/2016-01-30_digiKam_Explained_Chroma_Subsampling.md
diff --git a/content/news/2016-10-21_Spektrum__Preset_for_Modern_Architecture_Photography.md b/content/news/2016-10-21_Spektrum_Preset_for_Modern_Architecture_Photography.md
similarity index 100%
rename from content/news/2016-10-21_Spektrum__Preset_for_Modern_Architecture_Photography.md
rename to content/news/2016-10-21_Spektrum_Preset_for_Modern_Architecture_Photography.md
diff --git a/content/news/2017-03-14_digiKam_5.5.0_is_released.md b/content/news/2017-03-14_digiKam_5.5.0_is_released.md
index dea4a5b43..e8aaf74f5 100644
--- a/content/news/2017-03-14_digiKam_5.5.0_is_released.md
+++ b/content/news/2017-03-14_digiKam_5.5.0_is_released.md
@@ -1,148 +1,142 @@
---
date: "2017-03-14T09:24:00Z"
title: "digiKam 5.5.0 is released"
author: "digiKam"
description: "Dear digiKam fans and users, Following the 5th release 5.4.0 published in January 2017, the digiKam team is proud to announce the new release 5.5.0"
category: "news"
aliases: "/node/765"
---
<a href="https://www.flickr.com/photos/digikam/32554213634/in/dateposted-public/" title="digiKam-5.5.0"><img src="https://c1.staticflickr.com/3/2913/32554213634_aae6a043c1_c.jpg" width="800" height="225" alt="digiKam-5.5.0"></a>
<p>Dear digiKam fans and users,</p>
<p>
Following the <a href="https://www.digikam.org/node/764">5th release 5.4.0</a> published in January 2017, the digiKam team is proud to announce the new release 5.5.0 of digiKam Software Collection. As 5.4.0, this version introduces again several improvements in database interface.
</p>
<p>
This time, <b>Mario Frank</b> has significantly improved the threads management done in background to prevent an overload of the computer under intensive workload by batch processing of items. The maintenance now does not generate massive amounts of threads anymore. Instead, we use a queue based approach to level the load on the CPUs more appropriately. This should improve the re-activeness during maintenance.
</p>
<a href="https://www.flickr.com/photos/digikam/32584060853/in/dateposted-public/" title="digiKam-5.5.0-Similarity"><img src="https://c1.staticflickr.com/4/3949/32584060853_2fc6649a89_c.jpg" width="800" height="225" alt="digiKam-5.5.0-Similarity"></a>
<p>
He has also improved the similarity tool again by tunning the exactness of similarity recognition for external images dropped in fuzzy search. He also introduced a configurable lower bound for the minimum similarity in fuzzy and duplicates search as too low similarity values may make digiKam non-responsive. Also, the results of duplicates searches can now be restricted to the ones that are in the same album as the reference image or in another album. This feature is also usable in maintenance tool. Again, the reference image is more clearly identified by the description reference image in the image information in duplicates view.
</p>
<p>
Furthermore, he implemented a garbage collection for the digiKam databases. The application is now able to identify stale database objects (like deleted images, not used thumbnails and face identities) and to remove them. This garbage collection is a stage of the maintenance.
</p>
<p>
Cleaning the stale (deleted) images from database can also be configured as startup-job.
For SQLite, digiKam is now also able to shrink the database files. This is only done if the database files are not corrupted. For MySQL, the database shrinking support is currently deactivated as some necessary database commands cannot be used properly for the moment.
</p>
<a href="https://www.flickr.com/photos/digikam/33360372266/in/dateposted-public/" title="digiKam-5.5.0-garbagecol"><img src="https://c1.staticflickr.com/3/2853/33360372266_f87e0e40d7_c.jpg" width="800" height="225" alt="digiKam-5.5.0-garbagecol"></a>
<p>
A student named <b>Ahmed Fathi</b>, has implemented a few enhancements in the batch queue manager Watermark tool. It is now possible to set the size of watermarks, adjust margin sizes, customize the text font, apply rotation manually, and respect orientation of image automatically. He also fix some dysfunctions when a watermark is placed over the image in special conditions.
</p>
<a href="https://www.flickr.com/photos/digikam/32558229094/in/dateposted-public/" title="digiKam-5.5.0-watermark"><img src="https://c1.staticflickr.com/1/703/32558229094_3d7ec01d3a_c.jpg" width="800" height="225" alt="digiKam-5.5.0-watermark"></a>
<p>
Another contributor, <b>Jan Wolter</b>, has maintained, adapted, and finalized a patch since a very long time. This patch have been initially proposed for digiKam 4.x, and introducing a very important feature around the database: the ability to ignore some kind of directories while scanning collections. For example, NAS storage includes technical folders in collections used by the device, whose contents we don't want to include in database... for nothing. So, these new settings will be used while scanning collection to bypass these data and make the database registration process more efficient. Which kind of directories are to be ignored can be configured in the database section of the configuration.
</p>
<a href="https://www.flickr.com/photos/digikam/33243772952/in/dateposted-public/" title="digiKam-5.5.0-Setupdb"><img src="https://c1.staticflickr.com/3/2911/33243772952_acc8bb6de5_c.jpg" width="800" height="225" alt="digiKam-5.5.0-Setupdb"></a>
<p>
<b>Wolfgang Scheffner</b> continue to works on the human <a href="https://docs.kde.org/trunk5/en/extragear-graphics/digikam/index.html">digiKam handbook</a>. He has updated again the contents for your pleasure to discover the photo management application in details. This time he update the Geolocation sections, as Correlator, Map view, and GPS editor. He has also give serious feedback to developers in minds to simplify the graphical interface, or to fix settings layout to be more comprehensive by end users. <b>Simon Frei</b>, after some long talks with Wolfgang, implement all remarks and patched the geolocation correlator interface to improve the ergonomy.
</p>
<a href="https://www.flickr.com/photos/digikam/32557269024/in/dateposted-public/" title="digiKam-5.5.0-maps"><img src="https://c1.staticflickr.com/4/3726/32557269024_ae870b0466_c.jpg" width="800" height="225" alt="digiKam-5.5.0-maps"></a>
<p>
<b>Maik Qualmann</b> works… everywhere, in goal to kill a lot of small but important usability entries in bugs database. He spent a lot of time on improving code elsewhere in digiKam core for better readability for future students who will work with us while this summer. He manage report and users mailing list to ask if reports still valid with pre-release versions published as bundles, and kill redundant entries already reported in the past.
</p>
<p>
Face Management have also been improved a little bit about usability. It is now possible to remove face tags from people sidebar but preserve them in tags sidebar. Also, the recognized but unconfirmed faces are now visible both in the recognized face tags and also in a special tag called Unconfirmed. The list of proposed names have been improved too. For name assignment in people sidebar, you can now limit the recommendation list to face tags with a setup option. Finally, tags listed in the tags sidebar can now be marked as face tags via context menu if they are not already.
</p>
<a href="https://www.flickr.com/photos/digikam/32557797574/in/dateposted-public/" title="digiKam-5.5.0-facetags"><img src="https://c1.staticflickr.com/3/2856/32557797574_b987e8fa78_c.jpg" width="800" height="225" alt="digiKam-5.5.0-facetags"></a>
<p>
-This new digiKam version also includes latest <a href="”http://www.libraw.org/news/libraw-0-18-2”">libraw 0.18.2</a>, whose release coincided with the digiKam release schedule. This version of the raw decoder includes some new Raw camera supported and some fixes about Fuji and Sony camera decoding. The amount of RAW camera supported is about <b>931 models</b>.
+This new digiKam version also includes latest <a href="http://www.libraw.org/news/libraw-0-18-2">libraw 0.18.2</a>, whose release coincided with the digiKam release schedule. This version of the raw decoder includes some new Raw camera supported and some fixes about Fuji and Sony camera decoding. The amount of RAW camera supported is about <b>931 models</b>.
</p>
<a href="https://www.flickr.com/photos/digikam/32585023023/in/dateposted-public/" title="digiKam-5.5.0-Libraw"><img src="https://c1.staticflickr.com/4/3701/32585023023_b624cf0563_c.jpg" width="800" height="225" alt="digiKam-5.5.0-Libraw"></a>
<p>
For furher information, take a look at the list of more than <a href="https://bugs.kde.org/buglist.cgi?f1=cf_versionfixedin&amp;list_id=1427730&amp;o1=equals&amp;product=digikam&amp;product=kipiplugins&amp;query_format=advanced&amp;v1=5.5.0"> 100 issues closed</a> in Bugzilla.
</p>
<p>
digiKam software collection source code tarball, Linux 32/64 bits AppImage bundles, MacOS package, and Windows 32/64 bits installers can be downloaded from <a href="http://download.kde.org/stable/digikam/">this repository</a>
</p>
<p>Happy digiKaming!</p>
<div class="legacy-comments">
- <a id="comment-21391"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21391" class="active">Thank you!</a></h3> <div class="submitted">Submitted by DRB (not verified) on Tue, 2017-03-14 14:15.</div>
+ <div id="comment-21391" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21391" >}}' class="active">Thank you!</a>
+ <div class="submitted">Submitted by DRB (not verified) on Tue, 2017-03-14 14:15.</div>
<div class="content">
<p>Thank you to all the contributors and of course the devs which pull everything together and continue to drive the project forward. I am excited about all the database related improvements!</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21391">reply</a></li>
-</ul></div>
+
</div>
-<a id="comment-21394"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21394" class="active">Thank you</a></h3> <div class="submitted">Submitted by Jamou (not verified) on Wed, 2017-03-15 12:57.</div>
+<div id="comment-21394" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21394" >}}' class="active">Thank you</a>
+ <div class="submitted">Submitted by Jamou (not verified) on Wed, 2017-03-15 12:57.</div>
<div class="content">
<p>Hello together!! Thank you very very much for your great work!! Digikam helps me very much and I love it - and it's getting better and better!!</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21394">reply</a></li>
-</ul></div>
+
</div>
-<a id="comment-21397"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21397" class="active">Thanks</a></h3> <div class="submitted">Submitted by <a href="https://www.roehs.de" rel="nofollow">Malte</a> (not verified) on Wed, 2017-03-15 20:15.</div>
+<div id="comment-21397" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21397" >}}' class="active">Thanks</a>
+ <div class="submitted">Submitted by <a href="https://www.roehs.de" rel="nofollow">Malte</a> (not verified) on Wed, 2017-03-15 20:15.</div>
<div class="content">
<p>A big thanks for the hard work!!!<br>
You just made my day :)</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21397">reply</a></li>
-</ul></div>
+
</div>
-<a id="comment-21399"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21399" class="active">Danke schön!</a></h3> <div class="submitted">Submitted by Harry (not verified) on Wed, 2017-03-15 22:01.</div>
+<div id="comment-21399" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21399" >}}' class="active">Danke schön!</a>
+ <div class="submitted">Submitted by Harry (not verified) on Wed, 2017-03-15 22:01.</div>
<div class="content">
<p>THANK you and your contributers very much for this great peace of software! I use it for many years and it's really cool not to be forced to use all these A***E Software, but to have a really good working alternative.</p>
<p>Greatings from Berlin, Germany.</p>
<p>Harry</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21399">reply</a></li>
-</ul></div>
+
</div>
-<a id="comment-21400"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21400" class="active">digiKam handbook link bust.</a></h3> <div class="submitted">Submitted by Stephen Goodey (not verified) on Thu, 2017-03-16 10:11.</div>
+<div id="comment-21400" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21400" >}}' class="active">digiKam handbook link bust.</a>
+ <div class="submitted">Submitted by Stephen Goodey (not verified) on Thu, 2017-03-16 10:11.</div>
<div class="content">
<p>Hello,</p>
<p>Is it just me or is the digiKam handbook link above broken? I get page not found error.</p>
<p>To get it to work I have to strip off the leading https://www.digikam.org/node/" and the " from the end.</p>
<p>Regards, Steve.</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21400">reply</a></li>
-</ul></div>
+
</div>
-<div class="indented"><a id="comment-21401"></a>
- <div class="comment comment-published">
- <h3 class="title"><a href="/node/765#comment-21401" class="active">link fixed...</a></h3> <div class="submitted">Submitted by digiKam on Thu, 2017-03-16 12:32.</div>
+<div class="indented"><div id="comment-21401" class="comment comment-published">
+ <a href='{{< relref "news/2017-03-14_digiKam_5.5.0_is_released.md#comment-21401" >}}' class="active">link fixed...</a>
+ <div class="submitted">Submitted by digiKam on Thu, 2017-03-16 12:32.</div>
<div class="content">
<p>link fixed...</p>
</div>
- <div class="links">» <ul class="links"><li class="comment_reply first last"><a href="/comment/reply/765/21401">reply</a></li>
-</ul></div>
+
</div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/content/news/2017-04-30-new-digikam-static-site.md b/content/news/2017-04-30-new-digikam-static-site.md
new file mode 100644
index 000000000..62b9f7871
--- /dev/null
+++ b/content/news/2017-04-30-new-digikam-static-site.md
@@ -0,0 +1,34 @@
+---
+date: "2017-04-30T22:27:50"
+title: "The new digiKam web presence"
+author: "Mica Semrick"
+description: "digiKam gets a brand new static website."
+category: "news"
+---
+
+Notice something a bit different?
+
+So do we!
+
+The folks from the [PIXLS.US](https://pixls.us) community saw that digiKam needed an update to the old website (previously running on an older Drupal instance) for security reasons and they wanted to help out.
+So after several weeks of hard work, the digiKam team has deployed a new look-and-feel for the website that is easier to navigate and mobile-friendly.
+Don't worry, all the content from the old website has been preserved so all the old links should be fine. You can find the links to this content in the footer of the new site.
+
+There are still things in the new design that need a bit of polish, but none of these things are important enough to keep the new site from our users.
+
+Here is a summary of changes:
+
+- replaced Drupal 6 with [Hugo](https://gohugo.io)
+- posts and pages are now authored in markdown
+- website source and content stored in git and hosted on KDE's infrastructure
+- continuous integration builds and deploys the site on new commits
+
+You can find out more about the new site on the [meta](/documentation/meta/) and [writing](/documentation/meta/writing/) pages.
+
+You also open issues for the website using [digiKam bugzilla ]() or by sending email to the [mailing list][].
+
+We hope you enjoy the new site!
+
+
+[digiKam bugzilla ]: https://bugs.kde.org/buglist.cgi?component=Website&product=digikam&resolution=---
+[mailing list]: https://mail.kde.org/mailman/listinfo/digikam-users
diff --git a/content/news/_index.md b/content/news/_index.md
new file mode 100644
index 000000000..74cbd6f7e
--- /dev/null
+++ b/content/news/_index.md
@@ -0,0 +1,9 @@
+---
+date: "1999-04-09T15:16:45-06:00"
+title: "News"
+author: "digiKam"
+description: "The latest news from the digiKam project"
+category: "news"
+aliases: "/news"
+menu: "navbar"
+---
diff --git a/content/recipes_book.md b/content/recipes_book.md
new file mode 100644
index 000000000..8c6e5f24b
--- /dev/null
+++ b/content/recipes_book.md
@@ -0,0 +1,47 @@
+---
+date: "2017-03-21"
+title: "digiKam Recipes Book"
+author: "Dmitri Popov"
+description: "Buy the digiKam recipes book to learn cool tricks!"
+category: "documentation"
+aliases: "digikamrecipes"
+---
+
+digiKam is an immensely powerful photo management application, and mastering it requires time and effort. This book can help you to learn the ropes in the most efficient manner. Instead of explaining every digiKam’s feature, the book offers a collection of techniques that can help you to get the most out of this versatile tool.
+
+<div class="row columns text-center">
+ <h3>Buy now!</h3>
+</div>
+<div class="row text-center download-icons">
+
+ <div class="large-4 medium-4 small-12 columns">
+ <a href="http://www.amazon.com/dp/B004774LJS"
+ <i class="fa fa-amazon fa-5x"></i>
+ <h4 class="index-header">Kindle</h4>
+ </a>
+ </div>
+ <div class="large-4 medium-4 small-12 columns">
+ <a href="https://play.google.com/store/books/details/Dmitri_Popov_digiKam_Recipes?id=T83DBAAAQBAJ">
+ <i class="fa fa-play-circle fa-5x"></i>
+ <h4 class="index-header">Google Play</h4>
+ </a>
+ </div>
+ <div class="large-4 medium-4 small-12 columns">
+ <a href="https://gumroad.com/l/digikamrecipes">
+ <i class="fa fa-credit-card-alt fa-5x"></i>
+ <h4 class="index-header">Gumroad</h4>
+ </a>
+ </div>
+</div>
+
+![digiKam Recipes in Cool Reader](https://scribblesandsnaps.files.wordpress.com/2015/03/digikamrecipes-page.png "digikamrecipescoolreader")
+
+Five facts about the digiKam Recipes ebook:
+
+1. This is the first and only ebook about digiKam.
+2. The ebook was written in close cooperation with the digiKam developers.
+3. 50% of all ebook sales go to the digiKam project.
+4. The ebook is DRM-free, so you can read it using any ebook reader or software that supports the EPUB or MOBI format.
+5. You’ll receive all future editions of the ebook free of charge.
+
+The ebook released under the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 Unported](http://creativecommons.org/licenses/by-nc-sa/4.0/) license, so you are free to share the ebook and modify it as long as you share your modifications.
diff --git a/content/recipies_book.md b/content/recipies_book.md
deleted file mode 100644
index a4fdfb928..000000000
--- a/content/recipies_book.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-date: "2017-03-21"
-title: "digiKam Recipes Book"
-author: "Dmitri Popov"
-description: "Buy the digiKam recipes book to learn cool tricks!"
-category: "merchandise"
-aliases: "/node/543"
----
-
-<p>
-digiKam is an immensely powerful photo management application, and mastering it requires time and effort. This book can help you to learn the ropes in the most efficient manner. Instead of explaining every digiKam’s feature, the book offers a collection of techniques that can help you to get the most out of this versatile tool.</p>
-<p><img title="digikamrecipescoolreader" src="https://scribblesandsnaps.files.wordpress.com/2015/03/digikamrecipes-page.png" "="" alt="digiKam Recipes in Cool Reader" width="300" height="500"></p>
-<p>Five facts about the digiKam Recipes ebook:</p>
-<ol>
-<li>This is the first and only ebook about digiKam.</li>
-<li>The ebook was written in close cooperation with the digiKam developers.</li>
-<li>50% of all ebook sales go to the digiKam project.</li>
-<li>The ebook is DRM-free, so you can read it using any ebook reader or software that supports the EPUB or MOBI format.</li>
-<li>You’ll receive all future editions of the ebook free of charge.</li>
-</ol>
-
-<p>
-The ebook can be purchased through the <a href="http://www.amazon.com/dp/B004774LJS">Amazon Kindle Store</a>, <a href="https://play.google.com/store/books/details/Dmitri_Popov_digiKam_Recipes?id=T83DBAAAQBAJ">Google Play Store</a>,&nbsp;and <a href="https://gumroad.com/l/digikamrecipes">Gumroad</a>.
-</p>
-<p>
-The ebook released under the <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 Unported</a> license, so you are free to share the ebook and modify it as long as you share your modifications.
-</p>
-<p>Best,<br><br>
-Dmitri</p>
-</div>
diff --git a/content/support/support.md b/content/support/_index.md
similarity index 86%
rename from content/support/support.md
rename to content/support/_index.md
index 97124fd54..a13c63f63 100644
--- a/content/support/support.md
+++ b/content/support/_index.md
@@ -1,81 +1,81 @@
---
date: "2017-03-21"
title: "Support"
author: "digiKam"
description: "Support resources for digiKam"
category: "support"
aliases: "/support"
menu: "navbar"
---
-<div class="content"><h5>Getting Help</h5>
+<div class="content"><h3>Getting Help</h3>
<p></p>
<p>
New to digikam ? Needs some help ?
</p>
<p>
-<strong>First</strong>, read carefully the <a href="/?q=docs">digikam documentation</a>.
+<strong>First</strong>, read carefully the <a href="/documentation/">digikam documentation</a>.
<br> It's actively maintained and you should find most of what you need there.
</p>
<p>
-<strong>Then</strong>, if you still have questions, you should have a look in the <a href="/?q=faq/digikam">FAQ (Frequently Asked Questions)</a>.
+<strong>Then</strong>, if you still have questions, you should have a look in the <a href="/documentation/FAQ/">FAQ (Frequently Asked Questions)</a>.
</p>
<p>
-If you can't find an answer to your question, feel free to <a href="/?q=support#mailinglists">subscribe</a> to the digikam mailing list to get support.
+If you can't find an answer to your question, feel free to <a href="/support/#mailinglists">subscribe</a> to the digikam mailing list to get support.
<br>
If you think it's a bug, you can report it to bugzilla, see below.
</p>
<p></p>
-<a name="bugsreport"><h5>Reporting bugs and wishes</h5></a>
+<h3>Reporting bugs and wishes</h3>
<a href="http://www.flickr.com/photos/digikam/3378415145/" title="digikambugzilla by cauliergilles, on Flickr"><img src="http://farm4.static.flickr.com/3558/3378415145_9c2d19f395.jpg" alt="digikambugzilla" width="500" height="333"></a>
<p>
Please use the bug tracking system for all bug-reports and new feature wishlists. Take a care to use the right component to post a new file at the right place. You can checkout the current bug-reports and wishlists at these urls:</p>
<ul>
<li><a href="https://bugs.kde.org/component-report.cgi?product=digikam">digiKam bugs and wishes</a></li>
<li><a href="https://bugs.kde.org/component-report.cgi?product=kipiplugins">Kipi-plugins bugs and wishes</a></li>
</ul>
<p>digiKam use external libraries to manage metadata (<a href="http://www.exiv2.org">Exiv2</a>) and digital camera (<a href="http://www.gphoto.org">GPhoto</a>). Please use links listed below to reports specifics bugs relevant of these libraries:</p>
<ul>
<li><a href="http://dev.robotbattle.com/bugs/my_view_page.php">Exiv2 library bugs and wishes</a></li>
<li><a href="http://sourceforge.net/tracker/?group_id=8874&amp;atid=108874">GPhoto library bugs and wishes</a></li>
</ul>
<p></p>
-<a name="mailinglists"><h5>Mailing list Subscribtion</h5></a>
+<h3>Mailing list Subscribtion</h3>
<ul>
<li>digikam-users<br>
<a href="https://mail.kde.org/mailman/listinfo/digikam-users">Mailing list subscription</a> for all questions, comments, suggestions, requests, and bug reports by the <b>digiKam users</b>. <a href="http://mail.kde.org/pipermail/digikam-users/">(Archives)</a>
<br>
with Nabble <a href="http://digikam.1695700.n4.nabble.com/digikam-users-f1735189.html">web interface and search engine</a>
</li>
<br>
<li>digikam-devel<br>
<a href="https://mail.kde.org/mailman/listinfo/digikam-devel">Mailing list subscription</a> for <b>digiKam developers</b> thread. <a href="http://mail.kde.org/pipermail/digikam-devel/">(Archives)</a>
<br>
with Nabble <a href="http://digikam.1695700.n4.nabble.com/digikam-devel-f1695701.html">web interface and search engine</a>
</li>
<br>
<li>kde-imaging<br>
<a href="https://mail.kde.org/mailman/listinfo/kde-imaging">Mailing list subscription</a> for all questions, comments, suggestions, requests, and bug reports by the <b>Kipi-plugins</b> users. <a href="http://mail.kde.org/pipermail/kde-imaging/">(Archives)</a>
</li>
</ul></div>
diff --git a/content/support/contact.md b/content/support/contact.md
index 57bbdbc49..415e4282a 100644
--- a/content/support/contact.md
+++ b/content/support/contact.md
@@ -1,26 +1,26 @@
---
date: "2017-03-21"
title: "Contact"
author: "digiKam"
description: "Various contact methods for digiKam"
category: "support"
aliases: "/contact"
---
<p>Please use our <a href="?q=support#bugsreport">Bugzilla links</a> for bugs report and wishes.</p>
<p>Please use our <a href="?q=support#mailinglists">mailing lists</a> for support.</p>
-<h1 class="margintop">IRC CHANNEL</h1>
+<h3 class="margintop">IRC CHANNEL</h3>
<p>You can find us on the <b>irc.freenode.net</b> network, channels <a href="irc://irc.freenode.net/#digikam" class="external" title="irc://irc.freenode.net/#digikam" rel="nofollow">#digikam</a>
<br>
You can use <a href="http://webchat.freenode.net/?channels=digikam">this url</a> to be connected on #digikam IRC channel using a web interface.
</p>
-<h1 class="margintop">TEAM</h1>
+<h3 class="margintop">TEAM</h3>
<p>See the list of current <a href="https://cgit.kde.org/digikam.git/tree/AUTHORS">digiKam team members</a>.</p>
<p>See the list of current <a href="https://cgit.kde.org/kipi-plugins.git/tree/AUTHORS">Kipi-plugins team members</a>.</p>
</div>
diff --git a/i18n/en.yaml b/i18n/en.yaml
index 2c8e5c92c..ec6601c94 100644
--- a/i18n/en.yaml
+++ b/i18n/en.yaml
@@ -1,47 +1,116 @@
- id: about
translation: "About"
- id: home
translation: "Home"
- id: recentPosts
translation: "Recent Posts"
- id: readMore
translation: "Read more →"
- id: translations
translation: "Translations"
- id: share
translation: "Share"
- id: paginatorPrevious
translation: "Previous page"
- id: paginatorNext
translation: "Next page"
- id: cookieMessage
translation: "This website uses cookies."
- id: cookieLink
translation: "Learn more."
- id: cookieDismiss
translation: "Got it!"
- id: backToTop
translation: "Back to top"
+- id: menu
+ translation: "Menu"
+
- id: links
translation: "Links"
+- id: download
+ translation: "Download"
+
+- id: news
+ translation: "News"
+
+- id: latestNews
+ translation: "Latest News"
+
+- id: siteDescription
+ translation: "Professional Photo Management with the Power of Open Source"
+
+- id: screenshots
+ translation: "Screenshots"
+
- id: recipesBookSidebar
translation: "digiKam Recipes Book"
- id: donateTitleSidbar
- translation: "Make a Donation"
+ translation: "Donate"
- id: donateBodySidebar
- translation: "Make your donation to support the digiKam project!"
+ translation: "Donate to support the digiKam project"
+
+- id: features
+ translation: "Features"
+
+- id: largeCollections
+ translation: "Large Collections"
+
+- id: largeCollectionsBody
+ translation: "digiKam can easily handle libraries containing more than 100,000 images"
+
+- id: efficientEditing
+ translation: "Efficient Editing Workflow"
+
+- id: efficientEditingBody
+ translation: "Process raw files, edit JPEGs, publish photos to social media"
+
+- id: openMetadata
+ translation: "Work with Metadata"
+
+- id: openMetadataBody
+ translation: "Harness the power of XMP. View and edit metadata"
+
+- id: freeSoftware
+ translation: "Free and Open Source"
+
+- id: freeSoftwareBody
+ translation: "digiKam is an open-source application that respects your freedom"
+
+- id: by
+ translation: "by"
+
+- id: followUs
+ translation: "Follow us"
+
+- id: documentation
+ translation: "Documentation"
+
+- id: donate
+ translation: "Donate"
+
+- id: support
+ translation: "Support"
+
+- id: copyright
+ translation: "Except where otherwise noted, content on this site is licensed under a [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by-sa/4.0/)."
+
+- id: relatedPages
+ translation: "Related pages"
+
+- id: contribute
+ translation: "Contribute"
diff --git a/public/.gitkeep b/public/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/static/files/digikam-header.png b/static/files/digikam-header.png
new file mode 100644
index 000000000..7969c27f3
Binary files /dev/null and b/static/files/digikam-header.png differ
diff --git a/static/files/digikam_favicon_0.ico b/static/files/digikam_favicon_0.ico
new file mode 100644
index 000000000..e66f6467e
Binary files /dev/null and b/static/files/digikam_favicon_0.ico differ
diff --git a/static/files/images/timeline1.png b/static/files/images/timeline1.png
new file mode 100644
index 000000000..fdc27fc4b
Binary files /dev/null and b/static/files/images/timeline1.png differ
diff --git a/static/files/images/timeline1.preview.png b/static/files/images/timeline1.preview.png
new file mode 100644
index 000000000..3399ef681
Binary files /dev/null and b/static/files/images/timeline1.preview.png differ
diff --git a/static/files/images/timeline2.png b/static/files/images/timeline2.png
new file mode 100644
index 000000000..93e29e3b3
Binary files /dev/null and b/static/files/images/timeline2.png differ
diff --git a/static/files/images/timelineselection.png b/static/files/images/timelineselection.png
new file mode 100644
index 000000000..63048af26
Binary files /dev/null and b/static/files/images/timelineselection.png differ
diff --git a/static/files/images/timelineselection.preview.png b/static/files/images/timelineselection.preview.png
new file mode 100644
index 000000000..fb5e8c00b
Binary files /dev/null and b/static/files/images/timelineselection.preview.png differ
diff --git a/static/files/images/timelineselectionmode.png b/static/files/images/timelineselectionmode.png
new file mode 100644
index 000000000..16f5d77ad
Binary files /dev/null and b/static/files/images/timelineselectionmode.png differ
diff --git a/static/files/tuxaward.png b/static/files/tuxaward.png
new file mode 100644
index 000000000..2e48f7130
Binary files /dev/null and b/static/files/tuxaward.png differ
diff --git a/static/img/digikam-recipes.png b/static/img/digikam-recipes.png
new file mode 100644
index 000000000..659904579
Binary files /dev/null and b/static/img/digikam-recipes.png differ
diff --git a/static/img/Digikam_Oxygen.svg b/static/img/digikam_oxygen.svg
similarity index 100%
rename from static/img/Digikam_Oxygen.svg
rename to static/img/digikam_oxygen.svg
diff --git a/static/img/mockup-digikam.svg b/static/img/mockup-digikam.svg
new file mode 100644
index 000000000..35a221598
--- /dev/null
+++ b/static/img/mockup-digikam.svg
@@ -0,0 +1,2335 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1366"
+ height="1650"
+ viewBox="0 0 1366 1650"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="digikam.org-mockup.svg"
+ inkscape:export-filename="F:\Personal\digikam\mockup-front-A.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient4131">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop4133" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop4135" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4123">
+ <stop
+ offset="0"
+ style="stop-color:#666666;stop-opacity:1"
+ id="stop4125" />
+ <stop
+ offset="1"
+ style="stop-color:#666666;stop-opacity:0"
+ id="stop4127" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4117">
+ <stop
+ offset="0"
+ style="stop-color:#333333;stop-opacity:1"
+ id="stop4119" />
+ <stop
+ offset="1"
+ style="stop-color:#666666;stop-opacity:1"
+ id="stop4121" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4754">
+ <stop
+ offset="0"
+ style="stop-color:#eeeeee;stop-opacity:1"
+ id="stop4756" />
+ <stop
+ offset="1"
+ style="stop-color:#eeeeee;stop-opacity:1"
+ id="stop4758" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4690">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop4692" />
+ <stop
+ offset="0.66062498"
+ style="stop-color:#666666;stop-opacity:1"
+ id="stop4694" />
+ <stop
+ offset="0.92584866"
+ style="stop-color:#727272;stop-opacity:0.49803922"
+ id="stop4696" />
+ <stop
+ offset="1"
+ style="stop-color:#7f7f7f;stop-opacity:0"
+ id="stop4698" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3984">
+ <stop
+ offset="0"
+ style="stop-color:#eeeeee;stop-opacity:1"
+ id="stop3986" />
+ <stop
+ offset="0.79753619"
+ style="stop-color:#909090;stop-opacity:0.49803922"
+ id="stop3990" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop3988" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4928">
+ <stop
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop4930" />
+ <stop
+ offset="0.5"
+ style="stop-color:#48ccff;stop-opacity:0.41525424"
+ id="stop4934" />
+ <stop
+ offset="1"
+ style="stop-color:#009aff;stop-opacity:0"
+ id="stop4932" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9024">
+ <stop
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop9026" />
+ <stop
+ offset="1"
+ style="stop-color:#0073ff;stop-opacity:0.15384616"
+ id="stop4885" />
+ </linearGradient>
+ <filter
+ id="filter17486"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur17488"
+ stdDeviation="1.4771469" />
+ </filter>
+ <filter
+ id="filter17476"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur17478"
+ stdDeviation="1.474452" />
+ </filter>
+ <linearGradient
+ gradientTransform="matrix(1.3988216,0,0,1.9392105,-268.4227,164.3812)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4131"
+ id="linearGradient11391"
+ y2="153.52692"
+ x2="610.13214"
+ y1="-109.11688"
+ x1="610.13214" />
+ <linearGradient
+ gradientTransform="matrix(1.631772,0,0,1.9931881,-480.92371,-922.4867)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4131"
+ id="linearGradient11393"
+ y2="653.24158"
+ x2="569.72601"
+ y1="786.05847"
+ x1="569.72601" />
+ <filter
+ id="filter8376"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ stdDeviation="1.4823768"
+ id="feGaussianBlur8378" />
+ </filter>
+ <filter
+ id="filter5500"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ stdDeviation="2.9297737"
+ id="feGaussianBlur5502" />
+ </filter>
+ <filter
+ id="filter5533"
+ color-interpolation-filters="sRGB"
+ height="1.2542373"
+ width="1.2542373"
+ y="-0.12711865"
+ x="-0.12711865">
+ <feGaussianBlur
+ stdDeviation="15.516582"
+ id="feGaussianBlur5535" />
+ </filter>
+ <filter
+ id="filter4070"
+ color-interpolation-filters="sRGB"
+ height="1.4794236"
+ width="1.4805779"
+ y="-0.23971184"
+ x="-0.24028896">
+ <feGaussianBlur
+ id="feGaussianBlur4072"
+ stdDeviation="7.1289414" />
+ </filter>
+ <filter
+ id="filter4302"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4304"
+ stdDeviation="2.9298719" />
+ </filter>
+ <path
+ style="opacity:0;fill:none;stroke:#000000;stroke-width:2.11432505;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path17494"
+ d="M 58.766529,227.85394 C 28.728559,165.0158 55.318347,89.724827 118.15649,59.686857 180.99464,29.648883 256.2856,56.238682 286.32357,119.07682 316.36154,181.91496 289.77175,257.20593 226.9336,287.2439 164.09546,317.28187 88.804499,290.69208 58.766529,227.85394 z" />
+ <filter
+ id="filter4464"
+ color-interpolation-filters="sRGB"
+ height="1.4889292"
+ width="1.4700352"
+ y="-0.24446458"
+ x="-0.23501758">
+ <feGaussianBlur
+ id="feGaussianBlur4466"
+ stdDeviation="7.0642417" />
+ </filter>
+ <filter
+ id="filter4024"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4026"
+ stdDeviation="6.206817" />
+ </filter>
+ <filter
+ id="filter4032"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4034"
+ stdDeviation="1.5209858" />
+ </filter>
+ <filter
+ id="filter4744"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4746"
+ stdDeviation="4.563948" />
+ </filter>
+ <filter
+ id="filter4776"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4778"
+ stdDeviation="31.536758" />
+ </filter>
+ <radialGradient
+ gradientTransform="matrix(1.5511994,1.40757,-1.4042828,1.5475773,372.31605,-1706.4584)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4690"
+ id="radialGradient3389"
+ fy="490.71738"
+ fx="442.44681"
+ r="146.97212"
+ cy="490.71738"
+ cx="442.44681" />
+ <linearGradient
+ gradientTransform="translate(-5.3521414e-5,-701.08602)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4123"
+ id="linearGradient3391"
+ y2="261.45749"
+ x2="490.04541"
+ y1="606.19092"
+ x1="260.04541" />
+ <linearGradient
+ gradientTransform="matrix(0.98630917,0,0,0.98630917,6.9422465,-697.38452)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4117"
+ id="linearGradient3393"
+ y2="261.33392"
+ x2="489.80899"
+ y1="610.85254"
+ x1="256.61639" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4131"
+ id="linearGradient3395"
+ y2="626.22144"
+ x2="439.17551"
+ y1="426.05655"
+ x1="439.17551" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4131"
+ id="linearGradient3397"
+ y2="485.6666"
+ x2="595.31976"
+ y1="485.6666"
+ x1="287.55356" />
+ <radialGradient
+ gradientTransform="matrix(1.8730774,-0.00823329,0.00703119,1.5995985,-319.1347,-919.82753)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4131"
+ id="radialGradient3401"
+ fy="367.60211"
+ fx="364.79916"
+ r="234.3694"
+ cy="367.60211"
+ cx="364.79916" />
+ <radialGradient
+ gradientTransform="matrix(-0.0087968,-1.0890551,1.0330304,-0.00846057,-6.4006475,359.88481)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4754"
+ id="radialGradient3403"
+ fy="172.70627"
+ fx="170.51024"
+ r="139.81509"
+ cy="172.70627"
+ cx="170.51024" />
+ <radialGradient
+ gradientTransform="translate(-2016,-6.0090468e-5)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient3984"
+ id="radialGradient3405"
+ fy="365.58987"
+ fx="365.47919"
+ r="152.09857"
+ cy="365.58987"
+ cx="365.47919" />
+ <radialGradient
+ gradientTransform="matrix(-1.2182718,-1.119175,4.3407488,-4.7250981,-1258.655,2699.3715)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4928"
+ id="radialGradient3407"
+ fy="545.92981"
+ fx="521.16754"
+ r="146.47212"
+ cy="545.92981"
+ cx="521.16754" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient9024"
+ id="radialGradient3409"
+ fy="566.04169"
+ fx="539.27808"
+ r="146.47212"
+ cy="566.04169"
+ cx="539.27808" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3988216,0,0,1.9392105,-268.4227,164.3812)"
+ x1="610.13214"
+ y1="-109.11688"
+ x2="610.13214"
+ y2="153.52692" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.631772,0,0,1.9931881,-480.92371,-922.4867)"
+ x1="569.72601"
+ y1="786.05847"
+ x2="569.72601"
+ y2="653.24158" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3988216,0,0,1.9392105,-268.4227,164.3812)"
+ x1="610.13214"
+ y1="-109.11688"
+ x2="610.13214"
+ y2="153.52692" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5791"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.631772,0,0,1.9931881,-480.92371,-922.4867)"
+ x1="569.72601"
+ y1="786.05847"
+ x2="569.72601"
+ y2="653.24158" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4690"
+ id="radialGradient5793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5511994,1.40757,-1.4042828,1.5475773,372.31605,-1706.4584)"
+ cx="442.44681"
+ cy="490.71738"
+ fx="442.44681"
+ fy="490.71738"
+ r="146.97212" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4123"
+ id="linearGradient5795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-5.3521414e-5,-701.08602)"
+ x1="260.04541"
+ y1="606.19092"
+ x2="490.04541"
+ y2="261.45749" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4117"
+ id="linearGradient5797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98630917,0,0,0.98630917,6.9422465,-697.38452)"
+ x1="256.61639"
+ y1="610.85254"
+ x2="489.80899"
+ y2="261.33392" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5799"
+ gradientUnits="userSpaceOnUse"
+ x1="439.17551"
+ y1="426.05655"
+ x2="439.17551"
+ y2="626.22144" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5801"
+ gradientUnits="userSpaceOnUse"
+ x1="287.55356"
+ y1="485.6666"
+ x2="595.31976"
+ y2="485.6666" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="radialGradient5803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8730774,-0.00823329,0.00703119,1.5995985,-319.1347,-919.82753)"
+ cx="364.79916"
+ cy="367.60211"
+ fx="364.79916"
+ fy="367.60211"
+ r="234.3694" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4754"
+ id="radialGradient5805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.0087968,-1.0890551,1.0330304,-0.00846057,-6.4006475,359.88481)"
+ cx="170.51024"
+ cy="172.70627"
+ fx="170.51024"
+ fy="172.70627"
+ r="139.81509" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3984"
+ id="radialGradient5807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-2016,-6.0090471e-5)"
+ cx="365.47919"
+ cy="365.58987"
+ fx="365.47919"
+ fy="365.58987"
+ r="152.09857" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4928"
+ id="radialGradient5809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.2182718,-1.119175,4.3407488,-4.7250981,-1258.655,2699.3715)"
+ cx="521.16754"
+ cy="545.92981"
+ fx="521.16754"
+ fy="545.92981"
+ r="146.47212" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9024"
+ id="radialGradient5811"
+ gradientUnits="userSpaceOnUse"
+ cx="539.27808"
+ cy="566.04169"
+ fx="539.27808"
+ fy="566.04169"
+ r="146.47212" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3988216,0,0,1.9392105,-268.4227,164.3812)"
+ x1="610.13214"
+ y1="-109.11688"
+ x2="610.13214"
+ y2="153.52692" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4131"
+ id="linearGradient5815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.631772,0,0,1.9931881,-480.92371,-922.4867)"
+ x1="569.72601"
+ y1="786.05847"
+ x2="569.72601"
+ y2="653.24158" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.24748737"
+ inkscape:cx="380.50815"
+ inkscape:cy="-892.56108"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4780"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1137"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-page="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="false">
+ <sodipodi:guide
+ position="1366,882"
+ orientation="0,1"
+ id="guide4140"
+ inkscape:label="768px"
+ inkscape:color="rgb(255,0,9)" />
+ <sodipodi:guide
+ position="0,1650"
+ orientation="1,0"
+ id="guide4144" />
+ <sodipodi:guide
+ position="455.33333,1977.8787"
+ orientation="1,0"
+ id="guide4196"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="910.66667,1942.8571"
+ orientation="1,0"
+ id="guide4198"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="683,1851.4286"
+ orientation="1,0"
+ id="guide4408"
+ inkscape:label=""
+ inkscape:color="rgb(0,243,255)" />
+ <sodipodi:guide
+ position="341.5,1988.5714"
+ orientation="1,0"
+ id="guide4430"
+ inkscape:label=""
+ inkscape:color="rgb(0,243,255)" />
+ <sodipodi:guide
+ position="1024.5,1945.7143"
+ orientation="1,0"
+ id="guide4432"
+ inkscape:label=""
+ inkscape:color="rgb(0,243,255)" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Background">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4457"
+ width="1366"
+ height="1650"
+ x="0"
+ y="0"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,597.63784)"
+ style="display:inline">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#2c3e50;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4142"
+ width="1366"
+ height="256"
+ x="0"
+ y="-527.63782"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.8627451;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4146"
+ width="1366"
+ height="70"
+ x="0"
+ y="-597.63782"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="747.14288"
+ y="-554.20032"
+ id="text4148"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4150"
+ x="747.14288"
+ y="-554.20032">About</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4152"
+ y="-554.20032"
+ x="864.5318"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ y="-554.20032"
+ x="864.5318"
+ id="tspan4154"
+ sodipodi:role="line">Contribute</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="1029.6234"
+ y="-554.20032"
+ id="text4156"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ x="1029.6234"
+ y="-554.20032"
+ id="tspan4160">Documentation</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4164"
+ y="-554.20032"
+ x="1245.8783"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ id="tspan4166"
+ y="-554.20032"
+ x="1245.8783"
+ sodipodi:role="line">Support</tspan></text>
+ <rect
+ y="-217.63782"
+ x="121.42857"
+ height="638.85712"
+ width="1123.1428"
+ id="rect4170"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#404040;fill-opacity:0.47058824;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4172"
+ width="1123.1428"
+ height="20"
+ x="121.42857"
+ y="-217.63782"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff1717;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4174"
+ cx="1231.6418"
+ cy="-207.63782"
+ r="7.5"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ r="7.5"
+ cy="-207.63782"
+ cx="1210.3024"
+ id="circle4176"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8bff8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="circle4178"
+ cx="1188.9629"
+ cy="-207.63782"
+ r="7.5"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="653.04761"
+ y="-203.48865"
+ id="text4180"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4182"
+ x="653.04761"
+ y="-203.48865">digiKam</tspan></text>
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4186"
+ width="248.8571"
+ height="598.85712"
+ x="121.42857"
+ y="-197.63782"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-197.63782"
+ x="995.71429"
+ height="598.85712"
+ width="248.8571"
+ id="rect4188"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="401.2193"
+ x="121.42857"
+ height="20"
+ width="1123.1428"
+ id="rect4190"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4194"
+ cx="295.48083"
+ cy="-399.63782"
+ r="100"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:90px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="450.27963"
+ y="-431.25891"
+ id="text4200"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4202"
+ x="450.27963"
+ y="-431.25891">digiKam</tspan></text>
+ <g
+ id="g4212"
+ transform="matrix(0.83366407,0,0,0.83366407,75.460527,-47.902203)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <text
+ sodipodi:linespacing="125%"
+ id="text4204"
+ y="-386.69836"
+ x="452.40366"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#9e9e9e;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="-386.69836"
+ x="452.40366"
+ id="tspan4206"
+ sodipodi:role="line">Professional Photo Management</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#9e9e9e;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="452.40366"
+ y="-347.85071"
+ id="text4208"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4210"
+ x="452.40366"
+ y="-347.85071">with the Power of Open Source</tspan></text>
+ </g>
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4452"
+ width="417.14285"
+ height="48"
+ x="74.888138"
+ y="552.36212"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="552.36212"
+ x="757.88812"
+ height="48"
+ width="417.14285"
+ id="rect4454"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g4493"
+ transform="translate(10.3571,62.036018)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="-503.1329"
+ x="900.30957"
+ height="82.918159"
+ width="245.71428"
+ id="rect4459"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3498db;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.38578796px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="955.62476"
+ y="-462.4791"
+ id="text4461"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4463"
+ x="955.62476"
+ y="-462.4791">Download</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4467"
+ y="-434.27036"
+ x="959.19586"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.64332962px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="-434.27036"
+ x="959.19586"
+ id="tspan4469"
+ sodipodi:role="line">Ver 5.5.0</tspan></text>
+ <g
+ transform="matrix(0.82367376,0,0,0.82367376,163.1929,-83.617505)"
+ id="g4484">
+ <path
+ sodipodi:type="star"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ecf0f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4480"
+ sodipodi:sides="3"
+ sodipodi:cx="935.54242"
+ sodipodi:cy="-448.90948"
+ sodipodi:r1="20.714287"
+ sodipodi:r2="10.357143"
+ sodipodi:arg1="1.5707963"
+ sodipodi:arg2="2.6179939"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 935.54242,-428.1952 -17.9391,-31.07143 35.8782,0 z"
+ inkscape:transform-center-y="5.1785714" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ecf0f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4482"
+ width="15.357142"
+ height="35.714287"
+ x="928.03571"
+ y="-489.7807"
+ ry="0" />
+ </g>
+ </g>
+ <g
+ id="g4566"
+ transform="matrix(0.87414396,0,0,1,-1164.8692,1217.5616)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4534"
+ width="494.4194"
+ height="18"
+ x="1418.2531"
+ y="-573.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4536"
+ width="529.94952"
+ height="18"
+ x="1418.2531"
+ y="-537.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4538"
+ width="609.9953"
+ height="18"
+ x="1418.2531"
+ y="-501.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4540"
+ width="529.10474"
+ height="18"
+ x="1418.2531"
+ y="-465.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4542"
+ width="432.5903"
+ height="18"
+ x="1418.2531"
+ y="-429.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4544"
+ width="587.9212"
+ height="18"
+ x="1418.2531"
+ y="-393.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4546"
+ width="429.90085"
+ height="18"
+ x="1418.2531"
+ y="-357.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4548"
+ width="534.92249"
+ height="18"
+ x="1418.2531"
+ y="-321.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ </g>
+ <g
+ transform="matrix(0.87414396,0,0,-1,-481.86919,340.0002)"
+ id="g4576"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-573.7807"
+ x="1418.2531"
+ height="18"
+ width="494.4194"
+ id="rect4578"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-537.7807"
+ x="1418.2531"
+ height="18"
+ width="529.94952"
+ id="rect4580"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-501.7807"
+ x="1418.2531"
+ height="18"
+ width="609.9953"
+ id="rect4582"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-465.7807"
+ x="1418.2531"
+ height="18"
+ width="529.10474"
+ id="rect4584"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-429.7807"
+ x="1418.2531"
+ height="18"
+ width="432.5903"
+ id="rect4586"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-393.7807"
+ x="1418.2531"
+ height="18"
+ width="587.9212"
+ id="rect4588"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-357.7807"
+ x="1418.2531"
+ height="18"
+ width="429.90085"
+ id="rect4590"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-321.7807"
+ x="1418.2531"
+ height="18"
+ width="534.92249"
+ id="rect4592"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ <g
+ id="g4780"
+ transform="translate(-1554.1428,2119.1775)">
+ <rect
+ y="-595.495"
+ x="1554.1428"
+ height="2048"
+ width="1366"
+ id="rect4457-7"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-525.495"
+ x="1554.1428"
+ height="128"
+ width="1366"
+ id="rect4142-7"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#2c3e50;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-595.495"
+ x="1554.1428"
+ height="70"
+ width="1366"
+ id="rect4146-0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.8627451;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4148-9"
+ y="-552.0575"
+ x="2301.2856"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ y="-552.0575"
+ x="2301.2856"
+ id="tspan4150-5"
+ sodipodi:role="line">About</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="2418.6746"
+ y="-552.0575"
+ id="text4152-6"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4154-7"
+ x="2418.6746"
+ y="-552.0575">Contribute</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4156-2"
+ y="-552.0575"
+ x="2583.7664"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ id="tspan4160-6"
+ y="-552.0575"
+ x="2583.7664"
+ sodipodi:role="line">Documentation</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="2800.0212"
+ y="-552.0575"
+ id="text4164-7"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ x="2800.0212"
+ y="-552.0575"
+ id="tspan4166-0">Support</tspan></text>
+ <g
+ id="g4840"
+ transform="translate(0,256.57137)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="23.362179"
+ x="1675.5714"
+ height="638.85712"
+ width="1123.1428"
+ id="rect4170-4"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#404040;fill-opacity:0.47058824;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4172-8"
+ width="1123.1428"
+ height="20"
+ x="1675.5714"
+ y="23.362236"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff1717;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4174-3"
+ cx="2785.7847"
+ cy="33.362236"
+ r="7.5"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ r="7.5"
+ cy="33.362236"
+ cx="2764.4453"
+ id="circle4176-7"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8bff8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="circle4178-9"
+ cx="2743.1057"
+ cy="33.362236"
+ r="7.5"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="2207.1904"
+ y="37.511406"
+ id="text4180-7"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4182-4"
+ x="2207.1904"
+ y="37.511406">digiKam</tspan></text>
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4186-0"
+ width="248.8571"
+ height="598.85712"
+ x="1675.5714"
+ y="43.362236"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="43.362236"
+ x="2549.8572"
+ height="598.85712"
+ width="248.8571"
+ id="rect4188-1"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="642.2193"
+ x="1675.5714"
+ height="20"
+ width="1123.1428"
+ id="rect4190-1"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#8b8b8b;fill-opacity:0.47003156;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <circle
+ r="100"
+ cy="-461.495"
+ cx="1687.9993"
+ id="path4194-9"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4200-5"
+ y="-438.11612"
+ x="1819.9463"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:90px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ y="-438.11612"
+ x="1819.9463"
+ id="tspan4202-7"
+ sodipodi:role="line">digiKam</tspan></text>
+ <g
+ transform="matrix(0.83366407,0,0,0.83366407,1811.032,-148.26516)"
+ id="g4212-2"
+ style="display:inline"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#9e9e9e;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="452.40366"
+ y="-386.69836"
+ id="text4204-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4206-6"
+ x="452.40366"
+ y="-386.69836">Professional Photo Management</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4208-2"
+ y="-347.85071"
+ x="452.40366"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#9e9e9e;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="-347.85071"
+ x="452.40366"
+ id="tspan4210-0"
+ sodipodi:role="line">with the Power of Open Source</tspan></text>
+ </g>
+ <g
+ transform="translate(1740.2143,0.17882919)"
+ id="g4493-9"
+ style="display:inline"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3498db;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4459-3"
+ width="245.71428"
+ height="82.918159"
+ x="900.30957"
+ y="-503.1329" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text4461-7"
+ y="-462.4791"
+ x="955.62476"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.38578796px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="-462.4791"
+ x="955.62476"
+ id="tspan4463-8"
+ sodipodi:role="line">Download</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.64332962px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="959.19586"
+ y="-434.27036"
+ id="text4467-2"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4469-5"
+ x="959.19586"
+ y="-434.27036">Ver 5.5.0</tspan></text>
+ <g
+ id="g4484-1"
+ transform="matrix(0.82367376,0,0,0.82367376,163.1929,-83.617505)">
+ <path
+ inkscape:transform-center-y="5.1785714"
+ d="m 935.54242,-428.1952 -17.9391,-31.07143 35.8782,0 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="2.6179939"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="10.357143"
+ sodipodi:r1="20.714287"
+ sodipodi:cy="-448.90948"
+ sodipodi:cx="935.54242"
+ sodipodi:sides="3"
+ id="path4480-2"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ecf0f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ sodipodi:type="star" />
+ <rect
+ ry="0"
+ y="-489.7807"
+ x="928.03571"
+ height="35.714287"
+ width="15.357142"
+ id="rect4482-2"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ecf0f1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ </g>
+ <g
+ id="g4880"
+ transform="translate(0,292.57137)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4452-0"
+ width="417.14285"
+ height="48"
+ x="1629.031"
+ y="757.36212" />
+ <g
+ style="display:inline"
+ id="g4566-2"
+ transform="matrix(0.87414396,0,0,1,389.27366,1422.5615)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4534-4"
+ width="494.4194"
+ height="18"
+ x="1418.2531"
+ y="-573.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4536-5"
+ width="529.94952"
+ height="18"
+ x="1418.2531"
+ y="-537.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4538-9"
+ width="609.9953"
+ height="18"
+ x="1418.2531"
+ y="-501.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4540-7"
+ width="529.10474"
+ height="18"
+ x="1418.2531"
+ y="-465.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4542-2"
+ width="432.5903"
+ height="18"
+ x="1418.2531"
+ y="-429.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4544-1"
+ width="587.9212"
+ height="18"
+ x="1418.2531"
+ y="-393.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4546-7"
+ width="429.90085"
+ height="18"
+ x="1418.2531"
+ y="-357.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="use4548-3"
+ width="534.92249"
+ height="18"
+ x="1418.2531"
+ y="-321.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ </g>
+ </g>
+ <g
+ id="g4576-7"
+ transform="matrix(0.87414396,0,0,-1,1072.2737,837.57155)"
+ style="display:inline"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4578-9"
+ width="494.4194"
+ height="18"
+ x="1418.2531"
+ y="-573.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4580-4"
+ width="529.94952"
+ height="18"
+ x="1418.2531"
+ y="-537.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4582-4"
+ width="609.9953"
+ height="18"
+ x="1418.2531"
+ y="-501.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4584-3"
+ width="529.10474"
+ height="18"
+ x="1418.2531"
+ y="-465.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4586-2"
+ width="432.5903"
+ height="18"
+ x="1418.2531"
+ y="-429.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4588-8"
+ width="587.9212"
+ height="18"
+ x="1418.2531"
+ y="-393.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4590-7"
+ width="429.90085"
+ height="18"
+ x="1418.2531"
+ y="-357.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4592-8"
+ width="534.92249"
+ height="18"
+ x="1418.2531"
+ y="-321.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4452-0-3"
+ width="477.20154"
+ height="48"
+ x="1418.2531"
+ y="212.36194"
+ transform="scale(1,-1)" />
+ </g>
+ <g
+ id="g4892"
+ transform="translate(-5.2635402e-5,-1008.3495)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="757.36212"
+ x="1629.031"
+ height="48"
+ width="417.14285"
+ id="rect4894"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <g
+ transform="matrix(0.87414396,0,0,1,389.27366,1422.5615)"
+ id="g4896"
+ style="display:inline">
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-573.7807"
+ x="1418.2531"
+ height="18"
+ width="494.4194"
+ id="rect4898"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-537.7807"
+ x="1418.2531"
+ height="18"
+ width="529.94952"
+ id="rect4900"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-501.7807"
+ x="1418.2531"
+ height="18"
+ width="609.9953"
+ id="rect4902"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-465.7807"
+ x="1418.2531"
+ height="18"
+ width="529.10474"
+ id="rect4904"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-429.7807"
+ x="1418.2531"
+ height="18"
+ width="432.5903"
+ id="rect4906"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-393.7807"
+ x="1418.2531"
+ height="18"
+ width="587.9212"
+ id="rect4908"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-357.7807"
+ x="1418.2531"
+ height="18"
+ width="429.90085"
+ id="rect4910"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ inkscape:tile-y0="23.857139"
+ inkscape:tile-x0="1428.5509"
+ y="-321.7807"
+ x="1418.2531"
+ height="18"
+ width="534.92249"
+ id="rect4912"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ </g>
+ <g
+ transform="translate(682.99995,-1008.3495)"
+ id="g4914"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9e9e9e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4916"
+ width="417.14285"
+ height="48"
+ x="1629.031"
+ y="757.36212" />
+ <g
+ style="display:inline"
+ id="g4918"
+ transform="matrix(0.87414396,0,0,1,389.27366,1422.5615)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4920"
+ width="494.4194"
+ height="18"
+ x="1418.2531"
+ y="-573.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4922"
+ width="529.94952"
+ height="18"
+ x="1418.2531"
+ y="-537.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4924"
+ width="609.9953"
+ height="18"
+ x="1418.2531"
+ y="-501.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4926"
+ width="529.10474"
+ height="18"
+ x="1418.2531"
+ y="-465.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4928"
+ width="432.5903"
+ height="18"
+ x="1418.2531"
+ y="-429.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4930"
+ width="587.9212"
+ height="18"
+ x="1418.2531"
+ y="-393.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4932"
+ width="429.90085"
+ height="18"
+ x="1418.2531"
+ y="-357.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.98000004;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#919191;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4934"
+ width="534.92249"
+ height="18"
+ x="1418.2531"
+ y="-321.7807"
+ inkscape:tile-x0="1428.5509"
+ inkscape:tile-y0="23.857139" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:44.22132111px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ecf0f1;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ x="2111.0862"
+ y="-310.81192"
+ id="text4951"
+ sodipodi:linespacing="125%"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan4953"
+ x="2111.0862"
+ y="-310.81192">Latest News</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text4955"
+ y="230.90236"
+ x="2111.1616"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:44.22132111px;line-height:125%;font-family:'Open Sans';-inkscape-font-specification:'Open Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ecf0f1;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ y="230.90236"
+ x="2111.1616"
+ id="tspan4957"
+ sodipodi:role="line">Screenshots</tspan></text>
+ <g
+ id="g5598"
+ transform="matrix(1.7318742,0,0,1.7318742,1739.3735,-2630.0589)"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ style="display:none"
+ id="g4127"
+ transform="translate(-2962.3214,-1228.257)">
+ <image
+ id="image4129"
+ height="1258.2858"
+ width="1677.7142"
+ y="-208"
+ x="-211.14287"
+ xlink:href="/media/250gb/valokuvat/Syksy 02-09-05 Kuusamo, inkavaaralla luonnonpuistossa suomen komeimman kosken kuvaamista/img_5766_4.jpg" />
+ </g>
+ <g
+ style="display:none"
+ id="g4131"
+ transform="translate(-2962.3214,-1228.257)">
+ <rect
+ style="fill:url(#linearGradient5813);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4133"
+ y="-51.137177"
+ x="-418.20316"
+ height="1026.4628"
+ width="1933.0156" />
+ <rect
+ style="fill:url(#linearGradient5815);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4135"
+ y="-107.54571"
+ x="-655.64758"
+ height="1055.0342"
+ width="2254.9272" />
+ </g>
+ <g
+ style="display:none"
+ id="g3101"
+ transform="translate(-1823.0062,-1228.257)">
+ <image
+ id="image3103"
+ height="1258.2858"
+ width="1677.7142"
+ y="-208"
+ x="-211.14287"
+ xlink:href="/media/250gb/valokuvat/Syksy 02-09-05 Kuusamo, inkavaaralla luonnonpuistossa suomen komeimman kosken kuvaamista/img_5766_4.jpg" />
+ </g>
+ <g
+ style="display:none"
+ id="g3105"
+ transform="translate(-1823.0062,-1228.257)">
+ <rect
+ style="fill:url(#linearGradient11391);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect3107"
+ y="-51.137177"
+ x="-418.20316"
+ height="1026.4628"
+ width="1933.0156" />
+ <rect
+ style="fill:url(#linearGradient11393);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect3109"
+ y="-107.54571"
+ x="-655.64758"
+ height="1055.0342"
+ width="2254.9272" />
+ </g>
+ <g
+ id="g3337"
+ transform="matrix(0.17702801,0,0,0.17702801,-1.2289776,123.45658)">
+ <g
+ style="display:inline"
+ id="g11319"
+ transform="translate(3768.8073,99.541863)" />
+ <g
+ style="display:inline"
+ id="layer3"
+ transform="translate(3768.8073,99.541863)" />
+ <g
+ style="display:inline"
+ id="layer4"
+ transform="translate(3768.8073,99.541863)" />
+ <g
+ style="display:inline"
+ id="layer2-4"
+ transform="translate(3768.8073,99.541863)" />
+ <g
+ style="display:inline"
+ id="g9289"
+ transform="translate(4608.2348,99.541863)" />
+ <g
+ style="display:inline"
+ id="g9291"
+ transform="translate(4608.2348,99.541863)" />
+ <g
+ style="display:inline"
+ id="g9293"
+ transform="translate(4608.2348,99.541863)" />
+ <g
+ style="display:inline"
+ id="g9295"
+ transform="translate(4608.2348,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3093"
+ transform="translate(4908.1225,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3095"
+ transform="translate(4908.1225,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3097"
+ transform="translate(4908.1225,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3099"
+ transform="translate(4908.1225,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3169"
+ transform="translate(5747.55,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3171"
+ transform="translate(5747.55,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3173"
+ transform="translate(5747.55,99.541863)" />
+ <g
+ style="display:inline"
+ id="g3175"
+ transform="translate(5747.55,99.541863)" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4776)"
+ id="path4578"
+ transform="matrix(0.33116928,0,0,0.33116928,-629.02269,-824.89443)"
+ d="m 4056.7725,1480.6669 a 1050.5586,1050.5586 0 1 1 -2101.1172,0 1050.5586,1050.5586 0 1 1 2101.1172,0 z"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:0;fill:#333333;fill-opacity:1;stroke:none"
+ id="rect4580-44"
+ y="-697.38446"
+ x="6.9422774"
+ height="723.04944"
+ width="723.04944" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.08973837;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4582"
+ d="m 673.51085,-334.81533 a 306.08845,306.08845 0 0 1 -612.176904,0 306.08845,306.08845 0 1 1 612.176904,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient3389);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.08973837;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4584"
+ d="m 673.51085,-334.81533 a 306.08845,306.08845 0 0 1 -612.176904,0 306.08845,306.08845 0 1 1 612.176904,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:10.0401516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4586"
+ d="m 673.67195,-334.81523 a 306.2496,306.2496 0 0 1 -612.499204,0 306.2496,306.2496 0 1 1 612.499204,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#linearGradient3391);fill-opacity:1;stroke:url(#linearGradient3393);stroke-width:36.49343872;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4588"
+ d="m 690.28725,-334.81523 a 322.86489,322.86489 0 1 1 -645.729704,0 322.86489,322.86489 0 1 1 645.729704,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2.96754265;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4590"
+ d="m 707.26555,-334.13443 a 339.73617,339.73636 0 0 1 -679.472304,0 339.73617,339.73636 0 1 1 679.472304,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:url(#linearGradient3395);stroke-width:1.946154;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter17476)"
+ id="path4592"
+ transform="matrix(2.0906495,0,0,2.0906495,-555.46701,-1350.1739)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.52320676;fill:none;stroke:url(#linearGradient3397);stroke-width:2.45571566;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter17486)"
+ id="path4594"
+ transform="matrix(0.21152298,-1.6111762,1.6111762,0.21152298,-508.4461,273.68727)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.81569743;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5500)"
+ id="path4596"
+ transform="matrix(0.16823377,-1.2814402,1.2814402,0.16823377,-327.66736,147.18127)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4598"
+ d="m 395.33505,-537.76413 a 202.70094,202.70094 0 1 1 -52.7704,401.9526 202.70094,202.70094 0 1 1 52.7704,-401.9526 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4600"
+ d="m 400.06755,-573.81213 a 239.05822,239.05822 0 1 1 -62.2354,474.048603 239.05822,239.05822 0 1 1 62.2354,-474.048603 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4602"
+ d="m 398.87215,-564.70663 a 229.87453,229.87453 0 0 1 -59.8446,455.8375 229.87453,229.87453 0 0 1 59.8446,-455.8375 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4604"
+ d="m 397.67675,-555.60113 a 220.69087,220.69087 0 1 1 -57.4538,437.6264 220.69087,220.69087 0 1 1 57.4538,-437.6264 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154621;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4606"
+ d="m 396.48135,-546.49563 a 211.50721,211.50721 0 1 1 -55.0629,419.4153 211.50721,211.50721 0 1 1 55.0629,-419.4153 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path4608"
+ d="m 421.63815,-332.81153 a 55.925048,53.642394 0 1 1 -111.85,0 55.925048,53.642394 0 1 1 111.85,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.03299999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4024)"
+ id="path4610"
+ transform="matrix(0.98630917,0,0,0.98630917,1995.3415,-697.38452)"
+ d="m -1649.4202,212.41945 c -85.6538,0 -155.1851,69.53116 -155.185,155.18505 0,85.65389 69.5312,155.15581 155.185,155.15583 85.6539,0 155.1559,-69.50195 155.1559,-155.15583 0,-85.65389 -69.502,-155.18506 -155.1559,-155.18505 z m 2.6887,109.88621 33.3166,17.18434 11.164,35.82992 -17.2136,33.34579 -35.8007,11.13474 -33.3458,-17.18433 -11.1347,-35.82992 17.1844,-33.34579 35.8298,-11.13475 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient3401);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4612"
+ d="m 597.90765,-334.81523 a 231.16069,231.16069 0 1 1 -462.3213,0 231.16069,231.16069 0 1 1 462.3213,0 z"
+ inkscape:connector-curvature="0" />
+ <text
+ style="font-style:normal;font-weight:normal;font-size:10px;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none"
+ xml:space="preserve"
+ id="text4614"
+ transform="matrix(2.0804093,0,0,2.0660635,4.7303465,-692.91272)"><textPath
+ style="font-size:20px;font-family:'Liberation Sans';fill:#000000;fill-opacity:1"
+ id="textPath4616"
+ xlink:href="#path17494">1:1,8 f=50mm <tspan
+ style="font-weight:normal;-inkscape-font-specification:'Liberation Sans';fill:#000000;fill-opacity:1"
+ id="tspan4618">digiKam</tspan> powered by Open Source www.digikam.org</textPath></text>
+ <text
+ style="font-style:normal;font-weight:normal;font-size:10px;font-family:'Bitstream Vera Sans';fill:url(#radialGradient3403);fill-opacity:1;stroke:none"
+ xml:space="preserve"
+ id="text4620"
+ transform="matrix(2.0804093,0,0,2.0660635,8.7303465,-694.91272)"><textPath
+ style="font-size:20px;font-family:'Liberation Sans';fill:url(#radialGradient3403);fill-opacity:1"
+ id="textPath4622"
+ xlink:href="#path17494">1:1,8 f=50mm <tspan
+ style="font-weight:normal;-inkscape-font-specification:'Liberation Sans';fill:url(#radialGradient3403);fill-opacity:1"
+ id="tspan4624">digiKam</tspan> powered by Open Source www.digikam.org</textPath></text>
+ <path
+ style="opacity:0.82165605;fill:none;stroke:#000000;stroke-width:9.67517281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8376)"
+ id="path4626"
+ transform="matrix(1.0194228,0,0,1.0194228,-82.588154,-829.91483)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient3405);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4032)"
+ id="path4628"
+ transform="matrix(0.98630917,0,0,0.98630917,1995.3415,-697.38452)"
+ d="m -1650.5066,213.49129 c -83.9581,0 -152.113,68.15468 -152.1128,152.11292 0,50.3445 24.5241,94.98024 62.2488,122.66431 l 81.2701,-72.36106 -28.2168,-13.75032 -112.4661,-9.4247 -0.9454,-4.55479 110.8906,9.22417 -10.2841,-29.8783 -74.9106,-88.31716 2.2918,-3.52352 74.2517,86.65567 13.693,-28.33139 8.9377,-118.13817 4.2397,-0.40105 -8.4221,115.90374 32.17,-11.0862 0.2866,0.14324 85.4144,-80.48994 c -25.3374,-18.39614 -54.07,-26.44745 -88.3365,-26.44745 z m 92.4171,29.5952 -84.4791,79.23286 25.8902,14.06039 116.1931,4.01107 c -6.1335,-38.3839 -28.5375,-75.05806 -57.6042,-97.30432 z m -56.0073,98.19684 9.1383,31.62574 77.6893,81.49929 c 19.0245,-25.39267 28.847,-54.65287 28.847,-88.80415 0,-6.718 -0.4434,-13.33456 -1.2892,-19.82338 l -114.3854,-4.4975 z m 7.1054,36.35016 -12.2904,27.50289 -8.1356,110.80466 c 39.6252,-6.04635 73.6613,-25.97455 97.0268,-56.40776 l -76.6008,-81.89979 z m -17.0171,28.99251 -29.7637,10.82837 -82.903,73.56422 c 25.0994,18.26418 52.7753,26.66988 86.1686,26.66989 6.3136,0 12.5372,-0.39737 18.649,-1.14586 l 7.8491,-109.91662 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4744)"
+ id="path4630"
+ transform="matrix(0.98525245,-0.04564416,0.04564416,0.98525245,-9.3585535,-680.31622)"
+ d="m 365.49344,213.49129 c -83.95817,0 -152.11301,68.15468 -152.11282,152.11292 0,50.3445 24.52406,94.98024 62.2488,122.66431 l 81.27007,-72.36106 -28.21675,-13.75032 -112.46616,-9.4247 -0.94539,-4.55479 110.89065,9.22417 -10.28413,-29.8783 -74.91056,-88.31716 2.29172,-3.52352 74.25173,86.65567 13.69303,-28.33139 8.93771,-118.13817 4.23968,-0.40105 -8.42207,115.90374 32.16997,-11.0862 0.28656,0.14324 85.41442,-80.48994 C 428.49246,221.5426 399.75988,213.49129 365.49344,213.49129 Z m 92.4171,29.5952 -84.47913,79.23286 25.89021,14.06039 116.19304,4.01107 c -6.13346,-38.3839 -28.53741,-75.05806 -57.60412,-97.30432 z m -56.00735,98.19684 9.13828,31.62574 77.68931,81.49929 c 19.02449,-25.39267 28.84698,-54.65287 28.84698,-88.80415 0,-6.718 -0.4434,-13.33456 -1.28914,-19.82338 l -114.38543,-4.4975 z m 7.10543,36.35016 -12.2904,27.50289 -8.1356,110.80466 c 39.62521,-6.04635 73.66129,-25.97455 97.02675,-56.40776 l -76.60075,-81.89979 z m -17.01712,28.99251 -29.76366,10.82837 -82.90307,73.56422 c 25.09947,18.26418 52.77529,26.66988 86.16867,26.66989 6.31351,0 12.53718,-0.39737 18.64892,-1.14586 L 391.9915,406.626 Z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.59235666;fill:url(#radialGradient3407);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4632"
+ d="m 383.07925,-579.51423 a 242.3102,242.3102 0 0 1 -28.2588,483.795803 242.3102,242.3102 0 1 1 28.2588,-483.795803 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient3409);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5533)"
+ id="path4634"
+ transform="matrix(-0.08488441,1.4532338,-1.4532338,-0.08488441,1112.2081,-937.90143)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.92258618;fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4070)"
+ id="path4636"
+ transform="matrix(1.8070963,0,0,1.8070963,-84.993754,-1195.1861)"
+ d="m 234.75946,546.40981 -20.08087,-24.48662 -23.92543,17.17385 17.08283,-26.66483 -23.72666,-17.44742 30.63864,8.00685 9.26154,-27.95694 1.85289,31.61333 29.45061,0.16908 -29.49349,11.53126 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4464)"
+ id="path4638"
+ transform="matrix(0.88557018,1.5752342,-1.5752342,0.88557018,1047.6481,-1189.8698)"
+ d="m 234.75946,546.40981 -17.72902,-21.30507 -20.15014,19.03145 9.58622,-26.00632 -26.55678,-7.9348 27.31524,-4.70125 -6.40665,-26.96625 17.72902,21.30507 20.15014,-19.03145 -9.58622,26.00631 26.55678,7.93481 -27.31524,4.70125 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.92258618;fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4070)"
+ id="path4640"
+ transform="matrix(0.84058578,-0.65778649,0.65778649,0.84058578,-131.54315,-635.85442)"
+ d="m 234.75946,546.40981 -17.69334,-21.89945 -20.18582,19.62583 10.11881,-26.27261 -27.08937,-7.66851 27.81215,-4.37316 -6.90356,-27.29434 17.69334,21.89945 20.18582,-19.62583 -10.11881,26.27261 27.08937,7.66851 -27.81215,4.37316 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:4.59425783;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4302)"
+ id="path4642"
+ transform="matrix(0.21285796,-1.6213435,1.6213435,0.21285796,-512.44588,275.55467)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:4.59425783;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4302)"
+ id="path4644"
+ transform="matrix(0.21285796,-1.6213435,1.6213435,0.21285796,-512.44588,275.55467)"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.8111141,0,0,1.8111141,1572.7049,-577.82846)"
+ id="g5661"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ transform="translate(-2962.3214,-1228.257)"
+ id="g5663"
+ style="display:none">
+ <image
+ xlink:href="/media/250gb/valokuvat/Syksy 02-09-05 Kuusamo, inkavaaralla luonnonpuistossa suomen komeimman kosken kuvaamista/img_5766_4.jpg"
+ x="-211.14287"
+ y="-208"
+ width="1677.7142"
+ height="1258.2858"
+ id="image5665" />
+ </g>
+ <g
+ transform="translate(-2962.3214,-1228.257)"
+ id="g5667"
+ style="display:none">
+ <rect
+ width="1933.0156"
+ height="1026.4628"
+ x="-418.20316"
+ y="-51.137177"
+ id="rect5669"
+ style="fill:url(#linearGradient5785);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <rect
+ width="2254.9272"
+ height="1055.0342"
+ x="-655.64758"
+ y="-107.54571"
+ id="rect5671"
+ style="fill:url(#linearGradient5787);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ </g>
+ <g
+ transform="translate(-1823.0062,-1228.257)"
+ id="g5673"
+ style="display:none">
+ <image
+ xlink:href="/media/250gb/valokuvat/Syksy 02-09-05 Kuusamo, inkavaaralla luonnonpuistossa suomen komeimman kosken kuvaamista/img_5766_4.jpg"
+ x="-211.14287"
+ y="-208"
+ width="1677.7142"
+ height="1258.2858"
+ id="image5675" />
+ </g>
+ <g
+ transform="translate(-1823.0062,-1228.257)"
+ id="g5677"
+ style="display:none">
+ <rect
+ width="1933.0156"
+ height="1026.4628"
+ x="-418.20316"
+ y="-51.137177"
+ id="rect5679"
+ style="fill:url(#linearGradient5789);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <rect
+ width="2254.9272"
+ height="1055.0342"
+ x="-655.64758"
+ y="-107.54571"
+ id="rect5681"
+ style="fill:url(#linearGradient5791);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ </g>
+ <g
+ transform="matrix(0.17702801,0,0,0.17702801,-1.2289776,123.45658)"
+ id="g5683">
+ <g
+ transform="translate(3768.8073,99.541863)"
+ id="g5685"
+ style="display:inline" />
+ <g
+ transform="translate(3768.8073,99.541863)"
+ id="g5687"
+ style="display:inline" />
+ <g
+ transform="translate(3768.8073,99.541863)"
+ id="g5689"
+ style="display:inline" />
+ <g
+ transform="translate(3768.8073,99.541863)"
+ id="g5691"
+ style="display:inline" />
+ <g
+ transform="translate(4608.2348,99.541863)"
+ id="g5693"
+ style="display:inline" />
+ <g
+ transform="translate(4608.2348,99.541863)"
+ id="g5695"
+ style="display:inline" />
+ <g
+ transform="translate(4608.2348,99.541863)"
+ id="g5697"
+ style="display:inline" />
+ <g
+ transform="translate(4608.2348,99.541863)"
+ id="g5699"
+ style="display:inline" />
+ <g
+ transform="translate(4908.1225,99.541863)"
+ id="g5701"
+ style="display:inline" />
+ <g
+ transform="translate(4908.1225,99.541863)"
+ id="g5703"
+ style="display:inline" />
+ <g
+ transform="translate(4908.1225,99.541863)"
+ id="g5705"
+ style="display:inline" />
+ <g
+ transform="translate(4908.1225,99.541863)"
+ id="g5707"
+ style="display:inline" />
+ <g
+ transform="translate(5747.55,99.541863)"
+ id="g5709"
+ style="display:inline" />
+ <g
+ transform="translate(5747.55,99.541863)"
+ id="g5711"
+ style="display:inline" />
+ <g
+ transform="translate(5747.55,99.541863)"
+ id="g5713"
+ style="display:inline" />
+ <g
+ transform="translate(5747.55,99.541863)"
+ id="g5715"
+ style="display:inline" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 4056.7725,1480.6669 a 1050.5586,1050.5586 0 1 1 -2101.1172,0 1050.5586,1050.5586 0 1 1 2101.1172,0 z"
+ transform="matrix(0.33116928,0,0,0.33116928,-629.02269,-824.89443)"
+ id="path5717"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4776)" />
+ <rect
+ width="723.04944"
+ height="723.04944"
+ x="6.9422774"
+ y="-697.38446"
+ id="rect5719"
+ style="opacity:0;fill:#333333;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 673.51085,-334.81533 a 306.08845,306.08845 0 0 1 -612.176904,0 306.08845,306.08845 0 1 1 612.176904,0 z"
+ id="path5721"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.08973837;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 673.51085,-334.81533 a 306.08845,306.08845 0 0 1 -612.176904,0 306.08845,306.08845 0 1 1 612.176904,0 z"
+ id="path5723"
+ style="fill:url(#radialGradient5793);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.08973837;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 673.67195,-334.81523 a 306.2496,306.2496 0 0 1 -612.499204,0 306.2496,306.2496 0 1 1 612.499204,0 z"
+ id="path5725"
+ style="fill:none;stroke:#1a1a1a;stroke-width:10.0401516;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 690.28725,-334.81523 a 322.86489,322.86489 0 1 1 -645.729704,0 322.86489,322.86489 0 1 1 645.729704,0 z"
+ id="path5727"
+ style="fill:url(#linearGradient5795);fill-opacity:1;stroke:url(#linearGradient5797);stroke-width:36.49343872;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 707.26555,-334.13443 a 339.73617,339.73636 0 0 1 -679.472304,0 339.73617,339.73636 0 1 1 679.472304,0 z"
+ id="path5729"
+ style="fill:none;stroke:#000000;stroke-width:2.96754265;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(2.0906495,0,0,2.0906495,-555.46701,-1350.1739)"
+ id="path5731"
+ style="fill:none;stroke:url(#linearGradient5799);stroke-width:1.946154;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter17476)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(0.21152298,-1.6111762,1.6111762,0.21152298,-508.4461,273.68727)"
+ id="path5733"
+ style="opacity:0.52320676;fill:none;stroke:url(#linearGradient5801);stroke-width:2.45571566;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter17486)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(0.16823377,-1.2814402,1.2814402,0.16823377,-327.66736,147.18127)"
+ id="path5735"
+ style="fill:none;stroke:#000000;stroke-width:3.81569743;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5500)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 395.33505,-537.76413 a 202.70094,202.70094 0 1 1 -52.7704,401.9526 202.70094,202.70094 0 1 1 52.7704,-401.9526 z"
+ id="path5737"
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 400.06755,-573.81213 a 239.05822,239.05822 0 1 1 -62.2354,474.048603 239.05822,239.05822 0 1 1 62.2354,-474.048603 z"
+ id="path5739"
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 398.87215,-564.70663 a 229.87453,229.87453 0 0 1 -59.8446,455.8375 229.87453,229.87453 0 0 1 59.8446,-455.8375 z"
+ id="path5741"
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 397.67675,-555.60113 a 220.69087,220.69087 0 1 1 -57.4538,437.6264 220.69087,220.69087 0 1 1 57.4538,-437.6264 z"
+ id="path5743"
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154573;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 396.48135,-546.49563 a 211.50721,211.50721 0 1 1 -55.0629,419.4153 211.50721,211.50721 0 1 1 55.0629,-419.4153 z"
+ id="path5745"
+ style="fill:none;stroke:#1a1a1a;stroke-width:4.93154621;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 421.63815,-332.81153 a 55.925048,53.642394 0 1 1 -111.85,0 55.925048,53.642394 0 1 1 111.85,0 z"
+ id="path5747"
+ style="fill:#000000;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -1649.4202,212.41945 c -85.6538,0 -155.1851,69.53116 -155.185,155.18505 0,85.65389 69.5312,155.15581 155.185,155.15583 85.6539,0 155.1559,-69.50195 155.1559,-155.15583 0,-85.65389 -69.502,-155.18506 -155.1559,-155.18505 z m 2.6887,109.88621 33.3166,17.18434 11.164,35.82992 -17.2136,33.34579 -35.8007,11.13474 -33.3458,-17.18433 -11.1347,-35.82992 17.1844,-33.34579 35.8298,-11.13475 z"
+ transform="matrix(0.98630917,0,0,0.98630917,1995.3415,-697.38452)"
+ id="path5749"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.03299999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4024)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 597.90765,-334.81523 a 231.16069,231.16069 0 1 1 -462.3213,0 231.16069,231.16069 0 1 1 462.3213,0 z"
+ id="path5751"
+ style="fill:url(#radialGradient5803);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <text
+ transform="matrix(2.0804093,0,0,2.0660635,4.7303465,-692.91272)"
+ id="text5753"
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10px;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none"><textPath
+ xlink:href="#path17494"
+ id="textPath5755"
+ style="font-size:20px;font-family:'Liberation Sans';fill:#000000;fill-opacity:1">1:1,8 f=50mm <tspan
+ id="tspan5757"
+ style="font-weight:normal;-inkscape-font-specification:'Liberation Sans';fill:#000000;fill-opacity:1">digiKam</tspan> powered by Open Source www.digikam.org</textPath></text>
+ <text
+ transform="matrix(2.0804093,0,0,2.0660635,8.7303465,-694.91272)"
+ id="text5759"
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10px;font-family:'Bitstream Vera Sans';fill:url(#radialGradient5805);fill-opacity:1;stroke:none"><textPath
+ xlink:href="#path17494"
+ id="textPath5761"
+ style="font-size:20px;font-family:'Liberation Sans';fill:url(#radialGradient5805);fill-opacity:1">1:1,8 f=50mm <tspan
+ id="tspan5763"
+ style="font-weight:normal;-inkscape-font-specification:'Liberation Sans';fill:url(#radialGradient5805);fill-opacity:1">digiKam</tspan> powered by Open Source www.digikam.org</textPath></text>
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(1.0194228,0,0,1.0194228,-82.588154,-829.91483)"
+ id="path5765"
+ style="opacity:0.82165605;fill:none;stroke:#000000;stroke-width:9.67517281;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8376)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -1650.5066,213.49129 c -83.9581,0 -152.113,68.15468 -152.1128,152.11292 0,50.3445 24.5241,94.98024 62.2488,122.66431 l 81.2701,-72.36106 -28.2168,-13.75032 -112.4661,-9.4247 -0.9454,-4.55479 110.8906,9.22417 -10.2841,-29.8783 -74.9106,-88.31716 2.2918,-3.52352 74.2517,86.65567 13.693,-28.33139 8.9377,-118.13817 4.2397,-0.40105 -8.4221,115.90374 32.17,-11.0862 0.2866,0.14324 85.4144,-80.48994 c -25.3374,-18.39614 -54.07,-26.44745 -88.3365,-26.44745 z m 92.4171,29.5952 -84.4791,79.23286 25.8902,14.06039 116.1931,4.01107 c -6.1335,-38.3839 -28.5375,-75.05806 -57.6042,-97.30432 z m -56.0073,98.19684 9.1383,31.62574 77.6893,81.49929 c 19.0245,-25.39267 28.847,-54.65287 28.847,-88.80415 0,-6.718 -0.4434,-13.33456 -1.2892,-19.82338 l -114.3854,-4.4975 z m 7.1054,36.35016 -12.2904,27.50289 -8.1356,110.80466 c 39.6252,-6.04635 73.6613,-25.97455 97.0268,-56.40776 l -76.6008,-81.89979 z m -17.0171,28.99251 -29.7637,10.82837 -82.903,73.56422 c 25.0994,18.26418 52.7753,26.66988 86.1686,26.66989 6.3136,0 12.5372,-0.39737 18.649,-1.14586 l 7.8491,-109.91662 z"
+ transform="matrix(0.98630917,0,0,0.98630917,1995.3415,-697.38452)"
+ id="path5767"
+ style="fill:url(#radialGradient5807);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4032)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 365.49344,213.49129 c -83.95817,0 -152.11301,68.15468 -152.11282,152.11292 0,50.3445 24.52406,94.98024 62.2488,122.66431 l 81.27007,-72.36106 -28.21675,-13.75032 -112.46616,-9.4247 -0.94539,-4.55479 110.89065,9.22417 -10.28413,-29.8783 -74.91056,-88.31716 2.29172,-3.52352 74.25173,86.65567 13.69303,-28.33139 8.93771,-118.13817 4.23968,-0.40105 -8.42207,115.90374 32.16997,-11.0862 0.28656,0.14324 85.41442,-80.48994 C 428.49246,221.5426 399.75988,213.49129 365.49344,213.49129 Z m 92.4171,29.5952 -84.47913,79.23286 25.89021,14.06039 116.19304,4.01107 c -6.13346,-38.3839 -28.53741,-75.05806 -57.60412,-97.30432 z m -56.00735,98.19684 9.13828,31.62574 77.68931,81.49929 c 19.02449,-25.39267 28.84698,-54.65287 28.84698,-88.80415 0,-6.718 -0.4434,-13.33456 -1.28914,-19.82338 l -114.38543,-4.4975 z m 7.10543,36.35016 -12.2904,27.50289 -8.1356,110.80466 c 39.62521,-6.04635 73.66129,-25.97455 97.02675,-56.40776 l -76.60075,-81.89979 z m -17.01712,28.99251 -29.76366,10.82837 -82.90307,73.56422 c 25.09947,18.26418 52.77529,26.66988 86.16867,26.66989 6.31351,0 12.53718,-0.39737 18.64892,-1.14586 L 391.9915,406.626 Z"
+ transform="matrix(0.98525245,-0.04564416,0.04564416,0.98525245,-9.3585535,-680.31622)"
+ id="path5769"
+ style="fill:none;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4744)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 383.07925,-579.51423 a 242.3102,242.3102 0 0 1 -28.2588,483.795803 242.3102,242.3102 0 1 1 28.2588,-483.795803 z"
+ id="path5771"
+ style="opacity:0.59235666;fill:url(#radialGradient5809);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(-0.08488441,1.4532338,-1.4532338,-0.08488441,1112.2081,-937.90143)"
+ id="path5773"
+ style="fill:url(#radialGradient5811);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5533)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 234.75946,546.40981 -20.08087,-24.48662 -23.92543,17.17385 17.08283,-26.66483 -23.72666,-17.44742 30.63864,8.00685 9.26154,-27.95694 1.85289,31.61333 29.45061,0.16908 -29.49349,11.53126 z"
+ transform="matrix(1.8070963,0,0,1.8070963,-84.993754,-1195.1861)"
+ id="path5775"
+ style="opacity:0.92258618;fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4070)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 234.75946,546.40981 -17.72902,-21.30507 -20.15014,19.03145 9.58622,-26.00632 -26.55678,-7.9348 27.31524,-4.70125 -6.40665,-26.96625 17.72902,21.30507 20.15014,-19.03145 -9.58622,26.00631 26.55678,7.93481 -27.31524,4.70125 z"
+ transform="matrix(0.88557018,1.5752342,-1.5752342,0.88557018,1047.6481,-1189.8698)"
+ id="path5777"
+ style="fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4464)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 234.75946,546.40981 -17.69334,-21.89945 -20.18582,19.62583 10.11881,-26.27261 -27.08937,-7.66851 27.81215,-4.37316 -6.90356,-27.29434 17.69334,21.89945 20.18582,-19.62583 -10.11881,26.27261 27.08937,7.66851 -27.81215,4.37316 z"
+ transform="matrix(0.84058578,-0.65778649,0.65778649,0.84058578,-131.54315,-635.85442)"
+ id="path5779"
+ style="opacity:0.92258618;fill:#eeeeee;fill-opacity:1;stroke:none;filter:url(#filter4070)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(0.21285796,-1.6213435,1.6213435,0.21285796,-512.44588,275.55467)"
+ id="path5781"
+ style="fill:none;stroke:#000000;stroke-width:4.59425783;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4302)" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 587.9088,485.6666 a 146.47213,146.47213 0 1 1 -292.94425,0 146.47213,146.47213 0 1 1 292.94425,0 z"
+ transform="matrix(0.21285796,-1.6213435,1.6213435,0.21285796,-512.44588,275.55467)"
+ id="path5783"
+ style="fill:none;stroke:#000000;stroke-width:4.59425783;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4302)" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/static/img/mockup-front-B.png b/static/img/mockup-front-B.png
new file mode 100644
index 000000000..8d92129d2
Binary files /dev/null and b/static/img/mockup-front-B.png differ
diff --git a/static/img/screenshot-frontpage.jpg b/static/img/screenshot-frontpage.jpg
new file mode 100755
index 000000000..3fc8efda1
Binary files /dev/null and b/static/img/screenshot-frontpage.jpg differ
diff --git a/themes/hugo-theme-digikam/layouts/_default/baseof.html b/themes/hugo-theme-digikam/layouts/_default/baseof.html
index adfc9ba0c..8cef9479c 100755
--- a/themes/hugo-theme-digikam/layouts/_default/baseof.html
+++ b/themes/hugo-theme-digikam/layouts/_default/baseof.html
@@ -1,170 +1,24 @@
<!DOCTYPE html>
<html lang="{{ .Lang }}">
<head>
-
{{ partial "head-meta.html" . }}
-
- <base href="{{ .Site.BaseURL }}">
- <link rel="canonical" href="{{ .Permalink }}">
- <title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
-
- {{ "<!-- CSS -->" | safeHTML }}
- <link href="{{ .Site.BaseURL }}css/app.css" rel="stylesheet">
-
- {{ if .RSSLink }}
- {{ "<!-- RSS 2.0 feed -->" | safeHTML }}
- <link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
- <link href="{{ .RSSLink }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}" />
- {{ end }}
-
- {{ if .Site.Params.cookie_consent_info_url }}
- {{ partial "cookie-consent.html" . }}
- {{ end }}
-
</head>
<body>
-
- <header class="nav">
- <div class="top-bar">
- <div class="row column">
- <div class="top-bar-left">
- <ul class="menu">
- <li>
- <a href="{{ .Site.BaseURL | absLangURL }}">
- {{ .Site.Title | safeHTML }}
- </a>
- </li>
- </ul>
- </div>
- <div class="top-bar-right">
- <ul class="menu">
- <!-- <li class="{{ if .IsHome }}active{{ end }}"> -->
- <!-- <a href="{{ .Site.BaseURL | absLangURL }}"> -->
- <!-- {{ i18n "home" }} -->
- <!-- </a> -->
- <!-- </li> -->
- {{ if .Site.Params.custom_navbar }}
- {{ range .Site.Menus.navbar }}
- <li><a href="{{.URL | absURL }}">
- {{ .Name }}
- </a></li>
- {{ end }}
- {{ else }}
- {{ range where .Site.Pages "Type" "!=" "news" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- {{ end }}
- </ul>
- </div>
- </div>
- </div>
- </header>
-
- <header class="blog-header">
- <div class="callout large">
- <div class="row column text-center">
- <h1>
- <a href="{{ .Site.BaseURL }}" rel="home">{{ .Site.Title | safeHTML }}</a>
- </h1>
- {{ if .Site.Params.description }}
- <p>
- {{ .Site.Params.description | markdownify }}
- </p>
- {{ end }}
- </div>
- </div>
- </header>
-
+ {{ partial "nav.html" . }}
+ {{ partial "page-header.html" . }}
<main>
<div class="row" id="content">
<div class="medium-8 columns">
{{ block "main" . }}
<!-- The part of the page that begins to differ between templates -->
{{ end }}
</div>
{{ partial "sidebar.html" . }}
</div>
</main>
-
- <footer class="blog-footer">
- <div class="row full-widdth">
- <div class="small-6 medium-4 large-4 columns">
- <h4>About</h4>
- <ul>
- {{ range where .Site.Pages "Type" "about" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- <h4>Support</h4>
- <ul>
- {{ range where .Site.Pages "Type" "support" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- </div>
- <div class="small-6 medium-4 large-4 columns">
- <h4>Documentation</h4>
- <ul>
- {{ range where .Site.Pages "Type" "documentation" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- <h4>Donate</h4>
- <ul>
- {{ range where .Site.Pages "Type" "donate" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- <h4>Releases</h4>
- <ul>
- {{ range where .Site.Pages "Type" "releases" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- </div>
- <div class="small-6 medium-4 large-4 columns">
- <h4>Download</h4>
- <ul>
- {{ range where .Site.Pages "Type" "download" }}
- <li><a href="{{ .Permalink }}">
- {{ .Title }}
- </a></li>
- {{ end }}
- </ul>
- <h4>Follow Us</h4>
- <ul class="footer-links">
- <li><a href="https://plus.google.com/+DigikamOrg">G+</a></li>
- <li><a href="https://www.facebook.com/digikam/">Facebook</a></li>
- <ul>
- </div>
- </div>
- <div class="row column">
- <p>
- {{ if .Site.Copyright }}
- {{ .Site.Copyright | markdownify }}
- {{ else }}
- Powered by <a href="hhttps://github.com/zurb">@zurb</a>.
- {{ end }}
- </p>
- <p>
- <a href="{{ .Permalink }}#">{{ i18n "backToTop" }}</a>
- </p>
- </div>
- </footer>
- <foot>
- <script src="{{ .Site.BaseURL }}js/app.js"></script>
- </foot>
+ {{ partial "page-footer.html" .}}
+ <foot>
+ <script src="{{ .Site.BaseURL }}js/app.js"></script>
+ </foot>
</body>
</html>
diff --git a/themes/hugo-theme-digikam/layouts/_default/single.html b/themes/hugo-theme-digikam/layouts/_default/single.html
index c9f0cb03c..2e3919f73 100644
--- a/themes/hugo-theme-digikam/layouts/_default/single.html
+++ b/themes/hugo-theme-digikam/layouts/_default/single.html
@@ -1,39 +1,41 @@
{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
{{ define "main" }}
- {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+{{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
- <div class="blog-post">
- <h3>
- <a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
- </h3>
- <div class="post-meta small">
- <small>
- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
- {{ .Date.Format $dateFormat }}
- </time> by {{ .Params.author | default .Site.Params.author }}.
- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }}
- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }}
- <br>
- {{ if not .Site.Params.sharingicons.hide }}
- {{ partial "sharing-icons.html" . }}
- {{ end }}
- </small>
- </div>
- <p>
- {{ .Content }}
- </p>
+<article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+
+ <hr/>
+
+ {{ .Content }}
+
{{ if .IsTranslated }}
- <h4>{{ i18n "translations" }}</h4>
- <ul>
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
{{ range .Translations }}
- <li><a href="{{ .Permalink }}">
+ <li><a href="{{ .Permalink }}">
{{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
- </a></li>
+ </a></li>
{{ end }}
- </ul>
+ </ul>
{{ end }}
<hr>
- </div>
+ </article>
{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/_default/summary.html b/themes/hugo-theme-digikam/layouts/_default/summary.html
index cb1a0d6b4..ae1774608 100755
--- a/themes/hugo-theme-digikam/layouts/_default/summary.html
+++ b/themes/hugo-theme-digikam/layouts/_default/summary.html
@@ -1,21 +1,21 @@
{{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
<div class="blog-post">
- <h3>
+ <h2>
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
- </h3>
- <div class="callout small">
+ </h2>
+ <div class="meta small">
<small>
<time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
{{ .Date.Format $dateFormat }}
</time> by {{ .Params.author | default .Site.Params.author }}.
{{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }}
{{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }}
</small>
</div>
<p>
{{ .Summary }}
</p>
<a href='{{ .Permalink }}'>{{ i18n "readMore" }}</a>
<hr>
</div>
diff --git a/themes/hugo-theme-digikam/layouts/index.html b/themes/hugo-theme-digikam/layouts/index.html
new file mode 100644
index 000000000..d78e9567e
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/index.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="{{ .Lang }}">
+ <head>
+ {{ partial "head-meta.html" . }}
+ </head>
+ <body>
+ {{ partial "nav.html" . }}
+ {{ partial "page-header.html" . }}
+ <main>
+ <!-- This is the guts of this template -->
+
+ <section id='news'>
+ <div class="row" id="content">
+ {{ $num_recent_posts := (index .Site.Params.sidebar "num_recent_posts" | default 2) }}
+ <h2 class="index-header">{{ i18n "latestNews" }}</h2>
+ <div>
+ {{ range first $num_recent_posts (where .Site.Pages "Type" "news") }}
+ <div class="large-6 medium-6 small-12 columns">
+ <h3>
+ <a href="{{.RelPermalink}}">
+ {{.Title | markdownify }}
+ </a>
+ </h3>
+ <small>
+ <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}" title="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
+ {{ .Date.Format "Mon Jan 2, 2006" }}
+ </time>
+ //
+ <span>
+ {{ i18n "by" }} {{ .Params.author | default .Site.Params.author }}
+ </span>
+ </small>
+ <p>
+ {{ .Summary | markdownify }}
+ </p>
+ </div>
+ {{ end }}
+ </div>
+ <!-- {{ partial "sidebar.html" . }} -->
+ </div>
+ </section>
+
+ <section id='screenshots'>
+ <div class="row columns">
+ <h2 class="index-header">{{ i18n "screenshots" }}</h2>
+ <p>
+ <img src="/img/screenshot-frontpage.jpg" width='1170' height='780'>
+ </p>
+ </div>
+ </section>
+
+
+ <section id='features'>
+ <div class="row text-center">
+ <h2 class="index-header">{{ i18n "features" }}</h2>
+ <div class="large-6 medium-6 columns">
+ <i class="fa fa-picture-o fa-5x"></i>
+ <h3 class="index-header">{{ i18n "largeCollections" }}</h3>
+ <p>{{ i18n "largeCollectionsBody" }}</p>
+ </div>
+ <div class="large-6 medium-6 columns">
+ <i class="fa fa-pencil fa-5x"></i>
+ <h3 class="index-header">{{ i18n "efficientEditing" }}</h3>
+ <p>{{ i18n "efficientEditingBody" }}</p>
+ </div>
+ </div>
+ <div class="row text-center">
+ <div class="large-6 medium-6 columns">
+ <i class="fa fa-file-text-o fa-5x"></i>
+ <h3 class="index-header">{{ i18n "openMetadata" }}</h3>
+ <p>{{ i18n "openMetadataBody" }}</p>
+ </div>
+ <div class="large-6 medium-6 columns">
+ <i class="fa fa-code fa-5x"></i>
+ <h3 class="index-header">{{ i18n "freeSoftware" }}</h3>
+ <p>{{ i18n "freeSoftwareBody" }}</p>
+ </div>
+ </div>
+ </section>
+
+ <!-- <div class="row"> -->
+ <!-- <div class="large-4 medium-4 columns"> -->
+ <!-- <h3>{{ i18n "recipesBookSidebar" }}</h3> -->
+ <!-- <p> -->
+ <!-- <a href="#"> -->
+ <!-- <img src="http://i.imgur.com/BMegIrE.png"> -->
+ <!-- </a> -->
+ <!-- </p> -->
+ <!-- </div> -->
+ <!-- <div class="large-4 medium-4 columns"> -->
+ <!-- <h3>{{ i18n "donateTitleSidbar" }}</h3> -->
+ <!-- <p><a href="#">{{ i18n "donateBodySidebar" }}</a></p> -->
+ <!-- </div> -->
+ <!-- <div class="large-4 medium-4 columns"> -->
+ <!-- {{ with .Site.Menus.sidebar }} -->
+ <!-- <h3>{{ i18n "links" }}</h3> -->
+ <!-- <ul> -->
+ <!-- {{ range . }} -->
+ <!-- <li> -->
+ <!-- <a href="{{ .URL | absURL }}"> -->
+ <!-- {{ .Name }} -->
+ <!-- </a> -->
+ <!-- </li> -->
+ <!-- {{ end }} -->
+ <!-- </ul> -->
+ <!-- {{ end }} -->
+ <!-- </div> -->
+ <!-- </div> -->
+ <!-- End of the template guts -->
+ </main>
+ {{ partial "page-footer.html" .}}
+ <foot>
+ <script src="{{ .Site.BaseURL }}js/app.js"></script>
+ </foot>
+ </body>
+</html>
diff --git a/themes/hugo-theme-digikam/layouts/news/list.html b/themes/hugo-theme-digikam/layouts/news/list.html
new file mode 100644
index 000000000..700bacf37
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/news/list.html
@@ -0,0 +1,26 @@
+{{ define "main" }}
+
+{{ $paginator := .Paginate (where .Data.Pages "Type" "news") }}
+{{ range $paginator.Pages }}
+ {{ .Render "summary" }}
+{{ end }}
+
+{{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }}
+ <div>
+ {{ if and (.Paginator.HasPrev) (.Paginator.HasNext) }}
+ <a class="button" href="{{ .Paginator.Prev.URL }}">{{ i18n "paginatorPrevious" }}</a>
+ <a class="button" href="{{ .Paginator.Next.URL }}">{{ i18n "paginatorNext" }}</a>
+ {{ end }}
+ {{ if and (.Paginator.HasPrev) (not .Paginator.HasNext) }}
+ <a class="button" href="{{ .Paginator.Prev.URL }}">{{ i18n "paginatorPrevious" }}</a>
+ <a class="button disabled" href="#" aria-disabled="true">{{ i18n "paginatorNext" }}</a>
+ {{ end }}
+ {{ if and (not .Paginator.HasPrev) (.Paginator.HasNext) }}
+ <a class="button disabled" href="#" aria-disabled="true">{{ i18n "paginatorPrevious" }}</a>
+ <a class="button" href="{{ .Paginator.Next.URL }}">{{ i18n "paginatorNext" }}</a>
+ {{ end }}
+ <hr>
+ </div>
+{{ end }}
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/news/single.html b/themes/hugo-theme-digikam/layouts/news/single.html
new file mode 100644
index 000000000..bf872f98e
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/news/single.html
@@ -0,0 +1,63 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <div class="post-meta small">
+ <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}" title="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
+ {{ .Date.Format $dateFormat }}
+ </time>
+ //
+ <div class="author">
+ {{ i18n "by" }} {{ .Params.author | default .Site.Params.author }}
+ </div>
+ {{ if (.Params.categories) }}
+ <div class="categories">
+ Categories: {{ partial "meta-categories.html" . }}
+ </div>
+ {{ end }}
+ {{ if (.Params.tags) }}
+ <div class="tags">
+ Tags: {{ partial "meta-tags.html" . }}
+ </div>
+ {{ end }}
+ {{ if not .Site.Params.sharingicons.hide }}
+ //
+ <div class="social">
+ {{ partial "sharing-icons.html" . }}
+ </div>
+ {{ end }}
+ </div>
+
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ <div id='discourse-comments'></div>
+ </article>
+
+ <script type="text/javascript">
+ DiscourseEmbed = { discourseUrl: 'http://discuss.pixls.us/',
+ discourseEmbedUrl: '{{ .Permalink }}' };
+
+ (function() {
+ var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
+ d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
+ })();
+ </script>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/news/summary.html b/themes/hugo-theme-digikam/layouts/news/summary.html
new file mode 100755
index 000000000..5f302ccfb
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/news/summary.html
@@ -0,0 +1,21 @@
+{{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+<article class="blog-post">
+ <h2>
+ <a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
+ </h2>
+ <div class="meta small">
+ <small>
+ <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
+ {{ .Date.Format $dateFormat }}
+ </time> by {{ .Params.author | default .Site.Params.author }}.
+ {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }}
+ {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }}
+ </small>
+ </div>
+
+ {{ .Summary }}
+
+ <a href='{{ .Permalink }}'>{{ i18n "readMore" }}</a>
+ <hr>
+</article>
diff --git a/themes/hugo-theme-digikam/layouts/partials/head-meta.html b/themes/hugo-theme-digikam/layouts/partials/head-meta.html
index 0d89486c1..27c35f6ac 100644
--- a/themes/hugo-theme-digikam/layouts/partials/head-meta.html
+++ b/themes/hugo-theme-digikam/layouts/partials/head-meta.html
@@ -1,12 +1,29 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{{ "<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->" | safeHTML }}
<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/schema.html" . }}
{{ template "_internal/twitter_cards.html" . }}
{{ .Hugo.Generator }}
+
+<!-- <base href="{{ .Site.BaseURL }}"> -->
+<link rel="canonical" href="{{ .Permalink }}">
+<title>{{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
+
+{{ "<!-- CSS -->" | safeHTML }}
+<link href="{{ .Site.BaseURL }}css/app.css" rel="stylesheet">
+
+{{ if .RSSLink }}
+{{ "<!-- RSS 2.0 feed -->" | safeHTML }}
+<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
+<link href="{{ .RSSLink }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}" />
+{{ end }}
+
+{{ if .Site.Params.cookie_consent_info_url }}
+{{ partial "cookie-consent.html" . }}
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/partials/nav.html b/themes/hugo-theme-digikam/layouts/partials/nav.html
new file mode 100644
index 000000000..bc4211afc
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/partials/nav.html
@@ -0,0 +1,30 @@
+<header class="nav">
+ <div class="title-bar" data-responsive-toggle="main-menu" data-hide-for="medium">
+ <button class="menu-icon" type="button" data-toggle></button>
+ <div class="title-bar-title">{{ i18n "menu" }}</div>
+ </div>
+ <div class="top-bar" id="main-menu">
+ <!-- <div class="top-bar-left"> -->
+ <!-- <ul class="dropdown menu" data-dropdown-menu> -->
+ <!-- <li class="menu-text">Site Title</li> -->
+ <!-- </ul> -->
+ <!-- </div> -->
+ <div class="top-bar-right">
+ <ul class="menu" data-responsive-menu="drilldown medium-dropdown">
+ {{ if .Site.Params.custom_navbar }}
+ {{ range .Site.Menus.navbar }}
+ <li><a href="{{.URL | absURL }}">
+ {{ .Name }}
+ </a></li>
+ {{ end }}
+ {{ else }}
+ {{ range where .Site.Pages "Type" "!=" "news" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ {{ end }}
+ </ul>
+ </div>
+ </div>
+</header>
diff --git a/themes/hugo-theme-digikam/layouts/partials/page-footer.html b/themes/hugo-theme-digikam/layouts/partials/page-footer.html
new file mode 100644
index 000000000..7c0e408be
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/partials/page-footer.html
@@ -0,0 +1,116 @@
+<footer class="blog-footer">
+ <div class="row full-widdth">
+ <div class="small-12 medium-6 large-4 columns">
+ <h4>
+ <i class="fa fa-info-circle"></i>
+ <span>{{ i18n "about" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "about" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+ <h4>
+ <i class="fa fa-question-circle"></i>
+ <span>{{ i18n "support" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "support" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+
+ <h4>
+ <i class="fa fa-users"></i>
+ <span>{{ i18n "contribute" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "contribute" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+
+ </div>
+ <div class="small-12 medium-6 large-4 columns">
+ <h4>
+ <i class="fa fa-book"></i>
+ <span>{{ i18n "documentation" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "documentation" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+ <h4>
+ <i class="fa fa-money"></i>
+ <span>{{ i18n "donate" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "donate" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+ </div>
+ <div class="small-12 medium-6 large-4 columns">
+ <h4>
+ <i class="fa fa-download"></i>
+ <span>{{ i18n "download" }}</span>
+ </h4>
+ <ul>
+ {{ range where .Site.Pages.ByTitle "Type" "download" }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Title }}
+ </a></li>
+ {{ end }}
+ </ul>
+
+ <h4>
+ <i class="fa fa-newspaper-o"></i>
+ <span>{{ i18n "news" }}</span>
+ </h4>
+ <ul>
+ <li>
+ <a href="/news/">
+ {{ i18n "news"}}
+ </a>
+ </li>
+ </ul>
+
+ <h4>
+ <i class="fa fa-share-square"></i>
+ <span>{{ i18n "followUs" }}</span>
+ </h4>
+ <ul>
+ <li>
+ <a href="https://plus.google.com/+DigikamOrg">
+ Google+
+ </a>
+ </li>
+ <li>
+ <a href="https://www.facebook.com/digikam/">
+ Facebook
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ </div>
+ <div class="row column">
+ <p>
+ {{ i18n "copyright" | markdownify }}
+ </p>
+ <p>
+ <a href="{{ .Permalink }}#">{{ i18n "backToTop" }}</a>
+ </p>
+ </div>
+</footer>
diff --git a/themes/hugo-theme-digikam/layouts/partials/page-header.html b/themes/hugo-theme-digikam/layouts/partials/page-header.html
new file mode 100644
index 000000000..d06e887c8
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/partials/page-header.html
@@ -0,0 +1,28 @@
+<header class="blog-header">
+
+ <div class="row columns">
+ <div class="flex-container">
+ <div class="flex-item" id='digikam-logo'>
+ <a href="{{ .Site.BaseURL }}" rel="home" title="digiKam Home">
+ <img src="/img/digikam_oxygen.svg">
+ </a>
+ </div>
+ <div class="flex-item" id='digikam-title'>
+ <h1>
+ <a href="{{ .Site.BaseURL }}" rel="home">{{ .Site.Title | safeHTML }}</a>
+ </h1>
+ <p>
+ {{ i18n "siteDescription" | markdownify }}
+ </p>
+ </div>
+ <div class="flex-item" id='digikam-download'>
+ <a href="/download/" class="button large">
+ <i class="fa fa-download"></i>
+ <span>{{ i18n "download" }}</span>
+ </a>
+ </div>
+ </div>
+
+ </div>
+
+</header>
diff --git a/themes/hugo-theme-digikam/layouts/partials/sidebar.html b/themes/hugo-theme-digikam/layouts/partials/sidebar.html
index abdcc2fa5..d42ae0d88 100755
--- a/themes/hugo-theme-digikam/layouts/partials/sidebar.html
+++ b/themes/hugo-theme-digikam/layouts/partials/sidebar.html
@@ -1,40 +1,46 @@
<div class="medium-3 columns">
- <div data-anchor="content">
+ <div class="sidebar"data-anchor="content">
<h4>{{ i18n "recipesBookSidebar" }}</h4>
<p>
- <a href="#">
- <img src="http://i.imgur.com/BMegIrE.png">
+ <a href="/recipes_book/">
+ <img src='/img/digikam-recipes.png' alt='digiKam Recipes'>
</a>
</p>
- <h4>{{ i18n "donateTitleSidbar" }}</h4>
- <p><a href="#">{{ i18n "donateBodySidebar" }}</a></p>
+ <!-- <h4>{{ i18n "donateTitleSidbar" }}</h4> -->
+ <!-- <p><a href="#">{{ i18n "donateBodySidebar" }}</a></p> -->
{{ if isset .Site.Params.sidebar "about" }}
<h4>{{ i18n "about" }}</h4>
<p>{{ .Site.Params.sidebar.about | markdownify }}</p>
{{ end }}
{{ $num_recent_posts := (index .Site.Params.sidebar "num_recent_posts" | default 5) }}
- <h4>{{ i18n "recentPosts" }}</h4>
+ <h4>{{ i18n "latestNews" }}</h4>
<ul>
{{ range first $num_recent_posts (where .Site.Pages "Type" "news") }}
<li><a href="{{.RelPermalink}}">
{{.Title | markdownify }}
</a></li>
{{ end }}
</ul>
{{ with .Site.Menus.sidebar }}
<h4>{{ i18n "links" }}</h4>
<ul>
{{ range . }}
<li><a href="{{ .URL | absURL }}">
- {{ .Name }}
+ {{ .Name }}
</a></li>
- {{ end }}
+ {{ end }}
</ul>
- {{ end }}
+ {{ end }}
+
+ <h4>
+ <a href="https://digikam.org/feed.xml">
+ <i class="fa fa-rss"></i> digiKam news
+ </a>
+ </h4>
</div>
</div>
diff --git a/themes/hugo-theme-digikam/layouts/section/about.html b/themes/hugo-theme-digikam/layouts/section/about.html
new file mode 100644
index 000000000..a2a2087c5
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/about.html
@@ -0,0 +1,51 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+ <div class="category-pages">
+ {{ range .Data.Pages.GroupBy "Section" }}
+ <h5>{{ i18n "relatedPages" }}</h5>
+ <ul>
+ {{ range .Pages }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </div>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/section/contribute.html b/themes/hugo-theme-digikam/layouts/section/contribute.html
new file mode 100644
index 000000000..08a34fd50
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/contribute.html
@@ -0,0 +1,39 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/section/documentation.html b/themes/hugo-theme-digikam/layouts/section/documentation.html
new file mode 100644
index 000000000..a2a2087c5
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/documentation.html
@@ -0,0 +1,51 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+ <div class="category-pages">
+ {{ range .Data.Pages.GroupBy "Section" }}
+ <h5>{{ i18n "relatedPages" }}</h5>
+ <ul>
+ {{ range .Pages }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </div>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/section/donate.html b/themes/hugo-theme-digikam/layouts/section/donate.html
new file mode 100644
index 000000000..53cb09b69
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/donate.html
@@ -0,0 +1,39 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/section/download.html b/themes/hugo-theme-digikam/layouts/section/download.html
new file mode 100644
index 000000000..a2a2087c5
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/download.html
@@ -0,0 +1,51 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+ <div class="category-pages">
+ {{ range .Data.Pages.GroupBy "Section" }}
+ <h5>{{ i18n "relatedPages" }}</h5>
+ <ul>
+ {{ range .Pages }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </div>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/layouts/section/support.html b/themes/hugo-theme-digikam/layouts/section/support.html
new file mode 100644
index 000000000..1a6b91698
--- /dev/null
+++ b/themes/hugo-theme-digikam/layouts/section/support.html
@@ -0,0 +1,51 @@
+{{ define "title" }}{{ .Title | markdownify }} | {{ .Site.Title }}{{ end }}
+{{ define "main" }}
+ {{ $dateFormat := default "Mon Jan 2, 2006" (index .Site.Params "date_format") }}
+
+
+ <article class="blog-post">
+ <h1>
+ {{ .Title | markdownify }}
+ </h1>
+ <hr/>
+ <!-- <div class="post-meta small"> -->
+ <!-- <small> -->
+ <!-- <time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> -->
+ <!-- {{ .Date.Format $dateFormat }} -->
+ <!-- </time> by {{ .Params.author | default .Site.Params.author }}. -->
+ <!-- {{ if (.Params.categories) }}Categories: {{ partial "meta-categories.html" . }}.{{ end }} -->
+ <!-- {{ if (.Params.tags) }}Tags: {{ partial "meta-tags.html" . }}.{{ end }} -->
+ <!-- <br> -->
+ <!-- {{ if not .Site.Params.sharingicons.hide }} -->
+ <!-- {{ partial "sharing-icons.html" . }} -->
+ <!-- {{ end }} -->
+ <!-- </small> -->
+ <!-- </div> -->
+ {{ .Content }}
+
+ {{ if .IsTranslated }}
+ <h4>{{ i18n "translations" }}</h4>
+ <ul>
+ {{ range .Translations }}
+ <li><a href="{{ .Permalink }}">
+ {{ .Lang }}: {{ .Title }}{{ if .IsPage }}{{ end }}
+ </a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ <hr>
+ </article>
+ <div class="category-pages">
+ {{ range .Data.Pages.GroupBy "Section" }}
+ <h5>{{ i18n "relatedPages" }}</h5>
+ <ul>
+ {{ range .Pages }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </div>
+
+{{ end }}
diff --git a/themes/hugo-theme-digikam/scripts/bower.json b/themes/hugo-theme-digikam/scripts/bower.json
index ff6c33ba7..8a3ee7586 100644
--- a/themes/hugo-theme-digikam/scripts/bower.json
+++ b/themes/hugo-theme-digikam/scripts/bower.json
@@ -1,22 +1,23 @@
{
"name": "foundation-ssg",
"version": "1.0.0",
"authors": [
"ZURB <foundation@zurb.com>"
],
"description": "Static site generator for Foundation for Sites.",
"main": "gulpfile.js",
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"dependencies": {
"foundation-sites": "~6.3.0",
- "motion-ui": "~1.2.2"
+ "motion-ui": "~1.2.2",
+ "font-awesome": "Font-Awesome#^4.7.0"
},
"private": true
}
diff --git a/themes/hugo-theme-digikam/scripts/config.yml b/themes/hugo-theme-digikam/scripts/config.yml
index 6330bcdb7..145bc79e8 100644
--- a/themes/hugo-theme-digikam/scripts/config.yml
+++ b/themes/hugo-theme-digikam/scripts/config.yml
@@ -1,48 +1,49 @@
# Your project's server will run on localhost:xxxx at this port
PORT: 4000
# Autoprefixer will make sure your CSS works with these browsers
COMPATIBILITY:
- "last 2 versions"
- "ie >= 9"
- "ios >= 7"
# Foundation source directories.
PATHS:
# Paths to Sass libraries, which can then be loaded with @import
sass:
- "bower_components/foundation-sites/scss"
- "bower_components/motion-ui/src"
+ - "bower_components/font-awesome/scss/"
# Paths to JavaScript libraries, which are combined into one file
javascript:
# Libraries required by Foundation
- "bower_components/jquery/dist/jquery.js"
- "bower_components/what-input/dist/what-input.js"
# Core Foundation files
- "bower_components/foundation-sites/js/foundation.core.js"
- "bower_components/foundation-sites/js/foundation.util.*.js"
# Individual Foundation components
# If you aren't using a component, just remove it from the list
- "bower_components/foundation-sites/js/foundation.abide.js"
- "bower_components/foundation-sites/js/foundation.accordion.js"
- "bower_components/foundation-sites/js/foundation.accordionMenu.js"
- "bower_components/foundation-sites/js/foundation.drilldown.js"
- "bower_components/foundation-sites/js/foundation.dropdown.js"
- "bower_components/foundation-sites/js/foundation.dropdownMenu.js"
- "bower_components/foundation-sites/js/foundation.equalizer.js"
- "bower_components/foundation-sites/js/foundation.interchange.js"
- "bower_components/foundation-sites/js/foundation.magellan.js"
- "bower_components/foundation-sites/js/foundation.offcanvas.js"
- "bower_components/foundation-sites/js/foundation.orbit.js"
- "bower_components/foundation-sites/js/foundation.responsiveMenu.js"
- "bower_components/foundation-sites/js/foundation.responsiveToggle.js"
- "bower_components/foundation-sites/js/foundation.reveal.js"
- "bower_components/foundation-sites/js/foundation.slider.js"
- "bower_components/foundation-sites/js/foundation.sticky.js"
- "bower_components/foundation-sites/js/foundation.tabs.js"
- "bower_components/foundation-sites/js/foundation.toggler.js"
- "bower_components/foundation-sites/js/foundation.tooltip.js"
- "bower_components/foundation-sites/js/foundation.zf.responsiveAccordionTabs.js"
# Files in `/source`
- "../source/js/app.js"
- "../source/js/!(app).js"
diff --git a/themes/hugo-theme-digikam/scripts/gulpfile.babel.js b/themes/hugo-theme-digikam/scripts/gulpfile.babel.js
index 7661c70c2..15a16d1ab 100644
--- a/themes/hugo-theme-digikam/scripts/gulpfile.babel.js
+++ b/themes/hugo-theme-digikam/scripts/gulpfile.babel.js
@@ -1,107 +1,114 @@
'use strict';
// 0.0 - Import
import cp from 'child_process';
import fs from 'fs';
import gulp from 'gulp';
import gutil from 'gulp-util';
import path from 'path';
import plugins from 'gulp-load-plugins';
import prettify from 'gulp-jsbeautifier';
import rimraf from 'rimraf';
import yaml from 'js-yaml';
import yargs from 'yargs';
// 0.1 - Load configuration & path variables
const $ = plugins(); // Load all Gulp plugins into one variable
const PRODUCTION = !!(yargs.argv.production); // Check for --production flag
var { COMPATIBILITY, PORT, PATHS } = loadConfig(); // Load settings from config.yml
function loadConfig() { // Load Config
let ymlFile = fs.readFileSync('config.yml', 'utf8');
return yaml.load(ymlFile);
}
var THEME = {}; var HUGO = {}; THEME.source = {} ; THEME.public = {}
THEME.root = path.dirname( path.resolve() ); // Set Theme root variable first
HUGO.root = path.join( THEME.root, '../..' ); // Full path of Hugo's root (assumes it is two directories up)
THEME = {
root : THEME.root, // Full path of theme's root
name : THEME.root.split( path.sep ).pop(), // Full name of theme's root folder
source : path.join(THEME.root, '/source'), // Full path of theme's source folder
static : path.join(THEME.root, '/static'), // Full path of theme's static folder
+ scripts : path.join(THEME.root, '/scripts'), // Full path of theme's scripts folder
};
HUGO = {
root : HUGO.root, // Full path of Hugo's root (assumes it is two directories up)
public : path.join(HUGO.root, '/public'), // Full path of Hugo's public folder
};
-// 0.2 - SCSS build task
+// 0.2 - Copy fonts build task
+ function fonts() {
+ return gulp.src( path.join(THEME.scripts, '/bower_components/font-awesome/fonts/**/*.{ttf,woff,eof,svg}') )
+ .pipe(gulp.dest( path.join(THEME.static, '/fonts') ));
+ }
+
+// 0.3 - SCSS build task
function sass() {
return gulp.src( path.join(THEME.source, '/scss/app.scss') ) // SCSS import paths in `app.scss`
.pipe($.sourcemaps.init())
.pipe($.sass({ // Build / concat scss
includePaths: PATHS.sass
})
.on('error', $.sass.logError))
.pipe($.autoprefixer({ // Autoprefixer
browsers: COMPATIBILITY
}))
.pipe($.if(PRODUCTION, $.cssnano())) // In production, the CSS is compressed
.pipe($.if(!PRODUCTION, $.sourcemaps.write())) // In production, the CSS is sourcemapped
.pipe(gulp.dest( path.join(THEME.static, '/css') ));
}
-// 0.3 - JS build task
+// 0.4 - JS build task
function javascript() {
return gulp.src( PATHS.javascript ) // JS import paths in `config.yml`
.pipe($.sourcemaps.init())
.pipe($.babel({ignore: ['what-input.js']})) // Build babel - `what-input` breaks if not ignored
.pipe($.concat('app.js')) // Build / concat js
.pipe($.if(PRODUCTION, $.uglify() // In production, the file is minified
.on('error', e => { console.log(e); })
))
.pipe($.if(!PRODUCTION, $.sourcemaps.write())) // In production, the JS is sourcemapped
.pipe(gulp.dest( path.join(THEME.static, '/js') ));
}
-// 0.4 - Delete `public` folder
+// 0.5 - Delete `public` folder
function clean(done) {
rimraf(HUGO.public, done); // rm -rf
}
-// 0.5 - Hugo build task
+// 0.6 - Hugo build task
gulp.task('hugo-build', (code) => {
return cp.spawn('hugo', ['-t', THEME.name, '-s',HUGO.root], { stdio: 'inherit' })
.on('error', (error) => gutil.log(gutil.colors.red(error.message)))
.on('close', code);
})
-// 0.6 - Hugo server task
+// 0.7 - Hugo server task
gulp.task('hugo-server', (code) => {
return cp.spawn('hugo', ['server', '-p', PORT, '-t', THEME.name, '-s',HUGO.root], { stdio: 'inherit' })
.on('error', (error) => gutil.log(gutil.colors.red(error.message)))
.on('close', code);
})
-// 0.7 - Html5 lint task
+// 0.8 - Html5 lint task
gulp.task('lint', function() {
return gulp.src( path.join(HUGO.public, '/**/*.html') )
.pipe(prettify({
indent_size: 2,
preserve_newlines: false
}))
.pipe(gulp.dest( HUGO.public ));
})
-// 0.8 - Watch for changes for scss / js / lint
+// 0.9 - Watch for changes for scss / js / lint
function watch() {
gulp.watch( path.join(THEME.source, '/scss/**/*.scss') ).on('all', gulp.series( sass, 'lint' ));
gulp.watch( path.join(THEME.source, '/js/**/*.js') ).on('all', gulp.series( javascript, 'lint' ));
gulp.watch( THEME.public ).on('all', gulp.series( 'lint' ));
}
// 1.0 - `Package.json` -> Gulp tasks
- gulp.task('build', gulp.series( gulp.parallel(sass, javascript) )); // Build the 'static' folder
- gulp.task('css', gulp.series( sass )); // Build the 'static' folder
+ gulp.task('build', gulp.series( gulp.parallel(fonts, sass, javascript) )); // Build the 'static' folder
+ gulp.task('css', gulp.series( fonts, sass )); // Build the 'static' folder
gulp.task('js', gulp.series( javascript )); // Build the 'static' folder
gulp.task('public', gulp.series( 'build', clean, 'hugo-build', `lint` )); // Build the site, run the server, and watch for file changes
gulp.task('server', gulp.series( 'build', clean, gulp.parallel('hugo-server', watch) )); // Build the site, run the server, and watch for file changes
diff --git a/themes/hugo-theme-digikam/source/scss/_settings.scss b/themes/hugo-theme-digikam/source/scss/_settings.scss
index 9f6743012..b1d659bb6 100644
--- a/themes/hugo-theme-digikam/source/scss/_settings.scss
+++ b/themes/hugo-theme-digikam/source/scss/_settings.scss
@@ -1,621 +1,680 @@
// Foundation for Sites Settings
// -----------------------------
//
// Table of Contents:
//
// 1. Global
// 2. Breakpoints
// 3. The Grid
// 4. Base Typography
// 5. Typography Helpers
// 6. Abide
// 7. Accordion
// 8. Accordion Menu
// 9. Badge
// 10. Breadcrumbs
// 11. Button
// 12. Button Group
// 13. Callout
// 14. Card
// 15. Close Button
// 16. Drilldown
// 17. Dropdown
// 18. Dropdown Menu
// 19. Forms
// 20. Label
// 21. Media Object
// 22. Menu
// 23. Meter
// 24. Off-canvas
// 25. Orbit
// 26. Pagination
// 27. Progress Bar
// 28. Responsive Embed
// 29. Reveal
// 30. Slider
// 31. Switch
// 32. Table
// 33. Tabs
// 34. Thumbnail
// 35. Title Bar
// 36. Tooltip
// 37. Top Bar
@import 'util/util';
+@font-face {
+ font-family: 'Oxygen';
+ font-weight: 400;
+ font-style: normal;
+ src: url('/fonts/Oxygen-regular/Oxygen-regular.eot');
+ src: url('/fonts/Oxygen-regular/Oxygen-regular.eot?#iefix') format('embedded-opentype'),
+ local('Oxygen'),
+ local('Oxygen-regular'),
+ url('/fonts/Oxygen-regular/Oxygen-regular.woff2') format('woff2'),
+ url('/fonts/Oxygen-regular/Oxygen-regular.woff') format('woff'),
+ url('/fonts/Oxygen-regular/Oxygen-regular.ttf') format('truetype'),
+ url('/fonts/Oxygen-regular/Oxygen-regular.svg#Oxygen') format('svg');
+}
+
+@font-face {
+ font-family: 'Oxygen';
+ font-weight: 700;
+ font-style: normal;
+ src: url('/fonts/Oxygen-700/Oxygen-700.eot');
+ src: url('/fonts/Oxygen-700/Oxygen-700.eot?#iefix') format('embedded-opentype'),
+ local('Oxygen Bold'),
+ local('Oxygen-700'),
+ url('/fonts/Oxygen-700/Oxygen-700.woff2') format('woff2'),
+ url('/fonts/Oxygen-700/Oxygen-700.woff') format('woff'),
+ url('/fonts/Oxygen-700/Oxygen-700.ttf') format('truetype'),
+ url('/fonts/Oxygen-700/Oxygen-700.svg#Oxygen') format('svg');
+}
+
+@font-face {
+ font-family: 'Fira Sans';
+ font-weight: 400;
+ font-style: normal;
+ src: url('/fonts/Fira-Sans-regular/Fira-Sans-regular.eot');
+ src: url('/fonts/Fira-Sans-regular/Fira-Sans-regular.eot?#iefix') format('embedded-opentype'),
+ local('Fira Sans Regular'),
+ local('Fira-Sans-regular'),
+ url('/fonts/Fira-Sans-regular/Fira-Sans-regular.woff2') format('woff2'),
+ url('/fonts/Fira-Sans-regular/Fira-Sans-regular.woff') format('woff'),
+ url('/fonts/Fira-Sans-regular/Fira-Sans-regular.ttf') format('truetype'),
+ url('/fonts/Fira-Sans-regular/Fira-Sans-regular.svg#FiraSans') format('svg');
+}
+
+@font-face {
+ font-family: 'Fira Sans';
+ font-weight: 700;
+ font-style: normal;
+ src: url('/fonts/Fira-Sans-700/Fira-Sans-700.eot');
+ src: url('/fonts/Fira-Sans-700/Fira-Sans-700.eot?#iefix') format('embedded-opentype'),
+ local('Fira Sans Bold'),
+ local('Fira-Sans-700'),
+ url('/fonts/Fira-Sans-700/Fira-Sans-700.woff2') format('woff2'),
+ url('/fonts/Fira-Sans-700/Fira-Sans-700.woff') format('woff'),
+ url('/fonts/Fira-Sans-700/Fira-Sans-700.ttf') format('truetype'),
+ url('/fonts/Fira-Sans-700/Fira-Sans-700.svg#FiraSans') format('svg');
+}
+
+
+
// 1. Global
// ---------
$global-font-size: 100%;
$global-width: rem-calc(1200);
-$global-lineheight: 1.5;
+$global-lineheight: 1.7;
$foundation-palette: (
- primary: #1779ba,
- secondary: #767676,
- success: #3adb76,
- warning: #ffae00,
- alert: #cc4b37,
+ primary: #0087ff,
+ secondary: #5f5faf,
+ success: #5f8700,
+ warning: #d75f00,
+ alert: #d70000,
);
-$light-gray: #e6e6e6;
-$medium-gray: #cacaca;
-$dark-gray: #8a8a8a;
+$light-gray: #9e9e9e;
+$medium-gray: #6b6b6b;
+$dark-gray: #262626;
$black: #0a0a0a;
-$white: #fefefe;
-$body-background: $white;
-$body-font-color: $black;
-$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
+$white: #f0f0f0;
+$kde-blue: #0068C6;
+$body-background: $dark-gray;
+$body-font-color: $light-gray;
+$body-font-family: 'Oxygen', 'Noto Sans', Roboto, Arial, sans-serif;
$body-antialiased: true;
$global-margin: 1rem;
$global-padding: 1rem;
$global-weight-normal: normal;
$global-weight-bold: bold;
$global-radius: 0;
$global-text-direction: ltr;
$global-flexbox: false;
$print-transparent-backgrounds: true;
@include add-foundation-colors;
// 2. Breakpoints
// --------------
$breakpoints: (
small: 0,
medium: 640px,
large: 1024px,
xlarge: 1200px,
xxlarge: 1440px,
);
$print-breakpoint: large;
$breakpoint-classes: (small medium large);
// 3. The Grid
// -----------
$grid-row-width: $global-width;
$grid-column-count: 12;
$grid-column-gutter: (
small: 20px,
medium: 30px,
);
$grid-column-align-edge: true;
$block-grid-max: 8;
// 4. Base Typography
// ------------------
$header-font-family: $body-font-family;
+$header-font-family: "Fira Sans", "Oxygen", Arial, sans-serif;
$header-font-weight: $global-weight-normal;
$header-font-style: normal;
$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace;
$header-color: inherit;
-$header-lineheight: 1.4;
-$header-margin-bottom: 0.5rem;
+$header-lineheight: 1.7;
+$header-margin-bottom: 0.75rem;
$header-styles: (
small: (
'h1': ('font-size': 24),
'h2': ('font-size': 20),
'h3': ('font-size': 19),
'h4': ('font-size': 18),
'h5': ('font-size': 17),
'h6': ('font-size': 16),
),
medium: (
'h1': ('font-size': 48),
'h2': ('font-size': 40),
'h3': ('font-size': 31),
'h4': ('font-size': 25),
'h5': ('font-size': 20),
'h6': ('font-size': 16),
),
);
$header-text-rendering: optimizeLegibility;
$small-font-size: 80%;
$header-small-font-color: $medium-gray;
-$paragraph-lineheight: 1.6;
+$paragraph-lineheight: 1.7;
$paragraph-margin-bottom: 1rem;
$paragraph-text-rendering: optimizeLegibility;
$code-color: $black;
$code-font-family: $font-family-monospace;
$code-font-weight: $global-weight-normal;
$code-background: $light-gray;
$code-border: 1px solid $medium-gray;
$code-padding: rem-calc(2 5 1);
$anchor-color: $primary-color;
$anchor-color-hover: scale-color($anchor-color, $lightness: -14%);
$anchor-text-decoration: none;
$anchor-text-decoration-hover: none;
$hr-width: $global-width;
$hr-border: 1px solid $medium-gray;
$hr-margin: rem-calc(20) auto;
$list-lineheight: $paragraph-lineheight;
$list-margin-bottom: $paragraph-margin-bottom;
$list-style-type: disc;
$list-style-position: outside;
$list-side-margin: 1.25rem;
$list-nested-side-margin: 1.25rem;
$defnlist-margin-bottom: 1rem;
$defnlist-term-weight: $global-weight-bold;
$defnlist-term-margin-bottom: 0.3rem;
$blockquote-color: $dark-gray;
$blockquote-padding: rem-calc(9 20 0 19);
$blockquote-border: 1px solid $medium-gray;
$cite-font-size: rem-calc(13);
$cite-color: $dark-gray;
$cite-pseudo-content: '\2014 \0020';
$keystroke-font: $font-family-monospace;
$keystroke-color: $black;
$keystroke-background: $light-gray;
$keystroke-padding: rem-calc(2 4 0);
$keystroke-radius: $global-radius;
$abbr-underline: 1px dotted $black;
// 5. Typography Helpers
// ---------------------
$lead-font-size: $global-font-size * 1.25;
-$lead-lineheight: 1.6;
+$lead-lineheight: 1.7;
$subheader-lineheight: 1.4;
$subheader-color: $dark-gray;
$subheader-font-weight: $global-weight-normal;
$subheader-margin-top: 0.2rem;
$subheader-margin-bottom: 0.5rem;
$stat-font-size: 2.5rem;
// 6. Abide
// --------
$abide-inputs: true;
$abide-labels: true;
$input-background-invalid: get-color(alert);
$form-label-color-invalid: get-color(alert);
$input-error-color: get-color(alert);
$input-error-font-size: rem-calc(12);
$input-error-font-weight: $global-weight-bold;
// 7. Accordion
// ------------
$accordion-background: $white;
$accordion-plusminus: true;
$accordion-title-font-size: rem-calc(12);
$accordion-item-color: $primary-color;
$accordion-item-background-hover: $light-gray;
$accordion-item-padding: 1.25rem 1rem;
$accordion-content-background: $white;
$accordion-content-border: 1px solid $light-gray;
$accordion-content-color: $body-font-color;
$accordion-content-padding: 1rem;
// 8. Accordion Menu
// -----------------
$accordionmenu-arrows: true;
$accordionmenu-arrow-color: $primary-color;
$accordionmenu-arrow-size: 6px;
// 9. Badge
// --------
$badge-background: $primary-color;
$badge-color: $white;
$badge-color-alt: $black;
$badge-palette: $foundation-palette;
$badge-padding: 0.3em;
$badge-minwidth: 2.1em;
$badge-font-size: 0.6rem;
// 10. Breadcrumbs
// ---------------
$breadcrumbs-margin: 0 0 $global-margin 0;
$breadcrumbs-item-font-size: rem-calc(11);
$breadcrumbs-item-color: $primary-color;
$breadcrumbs-item-color-current: $black;
$breadcrumbs-item-color-disabled: $medium-gray;
$breadcrumbs-item-margin: 0.75rem;
$breadcrumbs-item-uppercase: true;
$breadcrumbs-item-slash: true;
// 11. Button
// ----------
$button-padding: 0.85em 1em;
$button-margin: 0 0 $global-margin 0;
$button-fill: solid;
$button-background: $primary-color;
$button-background-hover: scale-color($button-background, $lightness: -15%);
$button-color: $white;
$button-color-alt: $black;
$button-radius: $global-radius;
$button-sizes: (
tiny: 0.6rem,
small: 0.75rem,
default: 0.9rem,
large: 1.25rem,
);
$button-palette: $foundation-palette;
$button-opacity-disabled: 0.25;
$button-background-hover-lightness: -20%;
$button-hollow-hover-lightness: -50%;
$button-transition: background-color 0.25s ease-out, color 0.25s ease-out;
// 12. Button Group
// ----------------
$buttongroup-margin: 1rem;
$buttongroup-spacing: 1px;
$buttongroup-child-selector: '.button';
$buttongroup-expand-max: 6;
$buttongroup-radius-on-each: true;
// 13. Callout
// -----------
-$callout-background: $white;
-$callout-background-fade: 85%;
+$callout-background: rgba(44, 62, 80, 0.5);
+$callout-background-fade: 0%;
$callout-border: 1px solid rgba($black, 0.25);
$callout-margin: 0 0 1rem 0;
$callout-padding: 1rem;
$callout-font-color: $body-font-color;
$callout-font-color-alt: $body-background;
$callout-radius: $global-radius;
$callout-link-tint: 30%;
// 14. Card
// --------
$card-background: $white;
$card-font-color: $body-font-color;
$card-divider-background: $light-gray;
$card-border: 1px solid $light-gray;
$card-shadow: none;
$card-border-radius: $global-radius;
$card-padding: $global-padding;
$card-margin: $global-margin;
// 15. Close Button
// ----------------
$closebutton-position: right top;
$closebutton-offset-horizontal: (
small: 0.66rem,
medium: 1rem,
);
$closebutton-offset-vertical: (
small: 0.33em,
medium: 0.5rem,
);
$closebutton-size: (
small: 1.5em,
medium: 2em,
);
$closebutton-lineheight: 1;
$closebutton-color: $dark-gray;
$closebutton-color-hover: $black;
// 16. Drilldown
// -------------
$drilldown-transition: transform 0.15s linear;
$drilldown-arrows: true;
$drilldown-arrow-color: $primary-color;
$drilldown-arrow-size: 6px;
$drilldown-background: $white;
// 17. Dropdown
// ------------
$dropdown-padding: 1rem;
$dropdown-background: $body-background;
$dropdown-border: 1px solid $medium-gray;
$dropdown-font-size: 1rem;
$dropdown-width: 300px;
$dropdown-radius: $global-radius;
$dropdown-sizes: (
tiny: 100px,
small: 200px,
large: 400px,
);
// 18. Dropdown Menu
// -----------------
$dropdownmenu-arrows: true;
$dropdownmenu-arrow-color: $anchor-color;
$dropdownmenu-arrow-size: 6px;
$dropdownmenu-min-width: 200px;
$dropdownmenu-background: $white;
$dropdownmenu-border: 1px solid $medium-gray;
// 19. Forms
// ---------
$fieldset-border: 1px solid $medium-gray;
$fieldset-padding: rem-calc(20);
$fieldset-margin: rem-calc(18 0);
$legend-padding: rem-calc(0 3);
$form-spacing: rem-calc(16);
$helptext-color: $black;
$helptext-font-size: rem-calc(13);
$helptext-font-style: italic;
$input-prefix-color: $black;
$input-prefix-background: $light-gray;
$input-prefix-border: 1px solid $medium-gray;
$input-prefix-padding: 1rem;
$form-label-color: $black;
$form-label-font-size: rem-calc(14);
$form-label-font-weight: $global-weight-normal;
$form-label-line-height: 1.8;
$select-background: $white;
$select-triangle-color: $dark-gray;
$select-radius: $global-radius;
$input-color: $black;
$input-placeholder-color: $medium-gray;
$input-font-family: inherit;
$input-font-size: rem-calc(16);
$input-font-weight: $global-weight-normal;
$input-background: $white;
$input-background-focus: $white;
$input-background-disabled: $light-gray;
$input-border: 1px solid $medium-gray;
$input-border-focus: 1px solid $dark-gray;
$input-shadow: inset 0 1px 2px rgba($black, 0.1);
$input-shadow-focus: 0 0 5px $medium-gray;
$input-cursor-disabled: not-allowed;
$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
$input-number-spinners: true;
$input-radius: $global-radius;
$form-button-radius: $global-radius;
// 20. Label
// ---------
$label-background: $primary-color;
$label-color: $white;
$label-color-alt: $black;
$label-palette: $foundation-palette;
$label-font-size: 0.8rem;
$label-padding: 0.33333rem 0.5rem;
$label-radius: $global-radius;
// 21. Media Object
// ----------------
$mediaobject-margin-bottom: $global-margin;
$mediaobject-section-padding: $global-padding;
$mediaobject-image-width-stacked: 100%;
// 22. Menu
// --------
$menu-margin: 0;
$menu-margin-nested: 1rem;
$menu-item-padding: 0.7rem 1rem;
$menu-item-color-active: $white;
$menu-item-background-active: get-color(primary);
$menu-icon-spacing: 0.25rem;
$menu-item-background-hover: $light-gray;
$menu-border: $light-gray;
// 23. Meter
// ---------
$meter-height: 1rem;
$meter-radius: $global-radius;
$meter-background: $medium-gray;
$meter-fill-good: $success-color;
$meter-fill-medium: $warning-color;
$meter-fill-bad: $alert-color;
// 24. Off-canvas
// --------------
$offcanvas-size: 250px;
$offcanvas-vertical-size: 250px;
$offcanvas-background: $light-gray;
$offcanvas-shadow: 0 0 10px rgba($black, 0.7);
$offcanvas-push-zindex: 1;
$offcanvas-overlap-zindex: 10;
$offcanvas-reveal-zindex: 1;
$offcanvas-transition-length: 0.5s;
$offcanvas-transition-timing: ease;
$offcanvas-fixed-reveal: true;
$offcanvas-exit-background: rgba($white, 0.25);
$maincontent-class: 'off-canvas-content';
// 25. Orbit
// ---------
$orbit-bullet-background: $medium-gray;
$orbit-bullet-background-active: $dark-gray;
$orbit-bullet-diameter: 1.2rem;
$orbit-bullet-margin: 0.1rem;
$orbit-bullet-margin-top: 0.8rem;
$orbit-bullet-margin-bottom: 0.8rem;
$orbit-caption-background: rgba($black, 0.5);
$orbit-caption-padding: 1rem;
$orbit-control-background-hover: rgba($black, 0.5);
$orbit-control-padding: 1rem;
$orbit-control-zindex: 10;
// 26. Pagination
// --------------
$pagination-font-size: rem-calc(14);
$pagination-margin-bottom: $global-margin;
$pagination-item-color: $black;
$pagination-item-padding: rem-calc(3 10);
$pagination-item-spacing: rem-calc(1);
$pagination-radius: $global-radius;
$pagination-item-background-hover: $light-gray;
$pagination-item-background-current: $primary-color;
$pagination-item-color-current: $white;
$pagination-item-color-disabled: $medium-gray;
$pagination-ellipsis-color: $black;
$pagination-mobile-items: false;
$pagination-mobile-current-item: false;
$pagination-arrows: true;
// 27. Progress Bar
// ----------------
$progress-height: 1rem;
$progress-background: $medium-gray;
$progress-margin-bottom: $global-margin;
$progress-meter-background: $primary-color;
$progress-radius: $global-radius;
// 28. Responsive Embed
// --------------------
$responsive-embed-margin-bottom: rem-calc(16);
$responsive-embed-ratios: (
default: 4 by 3,
widescreen: 16 by 9,
);
// 29. Reveal
// ----------
$reveal-background: $white;
$reveal-width: 600px;
$reveal-max-width: $global-width;
$reveal-padding: $global-padding;
$reveal-border: 1px solid $medium-gray;
$reveal-radius: $global-radius;
$reveal-zindex: 1005;
$reveal-overlay-background: rgba($black, 0.45);
// 30. Slider
// ----------
$slider-width-vertical: 0.5rem;
$slider-transition: all 0.2s ease-in-out;
$slider-height: 0.5rem;
$slider-background: $light-gray;
$slider-fill-background: $medium-gray;
$slider-handle-height: 1.4rem;
$slider-handle-width: 1.4rem;
$slider-handle-background: $primary-color;
$slider-opacity-disabled: 0.25;
$slider-radius: $global-radius;
// 31. Switch
// ----------
$switch-background: $medium-gray;
$switch-background-active: $primary-color;
$switch-height: 2rem;
$switch-height-tiny: 1.5rem;
$switch-height-small: 1.75rem;
$switch-height-large: 2.5rem;
$switch-radius: $global-radius;
$switch-margin: $global-margin;
$switch-paddle-background: $white;
$switch-paddle-offset: 0.25rem;
$switch-paddle-radius: $global-radius;
$switch-paddle-transition: all 0.25s ease-out;
// 32. Table
// ---------
$table-background: $white;
$table-color-scale: 5%;
$table-border: 1px solid smart-scale($table-background, $table-color-scale);
$table-padding: rem-calc(8 10 10);
$table-hover-scale: 2%;
$table-row-hover: darken($table-background, $table-hover-scale);
$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);
$table-is-striped: true;
$table-striped-background: smart-scale($table-background, $table-color-scale);
$table-stripe: even;
$table-head-background: smart-scale($table-background, $table-color-scale / 2);
$table-head-row-hover: darken($table-head-background, $table-hover-scale);
$table-foot-background: smart-scale($table-background, $table-color-scale);
$table-foot-row-hover: darken($table-foot-background, $table-hover-scale);
$table-head-font-color: $body-font-color;
$table-foot-font-color: $body-font-color;
$show-header-for-stacked: false;
// 33. Tabs
// --------
$tab-margin: 0;
$tab-background: $white;
$tab-color: $primary-color;
$tab-background-active: $light-gray;
$tab-active-color: $primary-color;
$tab-item-font-size: rem-calc(12);
$tab-item-background-hover: $white;
$tab-item-padding: 1.25rem 1.5rem;
$tab-expand-max: 6;
$tab-content-background: $white;
$tab-content-border: $light-gray;
$tab-content-color: $body-font-color;
$tab-content-padding: 1rem;
// 34. Thumbnail
// -------------
$thumbnail-border: solid 4px $white;
$thumbnail-margin-bottom: $global-margin;
$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);
$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);
$thumbnail-transition: box-shadow 200ms ease-out;
$thumbnail-radius: $global-radius;
// 35. Title Bar
// -------------
$titlebar-background: $black;
$titlebar-color: $white;
$titlebar-padding: 0.5rem;
$titlebar-text-font-weight: bold;
$titlebar-icon-color: $white;
$titlebar-icon-color-hover: $medium-gray;
$titlebar-icon-spacing: 0.25rem;
// 36. Tooltip
// -----------
$has-tip-font-weight: $global-weight-bold;
$has-tip-border-bottom: dotted 1px $dark-gray;
$tooltip-background-color: $black;
$tooltip-color: $white;
$tooltip-padding: 0.75rem;
$tooltip-font-size: $small-font-size;
$tooltip-pip-width: 0.75rem;
$tooltip-pip-height: $tooltip-pip-width * 0.866;
$tooltip-radius: $global-radius;
// 37. Top Bar
// -----------
$topbar-padding: 0.5rem;
-$topbar-background: $light-gray;
+$topbar-background: $black;
$topbar-submenu-background: $topbar-background;
$topbar-title-spacing: 0.5rem 1rem 0.5rem 0;
$topbar-input-width: 200px;
$topbar-unstack-breakpoint: medium;
-
diff --git a/themes/hugo-theme-digikam/source/scss/app.scss b/themes/hugo-theme-digikam/source/scss/app.scss
index fc9757775..e929374eb 100644
--- a/themes/hugo-theme-digikam/source/scss/app.scss
+++ b/themes/hugo-theme-digikam/source/scss/app.scss
@@ -1,97 +1,265 @@
@charset 'utf-8';
@import 'settings';
@import 'foundation';
-@import 'motion-ui';
+//@import 'motion-ui';
+@import 'font-awesome';
@include foundation-global-styles;
@include foundation-grid;
// @include foundation-flex-grid;
@include foundation-typography;
@include foundation-button;
@include foundation-forms;
// @include foundation-range-input;
@include foundation-accordion;
@include foundation-accordion-menu;
@include foundation-badge;
@include foundation-breadcrumbs;
@include foundation-button-group;
@include foundation-callout;
@include foundation-card;
@include foundation-close-button;
@include foundation-menu;
@include foundation-menu-icon;
@include foundation-drilldown-menu;
@include foundation-dropdown;
@include foundation-dropdown-menu;
@include foundation-responsive-embed;
@include foundation-label;
@include foundation-media-object;
@include foundation-off-canvas;
@include foundation-orbit;
@include foundation-pagination;
@include foundation-progress-bar;
// @include foundation-progress-element;
// @include foundation-meter-element;
@include foundation-slider;
@include foundation-sticky;
@include foundation-reveal;
@include foundation-switch;
@include foundation-table;
@include foundation-tabs;
@include foundation-thumbnail;
@include foundation-title-bar;
@include foundation-tooltip;
@include foundation-top-bar;
@include foundation-visibility-classes;
@include foundation-float-classes;
// @include foundation-flex-classes;
-@include motion-ui-transitions;
-@include motion-ui-animations;
+//@include motion-ui-transitions;
+//@include motion-ui-animations;
+
+.top-bar, .nav, .menu, .blog-header {
+ a {
+ color: $white !important;
+ }
+ a:hover {
+ color: $primary-color !important;
+ }
+ a.button:hover {
+ color: $white !important;
+ }
+}
+
+.top-bar-right {
+ letter-spacing: 0.1rem;
+}
+
+a.permalink, a.permalink:hover, a.permalink:visited {
+ color: $light-gray !important;
+}
+
+
+// page header elements
+.flex-container {
+ display: flex;
+ .flex-item {
+ padding-right: 1rem;
+ }
+}
.site-logo {
height: 32px;
}
+.index-header {
+ text-align: center;
+}
+
+// center all font-awesome icons
+#features {
+ [class^="fa-"], [class*="fa-"] {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ }
+}
+
.blog-post {
.post-meta {
- border-top: solid 1px $light-gray;
- border-bottom: solid 1px $light-gray;
+ font-size: $small-font-size;
+ margin-bottom: 2rem;
+ * {
+ display: inline-block;
+ }
+
+ }
+}
+
+.download-icons {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+}
+
+.all-downloads {
+ margin-top: 0.5rem;
+ text-align: center;
+}
+
+.sidebar {
+ ul {
+ list-style-type: none;
+ margin: 0;
+ }
+ img {
+ text-align: center;
+ }
+}
+
+.category-pages {
+ h5 {
+ text-transform: capitalize;
+ }
+ ul {
+ list-style-type: none;
+ margin: 0;
}
}
// news comments
.legacy-comments {
border-top: solid 2px $primary-color;
padding-top: 1em;
.comment, .comment-published {
.title {
font-size: 1.2rem;
}
.submitted {
font-size: 0.8rem;
- color: $dark-gray;
padding-bottom: 0.25rem;
}
.links, .links * {
display: none;
}
}
}
// the footer
.blog-footer {
+ text-align: center;
+ margin-top: 2rem;
padding-top: 2rem;
background-color: $primary-color;
+ background-color: $kde-blue;
color: $white;
a {
color: $white;
text-decoration: underline;
}
ul {
list-style-type: none;
margin-left: 0;
padding-left: 0;
}
-}
\ No newline at end of file
+}
+
+// the header
+.blog-header {
+ background-color: rgba(44,62,80,.5);
+ margin-bottom: 3rem;
+ box-shadow: 0 -3px 9px 3px rgba(0,0,0,0.5);
+}
+
+.blog-header .flex-container {
+ flex-direction: column;
+ text-align: center;
+}
+
+#digikam-logo img {
+ margin-top: 2rem;
+ height: 175px;
+}
+
+#digikam-title h1 {
+ margin-bottom: 0;
+ font-size: 3rem;
+}
+
+#digikam-download .button.large {
+ box-shadow: 0 4px 5px -2.5px rgba(0,0,0,0.5);
+}
+
+@media( min-width: 40em ){
+ .blog-header .flex-container {
+ flex-direction: row;
+ text-align: initial;
+ }
+ #digikam-logo img {
+ position: absolute;
+ top: 0px;
+ }
+ #digikam-title {
+ margin-left: 175px;
+ flex-grow: 1;
+ }
+ #digikam-download {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+}
+
+pre {
+ color: $light-gray;
+ background-color: $black;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ border: 1px solid #666;
+ white-space: pre;
+ font-family: consolas, "Liberation Mono", Courier, monospace;
+ font-size: 0.8em;
+ padding: 0.5em;
+ margin-bottom: 1rem;
+}
+
+pre code {
+ border: none;
+ white-space: pre;
+ padding: 0;
+ background-color: initial;
+ color: inherit;
+}
+
+h3+h4, h4+h5, h5+h6 {
+ margin-top: -$header-margin-bottom;
+}
+
+h3, h4, h5, h6 {
+ margin-top: 2rem;
+}
+
+main section {
+ margin-bottom: 3rem;
+}
+
+#features .row {
+ margin-bottom: 3rem;
+}
+
+/* style the hr element */
+hr {
+ border-top: 1px solid $secondary-color;
+}
diff --git a/themes/hugo-theme-digikam/static/css/app.css b/themes/hugo-theme-digikam/static/css/app.css
index 016918439..2aa05768a 100644
--- a/themes/hugo-theme-digikam/static/css/app.css
+++ b/themes/hugo-theme-digikam/static/css/app.css
@@ -1,4662 +1,7 @@
-@charset "UTF-8";
-/**
- * Foundation for Sites by ZURB
- * Version 6.3.1
- * foundation.zurb.com
- * Licensed under MIT Open Source
- */
-/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */
-/* Document
- ========================================================================== */
-/**
- * 1. Change the default font family in all browsers (opinionated).
- * 2. Correct the line height in all browsers.
- * 3. Prevent adjustments of font size after orientation changes in
- * IE on Windows Phone and in iOS.
- */
-html {
- font-family: sans-serif;
- /* 1 */
- line-height: 1.15;
- /* 2 */
- -ms-text-size-adjust: 100%;
- /* 3 */
- -webkit-text-size-adjust: 100%;
- /* 3 */ }
+@charset "UTF-8";@font-face{font-family:Oxygen;font-weight:400;font-style:normal;src:url(/fonts/Oxygen-regular/Oxygen-regular.eot);src:url(/fonts/Oxygen-regular/Oxygen-regular.eot?#iefix) format("embedded-opentype"),local("Oxygen"),local("Oxygen-regular"),url(/fonts/Oxygen-regular/Oxygen-regular.woff2) format("woff2"),url(/fonts/Oxygen-regular/Oxygen-regular.woff) format("woff"),url(/fonts/Oxygen-regular/Oxygen-regular.ttf) format("truetype"),url(/fonts/Oxygen-regular/Oxygen-regular.svg#Oxygen) format("svg")}@font-face{font-family:Oxygen;font-weight:700;font-style:normal;src:url(/fonts/Oxygen-700/Oxygen-700.eot);src:url(/fonts/Oxygen-700/Oxygen-700.eot?#iefix) format("embedded-opentype"),local("Oxygen Bold"),local("Oxygen-700"),url(/fonts/Oxygen-700/Oxygen-700.woff2) format("woff2"),url(/fonts/Oxygen-700/Oxygen-700.woff) format("woff"),url(/fonts/Oxygen-700/Oxygen-700.ttf) format("truetype"),url(/fonts/Oxygen-700/Oxygen-700.svg#Oxygen) format("svg")}@font-face{font-family:Fira Sans;font-weight:400;font-style:normal;src:url(/fonts/Fira-Sans-regular/Fira-Sans-regular.eot);src:url(/fonts/Fira-Sans-regular/Fira-Sans-regular.eot?#iefix) format("embedded-opentype"),local("Fira Sans Regular"),local("Fira-Sans-regular"),url(/fonts/Fira-Sans-regular/Fira-Sans-regular.woff2) format("woff2"),url(/fonts/Fira-Sans-regular/Fira-Sans-regular.woff) format("woff"),url(/fonts/Fira-Sans-regular/Fira-Sans-regular.ttf) format("truetype"),url(/fonts/Fira-Sans-regular/Fira-Sans-regular.svg#FiraSans) format("svg")}@font-face{font-family:Fira Sans;font-weight:700;font-style:normal;src:url(/fonts/Fira-Sans-700/Fira-Sans-700.eot);src:url(/fonts/Fira-Sans-700/Fira-Sans-700.eot?#iefix) format("embedded-opentype"),local("Fira Sans Bold"),local("Fira-Sans-700"),url(/fonts/Fira-Sans-700/Fira-Sans-700.woff2) format("woff2"),url(/fonts/Fira-Sans-700/Fira-Sans-700.woff) format("woff"),url(/fonts/Fira-Sans-700/Fira-Sans-700.ttf) format("truetype"),url(/fonts/Fira-Sans-700/Fira-Sans-700.svg#FiraSans) format("svg")}
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.7.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.7.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.7.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.7.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
-/* Sections
- ========================================================================== */
-/**
- * Remove the margin in all browsers (opinionated).
- */
-body {
- margin: 0; }
-
-/**
- * Add the correct display in IE 9-.
- */
-article,
-aside,
-footer,
-header,
-nav,
-section {
- display: block; }
-
-/**
- * Correct the font size and margin on `h1` elements within `section` and
- * `article` contexts in Chrome, Firefox, and Safari.
- */
-h1 {
- font-size: 2em;
- margin: 0.67em 0; }
-
-/* Grouping content
- ========================================================================== */
-/**
- * Add the correct display in IE 9-.
- */
-figcaption,
-figure {
- display: block; }
-
-/**
- * Add the correct margin in IE 8.
- */
-figure {
- margin: 1em 40px; }
-
-/**
- * 1. Add the correct box sizing in Firefox.
- * 2. Show the overflow in Edge and IE.
- */
-hr {
- box-sizing: content-box;
- /* 1 */
- height: 0;
- /* 1 */
- overflow: visible;
- /* 2 */ }
-
-/**
- * Add the correct display in IE.
- */
-main {
- display: block; }
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-pre {
- font-family: monospace, monospace;
- /* 1 */
- font-size: 1em;
- /* 2 */ }
-
-/* Links
- ========================================================================== */
-/**
- * 1. Remove the gray background on active links in IE 10.
- * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
- */
-a {
- background-color: transparent;
- /* 1 */
- -webkit-text-decoration-skip: objects;
- /* 2 */ }
-
-/**
- * Remove the outline on focused links when they are also active or hovered
- * in all browsers (opinionated).
- */
-a:active,
-a:hover {
- outline-width: 0; }
-
-/* Text-level semantics
- ========================================================================== */
-/**
- * 1. Remove the bottom border in Firefox 39-.
- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
- */
-abbr[title] {
- border-bottom: none;
- /* 1 */
- text-decoration: underline;
- /* 2 */
- text-decoration: underline dotted;
- /* 2 */ }
-
-/**
- * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
- */
-b,
-strong {
- font-weight: inherit; }
-
-/**
- * Add the correct font weight in Chrome, Edge, and Safari.
- */
-b,
-strong {
- font-weight: bolder; }
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-code,
-kbd,
-samp {
- font-family: monospace, monospace;
- /* 1 */
- font-size: 1em;
- /* 2 */ }
-
-/**
- * Add the correct font style in Android 4.3-.
- */
-dfn {
- font-style: italic; }
-
-/**
- * Add the correct background and color in IE 9-.
- */
-mark {
- background-color: #ff0;
- color: #000; }
-
-/**
- * Add the correct font size in all browsers.
- */
-small {
- font-size: 80%; }
-
-/**
- * Prevent `sub` and `sup` elements from affecting the line height in
- * all browsers.
- */
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline; }
-
-sub {
- bottom: -0.25em; }
-
-sup {
- top: -0.5em; }
-
-/* Embedded content
- ========================================================================== */
-/**
- * Add the correct display in IE 9-.
- */
-audio,
-video {
- display: inline-block; }
-
-/**
- * Add the correct display in iOS 4-7.
- */
-audio:not([controls]) {
- display: none;
- height: 0; }
-
-/**
- * Remove the border on images inside links in IE 10-.
- */
-img {
- border-style: none; }
-
-/**
- * Hide the overflow in IE.
- */
-svg:not(:root) {
- overflow: hidden; }
-
-/* Forms
- ========================================================================== */
-/**
- * 1. Change the font styles in all browsers (opinionated).
- * 2. Remove the margin in Firefox and Safari.
- */
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: sans-serif;
- /* 1 */
- font-size: 100%;
- /* 1 */
- line-height: 1.15;
- /* 1 */
- margin: 0;
- /* 2 */ }
-
-/**
- * Show the overflow in IE.
- */
-button {
- overflow: visible; }
-
-/**
- * Remove the inheritance of text transform in Edge, Firefox, and IE.
- * 1. Remove the inheritance of text transform in Firefox.
- */
-button,
-select {
- /* 1 */
- text-transform: none; }
-
-/**
- * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
- * controls in Android 4.
- * 2. Correct the inability to style clickable types in iOS and Safari.
- */
-button,
-html [type="button"],
-[type="reset"],
-[type="submit"] {
- -webkit-appearance: button;
- /* 2 */ }
-
-button,
-[type="button"],
-[type="reset"],
-[type="submit"] {
- /**
- * Remove the inner border and padding in Firefox.
- */
- /**
- * Restore the focus styles unset by the previous rule.
- */ }
- button::-moz-focus-inner,
- [type="button"]::-moz-focus-inner,
- [type="reset"]::-moz-focus-inner,
- [type="submit"]::-moz-focus-inner {
- border-style: none;
- padding: 0; }
- button:-moz-focusring,
- [type="button"]:-moz-focusring,
- [type="reset"]:-moz-focusring,
- [type="submit"]:-moz-focusring {
- outline: 1px dotted ButtonText; }
-
-/**
- * Show the overflow in Edge.
- */
-input {
- overflow: visible; }
-
-/**
- * 1. Add the correct box sizing in IE 10-.
- * 2. Remove the padding in IE 10-.
- */
-[type="checkbox"],
-[type="radio"] {
- box-sizing: border-box;
- /* 1 */
- padding: 0;
- /* 2 */ }
-
-/**
- * Correct the cursor style of increment and decrement buttons in Chrome.
- */
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
- height: auto; }
-
-/**
- * 1. Correct the odd appearance in Chrome and Safari.
- * 2. Correct the outline style in Safari.
- */
-[type="search"] {
- -webkit-appearance: textfield;
- /* 1 */
- outline-offset: -2px;
- /* 2 */
- /**
- * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
- */ }
- [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration {
- -webkit-appearance: none; }
-
-/**
- * 1. Correct the inability to style clickable types in iOS and Safari.
- * 2. Change font properties to `inherit` in Safari.
- */
-::-webkit-file-upload-button {
- -webkit-appearance: button;
- /* 1 */
- font: inherit;
- /* 2 */ }
-
-/**
- * Change the border, margin, and padding in all browsers (opinionated).
- */
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em; }
-
-/**
- * 1. Correct the text wrapping in Edge and IE.
- * 2. Correct the color inheritance from `fieldset` elements in IE.
- * 3. Remove the padding so developers are not caught out when they zero out
- * `fieldset` elements in all browsers.
- */
-legend {
- box-sizing: border-box;
- /* 1 */
- display: table;
- /* 1 */
- max-width: 100%;
- /* 1 */
- padding: 0;
- /* 3 */
- color: inherit;
- /* 2 */
- white-space: normal;
- /* 1 */ }
-
-/**
- * 1. Add the correct display in IE 9-.
- * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
- */
-progress {
- display: inline-block;
- /* 1 */
- vertical-align: baseline;
- /* 2 */ }
-
-/**
- * Remove the default vertical scrollbar in IE.
- */
-textarea {
- overflow: auto; }
-
-/* Interactive
- ========================================================================== */
-/*
- * Add the correct display in Edge, IE, and Firefox.
- */
-details {
- display: block; }
-
-/*
- * Add the correct display in all browsers.
- */
-summary {
- display: list-item; }
-
-/*
- * Add the correct display in IE 9-.
- */
-menu {
- display: block; }
-
-/* Scripting
- ========================================================================== */
-/**
- * Add the correct display in IE 9-.
- */
-canvas {
- display: inline-block; }
-
-/**
- * Add the correct display in IE.
- */
-template {
- display: none; }
-
-/* Hidden
- ========================================================================== */
-/**
- * Add the correct display in IE 10-.
- */
-[hidden] {
- display: none; }
-
-.foundation-mq {
- font-family: "small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"; }
-
-html {
- box-sizing: border-box;
- font-size: 100%; }
-
-*,
-*::before,
-*::after {
- box-sizing: inherit; }
-
-body {
- margin: 0;
- padding: 0;
- background: #fefefe;
- font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
- font-weight: normal;
- line-height: 1.5;
- color: #0a0a0a;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale; }
-
-img {
- display: inline-block;
- vertical-align: middle;
- max-width: 100%;
- height: auto;
- -ms-interpolation-mode: bicubic; }
-
-textarea {
- height: auto;
- min-height: 50px;
- border-radius: 0; }
-
-select {
- box-sizing: border-box;
- width: 100%;
- border-radius: 0; }
-
-.map_canvas img,
-.map_canvas embed,
-.map_canvas object,
-.mqa-display img,
-.mqa-display embed,
-.mqa-display object {
- max-width: none !important; }
-
-button {
- padding: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- border: 0;
- border-radius: 0;
- background: transparent;
- line-height: 1; }
- [data-whatinput='mouse'] button {
- outline: 0; }
-
-pre {
- overflow: auto; }
-
-.is-visible {
- display: block !important; }
-
-.is-hidden {
- display: none !important; }
-
-.row {
- max-width: 75rem;
- margin-right: auto;
- margin-left: auto; }
- .row::before, .row::after {
- display: table;
- content: ' '; }
- .row::after {
- clear: both; }
- .row.collapse > .column, .row.collapse > .columns {
- padding-right: 0;
- padding-left: 0; }
- .row .row {
- margin-right: -0.625rem;
- margin-left: -0.625rem; }
- @media print, screen and (min-width: 40em) {
- .row .row {
- margin-right: -0.9375rem;
- margin-left: -0.9375rem; } }
- @media print, screen and (min-width: 64em) {
- .row .row {
- margin-right: -0.9375rem;
- margin-left: -0.9375rem; } }
- .row .row.collapse {
- margin-right: 0;
- margin-left: 0; }
- .row.expanded {
- max-width: none; }
- .row.expanded .row {
- margin-right: auto;
- margin-left: auto; }
- .row:not(.expanded) .row {
- max-width: none; }
- .row.gutter-small > .column, .row.gutter-small > .columns {
- padding-right: 0.625rem;
- padding-left: 0.625rem; }
- .row.gutter-medium > .column, .row.gutter-medium > .columns {
- padding-right: 0.9375rem;
- padding-left: 0.9375rem; }
-
-.column, .columns {
- width: 100%;
- float: left;
- padding-right: 0.625rem;
- padding-left: 0.625rem; }
- @media print, screen and (min-width: 40em) {
- .column, .columns {
- padding-right: 0.9375rem;
- padding-left: 0.9375rem; } }
- .column:last-child:not(:first-child), .columns:last-child:not(:first-child) {
- float: right; }
- .column.end:last-child:last-child, .end.columns:last-child:last-child {
- float: left; }
-
-.column.row.row, .row.row.columns {
- float: none; }
-
-.row .column.row.row, .row .row.row.columns {
- margin-right: 0;
- margin-left: 0;
- padding-right: 0;
- padding-left: 0; }
-
-.small-1 {
- width: 8.33333%; }
-
-.small-push-1 {
- position: relative;
- left: 8.33333%; }
-
-.small-pull-1 {
- position: relative;
- left: -8.33333%; }
-
-.small-offset-0 {
- margin-left: 0%; }
-
-.small-2 {
- width: 16.66667%; }
-
-.small-push-2 {
- position: relative;
- left: 16.66667%; }
-
-.small-pull-2 {
- position: relative;
- left: -16.66667%; }
-
-.small-offset-1 {
- margin-left: 8.33333%; }
-
-.small-3 {
- width: 25%; }
-
-.small-push-3 {
- position: relative;
- left: 25%; }
-
-.small-pull-3 {
- position: relative;
- left: -25%; }
-
-.small-offset-2 {
- margin-left: 16.66667%; }
-
-.small-4 {
- width: 33.33333%; }
-
-.small-push-4 {
- position: relative;
- left: 33.33333%; }
-
-.small-pull-4 {
- position: relative;
- left: -33.33333%; }
-
-.small-offset-3 {
- margin-left: 25%; }
-
-.small-5 {
- width: 41.66667%; }
-
-.small-push-5 {
- position: relative;
- left: 41.66667%; }
-
-.small-pull-5 {
- position: relative;
- left: -41.66667%; }
-
-.small-offset-4 {
- margin-left: 33.33333%; }
-
-.small-6 {
- width: 50%; }
-
-.small-push-6 {
- position: relative;
- left: 50%; }
-
-.small-pull-6 {
- position: relative;
- left: -50%; }
-
-.small-offset-5 {
- margin-left: 41.66667%; }
-
-.small-7 {
- width: 58.33333%; }
-
-.small-push-7 {
- position: relative;
- left: 58.33333%; }
-
-.small-pull-7 {
- position: relative;
- left: -58.33333%; }
-
-.small-offset-6 {
- margin-left: 50%; }
-
-.small-8 {
- width: 66.66667%; }
-
-.small-push-8 {
- position: relative;
- left: 66.66667%; }
-
-.small-pull-8 {
- position: relative;
- left: -66.66667%; }
-
-.small-offset-7 {
- margin-left: 58.33333%; }
-
-.small-9 {
- width: 75%; }
-
-.small-push-9 {
- position: relative;
- left: 75%; }
-
-.small-pull-9 {
- position: relative;
- left: -75%; }
-
-.small-offset-8 {
- margin-left: 66.66667%; }
-
-.small-10 {
- width: 83.33333%; }
-
-.small-push-10 {
- position: relative;
- left: 83.33333%; }
-
-.small-pull-10 {
- position: relative;
- left: -83.33333%; }
-
-.small-offset-9 {
- margin-left: 75%; }
-
-.small-11 {
- width: 91.66667%; }
-
-.small-push-11 {
- position: relative;
- left: 91.66667%; }
-
-.small-pull-11 {
- position: relative;
- left: -91.66667%; }
-
-.small-offset-10 {
- margin-left: 83.33333%; }
-
-.small-12 {
- width: 100%; }
-
-.small-offset-11 {
- margin-left: 91.66667%; }
-
-.small-up-1 > .column, .small-up-1 > .columns {
- float: left;
- width: 100%; }
- .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) {
- clear: both; }
- .small-up-1 > .column:last-child, .small-up-1 > .columns:last-child {
- float: left; }
-
-.small-up-2 > .column, .small-up-2 > .columns {
- float: left;
- width: 50%; }
- .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) {
- clear: both; }
- .small-up-2 > .column:last-child, .small-up-2 > .columns:last-child {
- float: left; }
-
-.small-up-3 > .column, .small-up-3 > .columns {
- float: left;
- width: 33.33333%; }
- .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) {
- clear: both; }
- .small-up-3 > .column:last-child, .small-up-3 > .columns:last-child {
- float: left; }
-
-.small-up-4 > .column, .small-up-4 > .columns {
- float: left;
- width: 25%; }
- .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) {
- clear: both; }
- .small-up-4 > .column:last-child, .small-up-4 > .columns:last-child {
- float: left; }
-
-.small-up-5 > .column, .small-up-5 > .columns {
- float: left;
- width: 20%; }
- .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) {
- clear: both; }
- .small-up-5 > .column:last-child, .small-up-5 > .columns:last-child {
- float: left; }
-
-.small-up-6 > .column, .small-up-6 > .columns {
- float: left;
- width: 16.66667%; }
- .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) {
- clear: both; }
- .small-up-6 > .column:last-child, .small-up-6 > .columns:last-child {
- float: left; }
-
-.small-up-7 > .column, .small-up-7 > .columns {
- float: left;
- width: 14.28571%; }
- .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) {
- clear: both; }
- .small-up-7 > .column:last-child, .small-up-7 > .columns:last-child {
- float: left; }
-
-.small-up-8 > .column, .small-up-8 > .columns {
- float: left;
- width: 12.5%; }
- .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) {
- clear: none; }
- .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) {
- clear: both; }
- .small-up-8 > .column:last-child, .small-up-8 > .columns:last-child {
- float: left; }
-
-.small-collapse > .column, .small-collapse > .columns {
- padding-right: 0;
- padding-left: 0; }
-
-.small-collapse .row {
- margin-right: 0;
- margin-left: 0; }
-
-.expanded.row .small-collapse.row {
- margin-right: 0;
- margin-left: 0; }
-
-.small-uncollapse > .column, .small-uncollapse > .columns {
- padding-right: 0.625rem;
- padding-left: 0.625rem; }
-
-.small-centered {
- margin-right: auto;
- margin-left: auto; }
- .small-centered, .small-centered:last-child:not(:first-child) {
- float: none;
- clear: both; }
-
-.small-uncentered,
-.small-push-0,
-.small-pull-0 {
- position: static;
- float: left;
- margin-right: 0;
- margin-left: 0; }
-
-@media print, screen and (min-width: 40em) {
- .medium-1 {
- width: 8.33333%; }
- .medium-push-1 {
- position: relative;
- left: 8.33333%; }
- .medium-pull-1 {
- position: relative;
- left: -8.33333%; }
- .medium-offset-0 {
- margin-left: 0%; }
- .medium-2 {
- width: 16.66667%; }
- .medium-push-2 {
- position: relative;
- left: 16.66667%; }
- .medium-pull-2 {
- position: relative;
- left: -16.66667%; }
- .medium-offset-1 {
- margin-left: 8.33333%; }
- .medium-3 {
- width: 25%; }
- .medium-push-3 {
- position: relative;
- left: 25%; }
- .medium-pull-3 {
- position: relative;
- left: -25%; }
- .medium-offset-2 {
- margin-left: 16.66667%; }
- .medium-4 {
- width: 33.33333%; }
- .medium-push-4 {
- position: relative;
- left: 33.33333%; }
- .medium-pull-4 {
- position: relative;
- left: -33.33333%; }
- .medium-offset-3 {
- margin-left: 25%; }
- .medium-5 {
- width: 41.66667%; }
- .medium-push-5 {
- position: relative;
- left: 41.66667%; }
- .medium-pull-5 {
- position: relative;
- left: -41.66667%; }
- .medium-offset-4 {
- margin-left: 33.33333%; }
- .medium-6 {
- width: 50%; }
- .medium-push-6 {
- position: relative;
- left: 50%; }
- .medium-pull-6 {
- position: relative;
- left: -50%; }
- .medium-offset-5 {
- margin-left: 41.66667%; }
- .medium-7 {
- width: 58.33333%; }
- .medium-push-7 {
- position: relative;
- left: 58.33333%; }
- .medium-pull-7 {
- position: relative;
- left: -58.33333%; }
- .medium-offset-6 {
- margin-left: 50%; }
- .medium-8 {
- width: 66.66667%; }
- .medium-push-8 {
- position: relative;
- left: 66.66667%; }
- .medium-pull-8 {
- position: relative;
- left: -66.66667%; }
- .medium-offset-7 {
- margin-left: 58.33333%; }
- .medium-9 {
- width: 75%; }
- .medium-push-9 {
- position: relative;
- left: 75%; }
- .medium-pull-9 {
- position: relative;
- left: -75%; }
- .medium-offset-8 {
- margin-left: 66.66667%; }
- .medium-10 {
- width: 83.33333%; }
- .medium-push-10 {
- position: relative;
- left: 83.33333%; }
- .medium-pull-10 {
- position: relative;
- left: -83.33333%; }
- .medium-offset-9 {
- margin-left: 75%; }
- .medium-11 {
- width: 91.66667%; }
- .medium-push-11 {
- position: relative;
- left: 91.66667%; }
- .medium-pull-11 {
- position: relative;
- left: -91.66667%; }
- .medium-offset-10 {
- margin-left: 83.33333%; }
- .medium-12 {
- width: 100%; }
- .medium-offset-11 {
- margin-left: 91.66667%; }
- .medium-up-1 > .column, .medium-up-1 > .columns {
- float: left;
- width: 100%; }
- .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) {
- clear: both; }
- .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child {
- float: left; }
- .medium-up-2 > .column, .medium-up-2 > .columns {
- float: left;
- width: 50%; }
- .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) {
- clear: both; }
- .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child {
- float: left; }
- .medium-up-3 > .column, .medium-up-3 > .columns {
- float: left;
- width: 33.33333%; }
- .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) {
- clear: both; }
- .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child {
- float: left; }
- .medium-up-4 > .column, .medium-up-4 > .columns {
- float: left;
- width: 25%; }
- .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) {
- clear: both; }
- .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child {
- float: left; }
- .medium-up-5 > .column, .medium-up-5 > .columns {
- float: left;
- width: 20%; }
- .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) {
- clear: both; }
- .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child {
- float: left; }
- .medium-up-6 > .column, .medium-up-6 > .columns {
- float: left;
- width: 16.66667%; }
- .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) {
- clear: both; }
- .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child {
- float: left; }
- .medium-up-7 > .column, .medium-up-7 > .columns {
- float: left;
- width: 14.28571%; }
- .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) {
- clear: both; }
- .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child {
- float: left; }
- .medium-up-8 > .column, .medium-up-8 > .columns {
- float: left;
- width: 12.5%; }
- .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) {
- clear: none; }
- .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) {
- clear: both; }
- .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child {
- float: left; }
- .medium-collapse > .column, .medium-collapse > .columns {
- padding-right: 0;
- padding-left: 0; }
- .medium-collapse .row {
- margin-right: 0;
- margin-left: 0; }
- .expanded.row .medium-collapse.row {
- margin-right: 0;
- margin-left: 0; }
- .medium-uncollapse > .column, .medium-uncollapse > .columns {
- padding-right: 0.9375rem;
- padding-left: 0.9375rem; }
- .medium-centered {
- margin-right: auto;
- margin-left: auto; }
- .medium-centered, .medium-centered:last-child:not(:first-child) {
- float: none;
- clear: both; }
- .medium-uncentered,
- .medium-push-0,
- .medium-pull-0 {
- position: static;
- float: left;
- margin-right: 0;
- margin-left: 0; } }
-
-@media print, screen and (min-width: 64em) {
- .large-1 {
- width: 8.33333%; }
- .large-push-1 {
- position: relative;
- left: 8.33333%; }
- .large-pull-1 {
- position: relative;
- left: -8.33333%; }
- .large-offset-0 {
- margin-left: 0%; }
- .large-2 {
- width: 16.66667%; }
- .large-push-2 {
- position: relative;
- left: 16.66667%; }
- .large-pull-2 {
- position: relative;
- left: -16.66667%; }
- .large-offset-1 {
- margin-left: 8.33333%; }
- .large-3 {
- width: 25%; }
- .large-push-3 {
- position: relative;
- left: 25%; }
- .large-pull-3 {
- position: relative;
- left: -25%; }
- .large-offset-2 {
- margin-left: 16.66667%; }
- .large-4 {
- width: 33.33333%; }
- .large-push-4 {
- position: relative;
- left: 33.33333%; }
- .large-pull-4 {
- position: relative;
- left: -33.33333%; }
- .large-offset-3 {
- margin-left: 25%; }
- .large-5 {
- width: 41.66667%; }
- .large-push-5 {
- position: relative;
- left: 41.66667%; }
- .large-pull-5 {
- position: relative;
- left: -41.66667%; }
- .large-offset-4 {
- margin-left: 33.33333%; }
- .large-6 {
- width: 50%; }
- .large-push-6 {
- position: relative;
- left: 50%; }
- .large-pull-6 {
- position: relative;
- left: -50%; }
- .large-offset-5 {
- margin-left: 41.66667%; }
- .large-7 {
- width: 58.33333%; }
- .large-push-7 {
- position: relative;
- left: 58.33333%; }
- .large-pull-7 {
- position: relative;
- left: -58.33333%; }
- .large-offset-6 {
- margin-left: 50%; }
- .large-8 {
- width: 66.66667%; }
- .large-push-8 {
- position: relative;
- left: 66.66667%; }
- .large-pull-8 {
- position: relative;
- left: -66.66667%; }
- .large-offset-7 {
- margin-left: 58.33333%; }
- .large-9 {
- width: 75%; }
- .large-push-9 {
- position: relative;
- left: 75%; }
- .large-pull-9 {
- position: relative;
- left: -75%; }
- .large-offset-8 {
- margin-left: 66.66667%; }
- .large-10 {
- width: 83.33333%; }
- .large-push-10 {
- position: relative;
- left: 83.33333%; }
- .large-pull-10 {
- position: relative;
- left: -83.33333%; }
- .large-offset-9 {
- margin-left: 75%; }
- .large-11 {
- width: 91.66667%; }
- .large-push-11 {
- position: relative;
- left: 91.66667%; }
- .large-pull-11 {
- position: relative;
- left: -91.66667%; }
- .large-offset-10 {
- margin-left: 83.33333%; }
- .large-12 {
- width: 100%; }
- .large-offset-11 {
- margin-left: 91.66667%; }
- .large-up-1 > .column, .large-up-1 > .columns {
- float: left;
- width: 100%; }
- .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) {
- clear: both; }
- .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child {
- float: left; }
- .large-up-2 > .column, .large-up-2 > .columns {
- float: left;
- width: 50%; }
- .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) {
- clear: both; }
- .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child {
- float: left; }
- .large-up-3 > .column, .large-up-3 > .columns {
- float: left;
- width: 33.33333%; }
- .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) {
- clear: both; }
- .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child {
- float: left; }
- .large-up-4 > .column, .large-up-4 > .columns {
- float: left;
- width: 25%; }
- .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) {
- clear: both; }
- .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child {
- float: left; }
- .large-up-5 > .column, .large-up-5 > .columns {
- float: left;
- width: 20%; }
- .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) {
- clear: both; }
- .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child {
- float: left; }
- .large-up-6 > .column, .large-up-6 > .columns {
- float: left;
- width: 16.66667%; }
- .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) {
- clear: both; }
- .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child {
- float: left; }
- .large-up-7 > .column, .large-up-7 > .columns {
- float: left;
- width: 14.28571%; }
- .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) {
- clear: both; }
- .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child {
- float: left; }
- .large-up-8 > .column, .large-up-8 > .columns {
- float: left;
- width: 12.5%; }
- .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) {
- clear: none; }
- .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) {
- clear: both; }
- .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child {
- float: left; }
- .large-collapse > .column, .large-collapse > .columns {
- padding-right: 0;
- padding-left: 0; }
- .large-collapse .row {
- margin-right: 0;
- margin-left: 0; }
- .expanded.row .large-collapse.row {
- margin-right: 0;
- margin-left: 0; }
- .large-uncollapse > .column, .large-uncollapse > .columns {
- padding-right: 0.9375rem;
- padding-left: 0.9375rem; }
- .large-centered {
- margin-right: auto;
- margin-left: auto; }
- .large-centered, .large-centered:last-child:not(:first-child) {
- float: none;
- clear: both; }
- .large-uncentered,
- .large-push-0,
- .large-pull-0 {
- position: static;
- float: left;
- margin-right: 0;
- margin-left: 0; } }
-
-.column-block {
- margin-bottom: 1.25rem; }
- .column-block > :last-child {
- margin-bottom: 0; }
- @media print, screen and (min-width: 40em) {
- .column-block {
- margin-bottom: 1.875rem; }
- .column-block > :last-child {
- margin-bottom: 0; } }
-
-div,
-dl,
-dt,
-dd,
-ul,
-ol,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-pre,
-form,
-p,
-blockquote,
-th,
-td {
- margin: 0;
- padding: 0; }
-
-p {
- margin-bottom: 1rem;
- font-size: inherit;
- line-height: 1.6;
- text-rendering: optimizeLegibility; }
-
-em,
-i {
- font-style: italic;
- line-height: inherit; }
-
-strong,
-b {
- font-weight: bold;
- line-height: inherit; }
-
-small {
- font-size: 80%;
- line-height: inherit; }
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- color: inherit;
- text-rendering: optimizeLegibility; }
- h1 small,
- h2 small,
- h3 small,
- h4 small,
- h5 small,
- h6 small {
- line-height: 0;
- color: #cacaca; }
-
-h1 {
- font-size: 1.5rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-h2 {
- font-size: 1.25rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-h3 {
- font-size: 1.1875rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-h4 {
- font-size: 1.125rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-h5 {
- font-size: 1.0625rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-h6 {
- font-size: 1rem;
- line-height: 1.4;
- margin-top: 0;
- margin-bottom: 0.5rem; }
-
-@media print, screen and (min-width: 40em) {
- h1 {
- font-size: 3rem; }
- h2 {
- font-size: 2.5rem; }
- h3 {
- font-size: 1.9375rem; }
- h4 {
- font-size: 1.5625rem; }
- h5 {
- font-size: 1.25rem; }
- h6 {
- font-size: 1rem; } }
-
-a {
- line-height: inherit;
- color: #1779ba;
- text-decoration: none;
- cursor: pointer; }
- a:hover, a:focus {
- color: #1468a0; }
- a img {
- border: 0; }
-
-hr {
- clear: both;
- max-width: 75rem;
- height: 0;
- margin: 1.25rem auto;
- border-top: 0;
- border-right: 0;
- border-bottom: 1px solid #cacaca;
- border-left: 0; }
-
-ul,
-ol,
-dl {
- margin-bottom: 1rem;
- list-style-position: outside;
- line-height: 1.6; }
-
-li {
- font-size: inherit; }
-
-ul {
- margin-left: 1.25rem;
- list-style-type: disc; }
-
-ol {
- margin-left: 1.25rem; }
-
-ul ul, ol ul, ul ol, ol ol {
- margin-left: 1.25rem;
- margin-bottom: 0; }
-
-dl {
- margin-bottom: 1rem; }
- dl dt {
- margin-bottom: 0.3rem;
- font-weight: bold; }
-
-blockquote {
- margin: 0 0 1rem;
- padding: 0.5625rem 1.25rem 0 1.1875rem;
- border-left: 1px solid #cacaca; }
- blockquote, blockquote p {
- line-height: 1.6;
- color: #8a8a8a; }
-
-cite {
- display: block;
- font-size: 0.8125rem;
- color: #8a8a8a; }
- cite:before {
- content: "— "; }
-
-abbr {
- border-bottom: 1px dotted #0a0a0a;
- color: #0a0a0a;
- cursor: help; }
-
-figure {
- margin: 0; }
-
-code {
- padding: 0.125rem 0.3125rem 0.0625rem;
- border: 1px solid #cacaca;
- background-color: #e6e6e6;
- font-family: Consolas, "Liberation Mono", Courier, monospace;
- font-weight: normal;
- color: #0a0a0a; }
-
-kbd {
- margin: 0;
- padding: 0.125rem 0.25rem 0;
- background-color: #e6e6e6;
- font-family: Consolas, "Liberation Mono", Courier, monospace;
- color: #0a0a0a; }
-
-.subheader {
- margin-top: 0.2rem;
- margin-bottom: 0.5rem;
- font-weight: normal;
- line-height: 1.4;
- color: #8a8a8a; }
-
-.lead {
- font-size: 125%;
- line-height: 1.6; }
-
-.stat {
- font-size: 2.5rem;
- line-height: 1; }
- p + .stat {
- margin-top: -1rem; }
-
-.no-bullet {
- margin-left: 0;
- list-style: none; }
-
-.text-left {
- text-align: left; }
-
-.text-right {
- text-align: right; }
-
-.text-center {
- text-align: center; }
-
-.text-justify {
- text-align: justify; }
-
-@media print, screen and (min-width: 40em) {
- .medium-text-left {
- text-align: left; }
- .medium-text-right {
- text-align: right; }
- .medium-text-center {
- text-align: center; }
- .medium-text-justify {
- text-align: justify; } }
-
-@media print, screen and (min-width: 64em) {
- .large-text-left {
- text-align: left; }
- .large-text-right {
- text-align: right; }
- .large-text-center {
- text-align: center; }
- .large-text-justify {
- text-align: justify; } }
-
-.show-for-print {
- display: none !important; }
-
-@media print {
- * {
- background: transparent !important;
- box-shadow: none !important;
- color: black !important;
- text-shadow: none !important; }
- .show-for-print {
- display: block !important; }
- .hide-for-print {
- display: none !important; }
- table.show-for-print {
- display: table !important; }
- thead.show-for-print {
- display: table-header-group !important; }
- tbody.show-for-print {
- display: table-row-group !important; }
- tr.show-for-print {
- display: table-row !important; }
- td.show-for-print {
- display: table-cell !important; }
- th.show-for-print {
- display: table-cell !important; }
- a,
- a:visited {
- text-decoration: underline; }
- a[href]:after {
- content: " (" attr(href) ")"; }
- .ir a:after,
- a[href^='javascript:']:after,
- a[href^='#']:after {
- content: ''; }
- abbr[title]:after {
- content: " (" attr(title) ")"; }
- pre,
- blockquote {
- border: 1px solid #8a8a8a;
- page-break-inside: avoid; }
- thead {
- display: table-header-group; }
- tr,
- img {
- page-break-inside: avoid; }
- img {
- max-width: 100% !important; }
- @page {
- margin: 0.5cm; }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3; }
- h2,
- h3 {
- page-break-after: avoid; }
- .print-break-inside {
- page-break-inside: auto; } }
-
-.button {
- display: inline-block;
- vertical-align: middle;
- margin: 0 0 1rem 0;
- padding: 0.85em 1em;
- -webkit-appearance: none;
- border: 1px solid transparent;
- border-radius: 0;
- transition: background-color 0.25s ease-out, color 0.25s ease-out;
- font-size: 0.9rem;
- line-height: 1;
- text-align: center;
- cursor: pointer;
- background-color: #1779ba;
- color: #fefefe; }
- [data-whatinput='mouse'] .button {
- outline: 0; }
- .button:hover, .button:focus {
- background-color: #14679e;
- color: #fefefe; }
- .button.tiny {
- font-size: 0.6rem; }
- .button.small {
- font-size: 0.75rem; }
- .button.large {
- font-size: 1.25rem; }
- .button.expanded {
- display: block;
- width: 100%;
- margin-right: 0;
- margin-left: 0; }
- .button.primary {
- background-color: #1779ba;
- color: #fefefe; }
- .button.primary:hover, .button.primary:focus {
- background-color: #126195;
- color: #fefefe; }
- .button.secondary {
- background-color: #767676;
- color: #fefefe; }
- .button.secondary:hover, .button.secondary:focus {
- background-color: #5e5e5e;
- color: #fefefe; }
- .button.success {
- background-color: #3adb76;
- color: #0a0a0a; }
- .button.success:hover, .button.success:focus {
- background-color: #22bb5b;
- color: #0a0a0a; }
- .button.warning {
- background-color: #ffae00;
- color: #0a0a0a; }
- .button.warning:hover, .button.warning:focus {
- background-color: #cc8b00;
- color: #0a0a0a; }
- .button.alert {
- background-color: #cc4b37;
- color: #fefefe; }
- .button.alert:hover, .button.alert:focus {
- background-color: #a53b2a;
- color: #fefefe; }
- .button.hollow {
- border: 1px solid #1779ba;
- color: #1779ba; }
- .button.hollow, .button.hollow:hover, .button.hollow:focus {
- background-color: transparent; }
- .button.hollow:hover, .button.hollow:focus {
- border-color: #0c3d5d;
- color: #0c3d5d; }
- .button.hollow.primary {
- border: 1px solid #1779ba;
- color: #1779ba; }
- .button.hollow.primary:hover, .button.hollow.primary:focus {
- border-color: #0c3d5d;
- color: #0c3d5d; }
- .button.hollow.secondary {
- border: 1px solid #767676;
- color: #767676; }
- .button.hollow.secondary:hover, .button.hollow.secondary:focus {
- border-color: #3b3b3b;
- color: #3b3b3b; }
- .button.hollow.success {
- border: 1px solid #3adb76;
- color: #3adb76; }
- .button.hollow.success:hover, .button.hollow.success:focus {
- border-color: #157539;
- color: #157539; }
- .button.hollow.warning {
- border: 1px solid #ffae00;
- color: #ffae00; }
- .button.hollow.warning:hover, .button.hollow.warning:focus {
- border-color: #805700;
- color: #805700; }
- .button.hollow.alert {
- border: 1px solid #cc4b37;
- color: #cc4b37; }
- .button.hollow.alert:hover, .button.hollow.alert:focus {
- border-color: #67251a;
- color: #67251a; }
- .button.disabled, .button[disabled] {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled, .button.disabled:hover, .button.disabled:focus, .button[disabled], .button[disabled]:hover, .button[disabled]:focus {
- background-color: #1779ba;
- color: #fefefe; }
- .button.disabled.primary, .button[disabled].primary {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled.primary, .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary, .button[disabled].primary:hover, .button[disabled].primary:focus {
- background-color: #1779ba;
- color: #fefefe; }
- .button.disabled.secondary, .button[disabled].secondary {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled.secondary, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary, .button[disabled].secondary:hover, .button[disabled].secondary:focus {
- background-color: #767676;
- color: #fefefe; }
- .button.disabled.success, .button[disabled].success {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled.success, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success, .button[disabled].success:hover, .button[disabled].success:focus {
- background-color: #3adb76;
- color: #0a0a0a; }
- .button.disabled.warning, .button[disabled].warning {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled.warning, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning, .button[disabled].warning:hover, .button[disabled].warning:focus {
- background-color: #ffae00;
- color: #0a0a0a; }
- .button.disabled.alert, .button[disabled].alert {
- opacity: 0.25;
- cursor: not-allowed; }
- .button.disabled.alert, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert, .button[disabled].alert:hover, .button[disabled].alert:focus {
- background-color: #cc4b37;
- color: #fefefe; }
- .button.dropdown::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 0.4em;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #fefefe transparent transparent;
- position: relative;
- top: 0.4em;
- display: inline-block;
- float: right;
- margin-left: 1em; }
- .button.dropdown.hollow::after {
- border-top-color: #1779ba; }
- .button.dropdown.hollow.primary::after {
- border-top-color: #1779ba; }
- .button.dropdown.hollow.secondary::after {
- border-top-color: #767676; }
- .button.dropdown.hollow.success::after {
- border-top-color: #3adb76; }
- .button.dropdown.hollow.warning::after {
- border-top-color: #ffae00; }
- .button.dropdown.hollow.alert::after {
- border-top-color: #cc4b37; }
- .button.arrow-only::after {
- top: -0.1em;
- float: none;
- margin-left: 0; }
-
-[type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'],
-textarea {
- display: block;
- box-sizing: border-box;
- width: 100%;
- height: 2.4375rem;
- margin: 0 0 1rem;
- padding: 0.5rem;
- border: 1px solid #cacaca;
- border-radius: 0;
- background-color: #fefefe;
- box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);
- font-family: inherit;
- font-size: 1rem;
- font-weight: normal;
- color: #0a0a0a;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
- [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus,
- textarea:focus {
- outline: none;
- border: 1px solid #8a8a8a;
- background-color: #fefefe;
- box-shadow: 0 0 5px #cacaca;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }
-
-textarea {
- max-width: 100%; }
- textarea[rows] {
- height: auto; }
-
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
- color: #cacaca; }
-
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
- color: #cacaca; }
-
-input::placeholder,
-textarea::placeholder {
- color: #cacaca; }
-
-input:disabled, input[readonly],
-textarea:disabled,
-textarea[readonly] {
- background-color: #e6e6e6;
- cursor: not-allowed; }
-
-[type='submit'],
-[type='button'] {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- border-radius: 0; }
-
-input[type='search'] {
- box-sizing: border-box; }
-
-[type='file'],
-[type='checkbox'],
-[type='radio'] {
- margin: 0 0 1rem; }
-
-[type='checkbox'] + label,
-[type='radio'] + label {
- display: inline-block;
- vertical-align: baseline;
- margin-left: 0.5rem;
- margin-right: 1rem;
- margin-bottom: 0; }
- [type='checkbox'] + label[for],
- [type='radio'] + label[for] {
- cursor: pointer; }
-
-label > [type='checkbox'],
-label > [type='radio'] {
- margin-right: 0.5rem; }
-
-[type='file'] {
- width: 100%; }
-
-label {
- display: block;
- margin: 0;
- font-size: 0.875rem;
- font-weight: normal;
- line-height: 1.8;
- color: #0a0a0a; }
- label.middle {
- margin: 0 0 1rem;
- padding: 0.5625rem 0; }
-
-.help-text {
- margin-top: -0.5rem;
- font-size: 0.8125rem;
- font-style: italic;
- color: #0a0a0a; }
-
-.input-group {
- display: table;
- width: 100%;
- margin-bottom: 1rem; }
- .input-group > :first-child {
- border-radius: 0 0 0 0; }
- .input-group > :last-child > * {
- border-radius: 0 0 0 0; }
-
-.input-group-label, .input-group-field, .input-group-button, .input-group-button a,
-.input-group-button input,
-.input-group-button button,
-.input-group-button label {
- margin: 0;
- white-space: nowrap;
- display: table-cell;
- vertical-align: middle; }
-
-.input-group-label {
- padding: 0 1rem;
- border: 1px solid #cacaca;
- background: #e6e6e6;
- color: #0a0a0a;
- text-align: center;
- white-space: nowrap;
- width: 1%;
- height: 100%; }
- .input-group-label:first-child {
- border-right: 0; }
- .input-group-label:last-child {
- border-left: 0; }
-
-.input-group-field {
- border-radius: 0;
- height: 2.5rem; }
-
-.input-group-button {
- padding-top: 0;
- padding-bottom: 0;
- text-align: center;
- width: 1%;
- height: 100%; }
- .input-group-button a,
- .input-group-button input,
- .input-group-button button,
- .input-group-button label {
- height: 2.5rem;
- padding-top: 0;
- padding-bottom: 0;
- font-size: 1rem; }
-
-.input-group .input-group-button {
- display: table-cell; }
-
-fieldset {
- margin: 0;
- padding: 0;
- border: 0; }
-
-legend {
- max-width: 100%;
- margin-bottom: 0.5rem; }
-
-.fieldset {
- margin: 1.125rem 0;
- padding: 1.25rem;
- border: 1px solid #cacaca; }
- .fieldset legend {
- margin: 0;
- margin-left: -0.1875rem;
- padding: 0 0.1875rem;
- background: #fefefe; }
-
-select {
- height: 2.4375rem;
- margin: 0 0 1rem;
- padding: 0.5rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- border: 1px solid #cacaca;
- border-radius: 0;
- background-color: #fefefe;
- font-family: inherit;
- font-size: 1rem;
- line-height: normal;
- color: #0a0a0a;
- background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='32' height='24' viewBox='0 0 32 24'><polygon points='0,0 32,0 16,24' style='fill: rgb%28138, 138, 138%29'></polygon></svg>");
- background-origin: content-box;
- background-position: right -1rem center;
- background-repeat: no-repeat;
- background-size: 9px 6px;
- padding-right: 1.5rem;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }
- @media screen and (min-width: 0\0) {
- select {
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } }
- select:focus {
- outline: none;
- border: 1px solid #8a8a8a;
- background-color: #fefefe;
- box-shadow: 0 0 5px #cacaca;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }
- select:disabled {
- background-color: #e6e6e6;
- cursor: not-allowed; }
- select::-ms-expand {
- display: none; }
- select[multiple] {
- height: auto;
- background-image: none; }
-
-.is-invalid-input:not(:focus) {
- border-color: #cc4b37;
- background-color: #f9ecea; }
- .is-invalid-input:not(:focus)::-webkit-input-placeholder {
- color: #cc4b37; }
- .is-invalid-input:not(:focus):-ms-input-placeholder {
- color: #cc4b37; }
- .is-invalid-input:not(:focus)::placeholder {
- color: #cc4b37; }
-
-.is-invalid-label {
- color: #cc4b37; }
-
-.form-error {
- display: none;
- margin-top: -0.5rem;
- margin-bottom: 1rem;
- font-size: 0.75rem;
- font-weight: bold;
- color: #cc4b37; }
- .form-error.is-visible {
- display: block; }
-
-.accordion {
- margin-left: 0;
- background: #fefefe;
- list-style-type: none; }
-
-.accordion-item:first-child > :first-child {
- border-radius: 0 0 0 0; }
-
-.accordion-item:last-child > :last-child {
- border-radius: 0 0 0 0; }
-
-.accordion-title {
- position: relative;
- display: block;
- padding: 1.25rem 1rem;
- border: 1px solid #e6e6e6;
- border-bottom: 0;
- font-size: 0.75rem;
- line-height: 1;
- color: #1779ba; }
- :last-child:not(.is-active) > .accordion-title {
- border-bottom: 1px solid #e6e6e6;
- border-radius: 0 0 0 0; }
- .accordion-title:hover, .accordion-title:focus {
- background-color: #e6e6e6; }
- .accordion-title::before {
- position: absolute;
- top: 50%;
- right: 1rem;
- margin-top: -0.5rem;
- content: '+'; }
- .is-active > .accordion-title::before {
- content: '\2013'; }
-
-.accordion-content {
- display: none;
- padding: 1rem;
- border: 1px solid #e6e6e6;
- border-bottom: 0;
- background-color: #fefefe;
- color: #0a0a0a; }
- :last-child > .accordion-content:last-child {
- border-bottom: 1px solid #e6e6e6; }
-
-.is-accordion-submenu-parent > a {
- position: relative; }
- .is-accordion-submenu-parent > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #1779ba transparent transparent;
- position: absolute;
- top: 50%;
- margin-top: -3px;
- right: 1rem; }
-
-.is-accordion-submenu-parent[aria-expanded='true'] > a::after {
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
- -webkit-transform-origin: 50% 50%;
- -ms-transform-origin: 50% 50%;
- transform-origin: 50% 50%; }
-
-.badge {
- display: inline-block;
- min-width: 2.1em;
- padding: 0.3em;
- border-radius: 50%;
- font-size: 0.6rem;
- text-align: center;
- background: #1779ba;
- color: #fefefe; }
- .badge.primary {
- background: #1779ba;
- color: #fefefe; }
- .badge.secondary {
- background: #767676;
- color: #fefefe; }
- .badge.success {
- background: #3adb76;
- color: #0a0a0a; }
- .badge.warning {
- background: #ffae00;
- color: #0a0a0a; }
- .badge.alert {
- background: #cc4b37;
- color: #fefefe; }
-
-.breadcrumbs {
- margin: 0 0 1rem 0;
- list-style: none; }
- .breadcrumbs::before, .breadcrumbs::after {
- display: table;
- content: ' '; }
- .breadcrumbs::after {
- clear: both; }
- .breadcrumbs li {
- float: left;
- font-size: 0.6875rem;
- color: #0a0a0a;
- cursor: default;
- text-transform: uppercase; }
- .breadcrumbs li:not(:last-child)::after {
- position: relative;
- top: 1px;
- margin: 0 0.75rem;
- opacity: 1;
- content: "/";
- color: #cacaca; }
- .breadcrumbs a {
- color: #1779ba; }
- .breadcrumbs a:hover {
- text-decoration: underline; }
- .breadcrumbs .disabled {
- color: #cacaca;
- cursor: not-allowed; }
-
-.button-group {
- margin-bottom: 1rem;
- font-size: 0; }
- .button-group::before, .button-group::after {
- display: table;
- content: ' '; }
- .button-group::after {
- clear: both; }
- .button-group .button {
- margin: 0;
- margin-right: 1px;
- margin-bottom: 1px;
- font-size: 0.9rem; }
- .button-group .button:last-child {
- margin-right: 0; }
- .button-group.tiny .button {
- font-size: 0.6rem; }
- .button-group.small .button {
- font-size: 0.75rem; }
- .button-group.large .button {
- font-size: 1.25rem; }
- .button-group.expanded {
- margin-right: -1px; }
- .button-group.expanded::before, .button-group.expanded::after {
- display: none; }
- .button-group.expanded .button:first-child:last-child {
- width: 100%; }
- .button-group.expanded .button:first-child:nth-last-child(2), .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button {
- display: inline-block;
- width: calc(50% - 1px);
- margin-right: 1px; }
- .button-group.expanded .button:first-child:nth-last-child(2):last-child, .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child {
- margin-right: -6px; }
- .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button {
- display: inline-block;
- width: calc(33.33333% - 1px);
- margin-right: 1px; }
- .button-group.expanded .button:first-child:nth-last-child(3):last-child, .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child {
- margin-right: -6px; }
- .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button {
- display: inline-block;
- width: calc(25% - 1px);
- margin-right: 1px; }
- .button-group.expanded .button:first-child:nth-last-child(4):last-child, .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child {
- margin-right: -6px; }
- .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button {
- display: inline-block;
- width: calc(20% - 1px);
- margin-right: 1px; }
- .button-group.expanded .button:first-child:nth-last-child(5):last-child, .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child {
- margin-right: -6px; }
- .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button {
- display: inline-block;
- width: calc(16.66667% - 1px);
- margin-right: 1px; }
- .button-group.expanded .button:first-child:nth-last-child(6):last-child, .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child {
- margin-right: -6px; }
- .button-group.primary .button {
- background-color: #1779ba;
- color: #fefefe; }
- .button-group.primary .button:hover, .button-group.primary .button:focus {
- background-color: #126195;
- color: #fefefe; }
- .button-group.secondary .button {
- background-color: #767676;
- color: #fefefe; }
- .button-group.secondary .button:hover, .button-group.secondary .button:focus {
- background-color: #5e5e5e;
- color: #fefefe; }
- .button-group.success .button {
- background-color: #3adb76;
- color: #0a0a0a; }
- .button-group.success .button:hover, .button-group.success .button:focus {
- background-color: #22bb5b;
- color: #0a0a0a; }
- .button-group.warning .button {
- background-color: #ffae00;
- color: #0a0a0a; }
- .button-group.warning .button:hover, .button-group.warning .button:focus {
- background-color: #cc8b00;
- color: #0a0a0a; }
- .button-group.alert .button {
- background-color: #cc4b37;
- color: #fefefe; }
- .button-group.alert .button:hover, .button-group.alert .button:focus {
- background-color: #a53b2a;
- color: #fefefe; }
- .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button {
- width: 100%; }
- .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child {
- margin-bottom: 0; }
- @media print, screen and (min-width: 40em) {
- .button-group.stacked-for-small .button {
- width: auto;
- margin-bottom: 0; } }
- @media print, screen and (min-width: 64em) {
- .button-group.stacked-for-medium .button {
- width: auto;
- margin-bottom: 0; } }
- @media screen and (max-width: 39.9375em) {
- .button-group.stacked-for-small.expanded {
- display: block; }
- .button-group.stacked-for-small.expanded .button {
- display: block;
- margin-right: 0; } }
-
-.callout {
- position: relative;
- margin: 0 0 1rem 0;
- padding: 1rem;
- border: 1px solid rgba(10, 10, 10, 0.25);
- border-radius: 0;
- background-color: white;
- color: #0a0a0a; }
- .callout > :first-child {
- margin-top: 0; }
- .callout > :last-child {
- margin-bottom: 0; }
- .callout.primary {
- background-color: #d7ecfa;
- color: #0a0a0a; }
- .callout.secondary {
- background-color: #eaeaea;
- color: #0a0a0a; }
- .callout.success {
- background-color: #e1faea;
- color: #0a0a0a; }
- .callout.warning {
- background-color: #fff3d9;
- color: #0a0a0a; }
- .callout.alert {
- background-color: #f7e4e1;
- color: #0a0a0a; }
- .callout.small {
- padding-top: 0.5rem;
- padding-right: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.5rem; }
- .callout.large {
- padding-top: 3rem;
- padding-right: 3rem;
- padding-bottom: 3rem;
- padding-left: 3rem; }
-
-.card {
- margin-bottom: 1rem;
- border: 1px solid #e6e6e6;
- border-radius: 0;
- background: #fefefe;
- box-shadow: none;
- overflow: hidden;
- color: #0a0a0a; }
- .card > :last-child {
- margin-bottom: 0; }
-
-.card-divider {
- padding: 1rem;
- background: #e6e6e6; }
- .card-divider > :last-child {
- margin-bottom: 0; }
-
-.card-section {
- padding: 1rem; }
- .card-section > :last-child {
- margin-bottom: 0; }
-
-.close-button {
- position: absolute;
- color: #8a8a8a;
- cursor: pointer; }
- [data-whatinput='mouse'] .close-button {
- outline: 0; }
- .close-button:hover, .close-button:focus {
- color: #0a0a0a; }
- .close-button.small {
- right: 0.66rem;
- top: 0.33em;
- font-size: 1.5em;
- line-height: 1; }
- .close-button, .close-button.medium {
- right: 1rem;
- top: 0.5rem;
- font-size: 2em;
- line-height: 1; }
-
-.menu {
- margin: 0;
- list-style-type: none; }
- .menu > li {
- display: table-cell;
- vertical-align: middle; }
- [data-whatinput='mouse'] .menu > li {
- outline: 0; }
- .menu > li > a {
- display: block;
- padding: 0.7rem 1rem;
- line-height: 1; }
- .menu input,
- .menu select,
- .menu a,
- .menu button {
- margin-bottom: 0; }
- .menu > li > a img,
- .menu > li > a i,
- .menu > li > a svg {
- vertical-align: middle; }
- .menu > li > a img + span,
- .menu > li > a i + span,
- .menu > li > a svg + span {
- vertical-align: middle; }
- .menu > li > a img,
- .menu > li > a i,
- .menu > li > a svg {
- margin-right: 0.25rem;
- display: inline-block; }
- .menu > li, .menu.horizontal > li {
- display: table-cell; }
- .menu.expanded {
- display: table;
- width: 100%;
- table-layout: fixed; }
- .menu.expanded > li:first-child:last-child {
- width: 100%; }
- .menu.vertical > li {
- display: block; }
- @media print, screen and (min-width: 40em) {
- .menu.medium-horizontal > li {
- display: table-cell; }
- .menu.medium-expanded {
- display: table;
- width: 100%;
- table-layout: fixed; }
- .menu.medium-expanded > li:first-child:last-child {
- width: 100%; }
- .menu.medium-vertical > li {
- display: block; } }
- @media print, screen and (min-width: 64em) {
- .menu.large-horizontal > li {
- display: table-cell; }
- .menu.large-expanded {
- display: table;
- width: 100%;
- table-layout: fixed; }
- .menu.large-expanded > li:first-child:last-child {
- width: 100%; }
- .menu.large-vertical > li {
- display: block; } }
- .menu.simple li {
- display: inline-block;
- vertical-align: top;
- line-height: 1; }
- .menu.simple a {
- padding: 0; }
- .menu.simple li {
- margin-left: 0;
- margin-right: 1rem; }
- .menu.simple.align-right li {
- margin-right: 0;
- margin-left: 1rem; }
- .menu.align-right::before, .menu.align-right::after {
- display: table;
- content: ' '; }
- .menu.align-right::after {
- clear: both; }
- .menu.align-right > li {
- float: right; }
- .menu.icon-top > li > a {
- text-align: center; }
- .menu.icon-top > li > a img,
- .menu.icon-top > li > a i,
- .menu.icon-top > li > a svg {
- display: block;
- margin: 0 auto 0.25rem; }
- .menu.icon-top.vertical a > span {
- margin: auto; }
- .menu.nested {
- margin-left: 1rem; }
- .menu .active > a {
- background: #1779ba;
- color: #fefefe; }
- .menu.menu-bordered li {
- border: 1px solid #e6e6e6; }
- .menu.menu-bordered li:not(:first-child) {
- border-top: 0; }
- .menu.menu-hover li:hover {
- background-color: #e6e6e6; }
-
-.menu-text {
- padding-top: 0;
- padding-bottom: 0;
- padding: 0.7rem 1rem;
- font-weight: bold;
- line-height: 1;
- color: inherit; }
-
-.menu-centered {
- text-align: center; }
- .menu-centered > .menu {
- display: inline-block;
- vertical-align: top; }
-
-.no-js [data-responsive-menu] ul {
- display: none; }
-
-.menu-icon {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- width: 20px;
- height: 16px;
- cursor: pointer; }
- .menu-icon::after {
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- width: 100%;
- height: 2px;
- background: #fefefe;
- box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe;
- content: ''; }
- .menu-icon:hover::after {
- background: #cacaca;
- box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; }
-
-.menu-icon.dark {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- width: 20px;
- height: 16px;
- cursor: pointer; }
- .menu-icon.dark::after {
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- width: 100%;
- height: 2px;
- background: #0a0a0a;
- box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a;
- content: ''; }
- .menu-icon.dark:hover::after {
- background: #8a8a8a;
- box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; }
-
-.is-drilldown {
- position: relative;
- overflow: hidden; }
- .is-drilldown li {
- display: block; }
- .is-drilldown.animate-height {
- transition: height 0.5s; }
-
-.is-drilldown-submenu {
- position: absolute;
- top: 0;
- left: 100%;
- z-index: -1;
- width: 100%;
- background: #fefefe;
- transition: -webkit-transform 0.15s linear;
- transition: transform 0.15s linear;
- transition: transform 0.15s linear, -webkit-transform 0.15s linear; }
- .is-drilldown-submenu.is-active {
- z-index: 1;
- display: block;
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%); }
- .is-drilldown-submenu.is-closing {
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%); }
-
-.drilldown-submenu-cover-previous {
- min-height: 100%; }
-
-.is-drilldown-submenu-parent > a {
- position: relative; }
- .is-drilldown-submenu-parent > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #1779ba;
- position: absolute;
- top: 50%;
- margin-top: -6px;
- right: 1rem; }
-
-.js-drilldown-back > a::before {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #1779ba transparent transparent;
- border-left-width: 0;
- display: inline-block;
- vertical-align: middle;
- margin-right: 0.75rem;
- border-left-width: 0; }
-
-.dropdown-pane {
- position: absolute;
- z-index: 10;
- display: block;
- width: 300px;
- padding: 1rem;
- visibility: hidden;
- border: 1px solid #cacaca;
- border-radius: 0;
- background-color: #fefefe;
- font-size: 1rem; }
- .dropdown-pane.is-open {
- visibility: visible; }
-
-.dropdown-pane.tiny {
- width: 100px; }
-
-.dropdown-pane.small {
- width: 200px; }
-
-.dropdown-pane.large {
- width: 400px; }
-
-.dropdown.menu > li.opens-left > .is-dropdown-submenu {
- top: 100%;
- right: 0;
- left: auto; }
-
-.dropdown.menu > li.opens-right > .is-dropdown-submenu {
- top: 100%;
- right: auto;
- left: 0; }
-
-.dropdown.menu > li.is-dropdown-submenu-parent > a {
- position: relative;
- padding-right: 1.5rem; }
-
-.dropdown.menu > li.is-dropdown-submenu-parent > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #1779ba transparent transparent;
- right: 5px;
- margin-top: -3px; }
-
-[data-whatinput='mouse'] .dropdown.menu a {
- outline: 0; }
-
-.no-js .dropdown.menu ul {
- display: none; }
-
-.dropdown.menu.vertical > li .is-dropdown-submenu {
- top: 0; }
-
-.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu {
- right: 100%;
- left: auto; }
-
-.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 100%; }
-
-.dropdown.menu.vertical > li > a::after {
- right: 14px; }
-
-.dropdown.menu.vertical > li.opens-left > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #1779ba transparent transparent; }
-
-.dropdown.menu.vertical > li.opens-right > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #1779ba; }
-
-@media print, screen and (min-width: 40em) {
- .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu {
- top: 100%;
- right: 0;
- left: auto; }
- .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu {
- top: 100%;
- right: auto;
- left: 0; }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a {
- position: relative;
- padding-right: 1.5rem; }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #1779ba transparent transparent;
- right: 5px;
- margin-top: -3px; }
- .dropdown.menu.medium-vertical > li .is-dropdown-submenu {
- top: 0; }
- .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu {
- right: 100%;
- left: auto; }
- .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 100%; }
- .dropdown.menu.medium-vertical > li > a::after {
- right: 14px; }
- .dropdown.menu.medium-vertical > li.opens-left > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #1779ba transparent transparent; }
- .dropdown.menu.medium-vertical > li.opens-right > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #1779ba; } }
-
-@media print, screen and (min-width: 64em) {
- .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu {
- top: 100%;
- right: 0;
- left: auto; }
- .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu {
- top: 100%;
- right: auto;
- left: 0; }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a {
- position: relative;
- padding-right: 1.5rem; }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #1779ba transparent transparent;
- right: 5px;
- margin-top: -3px; }
- .dropdown.menu.large-vertical > li .is-dropdown-submenu {
- top: 0; }
- .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu {
- right: 100%;
- left: auto; }
- .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 100%; }
- .dropdown.menu.large-vertical > li > a::after {
- right: 14px; }
- .dropdown.menu.large-vertical > li.opens-left > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #1779ba transparent transparent; }
- .dropdown.menu.large-vertical > li.opens-right > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #1779ba; } }
-
-.dropdown.menu.align-right .is-dropdown-submenu.first-sub {
- top: 100%;
- right: 0;
- left: auto; }
-
-.is-dropdown-menu.vertical {
- width: 100px; }
- .is-dropdown-menu.vertical.align-right {
- float: right; }
-
-.is-dropdown-submenu-parent {
- position: relative; }
- .is-dropdown-submenu-parent a::after {
- position: absolute;
- top: 50%;
- right: 5px;
- margin-top: -6px; }
- .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu {
- top: 100%;
- left: auto; }
- .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu {
- right: 100%;
- left: auto; }
- .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 100%; }
-
-.is-dropdown-submenu {
- position: absolute;
- top: 0;
- left: 100%;
- z-index: 1;
- display: none;
- min-width: 200px;
- border: 1px solid #cacaca;
- background: #fefefe; }
- .is-dropdown-submenu .is-dropdown-submenu-parent > a::after {
- right: 14px; }
- .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #1779ba transparent transparent; }
- .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after {
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #1779ba; }
- .is-dropdown-submenu .is-dropdown-submenu {
- margin-top: -1px; }
- .is-dropdown-submenu > li {
- width: 100%; }
- .is-dropdown-submenu.js-dropdown-active {
- display: block; }
-
-.responsive-embed,
-.flex-video {
- position: relative;
- height: 0;
- margin-bottom: 1rem;
- padding-bottom: 75%;
- overflow: hidden; }
- .responsive-embed iframe,
- .responsive-embed object,
- .responsive-embed embed,
- .responsive-embed video,
- .flex-video iframe,
- .flex-video object,
- .flex-video embed,
- .flex-video video {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%; }
- .responsive-embed.widescreen,
- .flex-video.widescreen {
- padding-bottom: 56.25%; }
-
-.label {
- display: inline-block;
- padding: 0.33333rem 0.5rem;
- border-radius: 0;
- font-size: 0.8rem;
- line-height: 1;
- white-space: nowrap;
- cursor: default;
- background: #1779ba;
- color: #fefefe; }
- .label.primary {
- background: #1779ba;
- color: #fefefe; }
- .label.secondary {
- background: #767676;
- color: #fefefe; }
- .label.success {
- background: #3adb76;
- color: #0a0a0a; }
- .label.warning {
- background: #ffae00;
- color: #0a0a0a; }
- .label.alert {
- background: #cc4b37;
- color: #fefefe; }
-
-.media-object {
- display: block;
- margin-bottom: 1rem; }
- .media-object img {
- max-width: none; }
- @media screen and (max-width: 39.9375em) {
- .media-object.stack-for-small .media-object-section {
- padding: 0;
- padding-bottom: 1rem;
- display: block; }
- .media-object.stack-for-small .media-object-section img {
- width: 100%; } }
-
-.media-object-section {
- display: table-cell;
- vertical-align: top; }
- .media-object-section:first-child {
- padding-right: 1rem; }
- .media-object-section:last-child:not(:nth-child(2)) {
- padding-left: 1rem; }
- .media-object-section > :last-child {
- margin-bottom: 0; }
- .media-object-section.middle {
- vertical-align: middle; }
- .media-object-section.bottom {
- vertical-align: bottom; }
-
-.is-off-canvas-open {
- overflow: hidden; }
-
-.js-off-canvas-overlay {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- transition: opacity 0.5s ease, visibility 0.5s ease;
- background: rgba(254, 254, 254, 0.25);
- opacity: 0;
- visibility: hidden;
- overflow: hidden; }
- .js-off-canvas-overlay.is-visible {
- opacity: 1;
- visibility: visible; }
- .js-off-canvas-overlay.is-closable {
- cursor: pointer; }
- .js-off-canvas-overlay.is-overlay-absolute {
- position: absolute; }
- .js-off-canvas-overlay.is-overlay-fixed {
- position: fixed; }
-
-.off-canvas-wrapper {
- position: relative;
- overflow: hidden; }
-
-.off-canvas {
- position: fixed;
- z-index: 1;
- transition: -webkit-transform 0.5s ease;
- transition: transform 0.5s ease;
- transition: transform 0.5s ease, -webkit-transform 0.5s ease;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- background: #e6e6e6; }
- [data-whatinput='mouse'] .off-canvas {
- outline: 0; }
- .off-canvas.is-transition-overlap {
- z-index: 10; }
- .off-canvas.is-transition-overlap.is-open {
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); }
- .off-canvas.is-open {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- transform: translate(0, 0); }
-
-.off-canvas-absolute {
- position: absolute;
- z-index: 1;
- transition: -webkit-transform 0.5s ease;
- transition: transform 0.5s ease;
- transition: transform 0.5s ease, -webkit-transform 0.5s ease;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- background: #e6e6e6; }
- [data-whatinput='mouse'] .off-canvas-absolute {
- outline: 0; }
- .off-canvas-absolute.is-transition-overlap {
- z-index: 10; }
- .off-canvas-absolute.is-transition-overlap.is-open {
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); }
- .off-canvas-absolute.is-open {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- transform: translate(0, 0); }
-
-.position-left {
- top: 0;
- left: 0;
- width: 250px;
- height: 100%;
- -webkit-transform: translateX(-250px);
- -ms-transform: translateX(-250px);
- transform: translateX(-250px);
- overflow-y: auto; }
- .position-left.is-open ~ .off-canvas-content {
- -webkit-transform: translateX(250px);
- -ms-transform: translateX(250px);
- transform: translateX(250px); }
- .position-left.is-transition-push::after {
- position: absolute;
- top: 0;
- right: 0;
- height: 100%;
- width: 1px;
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7);
- content: " "; }
- .position-left.is-transition-overlap.is-open ~ .off-canvas-content {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none; }
-
-.position-right {
- top: 0;
- right: 0;
- width: 250px;
- height: 100%;
- -webkit-transform: translateX(250px);
- -ms-transform: translateX(250px);
- transform: translateX(250px);
- overflow-y: auto; }
- .position-right.is-open ~ .off-canvas-content {
- -webkit-transform: translateX(-250px);
- -ms-transform: translateX(-250px);
- transform: translateX(-250px); }
- .position-right.is-transition-push::after {
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- width: 1px;
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7);
- content: " "; }
- .position-right.is-transition-overlap.is-open ~ .off-canvas-content {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none; }
-
-.position-top {
- top: 0;
- left: 0;
- width: 100%;
- height: 250px;
- -webkit-transform: translateY(-250px);
- -ms-transform: translateY(-250px);
- transform: translateY(-250px);
- overflow-x: auto; }
- .position-top.is-open ~ .off-canvas-content {
- -webkit-transform: translateY(250px);
- -ms-transform: translateY(250px);
- transform: translateY(250px); }
- .position-top.is-transition-push::after {
- position: absolute;
- bottom: 0;
- left: 0;
- height: 1px;
- width: 100%;
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7);
- content: " "; }
- .position-top.is-transition-overlap.is-open ~ .off-canvas-content {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none; }
-
-.position-bottom {
- bottom: 0;
- left: 0;
- width: 100%;
- height: 250px;
- -webkit-transform: translateY(250px);
- -ms-transform: translateY(250px);
- transform: translateY(250px);
- overflow-x: auto; }
- .position-bottom.is-open ~ .off-canvas-content {
- -webkit-transform: translateY(-250px);
- -ms-transform: translateY(-250px);
- transform: translateY(-250px); }
- .position-bottom.is-transition-push::after {
- position: absolute;
- top: 0;
- left: 0;
- height: 1px;
- width: 100%;
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.7);
- content: " "; }
- .position-bottom.is-transition-overlap.is-open ~ .off-canvas-content {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none; }
-
-.off-canvas-content {
- transition: -webkit-transform 0.5s ease;
- transition: transform 0.5s ease;
- transition: transform 0.5s ease, -webkit-transform 0.5s ease;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-@media print, screen and (min-width: 40em) {
- .position-left.reveal-for-medium {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-left.reveal-for-medium ~ .off-canvas-content {
- margin-left: 250px; }
- .position-right.reveal-for-medium {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-right.reveal-for-medium ~ .off-canvas-content {
- margin-right: 250px; }
- .position-top.reveal-for-medium {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-top.reveal-for-medium ~ .off-canvas-content {
- margin-top: 250px; }
- .position-bottom.reveal-for-medium {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-bottom.reveal-for-medium ~ .off-canvas-content {
- margin-bottom: 250px; } }
-
-@media print, screen and (min-width: 64em) {
- .position-left.reveal-for-large {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-left.reveal-for-large ~ .off-canvas-content {
- margin-left: 250px; }
- .position-right.reveal-for-large {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-right.reveal-for-large ~ .off-canvas-content {
- margin-right: 250px; }
- .position-top.reveal-for-large {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-top.reveal-for-large ~ .off-canvas-content {
- margin-top: 250px; }
- .position-bottom.reveal-for-large {
- -webkit-transform: none;
- -ms-transform: none;
- transform: none;
- z-index: 1; }
- .position-bottom.reveal-for-large ~ .off-canvas-content {
- margin-bottom: 250px; } }
-
-.orbit {
- position: relative; }
-
-.orbit-container {
- position: relative;
- height: 0;
- margin: 0;
- list-style: none;
- overflow: hidden; }
-
-.orbit-slide {
- width: 100%; }
- .orbit-slide.no-motionui.is-active {
- top: 0;
- left: 0; }
-
-.orbit-figure {
- margin: 0; }
-
-.orbit-image {
- width: 100%;
- max-width: 100%;
- margin: 0; }
-
-.orbit-caption {
- position: absolute;
- bottom: 0;
- width: 100%;
- margin-bottom: 0;
- padding: 1rem;
- background-color: rgba(10, 10, 10, 0.5);
- color: #fefefe; }
-
-.orbit-previous, .orbit-next {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
- z-index: 10;
- padding: 1rem;
- color: #fefefe; }
- [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next {
- outline: 0; }
- .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus {
- background-color: rgba(10, 10, 10, 0.5); }
-
-.orbit-previous {
- left: 0; }
-
-.orbit-next {
- left: auto;
- right: 0; }
-
-.orbit-bullets {
- position: relative;
- margin-top: 0.8rem;
- margin-bottom: 0.8rem;
- text-align: center; }
- [data-whatinput='mouse'] .orbit-bullets {
- outline: 0; }
- .orbit-bullets button {
- width: 1.2rem;
- height: 1.2rem;
- margin: 0.1rem;
- border-radius: 50%;
- background-color: #cacaca; }
- .orbit-bullets button:hover {
- background-color: #8a8a8a; }
- .orbit-bullets button.is-active {
- background-color: #8a8a8a; }
-
-.pagination {
- margin-left: 0;
- margin-bottom: 1rem; }
- .pagination::before, .pagination::after {
- display: table;
- content: ' '; }
- .pagination::after {
- clear: both; }
- .pagination li {
- margin-right: 0.0625rem;
- border-radius: 0;
- font-size: 0.875rem;
- display: none; }
- .pagination li:last-child, .pagination li:first-child {
- display: inline-block; }
- @media print, screen and (min-width: 40em) {
- .pagination li {
- display: inline-block; } }
- .pagination a,
- .pagination button {
- display: block;
- padding: 0.1875rem 0.625rem;
- border-radius: 0;
- color: #0a0a0a; }
- .pagination a:hover,
- .pagination button:hover {
- background: #e6e6e6; }
- .pagination .current {
- padding: 0.1875rem 0.625rem;
- background: #1779ba;
- color: #fefefe;
- cursor: default; }
- .pagination .disabled {
- padding: 0.1875rem 0.625rem;
- color: #cacaca;
- cursor: not-allowed; }
- .pagination .disabled:hover {
- background: transparent; }
- .pagination .ellipsis::after {
- padding: 0.1875rem 0.625rem;
- content: '\2026';
- color: #0a0a0a; }
-
-.pagination-previous a::before,
-.pagination-previous.disabled::before {
- display: inline-block;
- margin-right: 0.5rem;
- content: '\00ab'; }
-
-.pagination-next a::after,
-.pagination-next.disabled::after {
- display: inline-block;
- margin-left: 0.5rem;
- content: '\00bb'; }
-
-.progress {
- height: 1rem;
- margin-bottom: 1rem;
- border-radius: 0;
- background-color: #cacaca; }
- .progress.primary .progress-meter {
- background-color: #1779ba; }
- .progress.secondary .progress-meter {
- background-color: #767676; }
- .progress.success .progress-meter {
- background-color: #3adb76; }
- .progress.warning .progress-meter {
- background-color: #ffae00; }
- .progress.alert .progress-meter {
- background-color: #cc4b37; }
-
-.progress-meter {
- position: relative;
- display: block;
- width: 0%;
- height: 100%;
- background-color: #1779ba; }
-
-.progress-meter-text {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-50%, -50%);
- -ms-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- position: absolute;
- margin: 0;
- font-size: 0.75rem;
- font-weight: bold;
- color: #fefefe;
- white-space: nowrap; }
-
-.slider {
- position: relative;
- height: 0.5rem;
- margin-top: 1.25rem;
- margin-bottom: 2.25rem;
- background-color: #e6e6e6;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -ms-touch-action: none;
- touch-action: none; }
-
-.slider-fill {
- position: absolute;
- top: 0;
- left: 0;
- display: inline-block;
- max-width: 100%;
- height: 0.5rem;
- background-color: #cacaca;
- transition: all 0.2s ease-in-out; }
- .slider-fill.is-dragging {
- transition: all 0s linear; }
-
-.slider-handle {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
- position: absolute;
- left: 0;
- z-index: 1;
- display: inline-block;
- width: 1.4rem;
- height: 1.4rem;
- border-radius: 0;
- background-color: #1779ba;
- transition: all 0.2s ease-in-out;
- -ms-touch-action: manipulation;
- touch-action: manipulation; }
- [data-whatinput='mouse'] .slider-handle {
- outline: 0; }
- .slider-handle:hover {
- background-color: #14679e; }
- .slider-handle.is-dragging {
- transition: all 0s linear; }
-
-.slider.disabled,
-.slider[disabled] {
- opacity: 0.25;
- cursor: not-allowed; }
-
-.slider.vertical {
- display: inline-block;
- width: 0.5rem;
- height: 12.5rem;
- margin: 0 1.25rem;
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1); }
- .slider.vertical .slider-fill {
- top: 0;
- width: 0.5rem;
- max-height: 100%; }
- .slider.vertical .slider-handle {
- position: absolute;
- top: 0;
- left: 50%;
- width: 1.4rem;
- height: 1.4rem;
- -webkit-transform: translateX(-50%);
- -ms-transform: translateX(-50%);
- transform: translateX(-50%); }
-
-.sticky-container {
- position: relative; }
-
-.sticky {
- position: relative;
- z-index: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); }
-
-.sticky.is-stuck {
- position: fixed;
- z-index: 5; }
- .sticky.is-stuck.is-at-top {
- top: 0; }
- .sticky.is-stuck.is-at-bottom {
- bottom: 0; }
-
-.sticky.is-anchored {
- position: relative;
- right: auto;
- left: auto; }
- .sticky.is-anchored.is-at-bottom {
- bottom: 0; }
-
-body.is-reveal-open {
- overflow: hidden; }
-
-html.is-reveal-open,
-html.is-reveal-open body {
- min-height: 100%;
- overflow: hidden;
- position: fixed;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
-
-.reveal-overlay {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1005;
- display: none;
- background-color: rgba(10, 10, 10, 0.45);
- overflow-y: scroll; }
-
-.reveal {
- z-index: 1006;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- display: none;
- padding: 1rem;
- border: 1px solid #cacaca;
- border-radius: 0;
- background-color: #fefefe;
- position: relative;
- top: 100px;
- margin-right: auto;
- margin-left: auto;
- overflow-y: auto; }
- [data-whatinput='mouse'] .reveal {
- outline: 0; }
- @media print, screen and (min-width: 40em) {
- .reveal {
- min-height: 0; } }
- .reveal .column, .reveal .columns {
- min-width: 0; }
- .reveal > :last-child {
- margin-bottom: 0; }
- @media print, screen and (min-width: 40em) {
- .reveal {
- width: 600px;
- max-width: 75rem; } }
- @media print, screen and (min-width: 40em) {
- .reveal .reveal {
- right: auto;
- left: auto;
- margin: 0 auto; } }
- .reveal.collapse {
- padding: 0; }
- @media print, screen and (min-width: 40em) {
- .reveal.tiny {
- width: 30%;
- max-width: 75rem; } }
- @media print, screen and (min-width: 40em) {
- .reveal.small {
- width: 50%;
- max-width: 75rem; } }
- @media print, screen and (min-width: 40em) {
- .reveal.large {
- width: 90%;
- max-width: 75rem; } }
- .reveal.full {
- top: 0;
- left: 0;
- width: 100%;
- max-width: none;
- height: 100%;
- height: 100vh;
- min-height: 100vh;
- margin-left: 0;
- border: 0;
- border-radius: 0; }
- @media screen and (max-width: 39.9375em) {
- .reveal {
- top: 0;
- left: 0;
- width: 100%;
- max-width: none;
- height: 100%;
- height: 100vh;
- min-height: 100vh;
- margin-left: 0;
- border: 0;
- border-radius: 0; } }
- .reveal.without-overlay {
- position: fixed; }
-
-.switch {
- height: 2rem;
- position: relative;
- margin-bottom: 1rem;
- outline: 0;
- font-size: 0.875rem;
- font-weight: bold;
- color: #fefefe;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
-
-.switch-input {
- position: absolute;
- margin-bottom: 0;
- opacity: 0; }
-
-.switch-paddle {
- position: relative;
- display: block;
- width: 4rem;
- height: 2rem;
- border-radius: 0;
- background: #cacaca;
- transition: all 0.25s ease-out;
- font-weight: inherit;
- color: inherit;
- cursor: pointer; }
- input + .switch-paddle {
- margin: 0; }
- .switch-paddle::after {
- position: absolute;
- top: 0.25rem;
- left: 0.25rem;
- display: block;
- width: 1.5rem;
- height: 1.5rem;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- border-radius: 0;
- background: #fefefe;
- transition: all 0.25s ease-out;
- content: ''; }
- input:checked ~ .switch-paddle {
- background: #1779ba; }
- input:checked ~ .switch-paddle::after {
- left: 2.25rem; }
- [data-whatinput='mouse'] input:focus ~ .switch-paddle {
- outline: 0; }
-
-.switch-active, .switch-inactive {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%); }
-
-.switch-active {
- left: 8%;
- display: none; }
- input:checked + label > .switch-active {
- display: block; }
-
-.switch-inactive {
- right: 15%; }
- input:checked + label > .switch-inactive {
- display: none; }
-
-.switch.tiny {
- height: 1.5rem; }
- .switch.tiny .switch-paddle {
- width: 3rem;
- height: 1.5rem;
- font-size: 0.625rem; }
- .switch.tiny .switch-paddle::after {
- top: 0.25rem;
- left: 0.25rem;
- width: 1rem;
- height: 1rem; }
- .switch.tiny input:checked ~ .switch-paddle::after {
- left: 1.75rem; }
-
-.switch.small {
- height: 1.75rem; }
- .switch.small .switch-paddle {
- width: 3.5rem;
- height: 1.75rem;
- font-size: 0.75rem; }
- .switch.small .switch-paddle::after {
- top: 0.25rem;
- left: 0.25rem;
- width: 1.25rem;
- height: 1.25rem; }
- .switch.small input:checked ~ .switch-paddle::after {
- left: 2rem; }
-
-.switch.large {
- height: 2.5rem; }
- .switch.large .switch-paddle {
- width: 5rem;
- height: 2.5rem;
- font-size: 1rem; }
- .switch.large .switch-paddle::after {
- top: 0.25rem;
- left: 0.25rem;
- width: 2rem;
- height: 2rem; }
- .switch.large input:checked ~ .switch-paddle::after {
- left: 2.75rem; }
-
-table {
- width: 100%;
- margin-bottom: 1rem;
- border-radius: 0; }
- table thead,
- table tbody,
- table tfoot {
- border: 1px solid #f1f1f1;
- background-color: #fefefe; }
- table caption {
- padding: 0.5rem 0.625rem 0.625rem;
- font-weight: bold; }
- table thead {
- background: #f8f8f8;
- color: #0a0a0a; }
- table tfoot {
- background: #f1f1f1;
- color: #0a0a0a; }
- table thead tr,
- table tfoot tr {
- background: transparent; }
- table thead th,
- table thead td,
- table tfoot th,
- table tfoot td {
- padding: 0.5rem 0.625rem 0.625rem;
- font-weight: bold;
- text-align: left; }
- table tbody th,
- table tbody td {
- padding: 0.5rem 0.625rem 0.625rem; }
- table tbody tr:nth-child(even) {
- border-bottom: 0;
- background-color: #f1f1f1; }
- table.unstriped tbody {
- background-color: #fefefe; }
- table.unstriped tbody tr {
- border-bottom: 0;
- border-bottom: 1px solid #f1f1f1;
- background-color: #fefefe; }
-
-@media screen and (max-width: 63.9375em) {
- table.stack thead {
- display: none; }
- table.stack tfoot {
- display: none; }
- table.stack tr,
- table.stack th,
- table.stack td {
- display: block; }
- table.stack td {
- border-top: 0; } }
-
-table.scroll {
- display: block;
- width: 100%;
- overflow-x: auto; }
-
-table.hover thead tr:hover {
- background-color: #f3f3f3; }
-
-table.hover tfoot tr:hover {
- background-color: #ececec; }
-
-table.hover tbody tr:hover {
- background-color: #f9f9f9; }
-
-table.hover:not(.unstriped) tr:nth-of-type(even):hover {
- background-color: #ececec; }
-
-.table-scroll {
- overflow-x: auto; }
- .table-scroll table {
- width: auto; }
-
-.tabs {
- margin: 0;
- border: 1px solid #e6e6e6;
- background: #fefefe;
- list-style-type: none; }
- .tabs::before, .tabs::after {
- display: table;
- content: ' '; }
- .tabs::after {
- clear: both; }
-
-.tabs.vertical > li {
- display: block;
- float: none;
- width: auto; }
-
-.tabs.simple > li > a {
- padding: 0; }
- .tabs.simple > li > a:hover {
- background: transparent; }
-
-.tabs.primary {
- background: #1779ba; }
- .tabs.primary > li > a {
- color: #fefefe; }
- .tabs.primary > li > a:hover, .tabs.primary > li > a:focus {
- background: #1673b1; }
-
-.tabs-title {
- float: left; }
- .tabs-title > a {
- display: block;
- padding: 1.25rem 1.5rem;
- font-size: 0.75rem;
- line-height: 1;
- color: #1779ba; }
- .tabs-title > a:hover {
- background: #fefefe;
- color: #1468a0; }
- .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] {
- background: #e6e6e6;
- color: #1779ba; }
-
-.tabs-content {
- border: 1px solid #e6e6e6;
- border-top: 0;
- background: #fefefe;
- color: #0a0a0a;
- transition: all 0.5s ease; }
-
-.tabs-content.vertical {
- border: 1px solid #e6e6e6;
- border-left: 0; }
-
-.tabs-panel {
- display: none;
- padding: 1rem; }
- .tabs-panel[aria-hidden="false"] {
- display: block; }
-
-.thumbnail {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 1rem;
- border: solid 4px #fefefe;
- border-radius: 0;
- box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2);
- line-height: 0; }
-
-a.thumbnail {
- transition: box-shadow 200ms ease-out; }
- a.thumbnail:hover, a.thumbnail:focus {
- box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); }
- a.thumbnail image {
- box-shadow: none; }
-
-.title-bar {
- padding: 0.5rem;
- background: #0a0a0a;
- color: #fefefe; }
- .title-bar::before, .title-bar::after {
- display: table;
- content: ' '; }
- .title-bar::after {
- clear: both; }
- .title-bar .menu-icon {
- margin-left: 0.25rem;
- margin-right: 0.25rem; }
-
-.title-bar-left {
- float: left; }
-
-.title-bar-right {
- float: right;
- text-align: right; }
-
-.title-bar-title {
- display: inline-block;
- vertical-align: middle;
- font-weight: bold; }
-
-.has-tip {
- position: relative;
- display: inline-block;
- border-bottom: dotted 1px #8a8a8a;
- font-weight: bold;
- cursor: help; }
-
-.tooltip {
- position: absolute;
- top: calc(100% + 0.6495rem);
- z-index: 1200;
- max-width: 10rem;
- padding: 0.75rem;
- border-radius: 0;
- background-color: #0a0a0a;
- font-size: 80%;
- color: #fefefe; }
- .tooltip::before {
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- content: '';
- border-top-width: 0;
- border-bottom-style: solid;
- border-color: transparent transparent #0a0a0a;
- position: absolute;
- bottom: 100%;
- left: 50%;
- -webkit-transform: translateX(-50%);
- -ms-transform: translateX(-50%);
- transform: translateX(-50%); }
- .tooltip.top::before {
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- content: '';
- border-bottom-width: 0;
- border-top-style: solid;
- border-color: #0a0a0a transparent transparent;
- top: 100%;
- bottom: auto; }
- .tooltip.left::before {
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- content: '';
- border-right-width: 0;
- border-left-style: solid;
- border-color: transparent transparent transparent #0a0a0a;
- top: 50%;
- bottom: auto;
- left: 100%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%); }
- .tooltip.right::before {
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- content: '';
- border-left-width: 0;
- border-right-style: solid;
- border-color: transparent #0a0a0a transparent transparent;
- top: 50%;
- right: 100%;
- bottom: auto;
- left: auto;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%); }
-
-.top-bar {
- padding: 0.5rem; }
- .top-bar::before, .top-bar::after {
- display: table;
- content: ' '; }
- .top-bar::after {
- clear: both; }
- .top-bar,
- .top-bar ul {
- background-color: #e6e6e6; }
- .top-bar input {
- max-width: 200px;
- margin-right: 1rem; }
- .top-bar .input-group-field {
- width: 100%;
- margin-right: 0; }
- .top-bar input.button {
- width: auto; }
- .top-bar .top-bar-left,
- .top-bar .top-bar-right {
- width: 100%; }
- @media print, screen and (min-width: 40em) {
- .top-bar .top-bar-left,
- .top-bar .top-bar-right {
- width: auto; } }
- @media screen and (max-width: 63.9375em) {
- .top-bar.stacked-for-medium .top-bar-left,
- .top-bar.stacked-for-medium .top-bar-right {
- width: 100%; } }
- @media screen and (max-width: 74.9375em) {
- .top-bar.stacked-for-large .top-bar-left,
- .top-bar.stacked-for-large .top-bar-right {
- width: 100%; } }
-
-.top-bar-title {
- display: inline-block;
- float: left;
- padding: 0.5rem 1rem 0.5rem 0; }
- .top-bar-title .menu-icon {
- bottom: 2px; }
-
-.top-bar-left {
- float: left; }
-
-.top-bar-right {
- float: right; }
-
-.hide {
- display: none !important; }
-
-.invisible {
- visibility: hidden; }
-
-@media screen and (max-width: 39.9375em) {
- .hide-for-small-only {
- display: none !important; } }
-
-@media screen and (max-width: 0em), screen and (min-width: 40em) {
- .show-for-small-only {
- display: none !important; } }
-
-@media print, screen and (min-width: 40em) {
- .hide-for-medium {
- display: none !important; } }
-
-@media screen and (max-width: 39.9375em) {
- .show-for-medium {
- display: none !important; } }
-
-@media screen and (min-width: 40em) and (max-width: 63.9375em) {
- .hide-for-medium-only {
- display: none !important; } }
-
-@media screen and (max-width: 39.9375em), screen and (min-width: 64em) {
- .show-for-medium-only {
- display: none !important; } }
-
-@media print, screen and (min-width: 64em) {
- .hide-for-large {
- display: none !important; } }
-
-@media screen and (max-width: 63.9375em) {
- .show-for-large {
- display: none !important; } }
-
-@media screen and (min-width: 64em) and (max-width: 74.9375em) {
- .hide-for-large-only {
- display: none !important; } }
-
-@media screen and (max-width: 63.9375em), screen and (min-width: 75em) {
- .show-for-large-only {
- display: none !important; } }
-
-.show-for-sr,
-.show-on-focus {
- position: absolute !important;
- width: 1px;
- height: 1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0); }
-
-.show-on-focus:active, .show-on-focus:focus {
- position: static !important;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto; }
-
-.show-for-landscape,
-.hide-for-portrait {
- display: block !important; }
- @media screen and (orientation: landscape) {
- .show-for-landscape,
- .hide-for-portrait {
- display: block !important; } }
- @media screen and (orientation: portrait) {
- .show-for-landscape,
- .hide-for-portrait {
- display: none !important; } }
-
-.hide-for-landscape,
-.show-for-portrait {
- display: none !important; }
- @media screen and (orientation: landscape) {
- .hide-for-landscape,
- .show-for-portrait {
- display: none !important; } }
- @media screen and (orientation: portrait) {
- .hide-for-landscape,
- .show-for-portrait {
- display: block !important; } }
-
-.float-left {
- float: left !important; }
-
-.float-right {
- float: right !important; }
-
-.float-center {
- display: block;
- margin-right: auto;
- margin-left: auto; }
-
-.clearfix::before, .clearfix::after {
- display: table;
- content: ' '; }
-
-.clearfix::after {
- clear: both; }
-
-.slide-in-down.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(-100%);
- -ms-transform: translateY(-100%);
- transform: translateY(-100%);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-in-down.mui-enter.mui-enter-active {
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0); }
-
-.slide-in-left.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-in-left.mui-enter.mui-enter-active {
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0); }
-
-.slide-in-up.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(100%);
- -ms-transform: translateY(100%);
- transform: translateY(100%);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-in-up.mui-enter.mui-enter-active {
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0); }
-
-.slide-in-right.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-in-right.mui-enter.mui-enter-active {
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0); }
-
-.slide-out-down.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-out-down.mui-leave.mui-leave-active {
- -webkit-transform: translateY(100%);
- -ms-transform: translateY(100%);
- transform: translateY(100%); }
-
-.slide-out-right.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-out-right.mui-leave.mui-leave-active {
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%); }
-
-.slide-out-up.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-out-up.mui-leave.mui-leave-active {
- -webkit-transform: translateY(-100%);
- -ms-transform: translateY(-100%);
- transform: translateY(-100%); }
-
-.slide-out-left.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden; }
-
-.slide-out-left.mui-leave.mui-leave-active {
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%); }
-
-.fade-in.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- opacity: 0;
- transition-property: opacity; }
-
-.fade-in.mui-enter.mui-enter-active {
- opacity: 1; }
-
-.fade-out.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- opacity: 1;
- transition-property: opacity; }
-
-.fade-out.mui-leave.mui-leave-active {
- opacity: 0; }
-
-.hinge-in-from-top.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- -webkit-transform-origin: top;
- -ms-transform-origin: top;
- transform-origin: top;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-top.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-in-from-right.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- -webkit-transform-origin: right;
- -ms-transform-origin: right;
- transform-origin: right;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-right.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-in-from-bottom.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(90deg);
- transform: perspective(2000px) rotateX(90deg);
- -webkit-transform-origin: bottom;
- -ms-transform-origin: bottom;
- transform-origin: bottom;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-bottom.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-in-from-left.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(90deg);
- transform: perspective(2000px) rotateY(90deg);
- -webkit-transform-origin: left;
- -ms-transform-origin: left;
- transform-origin: left;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-left.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-in-from-middle-x.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-middle-x.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-in-from-middle-y.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.hinge-in-from-middle-y.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1; }
-
-.hinge-out-from-top.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: top;
- -ms-transform-origin: top;
- transform-origin: top;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-top.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- opacity: 0; }
-
-.hinge-out-from-right.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: right;
- -ms-transform-origin: right;
- transform-origin: right;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-right.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- opacity: 0; }
-
-.hinge-out-from-bottom.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: bottom;
- -ms-transform-origin: bottom;
- transform-origin: bottom;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-bottom.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(90deg);
- transform: perspective(2000px) rotateX(90deg);
- opacity: 0; }
-
-.hinge-out-from-left.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: left;
- -ms-transform-origin: left;
- transform-origin: left;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-left.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(90deg);
- transform: perspective(2000px) rotateY(90deg);
- opacity: 0; }
-
-.hinge-out-from-middle-x.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-middle-x.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- opacity: 0; }
-
-.hinge-out-from-middle-y.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.hinge-out-from-middle-y.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- opacity: 0; }
-
-.scale-in-up.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(0.5);
- -ms-transform: scale(0.5);
- transform: scale(0.5);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.scale-in-up.mui-enter.mui-enter-active {
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- opacity: 1; }
-
-.scale-in-down.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1.5);
- -ms-transform: scale(1.5);
- transform: scale(1.5);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.scale-in-down.mui-enter.mui-enter-active {
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- opacity: 1; }
-
-.scale-out-up.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.scale-out-up.mui-leave.mui-leave-active {
- -webkit-transform: scale(1.5);
- -ms-transform: scale(1.5);
- transform: scale(1.5);
- opacity: 0; }
-
-.scale-out-down.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.scale-out-down.mui-leave.mui-leave-active {
- -webkit-transform: scale(0.5);
- -ms-transform: scale(0.5);
- transform: scale(0.5);
- opacity: 0; }
-
-.spin-in.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(-0.75turn);
- -ms-transform: rotate(-0.75turn);
- transform: rotate(-0.75turn);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.spin-in.mui-enter.mui-enter-active {
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- opacity: 1; }
-
-.spin-out.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.spin-out.mui-leave.mui-leave-active {
- -webkit-transform: rotate(0.75turn);
- -ms-transform: rotate(0.75turn);
- transform: rotate(0.75turn);
- opacity: 0; }
-
-.spin-in-ccw.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0.75turn);
- -ms-transform: rotate(0.75turn);
- transform: rotate(0.75turn);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0; }
-
-.spin-in-ccw.mui-enter.mui-enter-active {
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- opacity: 1; }
-
-.spin-out-ccw.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- transition-property: opacity, -webkit-transform;
- transition-property: transform, opacity;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1; }
-
-.spin-out-ccw.mui-leave.mui-leave-active {
- -webkit-transform: rotate(-0.75turn);
- -ms-transform: rotate(-0.75turn);
- transform: rotate(-0.75turn);
- opacity: 0; }
-
-.slow {
- transition-duration: 750ms !important; }
-
-.fast {
- transition-duration: 250ms !important; }
-
-.linear {
- transition-timing-function: linear !important; }
-
-.ease {
- transition-timing-function: ease !important; }
-
-.ease-in {
- transition-timing-function: ease-in !important; }
-
-.ease-out {
- transition-timing-function: ease-out !important; }
-
-.ease-in-out {
- transition-timing-function: ease-in-out !important; }
-
-.bounce-in {
- transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }
-
-.bounce-out {
- transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }
-
-.bounce-in-out {
- transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }
-
-.short-delay {
- transition-delay: 300ms !important; }
-
-.long-delay {
- transition-delay: 700ms !important; }
-
-.shake {
- -webkit-animation-name: shake-7;
- animation-name: shake-7; }
-
-@-webkit-keyframes shake-7 {
- 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%); }
- 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%); } }
-
-@keyframes shake-7 {
- 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%); }
- 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%); } }
-
-.spin-cw {
- -webkit-animation-name: spin-cw-1turn;
- animation-name: spin-cw-1turn; }
-
-@-webkit-keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn); }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0); } }
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn); }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0); } }
-
-.spin-ccw {
- -webkit-animation-name: spin-cw-1turn;
- animation-name: spin-cw-1turn; }
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(0);
- transform: rotate(0); }
- 100% {
- -webkit-transform: rotate(1turn);
- transform: rotate(1turn); } }
-
-.wiggle {
- -webkit-animation-name: wiggle-7deg;
- animation-name: wiggle-7deg; }
-
-@-webkit-keyframes wiggle-7deg {
- 40%, 50%, 60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg); }
- 35%, 45%, 55%, 65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg); }
- 0%, 30%, 70%, 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0); } }
-
-@keyframes wiggle-7deg {
- 40%, 50%, 60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg); }
- 35%, 45%, 55%, 65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg); }
- 0%, 30%, 70%, 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0); } }
-
-.shake,
-.spin-cw,
-.spin-ccw,
-.wiggle {
- -webkit-animation-duration: 500ms;
- animation-duration: 500ms; }
-
-.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite; }
-
-.slow {
- -webkit-animation-duration: 750ms !important;
- animation-duration: 750ms !important; }
-
-.fast {
- -webkit-animation-duration: 250ms !important;
- animation-duration: 250ms !important; }
-
-.linear {
- -webkit-animation-timing-function: linear !important;
- animation-timing-function: linear !important; }
-
-.ease {
- -webkit-animation-timing-function: ease !important;
- animation-timing-function: ease !important; }
-
-.ease-in {
- -webkit-animation-timing-function: ease-in !important;
- animation-timing-function: ease-in !important; }
-
-.ease-out {
- -webkit-animation-timing-function: ease-out !important;
- animation-timing-function: ease-out !important; }
-
-.ease-in-out {
- -webkit-animation-timing-function: ease-in-out !important;
- animation-timing-function: ease-in-out !important; }
-
-.bounce-in {
- -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important;
- animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }
-
-.bounce-out {
- -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important;
- animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }
-
-.bounce-in-out {
- -webkit-animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important;
- animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }
-
-.short-delay {
- -webkit-animation-delay: 300ms !important;
- animation-delay: 300ms !important; }
-
-.long-delay {
- -webkit-animation-delay: 700ms !important;
- animation-delay: 700ms !important; }
-
-.site-logo {
- height: 32px; }
-
-.blog-post .post-meta {
- border-top: solid 1px #e6e6e6;
- border-bottom: solid 1px #e6e6e6; }
-
-.legacy-comments {
- border-top: solid 2px #1779ba;
- padding-top: 1em; }
- .legacy-comments .comment .title, .legacy-comments .comment-published .title {
- font-size: 1.2rem; }
- .legacy-comments .comment .submitted, .legacy-comments .comment-published .submitted {
- font-size: 0.8rem;
- color: #8a8a8a;
- padding-bottom: 0.25rem; }
- .legacy-comments .comment .links, .legacy-comments .comment .links *, .legacy-comments .comment-published .links, .legacy-comments .comment-published .links * {
- display: none; }
-
-.blog-footer {
- padding-top: 2rem;
- background-color: #1779ba;
- color: #fefefe; }
- .blog-footer a {
- color: #fefefe;
- text-decoration: underline; }
- .blog-footer ul {
- list-style-type: none;
- margin-left: 0;
- padding-left: 0; }
-
-/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC5jc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL192ZW5kb3Ivbm9ybWFsaXplLXNjc3Mvc2Fzcy9ub3JtYWxpemUvX25vcm1hbGl6ZS1taXhpbi5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvX3ZlbmRvci9ub3JtYWxpemUtc2Nzcy9zYXNzL25vcm1hbGl6ZS9fdmFyaWFibGVzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9fdmVuZG9yL25vcm1hbGl6ZS1zY3NzL3Nhc3Mvbm9ybWFsaXplL192ZXJ0aWNhbC1yaHl0aG0uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvX2dsb2JhbC5zY3NzIiwiX3NldHRpbmdzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3V0aWwvX21peGlucy5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9ncmlkL19jbGFzc2VzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2dyaWQvX3Jvdy5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL191bml0LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2dyaWQvX2d1dHRlci5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19icmVha3BvaW50LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2dyaWQvX3NpemUuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZ3JpZC9fY29sdW1uLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2dyaWQvX3Bvc2l0aW9uLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2dyaWQvX2xheW91dC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy90eXBvZ3JhcGh5L19iYXNlLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX2hlbHBlcnMuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdHlwb2dyYXBoeS9fYWxpZ25tZW50LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX3ByaW50LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2J1dHRvbi5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fdGV4dC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fY2hlY2tib3guc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2xhYmVsLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19oZWxwLXRleHQuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19maWVsZHNldC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fc2VsZWN0LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19lcnJvci5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLW1lbnUuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYmFkZ2Uuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnV0dG9uLWdyb3VwLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2NhbGxvdXQuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fY2FyZC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jbG9zZS1idXR0b24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVudS5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19tZW51LWljb24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZHJpbGxkb3duLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLW1lbnUuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcmVzcG9uc2l2ZS1lbWJlZC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19tYXRoLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2xhYmVsLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX21lZGlhLW9iamVjdC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19vZmYtY2FudmFzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX29yYml0LnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFyLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zdGlja3kuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcmV2ZWFsLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3N3aXRjaC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190YWJsZS5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19jb2xvci5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190YWJzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3RodW1ibmFpbC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190aXRsZS1iYXIuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdG9vbHRpcC5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190b3AtYmFyLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZmxvYXQuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9tb3Rpb24tdWkvc3JjL19jbGFzc2VzLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvbW90aW9uLXVpL3NyYy9fc2V0dGluZ3Muc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9tb3Rpb24tdWkvc3JjL3V0aWwvX2tleWZyYW1lLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvbW90aW9uLXVpL3NyYy90cmFuc2l0aW9ucy9fc2xpZGUuc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9tb3Rpb24tdWkvc3JjL3V0aWwvX3RyYW5zaXRpb24uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9tb3Rpb24tdWkvc3JjL3RyYW5zaXRpb25zL19mYWRlLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvbW90aW9uLXVpL3NyYy9lZmZlY3RzL19oaW5nZS5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL21vdGlvbi11aS9zcmMvdHJhbnNpdGlvbnMvX2hpbmdlLnNjc3MiLCIuLi8uLi9zY3JpcHRzL2Jvd2VyX2NvbXBvbmVudHMvbW90aW9uLXVpL3NyYy90cmFuc2l0aW9ucy9fem9vbS5zY3NzIiwiLi4vLi4vc2NyaXB0cy9ib3dlcl9jb21wb25lbnRzL21vdGlvbi11aS9zcmMvdHJhbnNpdGlvbnMvX3NwaW4uc2NzcyIsIi4uLy4uL3NjcmlwdHMvYm93ZXJfY29tcG9uZW50cy9tb3Rpb24tdWkvc3JjL3V0aWwvX2FuaW1hdGlvbi5zY3NzIiwiYXBwLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FDQWpCOzs7OztHQUtHO0FDd0NELGlFQUFpRTtBQUcvRDtvRkFDZ0Y7QUFFaEY7Ozs7O09BS0c7QUFFSDtFQUNFLHdCQzFDdUI7RUQwQ1MsT0FBTztFQVFyQyxrQkFBa0I7RUFBRSxPQUFPO0VBRTdCLDJCQUEyQjtFQUFFLE9BQU87RUFDcEMsK0JBQStCO0VBQUUsT0FBTyxFQUN6Qzs7QUFJRDtvRkFDZ0Y7QUFFaEY7O09BRUc7QUFFSDtFQUNFLFVBQVUsRUFDWDs7QUFFRDs7T0FFRztBQUVIOzs7Ozs7RUFNRSxlQUFlLEVBQ2hCOztBQUVEOzs7T0FHRztBQUVIO0VFOUVGLGVBWGlCO0VGb0dYLGlCQUFpQixFQUVwQjs7QUFvQ0Q7b0ZBQ2dGO0FBdUNoRjs7T0FFRztBQUVIOztFQUVFLGVBQWUsRUFDaEI7O0FBRUQ7O09BRUc7QUFFSDtFQUtJLGlCQ3ZMWSxFRHlMZjs7QUFFRDs7O09BR0c7QUFFSDtFQUNFLHdCQUF3QjtFQUFFLE9BQU87RUFDakMsVUFBVTtFQUFFLE9BQU87RUFDbkIsa0JBQWtCO0VBQUUsT0FBTyxFQUM1Qjs7QUFFRDs7T0FFRztBQUVIO0VBQ0UsZUFBZSxFQUNoQjs7QUFhRDs7O09BR0c7QUFFSDtFQUNFLGtDQUFrQztFQUFFLE9BQU87RUFDM0MsZUFBZTtFQUFFLE9BQU8sRUFDekI7O0FBSUQ7b0ZBQ2dGO0FBRWhGOzs7T0FHRztBQUVIO0VBQ0UsOEJBQThCO0VBQUUsT0FBTztFQUN2QyxzQ0FBc0M7RUFBRSxPQUFPLEVBQ2hEOztBQUVEOzs7T0FHRztBQUVIOztFQUVFLGlCQUFpQixFQUNsQjs7QUFJRDtvRkFDZ0Y7QUFFaEY7OztPQUdHO0FBRUg7RUFDRSxvQkFBb0I7RUFBRSxPQUFPO0VBQzdCLDJCQUEyQjtFQUFFLE9BQU87RUFDcEMsa0NBQWtDO0VBQUUsT0FBTyxFQUM1Qzs7QUFFRDs7T0FFRztBQUVIOztFQUVFLHFCQUFxQixFQUN0Qjs7QUFFRDs7T0FFRztBQUVIOztFQUVFLG9CQUFvQixFQUNyQjs7QUFFRDs7O09BR0c7QUFFSDs7O0VBR0Usa0NBQWtDO0VBQUUsT0FBTztFQUMzQyxlQUFlO0VBQUUsT0FBTyxFQUN6Qjs7QUFFRDs7T0FFRztBQUVIO0VBQ0UsbUJBQW1CLEVBQ3BCOztBQUVEOztPQUVHO0FBRUg7RUFDRSx1QkFBdUI7RUFDdkIsWUFBWSxFQUNiOztBQUVEOztPQUVHO0FBRUg7RUFDRSxlQUFlLEVBQ2hCOztBQUVEOzs7T0FHRztBQUVIOztFQUVFLGVBQWU7RUFDZixlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLHlCQUF5QixFQUMxQjs7QUFFRDtFQUNFLGdCQUFnQixFQUNqQjs7QUFFRDtFQUNFLFlBQVksRUFDYjs7QUFJRDtvRkFDZ0Y7QUFFaEY7O09BRUc7QUFFSDs7RUFFRSxzQkFBc0IsRUFDdkI7O0FBRUQ7O09BRUc7QUFFSDtFQUNFLGNBQWM7RUFDZCxVQUFVLEVBQ1g7O0FBRUQ7O09BRUc7QUFFSDtFQUNFLG1CQUFtQixFQUNwQjs7QUFFRDs7T0FFRztBQUVIO0VBQ0UsaUJBQWlCLEVBQ2xCOztBQUlEO29GQUNnRjtBQUVoRjs7O09BR0c7QUFFSDs7Ozs7RUFLRSx3QkN6WnVCO0VEeVpTLE9BQU87RUFDdkMsZ0JBQWdCO0VBQUUsT0FBTztFQUt2QixrQkFBa0I7RUFBRSxPQUFPO0VBRTdCLFVBQVU7RUFBRSxPQUFPLEVBQ3BCOztBQUVEOztPQUVHO0FBRUg7RUFDRSxrQkFBa0IsRUFDbkI7O0FBRUQ7OztPQUdHO0FBRUg7O0VBQ1MsT0FBTztFQUNkLHFCQUFxQixFQUN0Qjs7QUFFRDs7OztPQUlHO0FBRUg7Ozs7RUFJRSwyQkFBMkI7RUFBRSxPQUFPLEVBQ3JDOztBQUVEOzs7O0VBS0U7O1NBRUc7RUFPSDs7U0FFRyxFQUtKO0VBckJEOzs7O0lBVUksbUJBQW1CO0lBQ25CLFdBQVcsRUFDWjtFQVpIOzs7O0lBbUJJLCtCQUErQixFQUNoQzs7QUFHSDs7T0FFRztBQUVIO0VBQ0Usa0JBQWtCLEVBQ25COztBQUVEOzs7T0FHRztBRjNNUDs7RUUrTU0sdUJBQXVCO0VBQUUsT0FBTztFQUNoQyxXQUFXO0VBQUUsT0FBTyxFQUNyQjs7QUFFRDs7T0FFRztBRjNNUDs7RUUrTU0sYUFBYSxFQUNkOztBQUVEOzs7T0FHRztBRjdNUDtFRWdOTSw4QkFBOEI7RUFBRSxPQUFPO0VBQ3ZDLHFCQUFxQjtFQUFFLE9BQU87RUFFOUI7O1NBRUcsRUFNSjtFRm5OSDtJRWlOTSx5QkFBeUIsRUFDMUI7O0FBR0g7OztPQUdHO0FBRUg7RUFDRSwyQkFBMkI7RUFBRSxPQUFPO0VBQ3BDLGNBQWM7RUFBRSxPQUFPLEVBQ3hCOztBQUVEOztPQUVHO0FBRUg7RUFDRSwwQkFBMEI7RUFDMUIsY0FBYztFQUNkLCtCQUErQixFQUNoQzs7QUFFRDs7Ozs7T0FLRztBQUVIO0VBQ0UsdUJBQXVCO0VBQUUsT0FBTztFQUNoQyxlQUFlO0VBQUUsT0FBTztFQUN4QixnQkFBZ0I7RUFBRSxPQUFPO0VBQ3pCLFdBQVc7RUFBRSxPQUFPO0VBQ3BCLGVBQWU7RUFBRSxPQUFPO0VBQ3hCLG9CQUFvQjtFQUFFLE9BQU8sRUFDOUI7O0FBRUQ7OztPQUdHO0FBRUg7RUFDRSxzQkFBc0I7RUFBRSxPQUFPO0VBQy9CLHlCQUF5QjtFQUFFLE9BQU8sRUFDbkM7O0FBRUQ7O09BRUc7QUFFSDtFQUNFLGVBQWUsRUFDaEI7O0FBSUQ7b0ZBQ2dGO0FBRWhGOztPQUVHO0FBRUg7RUFDRSxlQUFlLEVBQ2hCOztBQUVEOztPQUVHO0FBRUg7RUFDRSxtQkFBbUIsRUFDcEI7O0FBRUQ7O09BRUc7QUFFSDtFQUNFLGVBQWUsRUFxQmhCOztBQUlEO29GQUNnRjtBQUVoRjs7T0FFRztBQUVIO0VBQ0Usc0JBQXNCLEVBQ3ZCOztBQUVEOztPQUVHO0FBRUg7RUFDRSxjQUFjLEVBQ2Y7O0FBSUQ7b0ZBQ2dGO0FBRWhGOztPQUVHO0FGeFBQO0VFMlBNLGNBQWMsRUFDZjs7QUc5aUJIO0VBQ0UseUVBQWdELEVBQ2pEOztBQUVEO0VBQ0UsdUJBQXVCO0VBQ3ZCLGdCQ3pFbUIsRUQwRXBCOztBQUdEOzs7RUFHRSxvQkFBb0IsRUFDckI7O0FBR0Q7RUFDRSxVQUFVO0VBQ1YsV0FBVztFQUVYLG9CQzFFVztFRDRFWCxvRUN6RXFFO0VEMEVyRSxvQkN0RXlCO0VEdUV6QixpQkMxRm1CO0VEMkZuQixlQ2hGVztFRG1GVCxvQ0FBb0M7RUFDcEMsbUNBQW1DLEVBRXRDOztBQUVEO0VBRUUsc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUd2QixnQkFBZ0I7RUFDaEIsYUFBYTtFQUNiLGdDQUFnQyxFQUNqQzs7QUFHRDtFQUNFLGFBQWE7RUFDYixpQkFBaUI7RUFDakIsaUJDN0ZhLEVEOEZkOztBQUdEO0VBQ0UsdUJBQXVCO0VBQ3ZCLFlBQVk7RUFDWixpQkNwR2EsRURxR2Q7O0FBSUQ7Ozs7OztFQUtJLDJCQUEyQixFQUM1Qjs7QUFJSDtFQUdFLFdBQVc7RUFFWCx5QkFBaUI7S0FBakIsc0JBQWlCO1VBQWpCLGlCQUFpQjtFQUNqQixVQUFVO0VBQ1YsaUJDMUhhO0VEMkhiLHdCQUF3QjtFQUV4QixlQUFlLEVBQ2hCO0VMMFJEO0lPOVNFLFdBQVcsRUFDWjs7QUZzQkQ7RUFDRSxlQUFlLEVBQ2hCOztBQUdEO0VBQ0UsMEJBQTBCLEVBQzNCOztBQUVEO0VBQ0UseUJBQXlCLEVBQzFCOztBR3hMRDtFQ3NFQSxpQkNUb0I7RUQxQmxCLG1CQUFtQjtFQUNuQixrQkFBa0IsRURTbkI7RUE3Q0Q7SUR3SEUsZUFBZTtJQUNmLGFBQWEsRUFNZDtFQy9IRDtJRGtJRSxZQUFZLEVBQ2I7RUNuSUQ7SUdMRSxpQkFGa0I7SUFHbEIsZ0JBSGtCLEVIY2Y7RUFQTDtJQ3lERSx3QkFGaUI7SUFHakIsdUJBSGlCLEVEckNoQjtJSThHQztNSmhJSjtRQ3lERSx5QkFGaUI7UUFHakIsd0JBSGlCLEVEckNoQixFQUFBO0lJOEdDO01KaElKO1FDeURFLHlCQUZpQjtRQUdqQix3QkFIaUIsRURyQ2hCLEVBQUE7SUFsQkg7TUFlTSxnQkFBZ0I7TUFDaEIsZUFBZSxFQUNoQjtFQWpCTDtJQ3NFQSxnQkFIYSxFRHZDVjtJQTVCSDtNQXlCTSxtQkFBbUI7TUFDbkIsa0JBQWtCLEVBQ25CO0VBM0JMO0lDc0VBLGdCQUhhLEVEbkNWO0VBaENIO0lHTEUsd0JBRmtCO0lBR2xCLHVCQUhrQixFSGdEWDtFQXpDVDtJR0xFLHlCQUZrQjtJQUdsQix3QkFIa0IsRUhnRFg7O0FBT1Q7RUs3REEsWUNlc0I7RUErQnRCLFlUeUN5RDtFTS9FdkQsd0JBRmtCO0VBR2xCLHVCQUhrQixFSCtEbkI7RUl3RUc7SUpoRko7TUdyREUseUJBRmtCO01BR2xCLHdCQUhrQixFSCtEbkIsRUFBQTtFQVJEO0lNUEksYVRrQ3NELEVTakN2RDtFTk1IO0lPMUJFLFlWb0R1RCxFVW5EeEQ7O0FQcUNEO0VBQ0UsWUFBWSxFQUNiOztBQUdEO0VBQ0UsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsZ0JBQWdCLEVBQ2pCOztBQUtHO0VLeEZKLGdCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGVBSG1CLEVQaUdkOztBQUVEO0VPakdKLG1CQUFtQjtFQUNuQixnQkFIbUIsRVBxR2Q7O0FBTUg7RU85RUosZ0JEaEJzQixFTmdHakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHNCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLFdDZXNCLEVOMkVqQjs7QUFJQztFTzdGSixtQkFBbUI7RUFDbkIsVUFIbUIsRVBpR2Q7O0FBRUQ7RU9qR0osbUJBQW1CO0VBQ25CLFdBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLGlCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLFdDZXNCLEVOMkVqQjs7QUFJQztFTzdGSixtQkFBbUI7RUFDbkIsVUFIbUIsRVBpR2Q7O0FBRUQ7RU9qR0osbUJBQW1CO0VBQ25CLFdBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLGlCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLFdDZXNCLEVOMkVqQjs7QUFJQztFTzdGSixtQkFBbUI7RUFDbkIsVUFIbUIsRVBpR2Q7O0FBRUQ7RU9qR0osbUJBQW1CO0VBQ25CLFdBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLGlCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLGlCQ2VzQixFTjJFakI7O0FBSUM7RU83RkosbUJBQW1CO0VBQ25CLGdCQUhtQixFUGlHZDs7QUFFRDtFT2pHSixtQkFBbUI7RUFDbkIsaUJBSG1CLEVQcUdkOztBQU1IO0VPOUVKLHVCRGJzQixFTjZGakI7O0FBcEJEO0VLeEZKLFlDZXNCLEVOMkVqQjs7QUFnQkQ7RU85RUosdUJEYnNCLEVONkZqQjs7QUFLRDtFUXpHRixZWCtFdUQ7RVc5RXZELFlBQWlCLEVBaUNsQjtFUnVFRztJUWpGQSxZQUFZLEVBQ2I7RVJnRkM7SVE3RUEsWUFBWSxFQUNiO0VSNEVDO0lRekVBLFlYK0NxRCxFVzlDdEQ7O0FSd0VDO0VRekdGLFlYK0V1RDtFVzlFdkQsV0FBaUIsRUFpQ2xCO0VSdUVHO0lRakZBLFlBQVksRUFDYjtFUmdGQztJUTdFQSxZQUFZLEVBQ2I7RVI0RUM7SVF6RUEsWVgrQ3FELEVXOUN0RDs7QVJ3RUM7RVF6R0YsWVgrRXVEO0VXOUV2RCxpQkFBaUIsRUFpQ2xCO0VSdUVHO0lRakZBLFlBQVksRUFDYjtFUmdGQztJUTdFQSxZQUFZLEVBQ2I7RVI0RUM7SVF6RUEsWVgrQ3FELEVXOUN0RDs7QVJ3RUM7RVF6R0YsWVgrRXVEO0VXOUV2RCxXQUFpQixFQWlDbEI7RVJ1RUc7SVFqRkEsWUFBWSxFQUNiO0VSZ0ZDO0lRN0VBLFlBQVksRUFDYjtFUjRFQztJUXpFQSxZWCtDcUQsRVc5Q3REOztBUndFQztFUXpHRixZWCtFdUQ7RVc5RXZELFdBQWlCLEVBaUNsQjtFUnVFRztJUWpGQSxZQUFZLEVBQ2I7RVJnRkM7SVE3RUEsWUFBWSxFQUNiO0VSNEVDO0lRekVBLFlYK0NxRCxFVzlDdEQ7O0FSd0VDO0VRekdGLFlYK0V1RDtFVzlFdkQsaUJBQWlCLEVBaUNsQjtFUnVFRztJUWpGQSxZQUFZLEVBQ2I7RVJnRkM7SVE3RUEsWUFBWSxFQUNiO0VSNEVDO0lRekVBLFlYK0NxRCxFVzlDdEQ7O0FSd0VDO0VRekdGLFlYK0V1RDtFVzlFdkQsaUJBQWlCLEVBaUNsQjtFUnVFRztJUWpGQSxZQUFZLEVBQ2I7RVJnRkM7SVE3RUEsWUFBWSxFQUNiO0VSNEVDO0lRekVBLFlYK0NxRCxFVzlDdEQ7O0FSd0VDO0VRekdGLFlYK0V1RDtFVzlFdkQsYUFBaUIsRUFpQ2xCO0VSdUVHO0lRakZBLFlBQVksRUFDYjtFUmdGQztJUTdFQSxZQUFZLEVBQ2I7RVI0RUM7SVF6RUEsWVgrQ3FELEVXOUN0RDs7QVI4RUQ7RUcvR0EsaUJBRmtCO0VBR2xCLGdCQUhrQixFSGtIZ0I7O0FBRGxDO0VBSUksZ0JBQWdCO0VBQ2hCLGVBQWUsRUFDaEI7O0FBR0g7RUFDRSxnQkFBZ0I7RUFDaEIsZUFBZSxFQUNoQjs7QUFFRDtFRzdIQSx3QkFGa0I7RUFHbEIsdUJBSGtCLEVIZ0l5Qjs7QUFJM0M7RU9qSUEsbUJBQW1CO0VBQ25CLGtCQUFrQixFUGtJakI7RUFGRDtJT3BJRSxZQUFZO0lBQ1osWUFBWSxFQUNiOztBUHVJRDs7O0VPNUhGLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLGVBQWUsRVAySFo7O0FJSkM7RUpyREE7SUt4RkosZ0JDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixlQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixnQkFIbUIsRVBxR2Q7RUFNSDtJTzlFSixnQkRoQnNCLEVOZ0dqQjtFQXBCRDtJS3hGSixpQkNlc0IsRU4yRWpCO0VBSUM7SU83RkosbUJBQW1CO0lBQ25CLGdCQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixpQkFIbUIsRVBxR2Q7RUFNSDtJTzlFSixzQkRic0IsRU42RmpCO0VBcEJEO0lLeEZKLFdDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixVQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixXQUhtQixFUHFHZDtFQU1IO0lPOUVKLHVCRGJzQixFTjZGakI7RUFwQkQ7SUt4RkosaUJDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixnQkFIbUIsRVBpR2Q7RUFFRDtJT2pHSixtQkFBbUI7SUFDbkIsaUJBSG1CLEVQcUdkO0VBTUg7SU85RUosaUJEYnNCLEVONkZqQjtFQXBCRDtJS3hGSixpQkNlc0IsRU4yRWpCO0VBSUM7SU83RkosbUJBQW1CO0lBQ25CLGdCQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixpQkFIbUIsRVBxR2Q7RUFNSDtJTzlFSix1QkRic0IsRU42RmpCO0VBcEJEO0lLeEZKLFdDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixVQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixXQUhtQixFUHFHZDtFQU1IO0lPOUVKLHVCRGJzQixFTjZGakI7RUFwQkQ7SUt4RkosaUJDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixnQkFIbUIsRVBpR2Q7RUFFRDtJT2pHSixtQkFBbUI7SUFDbkIsaUJBSG1CLEVQcUdkO0VBTUg7SU85RUosaUJEYnNCLEVONkZqQjtFQXBCRDtJS3hGSixpQkNlc0IsRU4yRWpCO0VBSUM7SU83RkosbUJBQW1CO0lBQ25CLGdCQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixpQkFIbUIsRVBxR2Q7RUFNSDtJTzlFSix1QkRic0IsRU42RmpCO0VBcEJEO0lLeEZKLFdDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixVQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixXQUhtQixFUHFHZDtFQU1IO0lPOUVKLHVCRGJzQixFTjZGakI7RUFwQkQ7SUt4RkosaUJDZXNCLEVOMkVqQjtFQUlDO0lPN0ZKLG1CQUFtQjtJQUNuQixnQkFIbUIsRVBpR2Q7RUFFRDtJT2pHSixtQkFBbUI7SUFDbkIsaUJBSG1CLEVQcUdkO0VBTUg7SU85RUosaUJEYnNCLEVONkZqQjtFQXBCRDtJS3hGSixpQkNlc0IsRU4yRWpCO0VBSUM7SU83RkosbUJBQW1CO0lBQ25CLGdCQUhtQixFUGlHZDtFQUVEO0lPakdKLG1CQUFtQjtJQUNuQixpQkFIbUIsRVBxR2Q7RUFNSDtJTzlFSix1QkRic0IsRU42RmpCO0VBcEJEO0lLeEZKLFlDZXNCLEVOMkVqQjtFQWdCRDtJTzlFSix1QkRic0IsRU42RmpCO0VBS0Q7SVF6R0YsWVgrRXVEO0lXOUV2RCxZQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSd0VDO0lRekdGLFlYK0V1RDtJVzlFdkQsV0FBaUIsRUFpQ2xCO0lSdUVHO01RakZBLFlBQVksRUFDYjtJUmdGQztNUTdFQSxZQUFZLEVBQ2I7SVI0RUM7TVF6RUEsWVgrQ3FELEVXOUN0RDtFUndFQztJUXpHRixZWCtFdUQ7SVc5RXZELGlCQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSd0VDO0lRekdGLFlYK0V1RDtJVzlFdkQsV0FBaUIsRUFpQ2xCO0lSdUVHO01RakZBLFlBQVksRUFDYjtJUmdGQztNUTdFQSxZQUFZLEVBQ2I7SVI0RUM7TVF6RUEsWVgrQ3FELEVXOUN0RDtFUndFQztJUXpHRixZWCtFdUQ7SVc5RXZELFdBQWlCLEVBaUNsQjtJUnVFRztNUWpGQSxZQUFZLEVBQ2I7SVJnRkM7TVE3RUEsWUFBWSxFQUNiO0lSNEVDO01RekVBLFlYK0NxRCxFVzlDdEQ7RVJ3RUM7SVF6R0YsWVgrRXVEO0lXOUV2RCxpQkFBaUIsRUFpQ2xCO0lSdUVHO01RakZBLFlBQVksRUFDYjtJUmdGQztNUTdFQSxZQUFZLEVBQ2I7SVI0RUM7TVF6RUEsWVgrQ3FELEVXOUN0RDtFUndFQztJUXpHRixZWCtFdUQ7SVc5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bUJBQW1CO0lBQ25CLGlCQUhtQixFUHFHZDtFQU1IO0lPOUVKLHVCRGJzQixFTjZGakI7RUFwQkQ7SUt4RkosWUNlc0IsRU4yRWpCO0VBZ0JEO0lPOUVKLHVCRGJzQixFTjZGakI7RUFLRDtJUXpHRixZWCtFdUQ7SVc5RXZELFlBQWlCLEVBaUNsQjtJUnVFRztNUWpGQSxZQUFZLEVBQ2I7SVJnRkM7TVE3RUEsWUFBWSxFQUNiO0lSNEVDO01RekVBLFlYK0NxRCxFVzlDdEQ7RVJ3RUM7SVF6R0YsWVgrRXVEO0lXOUV2RCxXQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSd0VDO0lRekdGLFlYK0V1RDtJVzlFdkQsaUJBQWlCLEVBaUNsQjtJUnVFRztNUWpGQSxZQUFZLEVBQ2I7SVJnRkM7TVE3RUEsWUFBWSxFQUNiO0lSNEVDO01RekVBLFlYK0NxRCxFVzlDdEQ7RVJ3RUM7SVF6R0YsWVgrRXVEO0lXOUV2RCxXQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSd0VDO0lRekdGLFlYK0V1RDtJVzlFdkQsV0FBaUIsRUFpQ2xCO0lSdUVHO01RakZBLFlBQVksRUFDYjtJUmdGQztNUTdFQSxZQUFZLEVBQ2I7SVI0RUM7TVF6RUEsWVgrQ3FELEVXOUN0RDtFUndFQztJUXpHRixZWCtFdUQ7SVc5RXZELGlCQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSd0VDO0lRekdGLFlYK0V1RDtJVzlFdkQsaUJBQWlCLEVBaUNsQjtJUnVFRztNUWpGQSxZQUFZLEVBQ2I7SVJnRkM7TVE3RUEsWUFBWSxFQUNiO0lSNEVDO01RekVBLFlYK0NxRCxFVzlDdEQ7RVJ3RUM7SVF6R0YsWVgrRXVEO0lXOUV2RCxhQUFpQixFQWlDbEI7SVJ1RUc7TVFqRkEsWUFBWSxFQUNiO0lSZ0ZDO01RN0VBLFlBQVksRUFDYjtJUjRFQztNUXpFQSxZWCtDcUQsRVc5Q3REO0VSOEVEO0lHL0dBLGlCQUZrQjtJQUdsQixnQkFIa0IsRUhrSGdCO0VBRGxDO0lBSUksZ0JBQWdCO0lBQ2hCLGVBQWUsRUFDaEI7RUFHSDtJQUNFLGdCQUFnQjtJQUNoQixlQUFlLEVBQ2hCO0VBRUQ7SUc3SEEseUJBRmtCO0lBR2xCLHdCQUhrQixFSGdJeUI7RUFJM0M7SU9qSUEsbUJBQW1CO0lBQ25CLGtCQUFrQixFUGtJakI7SUFGRDtNT3BJRSxZQUFZO01BQ1osWUFBWSxFQUNiO0VQdUlEOzs7SU81SEYsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsZUFBZSxFUDJIWixFQUFBOztBQUlIO0VHeEZFLHVCRGFrQixFRjZFbkI7RUd4Rkc7SUFDQSxpQkFBaUIsRUFDbEI7RUM0RUM7SUpRSjtNR3hGRSx3QkRha0IsRUY2RW5CO01HeEZHO1FBQ0EsaUJBQWlCLEVBQ2xCLEVBQUE7O0FNZ0xIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUJFLFVBQVU7RUFDVixXQUFXLEVBQ1o7O0FBR0Q7RUFDRSxvQlhqSjBCO0VXbUoxQixtQkFBbUI7RUFDbkIsaUJYckpzQjtFV3NKdEIsbUNYcEp5QyxFV3FKMUM7O0FBR0Q7O0VBRUUsbUJBQW1CO0VBQ25CLHFCQUFxQixFQUN0Qjs7QUFHRDs7RUFFRSxrQlhuT3FCO0VXb09yQixxQkFBcUIsRUFDdEI7O0FBR0Q7RUFDRSxlWDNLaUI7RVc0S2pCLHFCQUFxQixFQUN0Qjs7QUFHRDs7Ozs7O0VBTUUsb0VYelBxRTtFVzBQckUsbUJYL01zQjtFV2dOdEIsb0JYdlB5QjtFV3dQekIsZVgvTWtCO0VXZ05sQixtQ1gzTHNDLEVXaU12QztFQWhCRDs7Ozs7O0lBYUksZUFBZTtJQUNmLGVYdlFlLEVXd1FoQjs7QUFRRztFQUlJLGtCUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBQWpDRDtFQUlJLG1CUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBQWpDRDtFQUlJLHFCUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBQWpDRDtFQUlJLG9CUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBQWpDRDtFQUlJLHFCUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBQWpDRDtFQUlJLGdCUHZQVTtFT21RVixpQlg1T1c7RVdvUFgsY0FBYztFQU9kLHNCWDFQaUIsRVc0UHBCOztBTGpOSDtFS2dMRTtJQUlJLGdCUHZQVSxFT29SYjtFQWpDRDtJQUlJLGtCUHZQVSxFT29SYjtFQWpDRDtJQUlJLHFCUHZQVSxFT29SYjtFQWpDRDtJQUlJLHFCUHZQVSxFT29SYjtFQWpDRDtJQUlJLG1CUHZQVSxFT29SYjtFQWpDRDtJQUlJLGdCUHZQVSxFT29SYixFQUFBOztBQU1QO0VBQ0UscUJBQXFCO0VBQ3JCLGVYaFVjO0VXaVVkLHNCWHBPeUI7RVdzT3pCLGdCQUFnQixFQWFqQjtFQWxCRDtJQVNJLGVYM08wQixFVytPM0I7RUFiSDtJQWdCSSxVQUFVLEVBQ1g7O0FBSUg7RUFDRSxZQUFZO0VBRVosaUJQbFRrQjtFT21UbEIsVUFBVTtFQUNWLHFCWHZQeUI7RVd5UHpCLGNBQWM7RUFDZCxnQkFBZ0I7RUFDaEIsaUNYclZpQjtFV3NWakIsZUFBZSxFQUNoQjs7QUFHRDs7O0VBR0Usb0JYalIwQjtFV2tSMUIsNkJYaFF5QjtFV2lRekIsaUJYcFJzQixFV3FSdkI7O0FBR0Q7RUFDRSxtQkFBbUIsRUFDcEI7O0FBR0Q7RUFDRSxxQlgxUXNCO0VXMlF0QixzQlg3UWtCLEVXOFFuQjs7QUFHRDtFQUNFLHFCWGhSc0IsRVdpUnZCOztBQUdEO0VBRUkscUJYclIyQjtFV3NSM0IsaUJBQWlCLEVBQ2xCOztBQUlIO0VBQ0Usb0JYM1J5QixFV2lTMUI7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QXhDLHdDQUF3QztFQUF4QywyREFBd0M7RUFHMUMsb0NBQTRCO1VBQTVCLDRCQUE0QixFQ1IzQjs7QUpOSDtFRW9DRSxxQ0FGaUI7TUFFakIsaUNBRmlCO1VBRWpCLDZCQUZpQixFRWhCaEI7O0FKakJIO0VBZkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixpQ0FGaUI7TUFFakIsNkJBRmlCO1VBRWpCLHlCQUZpQjtFQ3ZCZixnREFBd0M7RUFBeEMsd0NBQXdDO0VBQXhDLDJEQUF3QztFQUcxQyxvQ0FBNEI7VUFBNUIsNEJBQTRCLEVDUjNCOztBSkxIO0VFbUNFLHFDQUZpQjtNQUVqQixpQ0FGaUI7VUFFakIsNkJBRmlCLEVFaEJoQjs7QUpkSDtFQWxCQSwyQkNrQmM7RURqQmQsbUNDaUNlO0VDZ0JiLFdGaENrQztFS0FsQyw2QkFBNkIsRURFNUI7O0FKRkg7RUVnQ0UsV0ZoQ3FDLEVJY3BDOztBSmJIO0VBbkJBLDJCQ2tCYztFRGpCZCxtQ0NpQ2U7RUNnQmIsV0YvQmtDO0VLRGxDLDZCQUE2QixFREU1Qjs7QUpESDtFRStCRSxXRi9CcUMsRUlhcEM7O0FKVkg7RUF0QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYix1RElyQ1k7VUpxQ1osK0NJckNZO0VKcUNaLDhCQUZpQjtNQUVqQiwwQkFGaUI7VUFFakIsc0JBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSkVIO0VFNEJFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKVEg7RUF2QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYix1RElwQ2M7VUpvQ2QsK0NJcENjO0VKb0NkLGdDQUZpQjtNQUVqQiw0QkFGaUI7VUFFakIsd0JBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSkdIO0VFMkJFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKUkg7RUF4QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixzREluQ2U7VUptQ2YsOENJbkNlO0VKbUNmLGlDQUZpQjtNQUVqQiw2QkFGaUI7VUFFakIseUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSklIO0VFMEJFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKUEg7RUF6QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixzRElsQ2E7VUprQ2IsOENJbENhO0VKa0NiLCtCQUZpQjtNQUVqQiwyQkFGaUI7VUFFakIsdUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSktIO0VFeUJFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKTkg7RUExQkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYix1RElyQ1k7VUpxQ1osK0NJckNZO0VKcUNaLGlDQUZpQjtNQUVqQiw2QkFGaUI7VUFFakIseUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSk1IO0VFd0JFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKTEg7RUEzQkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYix1RElwQ2M7VUpvQ2QsK0NJcENjO0VKb0NkLGlDQUZpQjtNQUVqQiw2QkFGaUI7VUFFakIseUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQTJCLEVITjVCOztBSk9IO0VFdUJFLG9ESVZzQztVSlV0Qyw0Q0lWc0M7RUNKcEMsV0FBMkIsRUhKNUI7O0FKSkg7RUE1QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixvRElSd0M7VUpReEMsNENJUndDO0VKUXhDLDhCQUZpQjtNQUVqQiwwQkFGaUI7VUFFakIsc0JBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQThCLEVITi9COztBSlFIO0VFc0JFLHVESXJDWTtVSnFDWiwrQ0lyQ1k7RUN1QlYsV0FBOEIsRUhKL0I7O0FKSEg7RUE3QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixvRElSd0M7VUpReEMsNENJUndDO0VKUXhDLGdDQUZpQjtNQUVqQiw0QkFGaUI7VUFFakIsd0JBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQThCLEVITi9COztBSlNIO0VFcUJFLHVESXBDYztVSm9DZCwrQ0lwQ2M7RUNzQlosV0FBOEIsRUhKL0I7O0FKRkg7RUE5QkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixvRElSd0M7VUpReEMsNENJUndDO0VKUXhDLGlDQUZpQjtNQUVqQiw2QkFGaUI7VUFFakIseUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQThCLEVITi9COztBSlVIO0VFb0JFLHNESW5DZTtVSm1DZiw4Q0luQ2U7RUNxQmIsV0FBOEIsRUhKL0I7O0FKREg7RUEvQkEsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixvRElSd0M7VUpReEMsNENJUndDO0VKUXhDLCtCQUZpQjtNQUVqQiwyQkFGaUI7VUFFakIsdUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQThCLEVITi9COztBSldIO0VFbUJFLHNESWxDYTtVSmtDYiw4Q0lsQ2E7RUNvQlgsV0FBOEIsRUhKL0I7O0FKQUg7RUFoQ0EsMkJDa0JjO0VEakJkLG1DQ2lDZTtFQ2dCYixvRElSd0M7VUpReEMsNENJUndDO0VKUXhDLGlDQUZpQjtNQUVqQiw2QkFGaUI7VUFFakIseUJBRmlCO0VLdkJmLGdEQUF3QztFQUF4Qyx3Q0FBd0M7RUFBeEMsMkRBQXdDO0VBQ3hDLFdBQThCLEVITi9COztBSllIO0VFa0JFLHVESXJDWTtVSnFDWiwr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QlgsMkJBQTJCLEVBQzVCO0VBUEg7SUFTSSxzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLGdCQUFnQixFQUNqQiIsImZpbGUiOiJhcHAuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4gKiBWZXJzaW9uIDYuMy4xXG4gKiBmb3VuZGF0aW9uLnp1cmIuY29tXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcbiAqL1xuLyohIG5vcm1hbGl6ZS1zY3NzIHwgTUlUL0dQTHYyIExpY2Vuc2UgfCBiaXQubHkvbm9ybWFsaXplLXNjc3MgKi9cbi8qIERvY3VtZW50XG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICAgICAqIDEuIENoYW5nZSB0aGUgZGVmYXVsdCBmb250IGZhbWlseSBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICogMy4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpblxuICAgICAqICAgIElFIG9uIFdpbmRvd3MgUGhvbmUgYW5kIGluIGlPUy5cbiAgICAgKi9cbmh0bWwge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgLyogMSAqL1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMiAqL1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLyogMyAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8qIDMgKi8gfVxuXG4vKiBTZWN0aW9uc1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAgICAgKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKi9cbmJvZHkge1xuICBtYXJnaW46IDA7IH1cblxuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gICAgICovXG5hcnRpY2xlLFxuYXNpZGUsXG5mb290ZXIsXG5oZWFkZXIsXG5uYXYsXG5zZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLyoqXG4gICAgICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICAgICAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gICAgICovXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwOyB9XG5cbi8qIEdyb3VwaW5nIGNvbnRlbnRcbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gICAgICovXG5maWdjYXB0aW9uLFxuZmlndXJlIHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IG1hcmdpbiBpbiBJRSA4LlxuICAgICAqL1xuZmlndXJlIHtcbiAgbWFyZ2luOiAxZW0gNDBweDsgfVxuXG4vKipcbiAgICAgKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBGaXJlZm94LlxuICAgICAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICAgICAqL1xuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgLyogMSAqL1xuICBoZWlnaHQ6IDA7XG4gIC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIC8qIDIgKi8gfVxuXG4vKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAgICAgKi9cbm1haW4ge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4vKipcbiAgICAgKiAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAgICAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAgICAgKi9cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqLyB9XG5cbi8qIExpbmtzXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICAgICAqIDEuIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAgICAgKiAyLiBSZW1vdmUgZ2FwcyBpbiBsaW5rcyB1bmRlcmxpbmUgaW4gaU9TIDgrIGFuZCBTYWZhcmkgOCsuXG4gICAgICovXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC8qIDEgKi9cbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbiAgLyogMiAqLyB9XG5cbi8qKlxuICAgICAqIFJlbW92ZSB0aGUgb3V0bGluZSBvbiBmb2N1c2VkIGxpbmtzIHdoZW4gdGhleSBhcmUgYWxzbyBhY3RpdmUgb3IgaG92ZXJlZFxuICAgICAqIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAgICAqL1xuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZS13aWR0aDogMDsgfVxuXG4vKiBUZXh0LWxldmVsIHNlbWFudGljc1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAgICAgKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gRmlyZWZveCAzOS0uXG4gICAgICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAgICAgKi9cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgLyogMSAqL1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgLyogMiAqL1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gIC8qIDIgKi8gfVxuXG4vKipcbiAgICAgKiBQcmV2ZW50IHRoZSBkdXBsaWNhdGUgYXBwbGljYXRpb24gb2YgYGJvbGRlcmAgYnkgdGhlIG5leHQgcnVsZSBpbiBTYWZhcmkgNi5cbiAgICAgKi9cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogaW5oZXJpdDsgfVxuXG4vKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICAgICAqL1xuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7IH1cblxuLyoqXG4gICAgICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICovXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqLyB9XG5cbi8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBmb250IHN0eWxlIGluIEFuZHJvaWQgNC4zLS5cbiAgICAgKi9cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4vKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgYmFja2dyb3VuZCBhbmQgY29sb3IgaW4gSUUgOS0uXG4gICAgICovXG5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMDtcbiAgY29sb3I6ICMwMDA7IH1cblxuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICovXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlOyB9XG5cbi8qKlxuICAgICAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICAgICAqIGFsbCBicm93c2Vycy5cbiAgICAgKi9cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtOyB9XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtOyB9XG5cbi8qIEVtYmVkZGVkIGNvbnRlbnRcbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gICAgICovXG5hdWRpbyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG5cbi8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gICAgICovXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7IH1cblxuLyoqXG4gICAgICogUmVtb3ZlIHRoZSBib3JkZXIgb24gaW1hZ2VzIGluc2lkZSBsaW5rcyBpbiBJRSAxMC0uXG4gICAgICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7IH1cblxuLyoqXG4gICAgICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gICAgICovXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cblxuLyogRm9ybXNcbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gICAgICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gICAgICovXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDEwMCU7XG4gIC8qIDEgKi9cbiAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gIC8qIDEgKi9cbiAgbWFyZ2luOiAwO1xuICAvKiAyICovIH1cblxuLyoqXG4gICAgICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gICAgICovXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuXG4vKipcbiAgICAgKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS5cbiAgICAgKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gICAgICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lOyB9XG5cbi8qKlxuICAgICAqIDEuIFByZXZlbnQgYSBXZWJLaXQgYnVnIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYCBhbmQgYHZpZGVvYFxuICAgICAqICAgIGNvbnRyb2xzIGluIEFuZHJvaWQgNC5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICAgICAqL1xuYnV0dG9uLFxuaHRtbCBbdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICAvKiAyICovIH1cblxuYnV0dG9uLFxuW3R5cGU9XCJidXR0b25cIl0sXG5bdHlwZT1cInJlc2V0XCJdLFxuW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAvKipcbiAgICAgICAqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGluIEZpcmVmb3guXG4gICAgICAgKi9cbiAgLyoqXG4gICAgICAgKiBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG4gICAgICAgKi8gfVxuICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gIFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuICBbdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDsgfVxuXG4vKipcbiAgICAgKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICAgICAqL1xuaW5wdXQge1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuXG4vKipcbiAgICAgKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC0uXG4gICAgICogMi4gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIElFIDEwLS5cbiAgICAgKi9cblt0eXBlPVwiY2hlY2tib3hcIl0sXG5bdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAyICovIH1cblxuLyoqXG4gICAgICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICAgICAqL1xuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4vKipcbiAgICAgKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cbiAgICAgKi9cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIC8qIDIgKi9cbiAgLyoqXG4gICAgICAgKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICAgICAgICovIH1cbiAgW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sIFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1cblxuLyoqXG4gICAgICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAgICAgKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gICAgICovXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG4gIC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDtcbiAgLyogMiAqLyB9XG5cbi8qKlxuICAgICAqIENoYW5nZSB0aGUgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAgICAqL1xuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07IH1cblxuLyoqXG4gICAgICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuXG4gICAgICogMy4gUmVtb3ZlIHRoZSBwYWRkaW5nIHNvIGRldmVsb3BlcnMgYXJlIG5vdCBjYXVnaHQgb3V0IHdoZW4gdGhleSB6ZXJvIG91dFxuICAgICAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICAgICAqL1xubGVnZW5kIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgLyogMSAqL1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMyAqL1xuICBjb2xvcjogaW5oZXJpdDtcbiAgLyogMiAqL1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAvKiAxICovIH1cblxuLyoqXG4gICAgICogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gICAgICogMi4gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAgICAgKi9cbnByb2dyZXNzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAvKiAxICovXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgLyogMiAqLyB9XG5cbi8qKlxuICAgICAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUuXG4gICAgICovXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvOyB9XG5cbi8qIEludGVyYWN0aXZlXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUsIGFuZCBGaXJlZm94LlxuICAgICAqL1xuZGV0YWlscyB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi8qXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGxpc3QtaXRlbTsgfVxuXG4vKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqL1xubWVudSB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi8qIFNjcmlwdGluZ1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAgICAgKi9cbmNhbnZhcyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuXG4vKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAgICAgKi9cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG4vKiBIaWRkZW5cbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAtLlxuICAgICAqL1xuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5mb3VuZGF0aW9uLW1xIHtcbiAgZm9udC1mYW1pbHk6IFwic21hbGw9MGVtJm1lZGl1bT00MGVtJmxhcmdlPTY0ZW0meGxhcmdlPTc1ZW0meHhsYXJnZT05MGVtXCI7IH1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTAwJTsgfVxuXG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0OyB9XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgY29sb3I6ICMwYTBhMGE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOyB9XG5cbmltZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IH1cblxudGV4dGFyZWEge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuc2VsZWN0IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuLm1hcF9jYW52YXMgaW1nLFxuLm1hcF9jYW52YXMgZW1iZWQsXG4ubWFwX2NhbnZhcyBvYmplY3QsXG4ubXFhLWRpc3BsYXkgaW1nLFxuLm1xYS1kaXNwbGF5IGVtYmVkLFxuLm1xYS1kaXNwbGF5IG9iamVjdCB7XG4gIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OyB9XG5cbmJ1dHRvbiB7XG4gIHBhZGRpbmc6IDA7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGxpbmUtaGVpZ2h0OiAxOyB9XG4gIFtkYXRhLXdoYXRpbnB1dD0nbW91c2UnXSBidXR0b24ge1xuICAgIG91dGxpbmU6IDA7IH1cblxucHJlIHtcbiAgb3ZlcmZsb3c6IGF1dG87IH1cblxuLmlzLXZpc2libGUge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG5cbi5pcy1oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuLnJvdyB7XG4gIG1heC13aWR0aDogNzVyZW07XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgLnJvdzo6YmVmb3JlLCAucm93OjphZnRlciB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgY29udGVudDogJyAnOyB9XG4gIC5yb3c6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDsgfVxuICAucm93LmNvbGxhcHNlID4gLmNvbHVtbiwgLnJvdy5jb2xsYXBzZSA+IC5jb2x1bW5zIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAucm93IC5yb3cge1xuICAgIG1hcmdpbi1yaWdodDogLTAuNjI1cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAtMC42MjVyZW07IH1cbiAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAgICAgLnJvdyAucm93IHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMC45Mzc1cmVtO1xuICAgICAgICBtYXJnaW4tbGVmdDogLTAuOTM3NXJlbTsgfSB9XG4gICAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAgIC5yb3cgLnJvdyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLTAuOTM3NXJlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0wLjkzNzVyZW07IH0gfVxuICAgIC5yb3cgLnJvdy5jb2xsYXBzZSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAucm93LmV4cGFuZGVkIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7IH1cbiAgICAucm93LmV4cGFuZGVkIC5yb3cge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgLnJvdzpub3QoLmV4cGFuZGVkKSAucm93IHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7IH1cbiAgLnJvdy5ndXR0ZXItc21hbGwgPiAuY29sdW1uLCAucm93Lmd1dHRlci1zbWFsbCA+IC5jb2x1bW5zIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjYyNXJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNjI1cmVtOyB9XG4gIC5yb3cuZ3V0dGVyLW1lZGl1bSA+IC5jb2x1bW4sIC5yb3cuZ3V0dGVyLW1lZGl1bSA+IC5jb2x1bW5zIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjkzNzVyZW07IH1cblxuLmNvbHVtbiwgLmNvbHVtbnMge1xuICB3aWR0aDogMTAwJTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNjI1cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNjI1cmVtOyB9XG4gIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gICAgLmNvbHVtbiwgLmNvbHVtbnMge1xuICAgICAgcGFkZGluZy1yaWdodDogMC45Mzc1cmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjkzNzVyZW07IH0gfVxuICAuY29sdW1uOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksIC5jb2x1bW5zOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIGZsb2F0OiByaWdodDsgfVxuICAuY29sdW1uLmVuZDpsYXN0LWNoaWxkOmxhc3QtY2hpbGQsIC5lbmQuY29sdW1uczpsYXN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICAgIGZsb2F0OiBsZWZ0OyB9XG5cbi5jb2x1bW4ucm93LnJvdywgLnJvdy5yb3cuY29sdW1ucyB7XG4gIGZsb2F0OiBub25lOyB9XG5cbi5yb3cgLmNvbHVtbi5yb3cucm93LCAucm93IC5yb3cucm93LmNvbHVtbnMge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7IH1cblxuLnNtYWxsLTEge1xuICB3aWR0aDogOC4zMzMzMyU7IH1cblxuLnNtYWxsLXB1c2gtMSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogOC4zMzMzMyU7IH1cblxuLnNtYWxsLXB1bGwtMSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTguMzMzMzMlOyB9XG5cbi5zbWFsbC1vZmZzZXQtMCB7XG4gIG1hcmdpbi1sZWZ0OiAwJTsgfVxuXG4uc21hbGwtMiB7XG4gIHdpZHRoOiAxNi42NjY2NyU7IH1cblxuLnNtYWxsLXB1c2gtMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogMTYuNjY2NjclOyB9XG5cbi5zbWFsbC1wdWxsLTIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IC0xNi42NjY2NyU7IH1cblxuLnNtYWxsLW9mZnNldC0xIHtcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlOyB9XG5cbi5zbWFsbC0zIHtcbiAgd2lkdGg6IDI1JTsgfVxuXG4uc21hbGwtcHVzaC0zIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiAyNSU7IH1cblxuLnNtYWxsLXB1bGwtMyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTI1JTsgfVxuXG4uc21hbGwtb2Zmc2V0LTIge1xuICBtYXJnaW4tbGVmdDogMTYuNjY2NjclOyB9XG5cbi5zbWFsbC00IHtcbiAgd2lkdGg6IDMzLjMzMzMzJTsgfVxuXG4uc21hbGwtcHVzaC00IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiAzMy4zMzMzMyU7IH1cblxuLnNtYWxsLXB1bGwtNCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTMzLjMzMzMzJTsgfVxuXG4uc21hbGwtb2Zmc2V0LTMge1xuICBtYXJnaW4tbGVmdDogMjUlOyB9XG5cbi5zbWFsbC01IHtcbiAgd2lkdGg6IDQxLjY2NjY3JTsgfVxuXG4uc21hbGwtcHVzaC01IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiA0MS42NjY2NyU7IH1cblxuLnNtYWxsLXB1bGwtNSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTQxLjY2NjY3JTsgfVxuXG4uc21hbGwtb2Zmc2V0LTQge1xuICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlOyB9XG5cbi5zbWFsbC02IHtcbiAgd2lkdGg6IDUwJTsgfVxuXG4uc21hbGwtcHVzaC02IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiA1MCU7IH1cblxuLnNtYWxsLXB1bGwtNiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTUwJTsgfVxuXG4uc21hbGwtb2Zmc2V0LTUge1xuICBtYXJnaW4tbGVmdDogNDEuNjY2NjclOyB9XG5cbi5zbWFsbC03IHtcbiAgd2lkdGg6IDU4LjMzMzMzJTsgfVxuXG4uc21hbGwtcHVzaC03IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiA1OC4zMzMzMyU7IH1cblxuLnNtYWxsLXB1bGwtNyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTU4LjMzMzMzJTsgfVxuXG4uc21hbGwtb2Zmc2V0LTYge1xuICBtYXJnaW4tbGVmdDogNTAlOyB9XG5cbi5zbWFsbC04IHtcbiAgd2lkdGg6IDY2LjY2NjY3JTsgfVxuXG4uc21hbGwtcHVzaC04IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiA2Ni42NjY2NyU7IH1cblxuLnNtYWxsLXB1bGwtOCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTY2LjY2NjY3JTsgfVxuXG4uc21hbGwtb2Zmc2V0LTcge1xuICBtYXJnaW4tbGVmdDogNTguMzMzMzMlOyB9XG5cbi5zbWFsbC05IHtcbiAgd2lkdGg6IDc1JTsgfVxuXG4uc21hbGwtcHVzaC05IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiA3NSU7IH1cblxuLnNtYWxsLXB1bGwtOSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTc1JTsgfVxuXG4uc21hbGwtb2Zmc2V0LTgge1xuICBtYXJnaW4tbGVmdDogNjYuNjY2NjclOyB9XG5cbi5zbWFsbC0xMCB7XG4gIHdpZHRoOiA4My4zMzMzMyU7IH1cblxuLnNtYWxsLXB1c2gtMTAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDgzLjMzMzMzJTsgfVxuXG4uc21hbGwtcHVsbC0xMCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTgzLjMzMzMzJTsgfVxuXG4uc21hbGwtb2Zmc2V0LTkge1xuICBtYXJnaW4tbGVmdDogNzUlOyB9XG5cbi5zbWFsbC0xMSB7XG4gIHdpZHRoOiA5MS42NjY2NyU7IH1cblxuLnNtYWxsLXB1c2gtMTEge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDkxLjY2NjY3JTsgfVxuXG4uc21hbGwtcHVsbC0xMSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTkxLjY2NjY3JTsgfVxuXG4uc21hbGwtb2Zmc2V0LTEwIHtcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJTsgfVxuXG4uc21hbGwtMTIge1xuICB3aWR0aDogMTAwJTsgfVxuXG4uc21hbGwtb2Zmc2V0LTExIHtcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY3JTsgfVxuXG4uc21hbGwtdXAtMSA+IC5jb2x1bW4sIC5zbWFsbC11cC0xID4gLmNvbHVtbnMge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLnNtYWxsLXVwLTEgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTEgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC0xID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbisxKSwgLnNtYWxsLXVwLTEgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTEgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC0xID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTIgPiAuY29sdW1uLCAuc21hbGwtdXAtMiA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiA1MCU7IH1cbiAgLnNtYWxsLXVwLTIgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTIgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC0yID4gLmNvbHVtbjpudGgtb2YtdHlwZSgybisxKSwgLnNtYWxsLXVwLTIgPiAuY29sdW1uczpudGgtb2YtdHlwZSgybisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTIgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC0yID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTMgPiAuY29sdW1uLCAuc21hbGwtdXAtMyA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAzMy4zMzMzMyU7IH1cbiAgLnNtYWxsLXVwLTMgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTMgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC0zID4gLmNvbHVtbjpudGgtb2YtdHlwZSgzbisxKSwgLnNtYWxsLXVwLTMgPiAuY29sdW1uczpudGgtb2YtdHlwZSgzbisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTMgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC0zID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTQgPiAuY29sdW1uLCAuc21hbGwtdXAtNCA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAyNSU7IH1cbiAgLnNtYWxsLXVwLTQgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTQgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC00ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg0bisxKSwgLnNtYWxsLXVwLTQgPiAuY29sdW1uczpudGgtb2YtdHlwZSg0bisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTQgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC00ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTUgPiAuY29sdW1uLCAuc21hbGwtdXAtNSA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAyMCU7IH1cbiAgLnNtYWxsLXVwLTUgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTUgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC01ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg1bisxKSwgLnNtYWxsLXVwLTUgPiAuY29sdW1uczpudGgtb2YtdHlwZSg1bisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTUgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC01ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTYgPiAuY29sdW1uLCAuc21hbGwtdXAtNiA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxNi42NjY2NyU7IH1cbiAgLnNtYWxsLXVwLTYgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTYgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC02ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg2bisxKSwgLnNtYWxsLXVwLTYgPiAuY29sdW1uczpudGgtb2YtdHlwZSg2bisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTYgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC02ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTcgPiAuY29sdW1uLCAuc21hbGwtdXAtNyA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxNC4yODU3MSU7IH1cbiAgLnNtYWxsLXVwLTcgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLnNtYWxsLXVwLTcgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgIGNsZWFyOiBub25lOyB9XG4gIC5zbWFsbC11cC03ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg3bisxKSwgLnNtYWxsLXVwLTcgPiAuY29sdW1uczpudGgtb2YtdHlwZSg3bisxKSB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnNtYWxsLXVwLTcgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5zbWFsbC11cC03ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cblxuLnNtYWxsLXVwLTggPiAuY29sdW1uLCAuc21hbGwtdXAtOCA+IC5jb2x1bW5zIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMi41JTsgfVxuICAuc21hbGwtdXAtOCA+IC5jb2x1bW46bnRoLW9mLXR5cGUoMW4pLCAuc21hbGwtdXAtOCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgY2xlYXI6IG5vbmU7IH1cbiAgLnNtYWxsLXVwLTggPiAuY29sdW1uOm50aC1vZi10eXBlKDhuKzEpLCAuc21hbGwtdXAtOCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDhuKzEpIHtcbiAgICBjbGVhcjogYm90aDsgfVxuICAuc21hbGwtdXAtOCA+IC5jb2x1bW46bGFzdC1jaGlsZCwgLnNtYWxsLXVwLTggPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICBmbG9hdDogbGVmdDsgfVxuXG4uc21hbGwtY29sbGFwc2UgPiAuY29sdW1uLCAuc21hbGwtY29sbGFwc2UgPiAuY29sdW1ucyB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIHBhZGRpbmctbGVmdDogMDsgfVxuXG4uc21hbGwtY29sbGFwc2UgLnJvdyB7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuLmV4cGFuZGVkLnJvdyAuc21hbGwtY29sbGFwc2Uucm93IHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMDsgfVxuXG4uc21hbGwtdW5jb2xsYXBzZSA+IC5jb2x1bW4sIC5zbWFsbC11bmNvbGxhcHNlID4gLmNvbHVtbnMge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjYyNXJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjYyNXJlbTsgfVxuXG4uc21hbGwtY2VudGVyZWQge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gIC5zbWFsbC1jZW50ZXJlZCwgLnNtYWxsLWNlbnRlcmVkOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIGZsb2F0OiBub25lO1xuICAgIGNsZWFyOiBib3RoOyB9XG5cbi5zbWFsbC11bmNlbnRlcmVkLFxuLnNtYWxsLXB1c2gtMCxcbi5zbWFsbC1wdWxsLTAge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMDsgfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAubWVkaXVtLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzJTsgfVxuICAubWVkaXVtLXB1c2gtMSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDguMzMzMzMlOyB9XG4gIC5tZWRpdW0tcHVsbC0xIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTguMzMzMzMlOyB9XG4gIC5tZWRpdW0tb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTsgfVxuICAubWVkaXVtLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NyU7IH1cbiAgLm1lZGl1bS1wdXNoLTIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAxNi42NjY2NyU7IH1cbiAgLm1lZGl1bS1wdWxsLTIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAtMTYuNjY2NjclOyB9XG4gIC5tZWRpdW0tb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzJTsgfVxuICAubWVkaXVtLTMge1xuICAgIHdpZHRoOiAyNSU7IH1cbiAgLm1lZGl1bS1wdXNoLTMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAyNSU7IH1cbiAgLm1lZGl1bS1wdWxsLTMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAtMjUlOyB9XG4gIC5tZWRpdW0tb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NyU7IH1cbiAgLm1lZGl1bS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMlOyB9XG4gIC5tZWRpdW0tcHVzaC00IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogMzMuMzMzMzMlOyB9XG4gIC5tZWRpdW0tcHVsbC00IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTMzLjMzMzMzJTsgfVxuICAubWVkaXVtLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlOyB9XG4gIC5tZWRpdW0tNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY3JTsgfVxuICAubWVkaXVtLXB1c2gtNSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDQxLjY2NjY3JTsgfVxuICAubWVkaXVtLXB1bGwtNSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC00MS42NjY2NyU7IH1cbiAgLm1lZGl1bS1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzJTsgfVxuICAubWVkaXVtLTYge1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgLm1lZGl1bS1wdXNoLTYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA1MCU7IH1cbiAgLm1lZGl1bS1wdWxsLTYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAtNTAlOyB9XG4gIC5tZWRpdW0tb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NyU7IH1cbiAgLm1lZGl1bS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMlOyB9XG4gIC5tZWRpdW0tcHVzaC03IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogNTguMzMzMzMlOyB9XG4gIC5tZWRpdW0tcHVsbC03IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTU4LjMzMzMzJTsgfVxuICAubWVkaXVtLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlOyB9XG4gIC5tZWRpdW0tOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY3JTsgfVxuICAubWVkaXVtLXB1c2gtOCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDY2LjY2NjY3JTsgfVxuICAubWVkaXVtLXB1bGwtOCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC02Ni42NjY2NyU7IH1cbiAgLm1lZGl1bS1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzJTsgfVxuICAubWVkaXVtLTkge1xuICAgIHdpZHRoOiA3NSU7IH1cbiAgLm1lZGl1bS1wdXNoLTkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA3NSU7IH1cbiAgLm1lZGl1bS1wdWxsLTkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAtNzUlOyB9XG4gIC5tZWRpdW0tb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NyU7IH1cbiAgLm1lZGl1bS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzJTsgfVxuICAubWVkaXVtLXB1c2gtMTAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA4My4zMzMzMyU7IH1cbiAgLm1lZGl1bS1wdWxsLTEwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTgzLjMzMzMzJTsgfVxuICAubWVkaXVtLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlOyB9XG4gIC5tZWRpdW0tMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NyU7IH1cbiAgLm1lZGl1bS1wdXNoLTExIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogOTEuNjY2NjclOyB9XG4gIC5tZWRpdW0tcHVsbC0xMSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC05MS42NjY2NyU7IH1cbiAgLm1lZGl1bS1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMyU7IH1cbiAgLm1lZGl1bS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLm1lZGl1bS1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NyU7IH1cbiAgLm1lZGl1bS11cC0xID4gLmNvbHVtbiwgLm1lZGl1bS11cC0xID4gLmNvbHVtbnMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLm1lZGl1bS11cC0xID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtMSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtMSA+IC5jb2x1bW46bnRoLW9mLXR5cGUoMW4rMSksIC5tZWRpdW0tdXAtMSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC0xID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTEgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtMiA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtMiA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogNTAlOyB9XG4gICAgLm1lZGl1bS11cC0yID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtMiA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtMiA+IC5jb2x1bW46bnRoLW9mLXR5cGUoMm4rMSksIC5tZWRpdW0tdXAtMiA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDJuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC0yID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTIgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtMyA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtMyA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMzMuMzMzMzMlOyB9XG4gICAgLm1lZGl1bS11cC0zID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtMyA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtMyA+IC5jb2x1bW46bnRoLW9mLXR5cGUoM24rMSksIC5tZWRpdW0tdXAtMyA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDNuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC0zID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTMgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtNCA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtNCA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMjUlOyB9XG4gICAgLm1lZGl1bS11cC00ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtNCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtNCA+IC5jb2x1bW46bnRoLW9mLXR5cGUoNG4rMSksIC5tZWRpdW0tdXAtNCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDRuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC00ID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTQgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtNSA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtNSA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMjAlOyB9XG4gICAgLm1lZGl1bS11cC01ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtNSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtNSA+IC5jb2x1bW46bnRoLW9mLXR5cGUoNW4rMSksIC5tZWRpdW0tdXAtNSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDVuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC01ID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTUgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtNiA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtNiA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTYuNjY2NjclOyB9XG4gICAgLm1lZGl1bS11cC02ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtNiA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtNiA+IC5jb2x1bW46bnRoLW9mLXR5cGUoNm4rMSksIC5tZWRpdW0tdXAtNiA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDZuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC02ID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTYgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtNyA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtNyA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTQuMjg1NzElOyB9XG4gICAgLm1lZGl1bS11cC03ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5tZWRpdW0tdXAtNyA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5tZWRpdW0tdXAtNyA+IC5jb2x1bW46bnRoLW9mLXR5cGUoN24rMSksIC5tZWRpdW0tdXAtNyA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDduKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLm1lZGl1bS11cC03ID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubWVkaXVtLXVwLTcgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5tZWRpdW0tdXAtOCA+IC5jb2x1bW4sIC5tZWRpdW0tdXAtOCA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTIuNSU7IH1cbiAgICAubWVkaXVtLXVwLTggPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLm1lZGl1bS11cC04ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lOyB9XG4gICAgLm1lZGl1bS11cC04ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg4bisxKSwgLm1lZGl1bS11cC04ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoOG4rMSkge1xuICAgICAgY2xlYXI6IGJvdGg7IH1cbiAgICAubWVkaXVtLXVwLTggPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5tZWRpdW0tdXAtOCA+IC5jb2x1bW5zOmxhc3QtY2hpbGQge1xuICAgICAgZmxvYXQ6IGxlZnQ7IH1cbiAgLm1lZGl1bS1jb2xsYXBzZSA+IC5jb2x1bW4sIC5tZWRpdW0tY29sbGFwc2UgPiAuY29sdW1ucyB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLm1lZGl1bS1jb2xsYXBzZSAucm93IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH1cbiAgLmV4cGFuZGVkLnJvdyAubWVkaXVtLWNvbGxhcHNlLnJvdyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG4gIC5tZWRpdW0tdW5jb2xsYXBzZSA+IC5jb2x1bW4sIC5tZWRpdW0tdW5jb2xsYXBzZSA+IC5jb2x1bW5zIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjkzNzVyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjkzNzVyZW07IH1cbiAgLm1lZGl1bS1jZW50ZXJlZCB7XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICAgLm1lZGl1bS1jZW50ZXJlZCwgLm1lZGl1bS1jZW50ZXJlZDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgY2xlYXI6IGJvdGg7IH1cbiAgLm1lZGl1bS11bmNlbnRlcmVkLFxuICAubWVkaXVtLXB1c2gtMCxcbiAgLm1lZGl1bS1wdWxsLTAge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cblxuQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgLmxhcmdlLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzJTsgfVxuICAubGFyZ2UtcHVzaC0xIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogOC4zMzMzMyU7IH1cbiAgLmxhcmdlLXB1bGwtMSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC04LjMzMzMzJTsgfVxuICAubGFyZ2Utb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTsgfVxuICAubGFyZ2UtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY3JTsgfVxuICAubGFyZ2UtcHVzaC0yIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogMTYuNjY2NjclOyB9XG4gIC5sYXJnZS1wdWxsLTIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAtMTYuNjY2NjclOyB9XG4gIC5sYXJnZS1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMlOyB9XG4gIC5sYXJnZS0zIHtcbiAgICB3aWR0aDogMjUlOyB9XG4gIC5sYXJnZS1wdXNoLTMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAyNSU7IH1cbiAgLmxhcmdlLXB1bGwtMyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC0yNSU7IH1cbiAgLmxhcmdlLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjclOyB9XG4gIC5sYXJnZS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMlOyB9XG4gIC5sYXJnZS1wdXNoLTQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAzMy4zMzMzMyU7IH1cbiAgLmxhcmdlLXB1bGwtNCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC0zMy4zMzMzMyU7IH1cbiAgLmxhcmdlLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlOyB9XG4gIC5sYXJnZS01IHtcbiAgICB3aWR0aDogNDEuNjY2NjclOyB9XG4gIC5sYXJnZS1wdXNoLTUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA0MS42NjY2NyU7IH1cbiAgLmxhcmdlLXB1bGwtNSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC00MS42NjY2NyU7IH1cbiAgLmxhcmdlLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMlOyB9XG4gIC5sYXJnZS02IHtcbiAgICB3aWR0aDogNTAlOyB9XG4gIC5sYXJnZS1wdXNoLTYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA1MCU7IH1cbiAgLmxhcmdlLXB1bGwtNiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC01MCU7IH1cbiAgLmxhcmdlLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjclOyB9XG4gIC5sYXJnZS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMlOyB9XG4gIC5sYXJnZS1wdXNoLTcge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA1OC4zMzMzMyU7IH1cbiAgLmxhcmdlLXB1bGwtNyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC01OC4zMzMzMyU7IH1cbiAgLmxhcmdlLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlOyB9XG4gIC5sYXJnZS04IHtcbiAgICB3aWR0aDogNjYuNjY2NjclOyB9XG4gIC5sYXJnZS1wdXNoLTgge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA2Ni42NjY2NyU7IH1cbiAgLmxhcmdlLXB1bGwtOCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC02Ni42NjY2NyU7IH1cbiAgLmxhcmdlLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMlOyB9XG4gIC5sYXJnZS05IHtcbiAgICB3aWR0aDogNzUlOyB9XG4gIC5sYXJnZS1wdXNoLTkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA3NSU7IH1cbiAgLmxhcmdlLXB1bGwtOSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC03NSU7IH1cbiAgLmxhcmdlLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjclOyB9XG4gIC5sYXJnZS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzJTsgfVxuICAubGFyZ2UtcHVzaC0xMCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDgzLjMzMzMzJTsgfVxuICAubGFyZ2UtcHVsbC0xMCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC04My4zMzMzMyU7IH1cbiAgLmxhcmdlLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlOyB9XG4gIC5sYXJnZS0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY3JTsgfVxuICAubGFyZ2UtcHVzaC0xMSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDkxLjY2NjY3JTsgfVxuICAubGFyZ2UtcHVsbC0xMSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC05MS42NjY2NyU7IH1cbiAgLmxhcmdlLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzJTsgfVxuICAubGFyZ2UtMTIge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5sYXJnZS1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NyU7IH1cbiAgLmxhcmdlLXVwLTEgPiAuY29sdW1uLCAubGFyZ2UtdXAtMSA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5sYXJnZS11cC0xID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5sYXJnZS11cC0xID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lOyB9XG4gICAgLmxhcmdlLXVwLTEgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKzEpLCAubGFyZ2UtdXAtMSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLmxhcmdlLXVwLTEgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5sYXJnZS11cC0xID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgICBmbG9hdDogbGVmdDsgfVxuICAubGFyZ2UtdXAtMiA+IC5jb2x1bW4sIC5sYXJnZS11cC0yID4gLmNvbHVtbnMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgICAubGFyZ2UtdXAtMiA+IC5jb2x1bW46bnRoLW9mLXR5cGUoMW4pLCAubGFyZ2UtdXAtMiA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5sYXJnZS11cC0yID4gLmNvbHVtbjpudGgtb2YtdHlwZSgybisxKSwgLmxhcmdlLXVwLTIgPiAuY29sdW1uczpudGgtb2YtdHlwZSgybisxKSB7XG4gICAgICBjbGVhcjogYm90aDsgfVxuICAgIC5sYXJnZS11cC0yID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubGFyZ2UtdXAtMiA+IC5jb2x1bW5zOmxhc3QtY2hpbGQge1xuICAgICAgZmxvYXQ6IGxlZnQ7IH1cbiAgLmxhcmdlLXVwLTMgPiAuY29sdW1uLCAubGFyZ2UtdXAtMyA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMzMuMzMzMzMlOyB9XG4gICAgLmxhcmdlLXVwLTMgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLmxhcmdlLXVwLTMgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgICAgY2xlYXI6IG5vbmU7IH1cbiAgICAubGFyZ2UtdXAtMyA+IC5jb2x1bW46bnRoLW9mLXR5cGUoM24rMSksIC5sYXJnZS11cC0zID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoM24rMSkge1xuICAgICAgY2xlYXI6IGJvdGg7IH1cbiAgICAubGFyZ2UtdXAtMyA+IC5jb2x1bW46bGFzdC1jaGlsZCwgLmxhcmdlLXVwLTMgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5sYXJnZS11cC00ID4gLmNvbHVtbiwgLmxhcmdlLXVwLTQgPiAuY29sdW1ucyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDI1JTsgfVxuICAgIC5sYXJnZS11cC00ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5sYXJnZS11cC00ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lOyB9XG4gICAgLmxhcmdlLXVwLTQgPiAuY29sdW1uOm50aC1vZi10eXBlKDRuKzEpLCAubGFyZ2UtdXAtNCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDRuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLmxhcmdlLXVwLTQgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5sYXJnZS11cC00ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgICBmbG9hdDogbGVmdDsgfVxuICAubGFyZ2UtdXAtNSA+IC5jb2x1bW4sIC5sYXJnZS11cC01ID4gLmNvbHVtbnMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAyMCU7IH1cbiAgICAubGFyZ2UtdXAtNSA+IC5jb2x1bW46bnRoLW9mLXR5cGUoMW4pLCAubGFyZ2UtdXAtNSA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDFuKSB7XG4gICAgICBjbGVhcjogbm9uZTsgfVxuICAgIC5sYXJnZS11cC01ID4gLmNvbHVtbjpudGgtb2YtdHlwZSg1bisxKSwgLmxhcmdlLXVwLTUgPiAuY29sdW1uczpudGgtb2YtdHlwZSg1bisxKSB7XG4gICAgICBjbGVhcjogYm90aDsgfVxuICAgIC5sYXJnZS11cC01ID4gLmNvbHVtbjpsYXN0LWNoaWxkLCAubGFyZ2UtdXAtNSA+IC5jb2x1bW5zOmxhc3QtY2hpbGQge1xuICAgICAgZmxvYXQ6IGxlZnQ7IH1cbiAgLmxhcmdlLXVwLTYgPiAuY29sdW1uLCAubGFyZ2UtdXAtNiA+IC5jb2x1bW5zIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTYuNjY2NjclOyB9XG4gICAgLmxhcmdlLXVwLTYgPiAuY29sdW1uOm50aC1vZi10eXBlKDFuKSwgLmxhcmdlLXVwLTYgPiAuY29sdW1uczpudGgtb2YtdHlwZSgxbikge1xuICAgICAgY2xlYXI6IG5vbmU7IH1cbiAgICAubGFyZ2UtdXAtNiA+IC5jb2x1bW46bnRoLW9mLXR5cGUoNm4rMSksIC5sYXJnZS11cC02ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoNm4rMSkge1xuICAgICAgY2xlYXI6IGJvdGg7IH1cbiAgICAubGFyZ2UtdXAtNiA+IC5jb2x1bW46bGFzdC1jaGlsZCwgLmxhcmdlLXVwLTYgPiAuY29sdW1uczpsYXN0LWNoaWxkIHtcbiAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5sYXJnZS11cC03ID4gLmNvbHVtbiwgLmxhcmdlLXVwLTcgPiAuY29sdW1ucyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDE0LjI4NTcxJTsgfVxuICAgIC5sYXJnZS11cC03ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5sYXJnZS11cC03ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lOyB9XG4gICAgLmxhcmdlLXVwLTcgPiAuY29sdW1uOm50aC1vZi10eXBlKDduKzEpLCAubGFyZ2UtdXAtNyA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDduKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLmxhcmdlLXVwLTcgPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5sYXJnZS11cC03ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgICBmbG9hdDogbGVmdDsgfVxuICAubGFyZ2UtdXAtOCA+IC5jb2x1bW4sIC5sYXJnZS11cC04ID4gLmNvbHVtbnMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAxMi41JTsgfVxuICAgIC5sYXJnZS11cC04ID4gLmNvbHVtbjpudGgtb2YtdHlwZSgxbiksIC5sYXJnZS11cC04ID4gLmNvbHVtbnM6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lOyB9XG4gICAgLmxhcmdlLXVwLTggPiAuY29sdW1uOm50aC1vZi10eXBlKDhuKzEpLCAubGFyZ2UtdXAtOCA+IC5jb2x1bW5zOm50aC1vZi10eXBlKDhuKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoOyB9XG4gICAgLmxhcmdlLXVwLTggPiAuY29sdW1uOmxhc3QtY2hpbGQsIC5sYXJnZS11cC04ID4gLmNvbHVtbnM6bGFzdC1jaGlsZCB7XG4gICAgICBmbG9hdDogbGVmdDsgfVxuICAubGFyZ2UtY29sbGFwc2UgPiAuY29sdW1uLCAubGFyZ2UtY29sbGFwc2UgPiAuY29sdW1ucyB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLmxhcmdlLWNvbGxhcHNlIC5yb3cge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAuZXhwYW5kZWQucm93IC5sYXJnZS1jb2xsYXBzZS5yb3cge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAubGFyZ2UtdW5jb2xsYXBzZSA+IC5jb2x1bW4sIC5sYXJnZS11bmNvbGxhcHNlID4gLmNvbHVtbnMge1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuOTM3NXJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuOTM3NXJlbTsgfVxuICAubGFyZ2UtY2VudGVyZWQge1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5sYXJnZS1jZW50ZXJlZCwgLmxhcmdlLWNlbnRlcmVkOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBjbGVhcjogYm90aDsgfVxuICAubGFyZ2UtdW5jZW50ZXJlZCxcbiAgLmxhcmdlLXB1c2gtMCxcbiAgLmxhcmdlLXB1bGwtMCB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuXG4uY29sdW1uLWJsb2NrIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTsgfVxuICAuY29sdW1uLWJsb2NrID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwZW0pIHtcbiAgICAuY29sdW1uLWJsb2NrIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEuODc1cmVtOyB9XG4gICAgICAuY29sdW1uLWJsb2NrID4gOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cblxuZGl2LFxuZGwsXG5kdCxcbmRkLFxudWwsXG5vbCxcbmxpLFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2LFxucHJlLFxuZm9ybSxcbnAsXG5ibG9ja3F1b3RlLFxudGgsXG50ZCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG5wIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogMS42O1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OyB9XG5cbmVtLFxuaSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IH1cblxuc3Ryb25nLFxuYiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IH1cbiAgaDEgc21hbGwsXG4gIGgyIHNtYWxsLFxuICBoMyBzbWFsbCxcbiAgaDQgc21hbGwsXG4gIGg1IHNtYWxsLFxuICBoNiBzbWFsbCB7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgY29sb3I6ICNjYWNhY2E7IH1cblxuaDEge1xuICBmb250LXNpemU6IDEuNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtOyB9XG5cbmgyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07IH1cblxuaDMge1xuICBmb250LXNpemU6IDEuMTg3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtOyB9XG5cbmg0IHtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtOyB9XG5cbmg1IHtcbiAgZm9udC1zaXplOiAxLjA2MjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTsgfVxuXG5oNiB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtOyB9XG5cbkBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gIGgxIHtcbiAgICBmb250LXNpemU6IDNyZW07IH1cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMi41cmVtOyB9XG4gIGgzIHtcbiAgICBmb250LXNpemU6IDEuOTM3NXJlbTsgfVxuICBoNCB7XG4gICAgZm9udC1zaXplOiAxLjU2MjVyZW07IH1cbiAgaDUge1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgfVxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxcmVtOyB9IH1cblxuYSB7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBjb2xvcjogIzE3NzliYTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgYTpob3ZlciwgYTpmb2N1cyB7XG4gICAgY29sb3I6ICMxNDY4YTA7IH1cbiAgYSBpbWcge1xuICAgIGJvcmRlcjogMDsgfVxuXG5ociB7XG4gIGNsZWFyOiBib3RoO1xuICBtYXgtd2lkdGg6IDc1cmVtO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbjogMS4yNXJlbSBhdXRvO1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItcmlnaHQ6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2FjYWNhO1xuICBib3JkZXItbGVmdDogMDsgfVxuXG51bCxcbm9sLFxuZGwge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuICBsaW5lLWhlaWdodDogMS42OyB9XG5cbmxpIHtcbiAgZm9udC1zaXplOiBpbmhlcml0OyB9XG5cbnVsIHtcbiAgbWFyZ2luLWxlZnQ6IDEuMjVyZW07XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgfVxuXG5vbCB7XG4gIG1hcmdpbi1sZWZ0OiAxLjI1cmVtOyB9XG5cbnVsIHVsLCBvbCB1bCwgdWwgb2wsIG9sIG9sIHtcbiAgbWFyZ2luLWxlZnQ6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cblxuZGwge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gIGRsIGR0IHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjNyZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuYmxvY2txdW90ZSB7XG4gIG1hcmdpbjogMCAwIDFyZW07XG4gIHBhZGRpbmc6IDAuNTYyNXJlbSAxLjI1cmVtIDAgMS4xODc1cmVtO1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjYWNhY2E7IH1cbiAgYmxvY2txdW90ZSwgYmxvY2txdW90ZSBwIHtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIGNvbG9yOiAjOGE4YThhOyB9XG5cbmNpdGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIGNvbG9yOiAjOGE4YThhOyB9XG4gIGNpdGU6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIuKAlCBcIjsgfVxuXG5hYmJyIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjMGEwYTBhO1xuICBjb2xvcjogIzBhMGEwYTtcbiAgY3Vyc29yOiBoZWxwOyB9XG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDsgfVxuXG5jb2RlIHtcbiAgcGFkZGluZzogMC4xMjVyZW0gMC4zMTI1cmVtIDAuMDYyNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NhY2FjYTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBcIkxpYmVyYXRpb24gTW9ub1wiLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjMGEwYTBhOyB9XG5cbmtiZCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMC4xMjVyZW0gMC4yNXJlbSAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBmb250LWZhbWlseTogQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgY29sb3I6ICMwYTBhMGE7IH1cblxuLnN1YmhlYWRlciB7XG4gIG1hcmdpbi10b3A6IDAuMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBjb2xvcjogIzhhOGE4YTsgfVxuXG4ubGVhZCB7XG4gIGZvbnQtc2l6ZTogMTI1JTtcbiAgbGluZS1oZWlnaHQ6IDEuNjsgfVxuXG4uc3RhdCB7XG4gIGZvbnQtc2l6ZTogMi41cmVtO1xuICBsaW5lLWhlaWdodDogMTsgfVxuICBwICsgLnN0YXQge1xuICAgIG1hcmdpbi10b3A6IC0xcmVtOyB9XG5cbi5uby1idWxsZXQge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4udGV4dC1sZWZ0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuXG4udGV4dC1yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4udGV4dC1qdXN0aWZ5IHtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTsgfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAubWVkaXVtLXRleHQtbGVmdCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAubWVkaXVtLXRleHQtcmlnaHQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIC5tZWRpdW0tdGV4dC1jZW50ZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAubWVkaXVtLXRleHQtanVzdGlmeSB7XG4gICAgdGV4dC1hbGlnbjoganVzdGlmeTsgfSB9XG5cbkBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NGVtKSB7XG4gIC5sYXJnZS10ZXh0LWxlZnQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7IH1cbiAgLmxhcmdlLXRleHQtcmlnaHQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIC5sYXJnZS10ZXh0LWNlbnRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gIC5sYXJnZS10ZXh0LWp1c3RpZnkge1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IH0gfVxuXG4uc2hvdy1mb3ItcHJpbnQge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuQG1lZGlhIHByaW50IHtcbiAgKiB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgfVxuICAuc2hvdy1mb3ItcHJpbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgLmhpZGUtZm9yLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUuc2hvdy1mb3ItcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgdGhlYWQuc2hvdy1mb3ItcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gIHRib2R5LnNob3ctZm9yLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICB0ci5zaG93LWZvci1wcmludCB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGQuc2hvdy1mb3ItcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICB0aC5zaG93LWZvci1wcmludCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG4gIGEsXG4gIGE6dmlzaXRlZCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cbiAgYVtocmVmXTphZnRlciB7XG4gICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7IH1cbiAgLmlyIGE6YWZ0ZXIsXG4gIGFbaHJlZl49J2phdmFzY3JpcHQ6J106YWZ0ZXIsXG4gIGFbaHJlZl49JyMnXTphZnRlciB7XG4gICAgY29udGVudDogJyc7IH1cbiAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKHRpdGxlKSBcIilcIjsgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM4YThhOGE7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgQHBhZ2Uge1xuICAgIG1hcmdpbjogMC41Y207IH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMzsgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9XG4gIC5wcmludC1icmVhay1pbnNpZGUge1xuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvOyB9IH1cblxuLmJ1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICBwYWRkaW5nOiAwLjg1ZW0gMWVtO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzIGVhc2Utb3V0LCBjb2xvciAwLjI1cyBlYXNlLW91dDtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3NzliYTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddIC5idXR0b24ge1xuICAgIG91dGxpbmU6IDA7IH1cbiAgLmJ1dHRvbjpob3ZlciwgLmJ1dHRvbjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzE0Njc5ZTtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAuYnV0dG9uLnRpbnkge1xuICAgIGZvbnQtc2l6ZTogMC42cmVtOyB9XG4gIC5idXR0b24uc21hbGwge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgfVxuICAuYnV0dG9uLmxhcmdlIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07IH1cbiAgLmJ1dHRvbi5leHBhbmRlZCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG4gIC5idXR0b24ucHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzE3NzliYTtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAgIC5idXR0b24ucHJpbWFyeTpob3ZlciwgLmJ1dHRvbi5wcmltYXJ5OmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxMjYxOTU7XG4gICAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAuYnV0dG9uLnNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzc2NzY3NjtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAgIC5idXR0b24uc2Vjb25kYXJ5OmhvdmVyLCAuYnV0dG9uLnNlY29uZGFyeTpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWU1ZTVlO1xuICAgICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJ1dHRvbi5zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2FkYjc2O1xuICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gICAgLmJ1dHRvbi5zdWNjZXNzOmhvdmVyLCAuYnV0dG9uLnN1Y2Nlc3M6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyYmI1YjtcbiAgICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gIC5idXR0b24ud2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYWUwMDtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAgIC5idXR0b24ud2FybmluZzpob3ZlciwgLmJ1dHRvbi53YXJuaW5nOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjYzhiMDA7XG4gICAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAuYnV0dG9uLmFsZXJ0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2M0YjM3O1xuICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gICAgLmJ1dHRvbi5hbGVydDpob3ZlciwgLmJ1dHRvbi5hbGVydDpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTUzYjJhO1xuICAgICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJ1dHRvbi5ob2xsb3cge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMxNzc5YmE7XG4gICAgY29sb3I6ICMxNzc5YmE7IH1cbiAgICAuYnV0dG9uLmhvbGxvdywgLmJ1dHRvbi5ob2xsb3c6aG92ZXIsIC5idXR0b24uaG9sbG93OmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gICAgLmJ1dHRvbi5ob2xsb3c6aG92ZXIsIC5idXR0b24uaG9sbG93OmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzBjM2Q1ZDtcbiAgICAgIGNvbG9yOiAjMGMzZDVkOyB9XG4gICAgLmJ1dHRvbi5ob2xsb3cucHJpbWFyeSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjMTc3OWJhO1xuICAgICAgY29sb3I6ICMxNzc5YmE7IH1cbiAgICAgIC5idXR0b24uaG9sbG93LnByaW1hcnk6aG92ZXIsIC5idXR0b24uaG9sbG93LnByaW1hcnk6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICMwYzNkNWQ7XG4gICAgICAgIGNvbG9yOiAjMGMzZDVkOyB9XG4gICAgLmJ1dHRvbi5ob2xsb3cuc2Vjb25kYXJ5IHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM3Njc2NzY7XG4gICAgICBjb2xvcjogIzc2NzY3NjsgfVxuICAgICAgLmJ1dHRvbi5ob2xsb3cuc2Vjb25kYXJ5OmhvdmVyLCAuYnV0dG9uLmhvbGxvdy5zZWNvbmRhcnk6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICMzYjNiM2I7XG4gICAgICAgIGNvbG9yOiAjM2IzYjNiOyB9XG4gICAgLmJ1dHRvbi5ob2xsb3cuc3VjY2VzcyB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjM2FkYjc2O1xuICAgICAgY29sb3I6ICMzYWRiNzY7IH1cbiAgICAgIC5idXR0b24uaG9sbG93LnN1Y2Nlc3M6aG92ZXIsIC5idXR0b24uaG9sbG93LnN1Y2Nlc3M6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICMxNTc1Mzk7XG4gICAgICAgIGNvbG9yOiAjMTU3NTM5OyB9XG4gICAgLmJ1dHRvbi5ob2xsb3cud2FybmluZyB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZhZTAwO1xuICAgICAgY29sb3I6ICNmZmFlMDA7IH1cbiAgICAgIC5idXR0b24uaG9sbG93Lndhcm5pbmc6aG92ZXIsIC5idXR0b24uaG9sbG93Lndhcm5pbmc6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICM4MDU3MDA7XG4gICAgICAgIGNvbG9yOiAjODA1NzAwOyB9XG4gICAgLmJ1dHRvbi5ob2xsb3cuYWxlcnQge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjNGIzNztcbiAgICAgIGNvbG9yOiAjY2M0YjM3OyB9XG4gICAgICAuYnV0dG9uLmhvbGxvdy5hbGVydDpob3ZlciwgLmJ1dHRvbi5ob2xsb3cuYWxlcnQ6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICM2NzI1MWE7XG4gICAgICAgIGNvbG9yOiAjNjcyNTFhOyB9XG4gIC5idXR0b24uZGlzYWJsZWQsIC5idXR0b25bZGlzYWJsZWRdIHtcbiAgICBvcGFjaXR5OiAwLjI1O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgICAuYnV0dG9uLmRpc2FibGVkLCAuYnV0dG9uLmRpc2FibGVkOmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkOmZvY3VzLCAuYnV0dG9uW2Rpc2FibGVkXSwgLmJ1dHRvbltkaXNhYmxlZF06aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzc5YmE7XG4gICAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAgIC5idXR0b24uZGlzYWJsZWQucHJpbWFyeSwgLmJ1dHRvbltkaXNhYmxlZF0ucHJpbWFyeSB7XG4gICAgICBvcGFjaXR5OiAwLjI1O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuICAgICAgLmJ1dHRvbi5kaXNhYmxlZC5wcmltYXJ5LCAuYnV0dG9uLmRpc2FibGVkLnByaW1hcnk6aG92ZXIsIC5idXR0b24uZGlzYWJsZWQucHJpbWFyeTpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF0ucHJpbWFyeSwgLmJ1dHRvbltkaXNhYmxlZF0ucHJpbWFyeTpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF0ucHJpbWFyeTpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzc5YmE7XG4gICAgICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gICAgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnksIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeSB7XG4gICAgICBvcGFjaXR5OiAwLjI1O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuICAgICAgLmJ1dHRvbi5kaXNhYmxlZC5zZWNvbmRhcnksIC5idXR0b24uZGlzYWJsZWQuc2Vjb25kYXJ5OmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLnNlY29uZGFyeTpmb2N1cywgLmJ1dHRvbltkaXNhYmxlZF0uc2Vjb25kYXJ5LCAuYnV0dG9uW2Rpc2FibGVkXS5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLnNlY29uZGFyeTpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM3Njc2NzY7XG4gICAgICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gICAgLmJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzLCAuYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzIHtcbiAgICAgIG9wYWNpdHk6IDAuMjU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG4gICAgICAuYnV0dG9uLmRpc2FibGVkLnN1Y2Nlc3MsIC5idXR0b24uZGlzYWJsZWQuc3VjY2Vzczpob3ZlciwgLmJ1dHRvbi5kaXNhYmxlZC5zdWNjZXNzOmZvY3VzLCAuYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzLCAuYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzOmhvdmVyLCAuYnV0dG9uW2Rpc2FibGVkXS5zdWNjZXNzOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzNhZGI3NjtcbiAgICAgICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgICAuYnV0dG9uLmRpc2FibGVkLndhcm5pbmcsIC5idXR0b25bZGlzYWJsZWRdLndhcm5pbmcge1xuICAgICAgb3BhY2l0eTogMC4yNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgICAgIC5idXR0b24uZGlzYWJsZWQud2FybmluZywgLmJ1dHRvbi5kaXNhYmxlZC53YXJuaW5nOmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLndhcm5pbmc6Zm9jdXMsIC5idXR0b25bZGlzYWJsZWRdLndhcm5pbmcsIC5idXR0b25bZGlzYWJsZWRdLndhcm5pbmc6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLndhcm5pbmc6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhZTAwO1xuICAgICAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAgIC5idXR0b24uZGlzYWJsZWQuYWxlcnQsIC5idXR0b25bZGlzYWJsZWRdLmFsZXJ0IHtcbiAgICAgIG9wYWNpdHk6IDAuMjU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG4gICAgICAuYnV0dG9uLmRpc2FibGVkLmFsZXJ0LCAuYnV0dG9uLmRpc2FibGVkLmFsZXJ0OmhvdmVyLCAuYnV0dG9uLmRpc2FibGVkLmFsZXJ0OmZvY3VzLCAuYnV0dG9uW2Rpc2FibGVkXS5hbGVydCwgLmJ1dHRvbltkaXNhYmxlZF0uYWxlcnQ6aG92ZXIsIC5idXR0b25bZGlzYWJsZWRdLmFsZXJ0OmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjNGIzNztcbiAgICAgICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJ1dHRvbi5kcm9wZG93bjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDAuNGVtO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjZmVmZWZlIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDAuNGVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luLWxlZnQ6IDFlbTsgfVxuICAuYnV0dG9uLmRyb3Bkb3duLmhvbGxvdzo6YWZ0ZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMxNzc5YmE7IH1cbiAgLmJ1dHRvbi5kcm9wZG93bi5ob2xsb3cucHJpbWFyeTo6YWZ0ZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMxNzc5YmE7IH1cbiAgLmJ1dHRvbi5kcm9wZG93bi5ob2xsb3cuc2Vjb25kYXJ5OjphZnRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzc2NzY3NjsgfVxuICAuYnV0dG9uLmRyb3Bkb3duLmhvbGxvdy5zdWNjZXNzOjphZnRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzNhZGI3NjsgfVxuICAuYnV0dG9uLmRyb3Bkb3duLmhvbGxvdy53YXJuaW5nOjphZnRlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmYWUwMDsgfVxuICAuYnV0dG9uLmRyb3Bkb3duLmhvbGxvdy5hbGVydDo6YWZ0ZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNjYzRiMzc7IH1cbiAgLmJ1dHRvbi5hcnJvdy1vbmx5OjphZnRlciB7XG4gICAgdG9wOiAtMC4xZW07XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sIFt0eXBlPSdjb2xvciddLFxudGV4dGFyZWEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMi40Mzc1cmVtO1xuICBtYXJnaW46IDAgMCAxcmVtO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDEwLCAxMCwgMTAsIDAuMSk7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjMGEwYTBhO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMsIGJvcmRlci1jb2xvciAwLjI1cyBlYXNlLWluLW91dDtcbiAgYXBwZWFyYW5jZTogbm9uZTsgfVxuICBbdHlwZT0ndGV4dCddOmZvY3VzLCBbdHlwZT0ncGFzc3dvcmQnXTpmb2N1cywgW3R5cGU9J2RhdGUnXTpmb2N1cywgW3R5cGU9J2RhdGV0aW1lJ106Zm9jdXMsIFt0eXBlPSdkYXRldGltZS1sb2NhbCddOmZvY3VzLCBbdHlwZT0nbW9udGgnXTpmb2N1cywgW3R5cGU9J3dlZWsnXTpmb2N1cywgW3R5cGU9J2VtYWlsJ106Zm9jdXMsIFt0eXBlPSdudW1iZXInXTpmb2N1cywgW3R5cGU9J3NlYXJjaCddOmZvY3VzLCBbdHlwZT0ndGVsJ106Zm9jdXMsIFt0eXBlPSd0aW1lJ106Zm9jdXMsIFt0eXBlPSd1cmwnXTpmb2N1cywgW3R5cGU9J2NvbG9yJ106Zm9jdXMsXG4gIHRleHRhcmVhOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM4YThhOGE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcbiAgICBib3gtc2hhZG93OiAwIDAgNXB4ICNjYWNhY2E7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7IH1cblxudGV4dGFyZWEge1xuICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgdGV4dGFyZWFbcm93c10ge1xuICAgIGhlaWdodDogYXV0bzsgfVxuXG5pbnB1dDo6cGxhY2Vob2xkZXIsXG50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2NhY2FjYTsgfVxuXG5pbnB1dDpkaXNhYmxlZCwgaW5wdXRbcmVhZG9ubHldLFxudGV4dGFyZWE6ZGlzYWJsZWQsXG50ZXh0YXJlYVtyZWFkb25seV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG5cblt0eXBlPSdzdWJtaXQnXSxcblt0eXBlPSdidXR0b24nXSB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuaW5wdXRbdHlwZT0nc2VhcmNoJ10ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG5cblt0eXBlPSdmaWxlJ10sXG5bdHlwZT0nY2hlY2tib3gnXSxcblt0eXBlPSdyYWRpbyddIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTsgfVxuXG5bdHlwZT0nY2hlY2tib3gnXSArIGxhYmVsLFxuW3R5cGU9J3JhZGlvJ10gKyBsYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgW3R5cGU9J2NoZWNrYm94J10gKyBsYWJlbFtmb3JdLFxuICBbdHlwZT0ncmFkaW8nXSArIGxhYmVsW2Zvcl0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuXG5sYWJlbCA+IFt0eXBlPSdjaGVja2JveCddLFxubGFiZWwgPiBbdHlwZT0ncmFkaW8nXSB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtOyB9XG5cblt0eXBlPSdmaWxlJ10ge1xuICB3aWR0aDogMTAwJTsgfVxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjg7XG4gIGNvbG9yOiAjMGEwYTBhOyB9XG4gIGxhYmVsLm1pZGRsZSB7XG4gICAgbWFyZ2luOiAwIDAgMXJlbTtcbiAgICBwYWRkaW5nOiAwLjU2MjVyZW0gMDsgfVxuXG4uaGVscC10ZXh0IHtcbiAgbWFyZ2luLXRvcDogLTAuNXJlbTtcbiAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgY29sb3I6ICMwYTBhMGE7IH1cblxuLmlucHV0LWdyb3VwIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gIC5pbnB1dC1ncm91cCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDsgfVxuICAuaW5wdXQtZ3JvdXAgPiA6bGFzdC1jaGlsZCA+ICoge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7IH1cblxuLmlucHV0LWdyb3VwLWxhYmVsLCAuaW5wdXQtZ3JvdXAtZmllbGQsIC5pbnB1dC1ncm91cC1idXR0b24sIC5pbnB1dC1ncm91cC1idXR0b24gYSxcbi5pbnB1dC1ncm91cC1idXR0b24gaW5wdXQsXG4uaW5wdXQtZ3JvdXAtYnV0dG9uIGJ1dHRvbixcbi5pbnB1dC1ncm91cC1idXR0b24gbGFiZWwge1xuICBtYXJnaW46IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLmlucHV0LWdyb3VwLWxhYmVsIHtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2FjYWNhO1xuICBiYWNrZ3JvdW5kOiAjZTZlNmU2O1xuICBjb2xvcjogIzBhMGEwYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMSU7XG4gIGhlaWdodDogMTAwJTsgfVxuICAuaW5wdXQtZ3JvdXAtbGFiZWw6Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDsgfVxuICAuaW5wdXQtZ3JvdXAtbGFiZWw6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWxlZnQ6IDA7IH1cblxuLmlucHV0LWdyb3VwLWZpZWxkIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgaGVpZ2h0OiAyLjVyZW07IH1cblxuLmlucHV0LWdyb3VwLWJ1dHRvbiB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMSU7XG4gIGhlaWdodDogMTAwJTsgfVxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIGEsXG4gIC5pbnB1dC1ncm91cC1idXR0b24gaW5wdXQsXG4gIC5pbnB1dC1ncm91cC1idXR0b24gYnV0dG9uLFxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIGxhYmVsIHtcbiAgICBoZWlnaHQ6IDIuNXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBmb250LXNpemU6IDFyZW07IH1cblxuLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idXR0b24ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG5cbmZpZWxkc2V0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7IH1cblxubGVnZW5kIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07IH1cblxuLmZpZWxkc2V0IHtcbiAgbWFyZ2luOiAxLjEyNXJlbSAwO1xuICBwYWRkaW5nOiAxLjI1cmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2FjYWNhOyB9XG4gIC5maWVsZHNldCBsZWdlbmQge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXJnaW4tbGVmdDogLTAuMTg3NXJlbTtcbiAgICBwYWRkaW5nOiAwIDAuMTg3NXJlbTtcbiAgICBiYWNrZ3JvdW5kOiAjZmVmZWZlOyB9XG5cbnNlbGVjdCB7XG4gIGhlaWdodDogMi40Mzc1cmVtO1xuICBtYXJnaW46IDAgMCAxcmVtO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjMGEwYTBhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgdmVyc2lvbj0nMS4xJyB3aWR0aD0nMzInIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAzMiAyNCc+PHBvbHlnb24gcG9pbnRzPScwLDAgMzIsMCAxNiwyNCcgc3R5bGU9J2ZpbGw6IHJnYiUyODEzOCwgMTM4LCAxMzglMjknPjwvcG9seWdvbj48L3N2Zz5cIik7XG4gIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTFyZW0gY2VudGVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDlweCA2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMFxcMCkge1xuICAgIHNlbGVjdCB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUlwSlJFRlVlTnJFa2NrTmdEQU1CQmZSa0V0ME9iUkJCZHNHWFVEZ21RZks0WGhIMm04Y3pRQUF5MjdSM3RzdzRRZmUyeDh1T082b1lMYjZHbE9vcjNHRitzd1VSQU9tVUorUnd0RUpzOVd2VEdFWXhCWHFJMU1RQVpoQ2ZVUUtSekRNVmorVHdyQUlWNmp2U1VFa1lBcjFMU2tjeVRCYi9WK0tZZlg3eEFldXNxM3NMRHRHSDNrRUdBQ1BXSWZsTlpmaFJRQUFBQUJKUlU1RXJrSmdnZz09XCIpOyB9IH1cbiAgc2VsZWN0OmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM4YThhOGE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcbiAgICBib3gtc2hhZG93OiAwIDAgNXB4ICNjYWNhY2E7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7IH1cbiAgc2VsZWN0OmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgc2VsZWN0OjotbXMtZXhwYW5kIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIHNlbGVjdFttdWx0aXBsZV0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9XG5cbi5pcy1pbnZhbGlkLWlucHV0Om5vdCg6Zm9jdXMpIHtcbiAgYm9yZGVyLWNvbG9yOiAjY2M0YjM3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjllY2VhOyB9XG4gIC5pcy1pbnZhbGlkLWlucHV0Om5vdCg6Zm9jdXMpOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICNjYzRiMzc7IH1cblxuLmlzLWludmFsaWQtbGFiZWwge1xuICBjb2xvcjogI2NjNGIzNzsgfVxuXG4uZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6IC0wLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjY2M0YjM3OyB9XG4gIC5mb3JtLWVycm9yLmlzLXZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5hY2NvcmRpb24ge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgYmFja2dyb3VuZDogI2ZlZmVmZTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9XG5cbi5hY2NvcmRpb24taXRlbTpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7IH1cblxuLmFjY29yZGlvbi1pdGVtOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwIDA7IH1cblxuLmFjY29yZGlvbi10aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEuMjVyZW0gMXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICMxNzc5YmE7IH1cbiAgOmxhc3QtY2hpbGQ6bm90KC5pcy1hY3RpdmUpID4gLmFjY29yZGlvbi10aXRsZSB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNmU2ZTY7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwIDAgMDsgfVxuICAuYWNjb3JkaW9uLXRpdGxlOmhvdmVyLCAuYWNjb3JkaW9uLXRpdGxlOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OyB9XG4gIC5hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIG1hcmdpbi10b3A6IC0wLjVyZW07XG4gICAgY29udGVudDogJysnOyB9XG4gIC5pcy1hY3RpdmUgPiAuYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICdcXDIwMTMnOyB9XG5cbi5hY2NvcmRpb24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDFyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGNvbG9yOiAjMGEwYTBhOyB9XG4gIDpsYXN0LWNoaWxkID4gLmFjY29yZGlvbi1jb250ZW50Omxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTZlNmU2OyB9XG5cbi5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQgPiBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogaW5zZXQgNnB4O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjMTc3OWJhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tdG9wOiAtM3B4O1xuICAgIHJpZ2h0OiAxcmVtOyB9XG5cbi5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnRbYXJpYS1leHBhbmRlZD0ndHJ1ZSddID4gYTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlOyB9XG5cbi5iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLXdpZHRoOiAyLjFlbTtcbiAgcGFkZGluZzogMC4zZW07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgZm9udC1zaXplOiAwLjZyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogIzE3NzliYTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJhZGdlLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICMxNzc5YmE7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJhZGdlLnNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZDogIzc2NzY3NjtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAuYmFkZ2Uuc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZDogIzNhZGI3NjtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAuYmFkZ2Uud2FybmluZyB7XG4gICAgYmFja2dyb3VuZDogI2ZmYWUwMDtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAuYmFkZ2UuYWxlcnQge1xuICAgIGJhY2tncm91bmQ6ICNjYzRiMzc7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cblxuLmJyZWFkY3J1bWJzIHtcbiAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICBsaXN0LXN0eWxlOiBub25lOyB9XG4gIC5icmVhZGNydW1iczo6YmVmb3JlLCAuYnJlYWRjcnVtYnM6OmFmdGVyIHtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICBjb250ZW50OiAnICc7IH1cbiAgLmJyZWFkY3J1bWJzOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLmJyZWFkY3J1bWJzIGxpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICBjb2xvcjogIzBhMGEwYTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5icmVhZGNydW1icyBsaTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIG1hcmdpbjogMCAwLjc1cmVtO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIGNvbnRlbnQ6IFwiL1wiO1xuICAgICAgY29sb3I6ICNjYWNhY2E7IH1cbiAgLmJyZWFkY3J1bWJzIGEge1xuICAgIGNvbG9yOiAjMTc3OWJhOyB9XG4gICAgLmJyZWFkY3J1bWJzIGE6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cbiAgLmJyZWFkY3J1bWJzIC5kaXNhYmxlZCB7XG4gICAgY29sb3I6ICNjYWNhY2E7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuXG4uYnV0dG9uLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgZm9udC1zaXplOiAwOyB9XG4gIC5idXR0b24tZ3JvdXA6OmJlZm9yZSwgLmJ1dHRvbi1ncm91cDo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJzsgfVxuICAuYnV0dG9uLWdyb3VwOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLmJ1dHRvbi1ncm91cCAuYnV0dG9uIHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgIGZvbnQtc2l6ZTogMC45cmVtOyB9XG4gICAgLmJ1dHRvbi1ncm91cCAuYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC5idXR0b24tZ3JvdXAudGlueSAuYnV0dG9uIHtcbiAgICBmb250LXNpemU6IDAuNnJlbTsgfVxuICAuYnV0dG9uLWdyb3VwLnNtYWxsIC5idXR0b24ge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTsgfVxuICAuYnV0dG9uLWdyb3VwLmxhcmdlIC5idXR0b24ge1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTsgfVxuICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIHtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7IH1cbiAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkOjpiZWZvcmUsIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQ6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZCB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgyKSwgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDIpOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDIpIH4gLmJ1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogY2FsYyg1MCUgLSAxcHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7IH1cbiAgICAgIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgyKTpsYXN0LWNoaWxkLCAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMik6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMikgfiAuYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC02cHg7IH1cbiAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMyksIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgzKTpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgzKSB+IC5idXR0b24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGNhbGMoMzMuMzMzMzMlIC0gMXB4KTtcbiAgICAgIG1hcmdpbi1yaWdodDogMXB4OyB9XG4gICAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMyk6bGFzdC1jaGlsZCwgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDMpOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDMpIH4gLmJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OyB9XG4gICAgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDQpLCAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNCk6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNCkgfiAuYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBjYWxjKDI1JSAtIDFweCk7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDFweDsgfVxuICAgICAgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDQpOmxhc3QtY2hpbGQsIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg0KTpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg0KSB+IC5idXR0b246bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLTZweDsgfVxuICAgIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg1KSwgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDUpOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDUpIH4gLmJ1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogY2FsYygyMCUgLSAxcHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7IH1cbiAgICAgIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg1KTpsYXN0LWNoaWxkLCAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNSk6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNSkgfiAuYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC02cHg7IH1cbiAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNiksIC5idXR0b24tZ3JvdXAuZXhwYW5kZWQgLmJ1dHRvbjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg2KTpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCg2KSB+IC5idXR0b24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGNhbGMoMTYuNjY2NjclIC0gMXB4KTtcbiAgICAgIG1hcmdpbi1yaWdodDogMXB4OyB9XG4gICAgICAuYnV0dG9uLWdyb3VwLmV4cGFuZGVkIC5idXR0b246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoNik6bGFzdC1jaGlsZCwgLmJ1dHRvbi1ncm91cC5leHBhbmRlZCAuYnV0dG9uOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDYpOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKDYpIH4gLmJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OyB9XG4gIC5idXR0b24tZ3JvdXAucHJpbWFyeSAuYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTc3OWJhO1xuICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gICAgLmJ1dHRvbi1ncm91cC5wcmltYXJ5IC5idXR0b246aG92ZXIsIC5idXR0b24tZ3JvdXAucHJpbWFyeSAuYnV0dG9uOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxMjYxOTU7XG4gICAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAuYnV0dG9uLWdyb3VwLnNlY29uZGFyeSAuYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzY3Njc2O1xuICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gICAgLmJ1dHRvbi1ncm91cC5zZWNvbmRhcnkgLmJ1dHRvbjpob3ZlciwgLmJ1dHRvbi1ncm91cC5zZWNvbmRhcnkgLmJ1dHRvbjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWU1ZTVlO1xuICAgICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJ1dHRvbi1ncm91cC5zdWNjZXNzIC5idXR0b24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzYWRiNzY7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgICAuYnV0dG9uLWdyb3VwLnN1Y2Nlc3MgLmJ1dHRvbjpob3ZlciwgLmJ1dHRvbi1ncm91cC5zdWNjZXNzIC5idXR0b246Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyYmI1YjtcbiAgICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gIC5idXR0b24tZ3JvdXAud2FybmluZyAuYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhZTAwO1xuICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gICAgLmJ1dHRvbi1ncm91cC53YXJuaW5nIC5idXR0b246aG92ZXIsIC5idXR0b24tZ3JvdXAud2FybmluZyAuYnV0dG9uOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjYzhiMDA7XG4gICAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAuYnV0dG9uLWdyb3VwLmFsZXJ0IC5idXR0b24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNjYzRiMzc7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgICAuYnV0dG9uLWdyb3VwLmFsZXJ0IC5idXR0b246aG92ZXIsIC5idXR0b24tZ3JvdXAuYWxlcnQgLmJ1dHRvbjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTUzYjJhO1xuICAgICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmJ1dHRvbi1ncm91cC5zdGFja2VkIC5idXR0b24sIC5idXR0b24tZ3JvdXAuc3RhY2tlZC1mb3Itc21hbGwgLmJ1dHRvbiwgLmJ1dHRvbi1ncm91cC5zdGFja2VkLWZvci1tZWRpdW0gLmJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgICAuYnV0dG9uLWdyb3VwLnN0YWNrZWQgLmJ1dHRvbjpsYXN0LWNoaWxkLCAuYnV0dG9uLWdyb3VwLnN0YWNrZWQtZm9yLXNtYWxsIC5idXR0b246bGFzdC1jaGlsZCwgLmJ1dHRvbi1ncm91cC5zdGFja2VkLWZvci1tZWRpdW0gLmJ1dHRvbjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwZW0pIHtcbiAgICAuYnV0dG9uLWdyb3VwLnN0YWNrZWQtZm9yLXNtYWxsIC5idXR0b24ge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cbiAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAuYnV0dG9uLWdyb3VwLnN0YWNrZWQtZm9yLW1lZGl1bSAuYnV0dG9uIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfSB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDM5LjkzNzVlbSkge1xuICAgIC5idXR0b24tZ3JvdXAuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgIC5idXR0b24tZ3JvdXAuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQgLmJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0gfVxuXG4uY2FsbG91dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwLCAxMCwgMTAsIDAuMjUpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgY29sb3I6ICMwYTBhMGE7IH1cbiAgLmNhbGxvdXQgPiA6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhbGxvdXQgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAuY2FsbG91dC5wcmltYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDdlY2ZhO1xuICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gIC5jYWxsb3V0LnNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VhZWFlYTtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAuY2FsbG91dC5zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFmYWVhO1xuICAgIGNvbG9yOiAjMGEwYTBhOyB9XG4gIC5jYWxsb3V0Lndhcm5pbmcge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYzZDk7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgLmNhbGxvdXQuYWxlcnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2U0ZTE7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgLmNhbGxvdXQuc21hbGwge1xuICAgIHBhZGRpbmctdG9wOiAwLjVyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07IH1cbiAgLmNhbGxvdXQubGFyZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAzcmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDNyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDNyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAzcmVtOyB9XG5cbi5jYXJkIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYmFja2dyb3VuZDogI2ZlZmVmZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICMwYTBhMGE7IH1cbiAgLmNhcmQgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG4uY2FyZC1kaXZpZGVyIHtcbiAgcGFkZGluZzogMXJlbTtcbiAgYmFja2dyb3VuZDogI2U2ZTZlNjsgfVxuICAuY2FyZC1kaXZpZGVyID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cblxuLmNhcmQtc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW07IH1cbiAgLmNhcmQtc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG5cbi5jbG9zZS1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNvbG9yOiAjOGE4YThhO1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddIC5jbG9zZS1idXR0b24ge1xuICAgIG91dGxpbmU6IDA7IH1cbiAgLmNsb3NlLWJ1dHRvbjpob3ZlciwgLmNsb3NlLWJ1dHRvbjpmb2N1cyB7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgLmNsb3NlLWJ1dHRvbi5zbWFsbCB7XG4gICAgcmlnaHQ6IDAuNjZyZW07XG4gICAgdG9wOiAwLjMzZW07XG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICBsaW5lLWhlaWdodDogMTsgfVxuICAuY2xvc2UtYnV0dG9uLCAuY2xvc2UtYnV0dG9uLm1lZGl1bSB7XG4gICAgcmlnaHQ6IDFyZW07XG4gICAgdG9wOiAwLjVyZW07XG4gICAgZm9udC1zaXplOiAyZW07XG4gICAgbGluZS1oZWlnaHQ6IDE7IH1cblxuLm1lbnUge1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxuICAubWVudSA+IGxpIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICBbZGF0YS13aGF0aW5wdXQ9J21vdXNlJ10gLm1lbnUgPiBsaSB7XG4gICAgICBvdXRsaW5lOiAwOyB9XG4gIC5tZW51ID4gbGkgPiBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMTsgfVxuICAubWVudSBpbnB1dCxcbiAgLm1lbnUgc2VsZWN0LFxuICAubWVudSBhLFxuICAubWVudSBidXR0b24ge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgLm1lbnUgPiBsaSA+IGEgaW1nLFxuICAubWVudSA+IGxpID4gYSBpLFxuICAubWVudSA+IGxpID4gYSBzdmcge1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICAubWVudSA+IGxpID4gYSBpbWcgKyBzcGFuLFxuICAgIC5tZW51ID4gbGkgPiBhIGkgKyBzcGFuLFxuICAgIC5tZW51ID4gbGkgPiBhIHN2ZyArIHNwYW4ge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAubWVudSA+IGxpID4gYSBpbWcsXG4gIC5tZW51ID4gbGkgPiBhIGksXG4gIC5tZW51ID4gbGkgPiBhIHN2ZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAubWVudSA+IGxpLCAubWVudS5ob3Jpem9udGFsID4gbGkge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7IH1cbiAgLm1lbnUuZXhwYW5kZWQge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7IH1cbiAgICAubWVudS5leHBhbmRlZCA+IGxpOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgLm1lbnUudmVydGljYWwgPiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwZW0pIHtcbiAgICAubWVudS5tZWRpdW0taG9yaXpvbnRhbCA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7IH1cbiAgICAubWVudS5tZWRpdW0tZXhwYW5kZWQge1xuICAgICAgZGlzcGxheTogdGFibGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7IH1cbiAgICAgIC5tZW51Lm1lZGl1bS1leHBhbmRlZCA+IGxpOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5tZW51Lm1lZGl1bS12ZXJ0aWNhbCA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cbiAgQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgICAubWVudS5sYXJnZS1ob3Jpem9udGFsID4gbGkge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsgfVxuICAgIC5tZW51LmxhcmdlLWV4cGFuZGVkIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9XG4gICAgICAubWVudS5sYXJnZS1leHBhbmRlZCA+IGxpOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5tZW51LmxhcmdlLXZlcnRpY2FsID4gbGkge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuICAubWVudS5zaW1wbGUgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIGxpbmUtaGVpZ2h0OiAxOyB9XG4gIC5tZW51LnNpbXBsZSBhIHtcbiAgICBwYWRkaW5nOiAwOyB9XG4gIC5tZW51LnNpbXBsZSBsaSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtOyB9XG4gIC5tZW51LnNpbXBsZS5hbGlnbi1yaWdodCBsaSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtOyB9XG4gIC5tZW51LmFsaWduLXJpZ2h0OjpiZWZvcmUsIC5tZW51LmFsaWduLXJpZ2h0OjphZnRlciB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgY29udGVudDogJyAnOyB9XG4gIC5tZW51LmFsaWduLXJpZ2h0OjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLm1lbnUuYWxpZ24tcmlnaHQgPiBsaSB7XG4gICAgZmxvYXQ6IHJpZ2h0OyB9XG4gIC5tZW51Lmljb24tdG9wID4gbGkgPiBhIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAubWVudS5pY29uLXRvcCA+IGxpID4gYSBpbWcsXG4gICAgLm1lbnUuaWNvbi10b3AgPiBsaSA+IGEgaSxcbiAgICAubWVudS5pY29uLXRvcCA+IGxpID4gYSBzdmcge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDAgYXV0byAwLjI1cmVtOyB9XG4gIC5tZW51Lmljb24tdG9wLnZlcnRpY2FsIGEgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87IH1cbiAgLm1lbnUubmVzdGVkIHtcbiAgICBtYXJnaW4tbGVmdDogMXJlbTsgfVxuICAubWVudSAuYWN0aXZlID4gYSB7XG4gICAgYmFja2dyb3VuZDogIzE3NzliYTtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAubWVudS5tZW51LWJvcmRlcmVkIGxpIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2OyB9XG4gICAgLm1lbnUubWVudS1ib3JkZXJlZCBsaTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICBib3JkZXItdG9wOiAwOyB9XG4gIC5tZW51Lm1lbnUtaG92ZXIgbGk6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7IH1cblxuLm1lbnUtdGV4dCB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6IGluaGVyaXQ7IH1cblxuLm1lbnUtY2VudGVyZWQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgLm1lbnUtY2VudGVyZWQgPiAubWVudSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH1cblxuLm5vLWpzIFtkYXRhLXJlc3BvbnNpdmUtbWVudV0gdWwge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5tZW51LWljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMTZweDtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG4gIC5tZW51LWljb246OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYmFja2dyb3VuZDogI2ZlZmVmZTtcbiAgICBib3gtc2hhZG93OiAwIDdweCAwICNmZWZlZmUsIDAgMTRweCAwICNmZWZlZmU7XG4gICAgY29udGVudDogJyc7IH1cbiAgLm1lbnUtaWNvbjpob3Zlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6ICNjYWNhY2E7XG4gICAgYm94LXNoYWRvdzogMCA3cHggMCAjY2FjYWNhLCAwIDE0cHggMCAjY2FjYWNhOyB9XG5cbi5tZW51LWljb24uZGFyayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgLm1lbnUtaWNvbi5kYXJrOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJhY2tncm91bmQ6ICMwYTBhMGE7XG4gICAgYm94LXNoYWRvdzogMCA3cHggMCAjMGEwYTBhLCAwIDE0cHggMCAjMGEwYTBhO1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gIC5tZW51LWljb24uZGFyazpob3Zlcjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6ICM4YThhOGE7XG4gICAgYm94LXNoYWRvdzogMCA3cHggMCAjOGE4YThhLCAwIDE0cHggMCAjOGE4YThhOyB9XG5cbi5pcy1kcmlsbGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgLmlzLWRyaWxsZG93biBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgLmlzLWRyaWxsZG93bi5hbmltYXRlLWhlaWdodCB7XG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNXM7IH1cblxuLmlzLWRyaWxsZG93bi1zdWJtZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDEwMCU7XG4gIHotaW5kZXg6IC0xO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogI2ZlZmVmZTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhcjsgfVxuICAuaXMtZHJpbGxkb3duLXN1Ym1lbnUuaXMtYWN0aXZlIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7IH1cbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51LmlzLWNsb3Npbmcge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxuXG4uZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICBtaW4taGVpZ2h0OiAxMDAlOyB9XG5cbi5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogaW5zZXQgNnB4O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJvcmRlci1yaWdodC13aWR0aDogMDtcbiAgICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMTc3OWJhO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tdG9wOiAtNnB4O1xuICAgIHJpZ2h0OiAxcmVtOyB9XG5cbi5qcy1kcmlsbGRvd24tYmFjayA+IGE6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXI6IGluc2V0IDZweDtcbiAgY29udGVudDogJyc7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICMxNzc5YmEgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbi1yaWdodDogMC43NXJlbTtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7IH1cblxuLmRyb3Bkb3duLXBhbmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDMwMHB4O1xuICBwYWRkaW5nOiAxcmVtO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGZvbnQtc2l6ZTogMXJlbTsgfVxuICAuZHJvcGRvd24tcGFuZS5pcy1vcGVuIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9XG5cbi5kcm9wZG93bi1wYW5lLnRpbnkge1xuICB3aWR0aDogMTAwcHg7IH1cblxuLmRyb3Bkb3duLXBhbmUuc21hbGwge1xuICB3aWR0aDogMjAwcHg7IH1cblxuLmRyb3Bkb3duLXBhbmUubGFyZ2Uge1xuICB3aWR0aDogNDAwcHg7IH1cblxuLmRyb3Bkb3duLm1lbnUgPiBsaS5vcGVucy1sZWZ0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICB0b3A6IDEwMCU7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvOyB9XG5cbi5kcm9wZG93bi5tZW51ID4gbGkub3BlbnMtcmlnaHQgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gIHRvcDogMTAwJTtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IDA7IH1cblxuLmRyb3Bkb3duLm1lbnUgPiBsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTsgfVxuXG4uZHJvcGRvd24ubWVudSA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyOiBpbnNldCA2cHg7XG4gIGNvbnRlbnQ6ICcnO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjMTc3OWJhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtM3B4OyB9XG5cbltkYXRhLXdoYXRpbnB1dD0nbW91c2UnXSAuZHJvcGRvd24ubWVudSBhIHtcbiAgb3V0bGluZTogMDsgfVxuXG4ubm8tanMgLmRyb3Bkb3duLm1lbnUgdWwge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5kcm9wZG93bi5tZW51LnZlcnRpY2FsID4gbGkgLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICB0b3A6IDA7IH1cblxuLmRyb3Bkb3duLm1lbnUudmVydGljYWwgPiBsaS5vcGVucy1sZWZ0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICByaWdodDogMTAwJTtcbiAgbGVmdDogYXV0bzsgfVxuXG4uZHJvcGRvd24ubWVudS52ZXJ0aWNhbCA+IGxpLm9wZW5zLXJpZ2h0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICByaWdodDogYXV0bztcbiAgbGVmdDogMTAwJTsgfVxuXG4uZHJvcGRvd24ubWVudS52ZXJ0aWNhbCA+IGxpID4gYTo6YWZ0ZXIge1xuICByaWdodDogMTRweDsgfVxuXG4uZHJvcGRvd24ubWVudS52ZXJ0aWNhbCA+IGxpLm9wZW5zLWxlZnQgPiBhOjphZnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXI6IGluc2V0IDZweDtcbiAgY29udGVudDogJyc7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICMxNzc5YmEgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cblxuLmRyb3Bkb3duLm1lbnUudmVydGljYWwgPiBsaS5vcGVucy1yaWdodCA+IGE6OmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlcjogaW5zZXQgNnB4O1xuICBjb250ZW50OiAnJztcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzE3NzliYTsgfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAuZHJvcGRvd24ubWVudS5tZWRpdW0taG9yaXpvbnRhbCA+IGxpLm9wZW5zLWxlZnQgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgdG9wOiAxMDAlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgLmRyb3Bkb3duLm1lbnUubWVkaXVtLWhvcml6b250YWwgPiBsaS5vcGVucy1yaWdodCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICB0b3A6IDEwMCU7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMDsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0taG9yaXpvbnRhbCA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0taG9yaXpvbnRhbCA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDZweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogIzE3NzliYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICByaWdodDogNXB4O1xuICAgIG1hcmdpbi10b3A6IC0zcHg7IH1cbiAgLmRyb3Bkb3duLm1lbnUubWVkaXVtLXZlcnRpY2FsID4gbGkgLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIHRvcDogMDsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0tdmVydGljYWwgPiBsaS5vcGVucy1sZWZ0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgLmRyb3Bkb3duLm1lbnUubWVkaXVtLXZlcnRpY2FsID4gbGkub3BlbnMtcmlnaHQgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMTAwJTsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0tdmVydGljYWwgPiBsaSA+IGE6OmFmdGVyIHtcbiAgICByaWdodDogMTRweDsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0tdmVydGljYWwgPiBsaS5vcGVucy1sZWZ0ID4gYTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDZweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzE3NzliYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfVxuICAuZHJvcGRvd24ubWVudS5tZWRpdW0tdmVydGljYWwgPiBsaS5vcGVucy1yaWdodCA+IGE6OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgYm9yZGVyOiBpbnNldCA2cHg7XG4gICAgY29udGVudDogJyc7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMxNzc5YmE7IH0gfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAuZHJvcGRvd24ubWVudS5sYXJnZS1ob3Jpem9udGFsID4gbGkub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICB0b3A6IDEwMCU7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuZHJvcGRvd24ubWVudS5sYXJnZS1ob3Jpem9udGFsID4gbGkub3BlbnMtcmlnaHQgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgdG9wOiAxMDAlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDA7IH1cbiAgLmRyb3Bkb3duLm1lbnUubGFyZ2UtaG9yaXpvbnRhbCA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTsgfVxuICAuZHJvcGRvd24ubWVudS5sYXJnZS1ob3Jpem9udGFsID4gbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogaW5zZXQgNnB4O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjMTc3OWJhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgIHJpZ2h0OiA1cHg7XG4gICAgbWFyZ2luLXRvcDogLTNweDsgfVxuICAuZHJvcGRvd24ubWVudS5sYXJnZS12ZXJ0aWNhbCA+IGxpIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICB0b3A6IDA7IH1cbiAgLmRyb3Bkb3duLm1lbnUubGFyZ2UtdmVydGljYWwgPiBsaS5vcGVucy1sZWZ0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgLmRyb3Bkb3duLm1lbnUubGFyZ2UtdmVydGljYWwgPiBsaS5vcGVucy1yaWdodCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiAxMDAlOyB9XG4gIC5kcm9wZG93bi5tZW51LmxhcmdlLXZlcnRpY2FsID4gbGkgPiBhOjphZnRlciB7XG4gICAgcmlnaHQ6IDE0cHg7IH1cbiAgLmRyb3Bkb3duLm1lbnUubGFyZ2UtdmVydGljYWwgPiBsaS5vcGVucy1sZWZ0ID4gYTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDZweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzE3NzliYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfVxuICAuZHJvcGRvd24ubWVudS5sYXJnZS12ZXJ0aWNhbCA+IGxpLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDZweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzE3NzliYTsgfSB9XG5cbi5kcm9wZG93bi5tZW51LmFsaWduLXJpZ2h0IC5pcy1kcm9wZG93bi1zdWJtZW51LmZpcnN0LXN1YiB7XG4gIHRvcDogMTAwJTtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87IH1cblxuLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwge1xuICB3aWR0aDogMTAwcHg7IH1cbiAgLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwuYWxpZ24tcmlnaHQge1xuICAgIGZsb2F0OiByaWdodDsgfVxuXG4uaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IGE6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDVweDtcbiAgICBtYXJnaW4tdG9wOiAtNnB4OyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudC5vcGVucy1pbm5lciA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICB0b3A6IDEwMCU7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICByaWdodDogMTAwJTtcbiAgICBsZWZ0OiBhdXRvOyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudC5vcGVucy1yaWdodCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiAxMDAlOyB9XG5cbi5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDEwMCU7XG4gIHotaW5kZXg6IDE7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1pbi13aWR0aDogMjAwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7IH1cbiAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIHJpZ2h0OiAxNHB4OyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudC5vcGVucy1sZWZ0ID4gYTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDZweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzE3NzliYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfVxuICAuaXMtZHJvcGRvd24tc3VibWVudSAuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQub3BlbnMtcmlnaHQgPiBhOjphZnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogaW5zZXQgNnB4O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJvcmRlci1yaWdodC13aWR0aDogMDtcbiAgICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMTc3OWJhOyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICBtYXJnaW4tdG9wOiAtMXB4OyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51ID4gbGkge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LmpzLWRyb3Bkb3duLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLnJlc3BvbnNpdmUtZW1iZWQsXG4uZmxleC12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG4gIC5yZXNwb25zaXZlLWVtYmVkIGlmcmFtZSxcbiAgLnJlc3BvbnNpdmUtZW1iZWQgb2JqZWN0LFxuICAucmVzcG9uc2l2ZS1lbWJlZCBlbWJlZCxcbiAgLnJlc3BvbnNpdmUtZW1iZWQgdmlkZW8sXG4gIC5mbGV4LXZpZGVvIGlmcmFtZSxcbiAgLmZsZXgtdmlkZW8gb2JqZWN0LFxuICAuZmxleC12aWRlbyBlbWJlZCxcbiAgLmZsZXgtdmlkZW8gdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7IH1cbiAgLnJlc3BvbnNpdmUtZW1iZWQud2lkZXNjcmVlbixcbiAgLmZsZXgtdmlkZW8ud2lkZXNjcmVlbiB7XG4gICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgfVxuXG4ubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuMzMzMzNyZW0gMC41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgYmFja2dyb3VuZDogIzE3NzliYTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmxhYmVsLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICMxNzc5YmE7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLmxhYmVsLnNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZDogIzc2NzY3NjtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAubGFiZWwuc3VjY2VzcyB7XG4gICAgYmFja2dyb3VuZDogIzNhZGI3NjtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAubGFiZWwud2FybmluZyB7XG4gICAgYmFja2dyb3VuZDogI2ZmYWUwMDtcbiAgICBjb2xvcjogIzBhMGEwYTsgfVxuICAubGFiZWwuYWxlcnQge1xuICAgIGJhY2tncm91bmQ6ICNjYzRiMzc7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cblxuLm1lZGlhLW9iamVjdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gIC5tZWRpYS1vYmplY3QgaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzkuOTM3NWVtKSB7XG4gICAgLm1lZGlhLW9iamVjdC5zdGFjay1mb3Itc21hbGwgLm1lZGlhLW9iamVjdC1zZWN0aW9uIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgICAubWVkaWEtb2JqZWN0LnN0YWNrLWZvci1zbWFsbCAubWVkaWEtb2JqZWN0LXNlY3Rpb24gaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuXG4ubWVkaWEtb2JqZWN0LXNlY3Rpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB9XG4gIC5tZWRpYS1vYmplY3Qtc2VjdGlvbjpmaXJzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTsgfVxuICAubWVkaWEtb2JqZWN0LXNlY3Rpb246bGFzdC1jaGlsZDpub3QoOm50aC1jaGlsZCgyKSkge1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTsgfVxuICAubWVkaWEtb2JqZWN0LXNlY3Rpb24gPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAubWVkaWEtb2JqZWN0LXNlY3Rpb24ubWlkZGxlIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gIC5tZWRpYS1vYmplY3Qtc2VjdGlvbi5ib3R0b20ge1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207IH1cblxuLmlzLW9mZi1jYW52YXMtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cblxuLmpzLW9mZi1jYW52YXMtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZSwgdmlzaWJpbGl0eSAwLjVzIGVhc2U7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC4yNSk7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAuanMtb2ZmLWNhbnZhcy1vdmVybGF5LmlzLXZpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTsgfVxuICAuanMtb2ZmLWNhbnZhcy1vdmVybGF5LmlzLWNsb3NhYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgLmpzLW9mZi1jYW52YXMtb3ZlcmxheS5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cbiAgLmpzLW9mZi1jYW52YXMtb3ZlcmxheS5pcy1vdmVybGF5LWZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7IH1cblxuLm9mZi1jYW52YXMtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4ub2ZmLWNhbnZhcyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiAjZTZlNmU2OyB9XG4gIFtkYXRhLXdoYXRpbnB1dD0nbW91c2UnXSAub2ZmLWNhbnZhcyB7XG4gICAgb3V0bGluZTogMDsgfVxuICAub2ZmLWNhbnZhcy5pcy10cmFuc2l0aW9uLW92ZXJsYXAge1xuICAgIHotaW5kZXg6IDEwOyB9XG4gICAgLm9mZi1jYW52YXMuaXMtdHJhbnNpdGlvbi1vdmVybGFwLmlzLW9wZW4ge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgxMCwgMTAsIDEwLCAwLjcpOyB9XG4gIC5vZmYtY2FudmFzLmlzLW9wZW4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XG5cbi5vZmYtY2FudmFzLWFic29sdXRlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBlYXNlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7IH1cbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddIC5vZmYtY2FudmFzLWFic29sdXRlIHtcbiAgICBvdXRsaW5lOiAwOyB9XG4gIC5vZmYtY2FudmFzLWFic29sdXRlLmlzLXRyYW5zaXRpb24tb3ZlcmxhcCB7XG4gICAgei1pbmRleDogMTA7IH1cbiAgICAub2ZmLWNhbnZhcy1hYnNvbHV0ZS5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDEwLCAxMCwgMTAsIDAuNyk7IH1cbiAgLm9mZi1jYW52YXMtYWJzb2x1dGUuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7IH1cblxuLnBvc2l0aW9uLWxlZnQge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAyNTBweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI1MHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuICAucG9zaXRpb24tbGVmdC5pcy1vcGVuIH4gLm9mZi1jYW52YXMtY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI1MHB4KTsgfVxuICAucG9zaXRpb24tbGVmdC5pcy10cmFuc2l0aW9uLXB1c2g6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMXB4O1xuICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoMTAsIDEwLCAxMCwgMC43KTtcbiAgICBjb250ZW50OiBcIiBcIjsgfVxuICAucG9zaXRpb24tbGVmdC5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIHRyYW5zZm9ybTogbm9uZTsgfVxuXG4ucG9zaXRpb24tcmlnaHQge1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMjUwcHg7XG4gIGhlaWdodDogMTAwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI1MHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuICAucG9zaXRpb24tcmlnaHQuaXMtb3BlbiB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjUwcHgpOyB9XG4gIC5wb3NpdGlvbi1yaWdodC5pcy10cmFuc2l0aW9uLXB1c2g6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgxMCwgMTAsIDEwLCAwLjcpO1xuICAgIGNvbnRlbnQ6IFwiIFwiOyB9XG4gIC5wb3NpdGlvbi1yaWdodC5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIHRyYW5zZm9ybTogbm9uZTsgfVxuXG4ucG9zaXRpb24tdG9wIHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyNTBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yNTBweCk7XG4gIG92ZXJmbG93LXg6IGF1dG87IH1cbiAgLnBvc2l0aW9uLXRvcC5pcy1vcGVuIH4gLm9mZi1jYW52YXMtY29udGVudCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDI1MHB4KTsgfVxuICAucG9zaXRpb24tdG9wLmlzLXRyYW5zaXRpb24tcHVzaDo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDEwLCAxMCwgMTAsIDAuNyk7XG4gICAgY29udGVudDogXCIgXCI7IH1cbiAgLnBvc2l0aW9uLXRvcC5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIHRyYW5zZm9ybTogbm9uZTsgfVxuXG4ucG9zaXRpb24tYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyNTBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDI1MHB4KTtcbiAgb3ZlcmZsb3cteDogYXV0bzsgfVxuICAucG9zaXRpb24tYm90dG9tLmlzLW9wZW4gfiAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTI1MHB4KTsgfVxuICAucG9zaXRpb24tYm90dG9tLmlzLXRyYW5zaXRpb24tcHVzaDo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDEwLCAxMCwgMTAsIDAuNyk7XG4gICAgY29udGVudDogXCIgXCI7IH1cbiAgLnBvc2l0aW9uLWJvdHRvbS5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgIHRyYW5zZm9ybTogbm9uZTsgfVxuXG4ub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgZWFzZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbkBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItbWVkaXVtIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgei1pbmRleDogMTsgfVxuICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItbWVkaXVtIH4gLm9mZi1jYW52YXMtY29udGVudCB7XG4gICAgICBtYXJnaW4tbGVmdDogMjUwcHg7IH1cbiAgLnBvc2l0aW9uLXJpZ2h0LnJldmVhbC1mb3ItbWVkaXVtIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgei1pbmRleDogMTsgfVxuICAgIC5wb3NpdGlvbi1yaWdodC5yZXZlYWwtZm9yLW1lZGl1bSB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNTBweDsgfVxuICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItbWVkaXVtIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgei1pbmRleDogMTsgfVxuICAgIC5wb3NpdGlvbi10b3AucmV2ZWFsLWZvci1tZWRpdW0gfiAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICAgIG1hcmdpbi10b3A6IDI1MHB4OyB9XG4gIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci1tZWRpdW0ge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICAgLnBvc2l0aW9uLWJvdHRvbS5yZXZlYWwtZm9yLW1lZGl1bSB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjUwcHg7IH0gfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAucG9zaXRpb24tbGVmdC5yZXZlYWwtZm9yLWxhcmdlIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgei1pbmRleDogMTsgfVxuICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItbGFyZ2UgfiAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyNTBweDsgfVxuICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci1sYXJnZSB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgIHotaW5kZXg6IDE7IH1cbiAgICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci1sYXJnZSB+IC5vZmYtY2FudmFzLWNvbnRlbnQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNTBweDsgfVxuICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItbGFyZ2Uge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICAgLnBvc2l0aW9uLXRvcC5yZXZlYWwtZm9yLWxhcmdlIH4gLm9mZi1jYW52YXMtY29udGVudCB7XG4gICAgICBtYXJnaW4tdG9wOiAyNTBweDsgfVxuICAucG9zaXRpb24tYm90dG9tLnJldmVhbC1mb3ItbGFyZ2Uge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICAgLnBvc2l0aW9uLWJvdHRvbS5yZXZlYWwtZm9yLWxhcmdlIH4gLm9mZi1jYW52YXMtY29udGVudCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNTBweDsgfSB9XG5cbi5vcmJpdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4ub3JiaXQtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4ub3JiaXQtc2xpZGUge1xuICB3aWR0aDogMTAwJTsgfVxuICAub3JiaXQtc2xpZGUubm8tbW90aW9udWkuaXMtYWN0aXZlIHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDsgfVxuXG4ub3JiaXQtZmlndXJlIHtcbiAgbWFyZ2luOiAwOyB9XG5cbi5vcmJpdC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDsgfVxuXG4ub3JiaXQtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMCwgMTAsIDEwLCAwLjUpO1xuICBjb2xvcjogI2ZlZmVmZTsgfVxuXG4ub3JiaXQtcHJldmlvdXMsIC5vcmJpdC1uZXh0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB6LWluZGV4OiAxMDtcbiAgcGFkZGluZzogMXJlbTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddIC5vcmJpdC1wcmV2aW91cywgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddIC5vcmJpdC1uZXh0IHtcbiAgICBvdXRsaW5lOiAwOyB9XG4gIC5vcmJpdC1wcmV2aW91czpob3ZlciwgLm9yYml0LW5leHQ6aG92ZXIsIC5vcmJpdC1wcmV2aW91czphY3RpdmUsIC5vcmJpdC1uZXh0OmFjdGl2ZSwgLm9yYml0LXByZXZpb3VzOmZvY3VzLCAub3JiaXQtbmV4dDpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMCwgMTAsIDEwLCAwLjUpOyB9XG5cbi5vcmJpdC1wcmV2aW91cyB7XG4gIGxlZnQ6IDA7IH1cblxuLm9yYml0LW5leHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDsgfVxuXG4ub3JiaXQtYnVsbGV0cyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICBbZGF0YS13aGF0aW5wdXQ9J21vdXNlJ10gLm9yYml0LWJ1bGxldHMge1xuICAgIG91dGxpbmU6IDA7IH1cbiAgLm9yYml0LWJ1bGxldHMgYnV0dG9uIHtcbiAgICB3aWR0aDogMS4ycmVtO1xuICAgIGhlaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbjogMC4xcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2FjYWNhOyB9XG4gICAgLm9yYml0LWJ1bGxldHMgYnV0dG9uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4YThhOGE7IH1cbiAgICAub3JiaXQtYnVsbGV0cyBidXR0b24uaXMtYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4YThhOGE7IH1cblxuLnBhZ2luYXRpb24ge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTsgfVxuICAucGFnaW5hdGlvbjo6YmVmb3JlLCAucGFnaW5hdGlvbjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJzsgfVxuICAucGFnaW5hdGlvbjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC5wYWdpbmF0aW9uIGxpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMDYyNXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAgIC5wYWdpbmF0aW9uIGxpOmxhc3QtY2hpbGQsIC5wYWdpbmF0aW9uIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gICAgICAucGFnaW5hdGlvbiBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG4gIC5wYWdpbmF0aW9uIGEsXG4gIC5wYWdpbmF0aW9uIGJ1dHRvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMC4xODc1cmVtIDAuNjI1cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgICAucGFnaW5hdGlvbiBhOmhvdmVyLFxuICAgIC5wYWdpbmF0aW9uIGJ1dHRvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTZlNmU2OyB9XG4gIC5wYWdpbmF0aW9uIC5jdXJyZW50IHtcbiAgICBwYWRkaW5nOiAwLjE4NzVyZW0gMC42MjVyZW07XG4gICAgYmFja2dyb3VuZDogIzE3NzliYTtcbiAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7IH1cbiAgLnBhZ2luYXRpb24gLmRpc2FibGVkIHtcbiAgICBwYWRkaW5nOiAwLjE4NzVyZW0gMC42MjVyZW07XG4gICAgY29sb3I6ICNjYWNhY2E7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuICAgIC5wYWdpbmF0aW9uIC5kaXNhYmxlZDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICAucGFnaW5hdGlvbiAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICBwYWRkaW5nOiAwLjE4NzVyZW0gMC42MjVyZW07XG4gICAgY29udGVudDogJ1xcMjAyNic7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cblxuLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuLnBhZ2luYXRpb24tcHJldmlvdXMuZGlzYWJsZWQ6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIGNvbnRlbnQ6ICdcXDAwYWInOyB9XG5cbi5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4ucGFnaW5hdGlvbi1uZXh0LmRpc2FibGVkOjphZnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbiAgY29udGVudDogJ1xcMDBiYic7IH1cblxuLnByb2dyZXNzIHtcbiAgaGVpZ2h0OiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2FjYWNhOyB9XG4gIC5wcm9ncmVzcy5wcmltYXJ5IC5wcm9ncmVzcy1tZXRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzE3NzliYTsgfVxuICAucHJvZ3Jlc3Muc2Vjb25kYXJ5IC5wcm9ncmVzcy1tZXRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzc2NzY3NjsgfVxuICAucHJvZ3Jlc3Muc3VjY2VzcyAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzYWRiNzY7IH1cbiAgLnByb2dyZXNzLndhcm5pbmcgLnByb2dyZXNzLW1ldGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhZTAwOyB9XG4gIC5wcm9ncmVzcy5hbGVydCAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNjYzRiMzc7IH1cblxuLnByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxNzc5YmE7IH1cblxuLnByb2dyZXNzLW1ldGVyLXRleHQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZWZlZmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLnNsaWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwLjVyZW07XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDIuMjVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHRvdWNoLWFjdGlvbjogbm9uZTsgfVxuXG4uc2xpZGVyLWZpbGwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMC41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2FjYWNhO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDsgfVxuICAuc2xpZGVyLWZpbGwuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7IH1cblxuLnNsaWRlci1oYW5kbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS40cmVtO1xuICBoZWlnaHQ6IDEuNHJlbTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3NzliYTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOyB9XG4gIFtkYXRhLXdoYXRpbnB1dD0nbW91c2UnXSAuc2xpZGVyLWhhbmRsZSB7XG4gICAgb3V0bGluZTogMDsgfVxuICAuc2xpZGVyLWhhbmRsZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzE0Njc5ZTsgfVxuICAuc2xpZGVyLWhhbmRsZS5pcy1kcmFnZ2luZyB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDBzIGxpbmVhcjsgfVxuXG4uc2xpZGVyLmRpc2FibGVkLFxuLnNsaWRlcltkaXNhYmxlZF0ge1xuICBvcGFjaXR5OiAwLjI1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG5cbi5zbGlkZXIudmVydGljYWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwLjVyZW07XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOyB9XG4gIC5zbGlkZXIudmVydGljYWwgLnNsaWRlci1maWxsIHtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDAuNXJlbTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlOyB9XG4gIC5zbGlkZXIudmVydGljYWwgLnNsaWRlci1oYW5kbGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAxLjRyZW07XG4gICAgaGVpZ2h0OiAxLjRyZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9XG5cbi5zdGlja3ktY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbi5zdGlja3kge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH1cblxuLnN0aWNreS5pcy1zdHVjayB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogNTsgfVxuICAuc3RpY2t5LmlzLXN0dWNrLmlzLWF0LXRvcCB7XG4gICAgdG9wOiAwOyB9XG4gIC5zdGlja3kuaXMtc3R1Y2suaXMtYXQtYm90dG9tIHtcbiAgICBib3R0b206IDA7IH1cblxuLnN0aWNreS5pcy1hbmNob3JlZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IGF1dG87IH1cbiAgLnN0aWNreS5pcy1hbmNob3JlZC5pcy1hdC1ib3R0b20ge1xuICAgIGJvdHRvbTogMDsgfVxuXG5ib2R5LmlzLXJldmVhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG5odG1sLmlzLXJldmVhbC1vcGVuLFxuaHRtbC5pcy1yZXZlYWwtb3BlbiBib2R5IHtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB1c2VyLXNlbGVjdDogbm9uZTsgfVxuXG4ucmV2ZWFsLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwNTtcbiAgZGlzcGxheTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMCwgMTAsIDEwLCAwLjQ1KTtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsOyB9XG5cbi5yZXZlYWwge1xuICB6LWluZGV4OiAxMDA2O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDFyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxMDBweDtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuICBbZGF0YS13aGF0aW5wdXQ9J21vdXNlJ10gLnJldmVhbCB7XG4gICAgb3V0bGluZTogMDsgfVxuICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAgIC5yZXZlYWwge1xuICAgICAgbWluLWhlaWdodDogMDsgfSB9XG4gIC5yZXZlYWwgLmNvbHVtbiwgLnJldmVhbCAuY29sdW1ucyB7XG4gICAgbWluLXdpZHRoOiAwOyB9XG4gIC5yZXZlYWwgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAgIC5yZXZlYWwge1xuICAgICAgd2lkdGg6IDYwMHB4O1xuICAgICAgbWF4LXdpZHRoOiA3NXJlbTsgfSB9XG4gIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gICAgLnJldmVhbCAucmV2ZWFsIHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbjogMCBhdXRvOyB9IH1cbiAgLnJldmVhbC5jb2xsYXBzZSB7XG4gICAgcGFkZGluZzogMDsgfVxuICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAgIC5yZXZlYWwudGlueSB7XG4gICAgICB3aWR0aDogMzAlO1xuICAgICAgbWF4LXdpZHRoOiA3NXJlbTsgfSB9XG4gIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gICAgLnJldmVhbC5zbWFsbCB7XG4gICAgICB3aWR0aDogNTAlO1xuICAgICAgbWF4LXdpZHRoOiA3NXJlbTsgfSB9XG4gIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0MGVtKSB7XG4gICAgLnJldmVhbC5sYXJnZSB7XG4gICAgICB3aWR0aDogOTAlO1xuICAgICAgbWF4LXdpZHRoOiA3NXJlbTsgfSB9XG4gIC5yZXZlYWwuZnVsbCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAwOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDM5LjkzNzVlbSkge1xuICAgIC5yZXZlYWwge1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwOyB9IH1cbiAgLnJldmVhbC53aXRob3V0LW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDsgfVxuXG4uc3dpdGNoIHtcbiAgaGVpZ2h0OiAycmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIG91dGxpbmU6IDA7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogI2ZlZmVmZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7IH1cblxuLnN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDsgfVxuXG4uc3dpdGNoLXBhZGRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiA0cmVtO1xuICBoZWlnaHQ6IDJyZW07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQ6ICNjYWNhY2E7XG4gIHRyYW5zaXRpb246IGFsbCAwLjI1cyBlYXNlLW91dDtcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgaW5wdXQgKyAuc3dpdGNoLXBhZGRsZSB7XG4gICAgbWFyZ2luOiAwOyB9XG4gIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4yNXJlbTtcbiAgICBsZWZ0OiAwLjI1cmVtO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxLjVyZW07XG4gICAgaGVpZ2h0OiAxLjVyZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0O1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gIGlucHV0OmNoZWNrZWQgfiAuc3dpdGNoLXBhZGRsZSB7XG4gICAgYmFja2dyb3VuZDogIzE3NzliYTsgfVxuICAgIGlucHV0OmNoZWNrZWQgfiAuc3dpdGNoLXBhZGRsZTo6YWZ0ZXIge1xuICAgICAgbGVmdDogMi4yNXJlbTsgfVxuICBbZGF0YS13aGF0aW5wdXQ9J21vdXNlJ10gaW5wdXQ6Zm9jdXMgfiAuc3dpdGNoLXBhZGRsZSB7XG4gICAgb3V0bGluZTogMDsgfVxuXG4uc3dpdGNoLWFjdGl2ZSwgLnN3aXRjaC1pbmFjdGl2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgfVxuXG4uc3dpdGNoLWFjdGl2ZSB7XG4gIGxlZnQ6IDglO1xuICBkaXNwbGF5OiBub25lOyB9XG4gIGlucHV0OmNoZWNrZWQgKyBsYWJlbCA+IC5zd2l0Y2gtYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4uc3dpdGNoLWluYWN0aXZlIHtcbiAgcmlnaHQ6IDE1JTsgfVxuICBpbnB1dDpjaGVja2VkICsgbGFiZWwgPiAuc3dpdGNoLWluYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG5cbi5zd2l0Y2gudGlueSB7XG4gIGhlaWdodDogMS41cmVtOyB9XG4gIC5zd2l0Y2gudGlueSAuc3dpdGNoLXBhZGRsZSB7XG4gICAgd2lkdGg6IDNyZW07XG4gICAgaGVpZ2h0OiAxLjVyZW07XG4gICAgZm9udC1zaXplOiAwLjYyNXJlbTsgfVxuICAuc3dpdGNoLnRpbnkgLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICB0b3A6IDAuMjVyZW07XG4gICAgbGVmdDogMC4yNXJlbTtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07IH1cbiAgLnN3aXRjaC50aW55IGlucHV0OmNoZWNrZWQgfiAuc3dpdGNoLXBhZGRsZTo6YWZ0ZXIge1xuICAgIGxlZnQ6IDEuNzVyZW07IH1cblxuLnN3aXRjaC5zbWFsbCB7XG4gIGhlaWdodDogMS43NXJlbTsgfVxuICAuc3dpdGNoLnNtYWxsIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICB3aWR0aDogMy41cmVtO1xuICAgIGhlaWdodDogMS43NXJlbTtcbiAgICBmb250LXNpemU6IDAuNzVyZW07IH1cbiAgLnN3aXRjaC5zbWFsbCAuc3dpdGNoLXBhZGRsZTo6YWZ0ZXIge1xuICAgIHRvcDogMC4yNXJlbTtcbiAgICBsZWZ0OiAwLjI1cmVtO1xuICAgIHdpZHRoOiAxLjI1cmVtO1xuICAgIGhlaWdodDogMS4yNXJlbTsgfVxuICAuc3dpdGNoLnNtYWxsIGlucHV0OmNoZWNrZWQgfiAuc3dpdGNoLXBhZGRsZTo6YWZ0ZXIge1xuICAgIGxlZnQ6IDJyZW07IH1cblxuLnN3aXRjaC5sYXJnZSB7XG4gIGhlaWdodDogMi41cmVtOyB9XG4gIC5zd2l0Y2gubGFyZ2UgLnN3aXRjaC1wYWRkbGUge1xuICAgIHdpZHRoOiA1cmVtO1xuICAgIGhlaWdodDogMi41cmVtO1xuICAgIGZvbnQtc2l6ZTogMXJlbTsgfVxuICAuc3dpdGNoLmxhcmdlIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgdG9wOiAwLjI1cmVtO1xuICAgIGxlZnQ6IDAuMjVyZW07XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtOyB9XG4gIC5zd2l0Y2gubGFyZ2UgaW5wdXQ6Y2hlY2tlZCB+IC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgbGVmdDogMi43NXJlbTsgfVxuXG50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBib3JkZXItcmFkaXVzOiAwOyB9XG4gIHRhYmxlIHRoZWFkLFxuICB0YWJsZSB0Ym9keSxcbiAgdGFibGUgdGZvb3Qge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNmMWYxZjE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTsgfVxuICB0YWJsZSBjYXB0aW9uIHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC42MjVyZW0gMC42MjVyZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cbiAgdGFibGUgdGhlYWQge1xuICAgIGJhY2tncm91bmQ6ICNmOGY4Zjg7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgdGFibGUgdGZvb3Qge1xuICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XG4gICAgY29sb3I6ICMwYTBhMGE7IH1cbiAgdGFibGUgdGhlYWQgdHIsXG4gIHRhYmxlIHRmb290IHRyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICB0YWJsZSB0aGVhZCB0aCxcbiAgdGFibGUgdGhlYWQgdGQsXG4gIHRhYmxlIHRmb290IHRoLFxuICB0YWJsZSB0Zm9vdCB0ZCB7XG4gICAgcGFkZGluZzogMC41cmVtIDAuNjI1cmVtIDAuNjI1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7IH1cbiAgdGFibGUgdGJvZHkgdGgsXG4gIHRhYmxlIHRib2R5IHRkIHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC42MjVyZW0gMC42MjVyZW07IH1cbiAgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7IH1cbiAgdGFibGUudW5zdHJpcGVkIHRib2R5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlOyB9XG4gICAgdGFibGUudW5zdHJpcGVkIHRib2R5IHRyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjMuOTM3NWVtKSB7XG4gIHRhYmxlLnN0YWNrIHRoZWFkIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIHRhYmxlLnN0YWNrIHRmb290IHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIHRhYmxlLnN0YWNrIHRyLFxuICB0YWJsZS5zdGFjayB0aCxcbiAgdGFibGUuc3RhY2sgdGQge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIHRhYmxlLnN0YWNrIHRkIHtcbiAgICBib3JkZXItdG9wOiAwOyB9IH1cblxudGFibGUuc2Nyb2xsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBhdXRvOyB9XG5cbnRhYmxlLmhvdmVyIHRoZWFkIHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsgfVxuXG50YWJsZS5ob3ZlciB0Zm9vdCB0cjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7IH1cblxudGFibGUuaG92ZXIgdGJvZHkgdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OyB9XG5cbnRhYmxlLmhvdmVyOm5vdCgudW5zdHJpcGVkKSB0cjpudGgtb2YtdHlwZShldmVuKTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7IH1cblxuLnRhYmxlLXNjcm9sbCB7XG4gIG92ZXJmbG93LXg6IGF1dG87IH1cbiAgLnRhYmxlLXNjcm9sbCB0YWJsZSB7XG4gICAgd2lkdGg6IGF1dG87IH1cblxuLnRhYnMge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxuICAudGFiczo6YmVmb3JlLCAudGFiczo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJzsgfVxuICAudGFiczo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG5cbi50YWJzLnZlcnRpY2FsID4gbGkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiBhdXRvOyB9XG5cbi50YWJzLnNpbXBsZSA+IGxpID4gYSB7XG4gIHBhZGRpbmc6IDA7IH1cbiAgLnRhYnMuc2ltcGxlID4gbGkgPiBhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuXG4udGFicy5wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogIzE3NzliYTsgfVxuICAudGFicy5wcmltYXJ5ID4gbGkgPiBhIHtcbiAgICBjb2xvcjogI2ZlZmVmZTsgfVxuICAgIC50YWJzLnByaW1hcnkgPiBsaSA+IGE6aG92ZXIsIC50YWJzLnByaW1hcnkgPiBsaSA+IGE6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogIzE2NzNiMTsgfVxuXG4udGFicy10aXRsZSB7XG4gIGZsb2F0OiBsZWZ0OyB9XG4gIC50YWJzLXRpdGxlID4gYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMS4yNXJlbSAxLjVyZW07XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGNvbG9yOiAjMTc3OWJhOyB9XG4gICAgLnRhYnMtdGl0bGUgPiBhOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gICAgICBjb2xvcjogIzE0NjhhMDsgfVxuICAgIC50YWJzLXRpdGxlID4gYTpmb2N1cywgLnRhYnMtdGl0bGUgPiBhW2FyaWEtc2VsZWN0ZWQ9J3RydWUnXSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTZlNmU2O1xuICAgICAgY29sb3I6ICMxNzc5YmE7IH1cblxuLnRhYnMtY29udGVudCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gIGNvbG9yOiAjMGEwYTBhO1xuICB0cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlOyB9XG5cbi50YWJzLWNvbnRlbnQudmVydGljYWwge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBib3JkZXItbGVmdDogMDsgfVxuXG4udGFicy1wYW5lbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDFyZW07IH1cbiAgLnRhYnMtcGFuZWxbYXJpYS1oaWRkZW49XCJmYWxzZVwiXSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLnRodW1ibmFpbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBib3JkZXI6IHNvbGlkIDRweCAjZmVmZWZlO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgxMCwgMTAsIDEwLCAwLjIpO1xuICBsaW5lLWhlaWdodDogMDsgfVxuXG5hLnRodW1ibmFpbCB7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMjAwbXMgZWFzZS1vdXQ7IH1cbiAgYS50aHVtYm5haWw6aG92ZXIsIGEudGh1bWJuYWlsOmZvY3VzIHtcbiAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCByZ2JhKDIzLCAxMjEsIDE4NiwgMC41KTsgfVxuICBhLnRodW1ibmFpbCBpbWFnZSB7XG4gICAgYm94LXNoYWRvdzogbm9uZTsgfVxuXG4udGl0bGUtYmFyIHtcbiAgcGFkZGluZzogMC41cmVtO1xuICBiYWNrZ3JvdW5kOiAjMGEwYTBhO1xuICBjb2xvcjogI2ZlZmVmZTsgfVxuICAudGl0bGUtYmFyOjpiZWZvcmUsIC50aXRsZS1iYXI6OmFmdGVyIHtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICBjb250ZW50OiAnICc7IH1cbiAgLnRpdGxlLWJhcjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC50aXRsZS1iYXIgLm1lbnUtaWNvbiB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMjVyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtOyB9XG5cbi50aXRsZS1iYXItbGVmdCB7XG4gIGZsb2F0OiBsZWZ0OyB9XG5cbi50aXRsZS1iYXItcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbi50aXRsZS1iYXItdGl0bGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5oYXMtdGlwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggIzhhOGE4YTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGN1cnNvcjogaGVscDsgfVxuXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDEwMCUgKyAwLjY0OTVyZW0pO1xuICB6LWluZGV4OiAxMjAwO1xuICBtYXgtd2lkdGg6IDEwcmVtO1xuICBwYWRkaW5nOiAwLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGEwYTBhO1xuICBmb250LXNpemU6IDgwJTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLnRvb2x0aXA6OmJlZm9yZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlcjogaW5zZXQgMC43NXJlbTtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzBhMGEwYTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH1cbiAgLnRvb2x0aXAudG9wOjpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDAuNzVyZW07XG4gICAgY29udGVudDogJyc7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6ICMwYTBhMGEgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgdG9wOiAxMDAlO1xuICAgIGJvdHRvbTogYXV0bzsgfVxuICAudG9vbHRpcC5sZWZ0OjpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDAuNzVyZW07XG4gICAgY29udGVudDogJyc7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMwYTBhMGE7XG4gICAgdG9wOiA1MCU7XG4gICAgYm90dG9tOiBhdXRvO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG4gIC50b29sdGlwLnJpZ2h0OjpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBib3JkZXI6IGluc2V0IDAuNzVyZW07XG4gICAgY29udGVudDogJyc7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICMwYTBhMGEgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDEwMCU7XG4gICAgYm90dG9tOiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG5cbi50b3AtYmFyIHtcbiAgcGFkZGluZzogMC41cmVtOyB9XG4gIC50b3AtYmFyOjpiZWZvcmUsIC50b3AtYmFyOjphZnRlciB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgY29udGVudDogJyAnOyB9XG4gIC50b3AtYmFyOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLnRvcC1iYXIsXG4gIC50b3AtYmFyIHVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OyB9XG4gIC50b3AtYmFyIGlucHV0IHtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTsgfVxuICAudG9wLWJhciAuaW5wdXQtZ3JvdXAtZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAudG9wLWJhciBpbnB1dC5idXR0b24ge1xuICAgIHdpZHRoOiBhdXRvOyB9XG4gIC50b3AtYmFyIC50b3AtYmFyLWxlZnQsXG4gIC50b3AtYmFyIC50b3AtYmFyLXJpZ2h0IHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAgIC50b3AtYmFyIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXIgLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IGF1dG87IH0gfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgICAudG9wLWJhci5zdGFja2VkLWZvci1tZWRpdW0gLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci5zdGFja2VkLWZvci1tZWRpdW0gLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NC45Mzc1ZW0pIHtcbiAgICAudG9wLWJhci5zdGFja2VkLWZvci1sYXJnZSAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLnN0YWNrZWQtZm9yLWxhcmdlIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuLnRvcC1iYXItdGl0bGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbSAwLjVyZW0gMDsgfVxuICAudG9wLWJhci10aXRsZSAubWVudS1pY29uIHtcbiAgICBib3R0b206IDJweDsgfVxuXG4udG9wLWJhci1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7IH1cblxuLnRvcC1iYXItcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7IH1cblxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjsgfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzOS45Mzc1ZW0pIHtcbiAgLmhpZGUtZm9yLXNtYWxsLW9ubHkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDBlbSksIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDBlbSkge1xuICAuc2hvdy1mb3Itc21hbGwtb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIHByaW50LCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwZW0pIHtcbiAgLmhpZGUtZm9yLW1lZGl1bSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzkuOTM3NWVtKSB7XG4gIC5zaG93LWZvci1tZWRpdW0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQwZW0pIGFuZCAobWF4LXdpZHRoOiA2My45Mzc1ZW0pIHtcbiAgLmhpZGUtZm9yLW1lZGl1bS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzOS45Mzc1ZW0pLCBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIHtcbiAgLnNob3ctZm9yLW1lZGl1bS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjRlbSkge1xuICAuaGlkZS1mb3ItbGFyZ2Uge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYzLjkzNzVlbSkge1xuICAuc2hvdy1mb3ItbGFyZ2Uge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDY0ZW0pIGFuZCAobWF4LXdpZHRoOiA3NC45Mzc1ZW0pIHtcbiAgLmhpZGUtZm9yLWxhcmdlLW9ubHkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYzLjkzNzVlbSksIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzVlbSkge1xuICAuc2hvdy1mb3ItbGFyZ2Utb25seSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuLnNob3ctZm9yLXNyLFxuLnNob3ctb24tZm9jdXMge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7IH1cblxuLnNob3ctb24tZm9jdXM6YWN0aXZlLCAuc2hvdy1vbi1mb2N1czpmb2N1cyB7XG4gIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGNsaXA6IGF1dG87IH1cblxuLnNob3ctZm9yLWxhbmRzY2FwZSxcbi5oaWRlLWZvci1wb3J0cmFpdCB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAuc2hvdy1mb3ItbGFuZHNjYXBlLFxuICAgIC5oaWRlLWZvci1wb3J0cmFpdCB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkge1xuICAgIC5zaG93LWZvci1sYW5kc2NhcGUsXG4gICAgLmhpZGUtZm9yLXBvcnRyYWl0IHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG5cbi5oaWRlLWZvci1sYW5kc2NhcGUsXG4uc2hvdy1mb3ItcG9ydHJhaXQge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAuaGlkZS1mb3ItbGFuZHNjYXBlLFxuICAgIC5zaG93LWZvci1wb3J0cmFpdCB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSB7XG4gICAgLmhpZGUtZm9yLWxhbmRzY2FwZSxcbiAgICAuc2hvdy1mb3ItcG9ydHJhaXQge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbi5mbG9hdC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDsgfVxuXG4uZmxvYXQtcmlnaHQge1xuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDsgfVxuXG4uZmxvYXQtY2VudGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cblxuLmNsZWFyZml4OjpiZWZvcmUsIC5jbGVhcmZpeDo6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY29udGVudDogJyAnOyB9XG5cbi5jbGVhcmZpeDo6YWZ0ZXIge1xuICBjbGVhcjogYm90aDsgfVxuXG4uc2xpZGUtaW4tZG93bi5tdWktZW50ZXIge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH1cblxuLnNsaWRlLWluLWRvd24ubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cblxuLnNsaWRlLWluLWxlZnQubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbi5zbGlkZS1pbi1sZWZ0Lm11aS1lbnRlci5tdWktZW50ZXItYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG5cbi5zbGlkZS1pbi11cC5tdWktZW50ZXIge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfVxuXG4uc2xpZGUtaW4tdXAubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cblxuLnNsaWRlLWluLXJpZ2h0Lm11aS1lbnRlciB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbi5zbGlkZS1pbi1yaWdodC5tdWktZW50ZXIubXVpLWVudGVyLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxuXG4uc2xpZGUtb3V0LWRvd24ubXVpLWxlYXZlIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH1cblxuLnNsaWRlLW91dC1kb3duLm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOyB9XG5cbi5zbGlkZS1vdXQtcmlnaHQubXVpLWxlYXZlIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH1cblxuLnNsaWRlLW91dC1yaWdodC5tdWktbGVhdmUubXVpLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxuXG4uc2xpZGUtb3V0LXVwLm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbi5zbGlkZS1vdXQtdXAubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpOyB9XG5cbi5zbGlkZS1vdXQtbGVmdC5tdWktbGVhdmUge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfVxuXG4uc2xpZGUtb3V0LWxlZnQubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG5cbi5mYWRlLWluLm11aS1lbnRlciB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5OyB9XG5cbi5mYWRlLWluLm11aS1lbnRlci5tdWktZW50ZXItYWN0aXZlIHtcbiAgb3BhY2l0eTogMTsgfVxuXG4uZmFkZS1vdXQubXVpLWxlYXZlIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7IH1cblxuLmZhZGUtb3V0Lm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgb3BhY2l0eTogMDsgfVxuXG4uaGluZ2UtaW4tZnJvbS10b3AubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGVYKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAwOyB9XG5cbi5oaW5nZS1pbi1mcm9tLXRvcC5tdWktZW50ZXIubXVpLWVudGVyLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGUoMGRlZyk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLmhpbmdlLWluLWZyb20tcmlnaHQubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGVZKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIG9wYWNpdHk6IDA7IH1cblxuLmhpbmdlLWluLWZyb20tcmlnaHQubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICBvcGFjaXR5OiAxOyB9XG5cbi5oaW5nZS1pbi1mcm9tLWJvdHRvbS5tdWktZW50ZXIge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZVgoOTBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uaGluZ2UtaW4tZnJvbS1ib3R0b20ubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICBvcGFjaXR5OiAxOyB9XG5cbi5oaW5nZS1pbi1mcm9tLWxlZnQubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGVZKDkwZGVnKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAwOyB9XG5cbi5oaW5nZS1pbi1mcm9tLWxlZnQubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICBvcGFjaXR5OiAxOyB9XG5cbi5oaW5nZS1pbi1mcm9tLW1pZGRsZS14Lm11aS1lbnRlciB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlWCgtOTBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uaGluZ2UtaW4tZnJvbS1taWRkbGUteC5tdWktZW50ZXIubXVpLWVudGVyLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGUoMGRlZyk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLmhpbmdlLWluLWZyb20tbWlkZGxlLXkubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGVZKC05MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAwOyB9XG5cbi5oaW5nZS1pbi1mcm9tLW1pZGRsZS15Lm11aS1lbnRlci5tdWktZW50ZXItYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZSgwZGVnKTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uaGluZ2Utb3V0LWZyb20tdG9wLm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uaGluZ2Utb3V0LWZyb20tdG9wLm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZVgoLTkwZGVnKTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uaGluZ2Utb3V0LWZyb20tcmlnaHQubXVpLWxlYXZlIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMjAwMHB4KSByb3RhdGUoMGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLmhpbmdlLW91dC1mcm9tLXJpZ2h0Lm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZVkoLTkwZGVnKTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uaGluZ2Utb3V0LWZyb20tYm90dG9tLm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uaGluZ2Utb3V0LWZyb20tYm90dG9tLm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZVgoOTBkZWcpO1xuICBvcGFjaXR5OiAwOyB9XG5cbi5oaW5nZS1vdXQtZnJvbS1sZWZ0Lm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLmhpbmdlLW91dC1mcm9tLWxlZnQubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlWSg5MGRlZyk7XG4gIG9wYWNpdHk6IDA7IH1cblxuLmhpbmdlLW91dC1mcm9tLW1pZGRsZS14Lm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlKDBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uaGluZ2Utb3V0LWZyb20tbWlkZGxlLXgubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDIwMDBweCkgcm90YXRlWCgtOTBkZWcpO1xuICBvcGFjaXR5OiAwOyB9XG5cbi5oaW5nZS1vdXQtZnJvbS1taWRkbGUteS5tdWktbGVhdmUge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZSgwZGVnKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLmhpbmdlLW91dC1mcm9tLW1pZGRsZS15Lm11aS1sZWF2ZS5tdWktbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyMDAwcHgpIHJvdGF0ZVkoLTkwZGVnKTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uc2NhbGUtaW4tdXAubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogc2NhbGUoMC41KTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAwOyB9XG5cbi5zY2FsZS1pbi11cC5tdWktZW50ZXIubXVpLWVudGVyLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLnNjYWxlLWluLWRvd24ubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAwOyB9XG5cbi5zY2FsZS1pbi1kb3duLm11aS1lbnRlci5tdWktZW50ZXItYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uc2NhbGUtb3V0LXVwLm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIG9wYWNpdHk6IDE7IH1cblxuLnNjYWxlLW91dC11cC5tdWktbGVhdmUubXVpLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS41KTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uc2NhbGUtb3V0LWRvd24ubXVpLWxlYXZlIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uc2NhbGUtb3V0LWRvd24ubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XG4gIG9wYWNpdHk6IDA7IH1cblxuLnNwaW4taW4ubXVpLWVudGVyIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gIHRyYW5zZm9ybTogcm90YXRlKC0wLjc1dHVybik7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uc3Bpbi1pbi5tdWktZW50ZXIubXVpLWVudGVyLWFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICBvcGFjaXR5OiAxOyB9XG5cbi5zcGluLW91dC5tdWktbGVhdmUge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtcztcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMCk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uc3Bpbi1vdXQubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwLjc1dHVybik7XG4gIG9wYWNpdHk6IDA7IH1cblxuLnNwaW4taW4tY2N3Lm11aS1lbnRlciB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwLjc1dHVybik7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgb3BhY2l0eTogMDsgfVxuXG4uc3Bpbi1pbi1jY3cubXVpLWVudGVyLm11aS1lbnRlci1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgb3BhY2l0eTogMTsgfVxuXG4uc3Bpbi1vdXQtY2N3Lm11aS1sZWF2ZSB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICBvcGFjaXR5OiAxOyB9XG5cbi5zcGluLW91dC1jY3cubXVpLWxlYXZlLm11aS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtMC43NXR1cm4pO1xuICBvcGFjaXR5OiAwOyB9XG5cbi5zbG93IHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNzUwbXMgIWltcG9ydGFudDsgfVxuXG4uZmFzdCB7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDI1MG1zICFpbXBvcnRhbnQ7IH1cblxuLmxpbmVhciB7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIgIWltcG9ydGFudDsgfVxuXG4uZWFzZSB7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlICFpbXBvcnRhbnQ7IH1cblxuLmVhc2UtaW4ge1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbiAhaW1wb3J0YW50OyB9XG5cbi5lYXNlLW91dCB7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dCAhaW1wb3J0YW50OyB9XG5cbi5lYXNlLWluLW91dCB7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dCAhaW1wb3J0YW50OyB9XG5cbi5ib3VuY2UtaW4ge1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNDg1LCAwLjE1NSwgMC4yNCwgMS4yNDUpICFpbXBvcnRhbnQ7IH1cblxuLmJvdW5jZS1vdXQge1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNDg1LCAwLjE1NSwgMC41MTUsIDAuODQ1KSAhaW1wb3J0YW50OyB9XG5cbi5ib3VuY2UtaW4tb3V0IHtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjc2LCAtMC4yNDUsIDAuMjQsIDEuMjQ1KSAhaW1wb3J0YW50OyB9XG5cbi5zaG9ydC1kZWxheSB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDMwMG1zICFpbXBvcnRhbnQ7IH1cblxuLmxvbmctZGVsYXkge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA3MDBtcyAhaW1wb3J0YW50OyB9XG5cbi5zaGFrZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiBzaGFrZS03OyB9XG5cbkBrZXlmcmFtZXMgc2hha2UtNyB7XG4gIDAlLCAxMCUsIDIwJSwgMzAlLCA0MCUsIDUwJSwgNjAlLCA3MCUsIDgwJSwgOTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNyUpOyB9XG4gIDUlLCAxNSUsIDI1JSwgMzUlLCA0NSUsIDU1JSwgNjUlLCA3NSUsIDg1JSwgOTUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTclKTsgfSB9XG5cbi5zcGluLWN3IHtcbiAgYW5pbWF0aW9uLW5hbWU6IHNwaW4tY3ctMXR1cm47IH1cblxuQGtleWZyYW1lcyBzcGluLWN3LTF0dXJuIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xdHVybik7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH0gfVxuXG4uc3Bpbi1jY3cge1xuICBhbmltYXRpb24tbmFtZTogc3Bpbi1jdy0xdHVybjsgfVxuXG5Aa2V5ZnJhbWVzIHNwaW4tY3ctMXR1cm4ge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMXR1cm4pOyB9IH1cblxuLndpZ2dsZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiB3aWdnbGUtN2RlZzsgfVxuXG5Aa2V5ZnJhbWVzIHdpZ2dsZS03ZGVnIHtcbiAgNDAlLCA1MCUsIDYwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoN2RlZyk7IH1cbiAgMzUlLCA0NSUsIDU1JSwgNjUlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtN2RlZyk7IH1cbiAgMCUsIDMwJSwgNzAlLCAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTsgfSB9XG5cbi5zaGFrZSxcbi5zcGluLWN3LFxuLnNwaW4tY2N3LFxuLndpZ2dsZSB7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogNTAwbXM7IH1cblxuLmluZmluaXRlIHtcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7IH1cblxuLnNsb3cge1xuICBhbmltYXRpb24tZHVyYXRpb246IDc1MG1zICFpbXBvcnRhbnQ7IH1cblxuLmZhc3Qge1xuICBhbmltYXRpb24tZHVyYXRpb246IDI1MG1zICFpbXBvcnRhbnQ7IH1cblxuLmxpbmVhciB7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhciAhaW1wb3J0YW50OyB9XG5cbi5lYXNlIHtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZSAhaW1wb3J0YW50OyB9XG5cbi5lYXNlLWluIHtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbiAhaW1wb3J0YW50OyB9XG5cbi5lYXNlLW91dCB7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0ICFpbXBvcnRhbnQ7IH1cblxuLmVhc2UtaW4tb3V0IHtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbi1vdXQgIWltcG9ydGFudDsgfVxuXG4uYm91bmNlLWluIHtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNDg1LCAwLjE1NSwgMC4yNCwgMS4yNDUpICFpbXBvcnRhbnQ7IH1cblxuLmJvdW5jZS1vdXQge1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40ODUsIDAuMTU1LCAwLjUxNSwgMC44NDUpICFpbXBvcnRhbnQ7IH1cblxuLmJvdW5jZS1pbi1vdXQge1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC43NiwgLTAuMjQ1LCAwLjI0LCAxLjI0NSkgIWltcG9ydGFudDsgfVxuXG4uc2hvcnQtZGVsYXkge1xuICBhbmltYXRpb24tZGVsYXk6IDMwMG1zICFpbXBvcnRhbnQ7IH1cblxuLmxvbmctZGVsYXkge1xuICBhbmltYXRpb24tZGVsYXk6IDcwMG1zICFpbXBvcnRhbnQ7IH1cblxuLnNpdGUtbG9nbyB7XG4gIGhlaWdodDogMzJweDsgfVxuXG4uYmxvZy1wb3N0IC5wb3N0LW1ldGEge1xuICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2U2ZTZlNjtcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNlNmU2ZTY7IH1cblxuLmxlZ2FjeS1jb21tZW50cyB7XG4gIGJvcmRlci10b3A6IHNvbGlkIDJweCAjMTc3OWJhO1xuICBwYWRkaW5nLXRvcDogMWVtOyB9XG4gIC5sZWdhY3ktY29tbWVudHMgLmNvbW1lbnQgLnRpdGxlLCAubGVnYWN5LWNvbW1lbnRzIC5jb21tZW50LXB1Ymxpc2hlZCAudGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtOyB9XG4gIC5sZWdhY3ktY29tbWVudHMgLmNvbW1lbnQgLnN1Ym1pdHRlZCwgLmxlZ2FjeS1jb21tZW50cyAuY29tbWVudC1wdWJsaXNoZWQgLnN1Ym1pdHRlZCB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgY29sb3I6ICM4YThhOGE7XG4gICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07IH1cbiAgLmxlZ2FjeS1jb21tZW50cyAuY29tbWVudCAubGlua3MsIC5sZWdhY3ktY29tbWVudHMgLmNvbW1lbnQgLmxpbmtzICosIC5sZWdhY3ktY29tbWVudHMgLmNvbW1lbnQtcHVibGlzaGVkIC5saW5rcywgLmxlZ2FjeS1jb21tZW50cyAuY29tbWVudC1wdWJsaXNoZWQgLmxpbmtzICoge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cblxuLmJsb2ctZm9vdGVyIHtcbiAgcGFkZGluZy10b3A6IDJyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICMxNzc5YmE7XG4gIGNvbG9yOiAjZmVmZWZlOyB9XG4gIC5ibG9nLWZvb3RlciBhIHtcbiAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxuICAuYmxvZy1mb290ZXIgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiIsIi8qKlxuICogRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuICogVmVyc2lvbiA2LjMuMVxuICogZm91bmRhdGlvbi56dXJiLmNvbVxuICogTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG4gKi9cblxuLy8gRGVwZW5kZW5jaWVzXG5AaW1wb3J0ICcuLi9fdmVuZG9yL25vcm1hbGl6ZS1zY3NzL3Nhc3Mvbm9ybWFsaXplJztcbkBpbXBvcnQgJy4uL192ZW5kb3Ivc2Fzc3ktbGlzdHMvc3R5bGVzaGVldHMvaGVscGVycy9taXNzaW5nLWRlcGVuZGVuY2llcyc7XG5AaW1wb3J0ICcuLi9fdmVuZG9yL3Nhc3N5LWxpc3RzL3N0eWxlc2hlZXRzL2hlbHBlcnMvdHJ1ZSc7XG5AaW1wb3J0ICcuLi9fdmVuZG9yL3Nhc3N5LWxpc3RzL3N0eWxlc2hlZXRzL2Z1bmN0aW9ucy9wdXJnZSc7XG5AaW1wb3J0ICcuLi9fdmVuZG9yL3Nhc3N5LWxpc3RzL3N0eWxlc2hlZXRzL2Z1bmN0aW9ucy9yZW1vdmUnO1xuQGltcG9ydCAnLi4vX3ZlbmRvci9zYXNzeS1saXN0cy9zdHlsZXNoZWV0cy9mdW5jdGlvbnMvcmVwbGFjZSc7XG5AaW1wb3J0ICcuLi9fdmVuZG9yL3Nhc3N5LWxpc3RzL3N0eWxlc2hlZXRzL2Z1bmN0aW9ucy90by1saXN0JztcblxuLy8gU2V0dGluZ3Ncbi8vIGltcG9ydCB5b3VyIG93biBgc2V0dGluZ3NgIGhlcmUgb3Jcbi8vIGltcG9ydCBhbmQgbW9kaWZ5IHRoZSBkZWZhdWx0IHNldHRpbmdzIHRocm91Z2hcbi8vIEBpbXBvcnQgJ3NldHRpbmdzL3NldHRpbmdzJztcblxuLy8gU2FzcyB1dGlsaXRpZXNcbkBpbXBvcnQgJ3V0aWwvdXRpbCc7XG5cbi8vIEdsb2JhbCB2YXJpYWJsZXMgYW5kIHN0eWxlc1xuQGltcG9ydCAnZ2xvYmFsJztcblxuLy8gQ29tcG9uZW50c1xuQGltcG9ydCAnZ3JpZC9ncmlkJztcbkBpbXBvcnQgJ3R5cG9ncmFwaHkvdHlwb2dyYXBoeSc7XG5AaW1wb3J0ICdmb3Jtcy9mb3Jtcyc7XG5AaW1wb3J0ICdjb21wb25lbnRzL3Zpc2liaWxpdHknO1xuQGltcG9ydCAnY29tcG9uZW50cy9mbG9hdCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2J1dHRvbic7XG5AaW1wb3J0ICdjb21wb25lbnRzL2J1dHRvbi1ncm91cCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2FjY29yZGlvbi1tZW51JztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvYWNjb3JkaW9uJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvYmFkZ2UnO1xuQGltcG9ydCAnY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2NhbGxvdXQnO1xuQGltcG9ydCAnY29tcG9uZW50cy9jYXJkJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvY2xvc2UtYnV0dG9uJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvZHJpbGxkb3duJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvZHJvcGRvd24tbWVudSc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2Ryb3Bkb3duJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvZmxleCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL3Jlc3BvbnNpdmUtZW1iZWQnO1xuQGltcG9ydCAnY29tcG9uZW50cy9sYWJlbCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL21lZGlhLW9iamVjdCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL21lbnUnO1xuQGltcG9ydCAnY29tcG9uZW50cy9tZW51LWljb24nO1xuQGltcG9ydCAnY29tcG9uZW50cy9vZmYtY2FudmFzJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvb3JiaXQnO1xuQGltcG9ydCAnY29tcG9uZW50cy9wYWdpbmF0aW9uJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvcHJvZ3Jlc3MtYmFyJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvcmV2ZWFsJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvc2xpZGVyJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvc3RpY2t5JztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvc3dpdGNoJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvdGFibGUnO1xuQGltcG9ydCAnY29tcG9uZW50cy90YWJzJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvdGl0bGUtYmFyJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvdG9wLWJhcic7XG5AaW1wb3J0ICdjb21wb25lbnRzL3RodW1ibmFpbCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL3Rvb2x0aXAnO1xuXG5AbWl4aW4gZm91bmRhdGlvbi1ldmVyeXRoaW5nKCRmbGV4OiBmYWxzZSkge1xuICBAaWYgJGZsZXgge1xuICAgICRnbG9iYWwtZmxleGJveDogdHJ1ZSAhZ2xvYmFsO1xuICB9XG5cbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1nbG9iYWwtc3R5bGVzO1xuICBAaWYgbm90ICRmbGV4IHtcbiAgICBAaW5jbHVkZSBmb3VuZGF0aW9uLWdyaWQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGZvdW5kYXRpb24tZmxleC1ncmlkO1xuICB9XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tdHlwb2dyYXBoeTtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1mb3JtcztcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1idXR0b247XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tYWNjb3JkaW9uO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWFjY29yZGlvbi1tZW51O1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWJhZGdlO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWJyZWFkY3J1bWJzO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWJ1dHRvbi1ncm91cDtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1jYWxsb3V0O1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWNhcmQ7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tY2xvc2UtYnV0dG9uO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLW1lbnU7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tbWVudS1pY29uO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWRyaWxsZG93bi1tZW51O1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWRyb3Bkb3duO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLWRyb3Bkb3duLW1lbnU7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tcmVzcG9uc2l2ZS1lbWJlZDtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1sYWJlbDtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1tZWRpYS1vYmplY3Q7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tb2ZmLWNhbnZhcztcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1vcmJpdDtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1wYWdpbmF0aW9uO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLXByb2dyZXNzLWJhcjtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1zbGlkZXI7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tc3RpY2t5O1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLXJldmVhbDtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1zd2l0Y2g7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tdGFibGU7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tdGFicztcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi10aHVtYm5haWw7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tdGl0bGUtYmFyO1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLXRvb2x0aXA7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tdG9wLWJhcjtcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi12aXNpYmlsaXR5LWNsYXNzZXM7XG4gIEBpbmNsdWRlIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcztcblxuICBAaWYgJGZsZXgge1xuICAgIEBpbmNsdWRlIGZvdW5kYXRpb24tZmxleC1jbGFzc2VzO1xuICB9XG59XG4iLCIvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBub3JtYWxpemUoKSBtaXhpbi5cbkBmdW5jdGlvbiBfbm9ybWFsaXplLWluY2x1ZGUoJHNlY3Rpb24sICRleGNsdWRlOiBudWxsKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgbmVlZGVkIGJ5IHRoaXMgZnVuY3Rpb24uXG4gIEBpZiBub3QgZ2xvYmFsX3ZhcmlhYmxlX2V4aXN0cyhfbm9ybWFsaXplLWluY2x1ZGUpIHtcbiAgICAkX25vcm1hbGl6ZS1pbmNsdWRlOiAoKSAhZ2xvYmFsO1xuICAgICRfbm9ybWFsaXplLWV4Y2x1ZGU6ICgpICFnbG9iYWw7XG4gIH1cbiAgLy8gU2luY2Ugd2UgYXJlIGdpdmVuIDIgcGFyYW1ldGVycywgc2V0IHRoZSBnbG9iYWwgdmFyaWFibGVzLlxuICBAaWYgJGV4Y2x1ZGUgIT0gbnVsbCB7XG4gICAgJGluY2x1ZGU6ICRzZWN0aW9uO1xuICAgIC8vIFNhc3MgZG9lc24ndCBoYXZlIHN0YXRpYyB2YXJpYWJsZXMsIHNvIHRoZSB3b3JrLWFyb3VuZCBpcyB0byBzdHVmZiB0aGVzZVxuICAgIC8vIHZhbHVlcyBpbnRvIGdsb2JhbCB2YXJpYWJsZXMgc28gd2UgY2FuIGFjY2VzcyB0aGVtIGluIGZ1dHVyZSBjYWxscy5cbiAgICAkX25vcm1hbGl6ZS1pbmNsdWRlOiBpZih0eXBlLW9mKCRpbmNsdWRlKSA9PSAnbGlzdCcsICRpbmNsdWRlLCAoJGluY2x1ZGUpKSAhZ2xvYmFsO1xuICAgICRfbm9ybWFsaXplLWV4Y2x1ZGU6IGlmKHR5cGUtb2YoJGV4Y2x1ZGUpID09ICdsaXN0JywgJGV4Y2x1ZGUsICgkZXhjbHVkZSkpICFnbG9iYWw7XG4gICAgQHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgJHNlY3Rpb24gaXMgaW4gdGhlICRpbmNsdWRlIGxpc3QuXG4gIEBpZiBpbmRleCgkX25vcm1hbGl6ZS1pbmNsdWRlLCAkc2VjdGlvbikge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiAkaW5jbHVkZSBpcyBzZXQgdG8gKGFsbCksIG1ha2Ugc3VyZSAkc2VjdGlvbiBpcyBub3QgaW4gJGV4Y2x1ZGUuXG4gIEBlbHNlIGlmIG5vdCBpbmRleCgkX25vcm1hbGl6ZS1leGNsdWRlLCAkc2VjdGlvbikgYW5kIGluZGV4KCRfbm9ybWFsaXplLWluY2x1ZGUsIGFsbCkge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuICBAcmV0dXJuIGZhbHNlO1xufVxuXG5AbWl4aW4gbm9ybWFsaXplKCRpbmNsdWRlOiAoYWxsKSwgJGV4Y2x1ZGU6ICgpKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhlbHBlciBmdW5jdGlvbiBieSBwYXNzaW5nIGl0IHRoaXMgbWl4aW4ncyBwYXJhbWV0ZXJzLlxuICAkaW5pdDogX25vcm1hbGl6ZS1pbmNsdWRlKCRpbmNsdWRlLCAkZXhjbHVkZSk7XG5cbiAgLy8gSWYgd2UndmUgY3VzdG9taXplZCBhbnkgZm9udCB2YXJpYWJsZXMsIHdlJ2xsIG5lZWQgZXh0cmEgcHJvcGVydGllcy5cbiAgQGlmICRiYXNlLWZvbnQtc2l6ZSAhPSAxNnB4XG4gICAgb3IgJGJhc2UtbGluZS1oZWlnaHQgIT0gMjRweFxuICAgIG9yICRiYXNlLXVuaXQgIT0gJ2VtJ1xuICAgIG9yICRoMS1mb250LXNpemUgIT0gMiAgICAqICRiYXNlLWZvbnQtc2l6ZVxuICAgIG9yICRoMi1mb250LXNpemUgIT0gMS41ICAqICRiYXNlLWZvbnQtc2l6ZVxuICAgIG9yICRoMy1mb250LXNpemUgIT0gMS4xNyAqICRiYXNlLWZvbnQtc2l6ZVxuICAgIG9yICRoNC1mb250LXNpemUgIT0gMSAgICAqICRiYXNlLWZvbnQtc2l6ZVxuICAgIG9yICRoNS1mb250LXNpemUgIT0gMC44MyAqICRiYXNlLWZvbnQtc2l6ZVxuICAgIG9yICRoNi1mb250LXNpemUgIT0gMC42NyAqICRiYXNlLWZvbnQtc2l6ZSB7XG4gICAgJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG06IHRydWUgIWdsb2JhbDtcbiAgfVxuXG4gIC8qISBub3JtYWxpemUtc2NzcyB8IE1JVC9HUEx2MiBMaWNlbnNlIHwgYml0Lmx5L25vcm1hbGl6ZS1zY3NzICovXG5cbiAgQGlmIF9ub3JtYWxpemUtaW5jbHVkZShkb2N1bWVudCkge1xuICAgIC8qIERvY3VtZW50XG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qKlxuICAgICAqIDEuIENoYW5nZSB0aGUgZGVmYXVsdCBmb250IGZhbWlseSBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICogMy4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpblxuICAgICAqICAgIElFIG9uIFdpbmRvd3MgUGhvbmUgYW5kIGluIGlPUy5cbiAgICAgKi9cblxuICAgIGh0bWwge1xuICAgICAgZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5OyAvKiAxICovXG4gICAgICBAaWYgJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG0ge1xuICAgICAgICAvLyBDb3JyZWN0IG9sZCBicm93c2VyIGJ1ZyB0aGF0IHByZXZlbnRlZCBhY2Nlc3NpYmxlIHJlc2l6aW5nIG9mIHRleHRcbiAgICAgICAgLy8gd2hlbiByb290IGZvbnQtc2l6ZSBpcyBzZXQgd2l0aCBweCBvciBlbS5cbiAgICAgICAgZm9udC1zaXplOiAoJGJhc2UtZm9udC1zaXplIC8gMTZweCkgKiAxMDAlO1xuICAgICAgICBsaW5lLWhlaWdodDogKCRiYXNlLWxpbmUtaGVpZ2h0IC8gJGJhc2UtZm9udC1zaXplKSAqIDFlbTsgLyogMiAqL1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xNTsgLyogMiAqL1xuICAgICAgfVxuICAgICAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDMgKi9cbiAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMyAqL1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUoc2VjdGlvbnMpIHtcbiAgICAvKiBTZWN0aW9uc1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKi9cblxuICAgIGJvZHkge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqL1xuXG4gICAgYXJ0aWNsZSxcbiAgICBhc2lkZSxcbiAgICBmb290ZXIsXG4gICAgaGVhZGVyLFxuICAgIG5hdixcbiAgICBzZWN0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAgICAgKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxuICAgICAqL1xuXG4gICAgaDEge1xuICAgICAgQGluY2x1ZGUgbm9ybWFsaXplLWZvbnQtc2l6ZSgkaDEtZm9udC1zaXplKTtcbiAgICAgIEBpZiAkbm9ybWFsaXplLXZlcnRpY2FsLXJoeXRobSB7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1saW5lLWhlaWdodCgkaDEtZm9udC1zaXplKTtcbiAgICAgIH1cblxuICAgICAgQGlmICRub3JtYWxpemUtdmVydGljYWwtcmh5dGhtIHtcbiAgICAgICAgLyogU2V0IDEgdW5pdCBvZiB2ZXJ0aWNhbCByaHl0aG0gb24gdGhlIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMuICovXG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDEtZm9udC1zaXplKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgbWFyZ2luOiAwLjY3ZW0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG0ge1xuICAgICAgaDIge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtZm9udC1zaXplKCRoMi1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbGluZS1oZWlnaHQoJGgyLWZvbnQtc2l6ZSk7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDItZm9udC1zaXplKTtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtZm9udC1zaXplKCRoMy1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbGluZS1oZWlnaHQoJGgzLWZvbnQtc2l6ZSk7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDMtZm9udC1zaXplKTtcbiAgICAgIH1cblxuICAgICAgaDQge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtZm9udC1zaXplKCRoNC1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbGluZS1oZWlnaHQoJGg0LWZvbnQtc2l6ZSk7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDQtZm9udC1zaXplKTtcbiAgICAgIH1cblxuICAgICAgaDUge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtZm9udC1zaXplKCRoNS1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbGluZS1oZWlnaHQoJGg1LWZvbnQtc2l6ZSk7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDUtZm9udC1zaXplKTtcbiAgICAgIH1cblxuICAgICAgaDYge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtZm9udC1zaXplKCRoNi1mb250LXNpemUpO1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbGluZS1oZWlnaHQoJGg2LWZvbnQtc2l6ZSk7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAwLCAkaDYtZm9udC1zaXplKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgX25vcm1hbGl6ZS1pbmNsdWRlKGdyb3VwaW5nKSB7XG4gICAgLyogR3JvdXBpbmcgY29udGVudFxuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICBAaWYgJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG0ge1xuICAgICAgLyoqXG4gICAgICAgKiBTZXQgMSB1bml0IG9mIHZlcnRpY2FsIHJoeXRobSBvbiB0aGUgdG9wIGFuZCBib3R0b20gbWFyZ2luLlxuICAgICAgICovXG5cbiAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbWFyZ2luKDEgJGluZGVudC1hbW91bnQpO1xuICAgICAgfVxuXG4gICAgICBkbCxcbiAgICAgIG9sLFxuICAgICAgdWwge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbWFyZ2luKDEgMCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVHVybiBvZmYgbWFyZ2lucyBvbiBuZXN0ZWQgbGlzdHMuXG4gICAgICAgKi9cblxuICAgICAgb2wsXG4gICAgICB1bCB7XG4gICAgICAgIG9sLFxuICAgICAgICB1bCB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRkIHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMCAkaW5kZW50LWFtb3VudDtcbiAgICAgIH1cblxuICAgICAgb2wsXG4gICAgICB1bCB7XG4gICAgICAgIHBhZGRpbmc6IDAgMCAwICRpbmRlbnQtYW1vdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqL1xuXG4gICAgZmlnY2FwdGlvbixcbiAgICBmaWd1cmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IG1hcmdpbiBpbiBJRSA4LlxuICAgICAqL1xuXG4gICAgZmlndXJlIHtcbiAgICAgIEBpZiAkbm9ybWFsaXplLXZlcnRpY2FsLXJoeXRobSB7XG4gICAgICAgIEBpbmNsdWRlIG5vcm1hbGl6ZS1tYXJnaW4oMSAkaW5kZW50LWFtb3VudCk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIG1hcmdpbjogMWVtICRpbmRlbnQtYW1vdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gICAgICogMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG4gICAgICovXG5cbiAgICBociB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogMSAqL1xuICAgICAgaGVpZ2h0OiAwOyAvKiAxICovXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLlxuICAgICAqL1xuXG4gICAgbWFpbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICBAaWYgJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG0ge1xuICAgICAgLyoqXG4gICAgICAgKiBTZXQgMSB1bml0IG9mIHZlcnRpY2FsIHJoeXRobSBvbiB0aGUgdG9wIGFuZCBib3R0b20gbWFyZ2luLlxuICAgICAgICovXG5cbiAgICAgIHAsXG4gICAgICBwcmUge1xuICAgICAgICBAaW5jbHVkZSBub3JtYWxpemUtbWFyZ2luKDEgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICovXG5cbiAgICBwcmUge1xuICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG4gICAgICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUobGlua3MpIHtcbiAgICAvKiBMaW5rc1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAvKipcbiAgICAgKiAxLiBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBvbiBhY3RpdmUgbGlua3MgaW4gSUUgMTAuXG4gICAgICogMi4gUmVtb3ZlIGdhcHMgaW4gbGlua3MgdW5kZXJsaW5lIGluIGlPUyA4KyBhbmQgU2FmYXJpIDgrLlxuICAgICAqL1xuXG4gICAgYSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyogMSAqL1xuICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0czsgLyogMiAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgb3V0bGluZSBvbiBmb2N1c2VkIGxpbmtzIHdoZW4gdGhleSBhcmUgYWxzbyBhY3RpdmUgb3IgaG92ZXJlZFxuICAgICAqIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAgICAqL1xuXG4gICAgYTphY3RpdmUsXG4gICAgYTpob3ZlciB7XG4gICAgICBvdXRsaW5lLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUodGV4dCkge1xuICAgIC8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qKlxuICAgICAqIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBGaXJlZm94IDM5LS5cbiAgICAgKiAyLiBBZGQgdGhlIGNvcnJlY3QgdGV4dCBkZWNvcmF0aW9uIGluIENocm9tZSwgRWRnZSwgSUUsIE9wZXJhLCBhbmQgU2FmYXJpLlxuICAgICAqL1xuXG4gICAgYWJiclt0aXRsZV0ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsgLyogMSAqL1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qIDIgKi9cbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdGhlIGR1cGxpY2F0ZSBhcHBsaWNhdGlvbiBvZiBgYm9sZGVyYCBieSB0aGUgbmV4dCBydWxlIGluIFNhZmFyaSA2LlxuICAgICAqL1xuXG4gICAgYixcbiAgICBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cbiAgICAgKi9cblxuICAgIGIsXG4gICAgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAgICAgKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gICAgICovXG5cbiAgICBjb2RlLFxuICAgIGtiZCxcbiAgICBzYW1wIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICAgICAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzdHlsZSBpbiBBbmRyb2lkIDQuMy0uXG4gICAgICovXG5cbiAgICBkZm4ge1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBiYWNrZ3JvdW5kIGFuZCBjb2xvciBpbiBJRSA5LS5cbiAgICAgKi9cblxuICAgIG1hcmsge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMDtcbiAgICAgIGNvbG9yOiAjMDAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuXG4gICAgc21hbGwge1xuICAgICAgZm9udC1zaXplOiA4MCU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gICAgICogYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuXG4gICAgc3ViLFxuICAgIHN1cCB7XG4gICAgICBmb250LXNpemU6IDc1JTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIHN1YiB7XG4gICAgICBib3R0b206IC0wLjI1ZW07XG4gICAgfVxuXG4gICAgc3VwIHtcbiAgICAgIHRvcDogLTAuNWVtO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUoZW1iZWRkZWQpIHtcbiAgICAvKiBFbWJlZGRlZCBjb250ZW50XG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqL1xuXG4gICAgYXVkaW8sXG4gICAgdmlkZW8ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gICAgICovXG5cbiAgICBhdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIGhlaWdodDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLS5cbiAgICAgKi9cblxuICAgIGltZyB7XG4gICAgICBib3JkZXItc3R5bGU6IG5vbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gICAgICovXG5cbiAgICBzdmc6bm90KDpyb290KSB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUoZm9ybXMpIHtcbiAgICAvKiBGb3Jtc1xuICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgICAvKipcbiAgICAgKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAgICAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cbiAgICAgKi9cblxuICAgIGJ1dHRvbixcbiAgICBpbnB1dCxcbiAgICBvcHRncm91cCxcbiAgICBzZWxlY3QsXG4gICAgdGV4dGFyZWEge1xuICAgICAgZm9udC1mYW1pbHk6ICRiYXNlLWZvbnQtZmFtaWx5OyAvKiAxICovXG4gICAgICBmb250LXNpemU6IDEwMCU7IC8qIDEgKi9cbiAgICAgIEBpZiAkbm9ybWFsaXplLXZlcnRpY2FsLXJoeXRobSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAoJGJhc2UtbGluZS1oZWlnaHQgLyAkYmFzZS1mb250LXNpemUpICogMWVtOyAvKiAxICovXG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gICAgICB9XG4gICAgICBtYXJnaW46IDA7IC8qIDIgKi9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAgICAgKi9cblxuICAgIGJ1dHRvbiB7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS5cbiAgICAgKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gICAgICovXG5cbiAgICBidXR0b24sXG4gICAgc2VsZWN0IHsgLyogMSAqL1xuICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMS4gUHJldmVudCBhIFdlYktpdCBidWcgd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gXG4gICAgICogICAgY29udHJvbHMgaW4gQW5kcm9pZCA0LlxuICAgICAqIDIuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gICAgICovXG5cbiAgICBidXR0b24sXG4gICAgaHRtbCBbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuICAgIFt0eXBlPVwicmVzZXRcIl0sXG4gICAgW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi9cbiAgICB9XG5cbiAgICBidXR0b24sXG4gICAgW3R5cGU9XCJidXR0b25cIl0sXG4gICAgW3R5cGU9XCJyZXNldFwiXSxcbiAgICBbdHlwZT1cInN1Ym1pdFwiXSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAgICAgICAqL1xuXG4gICAgICAmOjotbW96LWZvY3VzLWlubmVyIHtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAgICAgICAqL1xuXG4gICAgICAmOi1tb3otZm9jdXNyaW5nIHtcbiAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZCBCdXR0b25UZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UuXG4gICAgICovXG5cbiAgICBpbnB1dCB7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC0uXG4gICAgICogMi4gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIElFIDEwLS5cbiAgICAgKi9cblxuICAgIFt0eXBlPVwiY2hlY2tib3hcIl0sXG4gICAgW3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gICAgICBwYWRkaW5nOiAwOyAvKiAyICovXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICAgICAqL1xuXG4gICAgW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxuICAgICAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICAgICAqL1xuXG4gICAgW3R5cGU9XCJzZWFyY2hcIl0ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG5cbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGFuZCBjYW5jZWwgYnV0dG9ucyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAgICAgICAqL1xuXG4gICAgICAmOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuICAgICAgJjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICAgICAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAgICAgKi9cblxuICAgIDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgICAgIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgICAgKi9cblxuICAgIGZpZWxkc2V0IHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXG4gICAgICogMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICAgICAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAgICAgKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cbiAgICAgKi9cblxuICAgIGxlZ2VuZCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gICAgICBkaXNwbGF5OiB0YWJsZTsgLyogMSAqL1xuICAgICAgbWF4LXdpZHRoOiAxMDAlOyAvKiAxICovXG4gICAgICBwYWRkaW5nOiAwOyAvKiAzICovXG4gICAgICBjb2xvcjogaW5oZXJpdDsgLyogMiAqL1xuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLyogMSAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqIDIuIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gICAgICovXG5cbiAgICBwcm9ncmVzcyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUuXG4gICAgICovXG5cbiAgICB0ZXh0YXJlYSB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG4gIH1cblxuICBAaWYgX25vcm1hbGl6ZS1pbmNsdWRlKGludGVyYWN0aXZlKSB7XG4gICAgLyogSW50ZXJhY3RpdmVcbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gICAgLypcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSwgYW5kIEZpcmVmb3guXG4gICAgICovXG5cbiAgICBkZXRhaWxzIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICAgICAqL1xuXG4gICAgc3VtbWFyeSB7XG4gICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAgICAgKi9cblxuICAgIG1lbnUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgIEBpZiAkbm9ybWFsaXplLXZlcnRpY2FsLXJoeXRobSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIDEuIFNldCAxIHVuaXQgb2YgdmVydGljYWwgcmh5dGhtIG9uIHRoZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW4uXG4gICAgICAgICAqIDIuIFNldCBjb25zaXN0ZW50IHNwYWNlIGZvciB0aGUgbGlzdCBzdHlsZSBpbWFnZS5cbiAgICAgICAgICovXG5cbiAgICAgICAgQGluY2x1ZGUgbm9ybWFsaXplLW1hcmdpbigxIDApOyAvKiAxICovXG4gICAgICAgIHBhZGRpbmc6IDAgMCAwICRpbmRlbnQtYW1vdW50OyAvKiAyICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFR1cm4gb2ZmIG1hcmdpbnMgb24gbmVzdGVkIGxpc3RzLlxuICAgICAgICAgKi9cblxuICAgICAgICBtZW51ICYsXG4gICAgICAgIG9sICYsXG4gICAgICAgIHVsICYge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiBfbm9ybWFsaXplLWluY2x1ZGUoc2NyaXB0aW5nKSB7XG4gICAgLyogU2NyaXB0aW5nXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLlxuICAgICAqL1xuXG4gICAgY2FudmFzIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAgICAgKi9cblxuICAgIHRlbXBsYXRlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgQGlmIF9ub3JtYWxpemUtaW5jbHVkZShoaWRkZW4pIHtcbiAgICAvKiBIaWRkZW5cbiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAtLlxuICAgICAqL1xuXG4gICAgW2hpZGRlbl0ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBWYXJpYWJsZXNcbi8vXG4vLyBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlcyBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZXMgaW4geW91ciBTYXNzXG4vLyBiZWZvcmUgaW1wb3J0aW5nIHRoZSBub3JtYWxpemUtc2NzcyBsaWJyYXJ5LlxuXG4vLyBUaGUgZm9udCBzaXplIHNldCBvbiB0aGUgcm9vdCBodG1sIGVsZW1lbnQuXG4kYmFzZS1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XG5cbi8vIFRoZSBiYXNlIGxpbmUgaGVpZ2h0IGRldGVybWluZXMgdGhlIGJhc2ljIHVuaXQgb2YgdmVydGljYWwgcmh5dGhtLlxuJGJhc2UtbGluZS1oZWlnaHQ6IDI0cHggIWRlZmF1bHQ7XG5cbi8vIFRoZSBsZW5ndGggdW5pdCBpbiB3aGljaCB0byBvdXRwdXQgdmVydGljYWwgcmh5dGhtIHZhbHVlcy5cbi8vIFN1cHBvcnRlZCB2YWx1ZXM6IHB4LCBlbSwgcmVtLlxuJGJhc2UtdW5pdDogJ2VtJyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZm9udCBmYW1pbHkuXG4kYmFzZS1mb250LWZhbWlseTogc2Fucy1zZXJpZiAhZGVmYXVsdDtcblxuLy8gVGhlIGZvbnQgc2l6ZXMgZm9yIGgxLWg2LlxuJGgxLWZvbnQtc2l6ZTogMiAgICAqICRiYXNlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRoMi1mb250LXNpemU6IDEuNSAgKiAkYmFzZS1mb250LXNpemUgIWRlZmF1bHQ7XG4kaDMtZm9udC1zaXplOiAxLjE3ICogJGJhc2UtZm9udC1zaXplICFkZWZhdWx0O1xuJGg0LWZvbnQtc2l6ZTogMSAgICAqICRiYXNlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRoNS1mb250LXNpemU6IDAuODMgKiAkYmFzZS1mb250LXNpemUgIWRlZmF1bHQ7XG4kaDYtZm9udC1zaXplOiAwLjY3ICogJGJhc2UtZm9udC1zaXplICFkZWZhdWx0O1xuXG4vLyBUaGUgYW1vdW50IGxpc3RzIGFuZCBibG9ja3F1b3RlcyBhcmUgaW5kZW50ZWQuXG4kaW5kZW50LWFtb3VudDogNDBweCAhZGVmYXVsdDtcblxuLy8gVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBjb250cm9scyB3aGV0aGVyIG5vcm1hbGl6ZS1zY3NzIHdpbGwgb3V0cHV0XG4vLyBmb250LXNpemVzLCBsaW5lLWhlaWdodHMgYW5kIGJsb2NrLWxldmVsIHRvcC9ib3R0b20gbWFyZ2lucyB0aGF0IGZvcm0gYSBiYXNpY1xuLy8gdmVydGljYWwgcmh5dGhtIG9uIHRoZSBwYWdlLCB3aGljaCBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmFsIE5vcm1hbGl6ZS5jc3MuXG4vLyBIb3dldmVyLCBjaGFuZ2luZyBhbnkgb2YgdGhlIHZhcmlhYmxlcyBhYm92ZSB3aWxsIGNhdXNlXG4vLyAkbm9ybWFsaXplLXZlcnRpY2FsLXJoeXRobSB0byBiZSBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlLlxuJG5vcm1hbGl6ZS12ZXJ0aWNhbC1yaHl0aG06IGZhbHNlICFkZWZhdWx0O1xuIiwiLy9cbi8vIFZlcnRpY2FsIFJoeXRobVxuLy9cbi8vIFRoaXMgaXMgdGhlIG1pbmltYWwgYW1vdW50IG9mIGNvZGUgbmVlZGVkIHRvIGNyZWF0ZSB2ZXJ0aWNhbCByaHl0aG0gaW4gb3VyXG4vLyBDU1MuIElmIHlvdSBhcmUgbG9va2luZyBmb3IgYSByb2J1c3Qgc29sdXRpb24sIGxvb2sgYXQgdGhlIGV4Y2VsbGVudCBUeXBleVxuLy8gbGlicmFyeS4gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vanB0YXJhbnRvL3R5cGV5XG5cbkBmdW5jdGlvbiBub3JtYWxpemUtcmh5dGhtKCR2YWx1ZSwgJHJlbGF0aXZlLXRvOiAkYmFzZS1mb250LXNpemUsICR1bml0OiAkYmFzZS11bml0KSB7XG4gIEBpZiB1bml0KCR2YWx1ZSkgIT0gcHgge1xuICAgIEBlcnJvciBcIlRoZSBub3JtYWxpemUgdmVydGljYWwtcmh5dGhtIG1vZHVsZSBvbmx5IHN1cHBvcnRzIHB4IGlucHV0cy4gVGhlIHR5cGV5IGxpYnJhcnkgaXMgYmV0dGVyLlwiO1xuICB9XG4gIEBpZiAkdW5pdCA9PSByZW0ge1xuICAgIEByZXR1cm4gKCR2YWx1ZSAvICRiYXNlLWZvbnQtc2l6ZSkgKiAxcmVtO1xuICB9XG4gIEBlbHNlIGlmICR1bml0ID09IGVtIHtcbiAgICBAcmV0dXJuICgkdmFsdWUgLyAkcmVsYXRpdmUtdG8pICogMWVtO1xuICB9XG4gIEBlbHNlIHsgLy8gJHVuaXQgPT0gcHhcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxufVxuXG5AbWl4aW4gbm9ybWFsaXplLWZvbnQtc2l6ZSgkdmFsdWUsICRyZWxhdGl2ZS10bzogJGJhc2UtZm9udC1zaXplKSB7XG4gIEBpZiB1bml0KCR2YWx1ZSkgIT0gJ3B4JyB7XG4gICAgQGVycm9yIFwibm9ybWFsaXplLWZvbnQtc2l6ZSgpIG9ubHkgc3VwcG9ydHMgcHggaW5wdXRzLiBUaGUgdHlwZXkgbGlicmFyeSBpcyBiZXR0ZXIuXCI7XG4gIH1cbiAgZm9udC1zaXplOiBub3JtYWxpemUtcmh5dGhtKCR2YWx1ZSwgJHJlbGF0aXZlLXRvKTtcbn1cblxuQG1peGluIG5vcm1hbGl6ZS1yaHl0aG0oJHByb3BlcnR5LCAkdmFsdWVzLCAkcmVsYXRpdmUtdG86ICRiYXNlLWZvbnQtc2l6ZSkge1xuICAkdmFsdWUtbGlzdDogJHZhbHVlcztcbiAgJHNlcDogc3BhY2U7XG4gIEBpZiB0eXBlLW9mKCR2YWx1ZXMpID09ICdsaXN0JyB7XG4gICAgJHNlcDogbGlzdC1zZXBhcmF0b3IoJHZhbHVlcyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgICR2YWx1ZS1saXN0OiBhcHBlbmQoKCksICR2YWx1ZXMpO1xuICB9XG5cbiAgJG5vcm1hbGl6ZWQtdmFsdWVzOiAoKTtcbiAgQGVhY2ggJHZhbHVlIGluICR2YWx1ZS1saXN0IHtcbiAgICBAaWYgdW5pdGxlc3MoJHZhbHVlKSBhbmQgJHZhbHVlICE9IDAge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiBub3JtYWxpemUtcmh5dGhtKCRiYXNlLWxpbmUtaGVpZ2h0LCAkcmVsYXRpdmUtdG8pO1xuICAgIH1cbiAgICAkbm9ybWFsaXplZC12YWx1ZXM6IGFwcGVuZCgkbm9ybWFsaXplZC12YWx1ZXMsICR2YWx1ZSwgJHNlcCk7XG4gIH1cbiAgI3skcHJvcGVydHl9OiAkbm9ybWFsaXplZC12YWx1ZXM7XG59XG5cbkBtaXhpbiBub3JtYWxpemUtbWFyZ2luKCR2YWx1ZXMsICRyZWxhdGl2ZS10bzogJGJhc2UtZm9udC1zaXplKSB7XG4gIEBpbmNsdWRlIG5vcm1hbGl6ZS1yaHl0aG0obWFyZ2luLCAkdmFsdWVzLCAkcmVsYXRpdmUtdG8pO1xufVxuXG5AbWl4aW4gbm9ybWFsaXplLWxpbmUtaGVpZ2h0KCRmb250LXNpemUsICRtaW4tbGluZS1wYWRkaW5nOiAycHgpIHtcbiAgJGxpbmVzOiBjZWlsKCRmb250LXNpemUgLyAkYmFzZS1saW5lLWhlaWdodCk7XG4gIC8vIElmIGxpbmVzIGFyZSBjcmFtcGVkIGluY2x1ZGUgc29tZSBleHRyYSBsZWFkaW5nLlxuICBAaWYgKCRsaW5lcyAqICRiYXNlLWxpbmUtaGVpZ2h0IC0gJGZvbnQtc2l6ZSkgPCAoJG1pbi1saW5lLXBhZGRpbmcgKiAyKSB7XG4gICAgJGxpbmVzOiAkbGluZXMgKyAxO1xuICB9XG4gIEBpbmNsdWRlIG5vcm1hbGl6ZS1yaHl0aG0obGluZS1oZWlnaHQsICRsaW5lcywgJGZvbnQtc2l6ZSk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgZm9yY2UtYXR0cmlidXRlLW5lc3RpbmcsIGZvcmNlLXBzZXVkby1uZXN0aW5nLCBuby1jb2xvci1saXRlcmFscywgbm8tcXVhbGlmeWluZy1lbGVtZW50c1xuXG4vLy8vXG4vLy8gQGdyb3VwIGdsb2JhbFxuLy8vL1xuXG4vLy8gRm9udCBzaXplIGF0dHJpYnV0ZSBhcHBsaWVkIHRvIGA8aHRtbD5gIGFuZCBgPGJvZHk+YC4gV2UgdXNlIDEwMCUgYnkgZGVmYXVsdCBzbyB0aGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHVzZXIncyBicm93c2VyIHNldHRpbmdzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1mb250LXNpemU6IDEwMCUgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgd2lkdGggb2YgeW91ciBzaXRlLiBVc2VkIGJ5IHRoZSBncmlkIHRvIGRldGVybWluZSByb3cgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbGluZSBoZWlnaHQgZm9yIGFsbCB0eXBlLiBgJGdsb2JhbC1saW5laGVpZ2h0YCBpcyAyNHB4IHdoaWxlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgaXMgMTZweFxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1saW5laGVpZ2h0OiAxLjUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcnMgdXNlZCBmb3IgYnV0dG9ucywgY2FsbG91dHMsIGxpbmtzLCBldGMuIFRoZXJlIG11c3QgYWx3YXlzIGJlIGEgY29sb3IgY2FsbGVkIGBwcmltYXJ5YC5cbi8vLyBAdHlwZSBNYXBcbiRmb3VuZGF0aW9uLXBhbGV0dGU6IChcbiAgcHJpbWFyeTogIzE3NzliYSxcbiAgc2Vjb25kYXJ5OiAjNzY3Njc2LFxuICBzdWNjZXNzOiAjM2FkYjc2LFxuICB3YXJuaW5nOiAjZmZhZTAwLFxuICBhbGVydDogI2NjNGIzNyxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBsaWdodCBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kbGlnaHQtZ3JheTogI2U2ZTZlNiAhZGVmYXVsdDtcblxuLy8vIENvbG9yIHVzZWQgZm9yIG1lZGl1bSBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVkaXVtLWdyYXk6ICNjYWNhY2EgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBkYXJrIGdyYXkgVUkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkYXJrLWdyYXk6ICM4YThhOGEgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBibGFjayB1aSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJsYWNrOiAjMGEwYTBhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3Igd2hpdGUgdWkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiR3aGl0ZTogI2ZlZmVmZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJvZHkuXG4vLy8gQHR5cGUgQ29sb3JcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgdGhlIGJvZHkuXG4vLy8gQHR5cGUgQ29sb3JcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc3RhY2sgb2YgdGhlIGJvZHkuXG4vLy8gQHR5cGUgTGlzdFxuJGJvZHktZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcblxuLy8vIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIGFudGlhbGlhc2VkIHR5cGUsIHVzaW5nIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgYW5kIGAtbW96LW9zeC1mb250LXNtb290aGluZ2AgQ1NTIHByb3BlcnRpZXMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGJvZHktYW50aWFsaWFzZWQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgbWFyZ2luIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLW1hcmdpbjogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEdsb2JhbCB2YWx1ZSB1c2VkIGZvciBwYWRkaW5nIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgZm9udCB3ZWlnaHQgdXNlZCBmb3Igbm9ybWFsIHR5cGUuXG4vLy8gQHR5cGUgS2V5d29yZCB8IE51bWJlclxuJGdsb2JhbC13ZWlnaHQtbm9ybWFsOiBub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgZm9udCB3ZWlnaHQgdXNlZCBmb3IgYm9sZCB0eXBlLlxuLy8vIEB0eXBlIEtleXdvcmQgfCBOdW1iZXJcbiRnbG9iYWwtd2VpZ2h0LWJvbGQ6IGJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXJhZGl1czogMCAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBDU1MuIENhbiBiZSBlaXRoZXIgYGx0cmAgb3IgYHJ0bGAuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGdsb2JhbC10ZXh0LWRpcmVjdGlvbjogbHRyICFkZWZhdWx0O1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGZvciBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCBpdC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZ2xvYmFsLWZsZXhib3g6IGZhbHNlICFkZWZhdWx0O1xuXG5AaWYgbm90IG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpIHtcbiAgQGVycm9yICdJbiAkZm91bmRhdGlvbi1wYWxldHRlLCB5b3UgbXVzdCBoYXZlIGEgY29sb3IgbmFtZWQgXCJwcmltYXJ5XCIuJztcbn1cblxuLy8gSW50ZXJuYWwgdmFyaWFibGVzIHVzZWQgZm9yIHRleHQgZGlyZWN0aW9uXG4kZ2xvYmFsLWxlZnQ6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCByaWdodCwgbGVmdCk7XG4kZ2xvYmFsLXJpZ2h0OiBpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IHJ0bCwgbGVmdCwgcmlnaHQpO1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgY29sb3JzXG4kcHJpbWFyeS1jb2xvcjogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJHNlY29uZGFyeS1jb2xvcjogZ2V0LWNvbG9yKHNlY29uZGFyeSk7XG4kc3VjY2Vzcy1jb2xvcjogZ2V0LWNvbG9yKHN1Y2Nlc3MpO1xuJHdhcm5pbmctY29sb3I6IGdldC1jb2xvcih3YXJuaW5nKTtcbiRhbGVydC1jb2xvcjogZ2V0LWNvbG9yKGFsZXJ0KTtcblxuQG1peGluIGZvdW5kYXRpb24tZ2xvYmFsLXN0eWxlcyB7XG4gIEBpbmNsdWRlIC16Zi1ub3JtYWxpemU7XG5cbiAgLy8gVGhlc2Ugc3R5bGVzIGFyZSBhcHBsaWVkIHRvIGEgPG1ldGE+IHRhZywgd2hpY2ggaXMgcmVhZCBieSB0aGUgRm91bmRhdGlvbiBKYXZhU2NyaXB0XG4gIC5mb3VuZGF0aW9uLW1xIHtcbiAgICBmb250LWZhbWlseTogJyN7LXpmLWJwLXNlcmlhbGl6ZSgkYnJlYWtwb2ludHMpfSc7XG4gIH1cblxuICBodG1sIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGZvbnQtc2l6ZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBTZXQgYm94LXNpemluZyBnbG9iYWxseSB0byBoYW5kbGUgcGFkZGluZyBhbmQgYm9yZGVyIHdpZHRoc1xuICAqLFxuICAqOjpiZWZvcmUsXG4gICo6OmFmdGVyIHtcbiAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICB9XG5cbiAgLy8gRGVmYXVsdCBib2R5IHN0eWxlc1xuICBib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcblxuICAgIGJhY2tncm91bmQ6ICRib2R5LWJhY2tncm91bmQ7XG5cbiAgICBmb250LWZhbWlseTogJGJvZHktZm9udC1mYW1pbHk7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogJGdsb2JhbC1saW5laGVpZ2h0O1xuICAgIGNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuXG4gICAgQGlmICgkYm9keS1hbnRpYWxpYXNlZCkge1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgLy8gR2V0IHJpZCBvZiBnYXAgdW5kZXIgaW1hZ2VzIGJ5IG1ha2luZyB0aGVtIGRpc3BsYXk6IGlubGluZS1ibG9jazsgYnkgZGVmYXVsdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgLy8gR3JpZCBkZWZhdWx0cyB0byBnZXQgaW1hZ2VzIGFuZCBlbWJlZHMgdG8gd29yayBwcm9wZXJseVxuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYztcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSB0YWtlcyBvbiBoZWlnaHQgYXV0b21hdGljYWxseVxuICB0ZXh0YXJlYSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1pbi1oZWlnaHQ6IDUwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gIH1cblxuICAvLyBNYWtlIHNlbGVjdCBlbGVtZW50cyBhcmUgMTAwJSB3aWR0aCBieSBkZWZhdWx0XG4gIHNlbGVjdCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgfVxuXG4gIC8vIFN0eWxlcyBHb29nbGUgTWFwcyBhbmQgTWFwUXVlc3QgZW1iZWRzIHByb3Blcmx5XG4gIC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8taWRzXG4gIC5tYXBfY2FudmFzLFxuICAubXFhLWRpc3BsYXkge1xuICAgIGltZyxcbiAgICBlbWJlZCxcbiAgICBvYmplY3Qge1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgPGJ1dHRvbj4gc3R5bGVzIGNyZWF0ZWQgYnkgbW9zdCBicm93c2Vyc1xuICBidXR0b24ge1xuICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcblxuICAgIHBhZGRpbmc6IDA7XG5cbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblxuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG5cbiAgLy8gUHJldmVudCB0ZXh0IG92ZXJmbG93IG9uIHByZVxuICBwcmUge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgY2xhc3NlcyB0byBzaG93L2hpZGUgZWxlbWVudHMgaW4gSmF2YVNjcmlwdFxuICAuaXMtdmlzaWJsZSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5pcy1oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLy8gTG9hZHMgbm9ybWFsaXplLmNzcy5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbkBtaXhpbiAtemYtbm9ybWFsaXplIHtcbiAgQGluY2x1ZGUgbm9ybWFsaXplKCk7XG59XG4iLCIvLyAgRm91bmRhdGlvbiBmb3IgU2l0ZXMgU2V0dGluZ3Ncbi8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9cbi8vICBUYWJsZSBvZiBDb250ZW50czpcbi8vXG4vLyAgIDEuIEdsb2JhbFxuLy8gICAyLiBCcmVha3BvaW50c1xuLy8gICAzLiBUaGUgR3JpZFxuLy8gICA0LiBCYXNlIFR5cG9ncmFwaHlcbi8vICAgNS4gVHlwb2dyYXBoeSBIZWxwZXJzXG4vLyAgIDYuIEFiaWRlXG4vLyAgIDcuIEFjY29yZGlvblxuLy8gICA4LiBBY2NvcmRpb24gTWVudVxuLy8gICA5LiBCYWRnZVxuLy8gIDEwLiBCcmVhZGNydW1ic1xuLy8gIDExLiBCdXR0b25cbi8vICAxMi4gQnV0dG9uIEdyb3VwXG4vLyAgMTMuIENhbGxvdXRcbi8vICAxNC4gQ2FyZFxuLy8gIDE1LiBDbG9zZSBCdXR0b25cbi8vICAxNi4gRHJpbGxkb3duXG4vLyAgMTcuIERyb3Bkb3duXG4vLyAgMTguIERyb3Bkb3duIE1lbnVcbi8vICAxOS4gRm9ybXNcbi8vICAyMC4gTGFiZWxcbi8vICAyMS4gTWVkaWEgT2JqZWN0XG4vLyAgMjIuIE1lbnVcbi8vICAyMy4gTWV0ZXJcbi8vICAyNC4gT2ZmLWNhbnZhc1xuLy8gIDI1LiBPcmJpdFxuLy8gIDI2LiBQYWdpbmF0aW9uXG4vLyAgMjcuIFByb2dyZXNzIEJhclxuLy8gIDI4LiBSZXNwb25zaXZlIEVtYmVkXG4vLyAgMjkuIFJldmVhbFxuLy8gIDMwLiBTbGlkZXJcbi8vICAzMS4gU3dpdGNoXG4vLyAgMzIuIFRhYmxlXG4vLyAgMzMuIFRhYnNcbi8vICAzNC4gVGh1bWJuYWlsXG4vLyAgMzUuIFRpdGxlIEJhclxuLy8gIDM2LiBUb29sdGlwXG4vLyAgMzcuIFRvcCBCYXJcblxuQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8gMS4gR2xvYmFsXG4vLyAtLS0tLS0tLS1cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCU7XG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKTtcbiRnbG9iYWwtbGluZWhlaWdodDogMS41O1xuJGZvdW5kYXRpb24tcGFsZXR0ZTogKFxuICBwcmltYXJ5OiAjMTc3OWJhLFxuICBzZWNvbmRhcnk6ICM3Njc2NzYsXG4gIHN1Y2Nlc3M6ICMzYWRiNzYsXG4gIHdhcm5pbmc6ICNmZmFlMDAsXG4gIGFsZXJ0OiAjY2M0YjM3LFxuKTtcbiRsaWdodC1ncmF5OiAjZTZlNmU2O1xuJG1lZGl1bS1ncmF5OiAjY2FjYWNhO1xuJGRhcmstZ3JheTogIzhhOGE4YTtcbiRibGFjazogIzBhMGEwYTtcbiR3aGl0ZTogI2ZlZmVmZTtcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjaztcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4kYm9keS1hbnRpYWxpYXNlZDogdHJ1ZTtcbiRnbG9iYWwtbWFyZ2luOiAxcmVtO1xuJGdsb2JhbC1wYWRkaW5nOiAxcmVtO1xuJGdsb2JhbC13ZWlnaHQtbm9ybWFsOiBub3JtYWw7XG4kZ2xvYmFsLXdlaWdodC1ib2xkOiBib2xkO1xuJGdsb2JhbC1yYWRpdXM6IDA7XG4kZ2xvYmFsLXRleHQtZGlyZWN0aW9uOiBsdHI7XG4kZ2xvYmFsLWZsZXhib3g6IGZhbHNlO1xuJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzOiB0cnVlO1xuXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG5cbi8vIDIuIEJyZWFrcG9pbnRzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWtwb2ludHM6IChcbiAgc21hbGw6IDAsXG4gIG1lZGl1bTogNjQwcHgsXG4gIGxhcmdlOiAxMDI0cHgsXG4gIHhsYXJnZTogMTIwMHB4LFxuICB4eGxhcmdlOiAxNDQwcHgsXG4pO1xuJHByaW50LWJyZWFrcG9pbnQ6IGxhcmdlO1xuJGJyZWFrcG9pbnQtY2xhc3NlczogKHNtYWxsIG1lZGl1bSBsYXJnZSk7XG5cbi8vIDMuIFRoZSBHcmlkXG4vLyAtLS0tLS0tLS0tLVxuXG4kZ3JpZC1yb3ctd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW4tY291bnQ6IDEyO1xuJGdyaWQtY29sdW1uLWd1dHRlcjogKFxuICBzbWFsbDogMjBweCxcbiAgbWVkaXVtOiAzMHB4LFxuKTtcbiRncmlkLWNvbHVtbi1hbGlnbi1lZGdlOiB0cnVlO1xuJGJsb2NrLWdyaWQtbWF4OiA4O1xuXG4vLyA0LiBCYXNlIFR5cG9ncmFwaHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kaGVhZGVyLWZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiRoZWFkZXItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbDtcbiRoZWFkZXItZm9udC1zdHlsZTogbm9ybWFsO1xuJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4kaGVhZGVyLWNvbG9yOiBpbmhlcml0O1xuJGhlYWRlci1saW5laGVpZ2h0OiAxLjQ7XG4kaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiRoZWFkZXItc3R5bGVzOiAoXG4gIHNtYWxsOiAoXG4gICAgJ2gxJzogKCdmb250LXNpemUnOiAyNCksXG4gICAgJ2gyJzogKCdmb250LXNpemUnOiAyMCksXG4gICAgJ2gzJzogKCdmb250LXNpemUnOiAxOSksXG4gICAgJ2g0JzogKCdmb250LXNpemUnOiAxOCksXG4gICAgJ2g1JzogKCdmb250LXNpemUnOiAxNyksXG4gICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogNDgpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogNDApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMzEpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMjUpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuKTtcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiRzbWFsbC1mb250LXNpemU6IDgwJTtcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5O1xuJHBhcmFncmFwaC1saW5laGVpZ2h0OiAxLjY7XG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206IDFyZW07XG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4kY29kZS1jb2xvcjogJGJsYWNrO1xuJGNvZGUtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2U7XG4kY29kZS1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGNvZGUtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4kY29kZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kY29kZS1wYWRkaW5nOiByZW0tY2FsYygyIDUgMSk7XG4kYW5jaG9yLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhbmNob3ItY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRhbmNob3ItY29sb3IsICRsaWdodG5lc3M6IC0xNCUpO1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb246IG5vbmU7XG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3Zlcjogbm9uZTtcbiRoci13aWR0aDogJGdsb2JhbC13aWR0aDtcbiRoci1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaHItbWFyZ2luOiByZW0tY2FsYygyMCkgYXV0bztcbiRsaXN0LWxpbmVoZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiRsaXN0LW1hcmdpbi1ib3R0b206ICRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTtcbiRsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG4kbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTtcbiRsaXN0LXNpZGUtbWFyZ2luOiAxLjI1cmVtO1xuJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luOiAxLjI1cmVtO1xuJGRlZm5saXN0LW1hcmdpbi1ib3R0b206IDFyZW07XG4kZGVmbmxpc3QtdGVybS13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4kZGVmbmxpc3QtdGVybS1tYXJnaW4tYm90dG9tOiAwLjNyZW07XG4kYmxvY2txdW90ZS1jb2xvcjogJGRhcmstZ3JheTtcbiRibG9ja3F1b3RlLXBhZGRpbmc6IHJlbS1jYWxjKDkgMjAgMCAxOSk7XG4kYmxvY2txdW90ZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kY2l0ZS1mb250LXNpemU6IHJlbS1jYWxjKDEzKTtcbiRjaXRlLWNvbG9yOiAkZGFyay1ncmF5O1xuJGNpdGUtcHNldWRvLWNvbnRlbnQ6ICdcXDIwMTQgXFwwMDIwJztcbiRrZXlzdHJva2UtZm9udDogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiRrZXlzdHJva2UtY29sb3I6ICRibGFjaztcbiRrZXlzdHJva2UtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4ka2V5c3Ryb2tlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNCAwKTtcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2s7XG5cbi8vIDUuIFR5cG9ncmFwaHkgSGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRsZWFkLWZvbnQtc2l6ZTogJGdsb2JhbC1mb250LXNpemUgKiAxLjI1O1xuJGxlYWQtbGluZWhlaWdodDogMS42O1xuJHN1YmhlYWRlci1saW5laGVpZ2h0OiAxLjQ7XG4kc3ViaGVhZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xuJHN1YmhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJHN1YmhlYWRlci1tYXJnaW4tdG9wOiAwLjJyZW07XG4kc3ViaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiRzdGF0LWZvbnQtc2l6ZTogMi41cmVtO1xuXG4vLyA2LiBBYmlkZVxuLy8gLS0tLS0tLS1cblxuJGFiaWRlLWlucHV0czogdHJ1ZTtcbiRhYmlkZS1sYWJlbHM6IHRydWU7XG4kaW5wdXQtYmFja2dyb3VuZC1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpO1xuJGZvcm0tbGFiZWwtY29sb3ItaW52YWxpZDogZ2V0LWNvbG9yKGFsZXJ0KTtcbiRpbnB1dC1lcnJvci1jb2xvcjogZ2V0LWNvbG9yKGFsZXJ0KTtcbiRpbnB1dC1lcnJvci1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiRpbnB1dC1lcnJvci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcblxuLy8gNy4gQWNjb3JkaW9uXG4vLyAtLS0tLS0tLS0tLS1cblxuJGFjY29yZGlvbi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kYWNjb3JkaW9uLXBsdXNtaW51czogdHJ1ZTtcbiRhY2NvcmRpb24tdGl0bGUtZm9udC1zaXplOiByZW0tY2FsYygxMik7XG4kYWNjb3JkaW9uLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGFjY29yZGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5O1xuJGFjY29yZGlvbi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMXJlbTtcbiRhY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyOiAxcHggc29saWQgJGxpZ2h0LWdyYXk7XG4kYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kYWNjb3JkaW9uLWNvbnRlbnQtcGFkZGluZzogMXJlbTtcblxuLy8gOC4gQWNjb3JkaW9uIE1lbnVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiRhY2NvcmRpb25tZW51LWFycm93czogdHJ1ZTtcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhY2NvcmRpb25tZW51LWFycm93LXNpemU6IDZweDtcblxuLy8gOS4gQmFkZ2Vcbi8vIC0tLS0tLS0tXG5cbiRiYWRnZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRiYWRnZS1jb2xvcjogJHdoaXRlO1xuJGJhZGdlLWNvbG9yLWFsdDogJGJsYWNrO1xuJGJhZGdlLXBhbGV0dGU6ICRmb3VuZGF0aW9uLXBhbGV0dGU7XG4kYmFkZ2UtcGFkZGluZzogMC4zZW07XG4kYmFkZ2UtbWlud2lkdGg6IDIuMWVtO1xuJGJhZGdlLWZvbnQtc2l6ZTogMC42cmVtO1xuXG4vLyAxMC4gQnJlYWRjcnVtYnNcbi8vIC0tLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWRjcnVtYnMtbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTEpO1xuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3ItY3VycmVudDogJGJsYWNrO1xuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3ItZGlzYWJsZWQ6ICRtZWRpdW0tZ3JheTtcbiRicmVhZGNydW1icy1pdGVtLW1hcmdpbjogMC43NXJlbTtcbiRicmVhZGNydW1icy1pdGVtLXVwcGVyY2FzZTogdHJ1ZTtcbiRicmVhZGNydW1icy1pdGVtLXNsYXNoOiB0cnVlO1xuXG4vLyAxMS4gQnV0dG9uXG4vLyAtLS0tLS0tLS0tXG5cbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbTtcbiRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRidXR0b24tZmlsbDogc29saWQ7XG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpO1xuJGJ1dHRvbi1jb2xvcjogJHdoaXRlO1xuJGJ1dHRvbi1jb2xvci1hbHQ6ICRibGFjaztcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRidXR0b24tc2l6ZXM6IChcbiAgdGlueTogMC42cmVtLFxuICBzbWFsbDogMC43NXJlbSxcbiAgZGVmYXVsdDogMC45cmVtLFxuICBsYXJnZTogMS4yNXJlbSxcbik7XG4kYnV0dG9uLXBhbGV0dGU6ICRmb3VuZGF0aW9uLXBhbGV0dGU7XG4kYnV0dG9uLW9wYWNpdHktZGlzYWJsZWQ6IDAuMjU7XG4kYnV0dG9uLWJhY2tncm91bmQtaG92ZXItbGlnaHRuZXNzOiAtMjAlO1xuJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzOiAtNTAlO1xuJGJ1dHRvbi10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzIGVhc2Utb3V0LCBjb2xvciAwLjI1cyBlYXNlLW91dDtcblxuLy8gMTIuIEJ1dHRvbiBHcm91cFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kYnV0dG9uZ3JvdXAtbWFyZ2luOiAxcmVtO1xuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweDtcbiRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcjogJy5idXR0b24nO1xuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDY7XG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWU7XG5cbi8vIDEzLiBDYWxsb3V0XG4vLyAtLS0tLS0tLS0tLVxuXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JTtcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KTtcbiRjYWxsb3V0LW1hcmdpbjogMCAwIDFyZW0gMDtcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW07XG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhbGxvdXQtZm9udC1jb2xvci1hbHQ6ICRib2R5LWJhY2tncm91bmQ7XG4kY2FsbG91dC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGNhbGxvdXQtbGluay10aW50OiAzMCU7XG5cbi8vIDE0LiBDYXJkXG4vLyAtLS0tLS0tLVxuXG4kY2FyZC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FyZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5O1xuJGNhcmQtc2hhZG93OiBub25lO1xuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmc7XG4kY2FyZC1tYXJnaW46ICRnbG9iYWwtbWFyZ2luO1xuXG4vLyAxNS4gQ2xvc2UgQnV0dG9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRjbG9zZWJ1dHRvbi1wb3NpdGlvbjogcmlnaHQgdG9wO1xuJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsOiAoXG4gIHNtYWxsOiAwLjY2cmVtLFxuICBtZWRpdW06IDFyZW0sXG4pO1xuJGNsb3NlYnV0dG9uLW9mZnNldC12ZXJ0aWNhbDogKFxuICBzbWFsbDogMC4zM2VtLFxuICBtZWRpdW06IDAuNXJlbSxcbik7XG4kY2xvc2VidXR0b24tc2l6ZTogKFxuICBzbWFsbDogMS41ZW0sXG4gIG1lZGl1bTogMmVtLFxuKTtcbiRjbG9zZWJ1dHRvbi1saW5laGVpZ2h0OiAxO1xuJGNsb3NlYnV0dG9uLWNvbG9yOiAkZGFyay1ncmF5O1xuJGNsb3NlYnV0dG9uLWNvbG9yLWhvdmVyOiAkYmxhY2s7XG5cbi8vIDE2LiBEcmlsbGRvd25cbi8vIC0tLS0tLS0tLS0tLS1cblxuJGRyaWxsZG93bi10cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNXMgbGluZWFyO1xuJGRyaWxsZG93bi1hcnJvd3M6IHRydWU7XG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4O1xuJGRyaWxsZG93bi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG5cbi8vIDE3LiBEcm9wZG93blxuLy8gLS0tLS0tLS0tLS0tXG5cbiRkcm9wZG93bi1wYWRkaW5nOiAxcmVtO1xuJGRyb3Bkb3duLWJhY2tncm91bmQ6ICRib2R5LWJhY2tncm91bmQ7XG4kZHJvcGRvd24tYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJGRyb3Bkb3duLWZvbnQtc2l6ZTogMXJlbTtcbiRkcm9wZG93bi13aWR0aDogMzAwcHg7XG4kZHJvcGRvd24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRkcm9wZG93bi1zaXplczogKFxuICB0aW55OiAxMDBweCxcbiAgc21hbGw6IDIwMHB4LFxuICBsYXJnZTogNDAwcHgsXG4pO1xuXG4vLyAxOC4gRHJvcGRvd24gTWVudVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuJGRyb3Bkb3dubWVudS1hcnJvd3M6IHRydWU7XG4kZHJvcGRvd25tZW51LWFycm93LWNvbG9yOiAkYW5jaG9yLWNvbG9yO1xuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHg7XG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHg7XG4kZHJvcGRvd25tZW51LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRkcm9wZG93bm1lbnUtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuXG4vLyAxOS4gRm9ybXNcbi8vIC0tLS0tLS0tLVxuXG4kZmllbGRzZXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJGZpZWxkc2V0LXBhZGRpbmc6IHJlbS1jYWxjKDIwKTtcbiRmaWVsZHNldC1tYXJnaW46IHJlbS1jYWxjKDE4IDApO1xuJGxlZ2VuZC1wYWRkaW5nOiByZW0tY2FsYygwIDMpO1xuJGZvcm0tc3BhY2luZzogcmVtLWNhbGMoMTYpO1xuJGhlbHB0ZXh0LWNvbG9yOiAkYmxhY2s7XG4kaGVscHRleHQtZm9udC1zaXplOiByZW0tY2FsYygxMyk7XG4kaGVscHRleHQtZm9udC1zdHlsZTogaXRhbGljO1xuJGlucHV0LXByZWZpeC1jb2xvcjogJGJsYWNrO1xuJGlucHV0LXByZWZpeC1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1wcmVmaXgtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJGlucHV0LXByZWZpeC1wYWRkaW5nOiAxcmVtO1xuJGZvcm0tbGFiZWwtY29sb3I6ICRibGFjaztcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuJGZvcm0tbGFiZWwtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbDtcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjg7XG4kc2VsZWN0LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRzZWxlY3QtdHJpYW5nbGUtY29sb3I6ICRkYXJrLWdyYXk7XG4kc2VsZWN0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kaW5wdXQtY29sb3I6ICRibGFjaztcbiRpbnB1dC1wbGFjZWhvbGRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xuJGlucHV0LWZvbnQtZmFtaWx5OiBpbmhlcml0O1xuJGlucHV0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTYpO1xuJGlucHV0LWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kaW5wdXQtYmFja2dyb3VuZDogJHdoaXRlO1xuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiRpbnB1dC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKCRibGFjaywgMC4xKTtcbiRpbnB1dC1zaGFkb3ctZm9jdXM6IDAgMCA1cHggJG1lZGl1bS1ncmF5O1xuJGlucHV0LWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG4kaW5wdXQtbnVtYmVyLXNwaW5uZXJzOiB0cnVlO1xuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZm9ybS1idXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjAuIExhYmVsXG4vLyAtLS0tLS0tLS1cblxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGxhYmVsLWNvbG9yOiAkd2hpdGU7XG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2s7XG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbTtcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbTtcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyMS4gTWVkaWEgT2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlO1xuXG4vLyAyMi4gTWVudVxuLy8gLS0tLS0tLS1cblxuJG1lbnUtbWFyZ2luOiAwO1xuJG1lbnUtbWFyZ2luLW5lc3RlZDogMXJlbTtcbiRtZW51LWl0ZW0tcGFkZGluZzogMC43cmVtIDFyZW07XG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJG1lbnUtaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheTtcbiRtZW51LWJvcmRlcjogJGxpZ2h0LWdyYXk7XG5cbi8vIDIzLiBNZXRlclxuLy8gLS0tLS0tLS0tXG5cbiRtZXRlci1oZWlnaHQ6IDFyZW07XG4kbWV0ZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRtZXRlci1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kbWV0ZXItZmlsbC1nb29kOiAkc3VjY2Vzcy1jb2xvcjtcbiRtZXRlci1maWxsLW1lZGl1bTogJHdhcm5pbmctY29sb3I7XG4kbWV0ZXItZmlsbC1iYWQ6ICRhbGVydC1jb2xvcjtcblxuLy8gMjQuIE9mZi1jYW52YXNcbi8vIC0tLS0tLS0tLS0tLS0tXG5cbiRvZmZjYW52YXMtc2l6ZTogMjUwcHg7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLXNpemU6IDI1MHB4O1xuJG9mZmNhbnZhcy1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRvZmZjYW52YXMtc2hhZG93OiAwIDAgMTBweCByZ2JhKCRibGFjaywgMC43KTtcbiRvZmZjYW52YXMtcHVzaC16aW5kZXg6IDE7XG4kb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4OiAxMDtcbiRvZmZjYW52YXMtcmV2ZWFsLXppbmRleDogMTtcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi1sZW5ndGg6IDAuNXM7XG4kb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nOiBlYXNlO1xuJG9mZmNhbnZhcy1maXhlZC1yZXZlYWw6IHRydWU7XG4kb2ZmY2FudmFzLWV4aXQtYmFja2dyb3VuZDogcmdiYSgkd2hpdGUsIDAuMjUpO1xuJG1haW5jb250ZW50LWNsYXNzOiAnb2ZmLWNhbnZhcy1jb250ZW50JztcblxuLy8gMjUuIE9yYml0XG4vLyAtLS0tLS0tLS1cblxuJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQtYWN0aXZlOiAkZGFyay1ncmF5O1xuJG9yYml0LWJ1bGxldC1kaWFtZXRlcjogMS4ycmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW46IDAuMXJlbTtcbiRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDogMC44cmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tOiAwLjhyZW07XG4kb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC41KTtcbiRvcmJpdC1jYXB0aW9uLXBhZGRpbmc6IDFyZW07XG4kb3JiaXQtY29udHJvbC1iYWNrZ3JvdW5kLWhvdmVyOiByZ2JhKCRibGFjaywgMC41KTtcbiRvcmJpdC1jb250cm9sLXBhZGRpbmc6IDFyZW07XG4kb3JiaXQtY29udHJvbC16aW5kZXg6IDEwO1xuXG4vLyAyNi4gUGFnaW5hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS1cblxuJHBhZ2luYXRpb24tZm9udC1zaXplOiByZW0tY2FsYygxNCk7XG4kcGFnaW5hdGlvbi1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3I6ICRibGFjaztcbiRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZzogcmVtLWNhbGMoMyAxMCk7XG4kcGFnaW5hdGlvbi1pdGVtLXNwYWNpbmc6IHJlbS1jYWxjKDEpO1xuJHBhZ2luYXRpb24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXk7XG4kcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtY3VycmVudDogJHByaW1hcnktY29sb3I7XG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnQ6ICR3aGl0ZTtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItZGlzYWJsZWQ6ICRtZWRpdW0tZ3JheTtcbiRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yOiAkYmxhY2s7XG4kcGFnaW5hdGlvbi1tb2JpbGUtaXRlbXM6IGZhbHNlO1xuJHBhZ2luYXRpb24tbW9iaWxlLWN1cnJlbnQtaXRlbTogZmFsc2U7XG4kcGFnaW5hdGlvbi1hcnJvd3M6IHRydWU7XG5cbi8vIDI3LiBQcm9ncmVzcyBCYXJcbi8vIC0tLS0tLS0tLS0tLS0tLS1cblxuJHByb2dyZXNzLWhlaWdodDogMXJlbTtcbiRwcm9ncmVzcy1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTogJGdsb2JhbC1tYXJnaW47XG4kcHJvZ3Jlc3MtbWV0ZXItYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG4kcHJvZ3Jlc3MtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjguIFJlc3BvbnNpdmUgRW1iZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KTtcbiRyZXNwb25zaXZlLWVtYmVkLXJhdGlvczogKFxuICBkZWZhdWx0OiA0IGJ5IDMsXG4gIHdpZGVzY3JlZW46IDE2IGJ5IDksXG4pO1xuXG4vLyAyOS4gUmV2ZWFsXG4vLyAtLS0tLS0tLS0tXG5cbiRyZXZlYWwtYmFja2dyb3VuZDogJHdoaXRlO1xuJHJldmVhbC13aWR0aDogNjAwcHg7XG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aDtcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nO1xuJHJldmVhbC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kcmV2ZWFsLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kcmV2ZWFsLXppbmRleDogMTAwNTtcbiRyZXZlYWwtb3ZlcmxheS1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC40NSk7XG5cbi8vIDMwLiBTbGlkZXJcbi8vIC0tLS0tLS0tLS1cblxuJHNsaWRlci13aWR0aC12ZXJ0aWNhbDogMC41cmVtO1xuJHNsaWRlci10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiRzbGlkZXItaGVpZ2h0OiAwLjVyZW07XG4kc2xpZGVyLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5O1xuJHNsaWRlci1maWxsLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRzbGlkZXItaGFuZGxlLWhlaWdodDogMS40cmVtO1xuJHNsaWRlci1oYW5kbGUtd2lkdGg6IDEuNHJlbTtcbiRzbGlkZXItaGFuZGxlLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJHNsaWRlci1vcGFjaXR5LWRpc2FibGVkOiAwLjI1O1xuJHNsaWRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAzMS4gU3dpdGNoXG4vLyAtLS0tLS0tLS0tXG5cbiRzd2l0Y2gtYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5O1xuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3I7XG4kc3dpdGNoLWhlaWdodDogMnJlbTtcbiRzd2l0Y2gtaGVpZ2h0LXRpbnk6IDEuNXJlbTtcbiRzd2l0Y2gtaGVpZ2h0LXNtYWxsOiAxLjc1cmVtO1xuJHN3aXRjaC1oZWlnaHQtbGFyZ2U6IDIuNXJlbTtcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbjtcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRzd2l0Y2gtcGFkZGxlLW9mZnNldDogMC4yNXJlbTtcbiRzd2l0Y2gtcGFkZGxlLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kc3dpdGNoLXBhZGRsZS10cmFuc2l0aW9uOiBhbGwgMC4yNXMgZWFzZS1vdXQ7XG5cbi8vIDMyLiBUYWJsZVxuLy8gLS0tLS0tLS0tXG5cbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFibGUtY29sb3Itc2NhbGU6IDUlO1xuJHRhYmxlLWJvcmRlcjogMXB4IHNvbGlkIHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpO1xuJHRhYmxlLXBhZGRpbmc6IHJlbS1jYWxjKDggMTAgMTApO1xuJHRhYmxlLWhvdmVyLXNjYWxlOiAyJTtcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKTtcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZTtcbiR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpO1xuJHRhYmxlLXN0cmlwZTogZXZlbjtcbiR0YWJsZS1oZWFkLWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUgLyAyKTtcbiR0YWJsZS1oZWFkLXJvdy1ob3ZlcjogZGFya2VuKCR0YWJsZS1oZWFkLWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtZm9vdC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1mb290LXJvdy1ob3ZlcjogZGFya2VuKCR0YWJsZS1mb290LWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtaGVhZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2U7XG5cbi8vIDMzLiBUYWJzXG4vLyAtLS0tLS0tLVxuXG4kdGFiLW1hcmdpbjogMDtcbiR0YWItYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYi1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kdGFiLWJhY2tncm91bmQtYWN0aXZlOiAkbGlnaHQtZ3JheTtcbiR0YWItYWN0aXZlLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiR0YWItaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkd2hpdGU7XG4kdGFiLWl0ZW0tcGFkZGluZzogMS4yNXJlbSAxLjVyZW07XG4kdGFiLWV4cGFuZC1tYXg6IDY7XG4kdGFiLWNvbnRlbnQtYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYi1jb250ZW50LWJvcmRlcjogJGxpZ2h0LWdyYXk7XG4kdGFiLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kdGFiLWNvbnRlbnQtcGFkZGluZzogMXJlbTtcblxuLy8gMzQuIFRodW1ibmFpbFxuLy8gLS0tLS0tLS0tLS0tLVxuXG4kdGh1bWJuYWlsLWJvcmRlcjogc29saWQgNHB4ICR3aGl0ZTtcbiR0aHVtYm5haWwtbWFyZ2luLWJvdHRvbTogJGdsb2JhbC1tYXJnaW47XG4kdGh1bWJuYWlsLXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoJGJsYWNrLCAwLjIpO1xuJHRodW1ibmFpbC1zaGFkb3ctaG92ZXI6IDAgMCA2cHggMXB4IHJnYmEoJHByaW1hcnktY29sb3IsIDAuNSk7XG4kdGh1bWJuYWlsLXRyYW5zaXRpb246IGJveC1zaGFkb3cgMjAwbXMgZWFzZS1vdXQ7XG4kdGh1bWJuYWlsLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG5cbi8vIDM1LiBUaXRsZSBCYXJcbi8vIC0tLS0tLS0tLS0tLS1cblxuJHRpdGxlYmFyLWJhY2tncm91bmQ6ICRibGFjaztcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlO1xuJHRpdGxlYmFyLXBhZGRpbmc6IDAuNXJlbTtcbiR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0OiBib2xkO1xuJHRpdGxlYmFyLWljb24tY29sb3I6ICR3aGl0ZTtcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXk7XG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuXG4vLyAzNi4gVG9vbHRpcFxuLy8gLS0tLS0tLS0tLS1cblxuJGhhcy10aXAtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4kaGFzLXRpcC1ib3JkZXItYm90dG9tOiBkb3R0ZWQgMXB4ICRkYXJrLWdyYXk7XG4kdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOiAkYmxhY2s7XG4kdG9vbHRpcC1jb2xvcjogJHdoaXRlO1xuJHRvb2x0aXAtcGFkZGluZzogMC43NXJlbTtcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbTtcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2O1xuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMzcuIFRvcCBCYXJcbi8vIC0tLS0tLS0tLS0tXG5cbiR0b3BiYXItcGFkZGluZzogMC41cmVtO1xuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwO1xuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHg7XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtO1xuXG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIENyZWF0ZXMgYSBDU1MgdHJpYW5nbGUsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBkcm9wZG93biBhcnJvd3MsIGRyb3Bkb3duIHBpcHMsIGFuZCBtb3JlLiBVc2UgdGhpcyBtaXhpbiBpbnNpZGUgYSBgJjo6YmVmb3JlYCBvciBgJjo6YWZ0ZXJgIHNlbGVjdG9yLCB0byBhdHRhY2ggdGhlIHRyaWFuZ2xlIHRvIGFuIGV4aXN0aW5nIGVsZW1lbnQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHRyaWFuZ2xlLXNpemUgLSBXaWR0aCBvZiB0aGUgdHJpYW5nbGUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJHRyaWFuZ2xlLWNvbG9yIC0gQ29sb3Igb2YgdGhlIHRyaWFuZ2xlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHRyaWFuZ2xlLWRpcmVjdGlvbiAtIERpcmVjdGlvbiB0aGUgdHJpYW5nbGUgcG9pbnRzLiBDYW4gYmUgYHVwYCwgYHJpZ2h0YCwgYGRvd25gLCBvciBgbGVmdGAuXG5AbWl4aW4gY3NzLXRyaWFuZ2xlKFxuICAkdHJpYW5nbGUtc2l6ZSxcbiAgJHRyaWFuZ2xlLWNvbG9yLFxuICAkdHJpYW5nbGUtZGlyZWN0aW9uXG4pIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG5cbiAgYm9yZGVyOiBpbnNldCAkdHJpYW5nbGUtc2l6ZTtcblxuICBjb250ZW50OiAnJztcblxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gZG93bikge1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiAkdHJpYW5nbGUtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IHVwKSB7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvcjtcbiAgfVxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gcmlnaHQpIHtcbiAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJHRyaWFuZ2xlLWNvbG9yO1xuICB9XG4gIEBpZiAoJHRyaWFuZ2xlLWRpcmVjdGlvbiA9PSBsZWZ0KSB7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIG1lbnUgaWNvbiB3aXRoIGEgc2V0IHdpZHRoLCBoZWlnaHQsIG51bWJlciBvZiBiYXJzLCBhbmQgY29sb3JzLiBUaGUgbWl4aW4gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZSBpY29uIGFuZCB0aGUgd2VpZ2h0IG9mIHRoZSBiYXJzIHRvIGRldGVybWluZSBzcGFjaW5nLiA8ZGl2IGNsYXNzPVwiZG9jcy1leGFtcGxlLWJ1cmdlclwiPjwvZGl2PlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYmxhY2tdIC0gQ29sb3IgdG8gdXNlIGZvciB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3ItaG92ZXIgWyRkYXJrLWdyYXldIC0gQ29sb3IgdG8gdXNlIHdoZW4gdGhlIGljb24gaXMgaG92ZXJlZCBvdmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggWzIwcHhdIC0gV2lkdGggb2YgdGhlIGljb24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRoZWlnaHQgWzE2cHhdIC0gSGVpZ2h0IG9mIHRoZSBpY29uLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2VpZ2h0IFsycHhdIC0gSGVpZ2h0IG9mIGluZGl2aWR1YWwgYmFycyBpbiB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhcnMgWzNdIC0gTnVtYmVyIG9mIGJhcnMgaW4gdGhlIGljb24uXG5AbWl4aW4gaGFtYnVyZ2VyKFxuICAkY29sb3I6ICRibGFjayxcbiAgJGNvbG9yLWhvdmVyOiAkZGFyay1ncmF5LFxuICAkd2lkdGg6IDIwcHgsXG4gICRoZWlnaHQ6IDE2cHgsXG4gICR3ZWlnaHQ6IDJweCxcbiAgJGJhcnM6IDNcbikge1xuICAvLyBib3gtc2hhZG93IENTUyBvdXRwdXRcbiAgJHNoYWRvdzogKCk7XG4gICRob3Zlci1zaGFkb3c6ICgpO1xuXG4gIC8vIFNwYWNpbmcgYmV0d2VlbiBiYXJzIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgaWNvbiBhbmQgdGhlIHdlaWdodCBvZiBlYWNoIGJhclxuICAkc3BhY2luZzogKCRoZWlnaHQgLSAoJHdlaWdodCAqICRiYXJzKSkgLyAoJGJhcnMgLSAxKTtcblxuICBAaWYgdW5pdCgkc3BhY2luZykgPT0gJ3B4JyB7XG4gICAgJHNwYWNpbmc6IGZsb29yKCRzcGFjaW5nKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGJhcnMge1xuICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgJHNoYWRvdzogYXBwZW5kKCRzaGFkb3csIDAgJG9mZnNldCAwICRjb2xvciwgY29tbWEpO1xuICB9XG5cbiAgLy8gSWNvbiBjb250YWluZXJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAkd2lkdGg7XG4gIGhlaWdodDogJGhlaWdodDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gIC8vIEljb24gYmFyc1xuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAkd2VpZ2h0O1xuXG4gICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgICBjb250ZW50OiAnJzsgICAgXG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZVxuICBAaWYgJGNvbG9yLWhvdmVyIHtcbiAgICAvLyBHZW5lcmF0ZSBDU1NcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgICAkaG92ZXItc2hhZG93OiBhcHBlbmQoJGhvdmVyLXNoYWRvdywgMCAkb2Zmc2V0IDAgJGNvbG9yLWhvdmVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhvdmVyO1xuICAgICAgYm94LXNoYWRvdzogJGhvdmVyLXNoYWRvdztcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgYSBkb3dud2FyZC1mYWNpbmcgdHJpYW5nbGUgYXMgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGFuIGVsZW1lbnQuIFRoZSBpbWFnZSBpcyBmb3JtYXR0ZWQgYXMgYW4gU1ZHLCBtYWtpbmcgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIGNvbG9yLiBCZWNhdXNlIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3Qgc3VwcG9ydCBlbmNvZGVkIFNWR3MgYXMgYmFja2dyb3VuZCBpbWFnZXMsIGEgUE5HIGZhbGxiYWNrIGlzIGFsc28gaW5jbHVkZWQuXG4vLy8gVGhlcmUgYXJlIHR3byBQTkcgZmFsbGJhY2tzOiBhIGJsYWNrIHRyaWFuZ2xlIGFuZCBhIHdoaXRlIHRyaWFuZ2xlLiBUaGUgb25lIHVzZWQgZGVwZW5kcyBvbiB0aGUgbGlnaHRuZXNzIG9mIHRoZSBpbnB1dCBjb2xvci5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIHRyaWFuZ2xlLlxuQG1peGluIGJhY2tncm91bmQtdHJpYW5nbGUoJGNvbG9yOiAkYmxhY2spIHtcbiAgJHJnYjogJ3JnYiUyOCN7cm91bmQocmVkKCRjb2xvcikpfSwgI3tyb3VuZChncmVlbigkY29sb3IpKX0sICN7cm91bmQoYmx1ZSgkY29sb3IpKX0lMjknO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSczMicgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDMyIDI0Jz48cG9seWdvbiBwb2ludHM9JzAsMCAzMiwwIDE2LDI0JyBzdHlsZT0nZmlsbDogI3skcmdifSc+PC9wb2x5Z29uPjwvc3ZnPlwiKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjBcXDApIHtcbiAgICBAaWYgbGlnaHRuZXNzKCRjb2xvcikgPCA2MCUge1xuICAgICAgLy8gV2hpdGUgdHJpYW5nbGVcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFZQ0FZQUFBQ2JVLzgwQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJcEpSRUZVZU5yRWtja05nREFNQkJmUmtFdDBPYlJCQmRzR1hVRGdtUWZLNFhoSDJtOGN6UUFBeTI3UjN0c3c0UWZlMng4dU9PNm9ZTGI2R2xPb3IzR0Yrc3dVUkFPbVVKK1J3dEVKczlXdlRHRVl4QlhxSTFNUUFaaENmVVFLUnpETVZqK1R3ckFJVjZqdlNVRWtZQXIxTFNrY3lUQmIvVitLWWZYN3hBZXVzcTNzTER0R0gza0VHQUNQV0lmbE5aZmhSUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBCbGFjayB0cmlhbmdsZVxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU1CSlJFRlVlTnJFbGxzT2hDQU1SVnN6QzlJbHpVN0tDbVZIVEpzb01XWU1VdHB5djlCZ2J1WFFCNVpTZGdCWVlZNHljZ0Jpdms4S1lGc1FNZk1pVFRCUDRvM25VekNLek9hYkxKYkx5Mi9nMzFldkdrQWdpblI0L1plZ0tINXFYM2JKQ3NjQTN0MHgza2dPNXRRRnloaEZmNTB4UnFGTGJ5TVVOSlF6Z3lqR1Mvd2dDcHZLcWtSQnB1V3JFNFY5ZCsxRTRkUFVYcUlnMTA3U1FPRS8yRFJReE13VER5Z0lJblZERVQ5VDNsQ29qLzZqL1ZDbUdqWk9sMmxLcFo4QUF3RFFQN3pJaW1ER0ZRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHRoZSBtaWNybyBjbGVhcmZpeCBoYWNrIHBvcHVsYXJpemVkIGJ5IE5pY29sYXMgR2FsbGFnaGVyLiBJbmNsdWRlIHRoaXMgbWl4aW4gb24gYSBjb250YWluZXIgaWYgaXRzIGNoaWxkcmVuIGFyZSBhbGwgZmxvYXRlZCwgdG8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcHJvcGVyIGhlaWdodC5cbi8vLyBUaGUgY2xlYXJmaXggaXMgYXVnbWVudGVkIHdpdGggc3BlY2lmaWMgc3R5bGVzIHRvIHByZXZlbnQgYm9yZGVycyBpbiBmbGV4Ym94IGVudmlyb25tZW50c1xuLy8vIEBsaW5rIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLyBNaWNybyBDbGVhcmZpeCBIYWNrXG4vLy8gQGxpbmsgaHR0cDovL2RhbmlzYWRlc2lnbmVyLmNvbS9ibG9nL2ZsZXhib3gtY2xlYXItZml4LXBzZXVkby1lbGVtZW50cy8gRmxleGJveCBmaXhcbkBtaXhpbiBjbGVhcmZpeCB7XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleC1iYXNpczogMDtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLy8gQWRkcyBDU1MgZm9yIGEgXCJxdWFudGl0eSBxdWVyeVwiIHNlbGVjdG9yIHRoYXQgYXV0b21hdGljYWxseSBzaXplcyBlbGVtZW50cyBiYXNlZCBvbiBob3cgbWFueSB0aGVyZSBhcmUgaW5zaWRlIGEgY29udGFpbmVyLlxuLy8vIEBsaW5rIGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3F1YW50aXR5LXF1ZXJpZXMtZm9yLWNzcyBRdWFudGl0eSBRdWVyaWVzIGZvciBDU1Ncbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWF4IC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGV0ZWN0LiBUaGUgaGlnaGVyIHRoaXMgbnVtYmVyIGlzLCB0aGUgbW9yZSBDU1MgdGhhdCdzIHJlcXVpcmVkIHRvIGNvdmVyIGVhY2ggbnVtYmVyIG9mIGl0ZW1zLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGVsZW0gW2xpXSAtIFRhZyB0byB1c2UgZm9yIHNpYmxpbmcgc2VsZWN0b3JzLlxuQG1peGluIGF1dG8td2lkdGgoJG1heCwgJGVsZW06IGxpKSB7XG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJG1heCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQsXG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQgfiAjeyRlbGVtfSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgxIC8gJGkpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gUmVtb3ZlcyB0aGUgZm9jdXMgcmluZyBhcm91bmQgYW4gZWxlbWVudCB3aGVuIGEgbW91c2UgaW5wdXQgaXMgZGV0ZWN0ZWQuXG5AbWl4aW4gZGlzYWJsZS1tb3VzZS1vdXRsaW5lIHtcbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddICYge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgdmlzdWFsbHkgaGlkZGVuLCBidXQgc3RpbGwgYWNjZXNzaWJsZSB0byBrZXlib2FyZHMgYW5kIGFzc2lzdGl2ZSBkZXZpY2VzLlxuLy8vIEBsaW5rIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHkgSGlkaW5nIENvbnRlbnQgZm9yIEFjY2Vzc2liaWxpdHlcbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbn1cblxuLy8vIFJldmVyc2VzIHRoZSBDU1Mgb3V0cHV0IGNyZWF0ZWQgYnkgdGhlIGBlbGVtZW50LWludmlzaWJsZSgpYCBtaXhpbi5cbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZS1vZmYge1xuICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuXG4vLy8gVmVydGljYWxseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiB2ZXJ0aWNhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCBpbnNpZGUgb2YgaXRzIGZpcnN0IG5vbi1zdGF0aWMgcGFyZW50LFxuLy8vIEBsaW5rIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9jZW50ZXJpbmctd2l0aC1zYXNzLyBDZW50ZXJpbmcgV2l0aCBTYXNzXG5AbWl4aW4gaG9yaXpvbnRhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLy8gQWJzb2x1dGVseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLy8gSXRlcmF0ZXMgdGhyb3VnaCBicmVha3BvaW50cyBkZWZpbmVkIGluIGAkYnJlYWtwb2ludC1jbGFzc2VzYCBhbmQgcHJpbnRzIHRoZSBDU1MgaW5zaWRlIHRoZSBtaXhpbiBhdCBlYWNoIGJyZWFrcG9pbnQncyBtZWRpYSBxdWVyeS4gVXNlIHRoaXMgd2l0aCB0aGUgZ3JpZCwgb3IgYW55IG90aGVyIGNvbXBvbmVudCB0aGF0IGhhcyByZXNwb25zaXZlIGNsYXNzZXMuXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRzbWFsbCBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBza2lwIHRoZSBgc21hbGxgIGJyZWFrcG9pbnQuIFVzZSB0aGlzIHdpdGggY29tcG9uZW50cyB0aGF0IGRvbid0IHByZWZpeCBjbGFzc2VzIHdpdGggYHNtYWxsLWAsIG9ubHkgYG1lZGl1bS1gIGFuZCB1cC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50KCRzbWFsbDogdHJ1ZSkge1xuICAkbGlzdDogJGJyZWFrcG9pbnQtY2xhc3NlcztcblxuICBAaWYgbm90ICRzbWFsbCB7XG4gICAgJGxpc3Q6IHNsLXJlbW92ZSgkbGlzdCwgJC16Zi16ZXJvLWJyZWFrcG9pbnQpO1xuICB9XG5cbiAgQGVhY2ggJG5hbWUgaW4gJGxpc3Qge1xuICAgICQtemYtc2l6ZTogJG5hbWUgIWdsb2JhbDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgdGhlIGBAY29udGVudGAgcGFzc2VkIHRvIHRoZSBtaXhpbiB3aXRoIGEgdmFsdWUgYCQtemYtYnAtdmFsdWVgIHJlbGF0ZWQgdG8gYSBicmVha3BvaW50LCBkZXBlbmRpbmcgb24gdGhlIGAkbmFtZWAgcGFyYW1ldGVyOlxuLy8vIC0gRm9yIGEgc2luZ2xlIHZhbHVlLCBgJC16Zi1icC12YWx1ZWAgaXMgdGhpcyB2YWx1ZS5cbi8vLyAtIEZvciBhIGJyZWFrcG9pbnQgbmFtZSwgYCQtemYtYnAtdmFsdWVgIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUgaW4gYCRtYXBgLlxuLy8vIC0gRm9yIFwiYXV0b1wiLCBgJC16Zi1icC12YWx1ZWAgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYnJlYWtwb2ludCB2YWx1ZSBpbiBgJG1hcGAgYW5kIGlzIHBhc3NlZCB0byBgQGNvbnRlbnRgLCB3aGljaCBpcyBtYWRlIHJlc3BvbnNpdmUgZm9yIGVhY2ggYnJlYWtwb2ludCBvZiBgJG1hcGAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8S2V5d29yZH0gJG5hbWUgW2F1dG9dIC0gU2luZ2xlIHZhbHVlIG9yIGJyZWFrcG9pbnQgbmFtZSB0byB1c2UuIFwiYXV0b1wiIGJ5IGRlZmF1bHQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkbWFwIC0gTWFwIG9mIGJyZWFrcG9pbnRzIGFuZCB2YWx1ZXMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZS5cbkBtaXhpbiAtemYtYnJlYWtwb2ludC12YWx1ZShcbiAgJG5hbWU6IGF1dG8sXG4gICRtYXA6IG51bGxcbikge1xuICBAaWYgJG5hbWUgPT0gYXV0byBhbmQgdHlwZS1vZigkbWFwKSA9PSAnbWFwJyB7XG4gICAgLy8gXCJhdXRvXCJcbiAgICBAZWFjaCAkaywgJHYgaW4gJG1hcCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRrKSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi1icmVha3BvaW50LXZhbHVlKCR2LCAkbWFwKSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIGJyZWFrcG9pbnQgbmFtZVxuICAgIEBpZiB0eXBlLW9mKCRuYW1lKSA9PSAnc3RyaW5nJyB7XG4gICAgICAkbmFtZTogLXpmLWdldC1icC12YWwoJG1hcCwgJG5hbWUpO1xuICAgIH1cblxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVcbiAgICAkLXpmLWJwLXZhbHVlOiAkbmFtZSAhZ2xvYmFsO1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBncmlkXG4vLy8vXG5cbi8vLyBPdXRwdXRzIENTUyBjbGFzc2VzIGZvciB0aGUgZ3JpZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbkBtaXhpbiBmb3VuZGF0aW9uLWdyaWQoXG4gICRyb3c6ICdyb3cnLFxuICAkY29sdW1uOiAnY29sdW1uJyxcbiAgJGNvbHVtbi1yb3c6ICdjb2x1bW4tcm93JyxcbiAgJGd1dHRlcjogJ2d1dHRlcicsXG4gICRwdXNoOiAncHVzaCcsXG4gICRwdWxsOiAncHVsbCcsXG4gICRjZW50ZXI6ICdjZW50ZXJlZCcsXG4gICR1bmNlbnRlcjogJ3VuY2VudGVyZWQnLFxuICAkY29sbGFwc2U6ICdjb2xsYXBzZScsXG4gICR1bmNvbGxhcHNlOiAndW5jb2xsYXBzZScsXG4gICRvZmZzZXQ6ICdvZmZzZXQnLFxuICAkZW5kOiAnZW5kJyxcbiAgJGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICAkYmxvY2s6ICdibG9jaydcbikge1xuICAvLyBSb3dcbiAgLiN7JHJvd30ge1xuICAgIEBpbmNsdWRlIGdyaWQtcm93O1xuXG4gICAgLy8gQ29sbGFwc2luZ1xuICAgICYuI3skY29sbGFwc2V9IHtcbiAgICAgID4gLiN7JGNvbHVtbn0ge1xuICAgICAgICBAaW5jbHVkZSBncmlkLWNvbC1jb2xsYXBzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOZXN0aW5nXG4gICAgJiAuI3skcm93fSB7XG4gICAgICBAaW5jbHVkZSBncmlkLXJvdy1uZXN0KCRncmlkLWNvbHVtbi1ndXR0ZXIpO1xuXG4gICAgICAmLiN7JGNvbGxhcHNlfSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwYW5kZWQgKGZ1bGwtd2lkdGgpIHJvd1xuICAgICYuI3skZXhwYW5kZWR9IHtcbiAgICAgIEBpbmNsdWRlIGdyaWQtcm93LXNpemUoZXhwYW5kKTtcblxuICAgICAgLiN7JHJvd30ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC4jeyRleHBhbmRlZH0pIC4jeyRyb3d9IHtcbiAgICAgIEBpbmNsdWRlIGdyaWQtcm93LXNpemUoZXhwYW5kKTtcbiAgICB9XG5cbiAgICBAaWYgdHlwZS1vZigkZ3JpZC1jb2x1bW4tZ3V0dGVyKSA9PSAnbWFwJyB7XG4gICAgICAvLyBTdGF0aWMgKHVucmVzcG9uc2l2ZSkgcm93IGd1dHRlcnNcbiAgICAgIC8vXG4gICAgICBAZWFjaCAkYnJlYWtwb2ludCwgJHZhbHVlIGluICRncmlkLWNvbHVtbi1ndXR0ZXIge1xuICAgICAgICAmLiN7JGd1dHRlcn0tI3skYnJlYWtwb2ludH0ge1xuICAgICAgICAgID4gLiN7JGNvbHVtbn0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgZ3JpZC1jb2wtZ3V0dGVyKCR2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sdW1uXG4gIC4jeyRjb2x1bW59IHtcbiAgICBAaW5jbHVkZSBncmlkLWNvbDtcblxuICAgIEBpZiAkZ3JpZC1jb2x1bW4tYWxpZ24tZWRnZSB7XG4gICAgICAmLiN7JGVuZH0ge1xuICAgICAgICBAaW5jbHVkZSBncmlkLWNvbC1lbmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sdW1uIHJvd1xuICAvLyBUaGUgZG91YmxlIC5yb3cgY2xhc3MgaXMgbmVlZGVkIHRvIGJ1bXAgdXAgdGhlIHNwZWNpZmljaXR5XG4gIC4jeyRjb2x1bW59LiN7JHJvd30uI3skcm93fSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gIH1cblxuICAvLyBUbyBwcm9wZXJseSBuZXN0IGEgY29sdW1uIHJvdywgcGFkZGluZyBhbmQgbWFyZ2luIGlzIHJlbW92ZWRcbiAgLiN7JHJvd30gLiN7JGNvbHVtbn0uI3skcm93fS4jeyRyb3d9IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cblxuICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50IHtcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLWNvbHVtbi1jb3VudCB7XG4gICAgICAvLyBDb2x1bW4gd2lkdGhcbiAgICAgIC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICBAaW5jbHVkZSBncmlkLWNvbC1zaXplKCRpKTtcbiAgICAgIH1cblxuICAgICAgLy8gU291cmNlIG9yZGVyaW5nXG4gICAgICBAaWYgJGkgPCAkZ3JpZC1jb2x1bW4tY291bnQge1xuICAgICAgICAuI3skLXpmLXNpemV9LSN7JHB1c2h9LSN7JGl9IHtcbiAgICAgICAgICBAaW5jbHVkZSBncmlkLWNvbC1wb3MoJGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLiN7JC16Zi1zaXplfS0jeyRwdWxsfS0jeyRpfSB7XG4gICAgICAgICAgQGluY2x1ZGUgZ3JpZC1jb2wtcG9zKC0kaSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT2Zmc2V0c1xuICAgICAgJG86ICRpIC0gMTtcblxuICAgICAgLiN7JC16Zi1zaXplfS0jeyRvZmZzZXR9LSN7JG99IHtcbiAgICAgICAgQGluY2x1ZGUgZ3JpZC1jb2wtb2ZmKCRvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCbG9jayBncmlkXG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkYmxvY2stZ3JpZC1tYXgge1xuICAgICAgLiN7JC16Zi1zaXplfS11cC0jeyRpfSB7XG4gICAgICAgIEBpbmNsdWRlIGdyaWQtbGF5b3V0KCRpLCAnLiN7JGNvbHVtbn0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXNwb25zaXZlIGNvbGxhcHNpbmdcbiAgICAuI3skLXpmLXNpemV9LSN7JGNvbGxhcHNlfSB7XG4gICAgICA+IC4jeyRjb2x1bW59IHsgQGluY2x1ZGUgZ3JpZC1jb2wtY29sbGFwc2U7IH1cblxuICAgICAgLiN7JHJvd30ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC4jeyRleHBhbmRlZH0uI3skcm93fSAuI3skLXpmLXNpemV9LSN7JGNvbGxhcHNlfS4jeyRyb3d9IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tI3skdW5jb2xsYXBzZX0ge1xuICAgICAgPiAuI3skY29sdW1ufSB7IEBpbmNsdWRlIGdyaWQtY29sLWd1dHRlcigkLXpmLXNpemUpOyB9XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb25pbmdcbiAgICAuI3skLXpmLXNpemV9LSN7JGNlbnRlcn0ge1xuICAgICAgQGluY2x1ZGUgZ3JpZC1jb2wtcG9zKGNlbnRlcik7XG4gICAgfVxuXG4gICAgLy8gR3V0dGVyIGFkanVzdG1lbnRcbiAgICAuI3skLXpmLXNpemV9LSN7JHVuY2VudGVyfSxcbiAgICAuI3skLXpmLXNpemV9LSN7JHB1c2h9LTAsXG4gICAgLiN7JC16Zi1zaXplfS0jeyRwdWxsfS0wIHtcbiAgICAgIEBpbmNsdWRlIGdyaWQtY29sLXVucG9zO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrIGdyaWQgY29sdW1uc1xuICAuI3skY29sdW1ufS0jeyRibG9ja30ge1xuICAgIEBpbmNsdWRlIGdyaWQtY29sdW1uLW1hcmdpbjtcbiAgfVxuXG4gIEBpZiAkY29sdW1uID09ICdjb2x1bW4nIGFuZCBoYXMtdmFsdWUoJGdyaWQtY29sdW1uLWFsaWFzKSB7XG4gICAgLiN7JGdyaWQtY29sdW1uLWFsaWFzfSB7XG4gICAgICAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1ibG9jayBwbGFjZWhvbGRlci1pbi1leHRlbmRcbiAgICAgIEBleHRlbmQgLmNvbHVtbjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGdyaWRcbi8vLy9cblxuLy8vIENoYW5nZSB0aGUgYmVoYXZpb3Igb2YgY29sdW1ucyBkZWZpbmVkIGluc2lkZSB0aGlzIG1peGluIHRvIHVzZSBhIGRpZmZlcmVudCBjb2x1bW4gY291bnQuXG4vLy8gQGNvbnRlbnRcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyAtIE51bWJlciBvZiBjb2x1bW5zIHRvIHVzZS5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRyb290IFtmYWxzZV1cbi8vLyAgIElmIGBmYWxzZWAsIHNlbGVjdG9ycyBpbnNpZGUgdGhpcyBtaXhpbiB3aWxsIG5lc3QgaW5zaWRlIHRoZSBwYXJlbnQgc2VsZWN0b3IuXG4vLy8gICBJZiBgdHJ1ZWAsIHNlbGVjdG9ycyB3aWxsIG5vdCBuZXN0LlxuQG1peGluIGdyaWQtY29udGV4dChcbiAgJGNvbHVtbnMsXG4gICRyb290OiBmYWxzZVxuKSB7XG4gIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNvbHVtbiBjb3VudCBzbyBpdCBjYW4gYmUgcmUtc2V0IGxhdGVyXG4gICRvbGQtZ3JpZC1jb2x1bW4tY291bnQ6ICRncmlkLWNvbHVtbi1jb3VudDtcbiAgJGdyaWQtY29sdW1uLWNvdW50OiAkY29sdW1ucyAhZ2xvYmFsO1xuXG4gIEBpZiAkcm9vdCB7XG4gICAgQGF0LXJvb3QgeyBAY29udGVudDsgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgdGhlIG9sZCBjb2x1bW4gY291bnRcbiAgJGdyaWQtY29sdW1uLWNvdW50OiAkb2xkLWdyaWQtY29sdW1uLWNvdW50ICFnbG9iYWw7XG59XG5cbi8vLyBDcmVhdGVzIGEgZ3JpZCByb3cuXG4vLy8gQGNvbnRlbnRcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbbnVsbF0gLSBDb2x1bW4gY291bnQgZm9yIHRoaXMgcm93LiBgbnVsbGAgd2lsbCB1c2UgdGhlIGRlZmF1bHQgY29sdW1uIGNvdW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZHN9ICRiZWhhdmlvciBbbnVsbF1cbi8vLyAgIE1vZGlmaWNhdGlvbnMgdG8gdGhlIGRlZmF1bHQgZ3JpZCBzdHlsZXMuIGBuZXN0YCBpbmRpY2F0ZXMgdGhlIHJvdyB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgYW5vdGhlciByb3cuIGBjb2xsYXBzZWAgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbHVtbnMgaW5zaWRlIHRoaXMgcm93IHdpbGwgbm90IGhhdmUgcGFkZGluZy4gYG5lc3QgY29sbGFwc2VgIGNvbWJpbmVzIGJvdGggYmVoYXZpb3JzLlxuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFskZ3JpZC1yb3ctd2lkdGhdIE1heGltdW0gc2l6ZSBvZiB0aGUgcm93LiBTZXQgdG8gYGV4cGFuZGAgdG8gbWFrZSB0aGUgcm93IHRha2luZyB0aGUgZnVsbCB3aWR0aC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRjZiBbdHJ1ZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIGEgY2xlYXJmaXguXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtY29sdW1uLWd1dHRlcl0gLSBHdXR0ZXIgbWFwIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2Ugd2hlbiBpbnZlcnRpbmcgbWFyZ2lucy4gUmVzcG9uc2l2ZSBndXR0ZXIgc2V0dGluZ3MgYnkgZGVmYXVsdC5cbkBtaXhpbiBncmlkLXJvdyhcbiAgJGNvbHVtbnM6IG51bGwsXG4gICRiZWhhdmlvcjogbnVsbCxcbiAgJHNpemU6ICRncmlkLXJvdy13aWR0aCxcbiAgJGNmOiB0cnVlLFxuICAkZ3V0dGVyczogJGdyaWQtY29sdW1uLWd1dHRlclxuKSB7XG4gICRtYXJnaW46IGF1dG87XG5cbiAgQGlmIGluZGV4KCRiZWhhdmlvciwgbmVzdCkgIT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgZ3JpZC1yb3ctbmVzdCgkZ3V0dGVycyk7XG5cbiAgICBAaWYgaW5kZXgoJGJlaGF2aW9yLCBjb2xsYXBzZSkgIT0gbnVsbCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGdyaWQtcm93LXNpemUoJHNpemUpO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIEBpZiAkY2Yge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9XG5cbiAgQGlmICRjb2x1bW5zICE9IG51bGwge1xuICAgIEBpbmNsdWRlIGdyaWQtY29udGV4dCgkY29sdW1ucykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBJbnZlcnRzIHRoZSBtYXJnaW5zIG9mIGEgcm93IHRvIG5lc3QgaXQgaW5zaWRlIG9mIGEgY29sdW1uLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtY29sdW1uLWd1dHRlcl0gLSBHdXR0ZXIgbWFwIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2Ugd2hlbiBpbnZlcnRpbmcgbWFyZ2lucy4gUmVzcG9uc2l2ZSBndXR0ZXIgc2V0dGluZ3MgYnkgZGVmYXVsdC5cbkBtaXhpbiBncmlkLXJvdy1uZXN0KCRndXR0ZXJzOiAkZ3JpZC1jb2x1bW4tZ3V0dGVyKSB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQge1xuICAgICRtYXJnaW46IHJlbS1jYWxjKC16Zi1nZXQtYnAtdmFsKCRndXR0ZXJzLCAkLXpmLXNpemUpKSAvIDIgKiAtMTtcblxuICAgIG1hcmdpbi1yaWdodDogJG1hcmdpbjtcbiAgICBtYXJnaW4tbGVmdDogJG1hcmdpbjtcbiAgfVxufVxuXG4vLy8gU2V0IGEgZ3JpZCByb3cgc2l6ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfE51bWJlcn0gJHNpemUgWyRncmlkLXJvdy13aWR0aF0gTWF4aW11bSBzaXplIG9mIHRoZSByb3cuIFNldCB0byBgZXhwYW5kYCB0byBtYWtlIHRoZSByb3cgdGFraW5nIHRoZSBmdWxsIHdpZHRoLlxuQG1peGluIGdyaWQtcm93LXNpemUoJHNpemU6ICRncmlkLXJvdy13aWR0aCkge1xuICBAaWYgJHNpemUgPT0gZXhwYW5kIHtcbiAgICAkc2l6ZTogbm9uZTtcbiAgfVxuXG4gIG1heC13aWR0aDogJHNpemU7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCUgIWRlZmF1bHQ7XG5cbi8vLyBSZW1vdmVzIHRoZSB1bml0IChlLmcuIHB4LCBlbSwgcmVtKSBmcm9tIGEgdmFsdWUsIHJldHVybmluZyB0aGUgbnVtYmVyIG9ubHkuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG51bSAtIE51bWJlciB0byBzdHJpcCB1bml0IGZyb20uXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc2FtZSBudW1iZXIsIHNhbnMgdW5pdC5cbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW0pIHtcbiAgQHJldHVybiAkbnVtIC8gKCRudW0gKiAwICsgMSk7XG59XG5cbi8vLyBDb252ZXJ0cyBvbmUgb3IgbW9yZSBwaXhlbCB2YWx1ZXMgaW50byBtYXRjaGluZyByZW0gdmFsdWVzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJHZhbHVlcyAtIE9uZSBvciBtb3JlIHZhbHVlcyB0byBjb252ZXJ0LiBCZSBzdXJlIHRvIHNlcGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMgYW5kIG5vdCBjb21tYXMuIElmIHlvdSBuZWVkIHRvIGNvbnZlcnQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgd3JhcCB0aGUgbGlzdCBpbiBwYXJlbnRoZXNlcy5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gVGhlIGJhc2UgdmFsdWUgdG8gdXNlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGByZW1gLiBJZiB5b3UncmUgdXNpbmcgRm91bmRhdGlvbiBvdXQgb2YgdGhlIGJveCwgdGhpcyBpcyAxNnB4LiBJZiB0aGlzIHBhcmFtZXRlciBpcyBgbnVsbGAsIHRoZSBmdW5jdGlvbiB3aWxsIHJlZmVyZW5jZSB0aGUgYCRiYXNlLWZvbnQtc2l6ZWAgdmFyaWFibGUgYXMgdGhlIGJhc2UuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gQSBsaXN0IG9mIGNvbnZlcnRlZCB2YWx1ZXMuXG5AZnVuY3Rpb24gcmVtLWNhbGMoJHZhbHVlcywgJGJhc2U6IG51bGwpIHtcbiAgJHJlbS12YWx1ZXM6ICgpO1xuICAkY291bnQ6IGxlbmd0aCgkdmFsdWVzKTtcblxuICAvLyBJZiBubyBiYXNlIGlzIGRlZmluZWQsIGRlZmVyIHRvIHRoZSBnbG9iYWwgZm9udCBzaXplXG4gIEBpZiAkYmFzZSA9PSBudWxsIHtcbiAgICAkYmFzZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBJZiB0aGUgYmFzZSBmb250IHNpemUgaXMgYSAlLCB0aGVuIG11bHRpcGx5IGl0IGJ5IDE2cHhcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIDEwMCUgZm9udCBzaXplID0gMTZweCBpbiBtb3N0IGFsbCBicm93c2Vyc1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVtIGFzIGJhc2UgYWxsb3dzIGNvcnJlY3Qgc2NhbGluZ1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgJGNvdW50ID09IDEge1xuICAgIEByZXR1cm4gLXpmLXRvLXJlbSgkdmFsdWVzLCAkYmFzZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJlbS12YWx1ZXM6IGFwcGVuZCgkcmVtLXZhbHVlcywgLXpmLXRvLXJlbShudGgoJHZhbHVlcywgJGkpLCAkYmFzZSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVtLXZhbHVlcztcbn1cblxuLy8gQ29udmVydHMgYSB1bml0bGVzcywgcGl4ZWwsIG9yIHJlbSB2YWx1ZSB0byBlbSwgZm9yIHVzZSBpbiBicmVha3BvaW50cy5cbkBmdW5jdGlvbiAtemYtYnAtdG8tZW0oJHZhbHVlKSB7XG4gIC8vIFBpeGVsIGFuZCB1bml0bGVzcyB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byByZW1zXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyBvciB1bml0bGVzcygkdmFsdWUpIHtcbiAgICAkdmFsdWU6IHJlbS1jYWxjKCR2YWx1ZSwgJGJhc2U6IDE2cHgpO1xuICB9XG5cbiAgLy8gVGhlbiB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGVtc1xuICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFlbTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgdG8gbWF0Y2hpbmcgcmVtIHZhbHVlLiAqQW55KiB2YWx1ZSBwYXNzZWQsIHJlZ2FyZGxlc3Mgb2YgdW5pdCwgaXMgYXNzdW1lZCB0byBiZSBhIHBpeGVsIHZhbHVlLiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBwaXhlbCB2YWx1ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcmVtIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gUGl4ZWwgdmFsdWUgdG8gY29udmVydC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gQmFzZSBmb3IgcGl4ZWwgY29udmVyc2lvbi5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IEEgbnVtYmVyIGluIHJlbXMsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZCB0aGUgYmFzZSBwaXhlbCB2YWx1ZS4gcmVtIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggYXMgaXMuXG5AZnVuY3Rpb24gLXpmLXRvLXJlbSgkdmFsdWUsICRiYXNlOiBudWxsKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpICE9ICdudW1iZXInIHtcbiAgICBAd2FybiBpbnNwZWN0KCR2YWx1ZSkgKyAnIHdhcyBwYXNzZWQgdG8gcmVtLWNhbGMoKSwgd2hpY2ggaXMgbm90IGEgbnVtYmVyLic7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZW0gaW50byByZW0gaWYgc29tZW9uZSBoYW5kcyBvdmVyICdlbSdzXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAxcmVtO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHJlbSBpZiB1bml0cyBmb3IgJHZhbHVlIGlzIG5vdCByZW0gb3IgZW1cbiAgQGlmIHVuaXQoJHZhbHVlKSAhPSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKSAqIDFyZW07XG4gIH1cblxuICAvLyBUdXJuIDByZW0gaW50byAwXG4gIEBpZiAkdmFsdWUgPT0gMHJlbSB7XG4gICAgJHZhbHVlOiAwO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vLyBDb252ZXJ0cyBhIHBpeGVsLCBwZXJjZW50YWdlLCByZW0gb3IgZW0gdmFsdWUgdG8gYSB1bml0bGVzcyB2YWx1ZSBiYXNlZCBvbiBhIGdpdmVuIGZvbnQgc2l6ZS4gSWRlYWwgZm9yIHdvcmtpbmcgb3V0IHVuaXRsZXNzIGxpbmUgaGVpZ2h0cy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBjb252ZXJ0IHRvIGEgdW5pdGxlc3MgbGluZSBoZWlnaHRcbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgLSBUaGUgZm9udCBzaXplIHRvIHVzZSB0byB3b3JrIG91dCB0aGUgbGluZSBoZWlnaHQgLSBkZWZhdWx0cyB0byAkZ2xvYmFsLWZvbnQtc2l6ZVxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIFVuaXRsZXNzIG51bWJlclxuQGZ1bmN0aW9uIHVuaXRsZXNzLWNhbGMoJHZhbHVlLCAkYmFzZTogbnVsbCkge1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIEZpcnN0LCBsZXRzIGNvbnZlcnQgb3VyICRiYXNlIHRvIHBpeGVsc1xuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdyZW0nIHtcbiAgICAkYmFzZTogc3RyaXAtdW5pdCgkYmFzZSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBOb3cgbGV0cyBjb252ZXJ0IG91ciB2YWx1ZSB0byBwaXhlbHMgdG9vXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJyUnIHtcbiAgICAkdmFsdWU6ICgkdmFsdWUgLyAxMDAlKSAqICRiYXNlO1xuICB9XG5cbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAkYmFzZTtcbiAgfVxuXG4gIC8vICdweCdcbiAgQGlmIHVuaXQoJHZhbHVlKSA9PSAncHgnIHtcbiAgICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAvIHN0cmlwLXVuaXQoJGJhc2UpO1xuICB9XG5cbiAgLy8gYXNzdW1lIHRoYXQgbGluZS1oZWlnaHRzIGdyZWF0ZXJuIHRoZW4gMTAgYXJlIG1lYW50IHRvIGJlIGFic29sdXRlIGluICdweCdcbiAgQGlmIHVuaXRsZXNzKCR2YWx1ZSkgYW5kICgkdmFsdWUgPiAxMCkge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gc3RyaXAtdW5pdCgkYmFzZSk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGdyaWRcbi8vLy9cblxuLy8vIFNldCB0aGUgZ3V0dGVycyBvbiBhIGNvbHVtblxuLy8vIEBwYXJhbSB7TnVtYmVyfEtleXdvcmR9ICRndXR0ZXIgW2F1dG9dXG4vLy8gICBTcGFjaW5nIGJldHdlZW4gY29sdW1ucywgYWNjZXB0cyBtdWx0aXBsZSB2YWx1ZXM6XG4vLy8gICAtIEEgc2luZ2xlIHZhbHVlIHdpbGwgbWFrZSB0aGUgZ3V0dGVyIHRoYXQgZXhhY3Qgc2l6ZS5cbi8vLyAgIC0gQSBicmVha3BvaW50IG5hbWUgd2lsbCBtYWtlIHRoZSBndXR0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgc2l6ZSBpbiB0aGUgJGd1dHRlcnMgbWFwLlxuLy8vICAgLSBcImF1dG9cIiB3aWxsIG1ha2UgdGhlIGd1dHRlciByZXNwb25zaXZlLCB1c2luZyB0aGUgJGd1dHRlcnMgbWFwIHZhbHVlcy5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1jb2x1bW4tZ3V0dGVyXSAtIEd1dHRlciBtYXAgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZS4gUmVzcG9uc2l2ZSBndXR0ZXIgc2V0dGluZ3MgYnkgZGVmYXVsdC5cbkBtaXhpbiBncmlkLWNvbHVtbi1ndXR0ZXIoXG4gICRndXR0ZXI6IGF1dG8sXG4gICRndXR0ZXJzOiAkZ3JpZC1jb2x1bW4tZ3V0dGVyXG4pIHtcbiAgQGluY2x1ZGUgLXpmLWJyZWFrcG9pbnQtdmFsdWUoJGd1dHRlciwgJGd1dHRlcnMpIHtcbiAgICAkcGFkZGluZzogcmVtLWNhbGMoJC16Zi1icC12YWx1ZSkgLyAyO1xuXG4gICAgcGFkZGluZy1yaWdodDogJHBhZGRpbmc7XG4gICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZztcbiAgfVxufVxuXG4vLy8gQ29sbGFwc2UgdGhlIGd1dHRlcnMgb24gYSBjb2x1bW4gYnkgcmVtb3ZpbmcgdGhlIHBhZGRpbmcuICoqTm90ZToqKiBvbmx5IHVzZSB0aGlzIG1peGluIHdpdGhpbiBhIGJyZWFrcG9pbnQuIFRvIGNvbGxhcHNlIGEgY29sdW1uJ3MgZ3V0dGVycyBvbiBhbGwgc2NyZWVuIHNpemVzLCB1c2UgdGhlIGAkZ3V0dGVyYCBwYXJhbWV0ZXIgb2YgdGhlIGBncmlkLWNvbHVtbigpYCBtaXhpbiBpbnN0ZWFkLlxuQG1peGluIGdyaWQtY29sdW1uLWNvbGxhcHNlIHtcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4tZ3V0dGVyKDApO1xufVxuXG4vLy8gVW4tY29sbGFwc2UgdGhlIGd1dHRlcnMgb24gYSBjb2x1bW4gYnkgcmUtYWRkaW5nIHRoZSBwYWRkaW5nLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRndXR0ZXIgWyRncmlkLWNvbHVtbi1ndXR0ZXJdIC0gU3BhY2luZyBiZXR3ZWVuIGNvbHVtbnMuXG5AbWl4aW4gZ3JpZC1jb2x1bW4tdW5jb2xsYXBzZSgkZ3V0dGVyOiAkZ3JpZC1jb2x1bW4tZ3V0dGVyKSB7XG4gIEB3YXJuICdUaGlzIG1peGluIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IGdyaWQtY29sdW1uLWd1dHRlcigpLiBncmlkLWNvbHVtbi11bmNvbGxhcHNlKCkgd2lsbCBiZSByZW1vdmVkIGluIEZvdW5kYXRpb24gNi40Lic7XG4gIEBpbmNsdWRlIGdyaWQtY29sdW1uLWd1dHRlcigkZ3V0dGVyczogJGd1dHRlcik7XG59XG5cbi8vLyBTaG9ydGhhbmQgZm9yIGBncmlkLWNvbHVtbi1ndXR0ZXIoKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLWd1dHRlclxuQG1peGluIGdyaWQtY29sLWd1dHRlcihcbiAgJGd1dHRlcjogYXV0byxcbiAgJGd1dHRlcnM6ICRncmlkLWNvbHVtbi1ndXR0ZXJcbikge1xuICBAaW5jbHVkZSBncmlkLWNvbHVtbi1ndXR0ZXIoJGd1dHRlciwgJGd1dHRlcnMpO1xufVxuXG4vLy8gU2hvcnRoYW5kIGZvciBgZ3JpZC1jb2x1bW4tY29sbGFwc2UoKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLWNvbGxhcHNlXG5AbWl4aW4gZ3JpZC1jb2wtY29sbGFwc2Uge1xuICBAaW5jbHVkZSBncmlkLWNvbHVtbi1jb2xsYXBzZTtcbn1cblxuLy8vIFNob3J0aGFuZCBmb3IgYGdyaWQtY29sdW1uLXVuY29sbGFwc2UoKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLXVuY29sbGFwc2VcbkBtaXhpbiBncmlkLWNvbC11bmNvbGxhcHNlKCRndXR0ZXI6ICRncmlkLWNvbHVtbi1ndXR0ZXIpIHtcbiAgQHdhcm4gJ1RoaXMgbWl4aW4gaXMgYmVpbmcgcmVwbGFjZWQgYnkgZ3JpZC1jb2wtZ3V0dGVyKCkuIGdyaWQtY29sLXVuY29sbGFwc2UoKSB3aWxsIGJlIHJlbW92ZWQgaW4gRm91bmRhdGlvbiA2LjQuJztcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4tdW5jb2xsYXBzZSgkZ3V0dGVyKTtcbn1cblxuLy8vIFNldHMgYm90dG9tIG1hcmdpbiBvbiBncmlkIGNvbHVtbnMgdG8gbWF0Y2ggZ3V0dGVyc1xuLy8vIEBwYXJhbSB7TnVtYmVyfEtleXdvcmR9ICRtYXJnaW4gW2F1dG9dXG4vLy8gICBUaGUgYm90dG9tIG1hcmdpbiBvbiBncmlkIGNvbHVtbnMsIGFjY2VwdHMgbXVsdGlwbGUgdmFsdWVzOlxuLy8vICAgLSBBIHNpbmdsZSB2YWx1ZSB3aWxsIG1ha2UgdGhlIG1hcmdpbiB0aGF0IGV4YWN0IHNpemUuXG4vLy8gICAtIEEgYnJlYWtwb2ludCBuYW1lIHdpbGwgbWFrZSB0aGUgbWFyZ2luIHRoZSBjb3JyZXNwb25kaW5nIHNpemUgaW4gdGhlICRtYXJnaW5zIG1hcC5cbi8vLyAgIC0gXCJhdXRvXCIgd2lsbCBtYWtlIHRoZSBtYXJnaW4gcmVzcG9uc2l2ZSwgdXNpbmcgdGhlICRtYXJnaW5zIG1hcCB2YWx1ZXMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkbWFyZ2lucyBbJGdyaWQtY29sdW1uLWd1dHRlcl0gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZS4gUmVzcG9uc2l2ZSBndXR0ZXIgc2V0dGluZ3MgYnkgZGVmYXVsdC5cbkBtaXhpbiBncmlkLWNvbHVtbi1tYXJnaW4gKFxuICAkbWFyZ2luOiBhdXRvLFxuICAkbWFyZ2luczogJGdyaWQtY29sdW1uLWd1dHRlclxuKSB7XG4gIEBpbmNsdWRlIC16Zi1icmVha3BvaW50LXZhbHVlKCRtYXJnaW4sICRtYXJnaW5zKSB7XG4gICAgJG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKCQtemYtYnAtdmFsdWUpO1xuICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW4tYm90dG9tO1xuXG4gICAgPiA6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYnJlYWtwb2ludHNcbi8vLy9cblxuLy8vIEEgbGlzdCBvZiBuYW1lZCBicmVha3BvaW50cy4gWW91IGNhbiB1c2UgdGhlc2Ugd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gcXVpY2tseSBjcmVhdGUgbWVkaWEgcXVlcmllcy5cbi8vLyBAdHlwZSBNYXBcbiRicmVha3BvaW50czogKFxuICBzbWFsbDogMCxcbiAgbWVkaXVtOiA2NDBweCxcbiAgbGFyZ2U6IDEwMjRweCxcbiAgeGxhcmdlOiAxMjAwcHgsXG4gIHh4bGFyZ2U6IDE0NDBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUaGUgbGFyZ2VzdCBuYW1lZCBicmVha3BvaW50IGluIHdoaWNoIHRvIGluY2x1ZGUgcHJpbnQgYXMgYSBtZWRpYSB0eXBlXG4vLy8gQHR5cGUgS2V5d29yZFxuJHByaW50LWJyZWFrcG9pbnQ6IGxhcmdlICFkZWZhdWx0O1xuXG4kLXpmLXplcm8tYnJlYWtwb2ludDogc21hbGwgIWRlZmF1bHQ7XG5cbiQtemYtYnJlYWtwb2ludHMta2V5czogbWFwLXRvLWxpc3QoJGJyZWFrcG9pbnRzLCAna2V5cycpO1xuXG5AaWYgbnRoKG1hcC12YWx1ZXMoJGJyZWFrcG9pbnRzKSwgMSkgIT0gMCB7XG4gIEBlcnJvciAnWW91ciBzbWFsbGVzdCBicmVha3BvaW50IChkZWZpbmVkIGluICRicmVha3BvaW50cykgbXVzdCBiZSBzZXQgdG8gXCIwXCIuJztcbn1cbkBlbHNlIHtcbiAgJC16Zi16ZXJvLWJyZWFrcG9pbnQ6IG50aChtYXAta2V5cygkYnJlYWtwb2ludHMpLCAxKTtcbn1cblxuLy8vIEFsbCBvZiB0aGUgbmFtZXMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgb3V0cHV0IGFzIGNsYXNzZXMgaW4geW91ciBDU1MsIGxpa2UgYC5zbWFsbC0xMmAsIGAubWVkaXVtLTZgLCBhbmQgc28gb24uIEVhY2ggdmFsdWUgaW4gdGhpcyBsaXN0IG11c3QgYWxzbyBiZSBpbiB0aGUgYCRicmVha3BvaW50c2AgbWFwLlxuLy8vIEB0eXBlIExpc3RcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBtZWRpdW0gbGFyZ2UpICFkZWZhdWx0O1xuXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgc3RyaW5nIG1hdGNoaW5nIHRoZSBpbnB1dCB2YWx1ZS4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBzZWUgd2hhdCB0aGUgcG9zc2libGUgaW5wdXRzIGFyZS5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWwgW3NtYWxsXSAtIEJyZWFrcG9pbnQgbmFtZSwgb3IgcHgsIHJlbSwgb3IgZW0gdmFsdWUgdG8gcHJvY2Vzcy5cbkBmdW5jdGlvbiBicmVha3BvaW50KCR2YWw6ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgZm9yIG1heC13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IDA7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBFdmVudHVhbCBvdXRwdXRcbiAgJHN0cjogJyc7XG4gIC8vIElzIGl0IGEgbmFtZWQgbWVkaWEgcXVlcnk/XG4gICRuYW1lZDogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG4gIEBlbHNlIGlmICRicCA9PSAncmV0aW5hJyB7XG4gICAgQHJldHVybiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSc7XG4gIH1cblxuICAvLyBUcnkgdG8gcHVsbCBhIG5hbWVkIGJyZWFrcG9pbnQgb3V0IG9mIHRoZSAkYnJlYWtwb2ludHMgbWFwXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgQGlmICRkaXIgPT0gJ29ubHknIG9yICRkaXIgPT0gJ2Rvd24nIHtcbiAgICAgICAgJGJwLW1heDogLXpmLW1hcC1uZXh0KCRicmVha3BvaW50cywgJGJwKTtcbiAgICAgIH1cblxuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJGJwKTtcbiAgICAgICRuYW1lZDogdHJ1ZTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJGJwOiAwO1xuICAgICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogXCIjeyR2YWx9XCIgaXMgbm90IGRlZmluZWQgaW4geW91ciAkYnJlYWtwb2ludHMgc2V0dGluZy4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnZlcnQgYW55IHBpeGVsLCByZW0sIG9yIHVuaXRsZXNzIHZhbHVlIHRvIGVtXG4gICRicDogLXpmLWJwLXRvLWVtKCRicCk7XG4gIEBpZiAkYnAtbWF4IHtcbiAgICAkYnAtbWF4OiAtemYtYnAtdG8tZW0oJGJwLW1heCkgLSAoMS8xNik7XG4gIH1cblxuICAvLyBDb25kaXRpb25zIHRvIHNraXAgbWVkaWEgcXVlcnkgY3JlYXRpb25cbiAgLy8gLSBJdCdzIGEgbmFtZWQgYnJlYWtwb2ludCB0aGF0IHJlc29sdmVkIHRvIFwiMCBkb3duXCIgb3IgXCIwIHVwXCJcbiAgLy8gLSBJdCdzIGEgbnVtZXJpYyBicmVha3BvaW50IHRoYXQgcmVzb2x2ZWQgdG8gXCIwIFwiICsgYW55dGhpbmdcbiAgQGlmICRicCA+IDBlbSBvciAkZGlyID09ICdvbmx5JyBvciAkZGlyID09ICdkb3duJyB7XG4gICAgLy8gYG9ubHlgIHJhbmdlcyB1c2UgdGhlIGZvcm1hdCBgKG1pbi13aWR0aDogbikgYW5kIChtYXgtd2lkdGg6IG4pYFxuICAgIEBpZiAkZGlyID09ICdvbmx5JyB7XG4gICAgICAvLyBPbmx5IG5hbWVkIG1lZGlhIHF1ZXJpZXMgY2FuIGhhdmUgYW4gXCJvbmx5XCIgcmFuZ2VcbiAgICAgIEBpZiAkbmFtZWQgPT0gdHJ1ZSB7XG4gICAgICAgIC8vIE9ubHkgdXNlIFwibWluLXdpZHRoXCIgaWYgdGhlIGZsb29yIGlzIGdyZWF0ZXIgdGhhbiAwXG4gICAgICAgIEBpZiAkYnAgPiAwZW0ge1xuICAgICAgICAgICRzdHI6ICRzdHIgKyAnKG1pbi13aWR0aDogI3skYnB9KSc7XG5cbiAgICAgICAgICAvLyBPbmx5IGFkZCBcImFuZFwiIHRvIHRoZSBtZWRpYSBxdWVyeSBpZiB0aGVyZSdzIGEgY2VpbGluZ1xuICAgICAgICAgIEBpZiAkYnAtbWF4ICE9IG51bGwge1xuICAgICAgICAgICAgJHN0cjogJHN0ciArICcgYW5kICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSB1c2UgXCJtYXgtd2lkdGhcIiBpZiB0aGVyZSdzIGEgY2VpbGluZ1xuICAgICAgICBAaWYgJGJwLW1heCAhPSBudWxsIHtcbiAgICAgICAgICAkc3RyOiAkc3RyICsgJyhtYXgtd2lkdGg6ICN7JGJwLW1heH0pJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBAd2FybiAnYnJlYWtwb2ludCgpOiBPbmx5IG5hbWVkIG1lZGlhIHF1ZXJpZXMgY2FuIGhhdmUgYW4gYG9ubHlgIHJhbmdlLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYGRvd25gIHJhbmdlcyB1c2UgdGhlIGZvcm1hdCBgKG1heC13aWR0aDogbilgXG4gICAgQGVsc2UgaWYgJGRpciA9PSAnZG93bicge1xuICAgICAgJG1heDogaWYoJG5hbWVkLCAkYnAtbWF4LCAkYnApO1xuXG4gICAgICAvLyBTa2lwIG1lZGlhIHF1ZXJ5IGNyZWF0aW9uIGlmIGlucHV0IHZhbHVlIGlzIGV4YWN0bHkgXCIwIGRvd25cIixcbiAgICAgIC8vIHVubGVzcyB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBhcyBcInNtYWxsIGRvd25cIiwgaW4gd2hpY2ggY2FzZSBpdCdzIGp1c3QgXCJzbWFsbCBvbmx5XCJcbiAgICAgIEBpZiAkbmFtZWQgb3IgJGJwID4gMGVtIHtcbiAgICAgICAgQGlmICRtYXggIT0gbnVsbCB7XG4gICAgICAgICAgJHN0cjogJHN0ciArICcobWF4LXdpZHRoOiAjeyRtYXh9KSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBgdXBgIHJhbmdlcyB1c2UgdGhlIGZvcm1hdCBgKG1pbi13aWR0aDogbilgXG4gICAgQGVsc2UgaWYgJGJwID4gMGVtIHtcbiAgICAgICRzdHI6ICRzdHIgKyAnKG1pbi13aWR0aDogI3skYnB9KSc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkc3RyO1xufVxuXG4vLy8gV3JhcHMgYSBtZWRpYSBxdWVyeSBhcm91bmQgdGhlIGNvbnRlbnQgeW91IHB1dCBpbnNpZGUgdGhlIG1peGluLiBUaGlzIG1peGluIGFjY2VwdHMgYSBudW1iZXIgb2YgdmFsdWVzOlxuLy8vICAtIElmIGEgc3RyaW5nIGlzIHBhc3NlZCwgdGhlIG1peGluIHdpbGwgbG9vayBmb3IgaXQgaW4gdGhlIGAkYnJlYWtwb2ludHNgIG1hcCwgYW5kIHVzZSBhIG1lZGlhIHF1ZXJ5IHRoZXJlLlxuLy8vICAtIElmIGEgcGl4ZWwgdmFsdWUgaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBlbSB2YWx1ZSB1c2luZyBgJGdsb2JhbC1mb250LXNpemVgIGFzIHRoZSBiYXNlLlxuLy8vICAtIElmIGEgcmVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHVuaXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGVtLlxuLy8vICAtIElmIGFuIGVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcy1pcy5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWx1ZSAtIEJyZWFrcG9pbnQgbmFtZSwgb3IgcHgsIHJlbSwgb3IgZW0gdmFsdWUgdG8gcHJvY2Vzcy5cbi8vL1xuLy8vIEBvdXRwdXQgSWYgdGhlIGJyZWFrcG9pbnQgaXMgXCIwcHggYW5kIGxhcmdlclwiLCBvdXRwdXRzIHRoZSBjb250ZW50IGFzLWlzLiBPdGhlcndpc2UsIG91dHB1dHMgdGhlIGNvbnRlbnQgd3JhcHBlZCBpbiBhIG1lZGlhIHF1ZXJ5LlxuQG1peGluIGJyZWFrcG9pbnQoJHZhbHVlKSB7XG4gICRzdHI6IGJyZWFrcG9pbnQoJHZhbHVlKTtcbiAgJGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICR2YWx1ZSk7XG4gICRwYnA6IGluZGV4KCQtemYtYnJlYWtwb2ludHMta2V5cywgJHByaW50LWJyZWFrcG9pbnQpO1xuXG4gIC8vIElmICRzdHIgaXMgc3RpbGwgYW4gZW1wdHkgc3RyaW5nLCBubyBtZWRpYSBxdWVyeSBpcyBuZWVkZWRcbiAgQGlmICRzdHIgPT0gJycge1xuICAgIEBjb250ZW50O1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCB3cmFwIHRoZSBjb250ZW50IGluIGEgbWVkaWEgcXVlcnlcbiAgQGVsc2Uge1xuICAgIC8vIEZvciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHByaW50LWJyZWFrcG9pbnQsIGFkZCBwcmludCB0byB0aGUgbWVkaWEgdHlwZXNcbiAgICBAaWYgJGJwICE9IG51bGwgYW5kICRicCA8PSAkcGJwIHtcbiAgICAgIEBtZWRpYSBwcmludCwgc2NyZWVuIGFuZCAjeyRzdHJ9IHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAjeyRzdHJ9IHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBDb252ZXJzIHRoZSBicmVha3BvaW50cyBtYXAgdG8gYSBVUkwtZW5jb2RlZCBzdHJpbmcsIGxpa2UgdGhpczogYGtleTE9dmFsdWUxJmtleTI9dmFsdWUyYC4gVGhlIHZhbHVlIGlzIHRoZW4gZHJvcHBlZCBpbnRvIHRoZSBDU1MgZm9yIGEgc3BlY2lhbCBgPG1ldGE+YCB0YWcsIHdoaWNoIGlzIHJlYWQgYnkgdGhlIEZvdW5kYXRpb24gSmF2YVNjcmlwdC4gVGhpcyBpcyBob3cgd2UgdHJhbnNmZXIgdmFsdWVzIGZyb20gU2FzcyB0byBKYXZhU2NyaXB0LCBzbyB0aGV5IGNhbiBiZSBkZWZpbmVkIGluIG9uZSBwbGFjZS5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TWFwfSAkbWFwIC0gTWFwIHRvIGNvbnZlcnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7U3RyaW5nfSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBtYXAncyBjb250ZW50cy5cbkBmdW5jdGlvbiAtemYtYnAtc2VyaWFsaXplKCRtYXApIHtcbiAgJHN0cjogJyc7XG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkbWFwIHtcbiAgICAkc3RyOiAkc3RyICsgJGtleSArICc9JyArIC16Zi1icC10by1lbSgkdmFsdWUpICsgJyYnO1xuICB9XG4gICRzdHI6IHN0ci1zbGljZSgkc3RyLCAxLCAtMik7XG5cbiAgQHJldHVybiAkc3RyO1xufVxuXG4vLy8gRmluZCB0aGUgbmV4dCBrZXkgaW4gYSBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byB0cmF2ZXJzZS5cbi8vLyBAcGFyYW0ge01peGVkfSAka2V5IC0gS2V5IHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge01peGVkfSBUaGUgdmFsdWUgZm9yIHRoZSBrZXkgYWZ0ZXIgYCRrZXlgLCBpZiBgJGtleWAgd2FzIGZvdW5kLiBJZiBgJGtleWAgd2FzIG5vdCBmb3VuZCwgb3IgYCRrZXlgIHdhcyB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgbWFwLCByZXR1cm5zIGBudWxsYC5cbkBmdW5jdGlvbiAtemYtbWFwLW5leHQoJG1hcCwgJGtleSkge1xuXG4gIC8vIFN0b3JlIHRoZSBrZXlzIG9mIHRoZSBtYXAgYXMgYSBsaXN0XG4gICR2YWx1ZXM6IG1hcC1rZXlzKCRtYXApO1xuXG4gICRpOiAwO1xuXG4gIC8vIElmIHRoZSBLZXkgRXhpc3RzLCBHZXQgdGhlIGluZGV4IG9mIHRoZSBrZXkgd2l0aGluIHRoZSBtYXAgYW5kIGFkZCAxIHRvIGl0IGZvciB0aGUgbmV4dCBicmVha3BvaW50IGluIHRoZSBtYXBcbiAgQGlmIChtYXAtaGFzLWtleSgkbWFwLCAka2V5KSkge1xuICAgICRpOiBpbmRleCgkdmFsdWVzLCAka2V5KSArIDE7XG4gIH1cblxuICAvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsIG9yIGl0J3MgdGhlIGxhc3Qga2V5IGluIHRoZSBtYXAsIHJldHVybiBudWxsXG4gIEBpZiAoJGkgPiBsZW5ndGgoJG1hcCkgb3IgJGkgPT0gMCkge1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgdmFsdWVcbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gbWFwLWdldCgkbWFwLCBudGgoJHZhbHVlcywgJGkpKTtcbiAgfVxuXG59XG5cbi8vLyBHZXQgYSB2YWx1ZSBmb3IgYSBicmVha3BvaW50IGZyb20gYSByZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIHNpbmdsZSB2YWx1ZSwgcmV0dXJuIGl0IHJlZ2FyZGxlc3Mgb2YgYCR2YWx1ZWAuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBoYXMgdGhlIGtleSBgJHZhbHVlYCwgdGhlIGV4YWN0IGJyZWFrcG9pbnQgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBkb2VzICpub3QqIGhhdmUgdGhlIGJyZWFrcG9pbnQsIHRoZSB2YWx1ZSBtYXRjaGluZyB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBpbiB0aGUgY29uZmlnIG1hcCBpcyByZXR1cm5lZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIFJlc3BvbnNpdmUgY29uZmlnIG1hcCBvciBzaW5nbGUgdmFsdWUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUgdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TWl4ZWR9IFRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUuXG5AZnVuY3Rpb24gLXpmLWdldC1icC12YWwoJG1hcCwgJHZhbHVlKSB7XG4gIC8vIElmIHRoZSBnaXZlbiBtYXAgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdFxuICBAaWYgdHlwZS1vZigkbWFwKSA9PSAnbnVtYmVyJyB7XG4gICAgQHJldHVybiAkbWFwO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgZ2xvYmFsbHlcbiAgQGlmIG5vdCBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCBuYW1lIGV4aXN0cyBpbiB0aGUgbG9jYWwgY29uZmlnIG1hcFxuICBAZWxzZSBpZiBtYXAtaGFzLWtleSgkbWFwLCAkdmFsdWUpIHtcbiAgICAvLyBJZiBpdCBkb2VzLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgJHZhbHVlKTtcbiAgfVxuICAvLyBPdGhlcndpc2UsIGZpbmQgdGhlIG5leHQgbG93ZXN0IGJyZWFrcG9pbnQgYW5kIHJldHVybiB0aGF0IHZhbHVlXG4gIEBlbHNlIHtcbiAgICAkYW5jaG9yOiBudWxsO1xuICAgICRmb3VuZDogZmFsc2U7XG5cbiAgICBAZWFjaCAka2V5LCAkdmFsIGluICRicmVha3BvaW50cyB7XG4gICAgICBAaWYgbm90ICRmb3VuZCB7XG4gICAgICAgIEBpZiBtYXAtaGFzLWtleSgkbWFwLCAka2V5KSB7XG4gICAgICAgICAgJGFuY2hvcjogJGtleTtcbiAgICAgICAgfVxuICAgICAgICBAaWYgJGtleSA9PSAkdmFsdWUge1xuICAgICAgICAgICRmb3VuZDogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gbWFwLWdldCgkbWFwLCAkYW5jaG9yKTtcbiAgfVxufVxuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBzbWFsbCkge1xuICAkc21hbGwtdXA6IHNjcmVlbjtcbiAgJHNtYWxsLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHNtYWxsIG9ubHkpfScpO1xufVxuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBtZWRpdW0pIHtcbiAgJG1lZGl1bS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQobWVkaXVtKX0nKTtcbiAgJG1lZGl1bS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChtZWRpdW0gb25seSl9Jyk7XG59XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIGxhcmdlKSB7XG4gICRsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQobGFyZ2UpfScpO1xuICAkbGFyZ2Utb25seTogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQobGFyZ2Ugb25seSl9Jyk7XG59XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIHhsYXJnZSkge1xuICAkeGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2UpfScpO1xuICAkeGxhcmdlLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHhsYXJnZSBvbmx5KX0nKTtcbn1cblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgeHhsYXJnZSkge1xuICAkeHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeHhsYXJnZSl9Jyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBncmlkXG4vLy8vXG5cbi8vLyBTZXQgdGhlIHdpZHRoIG9mIGEgZ3JpZCBjb2x1bW4uXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkd2lkdGggWyRncmlkLWNvbHVtbi1jb3VudF0gLSBXaWR0aCB0byBtYWtlIHRoZSBjb2x1bW4uIFlvdSBjYW4gcGFzcyBpbiBhbnkgdmFsdWUgYWNjZXB0ZWQgYnkgdGhlIGBncmlkLWNvbHVtbigpYCBmdW5jdGlvbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbkBtaXhpbiBncmlkLWNvbHVtbi1zaXplKFxuICAkY29sdW1uczogJGdyaWQtY29sdW1uLWNvdW50XG4pIHtcbiAgd2lkdGg6IGdyaWQtY29sdW1uKCRjb2x1bW5zKTtcbn1cblxuLy8vIFNob3J0aGFuZCBmb3IgYGdyaWQtY29sdW1uLXNpemUoKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLXNpemVcbkBtaXhpbiBncmlkLWNvbC1zaXplKFxuICAkY29sdW1uczogJGdyaWQtY29sdW1uLWNvdW50XG4pIHtcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4tc2l6ZSgkY29sdW1ucyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBncmlkXG4vLy8vXG5cbi8vLyBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIGNvbHVtbiBiYXNlZCBvbiBhIG51bWJlciBvZiBmYWN0b3JzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGNvbHVtbnNcbi8vLyAgIFdpZHRoIG9mIHRoZSBjb2x1bW4uIEFjY2VwdHMgbXVsdGlwbGUgdmFsdWVzOlxuLy8vICAgLSBBIHBlcmNlbnRhZ2UgdmFsdWUgd2lsbCBtYWtlIHRoZSBjb2x1bW4gdGhhdCBleGFjdCBzaXplLlxuLy8vICAgLSBBIHNpbmdsZSBkaWdpdCB3aWxsIG1ha2UgdGhlIGNvbHVtbiBzcGFuIHRoYXQgbnVtYmVyIG9mIGNvbHVtbnMgd2lkZSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29sdW1uIGNvdW50IG9mIHRoZSBwYXJlbnQgcm93LlxuLy8vICAgLSBBIGxpc3Qgb2YgdGhlIGZvcm1hdCBcInggb2YgeVwiICh3aXRob3V0IHF1b3Rlcykgd2lsbCBtYWtlIGEgY29sdW1uIHRoYXQgaXMgKngqIGNvbHVtbnMgd2lkZSwgYXNzdW1pbmcgKnkqIHRvdGFsIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBBIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB2YWx1ZS5cbkBmdW5jdGlvbiBncmlkLWNvbHVtbigkY29sdW1ucykge1xuICAkd2lkdGg6IDAlO1xuXG4gIC8vIFBhcnNpbmcgcGVyY2VudHMsIGRlY2ltYWxzLCBhbmQgY29sdW1uIGNvdW50c1xuICBAaWYgdHlwZS1vZigkY29sdW1ucykgPT0gJ251bWJlcicge1xuICAgIEBpZiB1bml0KCRjb2x1bW5zKSA9PSAnJScge1xuICAgICAgJHdpZHRoOiAkY29sdW1ucztcbiAgICB9XG4gICAgQGVsc2UgaWYgJGNvbHVtbnMgPCAxIHtcbiAgICAgICR3aWR0aDogcGVyY2VudGFnZSgkY29sdW1ucyk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICR3aWR0aDogcGVyY2VudGFnZSgkY29sdW1ucyAvICRncmlkLWNvbHVtbi1jb3VudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFyc2luZyBcIm4gb2YgblwiIGV4cHJlc3Npb25zXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGNvbHVtbnMpID09ICdsaXN0JyB7XG4gICAgQGlmIGxlbmd0aCgkY29sdW1ucykgIT0gMyB7XG4gICAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgZ3JpZC1jb2x1bW4oKS4gVXNlIHRoZSBmb3JtYXQgXCJuIG9mIG5cIi4nO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkd2lkdGg6IHBlcmNlbnRhZ2UobnRoKCRjb2x1bW5zLCAxKSAvIG50aCgkY29sdW1ucywgMykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFueXRoaW5nIGVsc2UgaXMgaW5jb3JyZWN0XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgZ3JpZC1jb2x1bW4oKS4gVXNlIGEgbnVtYmVyLCBkZWNpbWFsLCBwZXJjZW50YWdlLCBvciBcIm4gb2YgblwiLic7XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aDtcbn1cblxuLy8vIENyZWF0ZXMgYSBncmlkIGNvbHVtbi5cbi8vL1xuLy8vIEBwYXJhbSB7TWl4ZWR9ICRjb2x1bW5zIFskZ3JpZC1jb2x1bW4tY291bnRdIC0gV2lkdGggb2YgdGhlIGNvbHVtbi4gUmVmZXIgdG8gdGhlIGBncmlkLWNvbHVtbigpYCBmdW5jdGlvbiB0byBzZWUgcG9zc2libGUgdmFsdWVzLlxuLy8vIEBwYXJhbSB7TWl4ZWR9ICRndXR0ZXJzIFskZ3JpZC1jb2x1bW4tZ3V0dGVyXSAtIFNwYWNpbmcgYmV0d2VlbiBjb2x1bW5zLiBSZWZlciB0byB0aGUgYGdyaWQtY29sdW1uLWd1dHRlcigpYCBmdW5jdGlvbiB0byBzZWUgcG9zc2libGUgdmFsdWVzLlxuQG1peGluIGdyaWQtY29sdW1uKFxuICAkY29sdW1uczogJGdyaWQtY29sdW1uLWNvdW50LFxuICAkZ3V0dGVyczogJGdyaWQtY29sdW1uLWd1dHRlclxuKSB7XG4gIEBpbmNsdWRlIGdyaWQtY29sdW1uLXNpemUoJGNvbHVtbnMpO1xuICBmbG9hdDogJGdsb2JhbC1sZWZ0O1xuXG4gIC8vIEd1dHRlcnNcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4tZ3V0dGVyKCRndXR0ZXJzOiAkZ3V0dGVycyk7XG5cbiAgLy8gTGFzdCBjb2x1bW4gYWxpZ25tZW50XG4gIEBpZiAkZ3JpZC1jb2x1bW4tYWxpZ24tZWRnZSB7XG4gICAgJjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIGZsb2F0OiAkZ2xvYmFsLXJpZ2h0O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGdyaWQgY29sdW1uIHJvdy4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBhZGRpbmcgYC5yb3dgIGFuZCBgLmNvbHVtbmAgdG8gdGhlIHNhbWUgZWxlbWVudC5cbi8vL1xuLy8vIEBwYXJhbSB7TWl4ZWR9ICRndXR0ZXJzIFskZ3JpZC1jb2x1bW4tZ3V0dGVyXSAtIFdpZHRoIG9mIHRoZSBndXR0ZXJzIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBjb2x1bW4gcm93LiBSZWZlciB0byB0aGUgYGdyaWQtY29sdW1uLWd1dHRlcigpYCBmdW5jdGlvbiB0byBzZWUgcG9zc2libGUgdmFsdWVzLlxuQG1peGluIGdyaWQtY29sdW1uLXJvdyhcbiAgJGd1dHRlcnM6ICRncmlkLWNvbHVtbi1ndXR0ZXJcbikge1xuICBAaW5jbHVkZSBncmlkLXJvdztcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4oJGd1dHRlcnM6ICRndXR0ZXJzKTtcblxuICAmLFxuICAmOmxhc3QtY2hpbGQge1xuICAgIGZsb2F0OiBub25lO1xuICB9XG59XG5cbi8vLyBTaG9ydGhhbmQgZm9yIGBncmlkLWNvbHVtbigpYC5cbi8vLyBAYWxpYXMgZ3JpZC1jb2x1bW5cbkBmdW5jdGlvbiBncmlkLWNvbChcbiAgJGNvbHVtbnM6ICRncmlkLWNvbHVtbi1jb3VudFxuKSB7XG4gIEByZXR1cm4gZ3JpZC1jb2x1bW4oJGNvbHVtbnMpO1xufVxuXG4vLy8gU2hvcnRoYW5kIGZvciBgZ3JpZC1jb2x1bW4oKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uXG5AbWl4aW4gZ3JpZC1jb2woXG4gICRjb2x1bW5zOiAkZ3JpZC1jb2x1bW4tY291bnQsXG4gICRndXR0ZXJzOiAkZ3JpZC1jb2x1bW4tZ3V0dGVyXG4pIHtcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4oJGNvbHVtbnMsICRndXR0ZXJzKTtcbn1cblxuLy8vIFNob3J0aGFuZCBmb3IgYGdyaWQtY29sdW1uLXJvdygpYC5cbi8vLyBAYWxpYXMgZ3JpZC1jb2x1bW4tcm93XG5AbWl4aW4gZ3JpZC1jb2wtcm93KFxuICAkZ3V0dGVyczogJGdyaWQtY29sdW1uLWd1dHRlclxuKSB7XG4gIEBpbmNsdWRlIGdyaWQtY29sdW1uLXJvdygkZ3V0dGVycyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBncmlkXG4vLy8vXG5cbi8vLyBSZXBvc2l0aW9uIGEgY29sdW1uLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8S2V5d29yZH0gJHBvc2l0aW9uIC0gRGlyZWN0aW9uIGFuZCBhbW91bnQgdG8gbW92ZS4gVGhlIGNvbHVtbiB3aWxsIG1vdmUgZXF1YWwgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gY291bnQgc3BlY2lmaWVkLiBBIHBvc2l0aXZlIG51bWJlciB3aWxsIHB1c2ggdGhlIGNvbHVtbiB0byB0aGUgcmlnaHQsIHdoaWxlIGEgbmVnYXRpdmUgbnVtYmVyIHdpbGwgcHVsbCBpdCB0byB0aGUgbGVmdC4gU2V0IHRvIGNlbnRlciB0byBjZW50ZXIgdGhlIGNvbHVtbi5cbkBtaXhpbiBncmlkLWNvbHVtbi1wb3NpdGlvbigkcG9zaXRpb24pIHtcbiAgQGlmIHR5cGUtb2YoJHBvc2l0aW9uKSA9PSAnbnVtYmVyJyB7XG4gICAgJG9mZnNldDogcGVyY2VudGFnZSgkcG9zaXRpb24gLyAkZ3JpZC1jb2x1bW4tY291bnQpO1xuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJG9mZnNldDtcbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gY2VudGVyIHtcbiAgICAmLCAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICB9XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnV3Jvbmcgc3ludGF4IGZvciBncmlkLWNvbHVtbi1wb3NpdGlvbigpLiBFbnRlciBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIG51bWJlciwgb3IgY2VudGVyLic7XG4gIH1cbn1cblxuLy8vIFJlc2V0IGEgcG9zaXRpb24gZGVmaW5pdGlvbi5cbkBtaXhpbiBncmlkLWNvbHVtbi11bnBvc2l0aW9uIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi8vLyBPZmZzZXRzIGEgY29sdW1uIHRvIHRoZSByaWdodCBieSBgJG5gIGNvbHVtbnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJG4gLSBXaWR0aCB0byBvZmZzZXQgYnkuIFlvdSBjYW4gcGFzcyBpbiBhbnkgdmFsdWUgYWNjZXB0ZWQgYnkgdGhlIGBncmlkLWNvbHVtbigpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbkBtaXhpbiBncmlkLWNvbHVtbi1vZmZzZXQoJG4pIHtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogZ3JpZC1jb2x1bW4oJG4pO1xufVxuXG4vLy8gRGlzYWJsZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgbGFzdCBjb2x1bW4gaW4gYSByb3cgYWxpZ25pbmcgdG8gdGhlIG9wcG9zaXRlIGVkZ2UuXG5AbWl4aW4gZ3JpZC1jb2x1bW4tZW5kIHtcbiAgLy8gVGhpcyBleHRyYSBzcGVjaWZpY2l0eSBpcyByZXF1aXJlZCBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIGFwcGxpZWRcbiAgJjpsYXN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICAgIGZsb2F0OiAkZ2xvYmFsLWxlZnQ7XG4gIH1cbn1cblxuLy8vIFNob3J0aGFuZCBmb3IgYGdyaWQtY29sdW1uLXBvc2l0aW9uKClgLlxuLy8vIEBhbGlhcyBncmlkLWNvbHVtbi1wb3NpdGlvblxuQG1peGluIGdyaWQtY29sLXBvcygkcG9zaXRpb24pIHtcbiAgQGluY2x1ZGUgZ3JpZC1jb2x1bW4tcG9zaXRpb24oJHBvc2l0aW9uKTtcbn1cblxuLy8vIFNob3J0aGFuZCBmb3IgYGdyaWQtY29sdW1uLXVucG9zaXRpb24oKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLXVucG9zaXRpb25cbkBtaXhpbiBncmlkLWNvbC11bnBvcyB7XG4gIEBpbmNsdWRlIGdyaWQtY29sdW1uLXVucG9zaXRpb247XG59XG5cbi8vLyBTaG9ydGhhbmQgZm9yIGBncmlkLWNvbHVtbi1vZmZzZXQoKWAuXG4vLy8gQGFsaWFzIGdyaWQtY29sdW1uLW9mZnNldFxuQG1peGluIGdyaWQtY29sLW9mZigkbikge1xuICBAaW5jbHVkZSBncmlkLWNvbHVtbi1vZmZzZXQoJG4pO1xufVxuXG4vLy8gU2hvcnRoYW5kIGZvciBgZ3JpZC1jb2x1bW4tZW5kKClgLlxuLy8vIEBhbGlhcyBncmlkLWNvbHVtbi1lbmRcbkBtaXhpbiBncmlkLWNvbC1lbmQge1xuICBAaW5jbHVkZSBncmlkLWNvbHVtbi1lbmQ7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBncmlkXG4vLy8vXG5cbi8vLyBTaXplcyBjaGlsZCBlbGVtZW50cyBzbyB0aGF0IGAkbmAgbnVtYmVyIG9mIGl0ZW1zIGFwcGVhciBvbiBlYWNoIHJvdy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbiAtIE51bWJlciBvZiBlbGVtZW50cyB0byBkaXNwbGF5IHBlciByb3cuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzZWxlY3RvciBbJy5jb2x1bW4nXSAtIFNlbGVjdG9yKHMpIHRvIHVzZSBmb3IgY2hpbGQgZWxlbWVudHMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGd1dHRlclxuLy8vICAgVGhlIGd1dHRlciB0byBhcHBseSB0byBjaGlsZCBlbGVtZW50cy4gQWNjZXB0cyBtdWx0aXBsZSB2YWx1ZXM6XG4vLy8gICAtICRncmlkLWNvbHVtbi1ndXR0ZXIgd2lsbCB1c2UgdGhlIHZhbHVlcyBpbiB0aGUgJGdyaWQtY29sdW1uLWd1dHRlciBtYXAsIGluY2x1ZGluZyBicmVha3BvaW50IHNpemVzLlxuLy8vICAgLSBBIGZpeGVkIG51bWVyaWMgdmFsdWUgd2lsbCBhcHBseSB0aGlzIGd1dHRlciB0byBhbGwgYnJlYWtwb2ludHMuXG5AbWl4aW4gZ3JpZC1sYXlvdXQoXG4gICRuLFxuICAkc2VsZWN0b3I6ICcuY29sdW1uJyxcbiAgJGd1dHRlcjogbnVsbFxuKSB7XG4gICYgPiAjeyRzZWxlY3Rvcn0ge1xuICAgIGZsb2F0OiAkZ2xvYmFsLWxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoMS8kbik7XG5cbiAgICAvLyBJZiBhICRndXR0ZXIgdmFsdWUgaXMgcGFzc2VkXG4gICAgQGlmKCRndXR0ZXIpIHtcbiAgICAgIC8vIEd1dHRlcnNcbiAgICAgIEBpZiB0eXBlLW9mKCRndXR0ZXIpID09ICdtYXAnIHtcbiAgICAgICAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkZ3V0dGVyIHtcbiAgICAgICAgICAkcGFkZGluZzogcmVtLWNhbGMoJHZhbHVlKSAvIDI7XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZztcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZWxzZSBpZiB0eXBlLW9mKCRndXR0ZXIpID09ICdudW1iZXInIGFuZCBzdHJpcC11bml0KCRndXR0ZXIpID4gMCB7XG4gICAgICAgICRwYWRkaW5nOiByZW0tY2FsYygkZ3V0dGVyKSAvIDI7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bnRoLW9mLXR5cGUoMW4pIHtcbiAgICAgIGNsZWFyOiBub25lO1xuICAgIH1cblxuICAgICY6bnRoLW9mLXR5cGUoI3skbn1uKzEpIHtcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBmbG9hdDogJGdsb2JhbC1sZWZ0O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBleHRyYSBDU1MgdG8gYmxvY2sgZ3JpZCBjaGlsZHJlbiBzbyB0aGUgbGFzdCBpdGVtcyBpbiB0aGUgcm93IGNlbnRlciBhdXRvbWF0aWNhbGx5LiBBcHBseSB0aGlzIHRvIHRoZSBjb2x1bW5zLCBub3QgdGhlIHJvdy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbiAtIE51bWJlciBvZiBpdGVtcyB0aGF0IGFwcGVhciBpbiBlYWNoIHJvdy5cbkBtaXhpbiBncmlkLWxheW91dC1jZW50ZXItbGFzdCgkbikge1xuICBAZm9yICRpIGZyb20gMSB0byAkbiB7XG4gICAgQGlmICRpID09IDEge1xuICAgICAgJjpudGgtY2hpbGQoI3skbn1uKzEpOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogKDEwMCAtIDEwMC8kbiAqICRpKSAvIDIgKiAxJTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJjpudGgtY2hpbGQoI3skbn1uKzEpOm50aC1sYXN0LWNoaWxkKCN7JGl9KSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAoMTAwIC0gMTAwLyRuICogJGkpIC8gMiAqIDElO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdHlwb2dyYXBoeS1iYXNlXG4vLy8vXG5cbi8vIEJhc2UgVHlwb2dyYXBoeVxuLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbi8vIFRoZXNlIGFyZSBzdHlsZXMgYXBwbGllZCB0byBiYXNpYyBIVE1MIHRhZ3MsIGluY2x1ZGluZzpcbi8vICAgLSBQYXJhZ3JhcGhzIDxwPlxuLy8gICAtIEJvbGQvaXRhbGljcyA8Yj4gPHN0cm9uZz4gPGk+IDxlbT5cbi8vICAgLSBTbWFsbCB0ZXh0IDxzbWFsbD5cbi8vICAgLSBIZWFkaW5ncyA8aDE+LTxoNj5cbi8vICAgLSBBbmNob3JzIDxhPlxuLy8gICAtIERpdmlkZXJzIDxocj5cbi8vICAgLSBMaXN0cyA8dWw+IDxvbD4gPGRsPlxuLy8gICAtIEJsb2NrcXVvdGVzIDxibG9ja3F1b3RlPlxuLy8gICAtIENvZGUgYmxvY2tzIDxjb2RlPlxuLy8gICAtIEFiYnJldmlhdGlvbnMgPGFiYnI+XG4vLyAgIC0gQ2l0YXRpb25zIDxjaXRlPlxuLy8gICAtIEtleXN0cm9rZXMgPGtiZD5cblxuLy8vIEZvbnQgZmFtaWx5IGZvciBoZWFkZXIgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGhlYWRlci1mb250LWZhbWlseTogJGJvZHktZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiBoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzdHlsZSAoZS5nLiBpdGFsaWNpemVkKSBvZiBoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGhlYWRlci1mb250LXN0eWxlOiBub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0YWNrIHVzZWQgZm9yIGVsZW1lbnRzIHRoYXQgdXNlIG1vbm9zcGFjZWQgdHlwZSwgc3VjaCBhcyBjb2RlIHNhbXBsZXNcbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIENvdXJpZXIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItY29sb3I6IGluaGVyaXQgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBvZiBoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJGhlYWRlci1saW5laGVpZ2h0OiAxLjQgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIFN0eWxlcyBmb3IgaGVhZGluZ3MgYXQgdmFyaW91cyBzY3JlZW4gc2l6ZXMuIEVhY2gga2V5IGlzIGEgYnJlYWtwb2ludCwgYW5kIGVhY2ggdmFsdWUgaXMgYSBtYXAgb2YgaGVhZGluZyBzdHlsZXMuXG4vLy8gQHR5cGUgTWFwXG4kaGVhZGVyLXN0eWxlczogKFxuICBzbWFsbDogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogMjQpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMTkpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMTgpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMTcpLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuICBtZWRpdW06IChcbiAgICAnaDEnOiAoJ2ZvbnQtc2l6ZSc6IDQ4KSxcbiAgICAnaDInOiAoJ2ZvbnQtc2l6ZSc6IDQwKSxcbiAgICAnaDMnOiAoJ2ZvbnQtc2l6ZSc6IDMxKSxcbiAgICAnaDQnOiAoJ2ZvbnQtc2l6ZSc6IDI1KSxcbiAgICAnaDUnOiAoJ2ZvbnQtc2l6ZSc6IDIwKSxcbiAgICAnaDYnOiAoJ2ZvbnQtc2l6ZSc6IDE2KSxcbiAgKSxcbikgIWRlZmF1bHQ7XG5cbi8vICRoZWFkZXItc3R5bGVzIG1hcCBpcyBidWlsdCBmcm9tICRoZWFkZXItc2l6ZXMgaW4gb3JkZXIgdG8gZW5zdXJlIGRvd253YXJkIGNvbXBhdGliaWxpdHlcbi8vIHdoZW4gJGhlYWRlci1zaXplcyBpcyBkZXByZWNpYXRlZCwgJGhlYWRlci1zdHlsZXMgbmVlZHMgdG8gZ2V0ICFkZWZhdWx0IHZhbHVlcyBsaWtlIHNldHRpbmdzLnNjc3NcbkBmdW5jdGlvbiBidWlsZF9mcm9tX2hlYWRlci1zaXplcygkaGVhZGVyLXNpemVzKSB7XG4gIEB3YXJuICdOb3RlLCB0aGF0ICRoZWFkZXItc2l6ZXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCAkaGVhZGVyLXN0eWxlcy4gJGhlYWRlci1zaXplcyBzdGlsbCB3b3JrcywgYnV0IGl0IGlzIGdvaW5nIHRvIGJlIGRlcHJlY2lhdGVkLic7XG4gICRoZWFkZXItc3R5bGVzOiAoKTtcbiAgQGVhY2ggJHNpemUsICRoZWFkZXJzIGluICRoZWFkZXItc2l6ZXMge1xuICAgICRoZWFkZXItbWFwOiAoKTtcbiAgICBAZWFjaCAkaGVhZGVyLCAkZm9udC1zaXplIGluICRoZWFkZXJzIHtcbiAgICAgICRoZWFkZXItbWFwOiBtYXAtbWVyZ2UoJGhlYWRlci1tYXAsICgkaGVhZGVyOiAoJ2ZvbnQtc2l6ZSc6ICRmb250LXNpemUpKSk7ICBcbiAgICB9XG4gICAgJGhlYWRlci1zdHlsZXM6IG1hcC1tZXJnZSgkaGVhZGVyLXN0eWxlcywgKCRzaXplOiAkaGVhZGVyLW1hcCkpO1xuICB9XG4gIEByZXR1cm4gJGhlYWRlci1zdHlsZXM7XG59XG5cbi8vIElmIGl0IGV4aXN0cyAkaGVhZGVycy1zaXplcyBpcyB1c2VkIHRvIGJ1aWxkICRoZWFkZXItc3R5bGVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGhlYWRlci1zaXplcykge1xuICAkaGVhZGVyLXN0eWxlczogYnVpbGRfZnJvbV9oZWFkZXItc2l6ZXMoJGhlYWRlci1zaXplcyk7XG59XG5cbi8vLyBUZXh0IHJlbmRlcmluZyBtZXRob2Qgb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiBgPHNtYWxsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc21hbGwtZm9udC1zaXplOiA4MCUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBgPHNtYWxsPmAgZWxlbWVudHMgd2hlbiBwbGFjZWQgaW5zaWRlIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTGluZSBoZWlnaHQgb2YgdGV4dCBpbnNpZGUgYDxwPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNiAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFRleHQgcmVuZGVyaW5nIG1ldGhvZCBmb3IgcGFyYWdyYXBoIHRleHQuXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHkgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGNvZGUgc2FtcGxlcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNvZGUtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIGNvZGUgc2FtcGxlcy5cbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kY29kZS1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIHRleHQgaW4gY29kZSBzYW1wbGVzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGNvZGUtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgY29kZSBzYW1wbGVzLlxuLy8vIEB0eXBlIENvbG9yXG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgY29kZSBzYW1wbGVzLlxuLy8vIEB0eXBlIExpc3RcbiRjb2RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgYXJvdW5kIHRleHQgb2YgY29kZSBzYW1wbGVzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRjb2RlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNSAxKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIGxpbmtzLlxuLy8vIEB0eXBlIENvbG9yXG4kYW5jaG9yLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIGxpbmtzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIENvbG9yXG4kYW5jaG9yLWNvbG9yLWhvdmVyOiBzY2FsZS1jb2xvcigkYW5jaG9yLWNvbG9yLCAkbGlnaHRuZXNzOiAtMTQlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdGV4dCBkZW9jcmF0aW9uIGZvciBsaW5rcy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRhbmNob3ItdGV4dC1kZWNvcmF0aW9uOiBub25lICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGRlY29yYXRpb24gZm9yIGxpbmtzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXI6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBNYXhpbXVtIHdpZHRoIG9mIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoci13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGZvciBhIGRpdmlkZXIuXG4vLy8gQHR5cGUgTGlzdFxuJGhyLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbWFyZ2luIGZvciBhIGRpdmlkZXIuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGhyLW1hcmdpbjogcmVtLWNhbGMoMjApIGF1dG8gIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgaXRlbXMgaW4gYSBsaXN0LlxuLy8vIEB0eXBlIE51bWJlclxuJGxpc3QtbGluZWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0ICFkZWZhdWx0O1xuXG4vLy8gQm90dG9tIG1hcmdpbiBmb3IgaXRlbXMgaW4gYSBsaXN0LlxuLy8vIEB0eXBlIE51bWJlclxuJGxpc3QtbWFyZ2luLWJvdHRvbTogJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tICFkZWZhdWx0O1xuXG4vLy8gQnVsbGV0IHR5cGUgdG8gdXNlIGZvciB1bm9yZGVyZWQgbGlzdHMgKGUuZy4sIGBzcXVhcmVgLCBgY2lyY2xlYCwgYGRpc2NgKS5cbi8vLyBAdHlwZSBTdHJpbmdcbiRsaXN0LXN0eWxlLXR5cGU6IGRpc2MgIWRlZmF1bHQ7XG5cbi8vLyBQb3NpdGlvbmluZyBmb3IgYnVsbGV0cyBvbiB1bm9yZGVyZWQgbGlzdCBpdGVtcy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlICFkZWZhdWx0O1xuXG4vLy8gTGVmdCAob3IgcmlnaHQpIG1hcmdpbiBmb3IgbGlzdHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1zaWRlLW1hcmdpbjogMS4yNXJlbSAhZGVmYXVsdDtcblxuLy8vIExlZnQgKG9yIHJpZ2h0KSBtYXJnaW4gZm9yIGEgbGlzdCBpbnNpZGUgYSBsaXN0LlxuLy8vIEB0eXBlIE51bWJlclxuJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luOiAxLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gQm90dG9tIG1hcmdpbiBmb3IgYDxkbD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRlZm5saXN0LW1hcmdpbi1ib3R0b206IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBmb3IgYDxkdD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGRlZm5saXN0LXRlcm0td2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBiZXR3ZWVuIGA8ZHQ+YCBhbmQgYDxkZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRlZm5saXN0LXRlcm0tbWFyZ2luLWJvdHRvbTogMC4zcmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBgPGJsb2NrcXVvdGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGJsb2NrcXVvdGUtY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGluc2lkZSBhIGA8YmxvY2txdW90ZT5gIGVsZW1lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGJsb2NrcXVvdGUtcGFkZGluZzogcmVtLWNhbGMoOSAyMCAwIDE5KSAhZGVmYXVsdDtcblxuLy8vIFNpZGUgYm9yZGVyIGZvciBgPGJsb2NrcXVvdGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBMaXN0XG4kYmxvY2txdW90ZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgZm9yIGA8Y2l0ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGNpdGUtZm9udC1zaXplOiByZW0tY2FsYygxMykgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIGZvciBgPGNpdGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNpdGUtY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQc2V1ZG8gY29udGVudCBmb3IgYDxjaXRlPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kY2l0ZS1wc2V1ZG8tY29udGVudDogJ1xcMjAxNCBcXDAwMjAnICFkZWZhdWx0O1xuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGtleXN0cm9rZS1wYWRkaW5nOiByZW0tY2FsYygyIDQgMCkgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBgPGtiZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBib3JkZXIgc3R5bGUgZm9yIGA8YWJicj5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2sgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktYmFzZSB7XG4gIC8vIFR5cG9ncmFwaHkgcmVzZXRzXG4gIGRpdixcbiAgZGwsXG4gIGR0LFxuICBkZCxcbiAgdWwsXG4gIG9sLFxuICBsaSxcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcHJlLFxuICBmb3JtLFxuICBwLFxuICBibG9ja3F1b3RlLFxuICB0aCxcbiAgdGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGFyYWdyYXBoc1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICB0ZXh0LXJlbmRlcmluZzogJHBhcmFncmFwaC10ZXh0LXJlbmRlcmluZztcbiAgfVxuXG4gIC8vIEVtcGhhc2l6ZWQgdGV4dFxuICBlbSxcbiAgaSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG5cbiAgLy8gU3Ryb25nIHRleHRcbiAgc3Ryb25nLFxuICBiIHtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEhlYWRpbmdzXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYge1xuICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtc3R5bGU6ICRoZWFkZXItZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGhlYWRlci1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGhlYWRlci1jb2xvcjtcbiAgICB0ZXh0LXJlbmRlcmluZzogJGhlYWRlci10ZXh0LXJlbmRlcmluZztcblxuICAgIHNtYWxsIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgY29sb3I6ICRoZWFkZXItc21hbGwtZm9udC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkaW5nIHN0eWxlc1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zdHlsZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgIEBlYWNoICRoZWFkZXIsICRoZWFkZXItZGVmcyBpbiAkaGVhZGVycyB7XG4gICAgICAgICRmb250LXNpemUtdGVtcDogMXJlbTtcbiAgICAgICAgI3skaGVhZGVyfSB7XG5cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBmb250LXNpemUpIHtcbiAgICAgICAgICAgICRmb250LXNpemUtdGVtcDogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIGZvbnQtc2l6ZSkpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfSBAZWxzZSBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGZzKSB7XG4gICAgICAgICAgICAkZm9udC1zaXplLXRlbXA6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBmcykpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtdGVtcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRoZWFkZXItZGVmcywgbGluZS1oZWlnaHQpIHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB1bml0bGVzcy1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBsaW5lLWhlaWdodCksICRmb250LXNpemUtdGVtcCk7XG4gICAgICAgICAgfSBAZWxzZSBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGxoKSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdW5pdGxlc3MtY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbGgpLCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH0gQGVsc2UgaWYgJHNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXRsZXNzLWNhbGMoJGhlYWRlci1saW5laGVpZ2h0LCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIG1hcmdpbi10b3ApIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBtYXJnaW4tdG9wKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIG10KSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbXQpKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIG1hcmdpbi1ib3R0b20pIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBtYXJnaW4tYm90dG9tKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIG1iKSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWIpKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IHJlbS1jYWxjKCRoZWFkZXItbWFyZ2luLWJvdHRvbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGlua3NcbiAgYSB7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRhbmNob3ItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiAkYW5jaG9yLXRleHQtZGVjb3JhdGlvbjtcblxuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJGFuY2hvci1jb2xvci1ob3ZlcjtcbiAgICAgIEBpZiAkYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3ZlciAhPSAkYW5jaG9yLXRleHQtZGVjb3JhdGlvbiB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgIGJvcmRlcjogMDtcbiAgICB9XG4gIH1cblxuICAvLyBIb3Jpem9udGFsIHJ1bGVcbiAgaHIge1xuICAgIGNsZWFyOiBib3RoO1xuXG4gICAgbWF4LXdpZHRoOiAkaHItd2lkdGg7XG4gICAgaGVpZ2h0OiAwO1xuICAgIG1hcmdpbjogJGhyLW1hcmdpbjtcblxuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1ib3R0b206ICRoci1ib3JkZXI7XG4gICAgYm9yZGVyLWxlZnQ6IDA7XG4gIH1cblxuICAvLyBMaXN0c1xuICB1bCxcbiAgb2wsXG4gIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkbGlzdC1tYXJnaW4tYm90dG9tO1xuICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246ICRsaXN0LXN0eWxlLXBvc2l0aW9uO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGlzdC1saW5laGVpZ2h0O1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtc1xuICBsaSB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICB9XG5cbiAgLy8gVW5vcmRlcmVkIGxpc3RzXG4gIHVsIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkbGlzdC1zaWRlLW1hcmdpbjtcbiAgICBsaXN0LXN0eWxlLXR5cGU6ICRsaXN0LXN0eWxlLXR5cGU7XG4gIH1cblxuICAvLyBPcmRlcmVkIGxpc3RzXG4gIG9sIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkbGlzdC1zaWRlLW1hcmdpbjtcbiAgfVxuXG4gIC8vIE5lc3RlZCB1bm9yZGVyZWQvb3JkZXJlZCBsaXN0c1xuICB1bCwgb2wge1xuICAgICYgJiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW47XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluaXRpb24gbGlzdHNcbiAgZGwge1xuICAgIG1hcmdpbi1ib3R0b206ICRkZWZubGlzdC1tYXJnaW4tYm90dG9tO1xuXG4gICAgZHQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogJGRlZm5saXN0LXRlcm0tbWFyZ2luLWJvdHRvbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZGVmbmxpc3QtdGVybS13ZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQmxvY2txdW90ZXNcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAwIDAgJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tO1xuICAgIHBhZGRpbmc6ICRibG9ja3F1b3RlLXBhZGRpbmc7XG4gICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogJGJsb2NrcXVvdGUtYm9yZGVyO1xuXG4gICAgJiwgcCB7XG4gICAgICBsaW5lLWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0O1xuICAgICAgY29sb3I6ICRibG9ja3F1b3RlLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIENpdGF0aW9uc1xuICBjaXRlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6ICRjaXRlLWZvbnQtc2l6ZTtcbiAgICBjb2xvcjogJGNpdGUtY29sb3I7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAkY2l0ZS1wc2V1ZG8tY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvLyBBYmJyZXZpYXRpb25zXG4gIGFiYnIge1xuICAgIGJvcmRlci1ib3R0b206ICRhYmJyLXVuZGVybGluZTtcbiAgICBjb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiAgICBjdXJzb3I6IGhlbHA7XG4gIH1cblxuICAvLyBGaWd1cmVzXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG4gIFxuICAvLyBDb2RlXG4gIGNvZGUge1xuICAgIHBhZGRpbmc6ICRjb2RlLXBhZGRpbmc7XG5cbiAgICBib3JkZXI6ICRjb2RlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29kZS1iYWNrZ3JvdW5kO1xuXG4gICAgZm9udC1mYW1pbHk6ICRjb2RlLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtd2VpZ2h0OiAkY29kZS1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGNvZGUtY29sb3I7XG4gIH1cblxuICAvLyBLZXlzdHJva2VzXG4gIGtiZCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6ICRrZXlzdHJva2UtcGFkZGluZztcblxuICAgIGJhY2tncm91bmQtY29sb3I6ICRrZXlzdHJva2UtYmFja2dyb3VuZDtcblxuICAgIGZvbnQtZmFtaWx5OiAka2V5c3Ryb2tlLWZvbnQ7XG4gICAgY29sb3I6ICRrZXlzdHJva2UtY29sb3I7XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRrZXlzdHJva2UtcmFkaXVzKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAka2V5c3Ryb2tlLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHR5cG9ncmFwaHktaGVscGVyc1xuLy8vL1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGxlYWQgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsZWFkLWZvbnQtc2l6ZTogJGdsb2JhbC1mb250LXNpemUgKiAxLjI1ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBsaW5lIGhlaWdodCBmb3IgbGVhZCBwYXJhZ3JhcGhzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxlYWQtbGluZWhlaWdodDogMS42ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBsaW5lIGhlaWdodCBmb3Igc3ViaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdWJoZWFkZXItbGluZWhlaWdodDogMS40ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIENvbG9yXG4kc3ViaGVhZGVyLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHdlaWdodCBmb3Igc3ViaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRzdWJoZWFkZXItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdG9wIG1hcmdpbiBmb3Igc3ViaGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3ViaGVhZGVyLW1hcmdpbi10b3A6IDAuMnJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmb3Igc3ViaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdWJoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIHN0YXRpc3RpYyBudW1iZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN0YXQtZm9udC1zaXplOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktaGVscGVycyB7XG4gIC8vIFVzZSB0byBjcmVhdGUgYSBzdWJoZWFkaW5nIHVuZGVyIGEgbWFpbiBoZWFkZXJcbiAgLy8gTWFrZSBzdXJlIHlvdSBwYWlyIHRoZSB0d28gZWxlbWVudHMgaW4gYSA8aGVhZGVyPiBlbGVtZW50LCBsaWtlIHRoaXM6XG4gIC8vIDxoZWFkZXI+XG4gIC8vICAgPGgxPkhlYWRpbmc8L2gxPlxuICAvLyAgIDxoMj5TdWJoZWFkaW5nPC9oMj5cbiAgLy8gPC9oZWFkZXI+XG4gIC5zdWJoZWFkZXIge1xuICAgIG1hcmdpbi10b3A6ICRzdWJoZWFkZXItbWFyZ2luLXRvcDtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3ViaGVhZGVyLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXdlaWdodDogJHN1YmhlYWRlci1mb250LXdlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJHN1YmhlYWRlci1saW5laGVpZ2h0O1xuICAgIGNvbG9yOiAkc3ViaGVhZGVyLWNvbG9yO1xuICB9XG5cbiAgLy8gVXNlIHRvIHN0eWxlIGFuIGludHJvZHVjdG9yeSBsZWFkLCBkZWNrLCBibHVyYiwgZXRjLlxuICAubGVhZCB7XG4gICAgZm9udC1zaXplOiAkbGVhZC1mb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRsZWFkLWxpbmVoZWlnaHQ7XG4gIH1cblxuICAvLyBVc2UgdG8gc3R5bGUgYSBsYXJnZSBudW1iZXIgdG8gZGlzcGxheSBhIHN0YXRpc3RpY1xuICAuc3RhdCB7XG4gICAgZm9udC1zaXplOiAkc3RhdC1mb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG5cbiAgICBwICsgJiB7XG4gICAgICBtYXJnaW4tdG9wOiAtMXJlbTtcbiAgICB9XG4gIH1cblxuICAvLyBVc2UgdG8gcmVtb3ZlIHRoZSBidWxsZXRzIGZyb20gYW4gdW5vcmRlcmVkIGxpc3RcbiAgLm5vLWJ1bGxldCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tdGV4dC1hbGlnbm1lbnQge1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICBAZWFjaCAkYWxpZ24gaW4gKGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGp1c3RpZnkpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tdGV4dC0jeyRhbGlnbn0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJGFsaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgLnRleHQtI3skYWxpZ259IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246ICRhbGlnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8gSWYgYHRydWVgLCBhbGwgZWxlbWVudHMgd2lsbCBoYXZlIHRyYW5zcGFyZW50IGJhY2tncm91bmRzIHdoZW4gcHJpbnRlZCwgdG8gc2F2ZSBvbiBpbmsuXG4vLy8gQHR5cGUgQm9vbGVhblxuLy8vIEBncm91cCBnbG9iYWxcbiRwcmludC10cmFuc3BhcmVudC1iYWNrZ3JvdW5kczogdHJ1ZSAhZGVmYXVsdDtcbiRwcmludC1ocmVmczogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gc2Fzcy1saW50OmRpc2FibGUtYWxsXG5cbkBtaXhpbiBmb3VuZGF0aW9uLXByaW50LXN0eWxlcyB7XG4gIC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgKiB7XG4gICAgICBAaWYgJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuXG4gICAgICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgLy8gQmxhY2sgcHJpbnRzIGZhc3RlcjogaDVicC5jb20vc1xuICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgLmhpZGUtZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgICB0YWJsZS5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgICB0aGVhZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gICAgdGJvZHkuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICAgIHRyLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgICB0ZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICAgIHRoLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG5cbiAgICAvLyBEaXNwbGF5IHRoZSBVUkwgb2YgYSBsaW5rIGFmdGVyIHRoZSB0ZXh0XG4gICAgYSxcbiAgICBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4gICAgQGlmICRwcmludC1ocmVmcyB7XG4gICAgICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogJyAoJyBhdHRyKGhyZWYpICcpJzsgfVxuICAgIH1cblxuICAgIC8vIERvbid0IGRpc3BsYXkgdGhlIFVSTCBmb3IgaW1hZ2VzIG9yIEphdmFTY3JpcHQvaW50ZXJuYWwgbGlua3NcbiAgICAuaXIgYTphZnRlcixcbiAgICBhW2hyZWZePSdqYXZhc2NyaXB0OiddOmFmdGVyLFxuICAgIGFbaHJlZl49JyMnXTphZnRlciB7IGNvbnRlbnQ6ICcnOyB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgYW4gYWJicmV2aWF0aW9uIHN0YW5kcyBmb3IgYWZ0ZXIgdGhlIHRleHRcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICcgKCcgYXR0cih0aXRsZSkgJyknOyB9XG5cbiAgICAvLyBQcmV2ZW50IHBhZ2UgYnJlYWtzIGluIHRoZSBtaWRkbGUgb2YgYSBibG9ja3F1b3RlIG9yIHByZWZvcm1hdHRlZCB0ZXh0IGJsb2NrXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICAvLyBoNWJwLmNvbS90XG4gICAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cblxuICAgIHRyLFxuICAgIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfVxuXG4gICAgaW1nIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICBvcnBoYW5zOiAzO1xuICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIC8vIEF2b2lkIHBhZ2UgYnJlYWtzIGFmdGVyIGEgaGVhZGluZ1xuICAgIGgyLFxuICAgIGgzIHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cblxuICAgIC8vIEhlbHBlciB0byByZS1hbGxvdyBwYWdlIGJyZWFrcyBpbiB0aGUgbWlkZGxlIG9mIGNlcnRhaW4gZWxlbWVudHMgKGUuZy4gcHJlLCBibG9ja3F1b3RlLCB0cilcbiAgICAucHJpbnQtYnJlYWstaW5zaWRlIHtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYnV0dG9uXG4vLy8vXG5cbi8vLyBQYWRkaW5nIGluc2lkZSBidXR0b25zLlxuLy8vIEB0eXBlIExpc3RcbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbSAhZGVmYXVsdDtcblxuLy8vIE1hcmdpbiBhcm91bmQgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luIDAgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZpbGwgZm9yIGJ1dHRvbnMuIENhbiBlaXRoZXIgYmUgYHNvbGlkYCBvciBgaG9sbG93YC5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kYnV0dG9uLWZpbGw6IHNvbGlkICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIENvbG9yXG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBDb2xvclxuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGl2ZSBmb250IGNvbG9yIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIExpc3RcbiRidXR0b24tY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBidXR0b25zLCBkZWZhdWx0ZWQgdG8gZ2xvYmFsLXJhZGl1cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciB3aWR0aCBmb3IgaG9sbG93IG91dGxpbmUgYnV0dG9uc1xuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoOiAxcHggIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBNYXBcbiRidXR0b24tc2l6ZXM6IChcbiAgdGlueTogMC42cmVtLFxuICBzbWFsbDogMC43NXJlbSxcbiAgZGVmYXVsdDogMC45cmVtLFxuICBsYXJnZTogMS4yNXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRidXR0b24tcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZSAhZGVmYXVsdDtcblxuLy8vIG9wYWNpdHkgZm9yIGEgZGlzYWJsZWQgYnV0dG9uLlxuLy8vIEB0eXBlIExpc3RcbiRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDogMC4yNSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogLTIwJSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIGxpZ2h0bmVzcyBvbiBob3ZlciBmb3IgaG9sbG93IGJ1dHRvbnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3M6IC01MCUgIWRlZmF1bHQ7XG5cbi8vIEludGVybmFsOiBmbGlwIGZyb20gbWFyZ2luLXJpZ2h0IHRvIG1hcmdpbi1sZWZ0IGZvciBkZWZhdWx0c1xuQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gJ3J0bCcge1xuICAkYnV0dG9uLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xufVxuXG4vLy8gdHJhbnNpdGlvbnMgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzIGVhc2Utb3V0LCBjb2xvciAwLjI1cyBlYXNlLW91dCAhZGVmYXVsdDtcblxuLy8gVE9ETzogRG9jdW1lbnQgYnV0dG9uLWJhc2UoKSBtaXhpblxuQG1peGluIGJ1dHRvbi1iYXNlIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG5cbiAgQGlmICh0eXBlLW9mKCRidXR0b24tcGFkZGluZykgPT0gJ21hcCcpIHtcbiAgICBAZWFjaCAkc2l6ZSwgJHBhZGRpbmcgaW4gJGJ1dHRvbi1wYWRkaW5nIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgICAgcGFkZGluZzogJHBhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBwYWRkaW5nOiAkYnV0dG9uLXBhZGRpbmc7XG4gIH1cblxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcbiAgdHJhbnNpdGlvbjogJGJ1dHRvbi10cmFuc2l0aW9uO1xuXG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vLy8gRXhwYW5kcyBhIGJ1dHRvbiB0byBtYWtlIGl0IGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFt0cnVlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBleHBhbmQgYmVoYXZpb3IuIFNldCB0byBgZmFsc2VgIHRvIHJldmVyc2UgdGhpcyBiZWhhdmlvci5cbkBtaXhpbiBidXR0b24tZXhwYW5kKCRleHBhbmQ6IHRydWUpIHtcbiAgQGlmICRleHBhbmQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGJ1dHRvbi1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZC1ob3ZlciBbJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgaG92ZXIgY29sb3IuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLXN0eWxlKFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzc1xuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIEBpZiAkYmFja2dyb3VuZC1ob3ZlciA9PSBhdXRvIHtcbiAgICAkYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJhY2tncm91bmQsICRsaWdodG5lc3M6ICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzcyk7XG4gIH1cblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1ob3ZlcjtcbiAgICBjb2xvcjogJGNvbG9yO1xuICB9XG59XG5cbi8vLyBSZW1vdmVzIGJhY2tncm91bmQgZmlsbCBvbiBob3ZlciBhbmQgZm9jdXMgZm9yIGhvbGxvdyBidXR0b25zLlxuQG1peGluIGJ1dHRvbi1ob2xsb3cge1xuICAmLFxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG5AbWl4aW4gYnV0dG9uLWhvbGxvdy1zdHlsZShcbiAgJGNvbG9yOiAkcHJpbWFyeS1jb2xvcixcbiAgJGhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzLCBcbiAgJGJvcmRlci13aWR0aDogJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoXG4pIHtcbiAgJGNvbG9yLWhvdmVyOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRob3Zlci1saWdodG5lc3MpO1xuXG4gIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3I7XG4gIGNvbG9yOiAkY29sb3I7XG5cbiAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItaG92ZXI7XG4gICAgY29sb3I6ICRjb2xvci1ob3ZlcjtcbiAgfVxufVxuXG4vLy8gQWRkcyBkaXNhYmxlZCBzdHlsZXMgdG8gYSBidXR0b24gYnkgZmFkaW5nIHRoZSBlbGVtZW50LCByZXNldGluZyB0aGUgY3Vyc29yLCBhbmQgZGlzYWJsaW5nIHBvaW50ZXIgZXZlbnRzLlxuLy8vIEBwYXJhbSBbQ29sb3JdICRiYWNrZ3JvdW5kIFskcHJpbWFyeS1jb2xvcl0gLSBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBkaXNhYmxlZCBidXR0b24uXG4vLy8gQHBhcmFtIFtDb2xvcl0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGRpc2FibGVkIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLWRpc2FibGVkKFxuICAkYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IsXG4gICRjb2xvcjogJGJ1dHRvbi1jb2xvclxuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJGNvbG9yO1xuICB9XG59XG5cbi8vLyBBZGRzIGEgZHJvcGRvd24gYXJyb3cgdG8gYSBidXR0b24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzaXplIFswLjRlbV0gLSBTaXplIG9mIHRoZSBhcnJvdy4gV2UgcmVjb21tZW5kIHVzaW5nIGFuIGBlbWAgdmFsdWUgc28gdGhlIHRyaWFuZ2xlIHNjYWxlcyB3aGVuIHVzZWQgaW5zaWRlIGRpZmZlcmVudCBzaXplcyBvZiBidXR0b25zLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbd2hpdGVdIC0gQ29sb3Igb2YgdGhlIGFycm93LlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkb2Zmc2V0IFskYnV0dG9uLXBhZGRpbmddIC0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgYXJyb3cgYW5kIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24uIERlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSByaWdodCBwYWRkaW5nIG9mIGEgYnV0dG9uIGlzLlxuQG1peGluIGJ1dHRvbi1kcm9wZG93bihcbiAgJHNpemU6IDAuNGVtLFxuICAkY29sb3I6ICR3aGl0ZSxcbiAgJG9mZnNldDogZ2V0LXNpZGUoJGJ1dHRvbi1wYWRkaW5nLCByaWdodClcbikge1xuICAmOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRzaXplLCAkY29sb3IsIGRvd24pO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDAuNGVtOyAvLyBBbGlnbnMgdGhlIGFycm93IHdpdGggdGhlIHRleHQgb2YgdGhlIGJ1dHRvblxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZsb2F0OiAjeyRnbG9iYWwtcmlnaHR9O1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IGdldC1zaWRlKCRidXR0b24tcGFkZGluZywgcmlnaHQpO1xuICB9XG59XG5cbi8vLyBBZGRzIGFsbCBzdHlsZXMgZm9yIGEgYnV0dG9uLiBGb3IgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgc3R5bGVzLCB1c2UgdGhlIGluZGl2aWR1YWwgYnV0dG9uIG1peGlucy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRleHBhbmQgW2ZhbHNlXSAtIFNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgYnV0dG9uIGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRidXR0b24tYmFja2dyb3VuZF0gLSBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBidXR0b24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQtaG92ZXIgWyRidXR0b24tYmFja2dyb3VuZC1ob3Zlcl0gLSBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBidXR0b24gb24gaG92ZXIuIFNldCB0byBgYXV0b2AgdG8gaGF2ZSB0aGUgbWl4aW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIGhvdmVyIGNvbG9yLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJ1dHRvbi1jb2xvcl0gLSBUZXh0IGNvbG9yIG9mIHRoZSBidXR0b24uIFNldCB0byBgYXV0b2AgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIGNvbG9yIGJhc2VkIG9uIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHN0eWxlIFtzb2xpZF0gLSBTZXQgdG8gYGhvbGxvd2AgdG8gY3JlYXRlIGEgaG9sbG93IGJ1dHRvbi4gVGhlIGNvbG9yIGRlZmluZWQgaW4gYCRiYWNrZ3JvdW5kYCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByaW1hcnkgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbkBtaXhpbiBidXR0b24oXG4gICRleHBhbmQ6IGZhbHNlLFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRzdHlsZTogJGJ1dHRvbi1maWxsXG4pIHtcbiAgQGluY2x1ZGUgYnV0dG9uLWJhc2U7XG5cbiAgQGlmICRzdHlsZSA9PSBzb2xpZCB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXN0eWxlKCRiYWNrZ3JvdW5kLCAkYmFja2dyb3VuZC1ob3ZlciwgJGNvbG9yKTtcbiAgfVxuICBAZWxzZSBpZiAkc3R5bGUgPT0gaG9sbG93IHtcbiAgICBAaW5jbHVkZSBidXR0b24taG9sbG93O1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1ob2xsb3ctc3R5bGUoJGJhY2tncm91bmQpO1xuICB9XG5cbiAgQGlmICRleHBhbmQge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1leHBhbmQ7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tYnV0dG9uIHtcbiAgLmJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgYnV0dG9uO1xuXG4gICAgLy8gU2l6ZXNcbiAgICBAZWFjaCAkc2l6ZSwgJHZhbHVlIGluIG1hcC1yZW1vdmUoJGJ1dHRvbi1zaXplcywgZGVmYXVsdCkge1xuICAgICAgJi4jeyRzaXplfSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZXhwYW5kZWQgeyBAaW5jbHVkZSBidXR0b24tZXhwYW5kOyB9XG5cbiAgICAvLyBDb2xvcnNcbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRidXR0b24tcGFsZXR0ZSB7XG4gICAgICBAaWYgJGJ1dHRvbi1maWxsICE9IGhvbGxvdyB7XG4gICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1zdHlsZSgkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ob2xsb3ctc3R5bGUoJGNvbG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuI3skbmFtZX0uZHJvcGRvd246OmFmdGVyIHtcbiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIb2xsb3cgc3R5bGVcbiAgICBAaWYgJGJ1dHRvbi1maWxsICE9IGhvbGxvdyB7XG4gICAgICAmLmhvbGxvdyB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ob2xsb3c7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ob2xsb3ctc3R5bGU7XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdy1zdHlsZSgkY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2FibGVkIHN0eWxlXG4gICAgJi5kaXNhYmxlZCxcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tZGlzYWJsZWQ7XG5cbiAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWRpc2FibGVkKCRjb2xvciwgYXV0byk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wZG93biBhcnJvd1xuICAgICYuZHJvcGRvd24ge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLWRyb3Bkb3duO1xuXG4gICAgICBAaWYgJGJ1dHRvbi1maWxsID09IGhvbGxvdyB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYnV0dG9uLWJhY2tncm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5ob2xsb3cge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnV0dG9uIHdpdGggZHJvcGRvd24gYXJyb3cgb25seVxuICAgICYuYXJyb3ctb25seTo6YWZ0ZXIge1xuICAgICAgdG9wOiAtMC4xZW07XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gRm9udCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGNvbG9yIG9mIHBsYWNlaG9sZGVyIHRleHQgd2l0aGluIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEZvbnRcbiRpbnB1dC1mb250LWZhbWlseTogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRpbnB1dC1mb250LXNpemU6IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZm9jdXNlZCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBmb2N1c2VkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgaW5zaWRlIHRleHQgaW5wdXRzIHdoZW4gbm90IGZvY3VzZWQuXG4vLy8gQHR5cGUgU2hhZG93XG4kaW5wdXQtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIDAuMSkgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IG91dHNpZGUgdGV4dCBpbnB1dHMgd2hlbiBmb2N1c2VkLlxuLy8vIEB0eXBlIFNoYWRvd1xuJGlucHV0LXNoYWRvdy1mb2N1czogMCAwIDVweCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgdG8gdXNlIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGRpc2FibGVkIHRleHQgaW5wdXQuXG4vLy8gQHR5cGUgQ3Vyc29yXG4kaW5wdXQtY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuLy8vIFByb3BlcnRpZXMgdG8gdHJhbnNpdGlvbiBvbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVzIHRoZSB1cC9kb3duIGJ1dHRvbnMgdGhhdCBDaHJvbWUgYW5kIEZpcmVmb3ggYWRkIHRvIGA8aW5wdXQgdHlwZT0nbnVtYmVyJz5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRpbnB1dC1udW1iZXItc3Bpbm5lcnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBSYWRpdXMgZm9yIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBmb3JtIGJ1dHRvbnMsIGRlZmF1bHRlZCB0byBnbG9iYWwtcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGZvcm0tYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWVsZW1lbnQge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSArICgkZm9ybS1zcGFjaW5nICogMS41KSAtIHJlbS1jYWxjKDEpKTtcblxuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogJGhlaWdodDtcbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAvIDI7XG5cbiAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkaW5wdXQtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZDtcbiAgYm94LXNoYWRvdzogJGlucHV0LXNoYWRvdztcblxuICBmb250LWZhbWlseTogJGlucHV0LWZvbnQtZmFtaWx5O1xuICBmb250LXNpemU6ICRpbnB1dC1mb250LXNpemU7XG4gIGZvbnQtd2VpZ2h0OiAkaW5wdXQtZm9udC13ZWlnaHQ7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG5cbiAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgIHRyYW5zaXRpb246ICRpbnB1dC10cmFuc2l0aW9uO1xuICB9XG5cbiAgLy8gRm9jdXMgc3RhdGVcbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXI6ICRpbnB1dC1ib3JkZXItZm9jdXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZm9jdXM7XG4gICAgYm94LXNoYWRvdzogJGlucHV0LXNoYWRvdy1mb2N1cztcblxuICAgIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICAgIHRyYW5zaXRpb246ICRpbnB1dC10cmFuc2l0aW9uO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLXRleHQge1xuICAvLyBUZXh0IGlucHV0c1xuICAje3RleHQtaW5wdXRzKCl9LFxuICB0ZXh0YXJlYSB7XG4gICAgQGluY2x1ZGUgZm9ybS1lbGVtZW50O1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIH1cblxuICAvLyBUZXh0IGFyZWFzXG4gIHRleHRhcmVhIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG5cbiAgICAmW3Jvd3NdIHtcbiAgICAgIGhlaWdodDogYXV0bztcbiAgICB9XG4gIH1cblxuICBpbnB1dCxcbiAgdGV4dGFyZWEge1xuICAgIC8vIFBsYWNlaG9sZGVyIHRleHRcbiAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yO1xuICAgIH1cblxuICAgIC8vIERpc2FibGVkL3JlYWRvbmx5IHN0YXRlXG4gICAgJjpkaXNhYmxlZCxcbiAgICAmW3JlYWRvbmx5XSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZC1kaXNhYmxlZDtcbiAgICAgIGN1cnNvcjogJGlucHV0LWN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCBzdHlsZXMgb24gYnV0dG9uLWxpa2UgaW5wdXRzXG4gIFt0eXBlPSdzdWJtaXQnXSxcbiAgW3R5cGU9J2J1dHRvbiddIHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6ICRmb3JtLWJ1dHRvbi1yYWRpdXM7XG4gIH1cblxuICAvLyBSZXNldCBOb3JtYWxpemUgc2V0dGluZyBjb250ZW50LWJveCB0byBzZWFyY2ggZWxlbWVudHNcbiAgaW5wdXRbdHlwZT0nc2VhcmNoJ10geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgLy8gTnVtYmVyIGlucHV0IHN0eWxlc1xuICBbdHlwZT0nbnVtYmVyJ10ge1xuICAgIEBpZiBub3QgJGlucHV0LW51bWJlci1zcGlubmVycyB7XG4gICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4XG5cbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXZlbmRvci1wcmVmaXhcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1jaGVja2JveCB7XG4gIFt0eXBlPSdmaWxlJ10sXG4gIFt0eXBlPSdjaGVja2JveCddLFxuICBbdHlwZT0ncmFkaW8nXSB7XG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gIC8vIFN0eWxlcyBmb3IgaW5wdXQvbGFiZWwgc2libGluZ3NcbiAgW3R5cGU9J2NoZWNrYm94J10gKyBsYWJlbCxcbiAgW3R5cGU9J3JhZGlvJ10gKyBsYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcblxuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRmb3JtLXNwYWNpbmcgKiAwLjU7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRmb3JtLXNwYWNpbmc7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICZbZm9yXSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gU3R5bGVzIGZvciBpbnB1dHMgaW5zaWRlIGxhYmVsc1xuICBsYWJlbCA+IFt0eXBlPSdjaGVja2JveCddLFxuICBsYWJlbCA+IFt0eXBlPSdyYWRpbyddIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJGZvcm0tc3BhY2luZyAqIDAuNTtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBmaWxlIGlucHV0IHdpZHRoXG4gIFt0eXBlPSdmaWxlJ10ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3IgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kZm9ybS1sYWJlbC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBmb3JtIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgZm9ybSBsYWJlbHMuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGl0cyBpbnB1dCBmaWVsZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjggIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcblxuICBmb250LXNpemU6ICRmb3JtLWxhYmVsLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tbGFiZWwtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuQG1peGluIGZvcm0tbGFiZWwtbWlkZGxlIHtcbiAgJGlucHV0LWJvcmRlci13aWR0aDogZ2V0LWJvcmRlci12YWx1ZSgkaW5wdXQtYm9yZGVyLCB3aWR0aCk7XG5cbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogKCRmb3JtLXNwYWNpbmcgLyAyICsgcmVtLWNhbGMoJGlucHV0LWJvcmRlci13aWR0aCkpIDA7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tbGFiZWwge1xuICBsYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICYubWlkZGxlIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWwtbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIGhlbHAgdGV4dC5cbi8vLyBAdHlwZSBDb2xvclxuJGhlbHB0ZXh0LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgaGVscCB0ZXh0LlxuLy8vIEB0eXBlIE51bWJlclxuJGhlbHB0ZXh0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHN0eWxlIGZvciBoZWxwIHRleHQuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGhlbHB0ZXh0LWZvbnQtc3R5bGU6IGl0YWxpYyAhZGVmYXVsdDtcblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1oZWxwdGV4dCB7XG4gIC5oZWxwLXRleHQge1xuICAgICRtYXJnaW4tdG9wOiAoJGZvcm0tc3BhY2luZyAqIDAuNSkgKiAtMTtcblxuICAgIG1hcmdpbi10b3A6ICRtYXJnaW4tdG9wO1xuICAgIGZvbnQtc2l6ZTogJGhlbHB0ZXh0LWZvbnQtc2l6ZTtcbiAgICBmb250LXN0eWxlOiAkaGVscHRleHQtZm9udC1zdHlsZTtcbiAgICBjb2xvcjogJGhlbHB0ZXh0LWNvbG9yO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3Igb2YgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcHJlZml4LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGxhYmVscyBwcmVmaXhlZCB0byBhbiBpbnB1dC5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LXByZWZpeC1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXByZWZpeC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0L3JpZ2h0IHBhZGRpbmcgb2YgYW4gcHJlL3Bvc3RmaXhlZCBpbnB1dCBsYWJlbFxuJGlucHV0LXByZWZpeC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLXByZXBvc3RmaXgge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSArICRmb3JtLXNwYWNpbmcgKiAxLjUpO1xuXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgZGlzcGxheTogaWYoJGdsb2JhbC1mbGV4Ym94LCBmbGV4LCB0YWJsZSk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogJGZvcm0tc3BhY2luZztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgfVxuXG4gICAgPiA6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXJhZGl1czogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsIDAgJGlucHV0LXJhZGl1cyAkaW5wdXQtcmFkaXVzIDAsICRpbnB1dC1yYWRpdXMgMCAwICRpbnB1dC1yYWRpdXMpO1xuICAgIH1cblxuICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgPiAqIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsICRpbnB1dC1yYWRpdXMgMCAwICRpbnB1dC1yYWRpdXMsIDAgJGlucHV0LXJhZGl1cyAkaW5wdXQtcmFkaXVzIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICVpbnB1dC1ncm91cC1jaGlsZCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuICAgIHBhZGRpbmc6IDAgJGlucHV0LXByZWZpeC1wYWRkaW5nO1xuICAgIGJvcmRlcjogJGlucHV0LXByZWZpeC1ib3JkZXI7XG4gICAgYmFja2dyb3VuZDogJGlucHV0LXByZWZpeC1iYWNrZ3JvdW5kO1xuXG4gICAgY29sb3I6ICRpbnB1dC1wcmVmaXgtY29sb3I7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiAxJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRpbnB1dC1wcmVmaXgtYm9yZGVyKSB7XG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWZpZWxkIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWJ1dHRvbiB7XG4gICAgQGV4dGVuZCAlaW5wdXQtZ3JvdXAtY2hpbGQ7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIGEsXG4gICAgaW5wdXQsXG4gICAgYnV0dG9uLFxuICAgIGxhYmVsIHtcbiAgICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuICAgICAgaGVpZ2h0OiAkaGVpZ2h0O1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICAgICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljaXR5IGJ1bXAgbmVlZGVkIHRvIHByZXZlbnQgb3ZlcnJpZGUgYnkgYnV0dG9uc1xuICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ1dHRvbiB7XG4gICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIERlZmF1bHQgYm9yZGVyIGFyb3VuZCBjdXN0b20gZmllbGRzZXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGZpZWxkc2V0LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmaWVsZHNldC1wYWRkaW5nOiByZW0tY2FsYygyMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBhcm91bmQgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmaWVsZHNldC1tYXJnaW46IHJlbS1jYWxjKDE4IDApICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGJldHdlZW4gdGhlIGxlZ2VuZCB0ZXh0IGFuZCBmaWVsZHNldCBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGVnZW5kLXBhZGRpbmc6IHJlbS1jYWxjKDAgMykgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmaWVsZHNldCB7XG4gIG1hcmdpbjogJGZpZWxkc2V0LW1hcmdpbjtcbiAgcGFkZGluZzogJGZpZWxkc2V0LXBhZGRpbmc7XG4gIGJvcmRlcjogJGZpZWxkc2V0LWJvcmRlcjtcblxuICBsZWdlbmQge1xuICAgIC8vIENvdmVycyB1cCB0aGUgZmllbGRzZXQncyBib3JkZXIgdG8gY3JlYXRlIGFydGlmaWNpYWwgcGFkZGluZ1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiByZW0tY2FsYygtMyk7XG4gICAgcGFkZGluZzogJGxlZ2VuZC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRib2R5LWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1maWVsZHNldCB7XG4gIGZpZWxkc2V0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBsZWdlbmQge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nICogMC41O1xuICB9XG5cbiAgLmZpZWxkc2V0IHtcbiAgICBAaW5jbHVkZSBmaWVsZHNldDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiB0aGUgZHJvcGRvd24gdHJpYW5nbGUgaW5zaWRlIHNlbGVjdCBtZW51cy4gU2V0IHRvIGB0cmFuc3BhcmVudGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5LlxuLy8vIEB0eXBlIENvbG9yXG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG5AbWl4aW4gZm9ybS1zZWxlY3Qge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSArICgkZm9ybS1zcGFjaW5nICogMS41KSAtIHJlbS1jYWxjKDEpKTtcblxuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmc7XG4gIHBhZGRpbmc6ICgkZm9ybS1zcGFjaW5nIC8gMik7XG5cbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkc2VsZWN0LXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNlbGVjdC1iYWNrZ3JvdW5kO1xuXG4gIGZvbnQtZmFtaWx5OiAkaW5wdXQtZm9udC1mYW1pbHk7XG4gIGZvbnQtc2l6ZTogJGlucHV0LWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcblxuICBAaWYgJHNlbGVjdC10cmlhbmdsZS1jb2xvciAhPSB0cmFuc3BhcmVudCB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC10cmlhbmdsZSgkc2VsZWN0LXRyaWFuZ2xlLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogY29udGVudC1ib3g7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogJGdsb2JhbC1yaWdodCAoLSRmb3JtLXNwYWNpbmcpIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogOXB4IDZweDtcblxuICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogKCRmb3JtLXNwYWNpbmcgKiAxLjUpO1xuICB9XG5cbiAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgIHRyYW5zaXRpb246ICRpbnB1dC10cmFuc2l0aW9uO1xuICB9XG5cbiAgLy8gRm9jdXMgc3RhdGVcbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXI6ICRpbnB1dC1ib3JkZXItZm9jdXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZm9jdXM7XG4gICAgYm94LXNoYWRvdzogJGlucHV0LXNoYWRvdy1mb2N1cztcblxuICAgIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICAgIHRyYW5zaXRpb246ICRpbnB1dC10cmFuc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkO1xuICAgIGN1cnNvcjogJGlucHV0LWN1cnNvci1kaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEhpZGUgdGhlIGRyb3Bkb3duIGFycm93IHNob3duIGluIG5ld2VyIElFIHZlcnNpb25zXG4gICY6Oi1tcy1leHBhbmQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmW211bHRpcGxlXSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1zZWxlY3Qge1xuICBzZWxlY3Qge1xuICAgIEBpbmNsdWRlIGZvcm0tc2VsZWN0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBhYmlkZVxuLy8vL1xuXG4vLy8gU2V0cyBpZiBlcnJvciBzdHlsZXMgc2hvdWxkIGJlIGFkZGVkIHRvIGlucHV0cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWJpZGUtaW5wdXRzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBpZiBlcnJvciBzdHlsZXMgc2hvdWxkIGJlIGFkZGVkIHRvIGxhYmVscy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWJpZGUtbGFiZWxzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciB0byB1c2UgZm9yIGludmFsaWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB0byB1c2UgZm9yIGxhYmVscyBvZiBpbnZhbGlkIGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGZvcm0tbGFiZWwtY29sb3ItaW52YWxpZDogZ2V0LWNvbG9yKGFsZXJ0KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBjb2xvciBmb3IgZm9ybSBlcnJvciB0ZXh0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtZXJyb3ItY29sb3I6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgZm9ybSBlcnJvciB0ZXh0LlxuLy8vIEB0eXBlIE51bWJlclxuJGlucHV0LWVycm9yLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHdlaWdodCBmb3IgZm9ybSBlcnJvciB0ZXh0LlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1lcnJvci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcblxuLy8vIFN0eWxlcyB0aGUgYmFja2dyb3VuZCBhbmQgYm9yZGVyIG9mIGFuIGlucHV0IGZpZWxkIHRvIGhhdmUgYW4gZXJyb3Igc3RhdGUuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGFsZXJ0LWNvbG9yXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhY2tncm91bmQtbGlnaHRlbiBbMTAlXSAtIExpZ2h0bmVzcyBsZXZlbCBvZiB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBtaXhpbiBmb3JtLWlucHV0LWVycm9yKFxuICAkYmFja2dyb3VuZDogJGlucHV0LWJhY2tncm91bmQtaW52YWxpZCxcbiAgJGJhY2tncm91bmQtbGlnaHRlbjogMTAlXG4pIHtcbiAgJjpub3QoOmZvY3VzKSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtaXgoJGJhY2tncm91bmQsICR3aGl0ZSwgJGJhY2tncm91bmQtbGlnaHRlbik7XG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBlcnJvciBzdHlsZXMgdG8gYSBmb3JtIGVsZW1lbnQsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNldHRpbmdzIGZpbGUuXG5AbWl4aW4gZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmcgKiAtMC41O1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nO1xuXG4gIGZvbnQtc2l6ZTogJGlucHV0LWVycm9yLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRpbnB1dC1lcnJvci1mb250LXdlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1lcnJvciB7XG4gIEBpZiAkYWJpZGUtaW5wdXRzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgaW52YWxpZCBpbnB1dHNcbiAgICAuaXMtaW52YWxpZC1pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkYWJpZGUtbGFiZWxzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgbGFiZWxzIG9mIGludmFsaWQgb3V0cHV0c1xuICAgIC5pcy1pbnZhbGlkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gZXJyb3IgZWxlbWVudFxuICAuZm9ybS1lcnJvciB7XG4gICAgQGluY2x1ZGUgZm9ybS1lcnJvcjtcblxuICAgICYuaXMtdmlzaWJsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGFjY29yZGlvblxuLy8vL1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGFjY29yZGlvbiBncm91cC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFkZHMgcGx1cyBhbmQgbWludXMgaWNvbnMgdG8gdGhlIHNpZGUgb2YgZWFjaCBhY2NvcmRpb24gdGl0bGUuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFjY29yZGlvbi1wbHVzbWludXM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgYWNjb3JkaW9uIHRpdGxlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRhY2NvcmRpb24tdGl0bGUtZm9udC1zaXplOiByZW0tY2FsYygxMikgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGl0ZW1zIGluIGEgTWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1pdGVtLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgaXRlbXMgaW4gYSBNZW51LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgb2YgYW4gYWNjb3JkaW9uIGl0ZW0uXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGFjY29yZGlvbi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyOiAxcHggc29saWQgJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGFjY29yZGlvbi1jb250ZW50LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYW4gYWNjb3JkaW9uIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byB0aGUgc2FtZSBlbGVtZW50IHRoYXQgZ2V0cyBgZGF0YS1hY2NvcmRpb25gLlxuQG1peGluIGFjY29yZGlvbi1jb250YWluZXIgKFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1iYWNrZ3JvdW5kXG4pIHtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWNjb3JkaW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gdGhlIGxpc3QgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHVsLlxuQG1peGluIGFjY29yZGlvbi1pdGVtIHtcbiAgJjpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgJGdsb2JhbC1yYWRpdXMgMCAwO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAkZ2xvYmFsLXJhZGl1cyAkZ2xvYmFsLXJhZGl1cztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiBhbiBhY2NvcmRpb24gaXRlbS4gQXBwbHkgdGhpcyB0byB0aGUgbGluayB3aXRoaW4gYW4gYWNjb3JkaW9uIGl0ZW0uXG5AbWl4aW4gYWNjb3JkaW9uLXRpdGxlIChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24taXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkYWNjb3JkaW9uLWl0ZW0tY29sb3IsXG4gICRib3JkZXI6ICRhY2NvcmRpb24tY29udGVudC1ib3JkZXIsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuXG4gIGJvcmRlcjogJGJvcmRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkOm5vdCguaXMtYWN0aXZlKSA+ICYge1xuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwICRnbG9iYWwtcmFkaXVzICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtaG92ZXI7XG4gIH1cblxuICBAaWYgJGFjY29yZGlvbi1wbHVzbWludXMge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAgICAgY29udGVudDogJysnO1xuICAgIH1cblxuICAgIC5pcy1hY3RpdmUgPiAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAxMyc7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYWNjb3JkaW9uIGNvbnRlbnQuIEFwcGx5IHRoaXMgdG8gdGhlIGNvbnRlbnQgcGFuZSBiZWxvdyBhbiBhY2NvcmRpb24gaXRlbSdzIHRpdGxlLlxuQG1peGluIGFjY29yZGlvbi1jb250ZW50IChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nLFxuICAkYm9yZGVyOiAkYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyLFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJGFjY29yZGlvbi1jb250ZW50LWNvbG9yXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgYm9yZGVyOiAkYm9yZGVyO1xuICBib3JkZXItYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcblxuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkID4gJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbiB7XG4gIC5hY2NvcmRpb24ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1jb250YWluZXI7XG4gIH1cblxuICAuYWNjb3JkaW9uLWl0ZW0ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1pdGVtO1xuICB9XG5cbiAgLmFjY29yZGlvbi10aXRsZSB7XG4gICAgQGluY2x1ZGUgYWNjb3JkaW9uLXRpdGxlO1xuICB9XG5cbiAgLmFjY29yZGlvbi1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tY29udGVudDtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb24tbWVudVxuLy8vL1xuXG4vLy8gU2V0cyBpZiBhY2NvcmRpb24gbWVudXMgaGF2ZSB0aGUgZGVmYXVsdCBhcnJvdyBzdHlsZXMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFjY29yZGlvbm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1hcnJvdy1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRhY2NvcmRpb25tZW51LWFycm93LXNpemU6IDZweCAhZGVmYXVsdDtcblxuQG1peGluIGZvdW5kYXRpb24tYWNjb3JkaW9uLW1lbnUge1xuICBAaWYgJGFjY29yZGlvbm1lbnUtYXJyb3dzIHtcbiAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50ID4gYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRhY2NvcmRpb25tZW51LWFycm93LXNpemUsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEgKiAoJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgICAjeyRnbG9iYWwtcmlnaHR9OiAxcmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnRbYXJpYS1leHBhbmRlZD0ndHJ1ZSddID4gYTo6YWZ0ZXIge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBiYWRnZVxuLy8vL1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIGZvciBiYWRnZXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRiYWRnZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdGV4dCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtY29sb3I6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEFsdGVybmF0ZSB0ZXh0IGNvbG9yIGZvciBiYWRnZXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRiYWRnZS1jb2xvci1hbHQ6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIENvbG9yaW5nIGNsYXNzZXMuIEEgbWFwIG9mIGNsYXNzZXMgdG8gb3V0cHV0IGluIHlvdXIgQ1NTLCBsaWtlIGAuc2Vjb25kYXJ5YCwgYC5zdWNjZXNzYCwgYW5kIHNvIG9uLlxuLy8vIEB0eXBlIE1hcFxuJGJhZGdlLXBhbGV0dGU6ICRmb3VuZGF0aW9uLXBhbGV0dGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGJhZGdlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1wYWRkaW5nOiAwLjNlbSAhZGVmYXVsdDtcblxuLy8vIE1pbmltdW0gd2lkdGggb2YgYSBiYWRnZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1taW53aWR0aDogMi4xZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIE51bWJlclxuJGJhZGdlLWZvbnQtc2l6ZTogMC42cmVtICFkZWZhdWx0O1xuXG4vLy8gR2VuZXJhdGVzIHRoZSBiYXNlIHN0eWxlcyBmb3IgYSBiYWRnZS5cbkBtaXhpbiBiYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLXdpZHRoOiAkYmFkZ2UtbWlud2lkdGg7XG4gIHBhZGRpbmc6ICRiYWRnZS1wYWRkaW5nO1xuXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICBmb250LXNpemU6ICRiYWRnZS1mb250LXNpemU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tYmFkZ2Uge1xuICAuYmFkZ2Uge1xuICAgIEBpbmNsdWRlIGJhZGdlO1xuXG4gICAgYmFja2dyb3VuZDogJGJhZGdlLWJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRiYWRnZS1jb2xvcjtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJhZGdlLXBhbGV0dGUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJGNvbG9yLCAoJGJhZGdlLWNvbG9yLCAkYmFkZ2UtY29sb3ItYWx0KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBicmVhZGNydW1ic1xuLy8vL1xuXG4vLy8gTWFyZ2luIGFyb3VuZCBhIGJyZWFkY3J1bWJzIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIGJyZWFkY3J1bWIgbGlua3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnJlYWRjcnVtYnMtaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDExKSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIGJyZWFkY3J1bWIgbGlua3MuXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIHRoZSBhY3RpdmUgYnJlYWRjcnVtYiBsaW5rLlxuLy8vIEB0eXBlIENvbG9yXG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBPcGFjaXR5IG9mIGRpc2FibGVkIGJyZWFkY3J1bWIgbGlua3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTWFyZ2luIGJldHdlZW4gYnJlYWRjcnVtYiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLW1hcmdpbjogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgbWFrZXMgYnJlYWRjcnVtYiBsaW5rcyB1cHBlcmNhc2UuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBhZGRzIGEgc2xhc2ggYmV0d2VlbiBicmVhZGNydW1iIGxpbmtzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRicmVhZGNydW1icy1pdGVtLXNsYXNoOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgYnJlYWRjcnVtYiBzbGFzaC5cbi8vLyBAdHlwZSBDb2xvclxuJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3I6ICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGJyZWFkY3J1bWJzIGNvbnRhaW5lciwgYWxvbmcgd2l0aCB0aGUgc3R5bGVzIGZvciB0aGUgYDxsaT5gIGFuZCBgPGE+YCBlbGVtZW50cyBpbnNpZGUgb2YgaXQuXG5AbWl4aW4gYnJlYWRjcnVtYnMtY29udGFpbmVyIHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbjogJGJyZWFkY3J1bWJzLW1hcmdpbjtcbiAgbGlzdC1zdHlsZTogbm9uZTtcblxuICAvLyBJdGVtIHdyYXBwZXJcbiAgbGkge1xuICAgIGZsb2F0OiAjeyRnbG9iYWwtbGVmdH07XG5cbiAgICBmb250LXNpemU6ICRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTtcbiAgICBjb2xvcjogJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3ItY3VycmVudDtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgICBAaWYgJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlIHtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgfVxuXG4gICAgQGlmICRicmVhZGNydW1icy1pdGVtLXNsYXNoIHtcbiAgICAgIC8vIE5lZWQgdG8gZXNjYXBlIHRoZSBiYWNrc2xhc2hcbiAgICAgICRzbGFzaDogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAnbHRyJywgJy8nLCAnXFxcXCcpO1xuXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgbWFyZ2luOiAwICRicmVhZGNydW1icy1pdGVtLW1hcmdpbjtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29udGVudDogJHNsYXNoO1xuICAgICAgICBjb2xvcjogJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkYnJlYWRjcnVtYnMtaXRlbS1tYXJnaW47XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBsaW5rc1xuICBhIHtcbiAgICBjb2xvcjogJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1icmVhZGNydW1icyB7XG4gIC5icmVhZGNydW1icyB7XG4gICAgQGluY2x1ZGUgYnJlYWRjcnVtYnMtY29udGFpbmVyO1xuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b24tZ3JvdXBcbi8vLy9cblxuLy8vIE1hcmdpbiBmb3IgYnV0dG9uIGdyb3Vwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b25ncm91cC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3I6ICcuYnV0dG9uJyAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGJ1dHRvbnMgdGhhdCBjYW4gYmUgaW4gYW4gZXZlbi13aWR0aCBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uZ3JvdXAtZXhwYW5kLW1heDogNiAhZGVmYXVsdDtcblxuLy8vIERldGVybWluZXMgaWYgJGJ1dHRvbi1yYWRpdXMgaXMgYXBwbGllZCB0byBlYWNoIGJ1dHRvbiBvciB0aGUgYnV0dG9uIGdyb3VwIGFzIGEgd2hvbGUuIFVzZSAkZ2xvYmFsLXJhZGl1cyBpbiBfc2V0dGluZ3Muc2NzcyB0byBjaGFuZ2UgcmFkaXVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRidXR0b25ncm91cC1yYWRpdXMtb24tZWFjaDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEFkZCBzdHlsZXMgZm9yIGEgYnV0dG9uIGdyb3VwIGNvbnRhaW5lci5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGNoaWxkLXNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cChcbiAgJGNoaWxkLXNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3IsXG4gICRzcGFjaW5nOiAkYnV0dG9uZ3JvdXAtc3BhY2luZ1xuKSB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICBtYXJnaW4tYm90dG9tOiAkYnV0dG9uZ3JvdXAtbWFyZ2luO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cbiAgQGVsc2Uge1xuICAgIGZvbnQtc2l6ZTogMDtcbiAgfVxuXG4gICN7JGNoaWxkLXNlbGVjdG9yfSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZztcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZztcbiAgICBmb250LXNpemU6IG1hcC1nZXQoJGJ1dHRvbi1zaXplcywgZGVmYXVsdCk7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogMDtcbiAgICB9XG5cbiAgICBAaWYgbm90ICRidXR0b25ncm91cC1yYWRpdXMtb24tZWFjaCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgZnVsbC13aWR0aCBidXR0b24gZ3JvdXAsIG1ha2luZyBlYWNoIGJ1dHRvbiBlcXVhbCB3aWR0aC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1leHBhbmQoXG4gICRzZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmcsXG4gICRjb3VudDogbnVsbFxuKSB7XG4gIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogLSRzcGFjaW5nO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgI3skc2VsZWN0b3J9IHtcbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGZsZXg6IDEgMSAwcHg7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgemVyby11bml0XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIE9uZSBjaGlsZFxuICAgICAgJjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIH1cblxuICAgICAgLy8gVHdvIG9yIG1vcmUgY2hpbGRyZWVuXG4gICAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRidXR0b25ncm91cC1leHBhbmQtbWF4IHtcbiAgICAgICAgJjpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgjeyRpfSkge1xuICAgICAgICAgICYsICY6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoI3skaX0pIH4gI3skc2VsZWN0b3J9IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKCN7cGVyY2VudGFnZSgxIC8gJGkpfSAtICN7JHNwYWNpbmd9KTtcbiAgICAgICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZztcblxuICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRzcGFjaW5nICogLSRidXR0b25ncm91cC1leHBhbmQtbWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gU3RhY2tzIHRoZSBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcl0gLSBTZWxlY3RvciBmb3IgdGhlIGJ1dHRvbnMgaW5zaWRlIHRoZSBidXR0b24gZ3JvdXAuXG5AbWl4aW4gYnV0dG9uLWdyb3VwLXN0YWNrKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvclxuKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxuXG4gICN7JHNlbGVjdG9yfSB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG5cbiAgICBAaWYgbm90ICRidXR0b25ncm91cC1yYWRpdXMtb24tZWFjaCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAmOmZpcnN0LWNoaWxke1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn1cblxuLy8vIFVuLXN0YWNrcyB0aGUgYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC11bnN0YWNrKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvclxuKSB7XG4gICN7JHNlbGVjdG9yfSB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1idXR0b24tZ3JvdXAge1xuICAuYnV0dG9uLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBidXR0b24tZ3JvdXA7XG5cbiAgICAvLyBTaXplc1xuICAgIEBlYWNoICRzaXplLCAkdmFsdWUgaW4gbWFwLXJlbW92ZSgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KSB7XG4gICAgICAmLiN7JHNpemV9ICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZW4td2lkdGggR3JvdXBcbiAgICAmLmV4cGFuZGVkIHsgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLWV4cGFuZDsgfVxuXG4gICAgLy8gQ29sb3JzXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgIEBpZiAkYnV0dG9uLWZpbGwgIT0gaG9sbG93IHtcbiAgICAgICAgJi4jeyRuYW1lfSAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0ge1xuICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1zdHlsZSgkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICYuI3skbmFtZX0gI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgICBAaW5jbHVkZSBidXR0b24taG9sbG93O1xuICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ob2xsb3ctc3R5bGUoJGNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZCxcbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsLFxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1zdGFjaztcbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC11bnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UpIHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLXVuc3RhY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zdGFja2VkLWZvci1zbWFsbC5leHBhbmRlZCB7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgZm9yY2UtZWxlbWVudC1uZXN0aW5nXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIG9ubHkpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgY2FsbG91dFxuLy8vL1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yLlxuLy8vIEB0eXBlIENvbG9yXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZhZGUgdmFsdWUgZm9yIGNhbGxvdXQgYmFja2dyb3VuZHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FsbG91dC1ib3JkZXI6IDFweCBzb2xpZCByZ2JhKCRibGFjaywgMC4yNSkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4gZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGNhbGxvdXQtbWFyZ2luOiAwIDAgMXJlbSAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBpbm5lciBwYWRkaW5nIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYWxsb3V0cywgaWYgdGhlIGNhbGxvdXQgaGFzIGEgZGFyayBiYWNrZ3JvdW5kLlxuLy8vIEB0eXBlIENvbG9yXG4kY2FsbG91dC1mb250LWNvbG9yLWFsdDogJGJvZHktYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHJhZGl1cyBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBBbW91bnQgdG8gdGludCBsaW5rcyB1c2VkIHdpdGhpbiBjb2xvcmVkIHBhbmVscy4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuXG4vLy8gQHR5cGUgTnVtYmVyIHwgQm9vbGVhblxuJGNhbGxvdXQtbGluay10aW50OiAzMCUgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIGJhc2ljIHN0eWxlcyBmb3IgYSBjYWxsb3V0LCBpbmNsdWRpbmcgcGFkZGluZyBhbmQgbWFyZ2luLlxuQG1peGluIGNhbGxvdXQtYmFzZSgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46ICRjYWxsb3V0LW1hcmdpbjtcbiAgcGFkZGluZzogJGNhbGxvdXQtcGFkZGluZztcblxuICBib3JkZXI6ICRjYWxsb3V0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGNhbGxvdXQtcmFkaXVzO1xuXG4gIC8vIFJlc3BlY3QgdGhlIHBhZGRpbmcsIGZvb2wuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgcXVpY2sgc3R5bGVzIGZvciBhIGNhbGxvdXQgdXNpbmcgYSBzaW5nbGUgY29sb3IgYXMgYSBiYXNlbGluZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRjYWxsb3V0LWJhY2tncm91bmRdIC0gQ29sb3IgdG8gdXNlLlxuQG1peGluIGNhbGxvdXQtc3R5bGUoJGNvbG9yOiAkY2FsbG91dC1iYWNrZ3JvdW5kKSB7XG4gICRiYWNrZ3JvdW5kOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRjYWxsb3V0LWJhY2tncm91bmQtZmFkZSk7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGNhbGxvdXQtZm9udC1jb2xvciwgJGNhbGxvdXQtZm9udC1jb2xvci1hbHQpKTtcbn1cblxuQG1peGluIGNhbGxvdXQtc2l6ZSgkcGFkZGluZykge1xuICBwYWRkaW5nLXRvcDogJHBhZGRpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmc7XG4gIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG59XG5cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhbGxvdXQuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskY2FsbG91dC1iYWNrZ3JvdW5kXSAtIENvbG9yIHRvIHVzZS5cbkBtaXhpbiBjYWxsb3V0KCRjb2xvcjogJGNhbGxvdXQtYmFja2dyb3VuZCkge1xuICBAaW5jbHVkZSBjYWxsb3V0LWJhc2U7XG4gIEBpbmNsdWRlIGNhbGxvdXQtc3R5bGUoJGNvbG9yKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FsbG91dCB7XG4gIC5jYWxsb3V0IHtcbiAgICBAaW5jbHVkZSBjYWxsb3V0O1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXN0eWxlKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zbWFsbCB7XG4gICAgICBAaW5jbHVkZSBjYWxsb3V0LXNpemUoMC41cmVtKTtcbiAgICB9XG5cbiAgICAmLmxhcmdlIHtcbiAgICAgIEBpbmNsdWRlIGNhbGxvdXQtc2l6ZSgzcmVtKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNhcmRcbi8vLy9cblxuLy8vIERlZnVhbHQgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYXJkcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlLlxuLy8vIEB0eXBlIExpc3RcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjYXJkIHNoYWRvdy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FyZC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTGlzdFxuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4uXG4vLy8gQHR5cGUgbnVtYmVyXG4kY2FyZC1tYXJnaW46ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY2FyZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgLSBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIGZvbnQgY29sb3Igb2YgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXJnaW4gLSBCb3R0b20gbWFyZ2luIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGJvcmRlciAtIEJvcmRlciBhcm91bmQgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmFkaXVzIC0gYm9yZGVyIHJhZGl1cyBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRzaGFkb3cgLSBib3ggc2hhZG93IG9mIHRoZSBjYXJkLlxuQG1peGluIGNhcmQtY29udGFpbmVyKFxuICAkYmFja2dyb3VuZDogJGNhcmQtYmFja2dyb3VuZCxcbiAgJGNvbG9yOiAkY2FyZC1mb250LWNvbG9yLFxuICAkbWFyZ2luOiAkY2FyZC1tYXJnaW4sXG4gICRib3JkZXI6ICRjYXJkLWJvcmRlcixcbiAgJHJhZGl1czogJGNhcmQtYm9yZGVyLXJhZGl1cyxcbiAgJHNoYWRvdzogJGNhcmQtc2hhZG93XG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG5cbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcblxuICBib3JkZXI6ICRib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG5cbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgZGl2aWRlci5cbkBtaXhpbiBjYXJkLWRpdmlkZXIoXG4gICRiYWNrZ3JvdW5kOiAkY2FyZC1kaXZpZGVyLWJhY2tncm91bmQsXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleDogMCAxIGF1dG87XG4gIH1cblxuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG5cbiAgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBjYXJkIHNlY3Rpb24uXG5AbWl4aW4gY2FyZC1zZWN0aW9uKFxuICAkcGFkZGluZzogJGNhcmQtcGFkZGluZ1xuKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDEgMCBhdXRvO1xuICB9XG5cbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWNhcmQge1xuICAuY2FyZCB7XG4gICAgQGluY2x1ZGUgY2FyZC1jb250YWluZXI7XG4gIH1cblxuICAuY2FyZC1kaXZpZGVyIHtcbiAgICBAaW5jbHVkZSBjYXJkLWRpdmlkZXI7XG4gIH1cblxuICAuY2FyZC1zZWN0aW9uIHtcbiAgICBAaW5jbHVkZSBjYXJkLXNlY3Rpb247XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNsb3NlLWJ1dHRvblxuLy8vL1xuXG4vLy8gRGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgY2xvc2UgYnV0dG9uLiBUaGUgZmlyc3QgdmFsdWUgc2hvdWxkIGJlIGByaWdodGAgb3IgYGxlZnRgLCBhbmQgdGhlIHNlY29uZCB2YWx1ZSBzaG91bGQgYmUgYHRvcGAgb3IgYGJvdHRvbWAuXG4vLy8gQHR5cGUgTGlzdFxuJGNsb3NlYnV0dG9uLXBvc2l0aW9uOiByaWdodCB0b3AgIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCAob3IgbGVmdCkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LWhvcml6b250YWw6IChcbiAgc21hbGw6IDAuNjZyZW0sXG4gIG1lZGl1bTogMXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUb3AgKG9yIGJvdHRvbSkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsOiAoXG4gIHNtYWxsOiAwLjMzZW0sXG4gIG1lZGl1bTogMC41cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplKHMpIG9mIHRoZSBjbG9zZSBidXR0b24uXG4vLy8gQHR5cGUgTnVtYmVyfE1hcFxuJGNsb3NlYnV0dG9uLXNpemU6IChcbiAgc21hbGw6IDEuNWVtLFxuICBtZWRpdW06IDJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUaGUgbGluZS1oZWlnaHQgb2YgdGhlIGNsb3NlIGJ1dHRvbi4gSXQgYWZmZWN0cyB0aGUgc3BhY2luZyBvZiB0aGUgZWxlbWVudC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjbG9zZWJ1dHRvbi1saW5laGVpZ2h0OiAxICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgY2xvc2UgYnV0dG9uLlxuLy8vIEB0eXBlIENvbG9yXG4kY2xvc2VidXR0b24tY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIG9mIHRoZSBjbG9zZSBidXR0b24gd2hlbiBiZWluZyBob3ZlcmVkIG9uLlxuLy8vIEB0eXBlIENvbG9yXG4kY2xvc2VidXR0b24tY29sb3ItaG92ZXI6ICRibGFjayAhZGVmYXVsdDtcblxuXG4vLy8gR2V0IHRoZSBzaXplIGFuZCBwb3NpdGlvbiBmb3IgYSBjbG9zZSBidXR0b24uIElmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIG51bWJlciwgdGhlIG51bWJlciBpcyByZXR1cm5lZC4gSWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgY29uZmlnIG1hcCBhbmQgdGhlIG1hcCBoYXMgdGhlIGtleSBgJHNpemVgLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICR2YWx1ZSAtIEEgbnVtYmVyIG9yIG1hcCB0aGF0IHJlcHJlc2VudHMgdGhlIHNpemUgb3IgcG9zaXRpb24gdmFsdWUocykgb2YgdGhlIGNsb3NlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzaXplIC0gVGhlIHNpemUgb2YgdGhlIGNsb3NlIGJ1dHRvbiB0byB1c2UuXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBnaXZlbiBudW1iZXIgb3IgdGhlIHZhbHVlIGZvdW5kIGluIHRoZSBtYXAuXG5AZnVuY3Rpb24gLXpmLWdldC1zaXplLXZhbCgkdmFsdWUsICRzaXplKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpID09ICdudW1iZXInIHtcbiAgICAvLyBJZiBpdCBpcywganVzdCByZXR1cm4gdGhlIG51bWJlclxuICAgIEByZXR1cm4gJHZhbHVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNpemUgbmFtZSBleGlzdHMgaW4gdGhlIHZhbHVlIG1hcFxuICBAZWxzZSBpZiBtYXAtaGFzLWtleSgkdmFsdWUsICRzaXplKSB7XG4gICAgLy8gSWYgaXQgZG9lcywgcmV0dXJuIHRoZSB2YWx1ZVxuICAgIEByZXR1cm4gbWFwLWdldCgkdmFsdWUsICRzaXplKTtcbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgYSBjbG9zZSBidXR0b24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbbWVkaXVtXSAtIFRoZSBzaXplIHRvIHVzZS4gU2V0IHRvIGBzbWFsbGAgdG8gY3JlYXRlIGEgc21hbGwgY2xvc2UgYnV0dG9uLiBUaGUgJ21lZGl1bScgdmFsdWVzIGRlZmluZWQgaW4gYCRjbG9zZWJ1dHRvbi0qYCB2YXJpYWJsZXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBjbG9zZSBidXR0b24uXG5AbWl4aW4gY2xvc2UtYnV0dG9uLXNpemUoJHNpemUpIHtcbiAgJHg6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDEpO1xuICAkeTogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMik7XG5cbiAgI3skeH06IC16Zi1nZXQtc2l6ZS12YWwoJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsLCAkc2l6ZSk7XG4gICN7JHl9OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1vZmZzZXQtdmVydGljYWwsICRzaXplKTtcbiAgZm9udC1zaXplOiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1zaXplLCAkc2l6ZSk7XG4gIGxpbmUtaGVpZ2h0OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1saW5laGVpZ2h0LCAkc2l6ZSk7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBjbG9zZSBidXR0b24sIHVzaW5nIHRoZSBzdHlsZXMgaW4gdGhlIHNldHRpbmdzIHZhcmlhYmxlcy5cbkBtaXhpbiBjbG9zZS1idXR0b24ge1xuICAkeDogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMSk7XG4gICR5OiBudGgoJGNsb3NlYnV0dG9uLXBvc2l0aW9uLCAyKTtcblxuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29sb3I6ICRjbG9zZWJ1dHRvbi1jb2xvcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkY2xvc2VidXR0b24tY29sb3ItaG92ZXI7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2xvc2UtYnV0dG9uIHtcbiAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgY2xvc2UtYnV0dG9uO1xuXG4gICAgJi5zbWFsbCB7IEBpbmNsdWRlIGNsb3NlLWJ1dHRvbi1zaXplKHNtYWxsKSB9XG4gICAgJiwgJi5tZWRpdW0geyBAaW5jbHVkZSBjbG9zZS1idXR0b24tc2l6ZShtZWRpdW0pIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbWVudVxuLy8vL1xuXG4vLy8gTWFyZ2luIG9mIGEgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIExlZnQtaGFuZCBtYXJnaW4gb2YgYSBuZXN0ZWQgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbi1uZXN0ZWQ6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGZvciBpdGVtcyBpbiBhIG1lbnUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pdGVtLXBhZGRpbmc6IDAuN3JlbSAxcmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhbiBhY3RpdmUgbWVudSBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY3RpdmUgbWVudSBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiBnZXQtY29sb3IocHJpbWFyeSkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gYW4gaWNvbiBhbmQgdGV4dCBpbiBhIG1lbnUgaXRlbS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LWljb24tc3BhY2luZzogMC4yNXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGFuIGhvdmVyZWQgbWVudSBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgZm9yIGJvcmRlcmVkIG1lbnVcbi8vLyBAdHlwZSBDb2xvclxuJG1lbnUtYm9yZGVyOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIENyZWF0ZXMgdGhlIGJhc2Ugc3R5bGVzIGZvciBhIE1lbnUuXG5AbWl4aW4gbWVudS1iYXNlIHtcbiAgbWFyZ2luOiAkbWVudS1tYXJnaW47XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBMaXN0IGl0ZW1zIGFyZSB0YWJsZSBjZWxsIHRvIGFsbG93IGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnRcbiAgPiBsaSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgbGluZSBoZWlnaHQgdG8gbWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSBvdmVyYWxsIGl0ZW0gZWFzaWVyIHRvIGNhbGN1bGF0ZVxuICA+IGxpID4gYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtaXRlbS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG5cbiAgLy8gUmVzZXQgc3R5bGVzIG9mIGlubmVyIGVsZW1lbnRzXG4gIGlucHV0LFxuICBzZWxlY3QsXG4gIGEsXG4gIGJ1dHRvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gRXhwYW5kcyB0aGUgaXRlbXMgb2YgYSBNZW51LCBzbyBlYWNoIGl0ZW0gaXMgdGhlIHNhbWUgd2lkdGguXG5AbWl4aW4gbWVudS1leHBhbmQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICA+IGxpIHtcbiAgICAgIGZsZXg6IDEgMSAwcHg7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgemVyby11bml0XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICB9XG5cbiAgPiBsaTpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgZGlyZWN0aW9uIG9mIGEgTWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRkaXIgW2hvcml6b250YWxdIC0gRGlyZWN0aW9uIG9mIHRoZSBNZW51LiBDYW4gYmUgYGhvcml6b250YWxgIG9yIGB2ZXJ0aWNhbGAuXG5AbWl4aW4gbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuXG4gICAgICA+IGxpIHtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgID4gbGkge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkZGlyID09IHZlcnRpY2FsIHtcbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICAgPiBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgID4gbGkgID4gYSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgID4gbGkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdUaGUgZGlyZWN0aW9uIHVzZWQgZm9yIG1lbnUtZGlyZWN0aW9uKCkgbXVzdCBiZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsLic7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBzaW1wbGUgTWVudSwgd2hpY2ggaGFzIG5vIHBhZGRpbmcgb3IgaG92ZXIgc3RhdGUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFskZ2xvYmFsLWxlZnRdIC0gRGlyZWN0aW9uIG9mIHRoZSBtZW51LiBTZXQgdG8gYG51bGxgIHRvIGRvIG5vdCBnZW5lcmF0ZSBzdHlsZXMgZm9yIGRpcmVjdGlvbi5cbkBtaXhpbiBtZW51LXNpbXBsZSgkZGlyOiAkZ2xvYmFsLWxlZnQpIHtcbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIEBpZiAkZGlyICE9IG51bGwge1xuICAgIEBpbmNsdWRlIG1lbnUtc2ltcGxlLWRpcmVjdGlvbigkZGlyKTtcbiAgfVxufVxuXG4vLy8gRGlyZWN0aW9uIG1vZGlmaWVyIGZvciBhIHNpbXBsZSBNZW51XG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFskZ2xvYmFsLWxlZnRdIC0gRGlyZWN0aW9uIG9mIHRoZSBtZW51XG5AbWl4aW4gbWVudS1zaW1wbGUtZGlyZWN0aW9uKCRkaXI6ICRnbG9iYWwtbGVmdCkge1xuICAkbm8tbWFyZ2luLWRpcjogJGRpcjtcbiAgJG1hcmdpbi1kaXI6IGRpcmVjdGlvbi1vcHBvc2l0ZSgkZGlyKTtcblxuICBsaSB7XG4gICAgbWFyZ2luLSN7JG5vLW1hcmdpbi1kaXJ9OiAwO1xuICAgIG1hcmdpbi0jeyRtYXJnaW4tZGlyfTogZ2V0LXNpZGUoJG1lbnUtaXRlbS1wYWRkaW5nLCAkbWFyZ2luLWRpcik7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG5lc3RlZCBNZW51LCBieSBhZGRpbmcgYG1hcmdpbi1sZWZ0YCB0byB0aGUgbWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkcGFkZGluZyBbYXV0b10gLSBMZW5ndGggb2YgdGhlIG1hcmdpbi5cbkBtaXhpbiBtZW51LW5lc3RlZCgkbWFyZ2luOiAkbWVudS1tYXJnaW4tbmVzdGVkKSB7XG4gIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRtYXJnaW47XG59XG5cbi8vLyBBZGRzIHN1cHBvcnQgZm9yIGljb25zIHRvIE1lbnUgaXRlbXMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkcG9zaXRpb24gW3NpZGVdIC0gUG9zaXRpb25pbmcgZm9yIGljb25zLiBDYW4gYmUgYHNpZGVgIChsZWZ0LCBvciByaWdodCBvbiBSVEwpIG9yIGB0b3BgLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGJhc2UgW3RydWVdIC0gU2V0IHRvIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgc2hhcmVkIENTUyBiZXR3ZWVuIHNpZGUtIGFuZCB0b3AtYWxpZ25lZCBpY29ucyBmcm9tIGJlaW5nIHByaW50ZWQuIFNldCB0aGlzIHRvIGBmYWxzZWAgaWYgeW91J3JlIGNhbGxpbmcgdGhlIG1peGluIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIGVsZW1lbnQuXG5AbWl4aW4gbWVudS1pY29ucygkcG9zaXRpb246IHNpZGUsICRiYXNlOiB0cnVlKSB7XG4gIEBpZiAkYmFzZSB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICA+IGxpID4gYSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgaW1nLFxuICAgICAgICBpLFxuICAgICAgICBzdmcge1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgICAgICArIHNwYW4ge1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJHBvc2l0aW9uID09IHNpZGUge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJG1lbnUtaWNvbi1zcGFjaW5nO1xuXG4gICAgICAgIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBpbWcsXG4gICAgICBpLFxuICAgICAgc3ZnIHtcbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogMCBhdXRvICRtZW51LWljb24tc3BhY2luZztcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAkbWVudS1pY29uLXNwYWNpbmc7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtZW51LXRleHQge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIHBhZGRpbmc6ICRtZW51LWl0ZW0tcGFkZGluZztcblxuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1tZW51IHtcbiAgLm1lbnUge1xuICAgIEBpbmNsdWRlIG1lbnUtYmFzZTtcbiAgICBAaW5jbHVkZSBtZW51LWljb25zO1xuXG4gICAgLy8gRGVmYXVsdCBvcmllbnRhdGlvbjogaG9yaXpvbnRhbFxuICAgICYsICYuaG9yaXpvbnRhbCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcbiAgICB9XG5cbiAgICAvLyBFdmVuLXdpZHRoIG1vZGlmaWVyIGZvciBob3Jpem9udGFsIG9yaWVudGF0aW9uXG4gICAgJi5leHBhbmRlZCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWV4cGFuZDtcbiAgICB9XG5cbiAgICAvLyBWZXJ0aWNhbCBvcmllbnRhdGlvbiBtb2RpZmllclxuICAgICYudmVydGljYWwge1xuICAgICAgQGluY2x1ZGUgbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoJHNtYWxsOiBmYWxzZSkge1xuICAgICAgJi4jeyQtemYtc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS1leHBhbmRlZCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZXhwYW5kO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS12ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaW1wbGVcbiAgICAmLnNpbXBsZSB7XG4gICAgICBAaW5jbHVkZSBtZW51LXNpbXBsZTtcblxuICAgICAgJi5hbGlnbi0jeyRnbG9iYWwtcmlnaHR9IHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1zaW1wbGUtZGlyZWN0aW9uKCRnbG9iYWwtcmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsaWduIHJpZ2h0XG4gICAgJi5hbGlnbi0jeyRnbG9iYWwtcmlnaHR9IHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICAgICAgICA+IGxpIHtcbiAgICAgICAgICBmbG9hdDogJGdsb2JhbC1yaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIGljb25zXG4gICAgJi5pY29uLXRvcCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWljb25zKHRvcCwgJGJhc2U6IGZhbHNlKTtcbiAgICAgIC8vIE1ha2UgdmVydGljYWwgbWVudSB3aXRoIGljb25zIG9uIHRvcCB3b3JrXG4gICAgICAmLnZlcnRpY2FsIHtcbiAgICAgICAgYSA+IHNwYW4ge1xuICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5lc3RpbmdcbiAgICAmLm5lc3RlZCB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZDtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAuYWN0aXZlID4gYSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlO1xuICAgICAgY29sb3I6ICRtZW51LWl0ZW0tY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC8vIE1lbnUgd2l0aCBib3JkZXJcbiAgICAmLm1lbnUtYm9yZGVyZWQge1xuICAgICAgbGkge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkbWVudS1ib3JkZXI7XG4gICAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZW51IHdpdGggYmFja2dyb3VuZCBob3ZlclxuICAgICYubWVudS1ob3ZlciB7XG4gICAgICBsaTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRtZW51LWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWVudS10ZXh0IHtcbiAgICBAaW5jbHVkZSBtZW51LXRleHQ7XG4gIH1cblxuICAvLyBBbGlnbiBjZW50ZXJcbiAgLm1lbnUtY2VudGVyZWQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgID4gLm1lbnUge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtYWxpZ24oJHg6IGNlbnRlciwgJHk6IHRvcCk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmV2ZW50IEZPVUMgd2hlbiB1c2luZyB0aGUgUmVzcG9uc2l2ZSBNZW51IHBsdWdpblxuICAubm8tanMgW2RhdGEtcmVzcG9uc2l2ZS1tZW51XSB1bCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiQG1peGluIGZvdW5kYXRpb24tbWVudS1pY29uIHtcbiAgLm1lbnUtaWNvbiB7XG4gICAgQGluY2x1ZGUgaGFtYnVyZ2VyKCRjb2xvcjogJHRpdGxlYmFyLWljb24tY29sb3IsICRjb2xvci1ob3ZlcjogJHRpdGxlYmFyLWljb24tY29sb3ItaG92ZXIpO1xuICB9XG5cbiAgLm1lbnUtaWNvbi5kYXJrIHtcbiAgICBAaW5jbHVkZSBoYW1idXJnZXI7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyaWxsZG93blxuLy8vL1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eSB0byB1c2UgZm9yIGFuaW1hdGluZyBtZW51cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kZHJpbGxkb3duLXRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIGFycm93cyB0byBkcmlsbGRvd24gaXRlbXMgd2l0aCBzdWJtZW51cywgYXMgd2VsbCBhcyB0aGUgYmFjayBidXR0b24uXG4vLy8gQHR5cGUgQm9vbGVhblxuJGRyaWxsZG93bi1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgZHJpbGxkb3duIHN1Ym1lbnVzLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuQG1peGluIGZvdW5kYXRpb24tZHJpbGxkb3duLW1lbnUge1xuICAvLyBBcHBsaWVkIHRvIHRoZSBNZW51IGNvbnRhaW5lclxuICAuaXMtZHJpbGxkb3duIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIGxpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICYuYW5pbWF0ZS1oZWlnaHQge1xuICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNXM7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbGllZCB0byBuZXN0ZWQgPHVsPnNcbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogMTAwJTtcbiAgICB6LWluZGV4OiAtMTtcblxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6ICRkcmlsbGRvd24tYmFja2dyb3VuZDtcbiAgICB0cmFuc2l0aW9uOiAkZHJpbGxkb3duLXRyYW5zaXRpb247XG5cbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBsdHIsIC0xMDAlLCAxMDAlKSk7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zaW5nIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IGx0ciwgMTAwJSwgLTEwMCUpKTtcbiAgICB9XG4gIH1cblxuICAuZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICBAaWYgJGRyaWxsZG93bi1hcnJvd3Mge1xuICAgIC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyaWxsZG93bi1hcnJvdy1zaXplLCAkZHJpbGxkb3duLWFycm93LWNvbG9yLCAkZ2xvYmFsLXJpZ2h0KTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEgKiAkZHJpbGxkb3duLWFycm93LXNpemU7XG4gICAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmpzLWRyaWxsZG93bi1iYWNrID4gYTo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJpbGxkb3duLWFycm93LXNpemUsICRkcmlsbGRvd24tYXJyb3ctY29sb3IsICRnbG9iYWwtbGVmdCk7XG4gICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9LXdpZHRoOiAwO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwLjc1cmVtOyAvLyBDcmVhdGVzIHNwYWNlIGJldHdlZW4gdGhlIGFycm93IGFuZCB0aGUgdGV4dFxuXG4gICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9LXdpZHRoOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZHJvcGRvd25cbi8vLy9cblxuLy8vIFBhZGRpbmcgZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIExpc3RcbiRkcm9wZG93bi1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bi1iYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tZm9udC1zaXplOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gV2lkdGggZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3duLXdpZHRoOiAzMDBweCAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciByYWRpdXMgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZHJvcGRvd24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIFNpemVzIGZvciBkcm9wZG93biBwYW5lcy4gRWFjaCBzaXplIGlzIGEgQ1NTIGNsYXNzIHlvdSBjYW4gYXBwbHkuXG4vLy8gQHR5cGUgTWFwXG4kZHJvcGRvd24tc2l6ZXM6IChcbiAgdGlueTogMTAwcHgsXG4gIHNtYWxsOiAyMDBweCxcbiAgbGFyZ2U6IDQwMHB4LFxuKSAhZGVmYXVsdDtcblxuLy8vIEFwcGxpZXMgc3R5bGVzIGZvciBhIGJhc2ljIGRyb3Bkb3duLlxuQG1peGluIGRyb3Bkb3duLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkZHJvcGRvd24td2lkdGg7XG4gIHBhZGRpbmc6ICRkcm9wZG93bi1wYWRkaW5nO1xuXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgYm9yZGVyOiAkZHJvcGRvd24tYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkZHJvcGRvd24tcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tYmFja2dyb3VuZDtcblxuICBmb250LXNpemU6ICRkcm9wZG93bi1mb250LXNpemU7XG5cbiAgJi5pcy1vcGVuIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyb3Bkb3duIHtcbiAgLmRyb3Bkb3duLXBhbmUge1xuICAgIEBpbmNsdWRlIGRyb3Bkb3duLWNvbnRhaW5lcjtcbiAgfVxuXG4gIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkZHJvcGRvd24tc2l6ZXMge1xuICAgIC5kcm9wZG93bi1wYW5lLiN7JG5hbWV9IHtcbiAgICAgIHdpZHRoOiAkc2l6ZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duLW1lbnVcbi8vLy9cblxuLy8vIEVuYWJsZXMgYXJyb3dzIGZvciBpdGVtcyB3aXRoIGRyb3Bkb3duIG1lbnVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBkcm9wZG93biBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3I6ICRhbmNob3ItY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgc2l6ZSBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbi8vLyBNaW5pbXVtIHdpZHRoIG9mIGRyb3Bkb3duIHN1Yi1tZW51cy5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtbWluLXdpZHRoOiAyMDBweCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGRyb3Bkb3ducy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyb3Bkb3dubWVudS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgZm9yIGRyb3Bkb3duIHN1Yi1tZW51cy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd25tZW51LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8gQm9yZGVyIHdpZHRoIGZvciBkcm9wZG93biBzdWItbWVudXMuXG4vLyBVc2VkIHRvIGFkanVzdCB0b3AgbWFyZ2luIG9mIGEgc3ViLW1lbnUgaWYgYSBib3JkZXIgaXMgdXNlZC5cbi8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1ib3JkZXItd2lkdGg6IG50aCgkZHJvcGRvd25tZW51LWJvcmRlciwgMSk7XG5cbkBtaXhpbiBsZWZ0LXJpZ2h0LWFycm93cyB7XG4gID4gYTo6YWZ0ZXIge1xuICAgICN7JGdsb2JhbC1yaWdodH06IDE0cHg7XG4gIH1cblxuICAmLm9wZW5zLWxlZnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgbGVmdCk7XG4gIH1cblxuICAmLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJvcGRvd25tZW51LWFycm93LXNpemUsICRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3IsIHJpZ2h0KTtcbiAgfVxufVxuXG5AbWl4aW4gZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICA+IGxpLm9wZW5zLWxlZnQge1xuICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBsaS5vcGVucy1yaWdodCB7XG4gICAgICA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgdG9wOiAxMDAlO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGRyb3Bkb3dubWVudS1hcnJvd3Mge1xuICAgICAgPiBsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogMS41cmVtO1xuICAgICAgfVxuXG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplLCAkZHJvcGRvd25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgICAgI3skZ2xvYmFsLXJpZ2h0fTogNXB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqICgkZHJvcGRvd25tZW51LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgPiBsaSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1sZWZ0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgcmlnaHQ6IDEwMCU7XG4gICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLm9wZW5zLXJpZ2h0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgICAgbGVmdDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaWYgJGRyb3Bkb3dubWVudS1hcnJvd3Mge1xuICAgICAgICBAaW5jbHVkZSBsZWZ0LXJpZ2h0LWFycm93cztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdUaGUgZGlyZWN0aW9uIHVzZWQgZm9yIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKCkgbXVzdCBiZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsLic7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZHJvcGRvd24tbWVudSB7XG4gIC5kcm9wZG93bi5tZW51IHtcbiAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcblxuICAgIGEge1xuICAgICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIH1cblxuICAgIC5uby1qcyAmIHVsIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgJi52ZXJ0aWNhbCB7XG4gICAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbih2ZXJ0aWNhbCk7XG4gICAgfVxuXG4gICAgQGVhY2ggJHNpemUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICAgICAgJi4jeyRzaXplfS1ob3Jpem9udGFsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuI3skc2l6ZX0tdmVydGljYWwge1xuICAgICAgICAgICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUuZmlyc3Qtc3ViIHtcbiAgICAgICAgdG9wOiAxMDAlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaXMtZHJvcGRvd24tbWVudS52ZXJ0aWNhbCB7XG4gICAgd2lkdGg6IDEwMHB4O1xuXG4gICAgJi5hbGlnbi1yaWdodCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBhOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDVweDtcbiAgICAgIG1hcmdpbi10b3A6IC0xICogJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplO1xuICAgIH1cblxuICAgICYub3BlbnMtaW5uZXIgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG5cbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIEBpZiAkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09ICdydGwnIHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5vcGVucy1sZWZ0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgcmlnaHQ6IDEwMCU7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgICYub3BlbnMtcmlnaHQgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAxMDAlO1xuICAgIHotaW5kZXg6IDE7XG5cbiAgICBkaXNwbGF5OiBub25lO1xuICAgIG1pbi13aWR0aDogJGRyb3Bkb3dubWVudS1taW4td2lkdGg7XG5cbiAgICBib3JkZXI6ICRkcm9wZG93bm1lbnUtYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6ICRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDtcblxuICAgIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgICBAaWYgJGRyb3Bkb3dubWVudS1hcnJvd3Mge1xuICAgICAgICBAaW5jbHVkZSBsZWZ0LXJpZ2h0LWFycm93cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHR5cGUtb2YoJGRyb3Bkb3dubWVudS1ib3JkZXItd2lkdGgpID09ICdudW1iZXInKSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIG1hcmdpbi10b3A6ICgtJGRyb3Bkb3dubWVudS1ib3JkZXItd2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gbGkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLy8gW1RPRE9dIEN1dCBiYWNrIHNwZWNpZmljaXR5XG4gICAgLy8mOm5vdCguanMtZHJvcGRvd24tbm9ob3ZlcikgPiAuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQ6aG92ZXIgPiAmLCAvLyB3aHkgaXMgdGhpcyBsaW5lIG5lZWRlZD8gT3BlbmluZyBpcyBoYW5kbGVkIGJ5IEpTIGFuZCB0aGlzIGNhdXNlcyBzb21lIHVnbHkgZmxpY2tlcmluZyB3aGVuIHRoZSBzdWIgaXMgcmUtcG9zaXRpb25lZCBhdXRvbWF0aWNhbGx5Li4uXG4gICAgJi5qcy1kcm9wZG93bi1hY3RpdmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCByZXNwb25zaXZlLWVtYmVkXG4vLy8vXG5cbi8vLyBNYXJnaW4gYmVsb3cgYSByZXNwb25zaXZlIGVtYmVkIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEFzcGVjdCByYXRpb3MgdXNlZCB0byBkZXRlcm1pbmUgcGFkZGluZy1ib3R0b20gb2YgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXJzLlxuLy8vIEB0eXBlIE1hcFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zOiAoXG4gIGRlZmF1bHQ6IDQgYnkgMyxcbiAgd2lkZXNjcmVlbjogMTYgYnkgOSxcbikgIWRlZmF1bHQ7XG5cbi8vIFdBUk5JTkc6IFdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDYuNFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW86IGRlZmF1bHQ7XG5cbi8vLyBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd8TGlzdH0gJHJhdGlvIFtkZWZhdWx0XSAtIFJhdGlvIG9mIHRoZSBjb250YWluZXIuIENhbiBiZSBhIGtleSBmcm9tIHRoZSBgJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zYCBtYXAgb3IgYSBsaXN0IGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbkBtaXhpbiByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCkge1xuICBAaWYgdHlwZS1vZigkcmF0aW8pID09ICdzdHJpbmcnIHtcbiAgICAkcmF0aW86IG1hcC1nZXQoJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zLCAkcmF0aW8pO1xuICB9XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tO1xuICBwYWRkaW5nLWJvdHRvbTogcmF0aW8tdG8tcGVyY2VudGFnZSgkcmF0aW8pO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkIHtcbiAgLnJlc3BvbnNpdmUtZW1iZWQsXG4gIC5mbGV4LXZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCk7XG5cbiAgICAkcmF0aW9zOiBtYXAtcmVtb3ZlKCRyZXNwb25zaXZlLWVtYmVkLXJhdGlvcyxkZWZhdWx0KTtcblxuICAgIEBlYWNoICRuYW1lLCAkcmF0aW8gaW4gJHJhdGlvcyB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJhdGlvLXRvLXBlcmNlbnRhZ2UoJHJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZmxleC12aWRlbyB7XG4gIEB3YXJuICdUaGlzIG1peGluIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IGZvdW5kYXRpb24tcmVzcG9uc2l2ZS1lbWJlZCgpLiBmb3VuZGF0aW9uLWZsZXgtdmlkZW8oKSB3aWxsIGJlIHJlbW92ZWQgaW4gRm91bmRhdGlvbiA2LjQuJztcbiAgQGluY2x1ZGUgZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkO1xufVxuXG5AbWl4aW4gZmxleC12aWRlbygkcmF0aW86ICRyZXNwb25zaXZlLWVtYmVkLXJhdGlvKSB7XG4gIEB3YXJuICdUaGlzIG1peGluIGlzIGJlaW5nIHJlcGxhY2VkIGJ5IHJlc3BvbnNpdmUtZW1iZWQoKS4gZmxleC12aWRlbygpIHdpbGwgYmUgcmVtb3ZlZCBpbiBGb3VuZGF0aW9uIDYuNC4nO1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gaW50ZWdlcnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJGEgLSBGaXJzdCBudW1iZXIgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGIgLSBTZWNvbmQgbnVtYmVyIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuXG5AZnVuY3Rpb24gZ2NkKCRhLCAkYikge1xuICAvLyBGcm9tOiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvR3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IjSmF2YVNjcmlwdFxuICBAaWYgKCRiICE9IDApIHtcbiAgICBAcmV0dXJuIGdjZCgkYiwgJGEgJSAkYik7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYWJzKCRhKTtcbiAgfVxufVxuXG4vLy8gSGFuZGxlcyBkZWNpbWFsIGV4cG9uZW50cyBieSB0cnlpbmcgdG8gY29udmVydCB0aGVtIGludG8gYSBmcmFjdGlvbiBhbmQgdGhlbiB1c2UgYSBudGgtcm9vdC1hbGdvcml0aG0gZm9yIHBhcnRzIG9mIHRoZSBjYWxjdWxhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gVGhlIGJhc2UgbnVtYmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZXhwb25lbnQgLSBUaGUgZXhwb25lbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgcHJvZHVjdCBvZiB0aGUgZXhwb25lbnRpYXRpb24uXG5AZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQsICRwcmVjOiAxNikge1xuICBAaWYgKGZsb29yKCRleHBvbmVudCkgIT0gJGV4cG9uZW50KSB7XG4gICAgJHByZWMyIDogcG93KDEwLCAkcHJlYyk7XG4gICAgJGV4cG9uZW50OiByb3VuZCgkZXhwb25lbnQgKiAkcHJlYzIpO1xuICAgICRkZW5vbWluYXRvcjogZ2NkKCRleHBvbmVudCwgJHByZWMyKTtcbiAgICBAcmV0dXJuIG50aC1yb290KHBvdygkYmFzZSwgJGV4cG9uZW50IC8gJGRlbm9taW5hdG9yKSwgJHByZWMyIC8gJGRlbm9taW5hdG9yLCAkcHJlYyk7XG4gIH1cblxuICAkdmFsdWU6ICRiYXNlO1xuICBAaWYgJGV4cG9uZW50ID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkZXhwb25lbnQge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiAkYmFzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGV4cG9uZW50IDwgMSB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAtJGV4cG9uZW50IHtcbiAgICAgICR2YWx1ZTogJHZhbHVlIC8gJGJhc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbkBmdW5jdGlvbiBudGgtcm9vdCgkbnVtLCAkbjogMiwgJHByZWM6IDEyKSB7XG4gIC8vIEZyb206IGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICR4OiAxO1xuXG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJHByZWMge1xuICAgICR4OiAxIC8gJG4gKiAoKCRuIC0gMSkgKiAkeCArICgkbnVtIC8gcG93KCR4LCAkbiAtIDEpKSk7XG4gIH1cblxuICBAcmV0dXJuICR4O1xufVxuXG4vLy8gQ2FsY3VsYXRlcyB0aGUgaGVpZ2h0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggZm9yIGEgZ2l2ZW4gcmF0aW8uXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmF0aW8gLSBSYXRpbyB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQsIGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGhlaWdodCByZWxhdGl2ZSB0byB0aGUgd2lkdGggb2YgYSByZXNwb25zaXZlIGNvbnRhaW5lci5cbkBmdW5jdGlvbiByYXRpby10by1wZXJjZW50YWdlKCRyYXRpbykge1xuICAkdzogbnRoKCRyYXRpbywgMSk7XG4gICRoOiBudGgoJHJhdGlvLCAzKTtcbiAgQHJldHVybiAkaCAvICR3ICogMTAwJTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGxhYmVsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIGZvciBsYWJlbHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRsYWJlbC1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQWx0ZXJuYXRlIHRleHQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWNvbG9yLWFsdDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3JpbmcgY2xhc3Nlcy4gQSBtYXAgb2YgY2xhc3NlcyB0byBvdXRwdXQgaW4geW91ciBDU1MsIGxpa2UgYC5zZWNvbmRhcnlgLCBgLnN1Y2Nlc3NgLCBhbmQgc28gb24uXG4vLy8gQHR5cGUgTWFwXG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIGZvciBsYWJlbHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGFiZWwtZm9udC1zaXplOiAwLjhyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIG9mIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG4vLy8gR2VuZXJhdGVzIGJhc2Ugc3R5bGVzIGZvciBhIGxhYmVsLlxuQG1peGluIGxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAkbGFiZWwtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkbGFiZWwtcmFkaXVzO1xuXG4gIGZvbnQtc2l6ZTogJGxhYmVsLWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tbGFiZWwge1xuICAubGFiZWwge1xuICAgIEBpbmNsdWRlIGxhYmVsO1xuXG4gICAgYmFja2dyb3VuZDogJGxhYmVsLWJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRsYWJlbC1jb2xvcjtcblxuICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGxhYmVsLXBhbGV0dGUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJGNvbG9yLCAoJGxhYmVsLWNvbG9yLCAkbGFiZWwtY29sb3ItYWx0KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBtZWRpYS1vYmplY3Rcbi8vLy9cblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgYSBtZWRpYSBvYmplY3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVkaWFvYmplY3QtbWFyZ2luLWJvdHRvbTogJGdsb2JhbC1tYXJnaW4gIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0IGFuZCByaWdodCBwYWRkaW5nIG9uIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIFdpZHRoIG9mIGltYWdlcyB3aXRoaW4gYSBtZWRpYSBvYmplY3QsIHdoZW4gdGhlIG9iamVjdCBpcyBzdGFja2VkIHZlcnRpY2FsbHkuIFNldCB0byAnYXV0bycgdG8gdXNlIHRoZSBpbWFnZSdzIG5hdHVyYWwgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVkaWFvYmplY3QtaW1hZ2Utd2lkdGgtc3RhY2tlZDogMTAwJSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG1lZGlhIG9iamVjdCBjb250YWluZXIuXG5AbWl4aW4gbWVkaWEtb2JqZWN0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGlmKCRnbG9iYWwtZmxleGJveCwgZmxleCwgYmxvY2spO1xuICBtYXJnaW4tYm90dG9tOiAkbWVkaWFvYmplY3QtbWFyZ2luLWJvdHRvbTtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRpbmcgWyRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmddIC0gUGFkZGluZyBiZXR3ZWVuIHNlY3Rpb25zLlxuQG1peGluIG1lZGlhLW9iamVjdC1zZWN0aW9uKCRwYWRkaW5nOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLSN7JGdsb2JhbC1yaWdodH06ICRwYWRkaW5nO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkOm5vdCg6bnRoLWNoaWxkKDIpKSB7XG4gICAgcGFkZGluZy0jeyRnbG9iYWwtbGVmdH06ICRwYWRkaW5nO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgdG8gc3RhY2sgc2VjdGlvbnMgb2YgYSBtZWRpYSBvYmplY3QuIEFwcGx5IHRoaXMgdG8gdGhlIHNlY3Rpb24gZWxlbWVudHMsIG5vdCB0aGUgY29udGFpbmVyLlxuQG1peGluIG1lZGlhLW9iamVjdC1zdGFjayB7XG4gIHBhZGRpbmc6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIGltZyB7XG4gICAgd2lkdGg6ICRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLW1lZGlhLW9iamVjdCB7XG4gIC5tZWRpYS1vYmplY3Qge1xuICAgIEBpbmNsdWRlIG1lZGlhLW9iamVjdC1jb250YWluZXI7XG5cbiAgICBpbWcge1xuICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgIH1cblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgJi5zdGFjay1mb3ItI3skLXpmLXplcm8tYnJlYWtwb2ludH0ge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrLWZvci0jeyQtemYtemVyby1icmVha3BvaW50fSAubWVkaWEtb2JqZWN0LXNlY3Rpb24ge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkLXpmLXplcm8tYnJlYWtwb2ludCBvbmx5KSB7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLW9iamVjdC1zdGFjaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubWVkaWEtb2JqZWN0LXNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIG1lZGlhLW9iamVjdC1zZWN0aW9uO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAmLm1haW4tc2VjdGlvbiB7XG4gICAgICAgIGZsZXg6IDEgMSAwcHg7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgemVyby11bml0XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICYubWlkZGxlIHtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIH1cblxuICAgICAgJi5ib3R0b20ge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgb2ZmLWNhbnZhc1xuLy8vL1xuXG4vLy8gV2lkdGggb2YgYSBsZWZ0L3JpZ2h0IG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb2ZmY2FudmFzLXNpemU6IDI1MHB4ICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgdG9wL2JvdHRvbSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplOiAyNTBweCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbi8vLyBAdHlwZSBDb2xvclxuJG9mZmNhbnZhcy1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgZm9yIHRoZSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIFNoYWRvd1xuJG9mZmNhbnZhcy1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoJGJsYWNrLCAwLjcpICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHdpdGggdGhlIGBwdXNoYCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1wdXNoLXppbmRleDogMSAhZGVmYXVsdDtcblxuLy8vIFotaW5kZXggb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbCB3aXRoIHRoZSBgb3ZlcmxhcGAgdHJhbnNpdGlvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXg6IDEwICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHVzaW5nIHRoZSBgcmV2ZWFsLWZvci0qYCBjbGFzc2VzIG9yIG1peGluLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4OiAxICFkZWZhdWx0O1xuXG4vLy8gTGVuZ3RoIG9mIHRoZSBhbmltYXRpb24gb24gYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi1sZW5ndGg6IDAuNXMgIWRlZmF1bHQ7XG5cbi8vLyBUaW1pbmcgZnVuY3Rpb24gb2YgdGhlIGFuaW1hdGlvbiBvbiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmc6IGVhc2UgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGEgcmV2ZWFsZWQgb2ZmLWNhbnZhcyB3aWxsIGJlIGZpeGVkLXBvc2l0aW9uLCBhbmQgc2Nyb2xsIHdpdGggdGhlIHNjcmVlbi5cbi8vLyBAdHlwZSBCb29sXG4kb2ZmY2FudmFzLWZpeGVkLXJldmVhbDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBvdmVybGF5IHRoYXQgYXBwZWFycyB3aGVuIGFuIG9mZi1jYW52YXMgcGFuZWwgaXMgb3Blbi5cbi8vLyBAdHlwZSBDb2xvclxuJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ6IHJnYmEoJHdoaXRlLCAwLjI1KSAhZGVmYXVsdDtcblxuLy8vIENTUyBjbGFzcyB1c2VkIGZvciB0aGUgbWFpbiBjb250ZW50IGFyZWEuIFRoZSBvZmYtY2FudmFzIG1peGlucyB1c2UgdGhpcyB0byB0YXJnZXQgdGhlIHBhZ2UgY29udGVudC5cbiRtYWluY29udGVudC1jbGFzczogJ29mZi1jYW52YXMtY29udGVudCcgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIGJhc2VsaW5lIHN0eWxlcyBmb3Igb2ZmLWNhbnZhcy4gVGhpcyBDU1MgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgb3RoZXIgcGllY2VzIHdvcmsuXG5AbWl4aW4gb2ZmLWNhbnZhcy1iYXNpY3Mge1xuICAvLyBIaWRlcyBvdmVyZmxvdyBvbiBib2R5IHdoZW4gYW4gb2ZmLWNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuICAuaXMtb2ZmLWNhbnZhcy1vcGVuIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBvdmVybGF5IChnZW5lcmF0ZWQgYnkgSmF2YVNjcmlwdClcbiAgLmpzLW9mZi1jYW52YXMtb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkb2ZmY2FudmFzLXRyYW5zaXRpb24tbGVuZ3RoICRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmcsIHZpc2liaWxpdHkgJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuXG4gICAgYmFja2dyb3VuZDogJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ7XG5cbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmlzLXZpc2libGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gICAgXG4gICAgJi5pcy1vdmVybGF5LWZpeGVkIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGFuIG9mZi1jYW52YXMgd3JhcHBlci5cbkBtaXhpbiBvZmYtY2FudmFzLXdyYXBwZXIoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8vIEFkZHMgYmFzaWMgc3R5bGVzIGZvciBhbiBvZmYtY2FudmFzIHBhbmVsLlxuQG1peGluIG9mZi1jYW52YXMtYmFzZShcbiAgJGJhY2tncm91bmQ6ICRvZmZjYW52YXMtYmFja2dyb3VuZCxcbiAgJHRyYW5zaXRpb246ICRvZmZjYW52YXMtdHJhbnNpdGlvbi1sZW5ndGggJG9mZmNhbnZhcy10cmFuc2l0aW9uLXRpbWluZyxcbiAgJGZpeGVkOiB0cnVlXG4pIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuXG4gIEBpZiAkZml4ZWQgPT0gdHJ1ZSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG4gIEBlbHNlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICB6LWluZGV4OiAkb2ZmY2FudmFzLXB1c2gtemluZGV4O1xuXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuXG4gIC8vIE92ZXJsYXAgb25seSBzdHlsZXMuXG4gICYuaXMtdHJhbnNpdGlvbi1vdmVybGFwIHtcbiAgICB6LWluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4O1xuXG4gICAgJi5pcy1vcGVuIHtcbiAgICAgIGJveC1zaGFkb3c6ICRvZmZjYW52YXMtc2hhZG93O1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdHJhbnNmb3JtIHRvIDAgdG8gc2hvdyBhbiBvZmYtY2FudmFzIHBhbmVsLlxuICAmLmlzLW9wZW4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyB0byBwb3NpdGlvbiBhbiBvZmYtY2FudmFzIHBhbmVsIHRvIHRoZSBsZWZ0L3JpZ2h0L3RvcC9ib3R0b20uXG5AbWl4aW4gb2ZmLWNhbnZhcy1wb3NpdGlvbihcbiAgJHBvc2l0aW9uOiBsZWZ0LFxuICAkb3JpZW50YXRpb246IGhvcml6b250YWwsXG4gICRzaXplOiBpZigkb3JpZW50YXRpb24gPT0gaG9yaXpvbnRhbCwgJG9mZmNhbnZhcy1zaXplLCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUpXG4pIHtcbiAgQGlmICRwb3NpdGlvbiA9PSBsZWZ0IHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0kc2l6ZSk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgJi5pcy1vcGVuIH4gLiN7JG1haW5jb250ZW50LWNsYXNzfSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHNpemUpO1xuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogJHNpemU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRzaXplKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAmLmlzLW9wZW4gfiAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtJHNpemUpO1xuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gdG9wIHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHNpemU7XG5cbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAmLmlzLW9wZW4gfiAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgkc2l6ZSk7XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAkc2l6ZTtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgkc2l6ZSk7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgJi5pcy1vcGVuIH4gLiN7JG1haW5jb250ZW50LWNsYXNzfSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiAkb2ZmY2FudmFzLXNoYWRvdyBpcyBzZXQsIGFkZCBpdCBhcyBhIHBzZXVkby1lbGVtZW50LlxuICAvLyBUaGlzIG1pbWljcyB0aGUgb2ZmLWNhbnZhcyBwYW5lbCBoYXZpbmcgYSBsb3dlciB6LWluZGV4LCB3aXRob3V0IGhhdmluZyB0byBoYXZlIG9uZS5cbiAgQGlmICRvZmZjYW52YXMtc2hhZG93IHtcbiAgICAmLmlzLXRyYW5zaXRpb24tcHVzaDo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICAgICBAaWYgJHBvc2l0aW9uID09IGxlZnQge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuXG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIGlmICRwb3NpdGlvbiA9PSByaWdodCB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcblxuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICB9XG4gICAgICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gdG9wIHtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuXG4gICAgICAgIGhlaWdodDogMXB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG5cbiAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBib3gtc2hhZG93OiAkb2ZmY2FudmFzLXNoYWRvdztcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vIHRyYW5zZm9ybSBvbiBvdmVybGFwIHRyYW5zaXRpb25cbiAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB+IC4jeyRtYWluY29udGVudC1jbGFzc30ge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgc3R5bGVzIGZvciB0aGUgY29udGVudCBjb250YWluZXIuXG5AbWl4aW4gb2ZmLWNhbnZhcy1jb250ZW50KCkge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbi8vLyBBZGRzIHN0eWxlcyB0aGF0IHJldmVhbCBhbiBvZmYtY2FudmFzIHBhbmVsLlxuQG1peGluIG9mZi1jYW52YXMtcmV2ZWFsKFxuJHBvc2l0aW9uOiBsZWZ0LFxuJHppbmRleDogJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4LFxuJGNvbnRlbnQ6ICRtYWluY29udGVudC1jbGFzc1xuKSB7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgei1pbmRleDogJHppbmRleDtcblxuICBAaWYgbm90ICRvZmZjYW52YXMtZml4ZWQtcmV2ZWFsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAmIH4gLiN7JGNvbnRlbnR9IHtcbiAgICBtYXJnaW4tI3skcG9zaXRpb259OiAkb2ZmY2FudmFzLXNpemU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tb2ZmLWNhbnZhcyB7XG4gIEBpbmNsdWRlIG9mZi1jYW52YXMtYmFzaWNzO1xuXG4gIC8vIE9mZi1jYW52YXMgd3JhcHBlclxuICAub2ZmLWNhbnZhcy13cmFwcGVyIHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLXdyYXBwZXI7XG4gIH1cblxuICAvLyBPZmYtY2FudmFzIGNvbnRhaW5lclxuICAub2ZmLWNhbnZhcyB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBjb250YWluZXIgd2l0aCBhYnNvbHV0ZSBwb3NpdGlvblxuICAub2ZmLWNhbnZhcy1hYnNvbHV0ZSB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlKCRmaXhlZDogZmFsc2UpO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBwb3NpdGlvbiBjbGFzc2VzXG4gIC5wb3NpdGlvbi1sZWZ0ICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihsZWZ0LCAgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi1yaWdodCAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihyaWdodCwgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi10b3AgICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbih0b3AsICAgIHZlcnRpY2FsKTsgfVxuICAucG9zaXRpb24tYm90dG9tICB7IEBpbmNsdWRlIG9mZi1jYW52YXMtcG9zaXRpb24oYm90dG9tLCB2ZXJ0aWNhbCk7IH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWNvbnRlbnQ7XG4gIH1cblxuICAvLyBSZXZlYWwgb2ZmLWNhbnZhcyBwYW5lbCBvbiBsYXJnZXIgc2NyZWVuc1xuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkbmFtZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKGxlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnBvc2l0aW9uLXJpZ2h0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi10b3AucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwodG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwoYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBvcmJpdFxuLy8vL1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgT3JiaXQncyBidWxsZXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYWN0aXZlIGNvbG9yIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGRpYW1ldGVyIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LWRpYW1ldGVyOiAxLjJyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBiZXR3ZWVuIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtbWFyZ2luOiAwLjFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGRpc3RhbmNlIGZyb20gc2xpZGUgcmVnaW9uIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LW1hcmdpbi10b3A6IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmcm9tIE9yYml0J3MgYnVsbGV0cyB0byB3aGF0ZXZlciBjb250ZW50IG1heSBsdXJrIGJlbG93IGl0LlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tOiAwLjhyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IgZm9yIE9yYml0J3MgY2FwdGlvbi5cbi8vLyBAdHlwZSBDb2xvclxuJG9yYml0LWNhcHRpb24tYmFja2dyb3VuZDogcmdiYSgkYmxhY2ssIDAuNSkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIE9yYml0J3MgY2FwdGlvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jYXB0aW9uLXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IgZm9yIE9yYml0J3MgY29udHJvbHMgd2hlbiBob3ZlcmVkLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtY29udHJvbC1iYWNrZ3JvdW5kLWhvdmVyOiByZ2JhKCRibGFjaywgMC41KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgT3JiaXQncyBjb250cm9scy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jb250cm9sLXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHotaW5kZXggZm9yIE9yYml0J3MgY29udHJvbHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtY29udHJvbC16aW5kZXg6IDEwICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBvdXRlciBPcmJpdCB3cmFwcGVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXRgIGNsYXNzLlxuQG1peGluIG9yYml0LXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIE9yYml0IHNsaWRlIGNvbnRhaW5lci4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWNvbnRhaW5lcmAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7IC8vIFByZXZlbnQgRk9VQyBieSBub3Qgc2hvd2luZyB1bnRpbCBKUyBzZXRzIGhlaWdodFxuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGluZGl2aWR1YWwgc2xpZGVzIG9mIGFuIE9yYml0IHNsaWRlci4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LXNsaWRlYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1zbGlkZSB7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICYubm8tbW90aW9udWkge1xuICAgICYuaXMtYWN0aXZlIHtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBvcmJpdC1maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBzbGlkZSBjb250YWluaW5nIGFuIGltYWdlLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtaW1hZ2VgIGNsYXNzLlxuQG1peGluIG9yYml0LWltYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGFuIG9yYml0IHNsaWRlIGNhcHRpb24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1jYXB0aW9uYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nOiAkb3JiaXQtY2FwdGlvbi1wYWRkaW5nO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQpO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgdGhlIG5leHQvcHJldmlvdXMgYnV0dG9ucyBpbiBhbiBPcmJpdCBzbGlkZXIuIFRoZXNlIHN0eWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGAub3JiaXQtbmV4dGAgYW5kIGAub3JiaXQtcHJldmlvdXNgIGNsYXNzZXMgaW4gdGhlIGRlZmF1bHQgQ1NTLlxuQG1peGluIG9yYml0LWNvbnRyb2wge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIEBpbmNsdWRlIHZlcnRpY2FsLWNlbnRlcjtcbiAgei1pbmRleDogJG9yYml0LWNvbnRyb2wtemluZGV4O1xuICBwYWRkaW5nOiAkb3JiaXQtY29udHJvbC1wYWRkaW5nO1xuICBjb2xvcjogJHdoaXRlO1xuXG4gICY6aG92ZXIsXG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtY29udHJvbC1iYWNrZ3JvdW5kLWhvdmVyO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IHByZXZpb3VzIGJ1dHRvbi4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LXByZXZpb3VzYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1wcmV2aW91cyB7XG4gICN7JGdsb2JhbC1sZWZ0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgT3JiaXQgbmV4dCBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1uZXh0YCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1uZXh0IHtcbiAgI3skZ2xvYmFsLWxlZnR9OiBhdXRvO1xuICAjeyRnbG9iYWwtcmlnaHR9OiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY29udGFpbmVyIG9mIE9yYml0IGJ1bGxldHMuIC8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IHByZXZpb3VzIGJ1dHRvbi4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWJ1bGxldHNgIGNsYXNzLlxuQG1peGluIG9yYml0LWJ1bGxldHMge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogJG9yYml0LWJ1bGxldC1tYXJnaW4tdG9wO1xuICBtYXJnaW4tYm90dG9tOiAkb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b207XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICBidXR0b24ge1xuICAgIHdpZHRoOiAkb3JiaXQtYnVsbGV0LWRpYW1ldGVyO1xuICAgIGhlaWdodDogJG9yYml0LWJ1bGxldC1kaWFtZXRlcjtcbiAgICBtYXJnaW46ICRvcmJpdC1idWxsZXQtbWFyZ2luO1xuXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1idWxsZXQtYmFja2dyb3VuZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtYnVsbGV0LWJhY2tncm91bmQtYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1vcmJpdCB7XG4gIC5vcmJpdCB7XG4gICAgQGluY2x1ZGUgb3JiaXQtd3JhcHBlcjtcbiAgfVxuXG4gIC5vcmJpdC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIG9yYml0LWNvbnRhaW5lcjtcbiAgfVxuXG4gIC5vcmJpdC1zbGlkZSB7XG4gICAgQGluY2x1ZGUgb3JiaXQtc2xpZGU7XG4gIH1cblxuICAub3JiaXQtZmlndXJlIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1maWd1cmU7XG4gIH1cblxuICAub3JiaXQtaW1hZ2Uge1xuICAgIEBpbmNsdWRlIG9yYml0LWltYWdlO1xuICB9XG5cbiAgLm9yYml0LWNhcHRpb24ge1xuICAgIEBpbmNsdWRlIG9yYml0LWNhcHRpb247XG4gIH1cblxuICAlb3JiaXQtY29udHJvbCB7XG4gICAgQGluY2x1ZGUgb3JiaXQtY29udHJvbDtcbiAgfVxuXG4gIC5vcmJpdC1wcmV2aW91cyB7XG4gICAgQGV4dGVuZCAlb3JiaXQtY29udHJvbDtcbiAgICBAaW5jbHVkZSBvcmJpdC1wcmV2aW91cztcbiAgfVxuXG4gIC5vcmJpdC1uZXh0IHtcbiAgICBAZXh0ZW5kICVvcmJpdC1jb250cm9sO1xuICAgIEBpbmNsdWRlIG9yYml0LW5leHQ7XG4gIH1cblxuICAub3JiaXQtYnVsbGV0cyB7XG4gICAgQGluY2x1ZGUgb3JiaXQtYnVsbGV0cztcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcGFnaW5hdGlvblxuLy8vL1xuXG4vLy8gRm9udCBzaXplIG9mIHBhZ2luYXRpb24gaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFnaW5hdGlvbi1mb250LXNpemU6IHJlbS1jYWxjKDE0KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBvZiB0aGUgcGFnaW5hdGlvbiBvYmplY3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFnaW5hdGlvbi1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZzogcmVtLWNhbGMoMyAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCBtYXJnaW4gdG8gc2VwYXJhdGUgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZzogcmVtLWNhbGMoMSkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHJhZGl1cyBmb3IgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHBhZ2luYXRpb24gaXRlbXMgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHBhZ2luYXRpb24gaXRlbSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQ6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiB0aGUgcGFnaW5hdGlvbiBpdGVtIGZvciB0aGUgY3VycmVudCBwYWdlLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItZGlzYWJsZWQ6ICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIHRoZSBlbGxpcHNpcyBpbiBhIHBhZ2luYXRpb24gbWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24tZWxsaXBzaXMtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIElmIGBmYWxzZWAsIGRvbid0IGRpc3BsYXkgcGFnZSBudW1iZXIgbGlua3Mgb24gbW9iaWxlLCBvbmx5IG5leHQvcHJldmlvdXMgbGlua3Ncbi8vLyBhbmQgb3B0aW9uYWxseSBjdXJyZW50IHBhZ2UgbnVtYmVyLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGRpc3BsYXkgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgb24gbW9iaWxlIGV2ZW4gaWYgYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtc2AgaXMgc2V0IHRvIGBmYWxzZWAuXG4vLy8gVGhpcyBwYXJhbWV0ZXIgd2lsbCBvbmx5IG92ZXJyaWRlIHRoZSB2aXNpYmlsaXR5IHNldHRpbmcgb2YgdGhlIGN1cnJlbnQgaXRlbSBmb3IgYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2U7YCxcbi8vLyBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgdmlzaWJpbGl0eSB3aGVuIGAkcGFnaW5hdGlvbi1tb2JpbGUtaXRlbXNgIGlzIHNldCB0byBgdHJ1ZWAuXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tbW9iaWxlLWN1cnJlbnQtaXRlbTogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFycm93cyBhcmUgYWRkZWQgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGxpbmtzIG9mIHBhZ2luYXRpb24uXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgcGFnaW5hdGlvbiBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBgPHVsPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1jb250YWluZXIgKFxuICAkbWFyZ2luLWJvdHRvbTogJHBhZ2luYXRpb24tbWFyZ2luLWJvdHRvbSxcbiAgJGZvbnQtc2l6ZTogJHBhZ2luYXRpb24tZm9udC1zaXplLFxuICAkc3BhY2luZzogJHBhZ2luYXRpb24taXRlbS1zcGFjaW5nLFxuICAkcmFkaXVzOiAkcGFnaW5hdGlvbi1yYWRpdXMsXG4gICRjb2xvcjogJHBhZ2luYXRpb24taXRlbS1jb2xvcixcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luLWJvdHRvbTtcblxuICAvLyBMaXN0IGl0ZW1cbiAgbGkge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZztcbiAgICBib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcblxuICAgIEBpZiAkcGFnaW5hdGlvbi1tb2JpbGUtaXRlbXMge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAmOmxhc3QtY2hpbGQsXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfVxuXG4gICAgICBAaWYgJHBhZ2luYXRpb24tbW9iaWxlLWN1cnJlbnQtaXRlbSB7XG4gICAgICAgICYuY3VycmVudCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYWdlIGxpbmtzXG4gIGEsXG4gIGJ1dHRvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJHBhZGRpbmc7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBpdGVtLiBBcHBseSB0aGlzIHRvIGFuIGA8YT5gLlxuQG1peGluIHBhZ2luYXRpb24taXRlbS1jdXJyZW50IChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtY3VycmVudDogJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQsXG4gICRjb2xvci1jdXJyZW50OiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnRcbikge1xuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtY3VycmVudDtcbiAgY29sb3I6ICRjb2xvci1jdXJyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gYW4gYDxhPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1pdGVtLWRpc2FibGVkIChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGNvbG9yOiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWRpc2FibGVkXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBlbGxpcHNpcyBmb3IgdXNlIGluIGEgcGFnaW5hdGlvbiBsaXN0LlxuQG1peGluIHBhZ2luYXRpb24tZWxsaXBzaXMgKFxuICAkcGFkZGluZzogJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbnRlbnQ6ICdcXDIwMjYnO1xuICBjb2xvcjogJGNvbG9yO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wYWdpbmF0aW9uIHtcbiAgLnBhZ2luYXRpb24ge1xuICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tY29udGFpbmVyO1xuXG4gICAgLmN1cnJlbnQge1xuICAgICAgQGluY2x1ZGUgcGFnaW5hdGlvbi1pdGVtLWN1cnJlbnQ7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24taXRlbS1kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tZWxsaXBzaXM7XG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWdpbmF0aW9uLWFycm93cyB7XG4gICAgLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuICAgIC5wYWdpbmF0aW9uLXByZXZpb3VzLmRpc2FibGVkOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDAuNXJlbTtcbiAgICAgIGNvbnRlbnQ6ICdcXDAwYWInO1xuICAgIH1cblxuICAgIC5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4gICAgLnBhZ2luYXRpb24tbmV4dC5kaXNhYmxlZDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMC41cmVtO1xuICAgICAgY29udGVudDogJ1xcMDBiYic7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHByb2dyZXNzIGJhciBjb250YWluZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAkcHJvZ3Jlc3MtaGVpZ2h0O1xuICBtYXJnaW4tYm90dG9tOiAkcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhY2tncm91bmQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIG1ldGVyIG9mIGEgcHJvZ3Jlc3MgYmFyLlxuQG1peGluIHByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGV4dCBpbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtbWV0ZXItdGV4dCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAkd2hpdGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgQGlmIGhhcy12YWx1ZSgkcHJvZ3Jlc3MtcmFkaXVzKSB7XG4gICAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wcm9ncmVzcy1iYXIge1xuICAvLyBQcm9ncmVzcyBiYXJcbiAgLnByb2dyZXNzIHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1jb250YWluZXI7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRmb3VuZGF0aW9uLXBhbGV0dGUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIC5wcm9ncmVzcy1tZXRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSW5uZXIgbWV0ZXJcbiAgLnByb2dyZXNzLW1ldGVyIHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1tZXRlcjtcbiAgfVxuXG4gIC8vIElubmVyIG1ldGVyIHRleHRcbiAgLnByb2dyZXNzLW1ldGVyLXRleHQge1xuICAgIEBpbmNsdWRlIHByb2dyZXNzLW1ldGVyLXRleHQ7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLyBbVE9ET10gQ2hlY2sgaG93IHBsdWdpbiBjb25maXJtcyBkaXNhYmxlZCBvciB2ZXJ0aWNhbCBzdGF0dXNcbi8vIFtUT0RPXSBDaGVjayBpZiB0cmFuc2l0aW9uOiBhbGw7IGlzIG5lY2Vzc2FyeVxuXG4vLy8vXG4vLy8gQGdyb3VwIHNsaWRlclxuLy8vL1xuXG4vLy8gRGVmYXVsdCBzbGlkZXIgd2lkdGggb2YgYSB2ZXJ0aWNhbCBzbGlkZXIuIChEb2Vzbid0IGFwcGx5IHRvIHRoZSBuYXRpdmUgc2xpZGVyLilcbi8vLyBAdHlwZSBOdW1iZXJcbiRzbGlkZXItd2lkdGgtdmVydGljYWw6IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIFRyYW5zaXRpb24gcHJvcGVydGllcyB0byBhcHBseSB0byB0aGUgc2xpZGVyIGhhbmRsZSBhbmQgZmlsbC4gKERvZXNuJ3QgYXBwbHkgdG8gdGhlIG5hdGl2ZSBzbGlkZXIuKVxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiRzbGlkZXItdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3Igc2xpZGVycy5cbkBtaXhpbiBzbGlkZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6ICRzbGlkZXItaGVpZ2h0O1xuICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAyLjI1cmVtO1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItYmFja2dyb3VuZDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgdG91Y2gtYWN0aW9uOiBub25lO1xufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIGFjdGl2ZSBmaWxsIGZvciBzbGlkZXJzLlxuQG1peGluIHNsaWRlci1maWxsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogJHNsaWRlci1oZWlnaHQ7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1maWxsLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzbGlkZXItdHJhbnNpdGlvbjtcblxuICAmLmlzLWRyYWdnaW5nIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMHMgbGluZWFyO1xuICB9XG59XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3IgdGhlIHNsaWRlciBoYW5kbGVzLlxuQG1peGluIHNsaWRlci1oYW5kbGUge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIEBpbmNsdWRlIHZlcnRpY2FsLWNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcblxuICBib3JkZXItcmFkaXVzOiAkc2xpZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1oYW5kbGUtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzY2FsZS1jb2xvcigkc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKTtcbiAgfVxuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuQG1peGluIHNsaWRlci1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6ICRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuQG1peGluIHNsaWRlci12ZXJ0aWNhbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItd2lkdGgtdmVydGljYWw7XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuXG4gIC5zbGlkZXItZmlsbCB7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkc2xpZGVyLXdpZHRoLXZlcnRpY2FsO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcbiAgICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zbGlkZXIge1xuICAvLyBDb250YWluZXJcbiAgLnNsaWRlciB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIEZpbGwgYXJlYVxuICAuc2xpZGVyLWZpbGwge1xuICAgIEBpbmNsdWRlIHNsaWRlci1maWxsO1xuICB9XG5cbiAgLy8gRHJhZ2dhYmxlIGhhbmRsZVxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWhhbmRsZTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gIC5zbGlkZXIuZGlzYWJsZWQsXG4gIC5zbGlkZXJbZGlzYWJsZWRdIHtcbiAgICBAaW5jbHVkZSBzbGlkZXItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBWZXJ0aWNhbCBzbGlkZXJcbiAgLnNsaWRlci52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gUlRMIHN1cHBvcnRcbiAgQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsIHtcbiAgICAuc2xpZGVyOm5vdCgudmVydGljYWwpIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBtaXhpbiBmb3VuZGF0aW9uLXN0aWNreSB7XG4gIC5zdGlja3ktY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuc3RpY2t5IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICB9XG5cbiAgLnN0aWNreS5pcy1zdHVjayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDU7XG5cbiAgICAmLmlzLWF0LXRvcCB7XG4gICAgICB0b3A6IDA7XG4gICAgfVxuXG4gICAgJi5pcy1hdC1ib3R0b20ge1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5zdGlja3kuaXMtYW5jaG9yZWQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiBhdXRvO1xuXG4gICAgJi5pcy1hdC1ib3R0b20ge1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcmV2ZWFsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSBtb2RhbC5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHdpZHRoIG9mIGEgbW9kYWwsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtd2lkdGg6IDYwMHB4ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXhpbXVtIHdpZHRoIG9mIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgYXJvdW5kIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHotaW5kZXggZm9yIG1vZGFscy4gVGhlIG92ZXJsYXkgdXNlcyB0aGlzIHZhbHVlLCB3aGlsZSB0aGUgbW9kYWwgaXRzZWxmIHVzZXMgdGhpcyB2YWx1ZSBwbHVzIG9uZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtemluZGV4OiAxMDA1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBvdmVybGF5cy5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjQ1KSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG1vZGFsIG92ZXJsYXkuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRyZXZlYWwtb3ZlcmxheS1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIG92ZXJsYXkuXG5AbWl4aW4gcmV2ZWFsLW92ZXJsYXkoJGJhY2tncm91bmQ6ICRyZXZlYWwtb3ZlcmxheS1iYWNrZ3JvdW5kKSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkcmV2ZWFsLXppbmRleDtcblxuICBkaXNwbGF5OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYSBtb2RhbC5cbkBtaXhpbiByZXZlYWwtbW9kYWwtYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgei1pbmRleDogJHJldmVhbC16aW5kZXggKyAxO1xuICAvLyBXb3JrYXJvdW5kIGFuZHJvaWQgYnJvd3NlciB6LWluZGV4IGJ1Z1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHJldmVhbC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJHJldmVhbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyZXZlYWwtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmV2ZWFsLWJhY2tncm91bmQ7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHJvd3MgZG9uJ3QgaGF2ZSBhIG1pbi13aWR0aCBvbiB0aGVtXG4gIC5jb2x1bW4ge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC8vIFN0cmlwIG1hcmdpbnMgZnJvbSB0aGUgbGFzdCBpdGVtIGluIHRoZSBtb2RhbFxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGp1c3RzIHRoZSB3aWR0aCBvZiBhIG1vZGFsLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBXaWR0aCBvZiB0aGUgbW9kYWwuIEdlbmVyYWxseSBhIHBlcmNlbnRhZ2UuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXgtd2lkdGggWyRyZXZlYWwtbWF4LXdpZHRoXSAtIE1heGltdW0gd2lkdGggb2YgdGhlIG1vZGFsLlxuQG1peGluIHJldmVhbC1tb2RhbC13aWR0aChcbiAgJHdpZHRoOiAkcmV2ZWFsLXdpZHRoLFxuICAkbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aFxuKSB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICAgQGV4dGVuZCAlcmV2ZWFsLWNlbnRlcmVkO1xuICAgIHdpZHRoOiAkd2lkdGg7XG4gICAgbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGZ1bGwtc2NyZWVuIG1vZGFsLCB3aGljaCBzdHJldGNoZXMgdGhlIGZ1bGwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgd2luZG93LlxuQG1peGluIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuIHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgaGVpZ2h0OiAxMDB2aDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1kdXBsaWNhdGUtcHJvcGVydGllc1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXZlYWwge1xuICAvLyBbVE9ET10gSXMgdGhpcyBuZWNlc3Nhcnk/XG4gIGJvZHkuaXMtcmV2ZWFsLW9wZW4geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgLy8gaHRtbCBnZXRzIHRoaXMgY2xhc3Mgb25seSBpbiBpT1NcbiAgaHRtbC5pcy1yZXZlYWwtb3BlbixcbiAgaHRtbC5pcy1yZXZlYWwtb3BlbiBib2R5IHtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICB9XG5cbiAgLy8gT3ZlcmxheVxuICAucmV2ZWFsLW92ZXJsYXkge1xuICAgIEBpbmNsdWRlIHJldmVhbC1vdmVybGF5O1xuICB9XG5cbiAgLy8gTW9kYWwgY29udGFpbmVyXG4gIC5yZXZlYWwge1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1iYXNlO1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgkcmV2ZWFsLXdpZHRoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFBsYWNlaG9sZGVyIHNlbGVjdG9yIGZvciBtZWRpdW0tYW5kLXVwIG1vZGFsc1xuICAgIC8vIFByZXZlbnRzIGR1cGxpY2F0ZSBDU1Mgd2hlbiBkZWZpbmluZyBtdWx0aXBsZSBSZXZlYWwgc2l6ZXNcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgJXJldmVhbC1jZW50ZXJlZCB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgcGFkZGluZ1xuICAgICYuY29sbGFwc2Uge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAvLyBTaXppbmcgY2xhc3Nlc1xuICAgICYudGlueSAgeyBAaW5jbHVkZSByZXZlYWwtbW9kYWwtd2lkdGgoMzAlKTsgfVxuICAgICYuc21hbGwgeyBAaW5jbHVkZSByZXZlYWwtbW9kYWwtd2lkdGgoNTAlKTsgfVxuICAgICYubGFyZ2UgeyBAaW5jbHVkZSByZXZlYWwtbW9kYWwtd2lkdGgoOTAlKTsgfVxuXG4gICAgLy8gRnVsbC1zY3JlZW4gbW9kZVxuICAgICYuZnVsbCB7XG4gICAgICBAaW5jbHVkZSByZXZlYWwtbW9kYWwtZnVsbHNjcmVlbjtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgICYud2l0aG91dC1vdmVybGF5IHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHN3aXRjaFxuLy8vL1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGFjdGl2ZSBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2gsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0OiAycmVtICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgc3dpdGNoIHdpdGggLnRpbnkgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2ggd2l0aCAuc21hbGwgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbSAhZGVmYXVsdDtcblxuLy8vIEhlaWdodCBvZiBhIHN3aXRjaCB3aXRoIC5sYXJnZSBjbGFzcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIG9mIHRoZSBzd2l0Y2hcbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIGJvcmRlciBhcm91bmQgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzd2l0Y2ggY29udGFpbmVyIGFuZCBwYWRkbGUuXG4vLy8gQHR5cGUgQ29sb3JcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgYmV0d2VlbiBhIHN3aXRjaCBwYWRkbGUgYW5kIHRoZSBlZGdlIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtb2Zmc2V0OiAwLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gYm9yZGVyIHJhZGl1cyBvZiB0aGUgc3dpdGNoIHBhZGRsZVxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHN3aXRjaCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLyBtYWtlIHRoZW0gdmFyaWFibGVzXG4vLyBhc2sgYWJvdXQgYWNjZXNzaWJpbGl0eSBvbiBsYWJlbFxuLy8gY2hhbmdlIGNsYXNzIG5hbWUgZm9yIHRleHRcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBjb250YWluZXIgY2xhc3MuXG5AbWl4aW4gc3dpdGNoLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHN3aXRjaC1tYXJnaW47XG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gVGhlc2UgcHJvcGVydGllcyBjYXNjYWRlIGRvd24gdG8gdGhlIHN3aXRjaCB0ZXh0XG4gIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR3aGl0ZTtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBpbnB1dC4gQXBwbHkgdGhpcyB0byBhbiBgPGlucHV0PmAgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYmFja2dyb3VuZCBhbmQgcGFkZGxlIG9mIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIGEgYDxsYWJlbD5gIHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtcGFkZGxlIHtcbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHN3aXRjaC1wYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRzd2l0Y2gtcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWFjdGl2ZS1vZmZlc3Q6ICRzd2l0Y2gtd2lkdGggLSAkcGFkZGxlLXdpZHRoIC0gJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIGJvcmRlci1yYWRpdXM6ICRzd2l0Y2gtcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkc3dpdGNoLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzd2l0Y2gtcGFkZGxlLXRyYW5zaXRpb247XG5cbiAgLy8gUmVzZXR0aW5nIHRoZXNlIDxsYWJlbD4gcHJlc2V0cyBzbyB0eXBlIHN0eWxlcyBjYXNjYWRlIGRvd25cbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBOZWVkZWQgdG8gb3ZlcnJpZGUgc3BlY2lmaWNpdHlcbiAgaW5wdXQgKyAmIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBUaGUgcGFkZGxlIGl0c2VsZlxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1wYWRkbGUtcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ7XG4gICAgdHJhbnNpdGlvbjogJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgdmlzdWFsIHN0eWxlIHdoZW4gdGhlIHN3aXRjaCBpcyBhY3RpdmVcbiAgaW5wdXQ6Y2hlY2tlZCB+ICYge1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgICB9XG4gIH1cblxuICBpbnB1dDpmb2N1cyB+ICYge1xuICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgfVxufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYWN0aXZlL2luYWN0aXZlIHRleHQgaW5zaWRlIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIHRleHQgZWxlbWVudHMgaW5zaWRlIHRoZSBzd2l0Y2ggYDxsYWJlbD5gLlxuQG1peGluIHN3aXRjaC10ZXh0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBhY3RpdmUgc3RhdGUgdGV4dCB3aXRoaW4gYSBzd2l0Y2guXG5AbWl4aW4gc3dpdGNoLXRleHQtYWN0aXZlIHtcbiAgI3skZ2xvYmFsLWxlZnR9OiA4JTtcbiAgZGlzcGxheTogbm9uZTtcblxuICBpbnB1dDpjaGVja2VkICsgbGFiZWwgPiAmIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBpbmFjdGl2ZSBzdGF0ZSB0ZXh0IHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtdGV4dC1pbmFjdGl2ZSB7XG4gICN7JGdsb2JhbC1yaWdodH06IDE1JTtcblxuICBpbnB1dDpjaGVja2VkICsgbGFiZWwgPiAmIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vLyBDaGFuZ2VzIHRoZSBzaXplIG9mIGEgc3dpdGNoIGJ5IG1vZGlmeWluZyB0aGUgc2l6ZSBvZiB0aGUgYm9keSBhbmQgcGFkZGxlLiBBcHBseSB0aGlzIHRvIGEgc3dpdGNoIGNvbnRhaW5lci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGZvbnQtc2l6ZSBbMXJlbV0gLSBGb250IHNpemUgb2YgbGFiZWwgdGV4dCB3aXRoaW4gdGhlIHN3aXRjaC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHN3aXRjaC1oZWlnaHQgWzJyZW1dIC0gSGVpZ2h0IG9mIHRoZSBzd2l0Y2ggYm9keS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRsZS1vZmZzZXQgWzAuMjVyZW1dIC0gU3BhY2luZyBiZXR3ZWVuIHRoZSBzd2l0Y2ggcGFkZGxlIGFuZCB0aGUgZWRnZSBvZiB0aGUgc3dpdGNoIGJvZHkuXG5AbWl4aW4gc3dpdGNoLXNpemUoXG4gICRmb250LXNpemU6IDFyZW0sXG4gICRzd2l0Y2gtaGVpZ2h0OiAycmVtLFxuICAkcGFkZGxlLW9mZnNldDogMC4yNXJlbVxuKSB7XG5cbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLXdpZHRoOiAkc3dpdGNoLWhlaWdodCAtICgkcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHBhZGRsZS1vZmZzZXQgKiAyKTtcbiAgJHBhZGRsZS1hY3RpdmUtb2ZmZXN0OiAkc3dpdGNoLXdpZHRoIC0gJHBhZGRsZS13aWR0aCAtICRwYWRkbGUtb2Zmc2V0O1xuXG4gIGhlaWdodDogJHN3aXRjaC1oZWlnaHQ7XG5cbiAgLnN3aXRjaC1wYWRkbGUge1xuICAgIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICAgIGhlaWdodDogJHN3aXRjaC1oZWlnaHQ7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICB9XG5cbiAgLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICB0b3A6ICRwYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHBhZGRsZS1vZmZzZXQ7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcbiAgfVxuXG4gIGlucHV0OmNoZWNrZWQgfiAuc3dpdGNoLXBhZGRsZTo6YWZ0ZXIge1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHBhZGRsZS1hY3RpdmUtb2ZmZXN0O1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXN3aXRjaCB7XG4gIC8vIENvbnRhaW5lciBjbGFzc1xuICAuc3dpdGNoIHtcbiAgICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuICAgIEBpbmNsdWRlIHN3aXRjaC1jb250YWluZXI7XG4gIH1cblxuICAvLyA8aW5wdXQ+IGVsZW1lbnRcbiAgLnN3aXRjaC1pbnB1dCB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLWlucHV0O1xuICB9XG5cbiAgLy8gPGxhYmVsPiBlbGVtZW50XG4gIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtcGFkZGxlO1xuICB9XG5cbiAgLy8gQmFzZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAlc3dpdGNoLXRleHQge1xuICAgIEBpbmNsdWRlIHN3aXRjaC10ZXh0O1xuICB9XG5cbiAgLy8gQWN0aXZlIGxhYmVsIHRleHQgc3R5bGVzXG4gIC5zd2l0Y2gtYWN0aXZlIHtcbiAgICBAZXh0ZW5kICVzd2l0Y2gtdGV4dDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dC1hY3RpdmU7XG4gIH1cblxuICAvLyBJbmFjdGl2ZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAuc3dpdGNoLWluYWN0aXZlIHtcbiAgICBAZXh0ZW5kICVzd2l0Y2gtdGV4dDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dC1pbmFjdGl2ZTtcbiAgfVxuXG4gIC8vIFN3aXRjaCBzaXplc1xuICAuc3dpdGNoLnRpbnkge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1zaXplKHJlbS1jYWxjKDEwKSwgJHN3aXRjaC1oZWlnaHQtdGlueSwgJHN3aXRjaC1wYWRkbGUtb2Zmc2V0KTtcbiAgfVxuXG4gIC5zd2l0Y2guc21hbGwge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1zaXplKHJlbS1jYWxjKDEyKSwgJHN3aXRjaC1oZWlnaHQtc21hbGwsICRzd2l0Y2gtcGFkZGxlLW9mZnNldCk7XG4gIH1cblxuICAuc3dpdGNoLmxhcmdlIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxNiksICRzd2l0Y2gtaGVpZ2h0LWxhcmdlLCAkc3dpdGNoLXBhZGRsZS1vZmZzZXQpO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgZm9yY2UtZWxlbWVudC1uZXN0aW5nLCBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFibGVcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIHRhYmxlIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGUgICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzY2FsZSBmb3IgZGFya2VuaW5nIHRoZSBzdHJpcGVkIHRhYmxlIHJvd3MgYW5kIHRoZSB0YWJsZSBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtY29sb3Itc2NhbGU6IDUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGFibGUgYm9yZGVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFibGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtcGFkZGluZzogcmVtLWNhbGMoOCAxMCAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNjYWxlIGZvciBkYXJrZW5pbmcgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtaG92ZXItc2NhbGU6IDIlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBzdGFuZGFyZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2Ygc3RyaXBlZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSkgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIHRhYmxlcyBhcmUgc3RyaXBlZCBieSBkZWZhdWx0IGFuZCBhbiAudW5zdHJpcGVkIGNsYXNzIGlzIGNyZWF0ZWQuIElmIGBmYWxzZWAsIGEgLnN0cmlwZWQgY2xhc3MgaXMgY3JlYXRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3Igc3RyaXBlZCByb3dzLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIHN0cmlwZSBvbiByb3dzIG9mIHRoZSB0YWJsZXMsIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGFuZCBmb290ZXIuIElmIGV2ZW4sIHRoZSBldmVuIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgb2RkLCB0aGUgb2RkIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgZW1wdHksIG9yIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRhYmxlIHJvd3Mgd2lsbCBoYXZlIG5vIHN0cmlwaW5nLlxuLy8vIEB0eXBlIEtleXdvcmRcbiR0YWJsZS1zdHJpcGU6IGV2ZW4gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWFkZXIgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWhlYWQtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSAvIDIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBoZWFkZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgZm9vdGVyIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1mb290LWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBmb290ZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBoZWFkZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1oZWFkLWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvb3Rlci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIGhlYWRlciB3aGVuIHVzaW5nIHN0YWNrZWQgdGFibGVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbkBtaXhpbiAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGU6ICR0YWJsZS1zdHJpcGUpIHtcbiAgdHIge1xuICAgIC8vIElmIHN0cmlwZSBpcyBzZXQgdG8gZXZlbiwgZGFya2VuIHRoZSBldmVuIHJvd3MuXG4gICAgQGlmICRzdHJpcGUgPT0gZXZlbiB7XG4gICAgICAmOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc3RyaXBlIGlzIHNldCB0byBvZGQsIGRhcmtlbiB0aGUgb2RkIHJvd3MuXG4gICAgQGVsc2UgaWYgJHN0cmlwZSA9PSBvZGQge1xuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiAtemYtdGFibGUtdW5zdHJpcGUoKSB7XG4gIHRyIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICR0YWJsZS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZTogJHRhYmxlLXN0cmlwZSwgJGlzLXN0cmlwZWQ6ICR0YWJsZS1pcy1zdHJpcGVkKSB7XG4gIHRoZWFkLFxuICB0Ym9keSxcbiAgdGZvb3Qge1xuICAgIGJvcmRlcjogJHRhYmxlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC8vIENhcHRpb25cbiAgY2FwdGlvbiB7XG4gICAgcGFkZGluZzogJHRhYmxlLXBhZGRpbmc7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4gIH1cblxuICAvLyBUYWJsZSBoZWFkXG4gIHRoZWFkIHtcbiAgICBiYWNrZ3JvdW5kOiAkdGFibGUtaGVhZC1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkdGFibGUtaGVhZC1mb250LWNvbG9yO1xuICB9XG5cbiAgLy8gVGFibGUgZm9vdFxuICB0Zm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHRhYmxlLWZvb3QtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRhYmxlLWZvb3QtZm9udC1jb2xvcjtcbiAgfVxuXG4gIC8vIFRhYmxlIGhlYWQgYW5kIGZvb3RcbiAgdGhlYWQsXG4gIHRmb290IHtcbiAgICAvLyBSb3dzIHdpdGhpbiBoZWFkIGFuZCBmb290XG4gICAgdHIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gQ2VsbHMgd2l0aGluIGhlYWQgYW5kIGZvb3RcbiAgICB0aCxcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiAkdGFibGUtcGFkZGluZztcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuICAgICAgdGV4dC1hbGlnbjogI3skZ2xvYmFsLWxlZnR9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFRhYmxlIHJvd3NcbiAgdGJvZHkge1xuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6ICR0YWJsZS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRhYmxlcyBhcmUgc3RyaXBlZFxuICBAaWYgJGlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgdGJvZHkge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLXN0cmlwZSgkc3RyaXBlKTtcbiAgICB9XG5cbiAgICAmLnVuc3RyaXBlZCB7XG4gICAgICB0Ym9keSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS11bnN0cmlwZSgpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0YWJsZXMgYXJlIG5vdCBzdHJpcGVkXG4gIEBlbHNlIGlmICRpcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICB0Ym9keSB7XG4gICAgICBAaW5jbHVkZSAtemYtdGFibGUtdW5zdHJpcGUoKTtcbiAgICB9XG5cbiAgICAmLnN0cmlwZWQge1xuICAgICAgdGJvZHkge1xuICAgICAgICBAaW5jbHVkZSAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlcy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHJpcGUgWyR0YWJsZS1zdHJpcGVdIC0gVXNlcyBrZXl3b3JkcyBldmVuLCBvZGQsIG9yIG5vbmUgdG8gZGFya2VuIHJvd3Mgb2YgdGhlIHRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBldmVuLlxuQG1peGluIHRhYmxlKFxuICAkc3RyaXBlOiAkdGFibGUtc3RyaXBlLFxuICAkbmVzdDogZmFsc2Vcbikge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogJGdsb2JhbC1tYXJnaW47XG4gIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4gIEBpZiAkbmVzdCB7XG4gICAgQGluY2x1ZGUgLXpmLXRhYmxlLWNoaWxkcmVuLXN0eWxlcygkc3RyaXBlKTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGF0LXJvb3Qge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLWNoaWxkcmVuLXN0eWxlcygkc3RyaXBlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgdGhlIGFiaWxpdHkgdG8gaG9yaXpvbnRhbGx5IHNjcm9sbCB0aGUgdGFibGUgd2hlbiB0aGUgY29udGVudCBvdmVyZmxvd3MgaG9yaXpvbnRhbGx5LlxuQG1peGluIHRhYmxlLXNjcm9sbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbn1cblxuLy8vIFNsaWdodGx5IGRhcmtlbnMgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG5AbWl4aW4gdGFibGUtaG92ZXIge1xuICB0aGVhZCB0ciB7XG4gICAgLy9EYXJrZW5zIHRoZSB0YWJsZSBoZWFkZXIgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1oZWFkLXJvdy1ob3ZlcjtcbiAgICB9XG4gIH1cblxuICB0Zm9vdCB0ciB7XG4gICAgLy9EYXJrZW5zIHRoZSB0YWJsZSBmb290ZXIgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1mb290LXJvdy1ob3ZlcjtcbiAgICB9XG4gIH1cblxuICB0Ym9keSB0ciB7XG4gICAgLy9EYXJrZW5zIHRoZSBub24tc3RyaXBlZCB0YWJsZSByb3dzIG9uIGhvdmVyLlxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1ob3ZlcjtcbiAgICB9XG4gIH1cblxuICBAaWYgJHRhYmxlLWlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgLy8gRGFya2VucyB0aGUgZXZlbiBzdHJpcGVkIHRhYmxlIHJvd3MuXG4gICAgQGlmKCR0YWJsZS1zdHJpcGUgPT0gZXZlbikge1xuICAgICAgJjpub3QoLnVuc3RyaXBlZCkgdHI6bnRoLW9mLXR5cGUoZXZlbik6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXJrZW5zIHRoZSBvZGQgc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBlbHNlaWYoJHRhYmxlLXN0cmlwZSA9PSBvZGQpIHtcbiAgICAgICY6bm90KC51bnN0cmlwZWQpIHRyOm50aC1vZi10eXBlKG9kZCk6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAZWxzZSBpZiAkdGFibGUtaXMtc3RyaXBlZCA9PSBmYWxzZSB7XG4gICAgLy8gRGFya2VucyB0aGUgZXZlbiBzdHJpcGVkIHRhYmxlIHJvd3MuXG4gICAgQGlmKCR0YWJsZS1zdHJpcGUgPT0gZXZlbikge1xuICAgICAgJi5zdHJpcGVkIHRyOm50aC1vZi10eXBlKGV2ZW4pOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1zdHJpcGUtaG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGFya2VucyB0aGUgb2RkIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAZWxzZWlmKCR0YWJsZS1zdHJpcGUgPT0gb2RkKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc3RhY2tlZCB0YWJsZS4gVXNlZnVsIGZvciBzbWFsbC1zY3JlZW4gbGF5b3V0cy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRoZWFkZXIgWyRzaG93LWhlYWRlci1mb3Itc3RhY2tlZF0gLSBTaG93IHRoZSBmaXJzdCB0aCBvZiBoZWFkZXIgd2hlbiBzdGFja2VkLlxuQG1peGluIHRhYmxlLXN0YWNrKCRoZWFkZXI6ICRzaG93LWhlYWRlci1mb3Itc3RhY2tlZCkge1xuICBAaWYgJGhlYWRlciB7XG4gICAgdGhlYWQge1xuICAgICAgdGg6Zmlyc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgdGgge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgdGhlYWQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICB0Zm9vdCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIHRyLFxuICB0aCxcbiAgdGQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgdGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGFibGUoJG5lc3Q6IGZhbHNlKSB7XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSB0YWJsZSgkbmVzdDogJG5lc3QpO1xuICB9XG5cbiAgdGFibGUuc3RhY2sge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgIEBpbmNsdWRlIHRhYmxlLXN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlLnNjcm9sbCB7XG4gICAgQGluY2x1ZGUgdGFibGUtc2Nyb2xsO1xuICB9XG5cbiAgdGFibGUuaG92ZXIge1xuICAgIEBpbmNsdWRlIHRhYmxlLWhvdmVyO1xuICB9XG5cbiAgLnRhYmxlLXNjcm9sbCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIHRhYmxlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBpbXBvcnQgJ21hdGgnO1xuXG4vLy8vXG4vLy8gQGdyb3VwIGZ1bmN0aW9uc1xuLy8vL1xuXG4vLy8gQ2hlY2tzIHRoZSBsdW1pbmFuY2Ugb2YgYCRjb2xvcmAuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgLSBDb2xvciB0byBjaGVjayB0aGUgbHVtaW5hbmNlIG9mLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIGx1bWluYW5jZSBvZiBgJGNvbG9yYC5cbkBmdW5jdGlvbiBjb2xvci1sdW1pbmFuY2UoJGNvbG9yKSB7XG4gIC8vIEFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL0xlYVZlcm91L2NvbnRyYXN0LXJhdGlvL2Jsb2IvZ2gtcGFnZXMvY29sb3IuanNcbiAgLy8gRm9ybXVsYTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAkcmdiYTogcmVkKCRjb2xvciksIGdyZWVuKCRjb2xvciksIGJsdWUoJGNvbG9yKTtcbiAgJHJnYmEyOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIDMge1xuICAgICRyZ2I6IG50aCgkcmdiYSwgJGkpO1xuICAgICRyZ2I6ICRyZ2IgLyAyNTU7XG5cbiAgICAkcmdiOiBpZigkcmdiIDwgMC4wMzkyOCwgJHJnYiAvIDEyLjkyLCBwb3coKCRyZ2IgKyAwLjA1NSkgLyAxLjA1NSwgMi40KSk7XG5cbiAgICAkcmdiYTI6IGFwcGVuZCgkcmdiYTIsICRyZ2IpO1xuICB9XG5cbiAgQHJldHVybiAwLjIxMjYgKiBudGgoJHJnYmEyLCAxKSArIDAuNzE1MiAqIG50aCgkcmdiYTIsIDIpICsgMC4wNzIyICogbnRoKCRyZ2JhMiwgMyk7XG59XG5cbi8vLyBDaGVja3MgdGhlIGNvbnRyYXN0IHJhdGlvIG9mIHR3byBjb2xvcnMuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IxIC0gRmlyc3QgY29sb3IgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IyIC0gU2Vjb25kIGNvbG9yIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgY29udHJhc3QgcmF0aW8gb2YgdGhlIGNvbXBhcmVkIGNvbG9ycy5cbkBmdW5jdGlvbiBjb2xvci1jb250cmFzdCgkY29sb3IxLCAkY29sb3IyKSB7XG4gIC8vIEFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL0xlYVZlcm91L2NvbnRyYXN0LXJhdGlvL2Jsb2IvZ2gtcGFnZXMvY29sb3IuanNcbiAgLy8gRm9ybXVsYTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAkbHVtaW5hbmNlMTogY29sb3ItbHVtaW5hbmNlKCRjb2xvcjEpICsgMC4wNTtcbiAgJGx1bWluYW5jZTI6IGNvbG9yLWx1bWluYW5jZSgkY29sb3IyKSArIDAuMDU7XG4gICRyYXRpbzogJGx1bWluYW5jZTEgLyAkbHVtaW5hbmNlMjtcblxuICBAaWYgJGx1bWluYW5jZTIgPiAkbHVtaW5hbmNlMSB7XG4gICAgJHJhdGlvOiAxIC8gJHJhdGlvO1xuICB9XG5cbiAgJHJhdGlvOiByb3VuZCgkcmF0aW8gKiAxMCkgLyAxMDtcblxuICBAcmV0dXJuICRyYXRpbztcbn1cblxuLy8vIENoZWNrcyB0aGUgbHVtaW5hbmNlIG9mIGAkYmFzZWAsIGFuZCByZXR1cm5zIHRoZSBjb2xvciBmcm9tIGAkY29sb3JzYCAobGlzdCBvZiBjb2xvcnMpIHRoYXQgaGFzIHRoZSBtb3N0IGNvbnRyYXN0LlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yMSAtIEZpcnN0IGNvbG9yIHRvIGNvbXBhcmUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yMiAtIFNlY29uZCBjb2xvciB0byBjb21wYXJlLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIGNvbnRyYXN0IHJhdGlvIG9mIHRoZSBjb21wYXJlZCBjb2xvcnMuXG5AZnVuY3Rpb24gY29sb3ItcGljay1jb250cmFzdCgkYmFzZSwgJGNvbG9yczogKCR3aGl0ZSwgJGJsYWNrKSwgJHRvbGVyYW5jZTogMCkge1xuICAkY29udHJhc3Q6IGNvbG9yLWNvbnRyYXN0KCRiYXNlLCBudGgoJGNvbG9ycywgMSkpO1xuICAkYmVzdDogbnRoKCRjb2xvcnMsIDEpO1xuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRjb2xvcnMpIHtcbiAgICAkY3VycmVudC1jb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAkaSkpO1xuICAgIEBpZiAoJGN1cnJlbnQtY29udHJhc3QgLSAkY29udHJhc3QgPiAkdG9sZXJhbmNlKSB7XG4gICAgICAkY29udHJhc3Q6IGNvbG9yLWNvbnRyYXN0KCRiYXNlLCBudGgoJGNvbG9ycywgJGkpKTtcbiAgICAgICRiZXN0OiBudGgoJGNvbG9ycywgJGkpO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAoJGNvbnRyYXN0IDwgMykge1xuICAgIEB3YXJuIFwiQ29udHJhc3QgcmF0aW8gb2YgI3skYmVzdH0gb24gI3skYmFzZX0gaXMgcHJldHR5IGJhZCwganVzdCAjeyRjb250cmFzdH1cIjtcbiAgfVxuXG4gIEByZXR1cm4gJGJlc3Q7XG59XG5cbi8vLyBTY2FsZXMgYSBjb2xvciB0byBiZSBkYXJrZXIgaWYgaXQncyBsaWdodCwgb3IgbGlnaHRlciBpZiBpdCdzIGRhcmsuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHRpbnQgYSBjb2xvciBhcHByb3ByaWF0ZSB0byBpdHMgbGlnaHRuZXNzLlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIC0gQ29sb3IgdG8gc2NhbGUuXG4vLy8gQHBhcmFtIHtQZXJjZW50YWdlfSAkc2NhbGUgWzUlXSAtIEFtb3VudCB0byBzY2FsZSB1cCBvciBkb3duLlxuLy8vIEBwYXJhbSB7UGVyY2VudGFnZX0gJHRocmVzaG9sZCBbNDAlXSAtIFRocmVzaG9sZCBvZiBsaWdodG5lc3MgdG8gY2hlY2sgYWdhaW5zdC5cbi8vL1xuLy8vIEByZXR1cm5zIHtDb2xvcn0gQSBzY2FsZWQgY29sb3IuXG5AZnVuY3Rpb24gc21hcnQtc2NhbGUoJGNvbG9yLCAkc2NhbGU6IDUlLCAkdGhyZXNob2xkOiA0MCUpIHtcbiAgQGlmIGxpZ2h0bmVzcygkY29sb3IpID4gJHRocmVzaG9sZCB7XG4gICAgJHNjYWxlOiAtJHNjYWxlO1xuICB9XG4gIEByZXR1cm4gc2NhbGUtY29sb3IoJGNvbG9yLCAkbGlnaHRuZXNzOiAkc2NhbGUpO1xufVxuXG4vLy8gR2V0IGNvbG9yIGZyb20gZm91bmRhdGlvbi1wYWxldHRlXG4vLy9cbi8vLyBAcGFyYW0ge2tleX0gY29sb3Iga2V5IGZyb20gZm91bmRhdGlvbi1wYWxldHRlXG4vLy9cbi8vLyBAcmV0dXJucyB7Q29sb3J9IGNvbG9yIGZyb20gZm91bmRhdGlvbi1wYWxldHRlXG5AZnVuY3Rpb24gZ2V0LWNvbG9yKCRrZXkpIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsICRrZXkpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgJGtleSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBlcnJvciAnZ2l2ZW4gJGtleSBpcyBub3QgYXZhaWxhYmxlIGluICRmb3VuZGF0aW9uLXBhbGV0dGUnO1xuICB9XG59XG5cbi8vLyBUcmFuc2ZlcnMgdGhlIGNvbG9ycyBpbiB0aGUgYCRmb3VuZGF0aW9uLXBhbGV0dGVgbWFwIGludG8gdmFyaWFibGVzLCBzdWNoIGFzIGAkcHJpbWFyeS1jb2xvcmAgYW5kIGAkc2Vjb25kYXJ5LWNvbG9yYC4gQ2FsbCB0aGlzIG1peGluIGJlbG93IHRoZSBHbG9iYWwgc2VjdGlvbiBvZiB5b3VyIHNldHRpbmdzIGZpbGUgdG8gcHJvcGVybHkgbWlncmF0ZSB5b3VyIGNvZGViYXNlLlxuQG1peGluIGFkZC1mb3VuZGF0aW9uLWNvbG9ycygpIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpIHtcbiAgICAkcHJpbWFyeS1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBwcmltYXJ5KSAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCBzZWNvbmRhcnkpIHtcbiAgICAkc2Vjb25kYXJ5LWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHNlY29uZGFyeSkgIWdsb2JhbDtcbiAgfVxuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgc3VjY2Vzcykge1xuICAgICRzdWNjZXNzLWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHN1Y2Nlc3MpICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHdhcm5pbmcpIHtcbiAgICAkd2FybmluZy1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCB3YXJuaW5nKSAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCBhbGVydCkge1xuICAgICRhbGVydC1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBhbGVydCkgIWdsb2JhbDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFic1xuLy8vL1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gb2YgdGhlIHRhYiBiYXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFiLW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhIHRhYiBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBvZiB0YWIgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBBY3RpdmUgYmFja2dyb3VuZCBjb2xvciBvZiBhIHRhYiBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItYmFja2dyb3VuZC1hY3RpdmU6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQWN0aXZlIGZvbnQgY29sb3Igb2YgdGFiIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItYWN0aXZlLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiB0YWIgaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFiLWl0ZW0tZm9udC1zaXplOiByZW0tY2FsYygxMikgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGl0ZW1zIGluIGEgTWVudS5cbiR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgb2YgYSB0YWIgaXRlbS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItaXRlbS1wYWRkaW5nOiAxLjI1cmVtIDEuNXJlbSAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGBleHBhbmQtbmAgY2xhc3NlcyB0byBpbmNsdWRlIGluIHRoZSBDU1MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFiLWV4cGFuZC1tYXg6IDYgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1jb250ZW50LWJvcmRlcjogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJHRhYi1jb250ZW50LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSB0YWIgY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIGEgYDx1bD5gLlxuQG1peGluIHRhYnMtY29udGFpbmVyIChcbiAgJG1hcmdpbjogJHRhYi1tYXJnaW4sXG4gICRiYWNrZ3JvdW5kOiAkdGFiLWJhY2tncm91bmQsXG4gICRib3JkZXItY29sb3I6ICR0YWItY29udGVudC1ib3JkZXJcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luOiAkbWFyZ2luO1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuXG4vLy8gQXVnbWVudHMgYSB0YWIgY29udGFpbmVyIHRvIGhhdmUgdmVydGljYWwgdGFicy4gVXNlIHRoaXMgaW4gY29uanVuY3Rpb24gd2l0aCBgdGFicy1jb250YWluZXIoKWAuXG5AbWl4aW4gdGFicy1jb250YWluZXItdmVydGljYWwge1xuICA+IGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBsaW5rcyB3aXRoaW4gYSB0YWIgY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIHRoZSBgPGxpPmAgZWxlbWVudHMgaW5zaWRlIGEgdGFiIGNvbnRhaW5lci5cbkBtaXhpbiB0YWJzLXRpdGxlIChcbiAgJHBhZGRpbmc6ICR0YWItaXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkdGFiLWl0ZW0tZm9udC1zaXplLFxuICAkY29sb3I6ICR0YWItY29sb3IsXG4gICRjb2xvci1hY3RpdmU6ICR0YWItYWN0aXZlLWNvbG9yLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXIsXG4gICRiYWNrZ3JvdW5kLWFjdGl2ZTogJHRhYi1iYWNrZ3JvdW5kLWFjdGl2ZVxuKSB7XG4gIGZsb2F0OiAjeyRnbG9iYWwtbGVmdH07XG5cbiAgPiBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkcGFkZGluZztcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgICBjb2xvcjogc2NhbGUtY29sb3IoJGNvbG9yLCAkbGlnaHRuZXNzOiAtMTQlKTtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICZbYXJpYS1zZWxlY3RlZD0ndHJ1ZSddIHtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB3cmFwcGVyIHRoYXQgc3Vycm91bmRzIGEgdGFiIGdyb3VwJ3MgY29udGVudCBwYW5lcy5cbkBtaXhpbiB0YWJzLWNvbnRlbnQgKFxuICAkYmFja2dyb3VuZDogJHRhYi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJHRhYi1jb250ZW50LWNvbG9yLFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXRvcDogMDtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiAkY29sb3I7XG4gIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2U7XG59XG5cbi8vLyBBdWdtZW50cyBhIHRhYiBjb250ZW50IGNvbnRhaW5lciB0byBoYXZlIGEgdmVydGljYWwgc3R5bGUsIGJ5IHNoaWZ0aW5nIHRoZSBib3JkZXIgYXJvdW5kLiBVc2UgdGhpcyBpbiBjb25qdW5jdGlvbiB3aXRoIGB0YWJzLWNvbnRlbnQoKWAuXG5AbWl4aW4gdGFicy1jb250ZW50LXZlcnRpY2FsIChcbiAgJGJvcmRlci1jb2xvcjogJHRhYi1jb250ZW50LWJvcmRlclxuKSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7XG4gIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYW4gaW5kaXZpZHVhbCB0YWIgY29udGVudCBwYW5lbCB3aXRoaW4gdGhlIHRhYiBjb250ZW50IGNvbnRhaW5lci5cbkBtaXhpbiB0YWJzLXBhbmVsIChcbiAgJHBhZGRpbmc6ICR0YWItY29udGVudC1wYWRkaW5nXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgJlthcmlhLWhpZGRlbj1cImZhbHNlXCJdIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi10YWJzIHtcbiAgLnRhYnMge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGFpbmVyO1xuICB9XG5cbiAgLy8gVmVydGljYWxcbiAgLnRhYnMudmVydGljYWwge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGFpbmVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gU2ltcGxlXG4gIC50YWJzLnNpbXBsZSB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgcGFkZGluZzogMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaW1hcnkgY29sb3JcbiAgLnRhYnMucHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnktY29sb3I7XG5cbiAgICA+IGxpID4gYSB7XG4gICAgICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkcHJpbWFyeS1jb2xvcik7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHByaW1hcnktY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWJzLXRpdGxlIHtcbiAgICBAaW5jbHVkZSB0YWJzLXRpdGxlO1xuICB9XG5cbiAgLnRhYnMtY29udGVudCB7XG4gICAgQGluY2x1ZGUgdGFicy1jb250ZW50O1xuICB9XG5cbiAgLnRhYnMtY29udGVudC52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgdGFicy1jb250ZW50LXZlcnRpY2FsO1xuICB9XG5cbiAgLnRhYnMtcGFuZWwge1xuICAgIEBpbmNsdWRlIHRhYnMtcGFuZWw7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHRodW1ibmFpbFxuLy8vL1xuXG4vLy8gQm9yZGVyIGFyb3VuZCB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIEJvcmRlclxuJHRodW1ibmFpbC1ib3JkZXI6IHNvbGlkIDRweCAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIExlbmd0aFxuJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgdW5kZXIgdGh1bWJuYWlsIGltYWdlcy5cbi8vLyBAdHlwZSBTaGFkb3dcbiR0aHVtYm5haWwtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgkYmxhY2ssIDAuMikgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IHVuZGVyIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgU2hhZG93XG4kdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjogMCAwIDZweCAxcHggcmdiYSgkcHJpbWFyeS1jb2xvciwgMC41KSAhZGVmYXVsdDtcblxuLy8vIFRyYW5zaXRpb24gcHJvcHJ0aWVzIGZvciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiR0aHVtYm5haWwtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcyBlYXNlLW91dCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRodW1ibmFpbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG4vLy8gQWRkcyB0aHVtYm5haWwgc3R5bGVzIHRvIGFuIGVsZW1lbnQuXG5AbWl4aW4gdGh1bWJuYWlsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICR0aHVtYm5haWwtbWFyZ2luLWJvdHRvbTtcblxuICBib3JkZXI6ICR0aHVtYm5haWwtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkdGh1bWJuYWlsLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHRodW1ibmFpbC1zaGFkb3c7XG5cbiAgbGluZS1oZWlnaHQ6IDA7XG59XG5cbkBtaXhpbiB0aHVtYm5haWwtbGluayB7XG4gIHRyYW5zaXRpb246ICR0aHVtYm5haWwtdHJhbnNpdGlvbjtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBib3gtc2hhZG93OiAkdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjtcbiAgfVxuXG4gIGltYWdlIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRodW1ibmFpbCB7XG4gIC50aHVtYm5haWwge1xuICAgIEBpbmNsdWRlIHRodW1ibmFpbDtcbiAgfVxuXG4gIGEudGh1bWJuYWlsIHtcbiAgICBAaW5jbHVkZSB0aHVtYm5haWwtbGluaztcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGl0bGUtYmFyXG4vLy8vXG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgV2VpZ2h0XG4kdGl0bGViYXItdGV4dC1mb250LXdlaWdodDogYm9sZCAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIG1lbnUgaWNvbnMgaW5zaWRlIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgbWVudSBpY29ucyBpbnNpZGUgYSB0aXRsZSBiYXIgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gdGhlIG1lbnUgaWNvbiBhbmQgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi10aXRsZS1iYXIge1xuICAudGl0bGUtYmFyIHtcbiAgICBwYWRkaW5nOiAkdGl0bGViYXItcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkdGl0bGViYXItYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRpdGxlYmFyLWNvbG9yO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgfVxuXG4gICAgLm1lbnUtaWNvbiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkdGl0bGViYXItaWNvbi1zcGFjaW5nO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICR0aXRsZWJhci1pY29uLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRpdGxlLWJhci1sZWZ0LFxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG5cbiAgICAudGl0bGUtYmFyLXJpZ2h0IHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRpdGxlLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnRpdGxlLWJhci10aXRsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC13ZWlnaHQ6ICR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlcyBieSBaVVJCXG4vLyBmb3VuZGF0aW9uLnp1cmIuY29tXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0b29sdGlwXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGZvbnQgd2VpZ2h0IG9mIHRoZSBkZWZpbmVkIHRlcm0uXG4vLy8gQHR5cGUgS2V5d29yZCB8IE51bWJlclxuJGhhcy10aXAtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBib3R0b20gb2YgdGhlIGRlZmluZWQgdGVybS5cbi8vLyBAdHlwZSBMaXN0XG4kaGFzLXRpcC1ib3JkZXItYm90dG9tOiBkb3R0ZWQgMXB4ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIG9mIHRoZSB0b29sdGlwIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0b29sdGlwLWJhY2tncm91bmQtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIHRvb2x0aXAgZm9udC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvb2x0aXAtY29sb3I6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBvZiB0aGUgdG9vbHRpcCBiYWNrZ3JvdW5kLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcGFkZGluZzogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIG9mIHRoZSB0b29sdGlwIHRleHQuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCBhIHNtYWxsZXIgZm9udCBzaXplIHRoYW4gdGhlIGJvZHkgY29weS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIHdpZHRoIGZvciB0b29sdGlwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIGhlaWdodCBmb3IgdG9vbHRpcHMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvb2x0aXAgd29yZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuQG1peGluIGhhcy10aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBib3JkZXItYm90dG9tOiAkaGFzLXRpcC1ib3JkZXItYm90dG9tO1xuICBmb250LXdlaWdodDogJGhhcy10aXAtZm9udC13ZWlnaHQ7XG4gIGN1cnNvcjogaGVscDtcbn1cblxuQG1peGluIHRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYygxMDAlICsgI3skdG9vbHRpcC1waXAtaGVpZ2h0fSk7XG4gIHotaW5kZXg6IDEyMDA7XG5cbiAgbWF4LXdpZHRoOiAxMHJlbTtcbiAgcGFkZGluZzogJHRvb2x0aXAtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJhY2tncm91bmQtY29sb3I7XG4gIGZvbnQtc2l6ZTogJHRvb2x0aXAtZm9udC1zaXplO1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHRvb2x0aXAtcGlwLXdpZHRoLCAkdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yLCB1cCk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB9XG5cbiAgJi50b3A6OmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCR0b29sdGlwLXBpcC13aWR0aCwgJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgZG93bik7XG4gICAgdG9wOiAxMDAlO1xuICAgIGJvdHRvbTogYXV0bztcbiAgfVxuXG4gICYubGVmdDo6YmVmb3JlIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHRvb2x0aXAtcGlwLXdpZHRoLCAkdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yLCByaWdodCk7XG4gICAgdG9wOiA1MCU7XG4gICAgYm90dG9tOiBhdXRvO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgJi5yaWdodDo6YmVmb3JlIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHRvb2x0aXAtcGlwLXdpZHRoLCAkdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yLCBsZWZ0KTtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMTAwJTtcbiAgICBib3R0b206IGF1dG87XG4gICAgbGVmdDogYXV0bztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9vbHRpcCB7XG4gIC5oYXMtdGlwIHtcbiAgICBAaW5jbHVkZSBoYXMtdGlwO1xuICB9XG5cbiAgLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIHRvb2x0aXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHRvcC1iYXJcbi8vLy9cblxuLy8vIFBhZGRpbmcgZm9yIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci1wYWRkaW5nOiAwLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdG9wIGJhci4gVGhpcyBjb2xvciBhbHNvIGNhc2NhZGVzIHRvIG1lbnVzIHdpdGhpbiB0aGUgdG9wIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igc3VibWVudXMgd2l0aGluIHRoZSB0b3AgYmFyLiBVc2VmdWxsIGlmICR0b3BiYXItYmFja2dyb3VuZCBpcyB0cmFuc3BhcmVudC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvcGJhci1zdWJtZW51LWJhY2tncm91bmQ6ICR0b3BiYXItYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgZm9yIHRoZSB0b3AgYmFyIHRpdGxlLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci10aXRsZS1zcGFjaW5nOiAwLjVyZW0gMXJlbSAwLjVyZW0gMCAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gd2lkdGggb2YgYDxpbnB1dD5gIGVsZW1lbnRzIGluc2lkZSB0aGUgdG9wIGJhci5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b3BiYXItaW5wdXQtd2lkdGg6IDIwMHB4ICFkZWZhdWx0O1xuXG4vLy8gQnJlYWtwb2ludCBhdCB3aGljaCB0b3AgYmFyIHN3aXRjaGVzIGZyb20gbW9iaWxlIHRvIGRlc2t0b3Agdmlldy5cbi8vLyBAdHlwZSBCcmVha3BvaW50XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgdG9wIGJhciBjb250YWluZXIuXG5AbWl4aW4gdG9wLWJhci1jb250YWluZXIge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgfVxuXG4gIHBhZGRpbmc6ICR0b3BiYXItcGFkZGluZztcblxuICAmLFxuICB1bCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRvcGJhci1iYWNrZ3JvdW5kO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgJHRvcGJhci1iYWNrZ3JvdW5kIGlzIGRpZmZlcm50IGZyb20gJHRvcGJhci1iYWNrZ3JvdW5kLXN1Ym1lbnVcbiAgQGlmICgkdG9wYmFyLWJhY2tncm91bmQgIT0gJHRvcGJhci1zdWJtZW51LWJhY2tncm91bmQpIHtcbiAgICB1bCB1bCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0cmFpbiB3aWR0aCBvZiBpbnB1dHMgYnkgZGVmYXVsdCB0byBtYWtlIHRoZW0gZWFzaWVyIHRvIGFycmFuZ2VcbiAgaW5wdXQge1xuICAgIG1heC13aWR0aDogJHRvcGJhci1pbnB1dC13aWR0aDtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogMXJlbTtcbiAgfVxuXG4gIC8vIFRoZSBhYm92ZSBzdHlsZXMgc2hvdWxkbid0IGFwcGx5IHRvIGlucHV0IGdyb3VwIGZpZWxkc1xuICAuaW5wdXQtZ3JvdXAtZmllbGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICB9XG5cbiAgaW5wdXQuYnV0dG9uIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cblxuLy8vIE1ha2VzIHNlY3Rpb25zIG9mIGEgdG9wIGJhciBzdGFjayBvbiB0b3Agb2YgZWFjaCBvdGhlci5cbkBtaXhpbiB0b3AtYmFyLXN0YWNrZWQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAvLyBTdWItc2VjdGlvbnNcbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gU3ViLXNlY3Rpb25zXG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIFVuZG9lcyB0aGUgQ1NTIGFwcGxpZWQgYnkgdGhlIGB0b3AtYmFyLXN0YWNrZWQoKWAgbWl4aW4uXG5AbWl4aW4gdG9wLWJhci11bnN0YWNrIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG5cbiAgICAudG9wLWJhci1sZWZ0IHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIH1cblxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9wLWJhciB7XG4gIC8vIFRvcCBiYXIgY29udGFpbmVyXG4gIC50b3AtYmFyIHtcbiAgICBAaW5jbHVkZSB0b3AtYmFyLWNvbnRhaW5lcjtcblxuICAgIC8vIFN0YWNrIG9uIHNtYWxsIHNjcmVlbnMgYnkgZGVmYXVsdFxuICAgIEBpbmNsdWRlIHRvcC1iYXItc3RhY2tlZDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHRvcGJhci11bnN0YWNrLWJyZWFrcG9pbnQpIHtcbiAgICAgIEBpbmNsdWRlIHRvcC1iYXItdW5zdGFjaztcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBjbGFzc2VzIGZvciBzdGFja2luZyBvbiBlYWNoIHNjcmVlbiBzaXplIChkZWZpbmVkIGluICRicmVha3BvaW50LWNsYXNzZXMpXG4gICAgQGVhY2ggJHNpemUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAmLnN0YWNrZWQtZm9yLSN7JHNpemV9IHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHRvcC1iYXItc3RhY2tlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdWItc2VjdGlvbnNcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRvcC1iYXItdGl0bGUge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBtYXJnaW46ICR0b3BiYXItdGl0bGUtc3BhY2luZztcbiAgICB9XG5cbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRvcC1iYXItdGl0bGUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBwYWRkaW5nOiAkdG9wYmFyLXRpdGxlLXNwYWNpbmc7XG5cbiAgICAgIC5tZW51LWljb24ge1xuICAgICAgICBib3R0b206IDJweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudG9wLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzIGJ5IFpVUkJcbi8vIGZvdW5kYXRpb24uenVyYi5jb21cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8gSGlkZSBhbiBlbGVtZW50IGJ5IGRlZmF1bHQsIG9ubHkgZGlzcGxheWluZyBpdCBhYm92ZSBhIGNlcnRhaW4gc2NyZWVuIHNpemUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIEJyZWFrcG9pbnQgdG8gdXNlLiAqKk11c3QgYmUgYSBicmVha3BvaW50IGRlZmluZWQgaW4gYCRicmVha3BvaW50c2AuKipcbkBtaXhpbiBzaG93LWZvcigkc2l6ZSkge1xuICAkc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHNpemU6IC16Zi1icC10by1lbSgkc2l6ZSkgLSAoMSAvIDE2KTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgd2l0aGluIGEgY2VydGFpbiBicmVha3BvaW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3Itb25seSgkc2l6ZSkge1xuICAkbG93ZXItYm91bmQtc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHVwcGVyLWJvdW5kLXNpemU6IC16Zi1tYXAtbmV4dCgkYnJlYWtwb2ludHMsICRzaXplKTtcblxuICAvLyBtb3JlIG9mdGVuIHRoYW4gbm90IHRoaXMgd2lsbCBiZSBjb3JyZWN0LCBqdXN0IG9uZSB0aW1lIHJvdW5kIHRoZSBsb29wIGl0IHdvbid0IHNvIHNldCBpbiBzY29wZSBoZXJlXG4gICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKSAtICgxIC8gMTYpO1xuICAvLyB0ZXN0IGFjdHVhbCBsb3dlci1ib3VuZC1zaXplLCBpZiAwIHNldCBpdCB0byAwZW1cbiAgQGlmIHN0cmlwLXVuaXQoJGxvd2VyLWJvdW5kLXNpemUpID09IDAge1xuICAgICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKTtcbiAgfVxuXG4gIEBpZiAkdXBwZXItYm91bmQtc2l6ZSA9PSBudWxsIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbG93ZXItYm91bmQpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICR1cHBlci1ib3VuZDogLXpmLWJwLXRvLWVtKCR1cHBlci1ib3VuZC1zaXplKTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRsb3dlci1ib3VuZCksIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHVwcGVyLWJvdW5kKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8vIFNob3cgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBhbmQgaGlkZSBpdCBhYm92ZSBhIGNlcnRhaW4gc2NyZWVuIHNpemUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIEJyZWFrcG9pbnQgdG8gdXNlLiAqKk11c3QgYmUgYSBicmVha3BvaW50IGRlZmluZWQgaW4gYCRicmVha3BvaW50c2AuKipcbkBtaXhpbiBoaWRlLWZvcigkc2l6ZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vLyBTaG93IGFuIGVsZW1lbnQgYnkgZGVmYXVsdCwgYW5kIGhpZGUgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gaGlkZS1mb3Itb25seSgkc2l6ZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIG9ubHkpIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdmlzaWJpbGl0eS1jbGFzc2VzIHtcbiAgLy8gQmFzaWMgaGlkaW5nIGNsYXNzZXNcbiAgLmhpZGUge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5pbnZpc2libGUge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxuXG4gIC8vIFJlc3BvbnNpdmUgdmlzaWJpbGl0eSBjbGFzc2VzXG4gIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAuaGlkZS1mb3ItI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBoaWRlLWZvcigkc2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIC5zaG93LWZvci0jeyRzaXplfSB7XG4gICAgICAgIEBpbmNsdWRlIHNob3ctZm9yKCRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaGlkZS1mb3ItI3skc2l6ZX0tb25seSB7XG4gICAgICBAaW5jbHVkZSBoaWRlLWZvci1vbmx5KCRzaXplKTtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItI3skc2l6ZX0tb25seSB7XG4gICAgICBAaW5jbHVkZSBzaG93LWZvci1vbmx5KCRzaXplKTtcbiAgICB9XG4gIH1cblxuICAvLyBTY3JlZW4gcmVhZGVyIHZpc2liaWxpdHkgY2xhc3Nlc1xuICAvLyBOZWVkIGEgXCJoaWRlLWZvci1zclwiIGNsYXNzPyBBZGQgYXJpYS1oaWRkZW49J3RydWUnIHRvIHRoZSBlbGVtZW50XG4gIC5zaG93LWZvci1zcixcbiAgLnNob3ctb24tZm9jdXMge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlO1xuICB9XG5cbiAgLy8gT25seSBkaXNwbGF5IHRoZSBlbGVtZW50IHdoZW4gaXQncyBmb2N1c2VkXG4gIC5zaG93LW9uLWZvY3VzIHtcbiAgICAmOmFjdGl2ZSxcbiAgICAmOmZvY3VzIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlLW9mZjtcbiAgICB9XG4gIH1cblxuICAvLyBMYW5kc2NhcGUgYW5kIHBvcnRyYWl0IHZpc2liaWxpdHlcbiAgLnNob3ctZm9yLWxhbmRzY2FwZSxcbiAgLmhpZGUtZm9yLXBvcnRyYWl0IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChsYW5kc2NhcGUpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChwb3J0cmFpdCkge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuXG4gIC5oaWRlLWZvci1sYW5kc2NhcGUsXG4gIC5zaG93LWZvci1wb3J0cmFpdCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChsYW5kc2NhcGUpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KHBvcnRyYWl0KSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXMgYnkgWlVSQlxuLy8gZm91bmRhdGlvbi56dXJiLmNvbVxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZmxvYXRcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcyB7XG4gIC5mbG9hdC1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmZsb2F0LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5mbG9hdC1jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5jbGVhcmZpeCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH1cbn1cbiIsIi8vIHNjc3MtbGludDpkaXNhYmxlIEltcG9ydGFudFJ1bGUsIFNwYWNlQWZ0ZXJDb21tYSwgU2luZ2xlTGluZVBlclByb3BlcnR5XG5cbkBtaXhpbiAtbW90aW9uLXVpLWRlZmF1bHRzIHtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogbWFwLWdldCgkbW90aW9uLXVpLXNwZWVkcywgZGVmYXVsdCk7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBtYXAtZ2V0KCRtb3Rpb24tdWktZWFzaW5ncywgZGVmYXVsdCk7XG59XG5cbi8vIFRyYW5zaXRpb25zXG4vLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuQG1peGluIG1vdGlvbi11aS10cmFuc2l0aW9ucyB7XG4gIC8vIFNsaWRlXG4gIC5zbGlkZS1pbi1kb3duICAgIHsgQGluY2x1ZGUgbXVpLXNsaWRlKGluLCAgZG93bik7IH1cbiAgLnNsaWRlLWluLWxlZnQgICAgeyBAaW5jbHVkZSBtdWktc2xpZGUoaW4sICByaWdodCk7IH1cbiAgLnNsaWRlLWluLXVwICAgICAgeyBAaW5jbHVkZSBtdWktc2xpZGUoaW4sICB1cCk7IH1cbiAgLnNsaWRlLWluLXJpZ2h0ICAgeyBAaW5jbHVkZSBtdWktc2xpZGUoaW4sICBsZWZ0KTsgfVxuICAuc2xpZGUtb3V0LWRvd24gICB7IEBpbmNsdWRlIG11aS1zbGlkZShvdXQsIGRvd24pOyB9XG4gIC5zbGlkZS1vdXQtcmlnaHQgIHsgQGluY2x1ZGUgbXVpLXNsaWRlKG91dCwgcmlnaHQpOyB9XG4gIC5zbGlkZS1vdXQtdXAgICAgIHsgQGluY2x1ZGUgbXVpLXNsaWRlKG91dCwgdXApOyB9XG4gIC5zbGlkZS1vdXQtbGVmdCAgIHsgQGluY2x1ZGUgbXVpLXNsaWRlKG91dCwgbGVmdCk7IH1cblxuICAvLyBGYWRlXG4gIC5mYWRlLWluICB7IEBpbmNsdWRlIG11aS1mYWRlKGluLCAgMCwgMSk7IH1cbiAgLmZhZGUtb3V0IHsgQGluY2x1ZGUgbXVpLWZhZGUob3V0LCAxLCAwKTsgfVxuXG4gIC8vIEhpbmdlXG4gIC5oaW5nZS1pbi1mcm9tLXRvcCAgICAgIHsgQGluY2x1ZGUgbXVpLWhpbmdlKGluLCAgdG9wKTsgfVxuICAuaGluZ2UtaW4tZnJvbS1yaWdodCAgICB7IEBpbmNsdWRlIG11aS1oaW5nZShpbiwgIHJpZ2h0KTsgfVxuICAuaGluZ2UtaW4tZnJvbS1ib3R0b20gICB7IEBpbmNsdWRlIG11aS1oaW5nZShpbiwgIGJvdHRvbSk7IH1cbiAgLmhpbmdlLWluLWZyb20tbGVmdCAgICAgeyBAaW5jbHVkZSBtdWktaGluZ2UoaW4sICBsZWZ0KTsgfVxuICAuaGluZ2UtaW4tZnJvbS1taWRkbGUteCAgeyBAaW5jbHVkZSBtdWktaGluZ2UoaW4sICB0b3AsICAgY2VudGVyKTsgfVxuICAuaGluZ2UtaW4tZnJvbS1taWRkbGUteSAgeyBAaW5jbHVkZSBtdWktaGluZ2UoaW4sICByaWdodCwgY2VudGVyKTsgfVxuICAuaGluZ2Utb3V0LWZyb20tdG9wICAgICB7IEBpbmNsdWRlIG11aS1oaW5nZShvdXQsIHRvcCk7IH1cbiAgLmhpbmdlLW91dC1mcm9tLXJpZ2h0ICAgeyBAaW5jbHVkZSBtdWktaGluZ2Uob3V0LCByaWdodCk7IH1cbiAgLmhpbmdlLW91dC1mcm9tLWJvdHRvbSAgeyBAaW5jbHVkZSBtdWktaGluZ2Uob3V0LCBib3R0b20pOyB9XG4gIC5oaW5nZS1vdXQtZnJvbS1sZWZ0ICAgIHsgQGluY2x1ZGUgbXVpLWhpbmdlKG91dCwgbGVmdCk7IH1cbiAgLmhpbmdlLW91dC1mcm9tLW1pZGRsZS14IHsgQGluY2x1ZGUgbXVpLWhpbmdlKG91dCwgdG9wLCAgIGNlbnRlcik7IH1cbiAgLmhpbmdlLW91dC1mcm9tLW1pZGRsZS15IHsgQGluY2x1ZGUgbXVpLWhpbmdlKG91dCwgcmlnaHQsIGNlbnRlcik7IH1cblxuICAvLyBTY2FsZVxuICAuc2NhbGUtaW4tdXAgICAgeyBAaW5jbHVkZSBtdWktem9vbShpbiwgIDAuNSwgMSk7IH1cbiAgLnNjYWxlLWluLWRvd24gIHsgQGluY2x1ZGUgbXVpLXpvb20oaW4sICAxLjUsIDEpOyB9XG4gIC5zY2FsZS1vdXQtdXAgICB7IEBpbmNsdWRlIG11aS16b29tKG91dCwgMSwgMS41KTsgfVxuICAuc2NhbGUtb3V0LWRvd24geyBAaW5jbHVkZSBtdWktem9vbShvdXQsIDEsIDAuNSk7IH1cblxuICAvLyBTcGluXG4gIC5zcGluLWluICAgICB7IEBpbmNsdWRlIG11aS1zcGluKGluLCAgY3cpOyB9XG4gIC5zcGluLW91dCAgICB7IEBpbmNsdWRlIG11aS1zcGluKG91dCwgY3cpOyB9XG4gIC5zcGluLWluLWNjdyAgeyBAaW5jbHVkZSBtdWktc3BpbihpbiwgIGNjdyk7IH1cbiAgLnNwaW4tb3V0LWNjdyB7IEBpbmNsdWRlIG11aS1zcGluKG91dCwgY2N3KTsgfVxuXG4gIC8vIFRyYW5zaXRpb24gTW9kaWZpZXJzXG4gIC8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtXG5cbiAgQGVhY2ggJG5hbWUsICR2YWx1ZSBpbiAkbW90aW9uLXVpLXNwZWVkcyB7XG4gICAgQGlmICRuYW1lICE9IGRlZmF1bHQge1xuICAgICAgLiN7JG5hbWV9IHsgdHJhbnNpdGlvbi1kdXJhdGlvbjogJHZhbHVlICFpbXBvcnRhbnQ7IH1cbiAgICB9XG4gIH1cblxuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRtb3Rpb24tdWktZWFzaW5ncyB7XG4gICAgQGlmICRuYW1lICE9IGRlZmF1bHQge1xuICAgICAgLiN7JG5hbWV9IHsgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICR2YWx1ZSAhaW1wb3J0YW50OyB9XG4gICAgfVxuICB9XG5cbiAgQGVhY2ggJG5hbWUsICR2YWx1ZSBpbiAkbW90aW9uLXVpLWRlbGF5cyB7XG4gICAgQGlmICRuYW1lICE9IGRlZmF1bHQge1xuICAgICAgLiN7JG5hbWV9LWRlbGF5IHsgdHJhbnNpdGlvbi1kZWxheTogJHZhbHVlICFpbXBvcnRhbnQ7IH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQW5pbWF0aW9uc1xuLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbkBtaXhpbiBtb3Rpb24tdWktYW5pbWF0aW9ucyB7XG4gIC5zaGFrZSAgICB7IEBpbmNsdWRlIG11aS1hbmltYXRpb24oc2hha2UpOyB9XG4gIC5zcGluLWN3ICB7IEBpbmNsdWRlIG11aS1hbmltYXRpb24oc3Bpbik7IH1cbiAgLnNwaW4tY2N3IHsgQGluY2x1ZGUgbXVpLWFuaW1hdGlvbihzcGluKGNjdykpOyB9XG4gIC53aWdnbGUgICB7IEBpbmNsdWRlIG11aS1hbmltYXRpb24od2lnZ2xlKTsgfVxuXG4gIC5zaGFrZSxcbiAgLnNwaW4tY3csXG4gIC5zcGluLWNjdyxcbiAgLndpZ2dsZSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiBtYXAtZ2V0KCRtb3Rpb24tdWktc3BlZWRzLCBkZWZhdWx0KTtcbiAgfVxuXG4gIC8vIEFuaW1hdGlvbiBNb2RpZmllcnNcbiAgLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiAgLmluZmluaXRlIHsgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7IH1cblxuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRtb3Rpb24tdWktc3BlZWRzIHtcbiAgICBAaWYgJG5hbWUgIT0gZGVmYXVsdCB7XG4gICAgICAuI3skbmFtZX0geyBhbmltYXRpb24tZHVyYXRpb246ICR2YWx1ZSAhaW1wb3J0YW50OyB9XG4gICAgfVxuICB9XG5cbiAgQGVhY2ggJG5hbWUsICR2YWx1ZSBpbiAkbW90aW9uLXVpLWVhc2luZ3Mge1xuICAgIEBpZiAkbmFtZSAhPSBkZWZhdWx0IHtcbiAgICAgIC4jeyRuYW1lfSB7IGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR2YWx1ZSAhaW1wb3J0YW50OyB9XG4gICAgfVxuICB9XG5cbiAgQGVhY2ggJG5hbWUsICR2YWx1ZSBpbiAkbW90aW9uLXVpLWRlbGF5cyB7XG4gICAgQGlmICRuYW1lICE9IGRlZmF1bHQge1xuICAgICAgLiN7JG5hbWV9LWRlbGF5IHsgYW5pbWF0aW9uLWRlbGF5OiAkdmFsdWUgIWltcG9ydGFudDsgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vIEZvcm1hdCBmb3IgQ1NTIGNsYXNzZXMgY3JlYXRlZCB3aXRoIE1vdGlvbiBVSS5cbi8vLyBAdHlwZSBNYXBcbi8vLyBAcHJvcCB7Qm9vbGVhbn0gYXBwZW5kIFt0cnVlXSAtIERlZmluZXMgaWYgc2VsZWN0b3JzIGFyZSBjaGFpbmVkIHRvIHRoZSBzZWxlY3RvciAoYC5jbGFzcy5lbnRlcmApLCBvciBhcHBlbmRlZCBhcyBhIG5ldyBjbGFzcyAoYC5jbGFzcy1lbnRlcmApLlxuLy8vIEBwcm9wIHtTdHJpbmd9IHByZWZpeCBbJ211aS0nXSAtIFByZWZpeCB0byBhZGQgYmVmb3JlIHRoZSBzdGF0ZSBvZiBhIGNsYXNzLiBFbnRlciBhbiBlbXB0eSBzdHJpbmcgdG8gdXNlIG5vIHByZWZpeC5cbi8vLyBAcHJvcCB7U3RyaW5nfSBwcmVmaXggWyctYWN0aXZlJ10gLSBTdWZmaXggdG8gYWRkIHRvIHRoZSBhY3RpdmUgc3RhdGUgY2xhc3MuXG4kbW90aW9uLXVpLWNsYXNzZXM6IChcbiAgY2hhaW46IHRydWUsXG4gIHByZWZpeDogJ211aS0nLFxuICBhY3RpdmU6ICctYWN0aXZlJyxcbikgIWRlZmF1bHQ7XG5cbi8vLyBTdGF0ZSBuYW1lcyB0byByZWZlcmVuY2Ugd2hlbiB3cml0aW5nIG1vdGlvbiBjbGFzc2VzLiBUbyB1c2UgbXVsdGlwbGUgY2xhc3MgbmFtZXMgZm9yIG9uZSBzdGF0ZSwgZW50ZXIgYSBsaXN0IG9mIHN0cmluZ3MgaW5zdGVhZCBvZiBvbmUgc3RyaW5nLlxuLy8vIEB0eXBlIE1hcFxuJG1vdGlvbi11aS1zdGF0ZXM6IChcbiAgaW46ICdlbnRlcicsXG4gIG91dDogJ2xlYXZlJyxcbikgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNwZWVkIHRoYXQgdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMgcGxheSBhdCwgYWxvbmcgd2l0aCB2YWx1ZXMgZm9yIG1vZGlmaWVyIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSBzcGVlZC5cbi8vLyBAdHlwZSBNYXBcbiRtb3Rpb24tdWktc3BlZWRzOiAoXG4gIGRlZmF1bHQ6IDUwMG1zLFxuICBzbG93OiA3NTBtcyxcbiAgZmFzdDogMjUwbXMsXG4pICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBkZWxheSB0byBhZGQgYmVmb3JlIG1vdGlvbiwgYWxvbmcgd2l0aCB2YWx1ZXMgZm9yIG1vZGlmaWVyIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSBkZWxheS5cbi8vLyBAdHlwZSBNYXBcbiRtb3Rpb24tdWktZGVsYXlzOiAoXG4gIGRlZmF1bHQ6IDAsXG4gIHNob3J0OiAzMDBtcyxcbiAgbG9uZzogNzAwbXMsXG4pICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBlYXNpbmcgZm9yIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zLCBhbG9uZyB3aXRoIHZhbHVlcyBmb3IgbW9kaWZpZXIgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIGVhc2luZy5cbi8vLyBAdHlwZSBNYXBcbiRtb3Rpb24tdWktZWFzaW5nczogKFxuICBkZWZhdWx0OiBsaW5lYXIsXG4gIGxpbmVhcjogbGluZWFyLFxuICBlYXNlOiBlYXNlLFxuICBlYXNlLWluOiBlYXNlLWluLFxuICBlYXNlLW91dDogZWFzZS1vdXQsXG4gIGVhc2UtaW4tb3V0OiBlYXNlLWluLW91dCxcbiAgYm91bmNlLWluOiBjdWJpYy1iZXppZXIoMC40ODUsIDAuMTU1LCAwLjI0LCAxLjI0NSksXG4gIGJvdW5jZS1vdXQ6IGN1YmljLWJlemllcigwLjQ4NSwgMC4xNTUsIDAuNTE1LCAwLjg0NSksXG4gIGJvdW5jZS1pbi1vdXQ6IGN1YmljLWJlemllcigwLjc2LCAtMC4yNDUsIDAuMjQsIDEuMjQ1KSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBNaXNjZWxsYW5lb3VzIHNldHRpbmdzIHJlbGF0ZWQgdG8gTW90aW9uIFVJLlxuLy8vIEB0eXBlIE1hcFxuLy8vIEBwcm9wIHtCb29sZWFufSBzbGlkZS1hbmQtZmFkZSBbZmFsc2VdIC0gRGVmaW5lcyBpZiBzbGlkZSBtb3Rpb25zIHNob3VsZCBhbHNvIGZhZGUgaW4vb3V0LlxuLy8vIEBwcm9wIHtCb29sZWFufSBzbGlkZS1hbmQtZmFkZSBbdHJ1ZV0gLSBEZWZpbmVzIGlmIGhpbmdlIG1vdGlvbnMgc2hvdWxkIGFsc28gZmFkZSBpbi9vdXQuXG4vLy8gQHByb3Age0Jvb2xlYW59IHNsaWRlLWFuZC1mYWRlIFt0cnVlXSAtIERlZmluZXMgaWYgc2NhbGUgbW90aW9ucyBzaG91bGQgYWxzbyBmYWRlIGluL291dC5cbi8vLyBAcHJvcCB7Qm9vbGVhbn0gc2xpZGUtYW5kLWZhZGUgW3RydWVdIC0gRGVmaW5lcyBpZiBzcGluIG1vdGlvbnMgc2hvdWxkIGFsc28gZmFkZSBpbi9vdXQuXG4kbW90aW9uLXVpLXNldHRpbmdzOiAoXG4gIHNsaWRlLWFuZC1mYWRlOiBmYWxzZSxcbiAgaGluZ2UtYW5kLWZhZGU6IHRydWUsXG4gIHNjYWxlLWFuZC1mYWRlOiB0cnVlLFxuICBzcGluLWFuZC1mYWRlOiB0cnVlLFxuICBhY3RpdmF0ZS1xdWV1ZS1jbGFzczogJ2lzLWFuaW1hdGluZycsXG4pICFkZWZhdWx0O1xuIiwiLy8gSW50ZXJuYWwgY291bnRlciBmb3IgY3JlYXRpbmcgdW5pcXVlIGtleWZyYW1lIG5hbWVzXG4kLW11aS1jdXN0b206IDA7XG5cbi8vLyBDcmVhdGVzIGEga2V5ZnJhbWUgZnJvbSBvbmUgb3IgbW9yZSBlZmZlY3QgZnVuY3Rpb25zLiBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBtdWktYW5pbWF0aW9uYCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBrZXlmcmFtZSBhbmltYXRpb24gKndpdGhvdXQqIGF1dG9tYXRpY2FsbHkgYXNzaWduaW5nIGl0IHRvIHRoZSBlbGVtZW50LlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSAtIE5hbWUgb2YgdGhlIGtleWZyYW1lLlxuLy8vIEBwYXJhbSB7RnVuY3Rpb259ICRlZmZlY3RzLi4uIC0gT25lIG9yIG1vcmUgZWZmZWN0IGZ1bmN0aW9ucyB0byBidWlsZCB0aGUga2V5ZnJhbWUgd2l0aC5cbkBtaXhpbiBtdWkta2V5ZnJhbWVzKCRuYW1lLCAkZWZmZWN0cy4uLikge1xuICAkb2JqOiAtbXVpLXByb2Nlc3MtYXJncygkZWZmZWN0cy4uLik7XG4gICRvYmo6IG1hcC1yZW1vdmUoJG9iaiwgbmFtZSk7XG5cbiAgQGtleWZyYW1lcyAjeyRuYW1lfSB7XG4gICAgLy8gTm93IGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGtleWZyYW1lIHBlcmNlbnRhZ2VcbiAgICBAZWFjaCAkcGN0LCAkcHJvcHMgaW4gJG9iaiB7XG4gICAgICAjey1tdWkta2V5ZnJhbWUtcGN0KCRwY3QpfSB7XG4gICAgICAgIC8vIExhc3RseSwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggQ1NTIHByb3BlcnR5IHdpdGhpbiBhIHBlcmNlbnRhZ2UgYW5kIHByaW50IGl0IG91dFxuICAgICAgICBAZWFjaCAkcHJvcCwgJHZhbHVlIGluICRwcm9wcyB7XG4gICAgICAgICAgI3skcHJvcH06ICN7JHZhbHVlfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIHN0cmluZyBmb3IgYSBDU1Mga2V5ZnJhbWUsIGJ5IGNvbnZlcnRpbmcgYSBsaXN0IG9mIG51bWJlcnMgdG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwZXJjZW50YWdlIHZhbHVlcy5cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkaW5wdXQgLSBMaXN0IG9mIG51bWJlcnMgdG8gdXNlLlxuLy8vIEByZXR1cm4ge1N0cmluZ30gQSBzZXQgb2YgY29tbWEtc2VwYXJhdGVkIHBlcmNlbnRhZ2UgdmFsdWVzLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuQGZ1bmN0aW9uIC1tdWkta2V5ZnJhbWUtcGN0KCRpbnB1dCkge1xuICAkb3V0cHV0OiAoKTtcblxuICBAaWYgdHlwZS1vZigkaW5wdXQpID09ICdudW1iZXInIHtcbiAgICAkb3V0cHV0OiAoJGlucHV0ICogMSUpO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJGlucHV0KSA9PSAnbGlzdCcge1xuICAgIEBlYWNoICRpIGluICRpbnB1dCB7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgKCRpICogMSUpLCBjb21tYSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuXG4vLy8gUHJpbnRzIHRoZSBDU1MgcHJvcGVydGllcyBmcm9tIGEgc3BlY2lmaWMga2V5IGluIGEga2V5ZnJhbWVzIG1hcC4gVXNlZCB0byBib3Jyb3cgQ1NTIGZyb20ga2V5ZnJhbWUgZnVuY3Rpb25zIGZvciB1c2UgaW4gdHJhbnNpdGlvbnMuXG4vLy8gQHBhcmFtIHtNYXB9ICRrZiAtIEtleWZyYW1lIG1hcCB0byBleHRyYWN0IGZyb20uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRrZXkgLSBLZXkgaW4gdGhlIG1hcCB0byBwcmludCB0aGUgQ1NTIG9mLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuQG1peGluIC1tdWkta2V5ZnJhbWUtZ2V0KCRrZiwgJGtleSkge1xuICAkbWFwOiBtYXAtZ2V0KCRrZiwgJGtleSk7XG5cbiAgQGVhY2ggJHByb3AsICR2YWx1ZSBpbiAkbWFwIG9yICgpIHtcbiAgICAvLyBTb21lIGtleWZyYW1lIG1hcHMgc3RvcmUgdHJhbnNmb3JtcyBhcyBxdW90ZWQgc3RyaW5nc1xuICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gJ3N0cmluZycge1xuICAgICAgJHZhbHVlOiB1bnF1b3RlKCR2YWx1ZSk7XG4gICAgfVxuICAgICN7JHByb3B9OiAkdmFsdWU7XG4gIH1cbn1cblxuLy8vIFJlZm9ybWF0cyBhIG1hcCBjb250YWluaW5nIGtleXMgd2l0aCBhIGxpc3Qgb2YgdmFsdWVzLCBzbyB0aGF0IGVhY2gga2V5IGlzIGEgc2luZ2xlIHZhbHVlLlxuLy8vIEBwYXJhbSB7TWFwfSAkbWFwIC0gTWFwIHRvIHNwbGl0IHVwLlxuLy8vIEByZXR1cm4ge01hcH0gQSByZWZvcm1hdHRlZCBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG5AZnVuY3Rpb24gLW11aS1rZXlmcmFtZS1zcGxpdCgkbWFwKSB7XG4gICRuZXctbWFwOiAoKTtcblxuICAvLyBTcGxpdCBrZXlzIHdpdGggbXVsdGlwbGUgdmFsdWVzIGludG8gaW5kaXZpZHVhbCBrZXlzXG4gIEBlYWNoICRrZXksICRpdGVtIGluICRtYXAge1xuICAgICRrZXktdHlwZTogdHlwZS1vZigka2V5KTtcblxuICAgIEBpZiAka2V5LXR5cGUgPT0gJ251bWJlcicge1xuICAgICAgJG5ldy1tYXA6IG1hcC1tZXJnZSgkbmV3LW1hcCwgKCRrZXk6ICRpdGVtKSk7XG4gICAgfSBAZWxzZSBpZiAka2V5LXR5cGUgPT0gJ2xpc3QnIHtcbiAgICAgIEBlYWNoICRrIGluICRrZXkge1xuICAgICAgICAkbmV3LW1hcDogbWFwLW1lcmdlKCRuZXctbWFwLCAoJGs6ICRpdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmV3LW1hcDtcbn1cblxuLy8vIENvbWJpbmVzIGEgc2VyaWVzIG9mIGtleWZyYW1lIG9iamVjdHMgaW50byBvbmUuXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXBzLi4uIC0gQSBzZXJpZXMgb2YgbWFwcyB0byBtZXJnZSwgYXMgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzLlxuLy8vIEByZXR1cm4ge01hcH0gQSBjb21iaW5lZCBrZXlmcmFtZSBvYmplY3QuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG5AZnVuY3Rpb24gLW11aS1rZXlmcmFtZS1jb21iaW5lKCRtYXBzLi4uKSB7XG4gICRuZXctbWFwOiAoKTtcblxuICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBtYXAgcGFzc2VkIGluXG4gIEBlYWNoICRtYXAgaW4gJG1hcHMge1xuICAgIEBpZiB0eXBlLW9mKCRtYXApID09ICdzdHJpbmcnIHtcbiAgICAgICRtYXA6IGNhbGwoJG1hcCk7XG4gICAgfVxuXG4gICAgJG1hcDogLW11aS1rZXlmcmFtZS1zcGxpdCgkbWFwKTtcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGtleWZyYW1lIGluIHRoZSBtYXBcbiAgICAvLyAka2V5IGlzIHRoZSBrZXlmcmFtZSBwZXJjZW50YWdlXG4gICAgLy8gJHZhbHVlIGlzIGEgbWFwIG9mIENTUyBwcm9wZXJ0aWVzXG4gICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRtYXAge1xuICAgICAgJG5ldy12YWx1ZTogKCk7XG5cbiAgICAgIEBpZiBtYXAtaGFzLWtleSgkbmV3LW1hcCwgJGtleSkge1xuICAgICAgICAvLyBJZiB0aGUgbWFwIGFscmVhZHkgaGFzIHRoZSBrZXlmcmFtZSAlLCBhcHBlbmQgdGhlIG5ldyBwcm9wZXJ0eVxuICAgICAgICAkbmV3LXZhbHVlOiAtbXVpLW1lcmdlLXByb3BlcnRpZXMobWFwLWdldCgkbmV3LW1hcCwgJGtleSksICR2YWx1ZSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgbWFwIHdpdGggdGhlIG5ldyBwcm9wZXJ0eVxuICAgICAgICAkbmV3LXZhbHVlOiAkdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmFsbHksIG1lcmdlIHRoZSBtb2RpZmllZCBrZXlmcmFtZSB2YWx1ZSBpbnRvIHRoZSBvdXRwdXQgbWFwXG4gICAgICAkbmV3LW1hcDogbWFwLW1lcmdlKCRuZXctbWFwLCAoJGtleTogJG5ldy12YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2UgYSBuYW1lIGZvciB0aGUga2V5ZnJhbWVzXG4gICQtbXVpLWN1c3RvbTogJC1tdWktY3VzdG9tICsgMSAhZ2xvYmFsO1xuICAkbWFwLW5hbWU6IChuYW1lOiAnY3VzdG9tLSN7JC1tdWktY3VzdG9tfScpO1xuICAkbmV3LW1hcDogbWFwLW1lcmdlKCRuZXctbWFwLCAkbWFwLW5hbWUpO1xuXG4gIEByZXR1cm4gJG5ldy1tYXA7XG59XG5cbi8vLyBDb21iaW5lcyB0d28gbWFwcyBvZiBDU1MgcHJvcGVydGllcyBpbnRvIG9uZSBtYXAuIElmIGJvdGggbWFwcyBoYXZlIGEgdHJhbnNmb3JtIHByb3BlcnR5LCB0aGUgdmFsdWVzIGZyb20gZWFjaCB3aWxsIGJlIGNvbWJpbmVkIGludG8gb25lIHByb3BlcnR5LlxuLy8vIEBwYXJhbSB7TWFwfSAkb25lIC0gRmlyc3QgbWFwIHRvIG1lcmdlLlxuLy8vIEBwYXJhbSB7TWFwfSAkdHdvIC0gU2Vjb25kIG1hcCB0byBtZXJnZS5cbi8vLyBAcmV0dXJuIHtNYXB9IEEgY29tYmluZWQgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuQGZ1bmN0aW9uIC1tdWktbWVyZ2UtcHJvcGVydGllcygkb25lLCAkdHdvKSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkb25lLCB0cmFuc2Zvcm0pIGFuZCBtYXAtaGFzLWtleSgkdHdvLCB0cmFuc2Zvcm0pIHtcbiAgICAkdHJhbnNmb3JtOiBqb2luKG1hcC1nZXQoJG9uZSwgdHJhbnNmb3JtKSwgbWFwLWdldCgkdHdvLCB0cmFuc2Zvcm0pKTtcbiAgICAkb25lOiBtYXAtbWVyZ2UoJG9uZSwgKHRyYW5zZm9ybTogJHRyYW5zZm9ybSkpO1xuICAgICR0d286IG1hcC1yZW1vdmUoJHR3bywgdHJhbnNmb3JtKTtcbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRvbmUsICR0d28pO1xufVxuIiwiLy8vIENyZWF0ZXMgYSBzbGlkaW5nIHRyYW5zaXRpb24gYnkgdHJhbnNsYXRpbmcgdGhlIGVsZW1lbnQgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc3RhdGUgW2luXSAtIFN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyZWN0aW9uIFtsZWZ0XSAtIERpcmVjdGlvbiB0byBzbGlkZSB0by4gQ2FuIGJlIGB1cGAsIGByaWdodGAsIGBkb3duYCwgb3IgYGxlZnRgLlxuLy8vIEBwYXJhbSB7TGVuZ3RofSAkYW1vdW50IFsxMDAlXSAtIExlbmd0aCBvZiB0aGUgc2xpZGUgYXMgYSBwZXJjZW50YWdlIHZhbHVlLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGZhZGUgW2ZhbHNlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZmFkZSB0aGUgZWxlbWVudCBpbiBvciBvdXQgc2ltdWx0YW5lb3VzbHkuXG4vLy8gQHBhcmFtIHtEdXJhdGlvbn0gJGR1cmF0aW9uIFtudWxsXSAtIExlbmd0aCAoc3BlZWQpIG9mIHRoZSB0cmFuc2l0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZHxGdW5jdGlvbn0gJHRpbWluZyBbbnVsbF0gLSBFYXNpbmcgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtEdXJhdGlvbn0gJGRlbGF5IFtudWxsXSAtIERlbGF5IGluIHNlY29uZHMgb3IgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdHJhbnNpdGlvbiBzdGFydHMuXG5AbWl4aW4gbXVpLXNsaWRlIChcbiAgJHN0YXRlOiBpbixcbiAgJGRpcmVjdGlvbjogbGVmdCxcbiAgJGFtb3VudDogMTAwJSxcbiAgJGZhZGU6IG1hcC1nZXQoJG1vdGlvbi11aS1zZXR0aW5ncywgc2xpZGUtYW5kLWZhZGUpLFxuICAkZHVyYXRpb246IG51bGwsXG4gICR0aW1pbmc6IG51bGwsXG4gICRkZWxheTogbnVsbFxuKSB7XG4gICRzbGlkZTogc2xpZGUoJHN0YXRlLCAkZGlyZWN0aW9uLCAkYW1vdW50KTtcblxuICAvLyBDU1MgT3V0cHV0XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24tc3RhcnQoJHN0YXRlKSB7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbi1iYXNpY3MoJGR1cmF0aW9uLCAkdGltaW5nLCAkZGVsYXkpO1xuICAgIEBpbmNsdWRlIC1tdWkta2V5ZnJhbWUtZ2V0KCRzbGlkZSwgMCk7XG5cbiAgICBAaWYgJGZhZGUge1xuICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICAgICAgb3BhY2l0eTogaWYoJHN0YXRlID09IGluLCAwLCAxKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgICB9XG5cbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWVuZCgkc3RhdGUpIHtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkc2xpZGUsIDEwMCk7XG5cbiAgICBAaWYgJGZhZGUge1xuICAgICAgb3BhY2l0eTogaWYoJHN0YXRlID09IGluLCAxLCAwKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLyBBcHBsaWVzIGJhc2ljIHRyYW5zaXRpb24gc2V0dGluZ3MgdG8gYW4gZWxlbWVudC5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZHVyYXRpb24gW251bGxdIC0gTGVuZ3RoIChzcGVlZCkgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfEZ1bmN0aW9ufSAkdGltaW5nIFtudWxsXSAtIEVhc2luZyBvZiB0aGUgdHJhbnNpdGlvbi5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZGVsYXkgW251bGxdIC0gRGVsYXkgaW4gc2Vjb25kcyBvciBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0cmFuc2l0aW9uIHN0YXJ0cy5cbkBtaXhpbiB0cmFuc2l0aW9uLWJhc2ljcyhcbiAgJGR1cmF0aW9uOiBudWxsLFxuICAkdGltaW5nOiBudWxsLFxuICAkZGVsYXk6IG51bGxcbikge1xuICBAaW5jbHVkZSAtbW90aW9uLXVpLWRlZmF1bHRzO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nO1xuICB0cmFuc2l0aW9uLWRlbGF5OiAkZGVsYXk7XG59XG5cbi8vLyBXcmFwcyB0aGUgY29udGVudCBpbiB0aGUgc2V0dXAgY2xhc3MgZm9yIGEgdHJhbnNpdGlvbi5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRkaXIgLSBTdGF0ZSB0byBzZXR1cCBmb3IgdHJhbnNpdGlvbi5cbkBtaXhpbiB0cmFuc2l0aW9uLXN0YXJ0KCRkaXIpIHtcbiAgJHNlbGVjdG9yOiAtbXVpLWJ1aWxkLXNlbGVjdG9yKG1hcC1nZXQoJG1vdGlvbi11aS1zdGF0ZXMsICRkaXIpKTtcblxuICBAYXQtcm9vdCB7XG4gICAgI3skc2VsZWN0b3J9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gV3JhcHMgdGhlIGNvbnRlbnQgaW4gdGhlIGFjdGl2ZSBjbGFzcyBmb3IgYSB0cmFuc2l0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpciAtIFN0YXRlIHRvIGFjdGl2YXRlIGEgdHJhbnNpdGlvbiBvbi5cbkBtaXhpbiB0cmFuc2l0aW9uLWVuZCgkZGlyKSB7XG4gICRzZWxlY3RvcjogLW11aS1idWlsZC1zZWxlY3RvcihtYXAtZ2V0KCRtb3Rpb24tdWktc3RhdGVzLCAkZGlyKSwgdHJ1ZSk7XG5cbiAgQGF0LXJvb3Qge1xuICAgICN7JHNlbGVjdG9yfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN0YWdnZXIgYW5pbWF0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIEFuZ3VsYXIncyBgbmctcmVwZWF0YC5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZGVsYXktYW1vdW50IC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBvciBtaWxsaXNlY29uZHMgdG8gYWRkIGJldHdlZW4gZWFjaCBpdGVtJ3MgYW5pbWF0aW9uLlxuQG1peGluIHN0YWdnZXIoJGRlbGF5LWFtb3VudCkge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAkZGVsYXktYW1vdW50O1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwOyAvLyBQcmV2ZW50IGFjY2lkZW50YWwgQ1NTIGluaGVyaXRhbmNlXG59XG4iLCIvLy8gQ3JlYXRlcyBhIGZhZGUgdHJhbnNpdGlvbiBieSBhZGp1c3RpbmcgdGhlIG9wYWNpdHkgb2YgdGhlIGVsZW1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc3RhdGUgW2luXSAtIFN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmcm9tIFswXSAtIE9wYWNpdHkgdG8gc3RhcnQgYXQuIE11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdG8gWzFdIC0gT3BhY2l0eSB0byBlbmQgb24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZHVyYXRpb24gW251bGxdIC0gTGVuZ3RoIChzcGVlZCkgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfEZ1bmN0aW9ufSAkdGltaW5nIFtudWxsXSAtIEVhc2luZyBvZiB0aGUgdHJhbnNpdGlvbi5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZGVsYXkgW251bGxdIC0gRGVsYXkgaW4gc2Vjb25kcyBvciBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0cmFuc2l0aW9uIHN0YXJ0cy5cbkBtaXhpbiBtdWktZmFkZShcbiAgJHN0YXRlOiBpbixcbiAgJGZyb206IDAsXG4gICR0bzogMSxcbiAgJGR1cmF0aW9uOiBudWxsLFxuICAkdGltaW5nOiBudWxsLFxuICAkZGVsYXk6IG51bGxcbikge1xuICAkZmFkZTogZmFkZSgkZnJvbSwgJHRvKTtcblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXN0YXJ0KCRzdGF0ZSkge1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tYmFzaWNzKCRkdXJhdGlvbiwgJHRpbWluZywgJGRlbGF5KTtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkZmFkZSwgMCk7XG5cbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5O1xuICB9XG5cbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1lbmQoJHN0YXRlKSB7XG4gICAgQGluY2x1ZGUgLW11aS1rZXlmcmFtZS1nZXQoJGZhZGUsIDEwMCk7XG4gIH1cbn1cbiIsIi8vLyBDcmVhdGVzIGEgaGluZ2UgZWZmZWN0IGJ5IHJvdGF0aW5nIHRoZSBlbGVtZW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHN0YXRlIFtpbl0gLSBTdGF0ZSB0byB0cmFuc2l0aW9uIHRvLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGZyb20gW2xlZnRdIC0gRWRnZSBvZiB0aGUgZWxlbWVudCB0byByb3RhdGUgZnJvbS4gQ2FuIGJlIGB0b3BgLCBgcmlnaHRgLCBgYm90dG9tYCwgb3IgYGxlZnRgLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGF4aXMgW2VkZ2VdIC0gQXhpcyBvZiB0aGUgZWxlbWVudCB0byByb3RhdGUgb24uIENhbiBiZSBgZWRnZWAgb3IgYGNlbnRlcmAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRwZXJzcGVjdGl2ZSBbMjAwMHB4XSAtIFBlcmNlaXZlZCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB2aWV3ZXIgYW5kIHRoZSBlbGVtZW50LiBBIGhpZ2hlciBudW1iZXIgd2lsbCBtYWtlIHRoZSByb3RhdGlvbiBlZmZlY3QgbW9yZSBwcm9ub3VuY2VkLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHR1cm4tb3JpZ2luIFtmcm9tLWJhY2tdIC0gU2lkZSBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgcm90YXRpb24gZnJvbS4gQ2FuIGJlIGBmcm9tLWJhY2tgIG9yIGBmcm9tLWZyb250YC5cbkBmdW5jdGlvbiBoaW5nZSAoXG4gICRzdGF0ZTogaW4sXG4gICRmcm9tOiBsZWZ0LFxuICAkYXhpczogZWRnZSxcbiAgJHBlcnNwZWN0aXZlOiAyMDAwcHgsXG4gICR0dXJuLW9yaWdpbjogZnJvbS1iYWNrXG4pIHtcbiAgLy8gUm90YXRpb24gZGlyZWN0aW9ucyB3aGVuIGhpbmdpbmcgZnJvbSBiYWNrIHZzLiBmcm9udFxuICAkcm90YXRpb24tYW1vdW50OiA5MGRlZztcbiAgJHJvdGF0aW9ucy1iYWNrOiAoXG4gICAgdG9wOiByb3RhdGVYKCRyb3RhdGlvbi1hbW91bnQgKiAtMSksXG4gICAgcmlnaHQ6IHJvdGF0ZVkoJHJvdGF0aW9uLWFtb3VudCAqIC0xKSxcbiAgICBib3R0b206IHJvdGF0ZVgoJHJvdGF0aW9uLWFtb3VudCksXG4gICAgbGVmdDogcm90YXRlWSgkcm90YXRpb24tYW1vdW50KSxcbiAgKTtcbiAgJHJvdGF0aW9ucy1mcm9tOiAoXG4gICAgdG9wOiByb3RhdGVYKCRyb3RhdGlvbi1hbW91bnQpLFxuICAgIHJpZ2h0OiByb3RhdGVZKCRyb3RhdGlvbi1hbW91bnQpLFxuICAgIGJvdHRvbTogcm90YXRlWCgkcm90YXRpb24tYW1vdW50ICogLTEpLFxuICAgIGxlZnQ6IHJvdGF0ZVkoJHJvdGF0aW9uLWFtb3VudCAqIC0xKSxcbiAgKTtcblxuICAvLyBSb3RhdGlvbiBvcmlnaW5cbiAgJHJvdGF0aW9uOiAnJztcbiAgQGlmICR0dXJuLW9yaWdpbiA9PSBmcm9tLWZyb250IHtcbiAgICAkcm90YXRpb246IG1hcC1nZXQoJHJvdGF0aW9ucy1mcm9tLCAkZnJvbSk7XG4gIH0gQGVsc2UgaWYgJHR1cm4tb3JpZ2luID09IGZyb20tYmFjayB7XG4gICAgJHJvdGF0aW9uOiBtYXAtZ2V0KCRyb3RhdGlvbnMtYmFjaywgJGZyb20pO1xuICB9IEBlbHNlIHtcbiAgICBAd2FybiAnJHR1cm4tb3JpZ2luIG11c3QgYmUgZWl0aGVyIFwiZnJvbS1iYWNrXCIgb3IgXCJmcm9tLWZyb250XCInO1xuICB9XG5cbiAgLy8gU3RhcnQgYW5kIGVuZCBzdGF0ZVxuICAkc3RhcnQ6ICcnO1xuICAkZW5kOiAnJztcbiAgQGlmICRzdGF0ZSA9PSBpbiB7XG4gICAgJHN0YXJ0OiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICRyb3RhdGlvbjtcbiAgICAkZW5kOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIHJvdGF0ZSgwZGVnKTtcbiAgfSBAZWxzZSB7XG4gICAgJHN0YXJ0OiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIHJvdGF0ZSgwZGVnKTtcbiAgICAkZW5kOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICRyb3RhdGlvbjtcbiAgfVxuXG4gIC8vIFR1cm4gYXhpc1xuICAkb3JpZ2luOiAnJztcbiAgQGlmICRheGlzID09IGVkZ2Uge1xuICAgICRvcmlnaW46ICRmcm9tO1xuICB9IEBlbHNlIHtcbiAgICAkb3JpZ2luOiBjZW50ZXI7XG4gIH1cblxuICAka2V5ZnJhbWVzOiAoXG4gICAgbmFtZTogJ2hpbmdlLSN7JHN0YXRlfS0jeyRmcm9tfS0jeyRheGlzfS0jeyR0dXJuLW9yaWdpbn0nLFxuICAgIDA6ICh0cmFuc2Zvcm06ICRzdGFydCwgdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbiksXG4gICAgMTAwOiAodHJhbnNmb3JtOiAkZW5kKSxcbiAgKTtcblxuICBAcmV0dXJuICRrZXlmcmFtZXM7XG59XG4iLCIvLy8gQ3JlYXRlcyBhIGhpbmdlIHRyYW5zaXRpb24gYnkgcm90YXRpbmcgdGhlIGVsZW1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc3RhdGUgW2luXSAtIFN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZnJvbSBbbGVmdF0gLSBFZGdlIG9mIHRoZSBlbGVtZW50IHRvIHJvdGF0ZSBmcm9tLiBDYW4gYmUgYHRvcGAsIGByaWdodGAsIGBib3R0b21gLCBvciBgbGVmdGAuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkYXhpcyBbZWRnZV0gLSBBeGlzIG9mIHRoZSBlbGVtZW50IHRvIHJvdGF0ZSBvbi4gQ2FuIGJlIGBlZGdlYCBvciBgY2VudGVyYC5cbi8vLyBAcGFyYW0ge0xlbmd0aH0gJHBlcnNwZWN0aXZlIFsyMDAwcHhdIC0gUGVyY2VpdmVkIGRpc3RhbmNlIGJldHdlZW4gdGhlIHZpZXdlciBhbmQgdGhlIGVsZW1lbnQuIEEgaGlnaGVyIG51bWJlciB3aWxsIG1ha2UgdGhlIHJvdGF0aW9uIGVmZmVjdCBtb3JlIHByb25vdW5jZWQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdHVybi1vcmlnaW4gW2Zyb20tYmFja10gLSBTaWRlIG9mIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSByb3RhdGlvbiBmcm9tLiBDYW4gYmUgYGZyb20tYmFja2Agb3IgYGZyb20tZnJvbnRgLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGZhZGUgW3RydWVdIC0gU2V0IHRvIGB0cnVlYCB0byBmYWRlIHRoZSBlbGVtZW50IGluIG9yIG91dCBzaW11bHRhbmVvdXNseS5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZHVyYXRpb24gW251bGxdIC0gTGVuZ3RoIChzcGVlZCkgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfEZ1bmN0aW9ufSAkdGltaW5nIFtudWxsXSAtIEVhc2luZyBvZiB0aGUgdHJhbnNpdGlvbi5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZGVsYXkgW251bGxdIC0gRGVsYXkgaW4gc2Vjb25kcyBvciBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0cmFuc2l0aW9uIHN0YXJ0cy5cbkBtaXhpbiBtdWktaGluZ2UgKFxuICAkc3RhdGU6IGluLFxuICAkZnJvbTogbGVmdCxcbiAgJGF4aXM6IGVkZ2UsXG4gICRwZXJzcGVjdGl2ZTogMjAwMHB4LFxuICAkdHVybi1vcmlnaW46IGZyb20tYmFjayxcbiAgJGZhZGU6IG1hcC1nZXQoJG1vdGlvbi11aS1zZXR0aW5ncywgaGluZ2UtYW5kLWZhZGUpLFxuICAkZHVyYXRpb246IG51bGwsXG4gICR0aW1pbmc6IG51bGwsXG4gICRkZWxheTogbnVsbFxuKSB7XG4gICRoaW5nZTogaGluZ2UoJHN0YXRlLCAkZnJvbSwgJGF4aXMsICRwZXJzcGVjdGl2ZSwgJHR1cm4tb3JpZ2luKTtcblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXN0YXJ0KCRzdGF0ZSkge1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tYmFzaWNzKCRkdXJhdGlvbiwgJHRpbWluZywgJGRlbGF5KTtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkaGluZ2UsIDApO1xuXG4gICAgQGlmICRmYWRlIHtcbiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgICAgIG9wYWNpdHk6IGlmKCRzdGF0ZSA9PSBpbiwgMCwgMSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1lbmQoJHN0YXRlKSB7XG4gICAgQGluY2x1ZGUgLW11aS1rZXlmcmFtZS1nZXQoJGhpbmdlLCAxMDApO1xuXG4gICAgQGlmICRmYWRlIHtcbiAgICAgIG9wYWNpdHk6IGlmKCRzdGF0ZSA9PSBpbiwgMSwgMCk7XG4gICAgfVxuICB9XG59XG4iLCIvLy8gQ3JlYXRlcyBhIHNjYWxpbmcgdHJhbnNpdGlvbi4gQSBzY2FsZSBvZiBgMWAgbWVhbnMgdGhlIGVsZW1lbnQgaXMgdGhlIHNhbWUgc2l6ZS4gTGFyZ2VyIG51bWJlcnMgbWFrZSB0aGUgZWxlbWVudCBiaWdnZXIsIHdoaWxlIG51bWJlcnMgbGVzcyB0aGFuIDEgbWFrZSB0aGUgZWxlbWVudCBzbWFsbGVyLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHN0YXRlIFtpbl0gLSBTdGF0ZSB0byB0cmFuc2l0aW9uIHRvLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZnJvbSBbMS41XSAtIFNpemUgdG8gc3RhcnQgYXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmcm9tIFsxXSAtIFNpemUgdG8gZW5kIGF0LlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGZhZGUgW3RydWVdIC0gU2V0IHRvIGB0cnVlYCB0byBmYWRlIHRoZSBlbGVtZW50IGluIG9yIG91dCBzaW11bHRhbmVvdXNseS5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZHVyYXRpb24gW251bGxdIC0gTGVuZ3RoIChzcGVlZCkgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfEZ1bmN0aW9ufSAkdGltaW5nIFtudWxsXSAtIEVhc2luZyBvZiB0aGUgdHJhbnNpdGlvbi5cbi8vLyBAcGFyYW0ge0R1cmF0aW9ufSAkZGVsYXkgW251bGxdIC0gRGVsYXkgaW4gc2Vjb25kcyBvciBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0cmFuc2l0aW9uIHN0YXJ0cy5cbkBtaXhpbiBtdWktem9vbShcbiAgJHN0YXRlOiBpbixcbiAgJGZyb206IDEuNSxcbiAgJHRvOiAxLFxuICAkZmFkZTogbWFwLWdldCgkbW90aW9uLXVpLXNldHRpbmdzLCBzY2FsZS1hbmQtZmFkZSksXG4gICRkdXJhdGlvbjogbnVsbCxcbiAgJHRpbWluZzogbnVsbCxcbiAgJGRlbGF5OiBudWxsXG4pIHtcbiAgJHNjYWxlOiB6b29tKCRmcm9tLCAkdG8pO1xuXG4gIEBpbmNsdWRlIHRyYW5zaXRpb24tc3RhcnQoJHN0YXRlKSB7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbi1iYXNpY3MoJGR1cmF0aW9uLCAkdGltaW5nLCAkZGVsYXkpO1xuICAgIEBpbmNsdWRlIC1tdWkta2V5ZnJhbWUtZ2V0KCRzY2FsZSwgMCk7XG5cbiAgICBAaWYgJGZhZGUge1xuICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICAgICAgb3BhY2l0eTogaWYoJHN0YXRlID09IGluLCAwLCAxKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWVuZCgkc3RhdGUpIHtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkc2NhbGUsIDEwMCk7XG5cbiAgICBAaWYgJGZhZGUge1xuICAgICAgb3BhY2l0eTogaWYoJHN0YXRlID09IGluLCAxLCAwKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLyBDcmVhdGVzIGEgc3Bpbm5pbmcgdHJhbnNpdGlvbiBieSByb3RhdGluZyB0aGUgZWxlbWVudC4gVGhlIGB0dXJuYCB1bml0IGlzIHVzZWQgdG8gc3BlY2lmeSBob3cgZmFyIHRvIHJvdGF0ZS4gYDF0dXJuYCBpcyBlcXVhbCB0byBhIDM2MC1kZWdyZWUgc3Bpbi5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdGF0ZSBbaW5dIC0gU3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRkaXJlY3Rpb24gW2N3XSAtIERpcmVjdGlvbiB0byBzcGluLiBTaG91bGQgYmUgYGN3YCAoY2xvY2t3aXNlKSBvciBgY2N3YCAoY291bnRlcmNsb2Nrd2lzZSkuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRhbW91bnQgWzAuNzV0dXJuXSAtIEFtb3VudCB0byBlbGVtZW50IHRoZSBlbGVtZW50LlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGZhZGUgW2ZhbHNlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZmFkZSB0aGUgZWxlbWVudCBpbiBvciBvdXQgc2ltdWx0YW5lb3VzbHkuXG4vLy8gQHBhcmFtIHtEdXJhdGlvbn0gJGR1cmF0aW9uIFtudWxsXSAtIExlbmd0aCAoc3BlZWQpIG9mIHRoZSB0cmFuc2l0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZHxGdW5jdGlvbn0gJHRpbWluZyBbbnVsbF0gLSBFYXNpbmcgb2YgdGhlIHRyYW5zaXRpb24uXG4vLy8gQHBhcmFtIHtEdXJhdGlvbn0gJGRlbGF5IFtudWxsXSAtIERlbGF5IGluIHNlY29uZHMgb3IgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdHJhbnNpdGlvbiBzdGFydHMuXG5AbWl4aW4gbXVpLXNwaW4oXG4gICRzdGF0ZTogaW4sXG4gICRkaXJlY3Rpb246IGN3LFxuICAkYW1vdW50OiAwLjc1dHVybixcbiAgJGZhZGU6IG1hcC1nZXQoJG1vdGlvbi11aS1zZXR0aW5ncywgc3Bpbi1hbmQtZmFkZSksXG4gICRkdXJhdGlvbjogbnVsbCxcbiAgJHRpbWluZzogbnVsbCxcbiAgJGRlbGF5OiBudWxsXG4pIHtcbiAgJHNwaW46IHNwaW4oJHN0YXRlLCAkZGlyZWN0aW9uLCAkYW1vdW50KTtcblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXN0YXJ0KCRzdGF0ZSkge1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tYmFzaWNzKCRkdXJhdGlvbiwgJHRpbWluZywgJGRlbGF5KTtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkc3BpbiwgMCk7XG5cbiAgICBAaWYgJGZhZGUge1xuICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xuICAgICAgb3BhY2l0eTogaWYoJHN0YXRlID09IGluLCAwLCAxKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWVuZCgkc3RhdGUpIHtcbiAgICBAaW5jbHVkZSAtbXVpLWtleWZyYW1lLWdldCgkc3BpbiwgMTAwKTtcblxuICAgIEBpZiAkZmFkZSB7XG4gICAgICBvcGFjaXR5OiBpZigkc3RhdGUgPT0gaW4sIDEsIDApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vIENyZWF0ZXMgYSBrZXlmcmFtZSBmcm9tIG9uZSBvciBtb3JlIGVmZmVjdCBmdW5jdGlvbnMgYW5kIGFzc2lnbnMgaXQgdG8gdGhlIGVsZW1lbnQgYnkgYWRkaW5nIHRoZSBgYW5pbWF0aW9uLW5hbWVgIHByb3BlcnR5LlxuLy8vIEBwYXJhbSB7RnVuY3Rpb259ICRlZmZlY3RzLi4uIC0gT25lIG9yIG1vcmUgZWZmZWN0IGZ1bmN0aW9ucyB0byBidWlsZCB0aGUga2V5ZnJhbWUgd2l0aC5cbkBtaXhpbiBtdWktYW5pbWF0aW9uKCRhcmdzLi4uKSB7XG4gICRuYW1lOiBtYXAtZ2V0KC1tdWktcHJvY2Vzcy1hcmdzKCRhcmdzLi4uKSwgbmFtZSk7XG4gIEBpbmNsdWRlIG11aS1rZXlmcmFtZXMoJG5hbWUsICRhcmdzLi4uKTtcbiAgYW5pbWF0aW9uLW5hbWU6IHVucXVvdGUoJG5hbWUpO1xufVxuIiwiQGNoYXJzZXQgJ3V0Zi04JztcblxuQGltcG9ydCAnc2V0dGluZ3MnO1xuQGltcG9ydCAnZm91bmRhdGlvbic7XG5AaW1wb3J0ICdtb3Rpb24tdWknO1xuXG5AaW5jbHVkZSBmb3VuZGF0aW9uLWdsb2JhbC1zdHlsZXM7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLWdyaWQ7XG4vLyBAaW5jbHVkZSBmb3VuZGF0aW9uLWZsZXgtZ3JpZDtcbkBpbmNsdWRlIGZvdW5kYXRpb24tdHlwb2dyYXBoeTtcbkBpbmNsdWRlIGZvdW5kYXRpb24tYnV0dG9uO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1mb3Jtcztcbi8vIEBpbmNsdWRlIGZvdW5kYXRpb24tcmFuZ2UtaW5wdXQ7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLWFjY29yZGlvbjtcbkBpbmNsdWRlIGZvdW5kYXRpb24tYWNjb3JkaW9uLW1lbnU7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLWJhZGdlO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1icmVhZGNydW1icztcbkBpbmNsdWRlIGZvdW5kYXRpb24tYnV0dG9uLWdyb3VwO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1jYWxsb3V0O1xuQGluY2x1ZGUgZm91bmRhdGlvbi1jYXJkO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1jbG9zZS1idXR0b247XG5AaW5jbHVkZSBmb3VuZGF0aW9uLW1lbnU7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLW1lbnUtaWNvbjtcbkBpbmNsdWRlIGZvdW5kYXRpb24tZHJpbGxkb3duLW1lbnU7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLWRyb3Bkb3duO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1kcm9wZG93bi1tZW51O1xuQGluY2x1ZGUgZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1sYWJlbDtcbkBpbmNsdWRlIGZvdW5kYXRpb24tbWVkaWEtb2JqZWN0O1xuQGluY2x1ZGUgZm91bmRhdGlvbi1vZmYtY2FudmFzO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1vcmJpdDtcbkBpbmNsdWRlIGZvdW5kYXRpb24tcGFnaW5hdGlvbjtcbkBpbmNsdWRlIGZvdW5kYXRpb24tcHJvZ3Jlc3MtYmFyO1xuLy8gQGluY2x1ZGUgZm91bmRhdGlvbi1wcm9ncmVzcy1lbGVtZW50O1xuLy8gQGluY2x1ZGUgZm91bmRhdGlvbi1tZXRlci1lbGVtZW50O1xuQGluY2x1ZGUgZm91bmRhdGlvbi1zbGlkZXI7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLXN0aWNreTtcbkBpbmNsdWRlIGZvdW5kYXRpb24tcmV2ZWFsO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1zd2l0Y2g7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLXRhYmxlO1xuQGluY2x1ZGUgZm91bmRhdGlvbi10YWJzO1xuQGluY2x1ZGUgZm91bmRhdGlvbi10aHVtYm5haWw7XG5AaW5jbHVkZSBmb3VuZGF0aW9uLXRpdGxlLWJhcjtcbkBpbmNsdWRlIGZvdW5kYXRpb24tdG9vbHRpcDtcbkBpbmNsdWRlIGZvdW5kYXRpb24tdG9wLWJhcjtcbkBpbmNsdWRlIGZvdW5kYXRpb24tdmlzaWJpbGl0eS1jbGFzc2VzO1xuQGluY2x1ZGUgZm91bmRhdGlvbi1mbG9hdC1jbGFzc2VzO1xuLy8gQGluY2x1ZGUgZm91bmRhdGlvbi1mbGV4LWNsYXNzZXM7XG5cbkBpbmNsdWRlIG1vdGlvbi11aS10cmFuc2l0aW9ucztcbkBpbmNsdWRlIG1vdGlvbi11aS1hbmltYXRpb25zO1xuXG4uc2l0ZS1sb2dvIHtcblx0XHRoZWlnaHQ6IDMycHg7XG59XG5cbi5ibG9nLXBvc3Qge1xuXHRcdC5wb3N0LW1ldGEge1xuXHRcdFx0XHRib3JkZXItdG9wOiBzb2xpZCAxcHggJGxpZ2h0LWdyYXk7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAkbGlnaHQtZ3JheTtcblx0XHR9XG59XG5cbi8vIG5ld3MgY29tbWVudHNcbi5sZWdhY3ktY29tbWVudHMge1xuXHRcdGJvcmRlci10b3A6IHNvbGlkIDJweCAkcHJpbWFyeS1jb2xvcjtcblx0XHRwYWRkaW5nLXRvcDogMWVtO1xuXHRcdC5jb21tZW50LCAuY29tbWVudC1wdWJsaXNoZWQge1xuXHRcdFx0XHQudGl0bGUge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxLjJyZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0LnN1Ym1pdHRlZCB7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDAuOHJlbTtcblx0XHRcdFx0XHRcdGNvbG9yOiAkZGFyay1ncmF5O1xuXHRcdFx0XHRcdFx0cGFkZGluZy1ib3R0b206IDAuMjVyZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0LmxpbmtzLCAubGlua3MgKiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0fVxufVxuXG4vLyB0aGUgZm9vdGVyXG4uYmxvZy1mb290ZXIge1xuXHRcdHBhZGRpbmctdG9wOiAycmVtO1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuXHRcdGNvbG9yOiAkd2hpdGU7XG5cdFx0YSB7XG5cdFx0XHRcdGNvbG9yOiAkd2hpdGU7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuXHRcdH1cblx0XHR1bCB7XG5cdFx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHR9XG59Il19 */
+/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;overflow:visible}main{display:block}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}input{overflow:visible}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;display:table;padding:0;color:inherit;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}details{display:block}summary{display:list-item}menu{display:block}canvas{display:inline-block}[hidden],template{display:none}.foundation-mq{font-family:"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{box-sizing:border-box;font-size:100%}*,:after,:before{box-sizing:inherit}body{margin:0;padding:0;background:#262626;font-family:Oxygen,Noto Sans,Roboto,Arial,sans-serif;font-weight:400;line-height:1.7;color:#9e9e9e;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{box-sizing:border-box;width:100%}.map_canvas embed,.map_canvas img,.map_canvas object,.mqa-display embed,.mqa-display img,.mqa-display object{max-width:none!important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:transparent;line-height:1}[data-whatinput=mouse] button{outline:0}pre{overflow:auto}.is-visible{display:block!important}.is-hidden{display:none!important}.row{max-width:75rem;margin-right:auto;margin-left:auto}.row:after,.row:before{display:table;content:" "}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-right:0;padding-left:0}.row .row{margin-right:-.625rem;margin-left:-.625rem}@media print,screen and (min-width:40em){.row .row{margin-right:-.9375rem;margin-left:-.9375rem}}@media print,screen and (min-width:64em){.row .row{margin-right:-.9375rem;margin-left:-.9375rem}}.row .row.collapse{margin-right:0;margin-left:0}.row.expanded{max-width:none}.row.expanded .row{margin-right:auto;margin-left:auto}.row:not(.expanded) .row{max-width:none}.row.gutter-small>.column,.row.gutter-small>.columns{padding-right:.625rem;padding-left:.625rem}.row.gutter-medium>.column,.row.gutter-medium>.columns{padding-right:.9375rem;padding-left:.9375rem}.column,.columns{width:100%;float:left;padding-right:.625rem;padding-left:.625rem}@media print,screen and (min-width:40em){.column,.columns{padding-right:.9375rem;padding-left:.9375rem}}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:right}.column.end:last-child:last-child,.end.columns:last-child:last-child{float:left}.column.row.row,.row.row.columns{float:none}.row .column.row.row,.row .row.row.columns{margin-right:0;margin-left:0;padding-right:0;padding-left:0}.small-1{width:8.33333%}.small-push-1{position:relative;left:8.33333%}.small-pull-1{position:relative;left:-8.33333%}.small-offset-0{margin-left:0}.small-2{width:16.66667%}.small-push-2{position:relative;left:16.66667%}.small-pull-2{position:relative;left:-16.66667%}.small-offset-1{margin-left:8.33333%}.small-3{width:25%}.small-push-3{position:relative;left:25%}.small-pull-3{position:relative;left:-25%}.small-offset-2{margin-left:16.66667%}.small-4{width:33.33333%}.small-push-4{position:relative;left:33.33333%}.small-pull-4{position:relative;left:-33.33333%}.small-offset-3{margin-left:25%}.small-5{width:41.66667%}.small-push-5{position:relative;left:41.66667%}.small-pull-5{position:relative;left:-41.66667%}.small-offset-4{margin-left:33.33333%}.small-6{width:50%}.small-push-6{position:relative;left:50%}.small-pull-6{position:relative;left:-50%}.small-offset-5{margin-left:41.66667%}.small-7{width:58.33333%}.small-push-7{position:relative;left:58.33333%}.small-pull-7{position:relative;left:-58.33333%}.small-offset-6{margin-left:50%}.small-8{width:66.66667%}.small-push-8{position:relative;left:66.66667%}.small-pull-8{position:relative;left:-66.66667%}.small-offset-7{margin-left:58.33333%}.small-9{width:75%}.small-push-9{position:relative;left:75%}.small-pull-9{position:relative;left:-75%}.small-offset-8{margin-left:66.66667%}.small-10{width:83.33333%}.small-push-10{position:relative;left:83.33333%}.small-pull-10{position:relative;left:-83.33333%}.small-offset-9{margin-left:75%}.small-11{width:91.66667%}.small-push-11{position:relative;left:91.66667%}.small-pull-11{position:relative;left:-91.66667%}.small-offset-10{margin-left:83.33333%}.small-12{width:100%}.small-offset-11{margin-left:91.66667%}.small-up-1>.column,.small-up-1>.columns{float:left;width:100%}.small-up-1>.column:nth-of-type(1n),.small-up-1>.columns:nth-of-type(1n){clear:none}.small-up-1>.column:nth-of-type(1n+1),.small-up-1>.columns:nth-of-type(1n+1){clear:both}.small-up-1>.column:last-child,.small-up-1>.columns:last-child{float:left}.small-up-2>.column,.small-up-2>.columns{float:left;width:50%}.small-up-2>.column:nth-of-type(1n),.small-up-2>.columns:nth-of-type(1n){clear:none}.small-up-2>.column:nth-of-type(odd),.small-up-2>.columns:nth-of-type(odd){clear:both}.small-up-2>.column:last-child,.small-up-2>.columns:last-child{float:left}.small-up-3>.column,.small-up-3>.columns{float:left;width:33.33333%}.small-up-3>.column:nth-of-type(1n),.small-up-3>.columns:nth-of-type(1n){clear:none}.small-up-3>.column:nth-of-type(3n+1),.small-up-3>.columns:nth-of-type(3n+1){clear:both}.small-up-3>.column:last-child,.small-up-3>.columns:last-child{float:left}.small-up-4>.column,.small-up-4>.columns{float:left;width:25%}.small-up-4>.column:nth-of-type(1n),.small-up-4>.columns:nth-of-type(1n){clear:none}.small-up-4>.column:nth-of-type(4n+1),.small-up-4>.columns:nth-of-type(4n+1){clear:both}.small-up-4>.column:last-child,.small-up-4>.columns:last-child{float:left}.small-up-5>.column,.small-up-5>.columns{float:left;width:20%}.small-up-5>.column:nth-of-type(1n),.small-up-5>.columns:nth-of-type(1n){clear:none}.small-up-5>.column:nth-of-type(5n+1),.small-up-5>.columns:nth-of-type(5n+1){clear:both}.small-up-5>.column:last-child,.small-up-5>.columns:last-child{float:left}.small-up-6>.column,.small-up-6>.columns{float:left;width:16.66667%}.small-up-6>.column:nth-of-type(1n),.small-up-6>.columns:nth-of-type(1n){clear:none}.small-up-6>.column:nth-of-type(6n+1),.small-up-6>.columns:nth-of-type(6n+1){clear:both}.small-up-6>.column:last-child,.small-up-6>.columns:last-child{float:left}.small-up-7>.column,.small-up-7>.columns{float:left;width:14.28571%}.small-up-7>.column:nth-of-type(1n),.small-up-7>.columns:nth-of-type(1n){clear:none}.small-up-7>.column:nth-of-type(7n+1),.small-up-7>.columns:nth-of-type(7n+1){clear:both}.small-up-7>.column:last-child,.small-up-7>.columns:last-child{float:left}.small-up-8>.column,.small-up-8>.columns{float:left;width:12.5%}.small-up-8>.column:nth-of-type(1n),.small-up-8>.columns:nth-of-type(1n){clear:none}.small-up-8>.column:nth-of-type(8n+1),.small-up-8>.columns:nth-of-type(8n+1){clear:both}.small-up-8>.column:last-child,.small-up-8>.columns:last-child{float:left}.small-collapse>.column,.small-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .small-collapse.row,.small-collapse .row{margin-right:0;margin-left:0}.small-uncollapse>.column,.small-uncollapse>.columns{padding-right:.625rem;padding-left:.625rem}.small-centered{margin-right:auto;margin-left:auto}.small-centered,.small-centered:last-child:not(:first-child){float:none;clear:both}.small-pull-0,.small-push-0,.small-uncentered{position:static;float:left;margin-right:0;margin-left:0}@media print,screen and (min-width:40em){.medium-1{width:8.33333%}.medium-push-1{position:relative;left:8.33333%}.medium-pull-1{position:relative;left:-8.33333%}.medium-offset-0{margin-left:0}.medium-2{width:16.66667%}.medium-push-2{position:relative;left:16.66667%}.medium-pull-2{position:relative;left:-16.66667%}.medium-offset-1{margin-left:8.33333%}.medium-3{width:25%}.medium-push-3{position:relative;left:25%}.medium-pull-3{position:relative;left:-25%}.medium-offset-2{margin-left:16.66667%}.medium-4{width:33.33333%}.medium-push-4{position:relative;left:33.33333%}.medium-pull-4{position:relative;left:-33.33333%}.medium-offset-3{margin-left:25%}.medium-5{width:41.66667%}.medium-push-5{position:relative;left:41.66667%}.medium-pull-5{position:relative;left:-41.66667%}.medium-offset-4{margin-left:33.33333%}.medium-6{width:50%}.medium-push-6{position:relative;left:50%}.medium-pull-6{position:relative;left:-50%}.medium-offset-5{margin-left:41.66667%}.medium-7{width:58.33333%}.medium-push-7{position:relative;left:58.33333%}.medium-pull-7{position:relative;left:-58.33333%}.medium-offset-6{margin-left:50%}.medium-8{width:66.66667%}.medium-push-8{position:relative;left:66.66667%}.medium-pull-8{position:relative;left:-66.66667%}.medium-offset-7{margin-left:58.33333%}.medium-9{width:75%}.medium-push-9{position:relative;left:75%}.medium-pull-9{position:relative;left:-75%}.medium-offset-8{margin-left:66.66667%}.medium-10{width:83.33333%}.medium-push-10{position:relative;left:83.33333%}.medium-pull-10{position:relative;left:-83.33333%}.medium-offset-9{margin-left:75%}.medium-11{width:91.66667%}.medium-push-11{position:relative;left:91.66667%}.medium-pull-11{position:relative;left:-91.66667%}.medium-offset-10{margin-left:83.33333%}.medium-12{width:100%}.medium-offset-11{margin-left:91.66667%}.medium-up-1>.column,.medium-up-1>.columns{float:left;width:100%}.medium-up-1>.column:nth-of-type(1n),.medium-up-1>.columns:nth-of-type(1n){clear:none}.medium-up-1>.column:nth-of-type(1n+1),.medium-up-1>.columns:nth-of-type(1n+1){clear:both}.medium-up-1>.column:last-child,.medium-up-1>.columns:last-child{float:left}.medium-up-2>.column,.medium-up-2>.columns{float:left;width:50%}.medium-up-2>.column:nth-of-type(1n),.medium-up-2>.columns:nth-of-type(1n){clear:none}.medium-up-2>.column:nth-of-type(odd),.medium-up-2>.columns:nth-of-type(odd){clear:both}.medium-up-2>.column:last-child,.medium-up-2>.columns:last-child{float:left}.medium-up-3>.column,.medium-up-3>.columns{float:left;width:33.33333%}.medium-up-3>.column:nth-of-type(1n),.medium-up-3>.columns:nth-of-type(1n){clear:none}.medium-up-3>.column:nth-of-type(3n+1),.medium-up-3>.columns:nth-of-type(3n+1){clear:both}.medium-up-3>.column:last-child,.medium-up-3>.columns:last-child{float:left}.medium-up-4>.column,.medium-up-4>.columns{float:left;width:25%}.medium-up-4>.column:nth-of-type(1n),.medium-up-4>.columns:nth-of-type(1n){clear:none}.medium-up-4>.column:nth-of-type(4n+1),.medium-up-4>.columns:nth-of-type(4n+1){clear:both}.medium-up-4>.column:last-child,.medium-up-4>.columns:last-child{float:left}.medium-up-5>.column,.medium-up-5>.columns{float:left;width:20%}.medium-up-5>.column:nth-of-type(1n),.medium-up-5>.columns:nth-of-type(1n){clear:none}.medium-up-5>.column:nth-of-type(5n+1),.medium-up-5>.columns:nth-of-type(5n+1){clear:both}.medium-up-5>.column:last-child,.medium-up-5>.columns:last-child{float:left}.medium-up-6>.column,.medium-up-6>.columns{float:left;width:16.66667%}.medium-up-6>.column:nth-of-type(1n),.medium-up-6>.columns:nth-of-type(1n){clear:none}.medium-up-6>.column:nth-of-type(6n+1),.medium-up-6>.columns:nth-of-type(6n+1){clear:both}.medium-up-6>.column:last-child,.medium-up-6>.columns:last-child{float:left}.medium-up-7>.column,.medium-up-7>.columns{float:left;width:14.28571%}.medium-up-7>.column:nth-of-type(1n),.medium-up-7>.columns:nth-of-type(1n){clear:none}.medium-up-7>.column:nth-of-type(7n+1),.medium-up-7>.columns:nth-of-type(7n+1){clear:both}.medium-up-7>.column:last-child,.medium-up-7>.columns:last-child{float:left}.medium-up-8>.column,.medium-up-8>.columns{float:left;width:12.5%}.medium-up-8>.column:nth-of-type(1n),.medium-up-8>.columns:nth-of-type(1n){clear:none}.medium-up-8>.column:nth-of-type(8n+1),.medium-up-8>.columns:nth-of-type(8n+1){clear:both}.medium-up-8>.column:last-child,.medium-up-8>.columns:last-child{float:left}.medium-collapse>.column,.medium-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .medium-collapse.row,.medium-collapse .row{margin-right:0;margin-left:0}.medium-uncollapse>.column,.medium-uncollapse>.columns{padding-right:.9375rem;padding-left:.9375rem}.medium-centered{margin-right:auto;margin-left:auto}.medium-centered,.medium-centered:last-child:not(:first-child){float:none;clear:both}.medium-pull-0,.medium-push-0,.medium-uncentered{position:static;float:left;margin-right:0;margin-left:0}}@media print,screen and (min-width:64em){.large-1{width:8.33333%}.large-push-1{position:relative;left:8.33333%}.large-pull-1{position:relative;left:-8.33333%}.large-offset-0{margin-left:0}.large-2{width:16.66667%}.large-push-2{position:relative;left:16.66667%}.large-pull-2{position:relative;left:-16.66667%}.large-offset-1{margin-left:8.33333%}.large-3{width:25%}.large-push-3{position:relative;left:25%}.large-pull-3{position:relative;left:-25%}.large-offset-2{margin-left:16.66667%}.large-4{width:33.33333%}.large-push-4{position:relative;left:33.33333%}.large-pull-4{position:relative;left:-33.33333%}.large-offset-3{margin-left:25%}.large-5{width:41.66667%}.large-push-5{position:relative;left:41.66667%}.large-pull-5{position:relative;left:-41.66667%}.large-offset-4{margin-left:33.33333%}.large-6{width:50%}.large-push-6{position:relative;left:50%}.large-pull-6{position:relative;left:-50%}.large-offset-5{margin-left:41.66667%}.large-7{width:58.33333%}.large-push-7{position:relative;left:58.33333%}.large-pull-7{position:relative;left:-58.33333%}.large-offset-6{margin-left:50%}.large-8{width:66.66667%}.large-push-8{position:relative;left:66.66667%}.large-pull-8{position:relative;left:-66.66667%}.large-offset-7{margin-left:58.33333%}.large-9{width:75%}.large-push-9{position:relative;left:75%}.large-pull-9{position:relative;left:-75%}.large-offset-8{margin-left:66.66667%}.large-10{width:83.33333%}.large-push-10{position:relative;left:83.33333%}.large-pull-10{position:relative;left:-83.33333%}.large-offset-9{margin-left:75%}.large-11{width:91.66667%}.large-push-11{position:relative;left:91.66667%}.large-pull-11{position:relative;left:-91.66667%}.large-offset-10{margin-left:83.33333%}.large-12{width:100%}.large-offset-11{margin-left:91.66667%}.large-up-1>.column,.large-up-1>.columns{float:left;width:100%}.large-up-1>.column:nth-of-type(1n),.large-up-1>.columns:nth-of-type(1n){clear:none}.large-up-1>.column:nth-of-type(1n+1),.large-up-1>.columns:nth-of-type(1n+1){clear:both}.large-up-1>.column:last-child,.large-up-1>.columns:last-child{float:left}.large-up-2>.column,.large-up-2>.columns{float:left;width:50%}.large-up-2>.column:nth-of-type(1n),.large-up-2>.columns:nth-of-type(1n){clear:none}.large-up-2>.column:nth-of-type(odd),.large-up-2>.columns:nth-of-type(odd){clear:both}.large-up-2>.column:last-child,.large-up-2>.columns:last-child{float:left}.large-up-3>.column,.large-up-3>.columns{float:left;width:33.33333%}.large-up-3>.column:nth-of-type(1n),.large-up-3>.columns:nth-of-type(1n){clear:none}.large-up-3>.column:nth-of-type(3n+1),.large-up-3>.columns:nth-of-type(3n+1){clear:both}.large-up-3>.column:last-child,.large-up-3>.columns:last-child{float:left}.large-up-4>.column,.large-up-4>.columns{float:left;width:25%}.large-up-4>.column:nth-of-type(1n),.large-up-4>.columns:nth-of-type(1n){clear:none}.large-up-4>.column:nth-of-type(4n+1),.large-up-4>.columns:nth-of-type(4n+1){clear:both}.large-up-4>.column:last-child,.large-up-4>.columns:last-child{float:left}.large-up-5>.column,.large-up-5>.columns{float:left;width:20%}.large-up-5>.column:nth-of-type(1n),.large-up-5>.columns:nth-of-type(1n){clear:none}.large-up-5>.column:nth-of-type(5n+1),.large-up-5>.columns:nth-of-type(5n+1){clear:both}.large-up-5>.column:last-child,.large-up-5>.columns:last-child{float:left}.large-up-6>.column,.large-up-6>.columns{float:left;width:16.66667%}.large-up-6>.column:nth-of-type(1n),.large-up-6>.columns:nth-of-type(1n){clear:none}.large-up-6>.column:nth-of-type(6n+1),.large-up-6>.columns:nth-of-type(6n+1){clear:both}.large-up-6>.column:last-child,.large-up-6>.columns:last-child{float:left}.large-up-7>.column,.large-up-7>.columns{float:left;width:14.28571%}.large-up-7>.column:nth-of-type(1n),.large-up-7>.columns:nth-of-type(1n){clear:none}.large-up-7>.column:nth-of-type(7n+1),.large-up-7>.columns:nth-of-type(7n+1){clear:both}.large-up-7>.column:last-child,.large-up-7>.columns:last-child{float:left}.large-up-8>.column,.large-up-8>.columns{float:left;width:12.5%}.large-up-8>.column:nth-of-type(1n),.large-up-8>.columns:nth-of-type(1n){clear:none}.large-up-8>.column:nth-of-type(8n+1),.large-up-8>.columns:nth-of-type(8n+1){clear:both}.large-up-8>.column:last-child,.large-up-8>.columns:last-child{float:left}.large-collapse>.column,.large-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .large-collapse.row,.large-collapse .row{margin-right:0;margin-left:0}.large-uncollapse>.column,.large-uncollapse>.columns{padding-right:.9375rem;padding-left:.9375rem}.large-centered{margin-right:auto;margin-left:auto}.large-centered,.large-centered:last-child:not(:first-child){float:none;clear:both}.large-pull-0,.large-push-0,.large-uncentered{position:static;float:left;margin-right:0;margin-left:0}}.column-block{margin-bottom:1.25rem}.column-block>:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.column-block{margin-bottom:1.875rem}.column-block>:last-child{margin-bottom:0}}blockquote,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,li,ol,p,pre,td,th,ul{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.7;text-rendering:optimizeLegibility}em,i{font-style:italic}b,em,i,strong{line-height:inherit}b,strong{font-weight:700}small{font-size:80%;line-height:inherit}h1,h2,h3,h4,h5,h6{font-family:Fira Sans,Oxygen,Arial,sans-serif;font-style:normal;font-weight:400;color:inherit;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{line-height:0;color:#6b6b6b}h1{font-size:1.5rem}h1,h2{line-height:1.7;margin-top:0;margin-bottom:.75rem}h2{font-size:1.25rem}h3{font-size:1.1875rem}h3,h4{line-height:1.7;margin-top:0;margin-bottom:.75rem}h4{font-size:1.125rem}h5{font-size:1.0625rem}h5,h6{line-height:1.7;margin-top:0;margin-bottom:.75rem}h6{font-size:1rem}@media print,screen and (min-width:40em){h1{font-size:3rem}h2{font-size:2.5rem}h3{font-size:1.9375rem}h4{font-size:1.5625rem}h5{font-size:1.25rem}h6{font-size:1rem}}a{line-height:inherit;color:#0087ff;text-decoration:none;cursor:pointer}a:focus,a:hover{color:#0074db}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #6b6b6b;border-left:0}dl,ol,ul{margin-bottom:1rem;list-style-position:outside;line-height:1.7}li{font-size:inherit}ul{list-style-type:disc}ol,ul{margin-left:1.25rem}ol ol,ol ul,ul ol,ul ul{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:700}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #6b6b6b}blockquote,blockquote p{line-height:1.7;color:#262626}cite{display:block;font-size:.8125rem;color:#262626}cite:before{content:"— "}abbr{border-bottom:1px dotted #0a0a0a;color:#9e9e9e;cursor:help}figure{margin:0}code{padding:.125rem .3125rem .0625rem;border:1px solid #6b6b6b;font-weight:400}code,kbd{background-color:#9e9e9e;font-family:Consolas,Liberation Mono,Courier,monospace;color:#0a0a0a}kbd{margin:0;padding:.125rem .25rem 0}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:400;line-height:1.4;color:#262626}.lead{font-size:125%;line-height:1.7}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}.no-bullet{margin-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media print,screen and (min-width:40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print,screen and (min-width:64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none!important}@media print{*{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}.show-for-print{display:block!important}.hide-for-print{display:none!important}table.show-for-print{display:table!important}thead.show-for-print{display:table-header-group!important}tbody.show-for-print{display:table-row-group!important}tr.show-for-print{display:table-row!important}td.show-for-print,th.show-for-print{display:table-cell!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}abbr[title]:after{content:" (" attr(title) ")"}blockquote,pre{border:1px solid #262626;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem;padding:.85em 1em;-webkit-appearance:none;border:1px solid transparent;border-radius:0;transition:background-color .25s ease-out,color .25s ease-out;font-size:.9rem;line-height:1;text-align:center;cursor:pointer;background-color:#0087ff;color:#f0f0f0}[data-whatinput=mouse] .button{outline:0}.button:focus,.button:hover{background-color:#0073d9;color:#f0f0f0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button.primary{background-color:#0087ff;color:#0a0a0a}.button.primary:focus,.button.primary:hover{background-color:#006ccc;color:#0a0a0a}.button.secondary{background-color:#5f5faf;color:#f0f0f0}.button.secondary:focus,.button.secondary:hover{background-color:#484890;color:#f0f0f0}.button.success{background-color:#5f8700;color:#0a0a0a}.button.success:focus,.button.success:hover{background-color:#4c6c00;color:#0a0a0a}.button.warning{background-color:#d75f00;color:#0a0a0a}.button.warning:focus,.button.warning:hover{background-color:#ac4c00;color:#0a0a0a}.button.alert{background-color:#d70000;color:#f0f0f0}.button.alert:focus,.button.alert:hover{background-color:#ac0000;color:#f0f0f0}.button.hollow{border:1px solid #0087ff;color:#0087ff}.button.hollow,.button.hollow:focus,.button.hollow:hover{background-color:transparent}.button.hollow:focus,.button.hollow:hover{border-color:#004480;color:#004480}.button.hollow.primary{border:1px solid #0087ff;color:#0087ff}.button.hollow.primary:focus,.button.hollow.primary:hover{border-color:#004480;color:#004480}.button.hollow.secondary{border:1px solid #5f5faf;color:#5f5faf}.button.hollow.secondary:focus,.button.hollow.secondary:hover{border-color:#2d2d5a;color:#2d2d5a}.button.hollow.success{border:1px solid #5f8700;color:#5f8700}.button.hollow.success:focus,.button.hollow.success:hover{border-color:#304400;color:#304400}.button.hollow.warning{border:1px solid #d75f00;color:#d75f00}.button.hollow.warning:focus,.button.hollow.warning:hover{border-color:#6c3000;color:#6c3000}.button.hollow.alert{border:1px solid #d70000;color:#d70000}.button.hollow.alert:focus,.button.hollow.alert:hover{border-color:#6c0000;color:#6c0000}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.disabled,.button.disabled:focus,.button.disabled:hover,.button[disabled],.button[disabled]:focus,.button[disabled]:hover{background-color:#0087ff;color:#f0f0f0}.button.disabled.primary,.button[disabled].primary{opacity:.25;cursor:not-allowed}.button.disabled.primary,.button.disabled.primary:focus,.button.disabled.primary:hover,.button[disabled].primary,.button[disabled].primary:focus,.button[disabled].primary:hover{background-color:#0087ff;color:#0a0a0a}.button.disabled.secondary,.button[disabled].secondary{opacity:.25;cursor:not-allowed}.button.disabled.secondary,.button.disabled.secondary:focus,.button.disabled.secondary:hover,.button[disabled].secondary,.button[disabled].secondary:focus,.button[disabled].secondary:hover{background-color:#5f5faf;color:#f0f0f0}.button.disabled.success,.button[disabled].success{opacity:.25;cursor:not-allowed}.button.disabled.success,.button.disabled.success:focus,.button.disabled.success:hover,.button[disabled].success,.button[disabled].success:focus,.button[disabled].success:hover{background-color:#5f8700;color:#0a0a0a}.button.disabled.warning,.button[disabled].warning{opacity:.25;cursor:not-allowed}.button.disabled.warning,.button.disabled.warning:focus,.button.disabled.warning:hover,.button[disabled].warning,.button[disabled].warning:focus,.button[disabled].warning:hover{background-color:#d75f00;color:#0a0a0a}.button.disabled.alert,.button[disabled].alert{opacity:.25;cursor:not-allowed}.button.disabled.alert,.button.disabled.alert:focus,.button.disabled.alert:hover,.button[disabled].alert,.button[disabled].alert:focus,.button[disabled].alert:hover{background-color:#d70000;color:#f0f0f0}.button.dropdown:after{display:block;width:0;height:0;border:.4em inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#f0f0f0 transparent transparent;position:relative;top:.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow.primary:after,.button.dropdown.hollow:after{border-top-color:#0087ff}.button.dropdown.hollow.secondary:after{border-top-color:#5f5faf}.button.dropdown.hollow.success:after{border-top-color:#5f8700}.button.dropdown.hollow.warning:after{border-top-color:#d75f00}.button.dropdown.hollow.alert:after{border-top-color:#d70000}.button.arrow-only:after{top:-.1em;float:none;margin-left:0}[type=color],[type=date],[type=datetime-local],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],textarea{display:block;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #6b6b6b;border-radius:0;background-color:#f0f0f0;box-shadow:inset 0 1px 2px hsla(0,0%,4%,.1);font-family:inherit;font-size:1rem;font-weight:400;color:#0a0a0a;transition:box-shadow .5s,border-color .25s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type=color]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=datetime]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,textarea:focus{outline:none;border:1px solid #262626;background-color:#f0f0f0;box-shadow:0 0 5px #6b6b6b;transition:box-shadow .5s,border-color .25s ease-in-out}textarea{max-width:100%}textarea[rows]{height:auto}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#6b6b6b}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#6b6b6b}input::placeholder,textarea::placeholder{color:#6b6b6b}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#9e9e9e;cursor:not-allowed}[type=button],[type=submit]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type=search]{box-sizing:border-box}[type=checkbox],[type=file],[type=radio]{margin:0 0 1rem}[type=checkbox]+label,[type=radio]+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type=checkbox]+label[for],[type=radio]+label[for]{cursor:pointer}label>[type=checkbox],label>[type=radio]{margin-right:.5rem}[type=file]{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:400;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:table;width:100%;margin-bottom:1rem}.input-group>:first-child,.input-group>:last-child>*{border-radius:0 0 0 0}.input-group-button,.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label,.input-group-field,.input-group-label{margin:0;white-space:nowrap;display:table-cell;vertical-align:middle}.input-group-label{padding:0 1rem;border:1px solid #6b6b6b;background:#9e9e9e;color:#0a0a0a;text-align:center;white-space:nowrap;width:1%;height:100%}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;height:2.5rem}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;width:1%;height:100%}.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label{height:2.5rem;padding-top:0;padding-bottom:0;font-size:1rem}.input-group .input-group-button{display:table-cell}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #6b6b6b}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem;background:#262626}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #6b6b6b;border-radius:0;background-color:#f0f0f0;font-family:inherit;font-size:1rem;line-height:normal;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='32' height='24' viewBox='0 0 32 24'><polygon points='0,0 32,0 16,24' style='fill: rgb%2838, 38, 38%29'></polygon></svg>");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;transition:box-shadow .5s,border-color .25s ease-in-out}@media screen and (min-width:0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #262626;background-color:#f0f0f0;box-shadow:0 0 5px #6b6b6b;transition:box-shadow .5s,border-color .25s ease-in-out}select:disabled{background-color:#9e9e9e;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}.is-invalid-input:not(:focus){border-color:#d70000;background-color:#eed8d8}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#d70000}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#d70000}.is-invalid-input:not(:focus)::placeholder{color:#d70000}.form-error,.is-invalid-label{color:#d70000}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:700}.form-error.is-visible{display:block}.accordion{margin-left:0;background:#f0f0f0;list-style-type:none}.accordion-item:first-child>:first-child,.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #9e9e9e;border-bottom:0;font-size:.75rem;line-height:1;color:#0087ff}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #9e9e9e;border-radius:0 0 0 0}.accordion-title:focus,.accordion-title:hover{background-color:#9e9e9e}.accordion-title:before{position:absolute;top:50%;right:1rem;margin-top:-.5rem;content:"+"}.is-active>.accordion-title:before{content:"\2013"}.accordion-content{display:none;padding:1rem;border:1px solid #9e9e9e;border-bottom:0;background-color:#f0f0f0;color:#9e9e9e}:last-child>.accordion-content:last-child{border-bottom:1px solid #9e9e9e}.is-accordion-submenu-parent>a{position:relative}.is-accordion-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#0087ff transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.is-accordion-submenu-parent[aria-expanded=true]>a:after{-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#0087ff;color:#f0f0f0}.badge.primary{background:#0087ff;color:#0a0a0a}.badge.secondary{background:#5f5faf;color:#f0f0f0}.badge.success{background:#5f8700;color:#0a0a0a}.badge.warning{background:#d75f00;color:#0a0a0a}.badge.alert{background:#d70000;color:#f0f0f0}.breadcrumbs{margin:0 0 1rem;list-style:none}.breadcrumbs:after,.breadcrumbs:before{display:table;content:" "}.breadcrumbs:after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child):after{position:relative;top:1px;margin:0 .75rem;opacity:1;content:"/";color:#6b6b6b}.breadcrumbs a{color:#0087ff}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#6b6b6b;cursor:not-allowed}.button-group{margin-bottom:1rem;font-size:0}.button-group:after,.button-group:before{display:table;content:" "}.button-group:after{clear:both}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:.9rem}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded{margin-right:-1px}.button-group.expanded:after,.button-group.expanded:before{display:none}.button-group.expanded .button:first-child:last-child{width:100%}.button-group.expanded .button:first-child:nth-last-child(2),.button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2)~.button{display:inline-block;width:calc(50% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(2):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(3),.button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3)~.button{display:inline-block;width:calc(33.33333% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(3):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(4),.button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4)~.button{display:inline-block;width:calc(25% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(4):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(5),.button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5)~.button{display:inline-block;width:calc(20% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(5):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(6),.button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6)~.button{display:inline-block;width:calc(16.66667% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(6):last-child{margin-right:-6px}.button-group.primary .button{background-color:#0087ff;color:#0a0a0a}.button-group.primary .button:focus,.button-group.primary .button:hover{background-color:#006ccc;color:#0a0a0a}.button-group.secondary .button{background-color:#5f5faf;color:#f0f0f0}.button-group.secondary .button:focus,.button-group.secondary .button:hover{background-color:#484890;color:#f0f0f0}.button-group.success .button{background-color:#5f8700;color:#0a0a0a}.button-group.success .button:focus,.button-group.success .button:hover{background-color:#4c6c00;color:#0a0a0a}.button-group.warning .button{background-color:#d75f00;color:#0a0a0a}.button-group.warning .button:focus,.button-group.warning .button:hover{background-color:#ac4c00;color:#0a0a0a}.button-group.alert .button{background-color:#d70000;color:#f0f0f0}.button-group.alert .button:focus,.button-group.alert .button:hover{background-color:#ac0000;color:#f0f0f0}.button-group.stacked-for-medium .button,.button-group.stacked-for-small .button,.button-group.stacked .button{width:100%}.button-group.stacked-for-medium .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked .button:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.button-group.stacked-for-small .button{width:auto;margin-bottom:0}}@media print,screen and (min-width:64em){.button-group.stacked-for-medium .button{width:auto;margin-bottom:0}}@media screen and (max-width:39.9375em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}.callout{position:relative;margin:0 0 1rem;padding:1rem;border:1px solid hsla(0,0%,4%,.25);border-radius:0;background-color:rgba(44,62,80,.5);color:#9e9e9e}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#0087ff;color:#262626}.callout.secondary{background-color:#5f5faf;color:#262626}.callout.success{background-color:#5f8700;color:#262626}.callout.warning{background-color:#d75f00;color:#262626}.callout.alert{background-color:#d70000;color:#262626}.callout.small{padding:.5rem}.callout.large{padding:3rem}.card{margin-bottom:1rem;border:1px solid #9e9e9e;border-radius:0;background:#f0f0f0;box-shadow:none;overflow:hidden;color:#9e9e9e}.card>:last-child{margin-bottom:0}.card-divider{padding:1rem;background:#9e9e9e}.card-divider>:last-child{margin-bottom:0}.card-section{padding:1rem}.card-section>:last-child{margin-bottom:0}.close-button{position:absolute;color:#262626;cursor:pointer}[data-whatinput=mouse] .close-button{outline:0}.close-button:focus,.close-button:hover{color:#0a0a0a}.close-button.small{right:.66rem;top:.33em;font-size:1.5em;line-height:1}.close-button,.close-button.medium{right:1rem;top:.5rem;font-size:2em;line-height:1}.menu{margin:0;list-style-type:none}.menu>li{display:table-cell;vertical-align:middle}[data-whatinput=mouse] .menu>li{outline:0}.menu>li>a{display:block;padding:.7rem 1rem;line-height:1}.menu a,.menu button,.menu input,.menu select{margin-bottom:0}.menu>li>a i,.menu>li>a i+span,.menu>li>a img,.menu>li>a img+span,.menu>li>a svg,.menu>li>a svg+span{vertical-align:middle}.menu>li>a i,.menu>li>a img,.menu>li>a svg{margin-right:.25rem;display:inline-block}.menu.horizontal>li,.menu>li{display:table-cell}.menu.expanded{display:table;width:100%;table-layout:fixed}.menu.expanded>li:first-child:last-child{width:100%}.menu.vertical>li{display:block}@media print,screen and (min-width:40em){.menu.medium-horizontal>li{display:table-cell}.menu.medium-expanded{display:table;width:100%;table-layout:fixed}.menu.medium-expanded>li:first-child:last-child{width:100%}.menu.medium-vertical>li{display:block}}@media print,screen and (min-width:64em){.menu.large-horizontal>li{display:table-cell}.menu.large-expanded{display:table;width:100%;table-layout:fixed}.menu.large-expanded>li:first-child:last-child{width:100%}.menu.large-vertical>li{display:block}}.menu.simple li{display:inline-block;vertical-align:top;line-height:1}.menu.simple a{padding:0}.menu.simple li{margin-left:0;margin-right:1rem}.menu.simple.align-right li{margin-right:0;margin-left:1rem}.menu.align-right:after,.menu.align-right:before{display:table;content:" "}.menu.align-right:after{clear:both}.menu.align-right>li{float:right}.menu.icon-top>li>a{text-align:center}.menu.icon-top>li>a i,.menu.icon-top>li>a img,.menu.icon-top>li>a svg{display:block;margin:0 auto .25rem}.menu.icon-top.vertical a>span{margin:auto}.menu.nested{margin-left:1rem}.menu .active>a{background:#0087ff;color:#f0f0f0}.menu.menu-bordered li{border:1px solid #9e9e9e}.menu.menu-bordered li:not(:first-child){border-top:0}.menu.menu-hover li:hover{background-color:#9e9e9e}.menu-text{padding-top:0;padding-bottom:0;padding:.7rem 1rem;font-weight:700;line-height:1;color:inherit}.menu-centered{text-align:center}.menu-centered>.menu{display:inline-block;vertical-align:top}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon:after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#f0f0f0;box-shadow:0 7px 0 #f0f0f0,0 14px 0 #f0f0f0;content:""}.menu-icon:hover:after{background:#6b6b6b;box-shadow:0 7px 0 #6b6b6b,0 14px 0 #6b6b6b}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark:after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:""}.menu-icon.dark:hover:after{background:#262626;box-shadow:0 7px 0 #262626,0 14px 0 #262626}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{transition:height .5s}.is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#f0f0f0;transition:-webkit-transform .15s linear;transition:transform .15s linear;transition:transform .15s linear,-webkit-transform .15s linear}.is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);transform:translateX(100%)}.drilldown-submenu-cover-previous{min-height:100%}.is-drilldown-submenu-parent>a{position:relative}.is-drilldown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0087ff;position:absolute;top:50%;margin-top:-6px;right:1rem}.js-drilldown-back>a:before{display:block;width:0;height:0;border:6px inset;content:"";border-right-style:solid;border-color:transparent #0087ff transparent transparent;display:inline-block;vertical-align:middle;margin-right:.75rem;border-left-width:0}.dropdown-pane{position:absolute;z-index:10;display:block;width:300px;padding:1rem;visibility:hidden;border:1px solid #6b6b6b;border-radius:0;background-color:#262626;font-size:1rem}.dropdown-pane.is-open{visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#0087ff transparent transparent;right:5px;margin-top:-3px}[data-whatinput=mouse] .dropdown.menu a{outline:0}.no-js .dropdown.menu ul{display:none}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a:after{right:14px}.dropdown.menu.vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #0087ff transparent transparent}.dropdown.menu.vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0087ff}@media print,screen and (min-width:40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#0087ff transparent transparent;right:5px;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a:after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #0087ff transparent transparent}.dropdown.menu.medium-vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0087ff}}@media print,screen and (min-width:64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#0087ff transparent transparent;right:5px;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a:after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #0087ff transparent transparent}.dropdown.menu.large-vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0087ff}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a:after{position:absolute;top:50%;right:5px;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #6b6b6b;background:#f0f0f0}.is-dropdown-submenu .is-dropdown-submenu-parent>a:after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #0087ff transparent transparent}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0087ff}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.flex-video,.responsive-embed{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.flex-video embed,.flex-video iframe,.flex-video object,.flex-video video,.responsive-embed embed,.responsive-embed iframe,.responsive-embed object,.responsive-embed video{position:absolute;top:0;left:0;width:100%;height:100%}.flex-video.widescreen,.responsive-embed.widescreen{padding-bottom:56.25%}.label{display:inline-block;padding:.33333rem .5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#0087ff;color:#f0f0f0}.label.primary{background:#0087ff;color:#0a0a0a}.label.secondary{background:#5f5faf;color:#f0f0f0}.label.success{background:#5f8700;color:#0a0a0a}.label.warning{background:#d75f00;color:#0a0a0a}.label.alert{background:#d70000;color:#f0f0f0}.media-object{display:block;margin-bottom:1rem}.media-object img{max-width:none}@media screen and (max-width:39.9375em){.media-object.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;display:block}.media-object.stack-for-small .media-object-section img{width:100%}}.media-object-section{display:table-cell;vertical-align:top}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}.media-object-section.middle{vertical-align:middle}.media-object-section.bottom{vertical-align:bottom}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;width:100%;height:100%;transition:opacity .5s ease,visibility .5s ease;background:hsla(0,0%,94%,.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:1;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#9e9e9e}[data-whatinput=mouse] .off-canvas{outline:0}.off-canvas.is-transition-overlap{z-index:10}.off-canvas.is-transition-overlap.is-open{box-shadow:0 0 10px hsla(0,0%,4%,.7)}.off-canvas.is-open{-webkit-transform:translate(0);transform:translate(0)}.off-canvas-absolute{position:absolute;z-index:1;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#9e9e9e}[data-whatinput=mouse] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-overlap{z-index:10}.off-canvas-absolute.is-transition-overlap.is-open{box-shadow:0 0 10px hsla(0,0%,4%,.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0);transform:translate(0)}.position-left{top:0;left:0;width:250px;height:100%;-webkit-transform:translateX(-250px);transform:translateX(-250px);overflow-y:auto}.position-left.is-open~.off-canvas-content{-webkit-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push:after{position:absolute;top:0;right:0;height:100%;width:1px;box-shadow:0 0 10px hsla(0,0%,4%,.7);content:" "}.position-left.is-transition-overlap.is-open~.off-canvas-content{-webkit-transform:none;transform:none}.position-right{top:0;right:0;width:250px;height:100%;-webkit-transform:translateX(250px);transform:translateX(250px);overflow-y:auto}.position-right.is-open~.off-canvas-content{-webkit-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push:after{position:absolute;top:0;left:0;height:100%;width:1px;box-shadow:0 0 10px hsla(0,0%,4%,.7);content:" "}.position-right.is-transition-overlap.is-open~.off-canvas-content{-webkit-transform:none;transform:none}.position-top{top:0;left:0;width:100%;height:250px;-webkit-transform:translateY(-250px);transform:translateY(-250px);overflow-x:auto}.position-top.is-open~.off-canvas-content{-webkit-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push:after{position:absolute;bottom:0;left:0;height:1px;width:100%;box-shadow:0 0 10px hsla(0,0%,4%,.7);content:" "}.position-top.is-transition-overlap.is-open~.off-canvas-content{-webkit-transform:none;transform:none}.position-bottom{bottom:0;left:0;width:100%;height:250px;-webkit-transform:translateY(250px);transform:translateY(250px);overflow-x:auto}.position-bottom.is-open~.off-canvas-content{-webkit-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push:after{position:absolute;top:0;left:0;height:1px;width:100%;box-shadow:0 0 10px hsla(0,0%,4%,.7);content:" "}.position-bottom.is-transition-overlap.is-open~.off-canvas-content{-webkit-transform:none;transform:none}.off-canvas-content{transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden}@media print,screen and (min-width:40em){.position-left.reveal-for-medium{-webkit-transform:none;transform:none;z-index:1}.position-left.reveal-for-medium~.off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;transform:none;z-index:1}.position-right.reveal-for-medium~.off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;transform:none;z-index:1}.position-top.reveal-for-medium~.off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;transform:none;z-index:1}.position-bottom.reveal-for-medium~.off-canvas-content{margin-bottom:250px}}@media print,screen and (min-width:64em){.position-left.reveal-for-large{-webkit-transform:none;transform:none;z-index:1}.position-left.reveal-for-large~.off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;transform:none;z-index:1}.position-right.reveal-for-large~.off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;transform:none;z-index:1}.position-top.reveal-for-large~.off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;transform:none;z-index:1}.position-bottom.reveal-for-large~.off-canvas-content{margin-bottom:250px}}.orbit,.orbit-container{position:relative}.orbit-container{height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{bottom:0;width:100%;margin-bottom:0;background-color:hsla(0,0%,4%,.5)}.orbit-caption,.orbit-next,.orbit-previous{position:absolute;padding:1rem;color:#f0f0f0}.orbit-next,.orbit-previous{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:10}[data-whatinput=mouse] .orbit-next,[data-whatinput=mouse] .orbit-previous{outline:0}.orbit-next:active,.orbit-next:focus,.orbit-next:hover,.orbit-previous:active,.orbit-previous:focus,.orbit-previous:hover{background-color:hsla(0,0%,4%,.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput=mouse] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#6b6b6b}.orbit-bullets button.is-active,.orbit-bullets button:hover{background-color:#262626}.pagination{margin-left:0;margin-bottom:1rem}.pagination:after,.pagination:before{display:table;content:" "}.pagination:after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:first-child,.pagination li:last-child{display:inline-block}@media print,screen and (min-width:40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#9e9e9e}.pagination .current{padding:.1875rem .625rem;background:#0087ff;color:#f0f0f0;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#6b6b6b;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis:after{padding:.1875rem .625rem;content:"\2026";color:#0a0a0a}.pagination-previous.disabled:before,.pagination-previous a:before{display:inline-block;margin-right:.5rem;content:"\00ab"}.pagination-next.disabled:after,.pagination-next a:after{display:inline-block;margin-left:.5rem;content:"\00bb"}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#6b6b6b}.progress.primary .progress-meter{background-color:#0087ff}.progress.secondary .progress-meter{background-color:#5f5faf}.progress.success .progress-meter{background-color:#5f8700}.progress.warning .progress-meter{background-color:#d75f00}.progress.alert .progress-meter{background-color:#d70000}.progress-meter{position:relative;display:block;width:0;height:100%;background-color:#0087ff}.progress-meter-text{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;margin:0;font-size:.75rem;font-weight:700;color:#f0f0f0;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#9e9e9e;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#6b6b6b;transition:all .2s ease-in-out}.slider-fill.is-dragging{transition:all 0s linear}.slider-handle{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);position:absolute;left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#0087ff;transition:all .2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput=mouse] .slider-handle{outline:0}.slider-handle:hover{background-color:#0073d9}.slider-handle.is-dragging{transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scaleY(-1);transform:scaleY(-1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.sticky,.sticky-container{position:relative}.sticky{z-index:0;-webkit-transform:translateZ(0);transform:translateZ(0)}.sticky.is-stuck{position:fixed;z-index:5}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}body.is-reveal-open{overflow:hidden}html.is-reveal-open,html.is-reveal-open body{min-height:100%;overflow:hidden;position:fixed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:hsla(0,0%,4%,.45);overflow-y:scroll}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #6b6b6b;border-radius:0;background-color:#f0f0f0;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput=mouse] .reveal{outline:0}@media print,screen and (min-width:40em){.reveal{min-height:0}}.reveal .column,.reveal .columns{min-width:0}.reveal>:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.reveal{width:600px;max-width:75rem}}@media print,screen and (min-width:40em){.reveal .reveal{right:auto;left:auto;margin:0 auto}}.reveal.collapse{padding:0}@media print,screen and (min-width:40em){.reveal.tiny{width:30%;max-width:75rem}}@media print,screen and (min-width:40em){.reveal.small{width:50%;max-width:75rem}}@media print,screen and (min-width:40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;left:0;width:100%;max-width:none;height:100%;height:100vh;min-height:100vh;margin-left:0;border:0;border-radius:0}@media screen and (max-width:39.9375em){.reveal{top:0;left:0;width:100%;max-width:none;height:100%;height:100vh;min-height:100vh;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:700;color:#f0f0f0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#6b6b6b;transition:all .25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle:after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translateZ(0);transform:translateZ(0);border-radius:0;background:#f0f0f0;transition:all .25s ease-out;content:""}input:checked~.switch-paddle{background:#0087ff}input:checked~.switch-paddle:after{left:2.25rem}[data-whatinput=mouse] input:focus~.switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle:after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked~.switch-paddle:after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle:after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked~.switch-paddle:after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle:after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked~.switch-paddle:after{left:2.75rem}table{width:100%;margin-bottom:1rem;border-radius:0}table tbody,table tfoot,table thead{border:1px solid #e4e4e4;background-color:#f0f0f0}table caption{padding:.5rem .625rem .625rem;font-weight:700}table thead{background:#eaeaea;color:#9e9e9e}table tfoot{background:#e4e4e4;color:#9e9e9e}table tfoot tr,table thead tr{background:transparent}table tfoot td,table tfoot th,table thead td,table thead th{padding:.5rem .625rem .625rem;font-weight:700;text-align:left}table tbody td,table tbody th{padding:.5rem .625rem .625rem}table tbody tr:nth-child(2n){border-bottom:0;background-color:#e4e4e4}table.unstriped tbody{background-color:#f0f0f0}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #e4e4e4;background-color:#f0f0f0}@media screen and (max-width:63.9375em){table.stack tfoot,table.stack thead{display:none}table.stack td,table.stack th,table.stack tr{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#e5e5e5}table.hover tfoot tr:hover{background-color:#dfdfdf}table.hover tbody tr:hover{background-color:#ebebeb}table.hover:not(.unstriped) tr:nth-of-type(2n):hover{background-color:#dedede}.table-scroll{overflow-x:auto}.table-scroll table{width:auto}.tabs{margin:0;border:1px solid #9e9e9e;background:#f0f0f0;list-style-type:none}.tabs:after,.tabs:before{display:table;content:" "}.tabs:after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary{background:#0087ff}.tabs.primary>li>a{color:#0a0a0a}.tabs.primary>li>a:focus,.tabs.primary>li>a:hover{background:#0080f2}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#0087ff}.tabs-title>a:hover{background:#f0f0f0;color:#0074db}.tabs-title>a:focus,.tabs-title>a[aria-selected=true]{background:#9e9e9e;color:#0087ff}.tabs-content{border:1px solid #9e9e9e;border-top:0;background:#f0f0f0;color:#9e9e9e;transition:all .5s ease}.tabs-content.vertical{border:1px solid #9e9e9e;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel[aria-hidden=false]{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #f0f0f0;border-radius:0;box-shadow:0 0 0 1px hsla(0,0%,4%,.2);line-height:0}a.thumbnail{transition:box-shadow .2s ease-out}a.thumbnail:focus,a.thumbnail:hover{box-shadow:0 0 6px 1px rgba(0,135,255,.5)}a.thumbnail image{box-shadow:none}.title-bar{padding:.5rem;background:#0a0a0a;color:#f0f0f0}.title-bar:after,.title-bar:before{display:table;content:" "}.title-bar:after{clear:both}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left{float:left}.title-bar-right{float:right;text-align:right}.title-bar-title{vertical-align:middle}.has-tip,.title-bar-title{display:inline-block;font-weight:700}.has-tip{position:relative;border-bottom:1px dotted #262626;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#f0f0f0}.tooltip:before{border:.75rem inset;border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;position:absolute;bottom:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top:before,.tooltip:before{display:block;width:0;height:0;content:""}.tooltip.top:before{border:.75rem inset;border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.left:before{border:.75rem inset;border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left:before,.tooltip.right:before{display:block;width:0;height:0;content:"";top:50%;bottom:auto;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right:before{border:.75rem inset;border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.top-bar{padding:.5rem}.top-bar:after,.top-bar:before{display:table;content:" "}.top-bar:after{clear:both}.top-bar,.top-bar ul{background-color:#0a0a0a}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{width:100%}@media print,screen and (min-width:40em){.top-bar .top-bar-left,.top-bar .top-bar-right{width:auto}}@media screen and (max-width:63.9375em){.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{width:100%}}@media screen and (max-width:74.9375em){.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{width:100%}}.top-bar-title{display:inline-block;float:left;padding:.5rem 1rem .5rem 0}.top-bar-title .menu-icon{bottom:2px}.top-bar-left{float:left}.top-bar-right{float:right}.hide{display:none!important}.invisible{visibility:hidden}@media screen and (max-width:39.9375em){.hide-for-small-only{display:none!important}}@media screen and (max-width:0em),screen and (min-width:40em){.show-for-small-only{display:none!important}}@media print,screen and (min-width:40em){.hide-for-medium{display:none!important}}@media screen and (max-width:39.9375em){.show-for-medium{display:none!important}}@media screen and (min-width:40em) and (max-width:63.9375em){.hide-for-medium-only{display:none!important}}@media screen and (max-width:39.9375em),screen and (min-width:64em){.show-for-medium-only{display:none!important}}@media print,screen and (min-width:64em){.hide-for-large{display:none!important}}@media screen and (max-width:63.9375em){.show-for-large{display:none!important}}@media screen and (min-width:64em) and (max-width:74.9375em){.hide-for-large-only{display:none!important}}@media screen and (max-width:63.9375em),screen and (min-width:75em){.show-for-large-only{display:none!important}}.show-for-sr,.show-on-focus{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.show-on-focus:active,.show-on-focus:focus{position:static!important;width:auto;height:auto;overflow:visible;clip:auto}.hide-for-portrait,.show-for-landscape{display:block!important}@media screen and (orientation:landscape){.hide-for-portrait,.show-for-landscape{display:block!important}}@media screen and (orientation:portrait){.hide-for-portrait,.show-for-landscape{display:none!important}}.hide-for-landscape,.show-for-portrait{display:none!important}@media screen and (orientation:landscape){.hide-for-landscape,.show-for-portrait{display:none!important}}@media screen and (orientation:portrait){.hide-for-landscape,.show-for-portrait{display:block!important}}.float-left{float:left!important}.float-right{float:right!important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}.blog-header a,.menu a,.nav a,.top-bar a{color:#f0f0f0!important}.blog-header a:hover,.menu a:hover,.nav a:hover,.top-bar a:hover{color:#0087ff!important}.blog-header a.button:hover,.menu a.button:hover,.nav a.button:hover,.top-bar a.button:hover{color:#f0f0f0!important}.top-bar-right{letter-spacing:.1rem}a.permalink,a.permalink:hover,a.permalink:visited{color:#9e9e9e!important}.flex-container{display:-ms-flexbox;display:flex}.flex-container .flex-item{padding-right:1rem}.site-logo{height:32px}.index-header{text-align:center}#features [class*=fa-],#features [class^=fa-]{display:inline-block;width:100%;text-align:center}.blog-post .post-meta{font-size:80%;margin-bottom:2rem}.blog-post .post-meta *{display:inline-block}.download-icons{margin-top:1rem;margin-bottom:1rem}.all-downloads{margin-top:.5rem;text-align:center}.sidebar ul{list-style-type:none;margin:0}.sidebar img{text-align:center}.category-pages h5{text-transform:capitalize}.category-pages ul{list-style-type:none;margin:0}.legacy-comments{border-top:2px solid #0087ff;padding-top:1em}.legacy-comments .comment-published .title,.legacy-comments .comment .title{font-size:1.2rem}.legacy-comments .comment-published .submitted,.legacy-comments .comment .submitted{font-size:.8rem;padding-bottom:.25rem}.legacy-comments .comment-published .links,.legacy-comments .comment-published .links *,.legacy-comments .comment .links,.legacy-comments .comment .links *{display:none}.blog-footer{text-align:center;margin-top:2rem;padding-top:2rem;background-color:#0087ff;background-color:#0068c6;color:#f0f0f0}.blog-footer a{color:#f0f0f0;text-decoration:underline}.blog-footer ul{list-style-type:none;margin-left:0;padding-left:0}.blog-header{background-color:rgba(44,62,80,.5);margin-bottom:3rem;box-shadow:0 -3px 9px 3px rgba(0,0,0,.5)}.blog-header .flex-container{-ms-flex-direction:column;flex-direction:column;text-align:center}#digikam-logo img{margin-top:2rem;height:175px}#digikam-title h1{margin-bottom:0;font-size:3rem}#digikam-download .button.large{box-shadow:0 4px 5px -2.5px rgba(0,0,0,.5)}@media (min-width:40em){.blog-header .flex-container{-ms-flex-direction:row;flex-direction:row;text-align:initial}#digikam-logo img{position:absolute;top:0}#digikam-title{margin-left:175px;-ms-flex-positive:1;flex-grow:1}#digikam-download{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}}pre{color:#9e9e9e;background-color:#0a0a0a;border-radius:3px;border:1px solid #666;font-family:consolas,Liberation Mono,Courier,monospace;font-size:.8em;padding:.5em;margin-bottom:1rem}pre,pre code{white-space:pre}pre code{border:none;padding:0;background-color:initial;color:inherit}h3+h4,h4+h5,h5+h6{margin-top:-.75rem}h3,h4,h5,h6{margin-top:2rem}#features .row,main section{margin-bottom:3rem}hr{border-top:1px solid #5f5faf}
\ No newline at end of file
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.eot b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.eot
new file mode 100644
index 000000000..c97a75dfb
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.eot differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.svg b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.svg
new file mode 100644
index 000000000..eb522e321
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.svg
@@ -0,0 +1,328 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs >
+<font id="FiraSans" horiz-adv-x="574" ><font-face
+ font-family="Fira Sans"
+ units-per-em="1000"
+ panose-1="2 11 8 3 5 0 0 2 0 4"
+ ascent="935"
+ descent="-265"
+ alphabetic="0" />
+<glyph unicode=" " glyph-name="space" horiz-adv-x="237" />
+<glyph unicode="!" glyph-name="exclam" horiz-adv-x="240" d="M204 693L184 255H56L36 693H204ZM158 164T184 138T211 74Q211 36 185 10T120 -17Q83 -17 57 9T30 74Q30 111 56 137T120 164Q158 164 184 138Z" />
+<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="439" d="M67 414L48 693H191L171 414H67ZM268 414L249 693H392L372 414H268Z" />
+<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="557" d="M542 440H472L447 248H505V143H433L414 0H283L302 143H202L183 0H52L71 143H15V248H85L110 440H52V545H124L141 676H272L255 545H355L372 676H503L486 545H542V440ZM316 248L341 440H241L216 248H316Z" />
+<glyph unicode="$" glyph-name="dollar" horiz-adv-x="549" d="M525 122T476 69T340 -3V-161H226V-9Q94 2 9 85L90 173Q162 106 256 106Q305 106 333 128T361 188Q361 213 351 229T315 259T240 288Q130 323 84 371T37 494Q37 569 89 619T226 682V830H340V682Q439
+666 506 601L433 515Q367 571 288 571Q246 571 222 554T198 506Q198 484 208 470T246 444T327 414Q428 382 476 334T525 200Q525 122 476 69Z" />
+<glyph unicode="%" glyph-name="percent" horiz-adv-x="859" d="M614 720L711 658L248 -40L151 22L614 720ZM257 690T297 668T361 605T385 510Q385 456 362 415T298 352T207 330Q157 330 117 352T53 415T29 510Q29 564 52 604T116 667T207 690Q257 690 297 668ZM142
+595T142 510Q142 473 156 449T207 425Q271 425 271 510Q271 595 207 595Q142 595 142 510ZM702 342T742 320T806 258T830 163Q830 109 807 68T743 5T652 -17Q602 -17 561 5T497 68T473 163Q473 217 496 257T561 320T652 342Q702 342 742 320ZM587 247T587 163Q587
+126 601 102T652 77Q716 77 716 163Q716 247 652 247Q587 247 587 163Z" />
+<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="760" d="M379 710T427 689T501 632T527 550Q527 491 494 448T395 361L530 234Q559 294 578 378L710 339Q672 229 618 153L739 46L604 -17L526 58Q433 -17 307 -17Q234 -17 178 7T91 75T60 177Q60 237
+92 282T195 373Q141 425 120 461T99 544Q99 589 123 626T195 687T313 710Q379 710 427 689ZM285 608T268 591T251 544Q251 518 263 497T308 444Q343 467 359 491T376 546Q376 575 360 591T315 608Q285 608 268 591ZM254 265T240 241T225 186Q225 145 255 120T334
+95Q397 95 447 133L285 288Q254 265 240 241Z" />
+<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="238" d="M67 414L48 693H191L171 414H67Z" />
+<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="325" d="M313 791Q242 689 210 588T178 350Q178 214 210 113T313 -91L212 -159Q147 -69 108 -4T44 150T18 350Q18 462 43 550T108 703T212 859L313 791Z" />
+<glyph unicode=")" glyph-name="parenright" horiz-adv-x="325" d="M178 768T216 703T280 550T306 350Q306 238 281 150T217 -3T113 -159L12 -91Q83 12 115 113T147 350Q147 485 115 586T12 791L113 859Q178 768 216 703Z" />
+<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="449" d="M441 535L300 512L401 410L291 330L225 457L159 329L49 409L149 511L8 535L49 661L177 599L157 742H293L272 598L399 662L441 535Z" />
+<glyph unicode="+" glyph-name="plus" horiz-adv-x="531" d="M331 549V393H482V271H331V115H200V271H48V393H200V549H331Z" />
+<glyph unicode="," glyph-name="comma" horiz-adv-x="240" d="M158 164T184 138T210 74Q210 52 203 30T178 -32L115 -177H26L69 -1Q50 12 40 31T29 74Q29 112 55 138T120 164Q158 164 184 138Z" />
+<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="407" d="M44 252V374H363V252H44Z" />
+<glyph unicode="." glyph-name="period" horiz-adv-x="240" d="M157 164T183 138T210 74Q210 36 184 10T120 -17Q82 -17 56 9T29 74Q29 111 55 137T120 164Q157 164 183 138Z" />
+<glyph unicode="/" glyph-name="slash" horiz-adv-x="520" d="M309 816L447 785L212 -112L73 -80L309 816Z" />
+<glyph unicode="0" glyph-name="zero" horiz-adv-x="585" d="M417 690T482 599T548 337Q548 167 483 75T293 -17Q169 -17 104 75T38 337Q38 508 103 599T293 690Q417 690 482 599ZM259 573T239 551T210 478T200 337Q200 247 209 196T239 122T293 100Q327 100 347
+121T376 194T386 337Q386 428 377 479T347 552T293 573Q259 573 239 551Z" />
+<glyph unicode="1" glyph-name="one" horiz-adv-x="464" d="M382 676V0H227V522L82 433L13 538L241 676H382Z" />
+<glyph unicode="2" glyph-name="two" horiz-adv-x="517" d="M311 690T363 664T443 594T471 497Q471 443 449 394T371 282T208 121H485L469 0H29V112Q152 233 208 294T286 397T309 481Q309 522 286 545T222 569Q186 569 158 553T99 499L6 573Q48 628 106 659T238
+690Q311 690 363 664Z" />
+<glyph unicode="3" glyph-name="three" horiz-adv-x="520" d="M310 690T360 667T437 605T464 518Q464 457 430 416T332 357Q400 350 443 309T486 191Q486 134 456 87T368 11T228 -17Q80 -17 -4 85L81 168Q115 134 147 119T219 103Q266 103 295 129T324 201Q324
+253 297 275T214 298H158L175 407H214Q259 407 285 430T311 495Q311 532 287 552T221 573Q150 573 89 514L11 599Q107 690 239 690Q310 690 360 667Z" />
+<glyph unicode="4" glyph-name="four" horiz-adv-x="565" d="M544 264V146H468V0H314L313 146H28V251L220 693L354 643L191 264H315L332 424H468V264H544Z" />
+<glyph unicode="5" glyph-name="five" horiz-adv-x="536" d="M454 563H209V421Q256 443 309 443Q365 443 409 417T478 341T503 223Q503 152 471 98T378 13T238 -17Q101 -17 13 85L101 167Q156 102 232 102Q284 102 312 133T341 222Q341 335 246 335Q226 335 207
+330T165 311H58V676H472L454 563Z" />
+<glyph unicode="6" glyph-name="six" horiz-adv-x="564" d="M401 455T445 429T514 352T539 231Q539 162 509 106T424 16T294 -17Q164 -17 101 70T38 309Q38 423 73 509T175 642T332 690Q419 690 486 645L428 551Q383 577 336 577Q279 577 244 529T202 393Q263
+455 345 455Q401 455 445 429ZM338 96T359 131T381 229Q381 292 361 319T301 346Q247 346 202 293Q204 186 225 141T296 96Q338 96 359 131Z" />
+<glyph unicode="7" glyph-name="seven" horiz-adv-x="468" d="M450 676V569L202 -16L59 32L286 557H13V676H450Z" />
+<glyph unicode="8" glyph-name="eight" horiz-adv-x="581" d="M485 330T518 286T551 183Q551 128 520 83T428 10T287 -17Q208 -17 150 9T60 80T29 180Q29 293 155 348Q56 406 56 508Q56 562 86 603T169 667T291 690Q394 690 459 644T525 516Q525 471 499 432T417
+363Q485 330 518 286ZM254 583T232 563T209 506Q209 472 228 451T291 411L312 403Q346 425 359 449T372 508Q372 542 352 562T292 583Q254 583 232 563ZM340 96T366 120T393 184Q393 225 370 248T289 293L256 305Q188 267 188 188Q188 146 216 121T292 96Q340 96
+366 120Z" />
+<glyph unicode="9" glyph-name="nine" horiz-adv-x="560" d="M399 690T464 619T529 428Q529 291 485 201T348 57T108 -28L76 82Q207 114 273 162T359 299Q306 234 219 234Q166 234 122 261T52 339T26 457Q26 526 59 579T149 661T277 690Q399 690 464 619ZM297
+345T322 360T368 405Q369 499 348 538T277 577Q234 577 210 548T185 462Q185 400 207 373T268 345Q297 345 322 360Z" />
+<glyph unicode=":" glyph-name="colon" horiz-adv-x="240" d="M157 164T183 138T210 74Q210 36 184 10T120 -17Q82 -17 56 9T29 74Q29 111 55 137T120 164Q157 164 183 138ZM157 510T183 484T210 420Q210 382 184 356T120 329Q82 329 56 355T29 420Q29 457 55
+483T120 510Q157 510 183 484Z" />
+<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="240" d="M158 164T184 138T210 74Q210 52 203 30T178 -32L115 -177H26L69 -1Q50 12 40 31T29 74Q29 112 55 138T120 164Q158 164 184 138ZM157 510T183 484T210 420Q210 382 184 356T120 329Q82 329 56
+355T29 420Q29 457 55 483T120 510Q157 510 183 484Z" />
+<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="519" d="M434 576L484 465L168 333L484 205L434 90L34 263V402L434 576Z" />
+<glyph unicode="=" glyph-name="equal" horiz-adv-x="519" d="M48 375V497H470V375H48ZM48 422V544H470V422H48Z" />
+<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="519" d="M84 576L484 402V263L84 90L34 205L350 333L34 465L84 576Z" />
+<glyph unicode="?" glyph-name="question" horiz-adv-x="481" d="M318 710T367 688T442 627T467 543Q467 502 453 473T418 426T365 384Q325 357 306 336T287 280V255H143V286Q143 333 157 365T192 416T244 457Q274 477 288 492T302 529Q302 556 284 571T232 586Q169
+586 115 525L14 603Q105 710 248 710Q318 710 367 688ZM254 164T280 138T307 74Q307 36 281 10T217 -17Q180 -17 154 9T127 74Q127 111 153 137T217 164Q254 164 280 138Z" />
+<glyph unicode="@" glyph-name="at" horiz-adv-x="1020" d="M569 503T614 492T700 458V211Q700 150 710 126T747 102Q786 102 808 150T830 314Q830 448 754 521T526 595Q421 595 346 551T231 427T191 242Q191 80 277 -12T527 -105Q577 -105 630 -96T724 -71L761
+-180Q712 -199 650 -210T526 -222Q382 -222 274 -165T107 -3T48 242Q48 376 109 483T280 650T527 710Q664 710 765 656T919 511T972 316Q972 226 945 155T869 44T754 4Q698 4 664 34T620 106Q601 61 565 35T477 8Q386 8 340 69T294 233Q294 357 355 430T527 503Q569
+503 614 492ZM522 107T539 121T566 156V394Q543 403 522 403Q481 403 459 364T437 232Q437 164 451 136T498 107Q522 107 539 121Z" />
+<glyph unicode="A" glyph-name="A" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268Z" />
+<glyph unicode="B" glyph-name="B" horiz-adv-x="617" d="M503 354T546 316T590 202Q590 91 511 46T288 0H65V693H261Q407 693 484 652T561 516Q561 455 525 418T434 367Q503 354 546 316ZM229 577V416H290Q394 416 394 500Q394 542 366 559T277 577H229ZM354
+119T387 138T421 211Q421 307 301 307H229V119H289Q354 119 387 138Z" />
+<glyph unicode="C" glyph-name="C" horiz-adv-x="575" d="M413 710T463 691T559 634L481 541Q450 565 420 577T356 589Q286 589 246 530T205 348Q205 227 245 169T358 110Q396 110 427 124T494 166L567 72Q528 33 473 8T350 -17Q254 -17 183 25T73 149T33 348Q33
+461 73 543T185 667T348 710Q413 710 463 691Z" />
+<glyph unicode="D" glyph-name="D" horiz-adv-x="651" d="M421 693T519 620T618 350Q618 157 522 79T273 0H65V693H258Q421 693 519 620ZM229 574V119H283Q364 119 406 169T448 350Q448 439 427 488T370 555T281 574H229Z" />
+<glyph unicode="E" glyph-name="E" horiz-adv-x="526" d="M490 693L473 576H229V410H442V295H229V118H490V0H65V693H490Z" />
+<glyph unicode="F" glyph-name="F" horiz-adv-x="487" d="M65 0V693H478L461 576H229V392H431V275H229V0H65Z" />
+<glyph unicode="G" glyph-name="G" horiz-adv-x="645" d="M499 710T596 625L513 538Q476 566 445 578T372 591Q295 591 249 531T203 347Q203 214 238 159T347 103Q399 103 441 126V283H351L335 399H600V56Q546 21 481 2T351 -17Q193 -17 113 75T33 347Q33 461
+76 543T195 667T365 710Q499 710 596 625Z" />
+<glyph unicode="H" glyph-name="H" horiz-adv-x="666" d="M437 0V297H229V0H65V693H229V425H437V693H601V0H437Z" />
+<glyph unicode="I" glyph-name="I" horiz-adv-x="293" d="M229 693V0H65V693H229Z" />
+<glyph unicode="J" glyph-name="J" horiz-adv-x="317" d="M256 105Q256 22 227 -32T149 -116T33 -169L-11 -53Q33 -36 55 -14T84 37T92 111V693H256V105Z" />
+<glyph unicode="K" glyph-name="K" horiz-adv-x="633" d="M229 693V0H65V693H229ZM627 693L406 382L645 0H455L234 370L454 693H627Z" />
+<glyph unicode="L" glyph-name="L" horiz-adv-x="513" d="M229 693V130H499L482 0H65V693H229Z" />
+<glyph unicode="M" glyph-name="M" horiz-adv-x="786" d="M753 0H592L580 271Q575 368 575 444Q575 502 578 554L471 73H316L202 554Q208 467 208 390Q208 332 205 269L193 0H33L85 693H292L396 223L493 693H701L753 0Z" />
+<glyph unicode="N" glyph-name="N" horiz-adv-x="663" d="M599 0H390L190 537Q200 458 205 398T211 254V0H65V693H269L474 155Q452 292 452 413V693H599V0Z" />
+<glyph unicode="O" glyph-name="O" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345 103Q417 103
+451 160T486 347Q486 476 451 533T345 590Q274 590 240 533Z" />
+<glyph unicode="P" glyph-name="P" horiz-adv-x="600" d="M426 693T502 636T578 467Q578 350 504 291T304 231H229V0H65V693H289Q426 693 502 636ZM348 349T378 376T409 467Q409 576 287 576H229V349H290Q348 349 378 376Z" />
+<glyph unicode="Q" glyph-name="Q" horiz-adv-x="690" d="M560 45T608 30T700 -18L601 -147Q544 -83 484 -49T335 -14Q242 -14 174 28T70 152T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615T658 347Q658 135 495 45Q560 45 608 30ZM205 219T240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533T205 347Q205 219 240 161Z" />
+<glyph unicode="R" glyph-name="R" horiz-adv-x="617" d="M293 265H229V0H65V693H292Q434 693 505 641T577 482Q577 415 545 371T444 295L620 0H435L293 265ZM229 378H298Q353 378 380 403T408 482Q408 532 379 555T288 578H229V378Z" />
+<glyph unicode="S" glyph-name="S" horiz-adv-x="572" d="M366 710T423 688T528 621L452 532Q381 590 300 590Q257 590 232 573T207 522Q207 499 218 485T257 457T341 426Q447 392 497 343T547 202Q547 137 514 88T419 11T272 -17Q187 -17 122 10T9 82L92 173Q132
+139 174 122T267 105Q318 105 347 127T377 190Q377 216 366 233T328 265T250 295Q135 330 87 381T38 510Q38 570 70 615T159 685T288 710Q366 710 423 688Z" />
+<glyph unicode="T" glyph-name="T" horiz-adv-x="540" d="M539 693L523 567H352V0H188V567H9V693H539Z" />
+<glyph unicode="U" glyph-name="U" horiz-adv-x="651" d="M596 230Q596 159 566 103T474 15T325 -17Q193 -17 124 50T55 230V693H219V237Q219 170 244 138T325 105Q381 105 406 137T432 237V693H596V230Z" />
+<glyph unicode="V" glyph-name="V" horiz-adv-x="570" d="M584 693L391 0H187L-13 693H160L292 128L416 693H584Z" />
+<glyph unicode="W" glyph-name="W" horiz-adv-x="847" d="M837 693L721 0H508L422 529L331 0H123L9 693H173L242 124L338 693H510L600 124L681 693H837Z" />
+<glyph unicode="X" glyph-name="X" horiz-adv-x="581" d="M385 374L585 0H406L287 264L170 0H-4L190 368L11 693H189L289 471L394 693H568L385 374Z" />
+<glyph unicode="Y" glyph-name="Y" horiz-adv-x="594" d="M601 693L379 260V0H215V259L-7 693H172L300 388L428 693H601Z" />
+<glyph unicode="Z" glyph-name="Z" horiz-adv-x="544" d="M512 693V569L211 131H517L501 0H18V123L325 566H49V693H512Z" />
+<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="324" d="M299 823V705H184V-6H299V-123H34V823H299Z" />
+<glyph unicode="\" glyph-name="backslash" horiz-adv-x="520" d="M211 816L447 -80L308 -112L73 785L211 816Z" />
+<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="324" d="M290 823V-123H25V-5H140V705H25V823H290Z" />
+<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="559" d="M351 844L540 527H386L278 726L175 527H18L207 844H351Z" />
+<glyph unicode="_" glyph-name="underscore" horiz-adv-x="520" d="M10 -171V-47H510V-171H10Z" />
+<glyph unicode="`" glyph-name="grave" horiz-adv-x="340" d="M92 835L310 703L266 622L30 717L92 835Z" />
+<glyph unicode="a" glyph-name="a" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114 528 166
+538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147Z" />
+<glyph unicode="b" glyph-name="b" horiz-adv-x="597" d="M458 548T509 474T560 265Q560 183 535 119T462 19T349 -17Q306 -17 271 1T210 51L202 0H62V742L220 759V477Q244 510 281 529T363 548Q458 548 509 474ZM396 98T396 265Q396 360 374 396T310 432Q257
+432 220 370V149Q235 125 256 112T303 98Q396 98 396 265Z" />
+<glyph unicode="c" glyph-name="c" horiz-adv-x="479" d="M347 548T391 532T474 483L406 389Q356 427 305 427Q252 427 225 388T198 262Q198 178 225 143T303 108Q330 108 352 116T405 144L474 46Q395 -17 295 -17Q214 -17 155 17T64 114T32 261Q32 345 64 410T155
+511T292 548Q347 548 391 532Z" />
+<glyph unicode="d" glyph-name="d" horiz-adv-x="600" d="M538 742V0H398L390 62Q334 -17 239 -17Q140 -17 89 59T37 267Q37 348 64 412T140 512T254 548Q330 548 380 498V759L538 742ZM343 99T380 159V388Q361 411 342 422T297 433Q253 433 227 392T201 266Q201
+173 223 136T288 99Q343 99 380 159Z" />
+<glyph unicode="e" glyph-name="e" horiz-adv-x="552" d="M525 243T522 219H193Q201 152 231 125T314 98Q346 98 376 109T441 145L506 57Q413 -17 299 -17Q170 -17 101 59T32 263Q32 344 61 408T146 510T280 548Q395 548 460 476T525 276Q525 243 522 219ZM370
+321Q368 443 284 443Q243 443 221 413T193 314H370V321Z" />
+<glyph unicode="f" glyph-name="f" horiz-adv-x="356" d="M271 642T256 626T241 572V531H366L349 421H241V0H83V421H3V531H83V578Q83 658 135 708T286 759Q365 759 431 725L388 622Q348 642 305 642Q271 642 256 626Z" />
+<glyph unicode="g" glyph-name="g" horiz-adv-x="551" d="M551 500Q499 479 398 479Q450 457 474 425T498 342Q498 291 471 251T394 187T275 164Q243 164 214 170Q206 166 202 158T197 140Q197 125 208 117T255 108H335Q396 108 442 88T513 33T538 -46Q538 -129
+467 -175T260 -222Q163 -222 107 -202T29 -144T6 -51H148Q148 -75 157 -89T192 -110T264 -117Q329 -117 354 -102T379 -57Q379 -33 360 -19T303 -5H226Q144 -5 104 24T63 100Q63 129 80 156T126 202Q76 229 54 265T31 354Q31 443 95 495T264 548Q344 546 399 564T514
+617L551 500ZM231 444T210 421T188 356Q188 313 209 290T268 266Q307 266 327 289T348 358Q348 444 268 444Q231 444 210 421Z" />
+<glyph unicode="h" glyph-name="h" horiz-adv-x="577" d="M442 548T481 506T520 388V0H362V361Q362 401 349 416T312 432Q264 432 220 364V0H62V742L220 758V474Q253 511 290 529T373 548Q442 548 481 506Z" />
+<glyph unicode="i" glyph-name="i" horiz-adv-x="282" d="M220 531V0H62V531H220ZM181 811T207 786T234 721Q234 682 208 657T140 631Q99 631 73 656T47 721Q47 760 73 785T140 811Q181 811 207 786Z" />
+<glyph unicode="j" glyph-name="j" horiz-adv-x="281" d="M219 60Q219 -23 193 -77T121 -163T6 -221L-47 -106Q-8 -88 14 -71T48 -26T61 50V531H219V60ZM181 811T207 786T234 721Q234 682 208 657T140 631Q99 631 73 656T47 721Q47 760 73 785T140 811Q181 811 207 786Z" />
+<glyph unicode="k" glyph-name="k" horiz-adv-x="552" d="M220 759V0H62V742L220 759ZM548 531L387 298L561 0H383L225 290L387 531H548Z" />
+<glyph unicode="l" glyph-name="l" horiz-adv-x="297" d="M134 -17T96 22T57 135V742L215 759V141Q215 108 242 108Q256 108 268 113L299 1Q256 -17 203 -17Q134 -17 96 22Z" />
+<glyph unicode="m" glyph-name="m" horiz-adv-x="845" d="M712 548T750 506T788 388V0H630V361Q630 432 585 432Q560 432 541 415T504 363V0H346V361Q346 432 301 432Q277 432 258 415T220 363V0H62V531H200L211 469Q242 509 279 528T365 548Q410 548 442 526T490
+464Q522 507 560 527T649 548Q712 548 750 506Z" />
+<glyph unicode="n" glyph-name="n" horiz-adv-x="577" d="M442 548T481 506T520 388V0H362V361Q362 401 350 416T312 432Q264 432 220 363V0H62V531H200L211 468Q245 508 284 528T373 548Q442 548 481 506Z" />
+<glyph unicode="o" glyph-name="o" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340 99 364 139T388
+265Q388 352 365 392T292 432Q244 432 220 392Z" />
+<glyph unicode="p" glyph-name="p" horiz-adv-x="597" d="M462 548T511 474T560 267Q560 185 535 121T461 20T349 -17Q269 -17 220 38V-205L62 -222V531H201L209 472Q240 511 280 529T362 548Q462 548 511 474ZM396 99T396 265Q396 359 375 395T312 432Q285 432
+262 416T220 370V146Q252 99 301 99Q396 99 396 265Z" />
+<glyph unicode="q" glyph-name="q" horiz-adv-x="600" d="M538 531V-222L380 -205V51Q327 -17 239 -17Q140 -17 89 59T37 267Q37 349 64 412T140 512T255 548Q336 548 392 485L400 531H538ZM343 99T380 159V388Q361 411 342 422T298 433Q253 433 227 393T201 266Q201
+173 223 136T288 99Q343 99 380 159Z" />
+<glyph unicode="r" glyph-name="r" horiz-adv-x="401" d="M379 546T403 539L378 386Q348 393 330 393Q283 393 259 361T220 263V0H62V531H200L213 428Q231 483 267 514T350 546Q379 546 403 539Z" />
+<glyph unicode="s" glyph-name="s" horiz-adv-x="483" d="M306 548T356 531T444 483L386 394Q321 435 255 435Q224 435 208 425T191 395Q191 380 198 371T229 351T300 327Q383 303 423 265T464 158Q464 104 433 65T348 4T228 -17Q161 -17 104 4T6 62L83 148Q150
+96 224 96Q260 96 280 109T301 146Q301 165 293 176T262 196T189 220Q110 243 71 284T32 386Q32 432 58 468T134 526T249 548Q306 548 356 531Z" />
+<glyph unicode="t" glyph-name="t" horiz-adv-x="386" d="M395 25Q366 5 328 -6T251 -17Q77 -16 77 175V421H2V531H77V646L235 664V531H357L340 421H235V177Q235 140 247 124T285 108Q312 108 342 125L395 25Z" />
+<glyph unicode="u" glyph-name="u" horiz-adv-x="572" d="M510 0H373L366 67Q308 -17 205 -17Q132 -17 95 27T57 150V531H215V170Q215 131 227 116T266 100Q316 100 352 162V531H510V0Z" />
+<glyph unicode="v" glyph-name="v" horiz-adv-x="513" d="M519 531L352 0H165L-6 531H166L260 120L358 531H519Z" />
+<glyph unicode="w" glyph-name="w" horiz-adv-x="749" d="M744 531L634 0H445L374 390L304 0H117L4 531H164L219 118L302 531H456L529 118L593 531H744Z" />
+<glyph unicode="x" glyph-name="x" horiz-adv-x="512" d="M351 284L522 0H343L251 199L161 0H-11L160 279L6 531H183L257 361L328 531H496L351 284Z" />
+<glyph unicode="y" glyph-name="y" horiz-adv-x="518" d="M355 -1Q323 -104 251 -159T56 -222L39 -111Q115 -101 151 -77T210 0H156L-6 531H162L257 101L361 531H524L355 -1Z" />
+<glyph unicode="z" glyph-name="z" horiz-adv-x="459" d="M436 531V420L196 120H441L427 0H13V112L254 412H34V531H436Z" />
+<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="324" d="M298 730Q254 730 238 717T222 670V484Q222 421 197 392T118 349Q170 338 196 309T222 216V30Q222 -3 238 -16T298 -30V-140Q210 -140 161 -122T93 -68T74 25V204Q74 249 61 267T9 285V414Q47
+414 60 432T74 496V675Q74 733 93 768T161 822T298 840V730Z" />
+<glyph unicode="|" glyph-name="bar" horiz-adv-x="376" d="M262 810V-105H115V810H262Z" />
+<glyph unicode="}" glyph-name="braceright" horiz-adv-x="324" d="M114 840T162 822T230 769T249 675V496Q249 451 263 433T314 414V285Q277 285 263 267T249 204V25Q249 -32 230 -67T163 -121T26 -140V-30Q69 -30 85 -17T101 30V216Q101 278 127 308T206 349Q152
+363 127 392T102 484V670Q102 703 86 716T26 730V840Q114 840 162 822Z" />
+<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="514" d="M304 232T280 241T228 269Q207 282 195 287T169 293Q146 293 133 281T100 241L16 283Q44 340 82 375T177 410Q210 410 233 401T286 374Q306 362 319 356T346 350Q369 350 383 362T415 398L498
+357Q470 300 433 266T338 232Q304 232 280 241Z" />
+<glyph unicode="&#xa0;" glyph-name="uni00A0" horiz-adv-x="237" />
+<glyph unicode="&#xa1;" glyph-name="exclamdown" horiz-adv-x="240" d="M158 509T184 483T211 419Q211 382 185 356T120 329Q83 329 57 355T30 419Q30 456 56 482T120 509Q158 509 184 483ZM184 235L205 -210H37L57 235H184Z" />
+<glyph unicode="&#xa2;" glyph-name="cent" horiz-adv-x="479" d="M474 46Q414 -1 346 -13V-161H232V-11Q138 8 85 80T32 261Q32 372 86 447T233 542V691H346V544Q417 531 474 483L406 389Q356 427 305 427Q252 427 225 388T198 262Q198 178 225 143T303 108Q330
+108 352 116T405 144L474 46Z" />
+<glyph unicode="&#xa3;" glyph-name="sterling" horiz-adv-x="539" d="M266 196T253 169T202 120H509L491 0H28V114Q65 125 82 140T105 176T111 233V311H43V393H111V482Q111 575 166 632T324 690Q392 690 441 666T528 590L431 519Q411 548 390 560T340 572Q266
+572 266 481V393H451V311H266V241Q266 196 253 169Z" />
+<glyph unicode="&#xa4;" glyph-name="currency" horiz-adv-x="560" d="M501 276T468 223L543 148L474 78L396 154Q343 125 280 125Q217 125 165 155L86 78L17 148L94 224Q61 277 61 342Q61 406 94 459L17 536L87 606L165 528Q217 558 280 558Q345 558 397 528L474
+606L543 536L468 460Q501 407 501 342Q501 276 468 223ZM329 231T353 260T378 342Q378 395 354 423T281 452Q234 452 209 423T184 342Q184 289 209 260T281 231Q329 231 353 260Z" />
+<glyph unicode="&#xa5;" glyph-name="yen" horiz-adv-x="568" d="M576 676L399 352H497V270H364V198H497V116H364V0H206V116H74V198H206V270H74V352H170L-7 676H161L288 395L413 676H576Z" />
+<glyph unicode="&#xa6;" glyph-name="brokenbar" horiz-adv-x="376" d="M262 810V443H115V810H262ZM262 262V-105H115V262H262Z" />
+<glyph unicode="&#xa7;" glyph-name="section" horiz-adv-x="550" d="M448 162T461 138T474 76Q474 29 447 -7T369 -63T252 -83Q140 -83 61 -29L112 64Q177 26 244 26Q282 26 302 37T323 70Q323 87 315 98T282 120T204 148Q127 172 90 205T53 298Q53 372 133 421Q104
+442 91 468T78 529Q78 575 104 611T179 668T293 689Q346 689 396 674T486 633L433 544Q368 580 301 580Q228 580 228 535Q228 518 236 507T268 485T344 458Q421 434 459 400T497 307Q497 232 419 182Q448 162 461 138ZM319 230T333 224Q345 239 352 255T359 285Q359
+311 339 327T261 362L212 379Q191 351 191 321Q191 295 207 280T268 249Q319 230 333 224Z" />
+<glyph unicode="&#xa8;" glyph-name="dieresis" horiz-adv-x="453" d="M144 799T167 776T191 720Q191 687 168 664T110 641Q76 641 53 664T29 720Q29 753 52 776T110 799Q144 799 167 776ZM376 799T399 776T422 720Q422 687 399 664T341 641Q308 641 285 664T261
+720Q261 753 284 776T341 799Q376 799 399 776Z" />
+<glyph unicode="&#xa9;" glyph-name="copyright" horiz-adv-x="810" d="M499 766T576 724T698 605T743 432Q743 336 699 260T577 142T406 99Q313 99 235 141T112 260T67 432Q67 528 112 604T234 723T406 766Q499 766 576 724ZM335 687T279 655T191 565T159 432Q159
+358 191 301T279 211T406 179Q476 179 532 211T620 300T652 432Q652 507 620 565T532 655T406 687Q335 687 279 655ZM445 630T478 617T539 579L491 519Q472 533 456 538T419 543Q386 543 366 517T345 433Q345 324 418 324Q460 324 498 353L542 289Q486 236 409
+236Q327 236 279 287T231 433Q231 493 254 537T317 606T408 630Q445 630 478 617Z" />
+<glyph unicode="&#xaa;" glyph-name="ordfeminine" horiz-adv-x="500" d="M286 528V539Q286 570 272 581T219 593Q200 593 170 588T109 572L77 662Q117 677 160 685T241 693Q337 693 381 657T425 547V405Q425 384 431 374T452 359L423 267Q384 270 358 282T315
+322Q294 292 260 278T187 264Q123 264 85 299T47 391Q47 458 99 493T249 528H286ZM263 364T286 390V453H263Q191 453 191 402Q191 384 201 374T232 364Q263 364 286 390ZM52 122H460V0H52V122Z" />
+<glyph unicode="&#xab;" glyph-name="guillemotleft" horiz-adv-x="628" d="M226 556L323 491L194 285L323 78L226 13L36 234V334L226 556ZM495 556L592 491L463 285L592 78L495 13L305 234V334L495 556Z" />
+<glyph unicode="&#xac;" glyph-name="logicalnot" horiz-adv-x="531" d="M483 390V114H352V267H48V390H483Z" />
+<glyph unicode="&#xad;" glyph-name="uni00AD" horiz-adv-x="407" d="M44 252V374H363V252H44Z" />
+<glyph unicode="&#xae;" glyph-name="registered" horiz-adv-x="637" d="M397 759T459 724T557 625T593 484Q593 406 558 344T460 247T319 212Q241 212 179 247T80 344T44 484Q44 562 80 625T178 723T319 759Q397 759 459 724ZM377 279T421 304T490 376T515 484Q515
+546 491 593T422 666T319 692Q262 692 217 666T147 593T122 484Q122 423 147 377T217 305T319 279Q377 279 421 304ZM432 519T417 499T374 469L448 352H366L308 454H286V352H215V634H299Q432 634 432 546Q432 519 417 499ZM286 512H316Q359 512 359 548Q359 580
+314 580H286V512Z" />
+<glyph unicode="&#xaf;" glyph-name="overscore" horiz-adv-x="365" d="M335 655H30V765H335V655Z" />
+<glyph unicode="&#xb0;" glyph-name="degree" horiz-adv-x="521" d="M173 369T132 390T65 450T39 541Q39 592 64 630T131 689T218 710Q263 710 304 690T370 631T396 541Q396 489 371 450T304 390T218 369Q173 369 132 390ZM249 462T268 483T287 541Q287 577 269
+598T218 619Q186 619 167 598T148 541Q148 505 167 484T218 462Q249 462 268 483Z" />
+<glyph unicode="&#xb1;" glyph-name="plusminus" horiz-adv-x="531" d="M54 0V122H476V0H54ZM331 622V466H482V344H331V188H200V344H48V466H200V622H331Z" />
+<glyph unicode="&#xb2;" glyph-name="uni00B2" horiz-adv-x="400" d="M270 752T311 716T353 626Q353 595 340 567T290 502T186 410H363L351 321H53V403Q130 473 166 509T217 570T232 616Q232 638 219 651T182 664Q159 664 141 654T104 622L36 675Q64 711 104 731T194
+752Q270 752 311 716Z" />
+<glyph unicode="&#xb3;" glyph-name="uni00B3" horiz-adv-x="400" d="M272 752T312 721T352 642Q352 606 329 581T259 543Q308 540 337 514T367 441Q367 385 321 347T192 309Q90 309 33 376L98 438Q117 417 137 408T183 399Q211 399 228 411T245 449Q245 476 229
+488T178 501H141L154 581H180Q208 581 222 592T237 624Q237 644 223 654T184 665Q138 665 100 630L41 692Q106 752 199 752Q272 752 312 721Z" />
+<glyph unicode="&#xb4;" glyph-name="acute" horiz-adv-x="340" d="M248 835L310 717L74 622L30 703L248 835Z" />
+<glyph unicode="&#xb5;" glyph-name="uni00B5" horiz-adv-x="582" d="M392 -17Q383 2 379 19T369 68Q323 -8 261 -8Q232 -8 211 1T172 34Q193 -4 202 -34T212 -113V-205L62 -220V531H220V167Q220 106 270 106Q293 106 315 121T355 169V531H513V182Q513 84 537 0L392 -17Z" />
+<glyph unicode="&#xb6;" glyph-name="paragraph" horiz-adv-x="788" d="M672 693V-204L534 -222V583H442V-204L304 -222V263Q187 266 126 324T65 478Q65 579 134 636T328 693H672Z" />
+<glyph unicode="&#xb7;" glyph-name="middot" horiz-adv-x="240" d="M157 398T183 372T210 308Q210 270 184 244T120 217Q82 217 56 243T29 308Q29 345 55 371T120 398Q157 398 183 372Z" />
+<glyph unicode="&#xb8;" glyph-name="cedilla" horiz-adv-x="321" d="M187 -48Q240 -54 265 -79T291 -147Q291 -198 251 -230T142 -262Q108 -262 79 -254T30 -232L66 -159Q100 -176 130 -176Q177 -176 177 -146Q177 -128 155 -120T85 -112L100 16H187V-48Z" />
+<glyph unicode="&#xb9;" glyph-name="uni00B9" horiz-adv-x="400" d="M300 742V321H183V632L92 575L39 653L193 742H300Z" />
+<glyph unicode="&#xba;" glyph-name="ordmasculine" horiz-adv-x="500" d="M350 693T407 637T464 478Q464 380 407 322T251 264Q151 264 94 320T37 479Q37 577 94 635T250 693Q350 693 407 637ZM216 591T200 564T183 479Q183 419 199 393T251 366Q285 366 301
+393T318 478Q318 538 302 564T250 591Q216 591 200 564ZM39 0V122H461V0H39Z" />
+<glyph unicode="&#xbb;" glyph-name="guillemotright" horiz-adv-x="625" d="M134 556L323 334V234L134 13L36 78L165 285L36 491L134 556ZM400 556L589 334V234L400 13L302 78L431 285L302 491L400 556Z" />
+<glyph unicode="&#xbc;" glyph-name="onequarter" horiz-adv-x="969" d="M300 693V272H183V583L92 526L39 604L193 693H300ZM644 759L736 714L325 -85L233 -40L644 759ZM943 170V84H897V0H785V84H594V162L715 431L814 395L714 170H787L807 265H897V170H943Z" />
+<glyph unicode="&#xbd;" glyph-name="onehalf" horiz-adv-x="969" d="M300 693V272H183V583L92 526L39 604L193 693H300ZM644 759L736 714L325 -85L233 -40L644 759ZM839 431T880 395T922 305Q922 274 909 246T859 181T755 89H932L920 0H622V82Q699 152 735 188T786
+249T801 295Q801 317 788 330T751 343Q728 343 710 333T673 301L605 354Q633 390 673 410T763 431Q839 431 880 395Z" />
+<glyph unicode="&#xbe;" glyph-name="threequarters" horiz-adv-x="969" d="M272 703T312 672T352 593Q352 557 329 532T259 494Q308 491 337 465T367 392Q367 336 321 298T192 260Q90 260 33 327L98 389Q117 368 137 359T183 350Q211 350 228 362T245 400Q245
+427 229 439T178 452H141L154 532H180Q208 532 222 543T237 575Q237 595 223 605T184 616Q138 616 100 581L41 643Q106 703 199 703Q272 703 312 672ZM644 759L736 714L325 -85L233 -40L644 759ZM943 170V84H897V0H785V84H594V162L715 431L814 395L714 170H787L807
+265H897V170H943Z" />
+<glyph unicode="&#xbf;" glyph-name="questiondown" horiz-adv-x="481" d="M227 329T201 355T174 419Q174 456 200 482T265 509Q302 509 328 483T355 419Q355 382 329 356T265 329Q227 329 201 355ZM163 -222T114 -200T39 -139T14 -55Q14 -14 28 15T63 63T117
+104Q156 130 175 151T194 206V236H338V200Q338 153 324 122T290 72T238 31Q207 11 194 -3T180 -41Q180 -68 198 -83T249 -98Q313 -98 367 -37L467 -115Q378 -222 233 -222Q163 -222 114 -200Z" />
+<glyph unicode="&#xc0;" glyph-name="Agrave" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM211 956L432 831L392 751L152 838L211 956Z" />
+<glyph unicode="&#xc1;" glyph-name="Aacute" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM377 956L436 838L196 751L156 831L377 956Z" />
+<glyph unicode="&#xc2;" glyph-name="Acircumflex" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM163 755L106 820L248 949H344L485 820L429 755L296 839L163 755Z" />
+<glyph unicode="&#xc3;" glyph-name="Atilde" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM332 761T316 768T281 788Q256 806 240 806Q223 806 212 796T187 762L108 800Q128 852 161 885T237 918Q260
+918 276 911T313 890Q327 881 335 877T353 873Q369 873 380 883T405 917L484 878Q463 825 430 793T354 761Q332 761 316 768Z" />
+<glyph unicode="&#xc4;" glyph-name="Adieresis" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM213 925T236 902T260 846Q260 813 237 790T179 767Q145 767 122 790T98 846Q98 879 121 902T179 925Q213
+925 236 902ZM445 925T468 902T491 846Q491 813 468 790T410 767Q377 767 354 790T330 846Q330 879 353 902T410 925Q445 925 468 902Z" />
+<glyph unicode="&#xc5;" glyph-name="Aring" horiz-adv-x="590" d="M430 0L394 149H192L157 0H-13L196 693H395L604 0H430ZM220 268H366L293 574L220 268ZM359 993T397 955T435 862Q435 807 397 769T296 731Q233 731 195 769T157 862Q157 917 195 955T296 993Q359
+993 397 955ZM275 912T263 899T251 862Q251 838 263 825T296 812Q316 812 328 825T341 862Q341 886 329 899T296 912Q275 912 263 899Z" />
+<glyph unicode="&#xc6;" glyph-name="AE" horiz-adv-x="845" d="M582 118H812V0H444L418 149H203L153 0H-23L249 693H775L758 576H488L522 408H766V293H546L582 118ZM243 268H398L345 573L243 268Z" />
+<glyph unicode="&#xc7;" glyph-name="Ccedilla" horiz-adv-x="575" d="M436 -54T461 -79T487 -147Q487 -198 447 -230T338 -262Q304 -262 275 -254T226 -232L262 -159Q296 -176 326 -176Q373 -176 373 -146Q373 -128 351 -120T281 -112L293 -13Q172 5 103 98T33
+348Q33 461 73 543T185 667T348 710Q413 710 463 691T559 634L481 541Q450 565 420 577T356 589Q286 589 246 530T205 348Q205 227 245 169T358 110Q396 110 427 124T494 166L567 72Q533 38 486 15T383 -15V-48Q436 -54 461 -79Z" />
+<glyph unicode="&#xc8;" glyph-name="Egrave" horiz-adv-x="526" d="M490 693L473 576H229V410H442V295H229V118H490V0H65V693H490ZM194 956L415 831L375 751L135 838L194 956Z" />
+<glyph unicode="&#xc9;" glyph-name="Eacute" horiz-adv-x="526" d="M490 693L473 576H229V410H442V295H229V118H490V0H65V693H490ZM360 956L419 838L179 751L139 831L360 956Z" />
+<glyph unicode="&#xca;" glyph-name="Ecircumflex" horiz-adv-x="526" d="M490 693L473 576H229V410H442V295H229V118H490V0H65V693H490ZM146 755L89 820L231 949H327L468 820L412 755L279 839L146 755Z" />
+<glyph unicode="&#xcb;" glyph-name="Edieresis" horiz-adv-x="526" d="M490 693L473 576H229V410H442V295H229V118H490V0H65V693H490ZM196 925T219 902T243 846Q243 813 220 790T162 767Q128 767 105 790T81 846Q81 879 104 902T162 925Q196 925 219 902ZM428
+925T451 902T474 846Q474 813 451 790T393 767Q360 767 337 790T313 846Q313 879 336 902T393 925Q428 925 451 902Z" />
+<glyph unicode="&#xcc;" glyph-name="Igrave" horiz-adv-x="293" d="M229 693V0H65V693H229ZM61 956L282 831L242 751L2 838L61 956Z" />
+<glyph unicode="&#xcd;" glyph-name="Iacute" horiz-adv-x="293" d="M229 693V0H65V693H229ZM227 956L286 838L46 751L6 831L227 956Z" />
+<glyph unicode="&#xce;" glyph-name="Icircumflex" horiz-adv-x="293" d="M229 693V0H65V693H229ZM13 755L-44 820L98 949H194L335 820L279 755L146 839L13 755Z" />
+<glyph unicode="&#xcf;" glyph-name="Idieresis" horiz-adv-x="293" d="M229 693V0H65V693H229ZM63 925T86 902T110 846Q110 813 87 790T29 767Q-5 767 -28 790T-52 846Q-52 879 -29 902T29 925Q63 925 86 902ZM295 925T318 902T341 846Q341 813 318 790T260 767Q227
+767 204 790T180 846Q180 879 203 902T260 925Q295 925 318 902Z" />
+<glyph unicode="&#xd0;" glyph-name="Eth" horiz-adv-x="665" d="M435 693T533 620T632 350Q632 157 536 79T287 0H79V304H14V402H79V693H272Q435 693 533 620ZM378 119T420 169T462 350Q462 439 441 488T384 555T295 574H243V402H377V304H243V119H297Q378 119 420 169Z" />
+<glyph unicode="&#xd1;" glyph-name="Ntilde" horiz-adv-x="663" d="M599 0H390L190 537Q200 458 205 398T211 254V0H65V693H269L474 155Q452 292 452 413V693H599V0ZM372 761T356 768T321 788Q296 806 280 806Q263 806 252 796T227 762L148 800Q168 852 201 885T277
+918Q300 918 316 911T353 890Q367 881 375 877T393 873Q409 873 420 883T445 917L524 878Q503 825 470 793T394 761Q372 761 356 768Z" />
+<glyph unicode="&#xd2;" glyph-name="Ograve" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533ZM260 956L481 831L441 751L201 838L260 956Z" />
+<glyph unicode="&#xd3;" glyph-name="Oacute" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533ZM426 956L485 838L245 751L205 831L426 956Z" />
+<glyph unicode="&#xd4;" glyph-name="Ocircumflex" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533ZM212 755L155 820L297 949H393L534 820L478 755L345 839L212 755Z" />
+<glyph unicode="&#xd5;" glyph-name="Otilde" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533ZM381 761T365 768T330 788Q305 806 289 806Q272 806 261 796T236 762L157 800Q177 852 210 885T286 918Q309 918 325 911T362 890Q376 881 384 877T402 873Q418 873 429 883T454 917L533
+878Q512 825 479 793T403 761Q381 761 365 768Z" />
+<glyph unicode="&#xd6;" glyph-name="Odieresis" horiz-adv-x="691" d="M493 710T575 615T658 347Q658 234 621 152T513 27T345 -17Q248 -17 178 26T71 150T33 347Q33 459 70 541T178 666T345 710Q493 710 575 615ZM274 590T240 533T205 347Q205 219 240 161T345
+103Q417 103 451 160T486 347Q486 476 451 533T345 590Q274 590 240 533ZM262 925T285 902T309 846Q309 813 286 790T228 767Q194 767 171 790T147 846Q147 879 170 902T228 925Q262 925 285 902ZM494 925T517 902T540 846Q540 813 517 790T459 767Q426 767 403
+790T379 846Q379 879 402 902T459 925Q494 925 517 902Z" />
+<glyph unicode="&#xd7;" glyph-name="multiply" horiz-adv-x="519" d="M376 510L463 423L347 309L463 190L376 103L261 224L143 103L56 190L171 304L56 423L143 510L257 389L376 510Z" />
+<glyph unicode="&#xd8;" glyph-name="Oslash" horiz-adv-x="691" d="M584 625T621 543T658 347Q658 234 621 152T513 27T345 -17Q320 -17 296 -14L260 -134L136 -102L176 27Q107 70 70 151T33 347Q33 459 70 541T178 666T345 710Q371 710 395 707L432 828L555
+795L514 667Q584 625 621 543ZM274 590T240 533T205 347Q205 203 243 148L375 588Q357 590 345 590Q274 590 240 533ZM417 103T451 160T486 347Q486 493 448 546L315 105Q335 103 345 103Q417 103 451 160Z" />
+<glyph unicode="&#xd9;" glyph-name="Ugrave" horiz-adv-x="651" d="M596 230Q596 159 566 103T474 15T325 -17Q193 -17 124 50T55 230V693H219V237Q219 170 244 138T325 105Q381 105 406 137T432 237V693H596V230ZM240 956L461 831L421 751L181 838L240 956Z" />
+<glyph unicode="&#xda;" glyph-name="Uacute" horiz-adv-x="651" d="M596 230Q596 159 566 103T474 15T325 -17Q193 -17 124 50T55 230V693H219V237Q219 170 244 138T325 105Q381 105 406 137T432 237V693H596V230ZM406 956L465 838L225 751L185 831L406 956Z" />
+<glyph unicode="&#xdb;" glyph-name="Ucircumflex" horiz-adv-x="651" d="M596 230Q596 159 566 103T474 15T325 -17Q193 -17 124 50T55 230V693H219V237Q219 170 244 138T325 105Q381 105 406 137T432 237V693H596V230ZM192 755L135 820L277 949H373L514 820L458
+755L325 839L192 755Z" />
+<glyph unicode="&#xdc;" glyph-name="Udieresis" horiz-adv-x="651" d="M596 230Q596 159 566 103T474 15T325 -17Q193 -17 124 50T55 230V693H219V237Q219 170 244 138T325 105Q381 105 406 137T432 237V693H596V230ZM242 925T265 902T289 846Q289 813 266 790T208
+767Q174 767 151 790T127 846Q127 879 150 902T208 925Q242 925 265 902ZM474 925T497 902T520 846Q520 813 497 790T439 767Q406 767 383 790T359 846Q359 879 382 902T439 925Q474 925 497 902Z" />
+<glyph unicode="&#xdd;" glyph-name="Yacute" horiz-adv-x="594" d="M601 693L379 260V0H215V259L-7 693H172L300 388L428 693H601ZM378 956L437 838L197 751L157 831L378 956Z" />
+<glyph unicode="&#xde;" glyph-name="Thorn" horiz-adv-x="600" d="M426 585T502 527T578 356Q578 236 504 175T304 114H229V0H65V693H229V585H289Q426 585 502 527ZM348 233T378 261T409 356Q409 413 379 440T287 468H229V233H290Q348 233 378 261Z" />
+<glyph unicode="&#xdf;" glyph-name="germandbls" horiz-adv-x="606" d="M363 759T409 739T480 684T505 609Q505 571 490 547T445 495Q424 476 414 463T404 431Q404 411 419 396T467 357Q503 332 528 310T570 251T588 166Q588 110 562 69T489 5T386 -17Q319 -17
+267 10L314 117Q337 105 366 105Q394 105 409 121T425 169Q425 204 407 226T351 275Q323 297 307 312T279 350T267 405Q267 441 279 462T315 509Q336 530 346 546T356 590Q356 617 339 632T294 647Q220 647 220 538V0H62V533Q62 639 123 699T298 759Q363 759 409
+739Z" />
+<glyph unicode="&#xe0;" glyph-name="agrave" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114
+528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM203 835L421 703L377 622L141 717L203 835Z" />
+<glyph unicode="&#xe1;" glyph-name="aacute" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114
+528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM343 835L405 717L169 622L125 703L343 835Z" />
+<glyph unicode="&#xe2;" glyph-name="acircumflex" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64
+509Q114 528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM137 620L81 685L222 822H319L460 685L404 620L271 712L137 620Z" />
+<glyph unicode="&#xe3;" glyph-name="atilde" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114
+528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM307 635T291 642T256 662Q231 680 215 680Q198 680 187 670T162 636L83 674Q103 726 136 759T212
+792Q235 792 251 785T288 764Q302 755 310 751T328 747Q344 747 355 757T380 791L459 752Q438 699 405 667T329 635Q307 635 291 642Z" />
+<glyph unicode="&#xe4;" glyph-name="adieresis" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114
+528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM189 799T212 776T236 720Q236 687 213 664T155 641Q121 641 98 664T74 720Q74 753 97 776T155 799Q189
+799 212 776ZM421 799T444 776T467 720Q467 687 444 664T386 641Q353 641 330 664T306 720Q306 753 329 776T386 799Q421 799 444 776Z" />
+<glyph unicode="&#xe5;" glyph-name="aring" horiz-adv-x="548" d="M484 124T492 110T520 89L487 -14Q438 -10 407 7T359 63Q307 -17 199 -17Q120 -17 73 29T26 149Q26 236 90 282T275 328H329V351Q329 398 309 415T239 433Q213 433 176 426T100 405L64 509Q114
+528 166 538T264 548Q378 548 431 501T484 360V154Q484 124 492 110ZM299 96T329 147V241H290Q236 241 210 222T183 163Q183 131 199 114T245 96Q299 96 329 147ZM334 867T372 829T410 736Q410 681 372 643T271 605Q208 605 170 643T132 736Q132 791 170 829T271
+867Q334 867 372 829ZM250 786T238 773T226 736Q226 712 238 699T271 686Q291 686 303 699T316 736Q316 760 304 773T271 786Q250 786 238 773Z" />
+<glyph unicode="&#xe6;" glyph-name="ae" horiz-adv-x="855" d="M828 243T825 219H496Q503 152 533 125T617 98Q649 98 679 109T744 145L809 57Q716 -17 602 -17Q532 -17 479 7T391 74Q327 -17 203 -17Q122 -17 74 29T26 149Q26 236 91 282T281 328H335V350Q335
+396 315 414T245 432Q219 432 182 425T106 404L70 509Q120 528 172 538T270 548Q381 548 433 481Q497 548 595 548Q665 548 717 516T799 422T828 276Q828 243 825 219ZM672 321Q672 443 586 443Q546 443 524 413T496 314H672V321ZM282 96T304 112T348 160Q339 191
+337 234V238H297Q244 238 219 220T193 160Q193 130 208 113T253 96Q282 96 304 112Z" />
+<glyph unicode="&#xe7;" glyph-name="ccedilla" horiz-adv-x="479" d="M406 -8T323 -16V-48Q376 -54 401 -79T427 -147Q427 -198 387 -230T278 -262Q244 -262 215 -254T166 -232L202 -159Q236 -176 266 -176Q313 -176 313 -146Q313 -128 291 -120T221 -112L233
+-11Q139 8 86 80T32 261Q32 345 64 410T155 511T292 548Q347 548 391 532T474 483L406 389Q356 427 305 427Q252 427 225 388T198 262Q198 178 225 143T303 108Q330 108 352 116T405 144L474 46Q406 -8 323 -16Z" />
+<glyph unicode="&#xe8;" glyph-name="egrave" horiz-adv-x="552" d="M525 243T522 219H193Q201 152 231 125T314 98Q346 98 376 109T441 145L506 57Q413 -17 299 -17Q170 -17 101 59T32 263Q32 344 61 408T146 510T280 548Q395 548 460 476T525 276Q525 243 522
+219ZM370 321Q368 443 284 443Q243 443 221 413T193 314H370V321ZM215 835L433 703L389 622L153 717L215 835Z" />
+<glyph unicode="&#xe9;" glyph-name="eacute" horiz-adv-x="552" d="M525 243T522 219H193Q201 152 231 125T314 98Q346 98 376 109T441 145L506 57Q413 -17 299 -17Q170 -17 101 59T32 263Q32 344 61 408T146 510T280 548Q395 548 460 476T525 276Q525 243 522
+219ZM370 321Q368 443 284 443Q243 443 221 413T193 314H370V321ZM355 835L417 717L181 622L137 703L355 835Z" />
+<glyph unicode="&#xea;" glyph-name="ecircumflex" horiz-adv-x="552" d="M525 243T522 219H193Q201 152 231 125T314 98Q346 98 376 109T441 145L506 57Q413 -17 299 -17Q170 -17 101 59T32 263Q32 344 61 408T146 510T280 548Q395 548 460 476T525 276Q525 243
+522 219ZM370 321Q368 443 284 443Q243 443 221 413T193 314H370V321ZM149 620L93 685L234 822H331L472 685L416 620L283 712L149 620Z" />
+<glyph unicode="&#xeb;" glyph-name="edieresis" horiz-adv-x="552" d="M525 243T522 219H193Q201 152 231 125T314 98Q346 98 376 109T441 145L506 57Q413 -17 299 -17Q170 -17 101 59T32 263Q32 344 61 408T146 510T280 548Q395 548 460 476T525 276Q525 243
+522 219ZM370 321Q368 443 284 443Q243 443 221 413T193 314H370V321ZM201 799T224 776T248 720Q248 687 225 664T167 641Q133 641 110 664T86 720Q86 753 109 776T167 799Q201 799 224 776ZM433 799T456 776T479 720Q479 687 456 664T398 641Q365 641 342 664T318
+720Q318 753 341 776T398 799Q433 799 456 776Z" />
+<glyph unicode="&#xec;" glyph-name="igrave" horiz-adv-x="282" d="M220 531V0H62V531H220ZM73 835L291 703L247 622L11 717L73 835Z" />
+<glyph unicode="&#xed;" glyph-name="iacute" horiz-adv-x="282" d="M220 531V0H62V531H220ZM213 835L275 717L39 622L-5 703L213 835Z" />
+<glyph unicode="&#xee;" glyph-name="icircumflex" horiz-adv-x="282" d="M220 531V0H62V531H220ZM7 620L-49 685L92 822H189L330 685L274 620L141 712L7 620Z" />
+<glyph unicode="&#xef;" glyph-name="idieresis" horiz-adv-x="282" d="M220 531V0H62V531H220ZM59 799T82 776T106 720Q106 687 83 664T25 641Q-9 641 -32 664T-56 720Q-56 753 -33 776T25 799Q59 799 82 776ZM291 799T314 776T337 720Q337 687 314 664T256 641Q223
+641 200 664T176 720Q176 753 199 776T256 799Q291 799 314 776Z" />
+<glyph unicode="&#xf0;" glyph-name="eth" horiz-adv-x="579" d="M456 600T499 504T542 277Q542 194 511 127T422 22T283 -17Q211 -17 154 13T65 99T32 234Q32 301 59 357T133 446T240 479Q319 479 372 432Q358 479 335 514T270 582L215 527L116 573L173 632Q125
+647 81 654L113 758Q193 744 259 720L332 798L412 727L357 670Q456 600 499 504ZM334 98T357 137T381 256L380 327Q341 369 283 369Q193 369 193 237Q193 166 217 132T285 98Q334 98 357 137Z" />
+<glyph unicode="&#xf1;" glyph-name="ntilde" horiz-adv-x="577" d="M442 548T481 506T520 388V0H362V361Q362 401 350 416T312 432Q264 432 220 363V0H62V531H200L211 468Q245 508 284 528T373 548Q442 548 481 506ZM330 635T314 642T279 662Q254 680 238 680Q221
+680 210 670T185 636L106 674Q126 726 159 759T235 792Q258 792 274 785T311 764Q325 755 333 751T351 747Q367 747 378 757T403 791L482 752Q461 699 428 667T352 635Q330 635 314 642Z" />
+<glyph unicode="&#xf2;" glyph-name="ograve" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340
+99 364 139T388 265Q388 352 365 392T292 432Q244 432 220 392ZM224 835L442 703L398 622L162 717L224 835Z" />
+<glyph unicode="&#xf3;" glyph-name="oacute" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340
+99 364 139T388 265Q388 352 365 392T292 432Q244 432 220 392ZM364 835L426 717L190 622L146 703L364 835Z" />
+<glyph unicode="&#xf4;" glyph-name="ocircumflex" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340
+99 364 139T388 265Q388 352 365 392T292 432Q244 432 220 392ZM158 620L102 685L243 822H340L481 685L425 620L292 712L158 620Z" />
+<glyph unicode="&#xf5;" glyph-name="otilde" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340
+99 364 139T388 265Q388 352 365 392T292 432Q244 432 220 392ZM328 635T312 642T277 662Q252 680 236 680Q219 680 208 670T183 636L104 674Q124 726 157 759T233 792Q256 792 272 785T309 764Q323 755 331 751T349 747Q365 747 376 757T401 791L480 752Q459 699
+426 667T350 635Q328 635 312 642Z" />
+<glyph unicode="&#xf6;" glyph-name="odieresis" horiz-adv-x="584" d="M414 548T483 474T552 265Q552 180 521 117T431 18T292 -17Q171 -17 102 57T32 266Q32 351 63 414T153 513T292 548Q414 548 483 474ZM244 432T220 392T196 266Q196 179 219 139T292 99Q340
+99 364 139T388 265Q388 352 365 392T292 432Q244 432 220 392ZM210 799T233 776T257 720Q257 687 234 664T176 641Q142 641 119 664T95 720Q95 753 118 776T176 799Q210 799 233 776ZM442 799T465 776T488 720Q488 687 465 664T407 641Q374 641 351 664T327 720Q327
+753 350 776T407 799Q442 799 465 776Z" />
+<glyph unicode="&#xf7;" glyph-name="divide" horiz-adv-x="519" d="M297 182T323 156T350 92Q350 54 324 28T260 1Q222 1 196 27T169 92Q169 129 195 155T260 182Q297 182 323 156ZM297 664T323 638T350 574Q350 536 324 510T260 483Q222 483 196 509T169 574Q169
+611 195 637T260 664Q297 664 323 638ZM48 271V393H470V271H48Z" />
+<glyph unicode="&#xf8;" glyph-name="oslash" horiz-adv-x="584" d="M493 476T522 414T552 265Q552 180 521 117T431 18T292 -17Q280 -17 258 -15L221 -135L106 -101L145 21Q90 56 61 118T32 266Q32 351 63 414T153 513T292 548Q303 548 325 546L364 667L480 633L438
+510Q493 476 522 414ZM183 432T183 266Q183 170 208 132L308 432H292Q183 432 183 266ZM346 99T373 139T401 265Q401 362 375 399L276 99H292Q346 99 373 139Z" />
+<glyph unicode="&#xf9;" glyph-name="ugrave" horiz-adv-x="572" d="M510 0H373L366 67Q308 -17 205 -17Q132 -17 95 27T57 150V531H215V170Q215 131 227 116T266 100Q316 100 352 162V531H510V0ZM216 835L434 703L390 622L154 717L216 835Z" />
+<glyph unicode="&#xfa;" glyph-name="uacute" horiz-adv-x="572" d="M510 0H373L366 67Q308 -17 205 -17Q132 -17 95 27T57 150V531H215V170Q215 131 227 116T266 100Q316 100 352 162V531H510V0ZM356 835L418 717L182 622L138 703L356 835Z" />
+<glyph unicode="&#xfb;" glyph-name="ucircumflex" horiz-adv-x="572" d="M510 0H373L366 67Q308 -17 205 -17Q132 -17 95 27T57 150V531H215V170Q215 131 227 116T266 100Q316 100 352 162V531H510V0ZM150 620L94 685L235 822H332L473 685L417 620L284 712L150 620Z" />
+<glyph unicode="&#xfc;" glyph-name="udieresis" horiz-adv-x="572" d="M510 0H373L366 67Q308 -17 205 -17Q132 -17 95 27T57 150V531H215V170Q215 131 227 116T266 100Q316 100 352 162V531H510V0ZM202 799T225 776T249 720Q249 687 226 664T168 641Q134 641
+111 664T87 720Q87 753 110 776T168 799Q202 799 225 776ZM434 799T457 776T480 720Q480 687 457 664T399 641Q366 641 343 664T319 720Q319 753 342 776T399 799Q434 799 457 776Z" />
+<glyph unicode="&#xfd;" glyph-name="yacute" horiz-adv-x="518" d="M355 -1Q323 -104 251 -159T56 -222L39 -111Q115 -101 151 -77T210 0H156L-6 531H162L257 101L361 531H524L355 -1ZM331 835L393 717L157 622L113 703L331 835Z" />
+<glyph unicode="&#xfe;" glyph-name="thorn" horiz-adv-x="597" d="M461 548T510 475T560 267Q560 185 535 121T461 20T349 -17Q269 -17 220 38V-204L62 -222V742L220 759V481Q250 516 286 532T359 548Q461 548 510 475ZM396 99T396 265Q396 359 375 395T309 432Q283
+432 261 416T220 370V146Q252 99 301 99Q396 99 396 265Z" />
+<glyph unicode="&#xff;" glyph-name="ydieresis" horiz-adv-x="518" d="M355 -1Q323 -104 251 -159T56 -222L39 -111Q115 -101 151 -77T210 0H156L-6 531H162L257 101L361 531H524L355 -1ZM177 799T200 776T224 720Q224 687 201 664T143 641Q109 641 86 664T62
+720Q62 753 85 776T143 799Q177 799 200 776ZM409 799T432 776T455 720Q455 687 432 664T374 641Q341 641 318 664T294 720Q294 753 317 776T374 799Q409 799 432 776Z" />
+<glyph unicode="&#x2013;" glyph-name="endash" horiz-adv-x="520" d="M21 252V374H499V252H21Z" />
+<glyph unicode="&#x2014;" glyph-name="emdash" horiz-adv-x="796" d="M21 252V374H775V252H21Z" />
+<glyph unicode="&#x2018;" glyph-name="quoteleft" horiz-adv-x="243" d="M86 461T62 484T38 542Q38 561 44 581T67 635L131 766H212L170 610Q207 584 207 541Q207 507 183 484T122 461Q86 461 62 484Z" />
+<glyph unicode="&#x2019;" glyph-name="quoteright" horiz-adv-x="243" d="M157 766T181 743T205 685Q205 666 199 646T176 592L112 461H31L73 617Q36 643 36 686Q36 720 60 743T121 766Q157 766 181 743Z" />
+<glyph unicode="&#x201a;" glyph-name="quotesinglbase" horiz-adv-x="243" d="M157 142T181 119T205 61Q205 42 199 22T176 -32L112 -163H31L73 -7Q36 19 36 62Q36 96 60 119T121 142Q157 142 181 119Z" />
+<glyph unicode="&#x201c;" glyph-name="quotedblleft" horiz-adv-x="448" d="M86 461T62 484T38 542Q38 561 44 581T67 635L131 766H212L170 610Q207 584 207 541Q207 507 183 484T122 461Q86 461 62 484ZM291 461T267 484T243 542Q243 561 249 581T272 635L336
+766H417L375 610Q412 584 412 541Q412 507 388 484T327 461Q291 461 267 484Z" />
+<glyph unicode="&#x201d;" glyph-name="quotedblright" horiz-adv-x="448" d="M157 766T181 743T205 685Q205 666 199 646T176 592L112 461H31L73 617Q36 643 36 686Q36 720 60 743T121 766Q157 766 181 743ZM362 766T386 743T410 685Q410 666 404 646T381 592L317
+461H236L278 617Q241 643 241 686Q241 720 265 743T326 766Q362 766 386 743Z" />
+<glyph unicode="&#x201e;" glyph-name="quotedblbase" horiz-adv-x="448" d="M157 142T181 119T205 61Q205 42 199 22T176 -32L112 -163H31L73 -7Q36 19 36 62Q36 96 60 119T121 142Q157 142 181 119ZM362 142T386 119T410 61Q410 42 404 22T381 -32L317 -163H236L278
+-7Q241 19 241 62Q241 96 265 119T326 142Q362 142 386 119Z" />
+<glyph unicode="&#x2022;" glyph-name="bullet" horiz-adv-x="346" d="M232 480T271 440T311 341Q311 282 272 243T173 203Q114 203 75 243T35 342Q35 401 74 440T173 480Q232 480 271 440Z" />
+<glyph unicode="&#x2039;" glyph-name="guilsinglleft" horiz-adv-x="359" d="M226 556L323 491L194 285L323 78L226 13L36 234V334L226 556Z" />
+<glyph unicode="&#x203a;" glyph-name="guilsinglright" horiz-adv-x="359" d="M134 556L323 334V234L134 13L36 78L165 285L36 491L134 556Z" />
+</font>
+</defs>
+</svg>
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.ttf b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.ttf
new file mode 100644
index 000000000..a7226f9d7
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.ttf differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff
new file mode 100644
index 000000000..d7eef80fd
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff2 b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff2
new file mode 100644
index 000000000..c5e0e3d78
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/Fira-Sans-700.woff2 differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/LICENSE.txt b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/LICENSE.txt
new file mode 100644
index 000000000..a2c1ae225
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-700/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.eot b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.eot
new file mode 100644
index 000000000..9b8ea914e
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.eot differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.svg b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.svg
new file mode 100644
index 000000000..1e520978d
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.svg
@@ -0,0 +1,330 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs >
+<font id="FiraSans" horiz-adv-x="558" ><font-face
+ font-family="Fira Sans"
+ units-per-em="1000"
+ panose-1="2 11 5 3 5 0 0 2 0 4"
+ ascent="935"
+ descent="-265"
+ alphabetic="0" />
+<glyph unicode=" " glyph-name="space" horiz-adv-x="265" />
+<glyph unicode="!" glyph-name="exclam" horiz-adv-x="241" d="M170 689L160 230H79L68 689H170ZM150 127T170 107T190 58Q190 29 170 9T120 -12Q91 -12 71 8T51 58Q51 87 71 107T120 127Q150 127 170 107Z" />
+<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="399" d="M75 427L60 689H159L144 427H75ZM255 427L240 689H339L324 427H255Z" />
+<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="518" d="M503 447H427L399 232H466V163H389L368 0H290L311 163H157L136 0H58L79 163H15V232H89L117 447H52V517H126L146 669H224L204 517H358L378 669H456L436 517H503V447ZM321 232L349 447H195L167 232H321Z" />
+<glyph unicode="$" glyph-name="dollar" horiz-adv-x="531" d="M491 110T443 58T310 -8V-155H230V-11Q107 -5 25 75L79 134Q151 64 251 64Q314 64 354 95T395 183Q395 216 383 238T339 277T250 312Q147 344 100 387T52 505Q52 575 101 622T230 678V824H310V677Q358
+672 396 654T470 602L417 544Q383 576 347 590T267 604Q214 604 181 580T147 509Q147 480 159 461T202 425T293 389Q356 370 398 347T465 285T491 186Q491 110 443 58Z" />
+<glyph unicode="%" glyph-name="percent" horiz-adv-x="826" d="M613 711L677 669L214 -31L150 11L613 711ZM279 679T324 633T370 510Q370 433 325 387T207 341Q136 341 91 387T45 510Q45 587 90 633T207 679Q279 679 324 633ZM163 617T145 587T126 510Q126 464
+144 434T207 403Q288 403 288 510Q288 556 270 586T207 617Q163 617 145 587ZM691 326T736 280T781 157Q781 80 736 34T619 -12Q547 -12 502 34T456 157Q456 234 501 280T619 326Q691 326 736 280ZM575 263T557 234T538 157Q538 111 556 81T619 50Q700 50 700 157Q700
+203 682 233T619 263Q575 263 557 234Z" />
+<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="729" d="M356 701T397 682T462 627T485 549Q485 490 448 448T344 366L520 200Q560 281 580 369L666 344Q631 228 577 147L689 42L623 -12L526 82Q483 35 429 12T305 -12Q239 -12 189 11T110 76T81
+175Q81 237 116 283T220 374Q170 422 147 460T123 546Q123 614 170 657T302 701Q356 701 397 682ZM261 633T237 609T213 547Q213 511 232 483T292 415Q343 446 369 476T395 544Q395 586 370 609T303 633Q261 633 237 609ZM223 291T199 257T175 178Q175 123 213
+92T315 61Q362 61 400 79T473 133L273 324Q223 291 199 257Z" />
+<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="219" d="M75 427L60 689H159L144 427H75Z" />
+<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="324" d="M284 805Q232 728 202 668T154 530T136 350Q136 248 153 171T201 33T284 -105L226 -145Q160 -51 125 9T65 154T40 350Q40 461 64 545T124 690T226 845L284 805Z" />
+<glyph unicode=")" glyph-name="parenright" horiz-adv-x="324" d="M164 751T199 691T259 546T284 350Q284 239 260 155T200 10T98 -145L40 -105Q92 -29 122 32T170 171T188 350Q188 453 171 530T123 667T40 805L98 845Q164 751 199 691Z" />
+<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="439" d="M419 561L266 528L370 412L298 359L219 493L141 359L69 411L172 528L20 561L47 643L189 582L174 739H264L249 581L391 644L419 561Z" />
+<glyph unicode="+" glyph-name="plus" horiz-adv-x="499" d="M291 519V369H437V293H291V144H207V293H62V369H207V519H291Z" />
+<glyph unicode="," glyph-name="comma" horiz-adv-x="240" d="M149 127T169 107T189 58Q189 27 171 -13L104 -166H38L78 0Q65 10 58 25T50 58Q50 87 70 107T119 127Q149 127 169 107Z" />
+<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="403" d="M60 274V352H343V274H60Z" />
+<glyph unicode="." glyph-name="period" horiz-adv-x="240" d="M149 127T169 107T189 58Q189 29 169 9T119 -12Q90 -12 70 8T50 58Q50 87 70 107T119 127Q149 127 169 107Z" />
+<glyph unicode="/" glyph-name="slash" horiz-adv-x="520" d="M337 807L415 789L184 -104L105 -85L337 807Z" />
+<glyph unicode="0" glyph-name="zero" d="M390 679T446 591T503 334Q503 166 447 77T279 -12Q168 -12 112 77T55 334Q55 502 111 590T279 679Q390 679 446 591ZM214 606T183 542T151 334Q151 190 182 126T279 61Q343 61 375 125T407 334Q407 477 375 541T279 606Q214
+606 183 542Z" />
+<glyph unicode="1" glyph-name="one" horiz-adv-x="433" d="M323 669V0H231V571L75 476L35 541L242 669H323Z" />
+<glyph unicode="2" glyph-name="two" horiz-adv-x="495" d="M288 679T333 655T404 590T429 496Q429 435 402 379T317 258T144 77H445L434 0H39V73Q173 212 229 276T309 389T333 492Q333 544 303 573T223 603Q182 603 151 586T85 530L25 578Q66 629 116 654T228
+679Q288 679 333 655Z" />
+<glyph unicode="3" glyph-name="three" horiz-adv-x="499" d="M287 679T331 656T399 594T423 509Q423 448 388 409T293 355Q360 349 402 307T444 193Q444 135 416 88T336 15T216 -12Q155 -12 104 10T15 78L70 129Q103 95 137 79T213 63Q276 63 312 98T348 194Q348
+260 314 287T215 314H165L176 385H210Q262 385 296 416T331 503Q331 550 301 577T220 605Q181 605 149 591T82 545L34 600Q119 679 225 679Q287 679 331 656Z" />
+<glyph unicode="4" glyph-name="four" horiz-adv-x="532" d="M502 238V165H415V0H326V165H40V231L241 679L318 647L137 238H327L335 418H415V238H502Z" />
+<glyph unicode="5" glyph-name="five" horiz-adv-x="501" d="M420 597H159V400Q210 426 266 426Q352 426 404 370T456 214Q456 148 427 97T346 17T224 -12Q163 -12 115 9T26 73L80 126Q112 94 146 79T223 63Q287 63 323 103T360 216Q360 289 327 322T238 355Q212
+355 190 350T143 332H71V669H433L420 597Z" />
+<glyph unicode="6" glyph-name="six" horiz-adv-x="533" d="M359 440T401 416T468 344T493 227Q493 156 465 102T388 18T280 -12Q163 -12 109 74T55 314Q55 423 85 505T173 633T308 679Q384 679 446 638L410 577Q363 606 307 606Q235 606 193 537T147 352Q209
+440 308 440Q359 440 401 416ZM338 61T369 105T400 224Q400 367 292 367Q248 367 211 343T148 275Q151 165 182 113T280 61Q338 61 369 105Z" />
+<glyph unicode="7" glyph-name="seven" horiz-adv-x="444" d="M414 669V600L164 -10L80 18L321 594H25V669H414Z" />
+<glyph unicode="8" glyph-name="eight" horiz-adv-x="551" d="M506 302T506 179Q506 124 477 81T394 13T274 -12Q206 -12 154 12T74 79T45 177Q45 239 78 281T177 351Q124 378 99 416T73 507Q73 561 101 600T176 659T276 679Q328 679 374 660T450 603T479 510Q479
+460 451 424T365 359Q506 302 506 179ZM224 610T194 583T163 506Q163 458 192 433T287 387L304 381Q349 407 369 436T389 507Q389 554 360 582T276 610Q224 610 194 583ZM337 61T373 93T410 178Q410 214 396 238T351 281T264 319L239 328Q189 304 165 268T141 177Q141
+122 177 92T275 61Q337 61 373 93Z" />
+<glyph unicode="9" glyph-name="nine" horiz-adv-x="525" d="M365 679T420 610T475 419Q475 282 438 199T325 66T119 -22L98 47Q232 85 303 150T380 323Q357 287 318 265T230 243Q178 243 136 269T70 344T45 458Q45 526 74 576T151 652T259 679Q365 679 420 610ZM328
+315T382 398Q384 509 355 557T261 606Q202 606 170 567T138 456Q138 386 168 351T249 315Q328 315 382 398Z" />
+<glyph unicode=":" glyph-name="colon" horiz-adv-x="240" d="M149 127T169 107T189 58Q189 29 169 9T119 -12Q90 -12 70 8T50 58Q50 87 70 107T119 127Q149 127 169 107ZM149 495T169 475T189 426Q189 397 169 377T119 356Q90 356 70 376T50 426Q50 455 70 475T119
+495Q149 495 169 475Z" />
+<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="240" d="M149 127T169 107T189 58Q189 27 171 -13L104 -166H38L78 0Q65 10 58 25T50 58Q50 87 70 107T119 127Q149 127 169 107ZM149 495T169 475T189 426Q189 397 169 377T119 356Q90 356 70 376T50 426Q50
+455 70 475T119 495Q149 495 169 475Z" />
+<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="500" d="M417 551L450 475L123 333L450 189L417 115L50 286V380L417 551Z" />
+<glyph unicode="=" glyph-name="equal" horiz-adv-x="500" d="M62 389V466H438V389H62ZM62 452V529H438V452H62Z" />
+<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="500" d="M83 551L450 380V286L83 115L50 189L377 333L50 475L83 551Z" />
+<glyph unicode="?" glyph-name="question" horiz-adv-x="459" d="M298 701T341 680T407 622T429 545Q429 506 416 479T383 434T332 394Q290 365 269 341T248 275V230H157V280Q157 323 171 353T206 401T259 442Q297 467 315 487T333 539Q333 580 306 602T232 625Q152
+625 93 553L30 602Q114 701 238 701Q298 701 341 680ZM235 127T255 107T275 58Q275 29 255 9T205 -12Q176 -12 156 8T136 58Q136 87 156 107T205 127Q235 127 255 107Z" />
+<glyph unicode="@" glyph-name="at" horiz-adv-x="1020" d="M660 701T756 648T901 504T950 307Q950 177 900 93T753 9Q697 9 666 40T625 112Q606 68 571 40T481 11Q401 11 355 71T308 231Q308 357 368 424T526 492Q568 492 605 483T683 452V193Q683 131 700 106T751
+80Q857 80 857 305Q857 402 819 474T707 585T526 625Q416 625 334 576T207 439T163 240Q163 129 205 44T330 -89T526 -137Q621 -137 718 -103L743 -174Q687 -194 638 -203T525 -213Q391 -213 288 -158T128 1T70 240Q70 370 127 475T289 640T526 701Q660 701 756
+648ZM567 78T600 164V411Q567 426 529 426Q398 426 398 231Q398 156 422 117T492 78Q567 78 600 164Z" />
+<glyph unicode="A" glyph-name="A" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250Z" />
+<glyph unicode="B" glyph-name="B" horiz-adv-x="608" d="M475 352T519 314T563 196Q563 0 290 0H100V689H263Q394 689 463 646T533 515Q533 455 496 415T404 364Q475 352 519 314ZM195 614V397H299Q359 397 397 426T436 508Q436 568 396 591T273 614H195ZM374
+76T418 101T463 196Q463 264 420 294T308 324H195V76H290Q374 76 418 101Z" />
+<glyph unicode="C" glyph-name="C" horiz-adv-x="560" d="M403 701T445 685T532 633L480 572Q417 623 347 623Q261 623 209 557T156 345Q156 203 208 136T346 68Q390 68 423 83T493 125L540 65Q508 32 458 10T343 -12Q259 -12 194 29T92 151T55 345Q55 458 93
+538T196 660T341 701Q403 701 445 685Z" />
+<glyph unicode="D" glyph-name="D" horiz-adv-x="644" d="M400 689T494 617T589 348Q589 157 495 79T265 0H100V689H244Q400 689 494 617ZM195 613V75H272Q368 75 428 134T488 348Q488 457 457 515T378 593T265 613H195Z" />
+<glyph unicode="E" glyph-name="E" horiz-adv-x="535" d="M473 689L462 613H195V388H427V312H195V76H481V0H100V689H473Z" />
+<glyph unicode="F" glyph-name="F" horiz-adv-x="491" d="M100 0V689H466L455 613H195V378H420V303H195V0H100Z" />
+<glyph unicode="G" glyph-name="G" horiz-adv-x="631" d="M419 701T466 683T561 625L505 567Q468 597 434 610T354 623Q301 623 257 595T184 504T156 345Q156 200 203 133T344 66Q420 66 475 97V305H353L342 382H569V49Q462 -12 344 -12Q208 -12 132 79T55 345Q55
+457 95 537T204 659T354 701Q419 701 466 683Z" />
+<glyph unicode="H" glyph-name="H" horiz-adv-x="680" d="M485 0V323H195V0H100V689H195V401H485V689H580V0H485Z" />
+<glyph unicode="I" glyph-name="I" horiz-adv-x="295" d="M195 689V0H100V689H195Z" />
+<glyph unicode="J" glyph-name="J" horiz-adv-x="305" d="M210 96Q210 -6 166 -57T30 -137L5 -68Q51 -50 74 -29T106 22T115 100V689H210V96Z" />
+<glyph unicode="K" glyph-name="K" horiz-adv-x="589" d="M195 689V0H100V689H195ZM570 689L309 374L589 0H472L200 368L462 689H570Z" />
+<glyph unicode="L" glyph-name="L" horiz-adv-x="498" d="M195 689V83H478L467 0H100V689H195Z" />
+<glyph unicode="M" glyph-name="M" horiz-adv-x="778" d="M716 0H624L600 311Q585 494 583 592L434 78H345L188 593Q188 468 175 304L152 0H62L119 689H247L392 188L530 689H659L716 0Z" />
+<glyph unicode="N" glyph-name="N" horiz-adv-x="683" d="M583 0H456L176 585Q182 516 185 458T189 316V0H100V689H224L507 103Q504 129 499 194T494 313V689H583V0Z" />
+<glyph unicode="O" glyph-name="O" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200 206 133T346 66Q536
+66 536 344Q536 623 346 623Q256 623 206 555Z" />
+<glyph unicode="P" glyph-name="P" horiz-adv-x="581" d="M409 689T479 636T549 476Q549 363 476 308T282 253H195V0H100V689H281Q409 689 479 636ZM361 328T404 360T448 475Q448 549 405 582T280 615H195V328H278Q361 328 404 360Z" />
+<glyph unicode="Q" glyph-name="Q" horiz-adv-x="691" d="M534 39T579 23T666 -23L604 -103Q544 -50 490 -30T344 -10Q258 -10 193 30T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660T600 538T637 344Q637 223 597 152T479 39Q534 39 579 23ZM156
+200T206 133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555T156 343Q156 200 206 133Z" />
+<glyph unicode="R" glyph-name="R" horiz-adv-x="605" d="M302 292H195V0H100V689H281Q410 689 476 640T543 494Q543 422 506 377T394 309L580 0H467L302 292ZM291 365Q366 365 404 395T442 494Q442 558 404 586T280 615H195V365H291Z" />
+<glyph unicode="S" glyph-name="S" horiz-adv-x="545" d="M339 701T388 682T483 621L431 563Q392 594 355 608T274 623Q220 623 185 598T150 525Q150 495 162 475T206 437T301 401Q366 381 409 358T478 295T505 192Q505 132 476 86T391 14T259 -12Q116 -12 25
+77L77 135Q119 101 162 84T258 66Q322 66 364 97T406 189Q406 223 393 245T349 286T257 322Q151 354 102 399T53 521Q53 573 80 614T157 678T270 701Q339 701 388 682Z" />
+<glyph unicode="T" glyph-name="T" horiz-adv-x="517" d="M507 689L497 608H306V0H211V608H15V689H507Z" />
+<glyph unicode="U" glyph-name="U" horiz-adv-x="662" d="M572 221Q572 152 544 100T461 18T330 -12Q215 -12 153 51T90 221V689H185V228Q185 148 221 108T330 68Q404 68 440 107T476 228V689H572V221Z" />
+<glyph unicode="V" glyph-name="V" horiz-adv-x="556" d="M550 689L330 0H228L6 689H108L281 103L454 689H550Z" />
+<glyph unicode="W" glyph-name="W" horiz-adv-x="826" d="M801 689L661 0H539L412 577L284 0H165L25 689H118L229 83L362 689H463L599 83L714 689H801Z" />
+<glyph unicode="X" glyph-name="X" horiz-adv-x="540" d="M325 372L535 0H427L268 305L107 0H5L212 367L23 689H131L270 430L410 689H512L325 372Z" />
+<glyph unicode="Y" glyph-name="Y" horiz-adv-x="550" d="M545 689L323 265V0H227V264L5 689H110L278 348L446 689H545Z" />
+<glyph unicode="Z" glyph-name="Z" horiz-adv-x="522" d="M477 689V612L136 81H477L466 0H30V76L374 609H66V689H477Z" />
+<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="322" d="M272 816V739H152V-40H272V-116H65V816H272Z" />
+<glyph unicode="\" glyph-name="backslash" horiz-adv-x="520" d="M183 807L415 -85L336 -104L105 789L183 807Z" />
+<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="322" d="M257 816V-116H50V-40H170V739H50V816H257Z" />
+<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="540" d="M311 840L500 527H402L269 760L137 527H40L229 840H311Z" />
+<glyph unicode="_" glyph-name="underscore" horiz-adv-x="520" d="M17 -142V-63H503V-142H17Z" />
+<glyph unicode="`" glyph-name="grave" horiz-adv-x="300" d="M71 801L270 687L242 638L30 724L71 801Z" />
+<glyph unicode="a" glyph-name="a" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539 265 539Q358
+539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139Z" />
+<glyph unicode="b" glyph-name="b" horiz-adv-x="594" d="M426 539T479 467T532 264Q532 182 507 120T435 23T325 -12Q242 -12 185 58L176 0H95V739L187 750V461Q244 539 336 539Q426 539 479 467ZM364 61T398 110T433 264Q433 371 401 418T310 466Q240 466 187
+384V132Q208 99 238 80T303 61Q364 61 398 110Z" />
+<glyph unicode="c" glyph-name="c" horiz-adv-x="478" d="M334 539T373 526T448 482L404 424Q376 444 350 453T291 463Q227 463 192 412T156 261Q156 161 191 114T291 66Q322 66 348 75T406 106L448 46Q376 -12 287 -12Q180 -12 119 60T57 259Q57 343 85 406T164
+504T287 539Q334 539 373 526Z" />
+<glyph unicode="d" glyph-name="d" horiz-adv-x="598" d="M503 739V0H422L413 73Q387 33 348 11T261 -12Q167 -12 115 62T62 261Q62 342 87 405T159 503T269 539Q350 539 411 474V750L503 739ZM323 61T353 80T411 139V397Q385 431 356 448T289 466Q228 466 195
+415T161 263Q161 161 192 111T281 61Q323 61 353 80Z" />
+<glyph unicode="e" glyph-name="e" horiz-adv-x="545" d="M493 256T491 232H155Q161 145 199 104T297 63Q335 63 367 74T434 109L474 54Q390 -12 290 -12Q180 -12 119 60T57 258Q57 340 83 403T159 503T276 539Q381 539 437 470T493 279Q493 256 491 232ZM402
+306Q402 384 371 425T278 466Q165 466 155 300H402V306Z" />
+<glyph unicode="f" glyph-name="f" horiz-adv-x="335" d="M232 676T214 658T196 600V527H324L314 456H196V0H104V456H10V527H104V599Q104 667 147 708T269 750Q305 750 333 744T395 723L366 656Q321 676 274 676Q232 676 214 658Z" />
+<glyph unicode="g" glyph-name="g" horiz-adv-x="520" d="M520 503Q490 493 454 490T366 487Q459 445 459 354Q459 275 405 225T258 175Q222 175 191 185Q179 177 172 164T165 136Q165 93 234 93H318Q371 93 412 74T475 22T498 -53Q498 -130 435 -171T251 -213Q166
+-213 117 -196T46 -143T25 -53H108Q108 -85 120 -103T163 -131T251 -141Q334 -141 369 -121T405 -59Q405 -22 377 -3T299 16H216Q149 16 115 44T80 116Q80 142 95 166T138 209Q92 233 71 268T49 355Q49 408 75 450T148 515T252 539Q314 538 356 543T425 558T493
+586L520 503ZM200 473T172 441T143 355Q143 301 172 269T254 236Q308 236 336 267T365 356Q365 473 252 473Q200 473 172 441Z" />
+<glyph unicode="h" glyph-name="h" horiz-adv-x="586" d="M415 539T455 496T496 378V0H404V365Q404 421 383 444T320 467Q279 467 247 443T187 375V0H95V738L187 748V454Q249 539 343 539Q415 539 455 496Z" />
+<glyph unicode="i" glyph-name="i" horiz-adv-x="282" d="M187 527V0H95V527H187ZM169 780T187 762T205 717Q205 690 187 673T140 655Q112 655 94 672T76 717Q76 744 94 762T140 780Q169 780 187 762Z" />
+<glyph unicode="j" glyph-name="j" horiz-adv-x="280" d="M185 32Q185 -41 167 -85T115 -156T18 -212L-9 -145Q30 -127 51 -110T82 -61T93 26V527H185V32ZM168 780T186 762T204 717Q204 690 186 673T139 655Q111 655 93 672T75 717Q75 744 93 762T139 780Q168
+780 186 762Z" />
+<glyph unicode="k" glyph-name="k" horiz-adv-x="512" d="M187 750V0H95V739L187 750ZM490 527L296 294L512 0H402L193 288L387 527H490Z" />
+<glyph unicode="l" glyph-name="l" horiz-adv-x="293" d="M149 -12T120 18T90 104V739L182 750V106Q182 84 189 74T215 64Q234 64 249 70L273 6Q240 -12 200 -12Q149 -12 120 18Z" />
+<glyph unicode="m" glyph-name="m" horiz-adv-x="857" d="M689 539T728 496T767 378V0H675V365Q675 467 601 467Q562 467 535 445T477 374V0H385V365Q385 467 311 467Q271 467 244 444T187 374V0H95V527H174L182 450Q241 539 334 539Q383 539 417 514T467 444Q498
+490 535 514T624 539Q689 539 728 496Z" />
+<glyph unicode="n" glyph-name="n" horiz-adv-x="586" d="M415 539T455 496T496 378V0H404V365Q404 421 383 444T321 467Q279 467 247 443T187 374V0H95V527H174L182 449Q210 491 251 515T343 539Q415 539 455 496Z" />
+<glyph unicode="o" glyph-name="o" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428 465 293 465Q156
+465 156 263Z" />
+<glyph unicode="p" glyph-name="p" horiz-adv-x="594" d="M438 539T485 467T532 264Q532 140 478 64T325 -12Q237 -12 187 48V-202L95 -213V527H174L181 456Q210 496 251 517T337 539Q438 539 485 467ZM433 63T433 264Q433 466 314 466Q275 466 243 443T187 384V127Q207
+96 237 80T303 63Q433 63 433 264Z" />
+<glyph unicode="q" glyph-name="q" horiz-adv-x="598" d="M503 527V-213L411 -202V70Q385 31 347 10T261 -12Q167 -12 115 62T62 261Q62 342 87 405T159 503T269 539Q353 539 417 468L424 527H503ZM323 61T353 80T411 139V397Q385 431 356 448T289 466Q228 466
+195 415T161 263Q161 161 192 111T281 61Q323 61 353 80Z" />
+<glyph unicode="r" glyph-name="r" horiz-adv-x="386" d="M352 539T376 533L359 443Q335 449 313 449Q264 449 234 413T187 301V0H95V527H174L183 420Q204 479 240 509T324 539Q352 539 376 533Z" />
+<glyph unicode="s" glyph-name="s" horiz-adv-x="467" d="M292 539T335 524T417 479L378 421Q342 444 310 455T241 466Q196 466 170 448T144 397Q144 365 168 347T257 312Q345 290 388 252T432 148Q432 70 372 29T224 -12Q104 -12 25 57L74 113Q141 62 222 62Q274
+62 304 83T335 142Q335 169 324 185T286 214T207 241Q123 263 86 300T48 394Q48 435 72 468T140 520T238 539Q292 539 335 524Z" />
+<glyph unicode="t" glyph-name="t" horiz-adv-x="361" d="M361 24Q309 -12 243 -12Q176 -12 139 26T101 138V456H9V527H101V646L193 657V527H318L308 456H193V142Q193 101 207 83T256 64Q287 64 326 85L361 24Z" />
+<glyph unicode="u" glyph-name="u" horiz-adv-x="582" d="M487 0H408L401 82Q371 33 332 11T237 -12Q168 -12 129 30T90 149V527H182V159Q182 105 201 83T263 60Q340 60 395 151V527H487V0Z" />
+<glyph unicode="v" glyph-name="v" horiz-adv-x="492" d="M482 527L303 0H192L10 527H110L248 82L385 527H482Z" />
+<glyph unicode="w" glyph-name="w" horiz-adv-x="717" d="M697 527L577 0H452L360 444L265 0H143L20 527H112L207 64L311 527H414L513 64L609 527H697Z" />
+<glyph unicode="x" glyph-name="x" horiz-adv-x="485" d="M297 282L480 0H369L240 223L109 0H5L189 278L26 527H134L244 334L355 527H459L297 282Z" />
+<glyph unicode="y" glyph-name="y" horiz-adv-x="492" d="M306 -3Q275 -95 220 -148T61 -213L51 -141Q103 -132 134 -115T183 -72T218 0H187L10 527H108L249 67L387 527H482L306 -3Z" />
+<glyph unicode="z" glyph-name="z" horiz-adv-x="437" d="M404 527V457L129 77H407L396 0H25V69L299 449H48V527H404Z" />
+<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="322" d="M277 765Q226 765 204 750T182 697V458Q182 407 164 385T107 349Q147 335 164 314T182 242V3Q182 -34 204 -49T277 -65V-136Q177 -136 136 -102T95 13V235Q95 277 80 294T25 311V387Q64 387 79
+405T95 465V687Q95 767 136 801T277 836V765Z" />
+<glyph unicode="|" glyph-name="bar" horiz-adv-x="403" d="M243 807V-102H160V807H243Z" />
+<glyph unicode="}" glyph-name="braceright" horiz-adv-x="322" d="M145 836T186 802T227 687V465Q227 423 242 405T297 387V311Q258 311 243 294T227 235V13Q227 -67 186 -101T45 -136V-65Q96 -65 118 -50T140 3V242Q140 293 157 314T215 349Q176 362 158 384T140
+458V697Q140 734 118 749T45 765V836Q145 836 186 802Z" />
+<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="488" d="M290 250T269 259T217 288Q199 300 187 306T163 312Q124 312 91 258L35 287Q85 384 172 384Q200 384 221 375T270 348Q290 335 302 329T328 323Q349 323 367 336T398 371L453 341Q406 250 319
+250Q290 250 269 259Z" />
+<glyph unicode="&#xa0;" glyph-name="uni00A0" horiz-adv-x="265" />
+<glyph unicode="&#xa1;" glyph-name="exclamdown" horiz-adv-x="241" d="M150 495T170 475T190 425Q190 396 170 376T121 356Q91 356 71 376T51 425Q51 454 71 474T121 495Q150 495 170 475ZM162 247L173 -202H71L81 247H162Z" />
+<glyph unicode="&#xa2;" glyph-name="cent" horiz-adv-x="478" d="M448 46Q392 1 329 -9V-154H249V-9Q159 3 108 73T57 259Q57 374 108 448T250 536V684H329V536Q394 527 448 482L404 424Q376 444 350 453T291 463Q227 463 192 412T156 261Q156 161 191 114T291
+66Q322 66 348 75T406 106L448 46Z" />
+<glyph unicode="&#xa3;" glyph-name="sterling" horiz-adv-x="520" d="M213 153T200 125T152 77H472L461 0H40V73Q75 86 92 100T115 138T122 205V322H56V382H122V493Q122 576 172 627T311 679Q366 679 410 659T490 596L430 550Q406 578 379 591T315 604Q266 604
+240 576T213 494V382H421V322H213V204Q213 153 200 125Z" />
+<glyph unicode="&#xa4;" glyph-name="currency" horiz-adv-x="560" d="M492 272T455 218L531 143L476 88L398 164Q345 132 278 132Q212 132 160 167L82 88L29 143L107 221Q71 274 71 341Q71 406 106 460L29 540L84 595L162 515Q211 549 278 549Q347 549 399 516L478
+595L531 540L455 463Q492 411 492 341Q492 272 455 218ZM341 205T372 241T404 342Q404 407 373 443T281 479Q222 479 191 443T159 342Q159 277 190 241T281 205Q341 205 372 241Z" />
+<glyph unicode="&#xa5;" glyph-name="yen" horiz-adv-x="536" d="M531 669L340 346H453V284H315V194H453V133H315V0H221V133H82V194H221V284H82V346H196L5 669H107L271 374L434 669H531Z" />
+<glyph unicode="&#xa6;" glyph-name="brokenbar" horiz-adv-x="403" d="M243 807V443H160V807H243ZM243 262V-102H160V262H243Z" />
+<glyph unicode="&#xa7;" glyph-name="section" horiz-adv-x="533" d="M441 136T441 75Q441 8 387 -31T246 -71Q149 -71 78 -21L113 40Q143 20 175 11T249 1Q293 1 321 18T349 66Q349 90 339 105T304 133T225 163Q142 190 106 222T70 311Q70 347 90 378T147 432Q120
+450 107 474T94 533Q94 600 146 638T281 677Q378 677 452 623L417 565Q384 586 352 596T280 606Q235 606 210 589T185 540Q185 516 194 501T230 471T307 440Q390 412 426 379T463 293Q463 224 387 173Q441 136 441 75ZM159 287T178 269T254 233Q297 219 333 203Q353
+221 364 241T375 280Q375 304 366 319T335 347T267 376Q232 389 200 403Q181 384 170 363T159 323Q159 287 178 269Z" />
+<glyph unicode="&#xa8;" glyph-name="dieresis" horiz-adv-x="385" d="M112 768T128 752T145 711Q145 687 129 671T88 654Q63 654 47 670T30 711Q30 735 46 751T88 768Q112 768 128 752ZM322 768T338 752T355 711Q355 687 339 671T297 654Q273 654 257 670T240
+711Q240 735 256 751T297 768Q322 768 338 752Z" />
+<glyph unicode="&#xa9;" glyph-name="copyright" horiz-adv-x="810" d="M492 748T563 708T676 596T718 434Q718 344 677 273T564 161T406 121Q320 121 248 161T134 272T92 434Q92 524 134 595T248 707T406 748Q492 748 563 708ZM334 696T277 663T186 570T153 434Q153
+358 186 299T276 207T406 174Q477 174 534 207T625 299T658 434Q658 510 625 570T535 663T406 696Q334 696 277 663ZM444 625T471 615T525 585L490 538Q452 565 412 565Q371 565 346 533T321 435Q321 372 345 340T412 308Q437 308 456 315T496 339L528 291Q476
+245 409 245Q335 245 290 295T245 435Q245 495 267 538T326 603T408 625Q444 625 471 615Z" />
+<glyph unicode="&#xaa;" glyph-name="ordfeminine" horiz-adv-x="500" d="M313 525V549Q313 588 293 604T230 620Q181 620 117 599L95 661Q173 689 245 689Q402 689 402 554V384Q402 361 410 350T435 333L416 272Q381 276 360 289T327 331Q306 301 274 286T201
+271Q138 271 102 304T65 393Q65 457 114 491T255 525H313ZM280 337T313 390V470H265Q159 470 159 398Q159 369 176 353T224 337Q280 337 313 390ZM71 77H447V0H71V77Z" />
+<glyph unicode="&#xab;" glyph-name="guillemotleft" horiz-adv-x="575" d="M230 535L285 497L150 287L285 77L230 39L55 255V318L230 535ZM465 535L520 497L385 287L520 77L465 39L290 255V318L465 535Z" />
+<glyph unicode="&#xac;" glyph-name="logicalnot" horiz-adv-x="500" d="M438 361V141H355V284H62V361H438Z" />
+<glyph unicode="&#xad;" glyph-name="uni00AD" horiz-adv-x="403" d="M60 274V352H343V274H60Z" />
+<glyph unicode="&#xae;" glyph-name="registered" horiz-adv-x="641" d="M390 750T448 716T540 622T574 493Q574 423 541 365T449 272T319 238Q250 238 192 272T101 364T67 493Q67 563 100 622T192 715T319 750Q390 750 448 716ZM377 287T422 313T493 387T519
+493Q519 552 494 599T423 674T319 701Q263 701 218 674T148 600T122 493Q122 434 147 387T218 314T319 287Q377 287 422 313ZM428 522T410 503T363 474L437 359H370L309 465H285V359H228V635H306Q428 635 428 551Q428 522 410 503ZM285 509H315Q369 509 369 551Q369
+572 356 581T313 591H285V509Z" />
+<glyph unicode="&#xaf;" glyph-name="overscore" horiz-adv-x="333" d="M303 667H30V736H303V667Z" />
+<glyph unicode="&#xb0;" glyph-name="degree" horiz-adv-x="523" d="M176 381T139 400T78 455T55 541Q55 590 78 626T138 682T219 701Q262 701 299 682T360 626T383 540Q383 491 360 455T300 400T219 381Q176 381 139 400ZM256 443T281 468T306 540Q306 587 281
+612T219 638Q182 638 157 613T132 541Q132 494 157 469T219 443Q256 443 281 468Z" />
+<glyph unicode="&#xb1;" glyph-name="plusminus" horiz-adv-x="500" d="M62 0V77H438V0H62ZM292 542V392H438V316H292V167H208V316H63V392H208V542H292Z" />
+<glyph unicode="&#xb2;" glyph-name="uni00B2" horiz-adv-x="400" d="M259 746T296 712T334 626Q334 592 318 561T264 489T155 384H344L336 322H67V380Q151 461 187 499T238 565T254 620Q254 650 236 667T189 684Q163 684 144 674T104 640L55 678Q110 746 195
+746Q259 746 296 712Z" />
+<glyph unicode="&#xb3;" glyph-name="uni00B3" horiz-adv-x="400" d="M261 746T297 716T334 641Q334 603 311 578T248 543Q292 539 320 513T348 441Q348 386 306 350T191 313Q104 313 52 373L97 415Q135 374 187 374Q224 374 245 393T267 445Q267 481 247 496T187
+512H153L162 568H185Q217 568 237 584T257 631Q257 657 239 672T191 687Q166 687 145 678T103 650L63 694Q121 746 197 746Q261 746 297 716Z" />
+<glyph unicode="&#xb4;" glyph-name="acute" horiz-adv-x="300" d="M229 801L270 724L58 638L30 687L229 801Z" />
+<glyph unicode="&#xb5;" glyph-name="uni00B5" horiz-adv-x="588" d="M487 80T513 0L427 -12Q416 14 412 33T403 85V86Q379 44 344 16T265 -12Q230 -12 208 -1T169 38Q178 10 182 -20T186 -96V-202L95 -213V527H187V156Q187 67 266 67Q346 67 395 163V527H487V180Q487
+80 513 0Z" />
+<glyph unicode="&#xb6;" glyph-name="paragraph" horiz-adv-x="734" d="M594 689V-202L511 -215V616H397V-202L314 -215V282Q201 288 146 343T90 486Q90 583 156 636T336 689H594Z" />
+<glyph unicode="&#xb7;" glyph-name="middot" horiz-adv-x="240" d="M149 380T169 360T189 311Q189 282 169 262T119 241Q90 241 70 261T50 311Q50 340 70 360T119 380Q149 380 169 360Z" />
+<glyph unicode="&#xb8;" glyph-name="cedilla" horiz-adv-x="275" d="M152 -56Q200 -60 222 -83T245 -141Q245 -189 210 -215T121 -241Q93 -241 69 -235T30 -217L55 -165Q85 -181 118 -181Q141 -181 154 -172T168 -141Q168 -120 147 -110T79 -99L93 16H152V-56Z" />
+<glyph unicode="&#xb9;" glyph-name="uni00B9" horiz-adv-x="400" d="M274 739V322H197V660L99 603L65 656L205 739H274Z" />
+<glyph unicode="&#xba;" glyph-name="ordmasculine" horiz-adv-x="500" d="M343 689T393 634T444 480Q444 385 393 328T250 271Q158 271 107 327T56 480Q56 575 108 632T251 689Q343 689 393 634ZM151 620T151 480Q151 340 250 340Q349 340 349 480Q349 552 325
+586T251 620Q151 620 151 480ZM62 0V77H438V0H62Z" />
+<glyph unicode="&#xbb;" glyph-name="guillemotright" horiz-adv-x="566" d="M110 535L285 318V255L110 39L55 77L190 287L55 497L110 535ZM336 535L511 318V255L336 39L281 77L416 287L281 497L336 535Z" />
+<glyph unicode="&#xbc;" glyph-name="onequarter" horiz-adv-x="932" d="M274 689V272H197V610L99 553L65 606L205 689H274ZM640 750L699 721L293 -78L233 -49L640 750ZM889 156V96H836V0H760V96H574V150L702 424L768 399L655 156H761L768 261H836V156H889Z" />
+<glyph unicode="&#xbd;" glyph-name="onehalf" horiz-adv-x="932" d="M274 689V272H197V610L99 553L65 606L205 689H274ZM640 750L699 721L293 -78L233 -49L640 750ZM791 424T828 390T866 304Q866 270 850 239T796 167T687 62H876L868 0H599V58Q683 139 719 177T770
+243T786 298Q786 328 768 345T721 362Q695 362 676 352T636 318L587 356Q642 424 727 424Q791 424 828 390Z" />
+<glyph unicode="&#xbe;" glyph-name="threequarters" horiz-adv-x="932" d="M261 696T297 666T334 591Q334 553 311 528T248 493Q292 489 320 463T348 391Q348 336 306 300T191 263Q104 263 52 323L97 365Q135 324 187 324Q224 324 245 343T267 395Q267 431 247
+446T187 462H153L162 518H185Q217 518 237 534T257 581Q257 607 239 622T191 637Q166 637 145 628T103 600L63 644Q121 696 197 696Q261 696 297 666ZM640 750L699 721L293 -78L233 -49L640 750ZM889 156V96H836V0H760V96H574V150L702 424L768 399L655 156H761L768
+261H836V156H889Z" />
+<glyph unicode="&#xbf;" glyph-name="questiondown" horiz-adv-x="459" d="M224 356T204 376T184 425Q184 454 204 474T254 495Q283 495 303 475T323 425Q323 396 303 376T254 356Q224 356 204 376ZM161 -215T118 -194T52 -136T30 -59Q30 -19 43 8T77 53T129 92Q170
+120 190 143T211 206V247H302V201Q302 159 288 130T254 84T201 44Q163 20 145 0T126 -53Q126 -94 153 -116T227 -139Q307 -139 366 -67L429 -116Q345 -215 221 -215Q161 -215 118 -194Z" />
+<glyph unicode="&#xc0;" glyph-name="Agrave" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM196 911L397 804L373 755L157 834L196 911Z" />
+<glyph unicode="&#xc1;" glyph-name="Aacute" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM367 911L407 834L191 755L167 804L367 911Z" />
+<glyph unicode="&#xc2;" glyph-name="Acircumflex" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM160 759L120 804L256 914H317L452 804L413 759L286 840L160 759Z" />
+<glyph unicode="&#xc3;" glyph-name="Atilde" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM326 782T311 789T276 809Q261 820 251 825T229 830Q213 830 201 819T176 784L120 812Q139 852 166 876T229
+900Q250 900 265 893T299 872Q302 870 311 864T329 855T345 852Q360 852 372 862T398 896L454 868Q435 826 407 804T345 782Q326 782 311 789Z" />
+<glyph unicode="&#xc4;" glyph-name="Adieresis" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM206 894T222 878T239 837Q239 813 223 797T182 780Q157 780 141 796T124 837Q124 861 140 877T182 894Q206
+894 222 878ZM416 894T432 878T449 837Q449 813 433 797T391 780Q367 780 351 796T334 837Q334 861 350 877T391 894Q416 894 432 878Z" />
+<glyph unicode="&#xc5;" glyph-name="Aring" horiz-adv-x="573" d="M467 0L415 173H154L102 0H6L227 689H347L567 0H467ZM177 250H392L285 610L177 250ZM337 962T369 932T401 856Q401 811 369 781T287 750Q237 750 205 780T173 856Q173 901 205 931T287 962Q337
+962 369 932ZM262 912T248 897T234 856Q234 830 248 815T287 800Q311 800 325 815T340 856Q340 882 326 897T287 912Q262 912 248 897Z" />
+<glyph unicode="&#xc6;" glyph-name="AE" horiz-adv-x="816" d="M535 76H762V0H458L418 173H150L85 0H-12L262 689H721L710 613H401L457 387H712V311H476L535 76ZM179 250H400L316 613L179 250Z" />
+<glyph unicode="&#xc7;" glyph-name="Ccedilla" horiz-adv-x="560" d="M512 36T471 16T376 -10V-56Q424 -60 446 -83T469 -141Q469 -189 434 -215T345 -241Q317 -241 293 -235T254 -217L279 -165Q309 -181 342 -181Q365 -181 378 -172T392 -141Q392 -120 371 -110T303
+-99L314 -11Q237 -4 179 39T88 160T55 345Q55 458 93 538T196 660T341 701Q403 701 445 685T532 633L480 572Q417 623 347 623Q261 623 209 557T156 345Q156 203 208 136T346 68Q390 68 423 83T493 125L540 65Q512 36 471 16Z" />
+<glyph unicode="&#xc8;" glyph-name="Egrave" horiz-adv-x="535" d="M473 689L462 613H195V388H427V312H195V76H481V0H100V689H473ZM199 911L400 804L376 755L160 834L199 911Z" />
+<glyph unicode="&#xc9;" glyph-name="Eacute" horiz-adv-x="535" d="M473 689L462 613H195V388H427V312H195V76H481V0H100V689H473ZM370 911L410 834L194 755L170 804L370 911Z" />
+<glyph unicode="&#xca;" glyph-name="Ecircumflex" horiz-adv-x="535" d="M473 689L462 613H195V388H427V312H195V76H481V0H100V689H473ZM163 759L123 804L259 914H320L455 804L416 759L289 840L163 759Z" />
+<glyph unicode="&#xcb;" glyph-name="Edieresis" horiz-adv-x="535" d="M473 689L462 613H195V388H427V312H195V76H481V0H100V689H473ZM209 894T225 878T242 837Q242 813 226 797T185 780Q160 780 144 796T127 837Q127 861 143 877T185 894Q209 894 225 878ZM419
+894T435 878T452 837Q452 813 436 797T394 780Q370 780 354 796T337 837Q337 861 353 877T394 894Q419 894 435 878Z" />
+<glyph unicode="&#xcc;" glyph-name="Igrave" horiz-adv-x="295" d="M195 689V0H100V689H195ZM56 911L257 804L233 755L17 834L56 911Z" />
+<glyph unicode="&#xcd;" glyph-name="Iacute" horiz-adv-x="295" d="M195 689V0H100V689H195ZM227 911L267 834L51 755L27 804L227 911Z" />
+<glyph unicode="&#xce;" glyph-name="Icircumflex" horiz-adv-x="295" d="M195 689V0H100V689H195ZM20 759L-20 804L116 914H177L312 804L273 759L146 840L20 759Z" />
+<glyph unicode="&#xcf;" glyph-name="Idieresis" horiz-adv-x="295" d="M195 689V0H100V689H195ZM66 894T82 878T99 837Q99 813 83 797T42 780Q17 780 1 796T-16 837Q-16 861 0 877T42 894Q66 894 82 878ZM276 894T292 878T309 837Q309 813 293 797T251 780Q227
+780 211 796T194 837Q194 861 210 877T251 894Q276 894 292 878Z" />
+<glyph unicode="&#xd0;" glyph-name="Eth" horiz-adv-x="656" d="M412 689T506 617T601 348Q601 157 507 79T277 0H112V318H20V388H112V689H256Q412 689 506 617ZM380 75T440 134T500 348Q500 457 469 515T390 593T277 613H207V388H364V318H207V75H284Q380 75 440 134Z" />
+<glyph unicode="&#xd1;" glyph-name="Ntilde" horiz-adv-x="683" d="M583 0H456L176 585Q182 516 185 458T189 316V0H100V689H224L507 103Q504 129 499 194T494 313V689H583V0ZM392 782T377 789T342 809Q327 820 317 825T295 830Q279 830 267 819T242 784L186
+812Q205 852 232 876T295 900Q316 900 331 893T365 872Q368 870 377 864T395 855T411 852Q426 852 438 862T464 896L520 868Q501 826 473 804T411 782Q392 782 377 789Z" />
+<glyph unicode="&#xd2;" glyph-name="Ograve" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200 206
+133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555ZM255 911L456 804L432 755L216 834L255 911Z" />
+<glyph unicode="&#xd3;" glyph-name="Oacute" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200 206
+133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555ZM426 911L466 834L250 755L226 804L426 911Z" />
+<glyph unicode="&#xd4;" glyph-name="Ocircumflex" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200
+206 133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555ZM219 759L179 804L315 914H376L511 804L472 759L345 840L219 759Z" />
+<glyph unicode="&#xd5;" glyph-name="Otilde" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200 206
+133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555ZM385 782T370 789T335 809Q320 820 310 825T288 830Q272 830 260 819T235 784L179 812Q198 852 225 876T288 900Q309 900 324 893T358 872Q361 870 370 864T388 855T404 852Q419 852 431 862T457 896L513
+868Q494 826 466 804T404 782Q385 782 370 789Z" />
+<glyph unicode="&#xd6;" glyph-name="Odieresis" horiz-adv-x="692" d="M433 701T498 660T600 538T637 344Q637 232 601 152T499 30T346 -12Q259 -12 194 29T92 150T55 343Q55 454 91 535T194 658T346 701Q433 701 498 660ZM256 623T206 555T156 343Q156 200 206
+133T346 66Q536 66 536 344Q536 623 346 623Q256 623 206 555ZM265 894T281 878T298 837Q298 813 282 797T241 780Q216 780 200 796T183 837Q183 861 199 877T241 894Q265 894 281 878ZM475 894T491 878T508 837Q508 813 492 797T450 780Q426 780 410 796T393 837Q393
+861 409 877T450 894Q475 894 491 878Z" />
+<glyph unicode="&#xd7;" glyph-name="multiply" horiz-adv-x="500" d="M372 486L428 429L308 309L428 185L372 129L252 253L128 129L72 185L192 305L72 429L128 486L248 361L372 486Z" />
+<glyph unicode="&#xd8;" glyph-name="Oslash" horiz-adv-x="692" d="M558 628T597 546T637 344Q637 232 601 152T499 30T346 -12Q310 -12 279 -5L244 -127L165 -106L205 22Q134 62 95 143T55 343Q55 454 91 535T194 658T346 701Q383 701 412 694L449 819L528 798L486
+667Q558 628 597 546ZM256 623T206 555T156 343Q156 158 238 97L396 618Q369 623 346 623Q256 623 206 555ZM536 66T536 344Q536 443 515 504T452 594L296 71Q321 66 346 66Q536 66 536 344Z" />
+<glyph unicode="&#xd9;" glyph-name="Ugrave" horiz-adv-x="662" d="M572 221Q572 152 544 100T461 18T330 -12Q215 -12 153 51T90 221V689H185V228Q185 148 221 108T330 68Q404 68 440 107T476 228V689H572V221ZM240 911L441 804L417 755L201 834L240 911Z" />
+<glyph unicode="&#xda;" glyph-name="Uacute" horiz-adv-x="662" d="M572 221Q572 152 544 100T461 18T330 -12Q215 -12 153 51T90 221V689H185V228Q185 148 221 108T330 68Q404 68 440 107T476 228V689H572V221ZM411 911L451 834L235 755L211 804L411 911Z" />
+<glyph unicode="&#xdb;" glyph-name="Ucircumflex" horiz-adv-x="662" d="M572 221Q572 152 544 100T461 18T330 -12Q215 -12 153 51T90 221V689H185V228Q185 148 221 108T330 68Q404 68 440 107T476 228V689H572V221ZM204 759L164 804L300 914H361L496 804L457
+759L330 840L204 759Z" />
+<glyph unicode="&#xdc;" glyph-name="Udieresis" horiz-adv-x="662" d="M572 221Q572 152 544 100T461 18T330 -12Q215 -12 153 51T90 221V689H185V228Q185 148 221 108T330 68Q404 68 440 107T476 228V689H572V221ZM250 894T266 878T283 837Q283 813 267 797T226
+780Q201 780 185 796T168 837Q168 861 184 877T226 894Q250 894 266 878ZM460 894T476 878T493 837Q493 813 477 797T435 780Q411 780 395 796T378 837Q378 861 394 877T435 894Q460 894 476 878Z" />
+<glyph unicode="&#xdd;" glyph-name="Yacute" horiz-adv-x="550" d="M545 689L323 265V0H227V264L5 689H110L278 348L446 689H545ZM355 911L395 834L179 755L155 804L355 911Z" />
+<glyph unicode="&#xde;" glyph-name="Thorn" horiz-adv-x="581" d="M409 571T479 517T549 354Q549 238 476 183T282 127H195V0H100V689H195V571H281Q409 571 479 517ZM362 202T405 235T448 353Q448 430 405 463T280 497H195V202H278Q362 202 405 235Z" />
+<glyph unicode="&#xdf;" glyph-name="germandbls" horiz-adv-x="593" d="M351 750T391 731T454 680T476 607Q476 566 459 542T410 492Q386 472 376 459T365 427Q365 404 382 387T434 346Q472 320 495 299T536 244T553 162Q553 110 529 71T463 10T375 -12Q316 -12
+273 11L300 75Q326 62 366 62Q408 62 433 88T459 163Q459 208 436 236T366 297Q323 328 301 354T278 420Q278 453 292 472T335 515Q362 537 375 555T388 602Q388 639 362 658T295 678Q187 678 187 539V0H95V539Q95 639 147 694T296 750Q351 750 391 731Z" />
+<glyph unicode="&#xe0;" glyph-name="agrave" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539 265
+539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM192 801L391 687L363 638L151 724L192 801Z" />
+<glyph unicode="&#xe1;" glyph-name="aacute" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539 265
+539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM340 801L381 724L169 638L141 687L340 801Z" />
+<glyph unicode="&#xe2;" glyph-name="acircumflex" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539
+265 539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM134 634L95 679L230 792H291L427 679L387 634L261 718L134 634Z" />
+<glyph unicode="&#xe3;" glyph-name="atilde" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539 265
+539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM300 656T285 663T250 683Q235 694 225 699T203 704Q187 704 175 693T150 658L94 686Q113 726 140 750T203 774Q224 774 239 767T273
+746Q276 744 285 738T303 729T319 726Q334 726 346 736T372 770L428 742Q409 700 381 678T319 656Q300 656 285 663Z" />
+<glyph unicode="&#xe4;" glyph-name="adieresis" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539
+265 539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM180 768T196 752T213 711Q213 687 197 671T156 654Q131 654 115 670T98 711Q98 735 114 751T156 768Q180 768 196 752ZM390
+768T406 752T423 711Q423 687 407 671T365 654Q341 654 325 670T308 711Q308 735 324 751T365 768Q390 768 406 752Z" />
+<glyph unicode="&#xe5;" glyph-name="aring" horiz-adv-x="544" d="M450 91T461 76T494 52L473 -12Q432 -7 407 11T370 67Q317 -12 213 -12Q135 -12 90 32T45 147Q45 231 105 276T277 321H358V360Q358 416 331 440T248 464Q190 464 106 436L83 503Q181 539 265
+539Q358 539 404 494T450 364V123Q450 91 461 76ZM313 57T358 139V260H289Q143 260 143 152Q143 105 166 81T234 57Q313 57 358 139ZM311 836T343 806T375 730Q375 685 343 655T261 624Q211 624 179 654T147 730Q147 775 179 805T261 836Q311 836 343 806ZM236
+786T222 771T208 730Q208 704 222 689T261 674Q285 674 299 689T314 730Q314 756 300 771T261 786Q236 786 222 771Z" />
+<glyph unicode="&#xe6;" glyph-name="ae" horiz-adv-x="849" d="M797 256T795 232H459Q465 145 503 104T601 63Q639 63 671 74T738 109L778 54Q694 -12 594 -12Q531 -12 483 13T404 85Q368 33 323 11T216 -12Q137 -12 91 32T45 147Q45 231 107 276T280 321H361V360Q361
+416 334 440T251 464Q193 464 109 436L86 503Q184 539 268 539Q382 539 425 455Q482 539 584 539Q686 539 741 470T797 279Q797 256 795 232ZM706 306Q706 384 675 425T582 466Q469 466 459 300H706V306ZM279 57T312 79T376 149Q361 197 361 257V260H292Q146 260
+146 152Q146 105 169 81T237 57Q279 57 312 79Z" />
+<glyph unicode="&#xe7;" glyph-name="ccedilla" horiz-adv-x="478" d="M385 -5T308 -11V-56Q356 -60 378 -83T401 -141Q401 -189 366 -215T277 -241Q249 -241 225 -235T186 -217L211 -165Q241 -181 274 -181Q297 -181 310 -172T324 -141Q324 -120 303 -110T235
+-99L246 -9Q157 5 107 75T57 259Q57 343 85 406T164 504T287 539Q334 539 373 526T448 482L404 424Q376 444 350 453T291 463Q227 463 192 412T156 261Q156 161 191 114T291 66Q322 66 348 75T406 106L448 46Q385 -5 308 -11Z" />
+<glyph unicode="&#xe8;" glyph-name="egrave" horiz-adv-x="545" d="M493 256T491 232H155Q161 145 199 104T297 63Q335 63 367 74T434 109L474 54Q390 -12 290 -12Q180 -12 119 60T57 258Q57 340 83 403T159 503T276 539Q381 539 437 470T493 279Q493 256 491
+232ZM402 306Q402 384 371 425T278 466Q165 466 155 300H402V306ZM210 801L409 687L381 638L169 724L210 801Z" />
+<glyph unicode="&#xe9;" glyph-name="eacute" horiz-adv-x="545" d="M493 256T491 232H155Q161 145 199 104T297 63Q335 63 367 74T434 109L474 54Q390 -12 290 -12Q180 -12 119 60T57 258Q57 340 83 403T159 503T276 539Q381 539 437 470T493 279Q493 256 491
+232ZM402 306Q402 384 371 425T278 466Q165 466 155 300H402V306ZM358 801L399 724L187 638L159 687L358 801Z" />
+<glyph unicode="&#xea;" glyph-name="ecircumflex" horiz-adv-x="545" d="M493 256T491 232H155Q161 145 199 104T297 63Q335 63 367 74T434 109L474 54Q390 -12 290 -12Q180 -12 119 60T57 258Q57 340 83 403T159 503T276 539Q381 539 437 470T493 279Q493 256
+491 232ZM402 306Q402 384 371 425T278 466Q165 466 155 300H402V306ZM152 634L113 679L248 792H309L445 679L405 634L279 718L152 634Z" />
+<glyph unicode="&#xeb;" glyph-name="edieresis" horiz-adv-x="545" d="M493 256T491 232H155Q161 145 199 104T297 63Q335 63 367 74T434 109L474 54Q390 -12 290 -12Q180 -12 119 60T57 258Q57 340 83 403T159 503T276 539Q381 539 437 470T493 279Q493 256
+491 232ZM402 306Q402 384 371 425T278 466Q165 466 155 300H402V306ZM198 768T214 752T231 711Q231 687 215 671T174 654Q149 654 133 670T116 711Q116 735 132 751T174 768Q198 768 214 752ZM408 768T424 752T441 711Q441 687 425 671T383 654Q359 654 343 670T326
+711Q326 735 342 751T383 768Q408 768 424 752Z" />
+<glyph unicode="&#xec;" glyph-name="igrave" horiz-adv-x="282" d="M187 527V0H95V527H187ZM72 801L271 687L243 638L31 724L72 801Z" />
+<glyph unicode="&#xed;" glyph-name="iacute" horiz-adv-x="282" d="M187 527V0H95V527H187ZM220 801L261 724L49 638L21 687L220 801Z" />
+<glyph unicode="&#xee;" glyph-name="icircumflex" horiz-adv-x="282" d="M187 527V0H95V527H187ZM14 634L-25 679L110 792H171L307 679L267 634L141 718L14 634Z" />
+<glyph unicode="&#xef;" glyph-name="idieresis" horiz-adv-x="282" d="M187 527V0H95V527H187ZM60 768T76 752T93 711Q93 687 77 671T36 654Q11 654 -5 670T-22 711Q-22 735 -6 751T36 768Q60 768 76 752ZM270 768T286 752T303 711Q303 687 287 671T245 654Q221
+654 205 670T188 711Q188 735 204 751T245 768Q270 768 286 752Z" />
+<glyph unicode="&#xf0;" glyph-name="eth" horiz-adv-x="570" d="M432 596T470 501T508 265Q508 182 479 120T398 23T278 -12Q216 -12 166 17T86 102T57 235Q57 297 79 352T147 441T258 475Q349 475 405 408Q393 471 365 519T286 607L214 537L151 569L225 644Q173
+668 112 680L132 750Q217 733 281 702L351 776L405 729L342 664Q432 596 470 501ZM340 61T377 114T415 266Q415 287 413 325Q387 364 353 383T272 403Q151 403 151 239Q151 153 185 107T277 61Q340 61 377 114Z" />
+<glyph unicode="&#xf1;" glyph-name="ntilde" horiz-adv-x="586" d="M415 539T455 496T496 378V0H404V365Q404 421 383 444T321 467Q279 467 247 443T187 374V0H95V527H174L182 449Q210 491 251 515T343 539Q415 539 455 496ZM337 656T322 663T287 683Q272 694
+262 699T240 704Q224 704 212 693T187 658L131 686Q150 726 177 750T240 774Q261 774 276 767T310 746Q313 744 322 738T340 729T356 726Q371 726 383 736T409 770L465 742Q446 700 418 678T356 656Q337 656 322 663Z" />
+<glyph unicode="&#xf2;" glyph-name="ograve" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428 465
+293 465Q156 465 156 263ZM223 801L422 687L394 638L182 724L223 801Z" />
+<glyph unicode="&#xf3;" glyph-name="oacute" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428 465
+293 465Q156 465 156 263ZM371 801L412 724L200 638L172 687L371 801Z" />
+<glyph unicode="&#xf4;" glyph-name="ocircumflex" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428
+465 293 465Q156 465 156 263ZM165 634L126 679L261 792H322L458 679L418 634L292 718L165 634Z" />
+<glyph unicode="&#xf5;" glyph-name="otilde" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428 465
+293 465Q156 465 156 263ZM331 656T316 663T281 683Q266 694 256 699T234 704Q218 704 206 693T181 658L125 686Q144 726 171 750T234 774Q255 774 270 767T304 746Q307 744 316 738T334 729T350 726Q365 726 377 736T403 770L459 742Q440 700 412 678T350 656Q331
+656 316 663Z" />
+<glyph unicode="&#xf6;" glyph-name="odieresis" horiz-adv-x="584" d="M404 539T465 465T527 264Q527 182 499 120T418 23T292 -12Q181 -12 119 62T57 263Q57 345 85 407T166 504T293 539Q404 539 465 465ZM156 465T156 263Q156 62 292 62Q428 62 428 264Q428
+465 293 465Q156 465 156 263ZM211 768T227 752T244 711Q244 687 228 671T187 654Q162 654 146 670T129 711Q129 735 145 751T187 768Q211 768 227 752ZM421 768T437 752T454 711Q454 687 438 671T396 654Q372 654 356 670T339 711Q339 735 355 751T396 768Q421
+768 437 752Z" />
+<glyph unicode="&#xf7;" glyph-name="divide" horiz-adv-x="500" d="M280 174T300 154T320 105Q320 76 300 56T250 35Q221 35 201 55T181 105Q181 134 201 154T250 174Q280 174 300 154ZM280 631T300 611T320 562Q320 533 300 513T250 492Q221 492 201 512T181
+562Q181 591 201 611T250 631Q280 631 300 611ZM62 294V371H438V294H62Z" />
+<glyph unicode="&#xf8;" glyph-name="oslash" horiz-adv-x="584" d="M470 475T498 413T527 264Q527 182 499 120T418 23T292 -12Q268 -12 241 -7L202 -130L127 -108L169 19Q115 52 86 115T57 263Q57 345 85 407T166 504T293 539Q317 539 344 534L383 656L458 634L416
+508Q470 475 498 413ZM156 465T156 263Q156 134 204 89L328 462Q311 465 293 465Q156 465 156 263ZM428 62T428 264Q428 331 417 373T381 437L258 65Q273 62 292 62Q428 62 428 264Z" />
+<glyph unicode="&#xf9;" glyph-name="ugrave" horiz-adv-x="582" d="M487 0H408L401 82Q371 33 332 11T237 -12Q168 -12 129 30T90 149V527H182V159Q182 105 201 83T263 60Q340 60 395 151V527H487V0ZM220 801L419 687L391 638L179 724L220 801Z" />
+<glyph unicode="&#xfa;" glyph-name="uacute" horiz-adv-x="582" d="M487 0H408L401 82Q371 33 332 11T237 -12Q168 -12 129 30T90 149V527H182V159Q182 105 201 83T263 60Q340 60 395 151V527H487V0ZM368 801L409 724L197 638L169 687L368 801Z" />
+<glyph unicode="&#xfb;" glyph-name="ucircumflex" horiz-adv-x="582" d="M487 0H408L401 82Q371 33 332 11T237 -12Q168 -12 129 30T90 149V527H182V159Q182 105 201 83T263 60Q340 60 395 151V527H487V0ZM162 634L123 679L258 792H319L455 679L415 634L289 718L162
+634Z" />
+<glyph unicode="&#xfc;" glyph-name="udieresis" horiz-adv-x="582" d="M487 0H408L401 82Q371 33 332 11T237 -12Q168 -12 129 30T90 149V527H182V159Q182 105 201 83T263 60Q340 60 395 151V527H487V0ZM208 768T224 752T241 711Q241 687 225 671T184 654Q159
+654 143 670T126 711Q126 735 142 751T184 768Q208 768 224 752ZM418 768T434 752T451 711Q451 687 435 671T393 654Q369 654 353 670T336 711Q336 735 352 751T393 768Q418 768 434 752Z" />
+<glyph unicode="&#xfd;" glyph-name="yacute" horiz-adv-x="492" d="M306 -3Q275 -95 220 -148T61 -213L51 -141Q103 -132 134 -115T183 -72T218 0H187L10 527H108L249 67L387 527H482L306 -3ZM325 801L366 724L154 638L126 687L325 801Z" />
+<glyph unicode="&#xfe;" glyph-name="thorn" horiz-adv-x="594" d="M438 539T485 467T532 264Q532 140 478 64T325 -12Q237 -12 187 48V-198L95 -213V739L187 750V463Q215 500 254 519T337 539Q438 539 485 467ZM433 63T433 264Q433 466 314 466Q275 466 243 443T187
+384V127Q207 96 237 80T303 63Q433 63 433 264Z" />
+<glyph unicode="&#xff;" glyph-name="ydieresis" horiz-adv-x="492" d="M306 -3Q275 -95 220 -148T61 -213L51 -141Q103 -132 134 -115T183 -72T218 0H187L10 527H108L249 67L387 527H482L306 -3ZM165 768T181 752T198 711Q198 687 182 671T141 654Q116 654 100
+670T83 711Q83 735 99 751T141 768Q165 768 181 752ZM375 768T391 752T408 711Q408 687 392 671T350 654Q326 654 310 670T293 711Q293 735 309 751T350 768Q375 768 391 752Z" />
+<glyph unicode="&#x2013;" glyph-name="endash" horiz-adv-x="520" d="M32 274V352H488V274H32Z" />
+<glyph unicode="&#x2014;" glyph-name="emdash" horiz-adv-x="790" d="M32 274V352H758V274H32Z" />
+<glyph unicode="&#x2018;" glyph-name="quoteleft" horiz-adv-x="228" d="M82 490T63 508T44 553Q44 565 47 577T61 611L128 753H188L148 603Q174 583 174 553Q174 527 155 509T109 490Q82 490 63 508Z" />
+<glyph unicode="&#x2019;" glyph-name="quoteright" horiz-adv-x="228" d="M146 753T165 735T184 690Q184 678 181 666T167 632L100 490H40L80 640Q54 660 54 690Q54 716 73 734T119 753Q146 753 165 735Z" />
+<glyph unicode="&#x201a;" glyph-name="quotesinglbase" horiz-adv-x="228" d="M146 107T165 89T184 44Q184 32 181 20T167 -14L100 -156H40L80 -6Q54 14 54 44Q54 70 73 88T119 107Q146 107 165 89Z" />
+<glyph unicode="&#x201c;" glyph-name="quotedblleft" horiz-adv-x="406" d="M82 490T63 508T44 553Q44 565 47 577T61 611L128 753H188L148 603Q174 583 174 553Q174 527 155 509T109 490Q82 490 63 508ZM260 490T241 508T222 553Q222 565 225 577T239 611L306
+753H366L326 603Q352 583 352 553Q352 527 333 509T287 490Q260 490 241 508Z" />
+<glyph unicode="&#x201d;" glyph-name="quotedblright" horiz-adv-x="406" d="M146 753T165 735T184 690Q184 678 181 666T167 632L100 490H40L80 640Q54 660 54 690Q54 716 73 734T119 753Q146 753 165 735ZM324 753T343 735T362 690Q362 678 359 666T345 632L278
+490H218L258 640Q232 660 232 690Q232 716 251 734T297 753Q324 753 343 735Z" />
+<glyph unicode="&#x201e;" glyph-name="quotedblbase" horiz-adv-x="406" d="M146 107T165 89T184 44Q184 32 181 20T167 -14L100 -156H40L80 -6Q54 14 54 44Q54 70 73 88T119 107Q146 107 165 89ZM324 107T343 89T362 44Q362 32 359 20T345 -14L278 -156H218L258
+-6Q232 14 232 44Q232 70 251 88T297 107Q324 107 343 89Z" />
+<glyph unicode="&#x2022;" glyph-name="bullet" horiz-adv-x="324" d="M210 454T242 422T274 341Q274 293 242 261T162 229Q114 229 82 261T50 342Q50 390 82 422T162 454Q210 454 242 422Z" />
+<glyph unicode="&#x2039;" glyph-name="guilsinglleft" horiz-adv-x="340" d="M230 535L285 497L150 287L285 77L230 39L55 255V318L230 535Z" />
+<glyph unicode="&#x203a;" glyph-name="guilsinglright" horiz-adv-x="340" d="M110 535L285 318V255L110 39L55 77L190 287L55 497L110 535Z" />
+</font>
+</defs>
+</svg>
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.ttf b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.ttf
new file mode 100644
index 000000000..62b85845a
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.ttf differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff
new file mode 100644
index 000000000..014ac3179
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff2 b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff2
new file mode 100644
index 000000000..bf3ad9a49
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/Fira-Sans-regular.woff2 differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/LICENSE.txt b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/LICENSE.txt
new file mode 100644
index 000000000..a2c1ae225
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Fira-Sans-regular/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/LICENSE.txt b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/LICENSE.txt
new file mode 100644
index 000000000..5f3451c67
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2012, vernon adams (vern@newtypography.co.uk), with Reserved Font Names 'Oxygen'
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.eot b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.eot
new file mode 100644
index 000000000..0fe63cc36
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.eot differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.svg b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.svg
new file mode 100644
index 000000000..dffbcc9cf
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.svg
@@ -0,0 +1,307 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs >
+<font id="Oxygen" horiz-adv-x="978" ><font-face
+ font-family="Oxygen"
+ units-per-em="2048"
+ panose-1="2 0 8 3 0 0 0 0 0 0"
+ ascent="2103"
+ descent="-483"
+ alphabetic="0" />
+<glyph unicode=" " horiz-adv-x="541" />
+<glyph unicode="!" horiz-adv-x="446" d="M193 449L108 1162V1458H349V1162L259 449H193ZM224 -18Q159 -18 114 27T69 134Q69 197 114 243T224 289Q288 289 332 243T377 134Q377 72 333 27T224 -18Z" />
+<glyph unicode="&quot;" horiz-adv-x="784" d="M143 955L108 1470H332L302 955H143ZM487 955L454 1470H677L646 955H487Z" />
+<glyph unicode="#" horiz-adv-x="1192" d="M178 -15L255 404H53L61 583H288L343 898H131L139 1077H375L455 1458H650L574 1077H767L841 1458H1031L956 1077H1137L1125 899H923L863 583H1058L1048 404H833L753 -15H557L636 404H446L367 -15H178ZM478 583H672L733
+899H540L478 583Z" />
+<glyph unicode="$" horiz-adv-x="1194" d="M558 -212L556 -20Q301 -17 94 102L160 317Q358 208 558 202V636Q438 671 396 688Q101 792 101 1076Q101 1261 225 1368T558 1489V1643H656V1491Q896 1484 1075 1382L993 1184Q813 1265 656 1271V878Q664 875 680 870T715
+859T742 851Q943 785 1029 687T1116 414Q1116 225 993 114T656 -16V-212H558ZM558 911V1267Q473 1256 429 1213T381 1088Q381 966 502 929Q516 924 558 911ZM656 208Q841 238 841 416Q841 544 686 596Q683 598 671 601T656 606V208Z" />
+<glyph unicode="%" horiz-adv-x="1790" d="M407 836Q494 836 538 901T583 1069Q583 1174 539 1239T408 1304T278 1238T234 1067T277 899T407 836ZM404 677Q241 677 148 787T54 1067T150 1349T409 1461Q578 1461 675 1351T772 1070Q772 901 671 789T404 677ZM307
+-32L1208 1450L1428 1449L520 -32H307ZM1382 142Q1472 142 1517 207T1563 377T1515 544T1370 608T1236 545T1198 372Q1198 268 1244 205T1382 142ZM1379 -17Q1207 -17 1108 93T1008 372Q1008 766 1371 766Q1550 766 1645 658T1741 376Q1741 207 1644 95T1379 -17Z"
+/>
+<glyph unicode="&amp;" horiz-adv-x="1436" d="M580 -23Q474 -23 383 2T217 76T101 210T58 404Q58 468 77 524T125 621T201 703T292 771T395 831Q354 877 332 904T283 975T243 1060T230 1150Q230 1260 284 1337T422 1450T612 1485Q686 1485 754 1467T881 1411T974
+1312T1009 1168Q1009 1100 982 1041T906 934T805 853T687 786L1037 404Q1118 492 1191 634L1361 521Q1283 370 1181 256L1388 37Q1381 35 1283 11T1178 -16L1036 133Q831 -23 580 -23ZM587 168Q673 168 755 196T899 276Q880 296 703 488T508 701Q466 677 440 661T381
+618T332 566T302 504T289 426Q289 299 372 234T587 168ZM571 924Q618 949 648 969T713 1019T764 1086T781 1166Q781 1239 736 1277T619 1315Q542 1315 497 1276T451 1160Q451 1048 571 924Z" />
+<glyph unicode="&apos;" horiz-adv-x="440" d="M140 929L105 1464H319L292 929H140Z" />
+<glyph unicode="(" horiz-adv-x="650" d="M376 -276Q93 111 93 597Q93 1093 375 1488H611Q511 1345 426 1095T341 599Q341 359 426 111T610 -276H376Z" />
+<glyph unicode=")" horiz-adv-x="650" d="M41 -276Q101 -190 159 -61T263 251T309 599Q309 843 225 1093T40 1488H275Q558 1089 558 597Q558 113 274 -276H41Z" />
+<glyph unicode="*" horiz-adv-x="1104" d="M375 562L171 676L413 982L71 1059L135 1266L472 1133L437 1504H665L630 1133L971 1262L1032 1054L688 982Q693 975 807 833T933 676Q927 672 833 619T731 562L549 885L375 562Z" />
+<glyph unicode="+" horiz-adv-x="1180" d="M492 146V554H83V745H493V1153H691V745H1098V554H690V146H492Z" />
+<glyph unicode="," horiz-adv-x="508" d="M64 -283Q121 -6 158 232H402L399 183Q334 -43 241 -283H64Z" />
+<glyph unicode="-" horiz-adv-x="677" d="M70 445V649H606V445H70Z" />
+<glyph unicode="." horiz-adv-x="473" d="M245 -18Q180 -18 135 27T90 134Q90 197 134 243T245 289Q309 289 353 243T397 134Q397 72 353 27T245 -18Z" />
+<glyph unicode="/" horiz-adv-x="949" d="M52 -189L674 1489H892L265 -189H52Z" />
+<glyph unicode="0" horiz-adv-x="1296" d="M569 187T649 187T785 233T871 360T914 534T927 740Q927 1282 649 1282Q373 1282 369 744Q369 630 382 537T425 362T512 233ZM768 -21T649 -21T435 19T278 129T175 296T116 501T98 732Q98 857 116 966T176 1173T280 1340T437
+1449T649 1490T861 1450T1017 1340T1120 1173T1180 966T1198 732Q1198 609 1181 501T1122 296T1019 129T863 20Z" />
+<glyph unicode="1" horiz-adv-x="686" d="M303 1V1220Q289 1211 174 1163T43 1110V1310Q67 1321 195 1385T336 1459H556V1H303Z" />
+<glyph unicode="2" horiz-adv-x="1054" d="M85 0L79 216L542 740Q628 832 667 909T707 1073Q707 1168 645 1224T482 1281Q389 1281 299 1247T150 1160L75 1358Q225 1490 497 1490Q713 1490 844 1382T976 1075Q976 935 902 808T698 547L368 197H959L941 0H85Z" />
+<glyph unicode="3" horiz-adv-x="1078" d="M485 -21Q356 -21 243 12T63 103L135 292Q190 246 287 217T486 187Q601 187 671 249T742 411Q742 473 723 518T671 590T586 633T476 656T341 663Q338 663 312 663T283 664V866H339Q426 866 488 875T604 906T685 971T713
+1077Q713 1162 649 1222T469 1282Q281 1282 134 1188L62 1378Q244 1490 494 1490Q703 1490 835 1380T968 1098Q968 978 907 894T728 770Q862 744 935 641T1009 398Q1009 265 938 169T750 26T485 -21Z" />
+<glyph unicode="4" horiz-adv-x="1253" d="M753 0V325H92V503L685 1458H1018V523H1198L1185 325H1018V0H753ZM352 522H753V1202L352 522Z" />
+<glyph unicode="5" horiz-adv-x="1138" d="M542 -21Q443 -21 338 11T178 73T105 119L185 307Q204 292 240 270T358 218T515 189Q655 189 727 267T799 471Q799 590 734 662T564 734Q440 734 342 626L167 660L205 1458H1001L986 1252H437Q437 1234 431 1072T423
+890Q511 937 608 937Q810 937 933 807T1057 468Q1057 246 922 113T542 -21Z" />
+<glyph unicode="6" horiz-adv-x="1205" d="M615 -21Q371 -21 218 112T65 463Q65 533 80 597T126 722T188 830T268 942L684 1467H994L540 894Q613 919 662 919Q877 919 1014 791T1151 456Q1151 242 1001 111T615 -21ZM603 179Q735 179 809 254T884 453Q884 582
+814 656T606 731Q466 731 400 656T334 451Q334 328 404 254T603 179Z" />
+<glyph unicode="7" horiz-adv-x="1036" d="M237 0L679 1258H75L77 1459H977V1302L505 0H237Z" />
+<glyph unicode="8" horiz-adv-x="1151" d="M578 -21Q435 -21 321 24T135 164T64 389Q64 652 323 767Q92 877 92 1111Q92 1203 130 1276T234 1395T388 1466T578 1490Q790 1490 926 1391T1063 1111Q1063 880 849 767Q1090 650 1090 388Q1090 258 1020 164T835 24T578
+-21ZM452 161T578 161T775 222T846 394Q846 504 772 576T578 679Q455 648 382 576T308 393Q308 283 380 222ZM578 835Q701 863 767 932T833 1110Q833 1200 761 1255T578 1310Q468 1310 395 1255T322 1110Q322 1002 390 932T578 835Z" />
+<glyph unicode="9" horiz-adv-x="1215" d="M243 0L687 578Q620 555 568 555Q353 555 218 684T82 1020Q82 1234 230 1362T616 1490Q861 1490 1013 1359T1165 1009Q1165 883 1117 780T976 550L562 0H243ZM624 739Q763 739 829 816T896 1024Q896 1147 827 1219T629
+1291Q496 1291 421 1216T345 1019Q345 889 415 814T624 739Z" />
+<glyph unicode=":" horiz-adv-x="460" d="M100 -6V259H365V-6H100ZM100 841V1106H365V841H100Z" />
+<glyph unicode=";" horiz-adv-x="448" d="M107 -322L163 246H389L265 -322H107ZM125 841V1105H389V841H125Z" />
+<glyph unicode="&lt;" horiz-adv-x="1196" d="M1081 196L115 645V769L1082 1251V1045L377 712L1081 401V196Z" />
+<glyph unicode="=" horiz-adv-x="1202" d="M93 357V548H1111V357H93ZM93 754V947H1111V754H93Z" />
+<glyph unicode="&gt;" horiz-adv-x="1196" d="M119 197V403L823 712L119 1047V1253L1086 769V645L119 197Z" />
+<glyph unicode="?" horiz-adv-x="887" d="M323 448Q333 527 366 608T438 754T516 880T580 1001T606 1113Q605 1201 551 1252T399 1303Q337 1303 279 1288T191 1257T121 1218L51 1384Q133 1437 221 1463T427 1490Q498 1490 565 1469T689 1407T780 1299T815 1148Q815
+1080 791 1014T725 884T637 759T533 614T434 448H323ZM376 -18Q311 -18 266 27T221 134Q221 197 266 243T376 289Q440 289 484 243T528 134Q528 72 484 27T376 -18Z" />
+<glyph unicode="@" horiz-adv-x="1699" d="M891 -205Q650 -205 464 -108T173 170T68 590Q68 761 130 911T302 1169T564 1338T893 1400Q1101 1400 1269 1313T1535 1066T1633 702Q1633 585 1596 482T1498 309T1357 197T1193 156Q1110 156 1060 209T1008 375Q970
+285 901 228T749 171Q611 171 533 259T455 492Q455 635 514 758T682 957T926 1032Q1064 1032 1242 968Q1229 900 1200 762T1154 531T1137 388T1155 318T1215 299Q1284 299 1345 360T1442 514T1477 705Q1477 869 1402 995T1193 1188T892 1255Q757 1255 644 1210T456
+1094T330 932T255 752T232 578Q232 426 284 303T426 101T635 -20T889 -62Q1182 -62 1391 92L1446 -16Q1215 -205 891 -205ZM752 312Q944 312 1029 748Q1041 812 1054 899Q999 910 941 910Q857 910 785 849T672 695T632 506Q632 422 661 367T752 312Z" />
+<glyph unicode="A" horiz-adv-x="1359" d="M-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="B" horiz-adv-x="1333" d="M158 0V1465H615Q906 1465 1049 1380T1192 1097Q1192 1065 1188 1034T1170 964T1133 892T1069 830T973 782Q1109 749 1181 656T1253 425Q1253 218 1107 109T701 0H158ZM429 196H664Q976 196 976 440Q976 563 898 617T657
+671H429V196ZM429 860H661Q930 860 930 1065Q930 1180 853 1223T606 1266H429V860Z" />
+<glyph unicode="C" horiz-adv-x="1301" d="M797 -21Q476 -21 288 181T100 739Q100 1077 296 1281T811 1486Q1068 1486 1246 1367L1161 1162Q990 1267 817 1267Q615 1267 498 1122T380 731Q380 477 493 338T817 199Q1001 199 1182 291L1218 79Q1050 -21 797 -21Z" />
+<glyph unicode="D" horiz-adv-x="1514" d="M430 217H624Q875 217 1006 348T1137 732Q1137 1002 1002 1124T595 1247H430V217ZM159 0V1465H583Q775 1465 927 1421T1188 1289T1356 1061T1415 738Q1415 383 1201 192T608 0H159Z" />
+<glyph unicode="E" horiz-adv-x="1152" d="M158 0V1465H1046L1035 1250H429V872H1005V657H429V216H1057L1048 0H158Z" />
+<glyph unicode="F" horiz-adv-x="1103" d="M158 0V1465H1025L1015 1250H427V834H986V621H427V0H158Z" />
+<glyph unicode="G" horiz-adv-x="1466" d="M812 -21Q477 -21 289 181T100 734Q100 957 188 1126T447 1391T851 1486Q1118 1486 1309 1371L1221 1169Q1039 1267 856 1267Q634 1267 507 1123T380 731Q380 485 493 342T824 199Q964 199 1078 243V583H771L773 796H1333V89Q1197
+33 1076 6T812 -21Z" />
+<glyph unicode="H" horiz-adv-x="1520" d="M158 0V1465H429V866H1091V1465H1362V0H1091V652H429V0H158Z" />
+<glyph unicode="I" horiz-adv-x="602" d="M165 0V1465H436V0H165Z" />
+<glyph unicode="J" horiz-adv-x="633" d="M-73 -321L-84 -108Q-36 -116 21 -116Q132 -116 171 -59T210 129V1469H482V147Q482 21 460 -65T384 -212T242 -301T22 -329Q-33 -329 -73 -321Z" />
+<glyph unicode="K" horiz-adv-x="1348" d="M157 0V1465H429V805Q500 899 719 1156T981 1465H1302L748 806L1337 0H1019L541 657L429 563V0H157Z" />
+<glyph unicode="L" horiz-adv-x="1071" d="M158 0V1465H429V216H1042L1034 0H158Z" />
+<glyph unicode="M" horiz-adv-x="1841" d="M158 0V1465H478L921 407L1367 1465H1683V0H1433V724L1441 1139L1404 1029L1029 100H797L430 1034L393 1144L402 720V0H158Z" />
+<glyph unicode="N" horiz-adv-x="1554" d="M158 0V1465H446Q524 1343 763 973T1054 523Q1069 500 1105 446T1157 368Q1150 711 1150 724V1465H1397V0H1105L444 1030L396 1109Q404 845 404 738V0H158Z" />
+<glyph unicode="O" horiz-adv-x="1626" d="M601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99 1088 291 1287T814 1486T1336 1287T1527 732Q1527 381 1335 180T813 -21Z" />
+<glyph unicode="P" horiz-adv-x="1245" d="M151 0V1469H639Q812 1469 935 1425T1129 1280T1201 1029Q1201 924 1174 843T1085 695T911 592T639 556Q503 556 418 564V0H151ZM610 752Q693 752 754 768T850 809T905 871T932 942T939 1020Q939 1141 861 1204T641 1267H418V754Q430
+752 610 752Z" />
+<glyph unicode="Q" horiz-adv-x="1626" d="M1252 -478Q1169 -418 1065 -280T894 -17Q842 -21 813 -21Q482 -21 291 179T99 733Q99 1088 291 1287T814 1486T1336 1287T1527 732Q1527 480 1426 303T1140 43Q1293 -205 1426 -327L1252 -478ZM601 200T814 200T1135
+338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339Z" />
+<glyph unicode="R" horiz-adv-x="1394" d="M151 0V1469H694Q805 1469 886 1459T1041 1423T1160 1351T1232 1234T1259 1062Q1259 770 994 678Q1048 617 1128 452L1346 0H1050L879 383Q782 589 759 627Q742 628 646 628L419 630V0H151ZM718 824Q874 824 942 879T1010
+1058Q1010 1166 941 1217T730 1268H419V825Q434 825 568 825T718 824Z" />
+<glyph unicode="S" horiz-adv-x="1189" d="M569 -20Q304 -20 94 102L160 317Q254 265 364 233T580 201Q709 201 775 256T841 416Q841 554 657 607Q644 611 584 628T472 662T396 688Q101 792 101 1076Q101 1275 242 1383T618 1491Q883 1491 1075 1382L993 1184Q797
+1272 629 1272Q508 1272 447 1230T381 1088Q381 966 502 929Q526 920 620 890T742 851Q943 785 1029 687T1116 414Q1116 205 968 93T569 -20Z" />
+<glyph unicode="T" horiz-adv-x="1152" d="M441 0V1248H14V1465H1138V1248H713V0H441Z" />
+<glyph unicode="U" horiz-adv-x="1468" d="M730 -21Q442 -21 293 122T144 527V1465H416V550Q416 367 490 283T735 199Q902 199 977 283T1052 551V1465H1323V525Q1323 266 1171 123T730 -21Z" />
+<glyph unicode="V" horiz-adv-x="1321" d="M527 0L-6 1465H273L583 560Q601 513 666 285Q670 301 703 416T746 558Q758 592 898 1009T1051 1465H1327L801 0H527Z" />
+<glyph unicode="W" horiz-adv-x="2051" d="M408 0L10 1465H280L564 325L898 1458H1157L1474 321L1764 1465H2034L1624 0H1343L1030 1073L687 0H408Z" />
+<glyph unicode="X" horiz-adv-x="1337" d="M-11 0L502 750L27 1465H332L677 919L1032 1465H1321L836 746L1347 0H1034L664 570L286 0H-11Z" />
+<glyph unicode="Y" horiz-adv-x="1256" d="M492 0V581L-15 1465H279L628 831L979 1465H1269L764 586V0H492Z" />
+<glyph unicode="Z" horiz-adv-x="1209" d="M62 0V174L835 1249H89V1465H1155V1268L396 216H1160L1159 0H62Z" />
+<glyph unicode="[" horiz-adv-x="651" d="M135 -266V1507H599V1327H387V-85H599V-266H135Z" />
+<glyph unicode="\" horiz-adv-x="903" d="M649 -60L30 1462H261L878 -60H649Z" />
+<glyph unicode="]" horiz-adv-x="651" d="M52 -266V-85H263V1327H52V1507H516V-266H52Z" />
+<glyph unicode="^" horiz-adv-x="1154" d="M36 549L498 1471H627L1120 549H911L564 1217L245 549H36Z" />
+<glyph unicode="_" horiz-adv-x="1155" d="M72 -318V-144H1086V-318H72Z" />
+<glyph unicode="`" horiz-adv-x="514" d="M323 1195L-8 1578H298L486 1195H323Z" />
+<glyph unicode="a" horiz-adv-x="1142" d="M423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200 953T167 1043Q361 1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816
+4 795 67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="b" horiz-adv-x="1258" d="M722 -21Q610 -21 519 28T386 141L360 1H133V1504L395 1521V1181Q395 1082 389 956Q519 1126 728 1126Q938 1126 1057 970T1177 562Q1177 300 1054 140T722 -21ZM659 178Q776 178 846 277T916 558Q916 741 848 835T662
+929Q396 929 393 570Q393 368 460 273T659 178Z" />
+<glyph unicode="c" horiz-adv-x="1008" d="M614 -21Q362 -21 222 129T81 558Q81 828 228 977T617 1126Q810 1126 943 1043L881 856Q745 927 628 927Q495 927 419 832T342 555Q342 371 417 275T631 179Q775 179 908 264L933 65Q864 19 790 -1T614 -21Z" />
+<glyph unicode="d" horiz-adv-x="1259" d="M542 -21Q327 -21 204 137T81 559Q81 815 203 970T541 1126Q775 1126 872 960Q862 1058 862 1149V1504L1124 1521V0H897L868 150Q851 123 837 104T794 59T734 18T652 -9T542 -21ZM604 178Q868 178 872 537Q872 740 804
+833T601 926Q483 926 413 832T342 553Q342 370 412 274T604 178Z" />
+<glyph unicode="e" horiz-adv-x="1157" d="M641 -21Q376 -21 229 131T81 553Q81 815 220 970T599 1126Q826 1126 951 984T1077 607Q1077 590 1077 552T1076 496H345Q349 342 429 258T651 173Q831 173 997 267L1034 81Q869 -21 641 -21ZM350 661H830Q830 795 769
+867T600 939Q499 939 430 869T350 661Z" />
+<glyph unicode="f" horiz-adv-x="760" d="M203 0V925H29L46 1079L203 1099V1160Q203 1260 221 1331T282 1452T394 1527T568 1552Q668 1552 772 1533L749 1338Q667 1349 620 1349Q536 1349 501 1309T465 1174V1099H723V925H465V0H203Z" />
+<glyph unicode="g" horiz-adv-x="1267" d="M353 -492L338 -280H471Q702 -280 794 -219T886 7Q886 74 880 152Q854 116 831 93T772 46T687 12T574 0Q356 0 216 157T75 562Q75 694 114 802T220 981T374 1088T561 1126Q782 1126 890 965L908 1099H1142V78Q1142 -4
+1134 -69T1106 -195T1054 -301T972 -383T857 -443T702 -479T504 -492H353ZM616 183Q887 183 890 546V584Q888 747 822 836T629 926Q485 926 411 828T337 562Q337 401 411 292T616 183Z" />
+<glyph unicode="h" horiz-adv-x="1253" d="M133 0V1504L395 1521V1204Q395 1181 392 1077T389 970Q520 1126 741 1126Q925 1126 1026 1021T1128 696V0H866V667Q866 802 823 865T677 928Q589 928 521 884T419 769Q395 677 395 529V0H133Z" />
+<glyph unicode="i" horiz-adv-x="541" d="M139 0V1099H401V0H139ZM139 1259V1483H402V1259H139Z" />
+<glyph unicode="j" horiz-adv-x="527" d="M-48 -427L-77 -233H-19Q31 -233 63 -226T116 -205T147 -163T160 -103T164 -16V1099H426V26Q426 -56 420 -115T396 -227T350 -316T274 -377T163 -415T11 -427H-48ZM164 1259V1483H426V1259H164Z" />
+<glyph unicode="k" horiz-adv-x="1173" d="M133 0V1504L395 1521V846L389 624Q390 625 409 644T431 665Q486 730 550 799T713 968T842 1099H1154L702 631L1183 0H866L504 499L395 413V0H133Z" />
+<glyph unicode="l" horiz-adv-x="700" d="M518 -15Q405 -15 331 11T213 96T153 234T136 433V1504L398 1521V438Q398 290 433 238T569 185Q619 185 696 196L703 9Q702 9 679 4T634 -4T579 -11T518 -15Z" />
+<glyph unicode="m" horiz-adv-x="1911" d="M133 0V1099H345L375 959Q395 984 413 1003T464 1047T533 1088T623 1115T738 1126Q869 1126 947 1073T1058 949Q1117 1034 1211 1080T1420 1126Q1609 1126 1697 1019T1786 702V0H1523V624Q1523 785 1488 856T1352 928Q1199
+928 1132 790Q1104 729 1094 643V0H832V636Q832 783 793 855T652 927Q569 927 509 885T418 775Q395 674 395 533V0H133Z" />
+<glyph unicode="n" horiz-adv-x="1254" d="M133 0V1099H344L373 960Q541 1126 746 1126Q938 1126 1033 1016T1129 695V0H866V663Q865 796 823 862T672 928Q587 928 517 885T414 775Q395 697 395 535V0H133Z" />
+<glyph unicode="o" horiz-adv-x="1222" d="M612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81 819 221 972T616 1126Q862 1126 1001 970T1141 553Q1141 290 1000
+135T605 -21Z" />
+<glyph unicode="p" horiz-adv-x="1256" d="M133 -457V1099H358L386 945Q440 1032 529 1079T729 1127Q864 1127 966 1052T1122 848T1175 555Q1175 300 1052 140T717 -21Q613 -21 529 20T387 133Q395 -11 395 -29V-444L133 -457ZM661 179Q778 179 845 277T913 557Q913
+742 845 835T656 928Q396 928 393 574Q393 370 460 275T661 179Z" />
+<glyph unicode="q" horiz-adv-x="1259" d="M862 -457V8Q862 77 869 150Q765 -22 555 -22Q342 -22 212 138T82 555Q82 810 205 968T549 1126Q766 1126 874 959L895 1099H1125V-444L862 -457ZM606 177Q734 177 802 263T872 535Q872 739 805 832T603 926Q482 926
+413 832T343 552Q343 368 413 273T606 177Z" />
+<glyph unicode="r" horiz-adv-x="798" d="M134 0V1099H354L388 931Q496 1104 701 1104Q744 1104 771 1100L767 881Q727 887 684 887Q539 887 468 810T396 596V0H134Z" />
+<glyph unicode="s" horiz-adv-x="985" d="M484 -20Q241 -20 95 63L122 260Q188 224 290 196T476 167Q563 167 611 199T661 295Q661 352 616 385T442 467Q398 483 385 488Q233 547 166 619T99 816Q99 966 207 1046T510 1126Q720 1126 879 1047L814 866Q657 939
+515 939Q436 939 392 913T347 832Q347 781 390 753T558 678Q562 677 584 669T618 656Q769 601 840 525T911 325Q910 160 799 70T484 -20Z" />
+<glyph unicode="t" horiz-adv-x="803" d="M572 -15Q460 -15 386 11T269 95T210 229T192 421V940H12L22 1082L210 1099L294 1397L454 1398V1099H727V940H454V416Q454 291 490 238T623 185Q680 185 745 195L752 7Q750 7 728 3T685 -5T632 -12T572 -15Z" />
+<glyph unicode="u" horiz-adv-x="1163" d="M795 -21T581 -21T237 86T106 400V1099H369V410Q369 287 420 232T584 177Q694 177 744 231T795 410V1099H1057V400Q1057 194 926 87Z" />
+<glyph unicode="v" horiz-adv-x="1125" d="M441 0L3 1099H281Q297 1054 382 820T496 500Q553 334 578 249Q578 250 595 314T627 434T647 503Q648 505 738 779T846 1099H1122L706 0H441Z" />
+<glyph unicode="w" horiz-adv-x="1713" d="M346 0L13 1099H280L491 293Q498 316 605 686T726 1099H995Q1008 1057 1110 690T1220 296L1437 1099H1700L1356 0H1095Q1082 43 974 435T856 858Q836 785 729 418T604 0H346Z" />
+<glyph unicode="x" horiz-adv-x="1158" d="M21 0L412 563L40 1099H337L581 725L832 1099H1124L749 564L1137 0H837L581 399L317 0H21Z" />
+<glyph unicode="y" horiz-adv-x="1116" d="M191 -463Q127 -463 55 -455L42 -252Q88 -257 159 -257Q250 -257 305 -221T396 -93Q400 -83 436 20L-6 1099H274L563 302Q595 421 706 744T829 1099H1109Q652 -109 648 -119Q577 -304 469 -383T191 -463Z" />
+<glyph unicode="z" horiz-adv-x="977" d="M65 0V159L609 917H91V1099H899V920L384 191H917V0H65Z" />
+<glyph unicode="{" horiz-adv-x="786" d="M703 -287Q477 -287 377 -223T277 13V290Q277 410 230 457T52 505V719Q145 720 193 740T259 804T277 930V1221Q277 1306 303 1362T385 1451T517 1497T703 1511V1311Q596 1310 563 1274T529 1137V868Q528 767 479 710T317
+610Q529 566 529 360V88Q529 -13 562 -49T703 -86V-287Z" />
+<glyph unicode="|" horiz-adv-x="759" d="M278 -380V1538H481V-380H278Z" />
+<glyph unicode="}" horiz-adv-x="787" d="M85 -287V-86Q192 -85 225 -50T259 88V360Q259 464 310 521T471 611Q362 645 311 705T259 868V1137Q259 1238 226 1274T85 1311V1511Q198 1511 273 1498T404 1452T485 1360T511 1212V929Q511 809 556 765T737 719V505Q605
+505 558 459T511 290V4Q511 -162 411 -224T85 -287Z" />
+<glyph unicode="~" horiz-adv-x="1297" d="M207 471L130 616Q226 811 417 811Q526 811 681 745Q827 681 900 681Q960 681 1015 713T1134 817L1205 682Q1162 602 1074 544T883 486Q818 486 761 503T618 560Q551 591 506 605T408 620Q286 620 207 471Z" />
+<glyph unicode="&#xa0;" horiz-adv-x="541" />
+<glyph unicode="&#xa1;" horiz-adv-x="446" d="M253 655L338 -58V-354H97V-58L187 655H253ZM222 1122Q287 1122 332 1077T377 970Q377 907 332 861T222 815Q158 815 114 861T69 970Q69 1032 113 1077T222 1122Z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1082" d="M573 -202V54Q349 71 216 223T82 636Q82 761 121 863T227 1033T383 1139T573 1184V1402H674V1181Q832 1168 934 1090L889 916Q851 942 792 964T674 992V242Q790 251 892 323L944 148Q825 64 674 54V-202H573ZM573
+247V989Q462 969 396 878T329 628Q329 462 393 366T573 247Z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1149" d="M85 0L69 190Q170 233 211 293T252 469V659H67V838H252V943Q252 1066 276 1163T353 1334T494 1447T703 1487Q921 1487 1088 1347L985 1178Q911 1227 848 1252T713 1278Q501 1278 501 1017V838H892V659H501V509Q501
+309 389 213Q397 214 536 214H1105L1097 0H85Z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1162" d="M1020 229L834 402Q721 317 581 317Q434 317 327 401L146 230L52 322L237 495Q161 602 161 732Q161 860 237 969L51 1144L146 1236L329 1063Q440 1149 581 1149T834 1061L1020 1236L1111 1142L927 969Q1002 861
+1002 732Q1002 601 928 495L1109 323L1020 229ZM581 455Q699 455 781 536T864 732T781 928T581 1010Q465 1010 382 928T299 732Q299 617 381 536T581 455Z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1194" d="M471 0V289H124V442H471V583H125V735H392L-44 1459H240L599 838L958 1459H1237L809 735H1085V583H734V442H1085V289H734V0H471Z" />
+<glyph unicode="&#xa6;" horiz-adv-x="817" d="M306 -379V340H509V-379H306ZM306 820V1538H509V820H306Z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1034" d="M664 -31T472 -31T138 37V228Q208 195 299 173T463 150Q549 150 602 175T663 250Q677 302 634 342T470 435Q386 469 329 500T225 571T156 662T133 776Q133 857 172 921T276 1026Q150 1114 150 1261Q150 1401 253
+1475T532 1551Q707 1556 872 1493Q871 1486 854 1401T836 1309Q697 1370 556 1370Q380 1370 380 1264Q380 1214 427 1178T584 1096Q661 1065 716 1035T819 965T890 876T914 767Q914 603 776 509Q903 424 903 284Q903 132 784 51ZM607 589Q703 654 703 731Q703 797
+637 844T444 940Q399 917 373 881T346 802Q346 746 397 701T546 614Q551 612 574 602T607 589Z" />
+<glyph unicode="&#xa8;" horiz-adv-x="772" d="M78 1236V1490H273V1236H78ZM499 1236V1490H695V1236H499Z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1743" d="M854 254Q654 254 523 392T392 743Q392 880 449 993T613 1172T853 1238Q1038 1238 1160 1156L1111 1052Q998 1118 864 1118Q715 1118 626 1015T537 743Q537 576 627 475T869 374Q1002 374 1117 440L1161 336Q1037
+254 854 254ZM867 78Q1056 78 1209 167T1448 407T1533 741Q1533 922 1448 1073T1209 1314T866 1404Q679 1404 527 1315T290 1074T205 742Q205 560 289 409T526 168T867 78ZM867 -22Q711 -22 569 35T320 191T152 433T89 741T151 1048T319 1291T567 1448T866 1505Q1023
+1505 1166 1448T1416 1292T1586 1049T1649 741T1586 434T1417 191T1168 35T867 -22Z" />
+<glyph unicode="&#xaa;" horiz-adv-x="757" d="M299 750Q203 750 139 806T75 963Q75 1011 91 1049T140 1111T208 1153T294 1180T384 1196T477 1208Q497 1210 506 1211V1243Q505 1319 476 1351T382 1384Q274 1384 133 1326L91 1436Q235 1514 399 1514Q520 1514
+594 1456T669 1268V889Q669 787 670 764H535L518 849Q486 806 424 778T299 750ZM112 536V656H673V536H112ZM317 878Q368 878 418 909T506 995V1106Q456 1099 428 1095T363 1083T306 1066T267 1043T239 1011T231 968Q231 925 255 902T317 878Z" />
+<glyph unicode="&#xab;" horiz-adv-x="1083" d="M388 136L74 546L84 589L391 987L598 934L318 562L593 190L388 136ZM812 136L489 558L814 987L1015 934L741 562L1011 190L812 136Z" />
+<glyph unicode="&#xac;" horiz-adv-x="1287" d="M961 247V641H132V834H1152V247H961Z" />
+<glyph unicode="&#xad;" horiz-adv-x="745" d="M76 380V584H671V380H76Z" />
+<glyph unicode="&#xae;" horiz-adv-x="1735" d="M556 271V1226H856Q1214 1226 1214 964Q1214 854 1165 792T1000 705Q1012 690 1027 668T1061 614T1096 557T1136 486T1174 417T1216 341T1254 271H1089Q1063 317 968 499Q870 679 856 688H704V271H556ZM703 813H823Q872
+813 906 816T972 828T1023 854T1053 897T1064 962Q1064 995 1058 1018T1035 1056T1002 1080T952 1093T891 1099T814 1100H703V813ZM865 78Q1054 78 1207 167T1444 407T1529 741Q1529 922 1445 1073T1207 1314T864 1404Q677 1404 525 1315T289 1074T205 742Q205
+560 289 409T526 168T865 78ZM865 -22Q709 -22 567 35T320 191T152 433T89 741T151 1048T319 1291T566 1448T864 1505Q1021 1505 1164 1448T1413 1292T1582 1049T1645 741T1583 434T1414 191T1165 35T865 -22Z" />
+<glyph unicode="&#xaf;" horiz-adv-x="912" d="M118 1377V1530H804V1377H118Z" />
+<glyph unicode="&#xb0;" horiz-adv-x="850" d="M428 999Q494 999 542 1044T591 1165Q591 1238 543 1282T428 1326Q361 1326 312 1282T263 1165Q263 1090 312 1045T428 999ZM427 870Q282 870 197 958T111 1167Q111 1287 196 1371T427 1455Q570 1455 656 1371T742
+1167T657 959T427 870Z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1288" d="M544 261V636H180V828H544V1196H743V828H1109V636H744V261H544ZM180 0V177H1109V0H180Z" />
+<glyph unicode="&#xb2;" horiz-adv-x="834" d="M146 574V716Q305 822 420 948T536 1159Q536 1216 495 1249T399 1283T289 1251T201 1169L135 1289Q190 1361 258 1400T422 1439Q537 1439 618 1363T700 1163Q700 1099 683 1046T618 936T535 846T416 741Q396 724
+386 715H701L686 574H146Z" />
+<glyph unicode="&#xb3;" horiz-adv-x="800" d="M380 603Q235 603 125 685L174 811Q208 779 268 759T378 739Q447 739 486 774T525 877Q525 941 476 973T337 1005L260 1004V1140H339Q495 1140 495 1238Q495 1281 467 1307T382 1333Q329 1333 271 1314T179 1270L131
+1381Q241 1470 391 1470Q507 1470 585 1413T664 1242Q661 1121 538 1081Q598 1058 640 1002T683 876Q683 747 596 675T380 603Z" />
+<glyph unicode="&#xb4;" horiz-adv-x="619" d="M191 1195L362 1578H661L346 1195H191Z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1201" d="M419 -150V782Q266 795 172 896T78 1144Q78 1236 118 1303T231 1410T397 1467T607 1486H1026V1315H944V-151H778V1315H613V-151L419 -150Z" />
+<glyph unicode="&#xb7;" horiz-adv-x="422" d="M90 488V740H332V488H90Z" />
+<glyph unicode="&#xb8;" horiz-adv-x="589" d="M62 -357L185 24H329L271 -357H62Z" />
+<glyph unicode="&#xb9;" horiz-adv-x="743" d="M151 601V749H293V1304Q288 1301 213 1266T132 1228V1376Q134 1377 187 1403T288 1455T340 1484H484V749H624V601H151Z" />
+<glyph unicode="&#xba;" horiz-adv-x="865" d="M439 899Q533 899 581 961T629 1125Q629 1232 581 1295T435 1358Q341 1358 293 1295T245 1129Q245 1022 293 961T439 899ZM439 744Q265 744 167 850T69 1131Q69 1301 169 1406T438 1512Q608 1512 705 1406T803 1127Q803
+958 705 851T439 744Z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1168" d="M314 136L113 190L387 562L116 934L316 987L640 565L314 136ZM749 136L545 190L822 562L550 934L753 987L1071 565L749 136Z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1731" d="M104 601V749H246V1304Q241 1301 165 1266T85 1228V1376Q287 1477 294 1484H437V749H578V601H104ZM1388 10V182H985V324L1372 865H1547V318H1662L1664 182H1546L1545 10H1388ZM305 0L1327 1471H1521L506 0H305ZM1176
+318H1386Q1386 639 1387 646L1176 318Z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1805" d="M125 601V733H267V1321Q224 1293 106 1228V1376Q122 1384 201 1430T288 1484H458V733H599V601H125ZM1136 -29L1137 107Q1173 138 1234 188T1331 267T1412 339T1482 413T1524 482T1542 555Q1542 614 1500 649T1402
+684Q1343 684 1286 659T1192 587L1126 704Q1169 769 1247 802T1424 835Q1541 835 1625 761T1710 561Q1710 517 1702 479T1671 402T1628 337T1566 270T1497 208T1414 138Q1388 116 1374 105H1709L1693 -29H1136ZM310 0L1331 1471H1529L510 0H310Z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1683" d="M343 621Q200 621 88 703L137 825Q170 795 226 778T335 761Q403 761 443 793T483 889Q483 1005 301 1005L224 1004V1140H302Q458 1140 458 1239Q458 1281 429 1305T341 1330Q288 1330 231 1313T141 1270L79 1377Q131
+1420 205 1445T356 1471Q472 1471 553 1413T634 1244Q634 1233 629 1214T613 1169T574 1118T510 1081Q571 1059 611 1005T652 883Q652 800 608 739T495 650T343 621ZM1339 11V190H935V332L1322 889H1498V325H1612L1614 190H1497L1496 11H1339ZM279 0L1299 1471H1495L482
+0H279ZM1126 325H1336Q1336 651 1337 665L1126 325Z" />
+<glyph unicode="&#xbf;" horiz-adv-x="887" d="M541 751Q531 672 498 591T426 445T348 319T284 198T258 86Q259 -2 313 -53T465 -104Q527 -104 585 -89T673 -58T743 -19L813 -185Q731 -238 643 -264T437 -291Q366 -291 299 -270T175 -208T84 -100T49 51Q49 119
+73 185T139 315T227 440T331 585T430 751H541ZM488 1217Q553 1217 598 1172T643 1065Q643 1002 598 956T488 910Q424 910 380 956T336 1065Q336 1127 380 1172T488 1217Z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1359" d="M598 1608L267 1991H573L761 1608H598ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1359" d="M602 1608L773 1991H1072L757 1608H602ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1359" d="M325 1608L575 1991H783L1034 1608H850L676 1826L504 1608H325ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1359" d="M336 1608Q336 1644 338 1673T351 1736T380 1793T430 1831T508 1847Q566 1847 637 1826T761 1784T829 1763Q876 1763 876 1847H1023Q1023 1812 1021 1785T1009 1723T983 1664T934 1625T857 1608Q798 1608 679 1653T530
+1698Q481 1698 480 1608H336ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1359" d="M371 1608V1862H566V1608H371ZM792 1608V1862H988V1608H792ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1359" d="M629 1566T680 1566T758 1598T786 1676Q786 1721 758 1754T680 1788Q629 1788 601 1756T573 1676Q573 1630 601 1598ZM780 1473T680 1473T520 1533T459 1677Q459 1760 518 1818T680 1877Q781 1877 840 1819T900
+1677Q900 1593 840 1533ZM-3 0L536 1466H831L1362 0H1084L939 414H426L280 0H-3ZM494 616H870Q690 1193 685 1212L494 616Z" />
+<glyph unicode="&#xc6;" horiz-adv-x="2021" d="M38 0L882 1481H1891L1876 1285H1269L1302 851H1851V655H1322L1361 196H1926L1912 0H1099L1069 375H545L340 0H38ZM638 572H1053L1003 1235L638 572Z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1301" d="M595 -389L718 -8H862L804 -389H595ZM797 -21Q476 -21 288 181T100 739Q100 1077 296 1281T811 1486Q1068 1486 1246 1367L1161 1162Q990 1267 817 1267Q615 1267 498 1122T380 731Q380 477 493 338T817 199Q1001
+199 1182 291L1218 79Q1050 -21 797 -21Z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1152" d="M526 1608L195 1991H501L689 1608H526ZM158 0V1465H1046L1035 1250H429V872H1005V657H429V216H1057L1048 0H158Z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1152" d="M530 1608L701 1991H1000L685 1608H530ZM158 0V1465H1046L1035 1250H429V872H1005V657H429V216H1057L1048 0H158Z" />
+<glyph unicode="&#xca;" horiz-adv-x="1152" d="M253 1608L503 1991H711L962 1608H778L604 1826L432 1608H253ZM158 0V1465H1046L1035 1250H429V872H1005V657H429V216H1057L1048 0H158Z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1152" d="M299 1608V1862H494V1608H299ZM720 1608V1862H916V1608H720ZM158 0V1465H1046L1035 1250H429V872H1005V657H429V216H1057L1048 0H158Z" />
+<glyph unicode="&#xcc;" horiz-adv-x="602" d="M219 1608L-112 1991H194L382 1608H219ZM165 0V1465H436V0H165Z" />
+<glyph unicode="&#xcd;" horiz-adv-x="602" d="M223 1608L394 1991H693L378 1608H223ZM165 0V1465H436V0H165Z" />
+<glyph unicode="&#xce;" horiz-adv-x="602" d="M-54 1608L196 1991H404L655 1608H471L297 1826L125 1608H-54ZM165 0V1465H436V0H165Z" />
+<glyph unicode="&#xcf;" horiz-adv-x="602" d="M-8 1608V1862H187V1608H-8ZM413 1608V1862H609V1608H413ZM165 0V1465H436V0H165Z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1524" d="M398 206H633Q892 206 1031 340T1171 725Q1171 874 1131 977T1009 1142T814 1229T542 1256H398V829H597V650H398V206ZM131 1V650H6V829H131V1463H522Q1441 1463 1441 729Q1441 553 1381 414T1212 185T952 48T617 1H131Z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1554" d="M434 1608Q434 1644 436 1673T449 1736T478 1793T528 1831T606 1847Q664 1847 735 1826T859 1784T927 1763Q974 1763 974 1847H1121Q1121 1812 1119 1785T1107 1723T1081 1664T1032 1625T955 1608Q896 1608 777
+1653T628 1698Q579 1698 578 1608H434ZM158 0V1465H446Q524 1343 763 973T1054 523Q1069 500 1105 446T1157 368Q1150 711 1150 724V1465H1397V0H1105L444 1030L396 1109Q404 845 404 738V0H158Z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1626" d="M731 1608L400 1991H706L894 1608H731ZM601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99 1088 291 1287T814 1486T1336
+1287T1527 732Q1527 381 1335 180T813 -21Z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1626" d="M735 1608L906 1991H1205L890 1608H735ZM601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99 1088 291 1287T814
+1486T1336 1287T1527 732Q1527 381 1335 180T813 -21Z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1626" d="M459 1608L709 1991H917L1168 1608H984L810 1826L638 1608H459ZM601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99
+1088 291 1287T814 1486T1336 1287T1527 732Q1527 381 1335 180T813 -21Z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1626" d="M470 1608Q470 1644 472 1673T485 1736T514 1793T564 1831T642 1847Q700 1847 771 1826T895 1784T963 1763Q1010 1763 1010 1847H1157Q1157 1812 1155 1785T1143 1723T1117 1664T1068 1625T991 1608Q932 1608 813
+1653T664 1698Q615 1698 614 1608H470ZM601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99 1088 291 1287T814 1486T1336 1287T1527 732Q1527 381 1335 180T813 -21Z"
+/>
+<glyph unicode="&#xd6;" horiz-adv-x="1626" d="M504 1608V1862H699V1608H504ZM925 1608V1862H1121V1608H925ZM601 200T814 200T1135 338T1244 730Q1244 986 1136 1127T815 1268Q602 1268 493 1127T383 730Q383 478 492 339ZM813 -21Q482 -21 291 179T99 733Q99
+1088 291 1287T814 1486T1336 1287T1527 732Q1527 381 1335 180T813 -21Z" />
+<glyph unicode="&#xd7;" horiz-adv-x="1395" d="M412 147L278 283L569 583L278 882L412 1020L713 725L1013 1020L1149 881L857 583Q898 543 1008 429T1149 284L1013 147L713 441L412 147Z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1624" d="M470 -211L370 -169L466 52Q286 138 185 312T84 730Q84 905 138 1047T289 1285T521 1433T816 1485Q953 1485 1073 1447L1166 1660L1272 1619L1179 1404Q1351 1315 1447 1142T1543 730Q1543 558 1489 417T1339 180T1108
+32T812 -21Q684 -21 568 13L470 -211ZM557 260L984 1244Q905 1271 815 1271Q591 1271 474 1124T356 726Q356 565 407 445T557 260ZM815 191Q1040 191 1157 334T1274 726Q1274 885 1226 1005T1085 1192L657 213Q726 191 815 191Z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1468" d="M652 1608L321 1991H627L815 1608H652ZM730 -21Q442 -21 293 122T144 527V1465H416V550Q416 367 490 283T735 199Q902 199 977 283T1052 551V1465H1323V525Q1323 266 1171 123T730 -21Z" />
+<glyph unicode="&#xda;" horiz-adv-x="1468" d="M656 1608L827 1991H1126L811 1608H656ZM730 -21Q442 -21 293 122T144 527V1465H416V550Q416 367 490 283T735 199Q902 199 977 283T1052 551V1465H1323V525Q1323 266 1171 123T730 -21Z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1468" d="M379 1608L629 1991H837L1088 1608H904L730 1826L558 1608H379ZM730 -21Q442 -21 293 122T144 527V1465H416V550Q416 367 490 283T735 199Q902 199 977 283T1052 551V1465H1323V525Q1323 266 1171 123T730 -21Z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1468" d="M425 1608V1862H620V1608H425ZM846 1608V1862H1042V1608H846ZM730 -21Q442 -21 293 122T144 527V1465H416V550Q416 367 490 283T735 199Q902 199 977 283T1052 551V1465H1323V525Q1323 266 1171 123T730 -21Z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1256" d="M549 1608L720 1991H1019L704 1608H549ZM492 0V581L-15 1465H279L628 831L979 1465H1269L764 586V0H492Z" />
+<glyph unicode="&#xde;" horiz-adv-x="1327" d="M178 11V1454H400V1229H687Q817 1229 921 1205T1105 1129T1230 990T1274 785Q1274 573 1122 455T724 337L400 339V11H178ZM401 534H737Q886 534 968 602T1050 793Q1050 928 965 990T710 1052H400L401 534Z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1259" d="M108 0V1024Q108 1246 230 1368T583 1490Q676 1490 756 1469T900 1405T999 1296T1035 1144Q1035 1083 1014 1033T945 937T866 871T769 808Q760 802 755 799Q777 786 824 762T900 721T973 678T1045 627T1106 571T1158
+506T1189 431T1202 344Q1202 229 1148 150T1003 36T794 0H502L527 179H767Q851 179 897 223T943 345Q943 391 922 430T858 503T778 558T679 612T589 663Q502 716 502 786Q502 849 573 903Q591 916 629 942T689 985T735 1027T773 1081T785 1144Q785 1217 729 1258T582
+1299Q516 1299 472 1280T405 1221T372 1134T363 1016V0H108Z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1142" d="M465 1248L134 1631H440L628 1248H465ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200 953T167 1043Q361
+1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795 67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1142" d="M469 1248L640 1631H939L624 1248H469ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200 953T167 1043Q361
+1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795 67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1142" d="M191 1248L441 1631H649L900 1248H716L542 1466L370 1248H191ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865
+200 953T167 1043Q361 1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795 67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1142" d="M202 1248Q202 1284 204 1313T217 1376T246 1433T296 1471T374 1487Q432 1487 503 1466T627 1424T695 1403Q742 1403 742 1487H889Q889 1452 887 1425T875 1363T849 1304T800 1265T723 1248Q664 1248 545 1293T396
+1338Q347 1338 346 1248H202ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200 953T167 1043Q361 1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795
+67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1142" d="M238 1248V1502H433V1248H238ZM659 1248V1502H855V1248H659ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200
+953T167 1043Q361 1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795 67T774 134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1142" d="M495 1341T546 1341T624 1373T652 1451Q652 1496 624 1529T546 1563Q495 1563 467 1531T439 1451Q439 1405 467 1373ZM646 1248T546 1248T386 1308T325 1452Q325 1535 384 1593T546 1652Q647 1652 706 1594T766
+1452Q766 1368 706 1308ZM423 -21Q270 -21 176 63T81 307Q81 478 193 560T531 665Q562 669 598 673T679 681T750 688V746Q750 846 704 891T564 937Q430 937 233 862Q232 865 200 953T167 1043Q361 1126 587 1126Q809 1126 910 1030T1011 717V0H817Q816 4 795 67T774
+134Q692 54 614 17T423 -21ZM494 165Q585 165 652 208T749 314V526Q746 526 697 522T643 518Q484 504 410 458T336 310Q336 240 377 203T494 165Z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1679" d="M411 -22Q258 -22 165 74T72 317Q72 362 80 398T110 462T154 510T217 547T292 574T386 594T489 609T608 623L693 630V747Q693 850 654 897T507 949Q366 949 183 872L134 1052Q309 1135 523 1135Q649 1135 734 1090T848
+959Q905 1038 999 1086T1209 1135Q1314 1135 1394 1094T1520 981T1590 819T1613 625Q1613 581 1574 561T1456 537Q1263 526 941 500Q948 339 1021 254T1232 168Q1322 168 1399 192T1519 249L1591 87Q1442 -21 1216 -21Q966 -21 837 138Q662 -22 411 -22ZM449 150Q584
+150 744 273Q732 297 716 360T698 475Q695 475 652 470T607 464Q541 456 499 449T416 429T354 401T319 361T306 305Q306 230 342 190T449 150ZM944 644L1380 683Q1382 697 1382 714Q1380 944 1207 944Q1160 944 1118 929T1038 881T975 788T944 644Z" />
+<glyph unicode="&#xe7;" horiz-adv-x="1008" d="M437 -389L560 -8H704L646 -389H437ZM614 -21Q362 -21 222 129T81 558Q81 828 228 977T617 1126Q810 1126 943 1043L881 856Q745 927 628 927Q495 927 419 832T342 555Q342 371 417 275T631 179Q775 179 908 264L933
+65Q864 19 790 -1T614 -21Z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1157" d="M497 1248L166 1631H472L660 1248H497ZM641 -21Q376 -21 229 131T81 553Q81 815 220 970T599 1126Q826 1126 951 984T1077 607Q1077 590 1077 552T1076 496H345Q349 342 429 258T651 173Q831 173 997 267L1034 81Q869
+-21 641 -21ZM350 661H830Q830 795 769 867T600 939Q499 939 430 869T350 661Z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1157" d="M501 1248L672 1631H971L656 1248H501ZM641 -21Q376 -21 229 131T81 553Q81 815 220 970T599 1126Q826 1126 951 984T1077 607Q1077 590 1077 552T1076 496H345Q349 342 429 258T651 173Q831 173 997 267L1034 81Q869
+-21 641 -21ZM350 661H830Q830 795 769 867T600 939Q499 939 430 869T350 661Z" />
+<glyph unicode="&#xea;" horiz-adv-x="1157" d="M225 1248L475 1631H683L934 1248H750L576 1466L404 1248H225ZM641 -21Q376 -21 229 131T81 553Q81 815 220 970T599 1126Q826 1126 951 984T1077 607Q1077 590 1077 552T1076 496H345Q349 342 429 258T651 173Q831
+173 997 267L1034 81Q869 -21 641 -21ZM350 661H830Q830 795 769 867T600 939Q499 939 430 869T350 661Z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1157" d="M270 1248V1502H465V1248H270ZM691 1248V1502H887V1248H691ZM641 -21Q376 -21 229 131T81 553Q81 815 220 970T599 1126Q826 1126 951 984T1077 607Q1077 590 1077 552T1076 496H345Q349 342 429 258T651 173Q831
+173 997 267L1034 81Q869 -21 641 -21ZM350 661H830Q830 795 769 867T600 939Q499 939 430 869T350 661Z" />
+<glyph unicode="&#xec;" horiz-adv-x="548" d="M175 1248L-156 1631H150L338 1248H175ZM129 0V1098H384V0H129Z" />
+<glyph unicode="&#xed;" horiz-adv-x="548" d="M435 1248L606 1631H905L590 1248H435ZM129 0V1098H384V0H129Z" />
+<glyph unicode="&#xee;" horiz-adv-x="548" d="M-98 1248L152 1631H360L611 1248H427L253 1466L81 1248H-98ZM129 0V1098H384V0H129Z" />
+<glyph unicode="&#xef;" horiz-adv-x="548" d="M-52 1248V1502H143V1248H-52ZM369 1248V1502H565V1248H369ZM129 0V1098H384V0H129Z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1226" d="M626 -21Q383 -21 234 114T84 467Q84 695 218 824T581 953Q636 953 730 924Q722 939 629 1050T505 1193L256 1092L189 1226L394 1309L191 1509H489L608 1396L858 1496L927 1364L716 1280Q940 1032 1047 858Q1159
+674 1159 481Q1159 376 1127 287T1030 128T863 19T626 -21ZM625 178Q766 178 842 257T919 472Q919 608 841 691T619 774T400 695T323 478Q323 344 403 261T625 178Z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1254" d="M288 1248Q288 1284 290 1313T303 1376T332 1433T382 1471T460 1487Q518 1487 589 1466T713 1424T781 1403Q828 1403 828 1487H975Q975 1452 973 1425T961 1363T935 1304T886 1265T809 1248Q750 1248 631 1293T482
+1338Q433 1338 432 1248H288ZM133 0V1099H344L373 960Q541 1126 746 1126Q938 1126 1033 1016T1129 695V0H866V663Q865 796 823 862T672 928Q587 928 517 885T414 775Q395 697 395 535V0H133Z" />
+<glyph unicode="&#xf2;" horiz-adv-x="1222" d="M529 1248L198 1631H504L692 1248H529ZM612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81 819 221 972T616 1126Q862
+1126 1001 970T1141 553Q1141 290 1000 135T605 -21Z" />
+<glyph unicode="&#xf3;" horiz-adv-x="1222" d="M533 1248L704 1631H1003L688 1248H533ZM612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81 819 221 972T616 1126Q862
+1126 1001 970T1141 553Q1141 290 1000 135T605 -21Z" />
+<glyph unicode="&#xf4;" horiz-adv-x="1222" d="M257 1248L507 1631H715L966 1248H782L608 1466L436 1248H257ZM612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81
+819 221 972T616 1126Q862 1126 1001 970T1141 553Q1141 290 1000 135T605 -21Z" />
+<glyph unicode="&#xf5;" horiz-adv-x="1222" d="M268 1248Q268 1284 270 1313T283 1376T312 1433T362 1471T440 1487Q498 1487 569 1466T693 1424T761 1403Q808 1403 808 1487H955Q955 1452 953 1425T941 1363T915 1304T866 1265T789 1248Q730 1248 611 1293T462
+1338Q413 1338 412 1248H268ZM612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81 819 221 972T616 1126Q862 1126 1001 970T1141 553Q1141 290 1000 135T605 -21Z"
+/>
+<glyph unicode="&#xf6;" horiz-adv-x="1222" d="M302 1248V1502H497V1248H302ZM723 1248V1502H919V1248H723ZM612 178Q745 178 812 275T879 553Q879 736 812 832T610 928Q477 928 410 832T342 552Q342 372 410 275T612 178ZM605 -21Q361 -21 221 137T81 553Q81
+819 221 972T616 1126Q862 1126 1001 970T1141 553Q1141 290 1000 135T605 -21Z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1456" d="M590 21V281H865V21H590ZM178 489V676H1274V489H178ZM590 875V1134H874V875H590Z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1193" d="M302 -215L240 -181L336 41Q207 107 139 240T71 550Q71 810 209 964T601 1119Q707 1119 800 1089L894 1269L963 1246L870 1059Q995 993 1060 862T1125 552Q1125 296 987 140T595 -16Q488 -16 403 14L302 -215ZM420
+231L721 913Q668 940 598 940Q464 940 391 839T318 551Q318 330 420 231ZM599 163Q734 163 806 265T878 551Q878 769 783 867L482 188Q532 163 599 163Z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1163" d="M500 1248L169 1631H475L663 1248H500ZM795 -21T581 -21T237 86T106 400V1099H369V410Q369 287 420 232T584 177Q694 177 744 231T795 410V1099H1057V400Q1057 194 926 87Z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1163" d="M504 1248L675 1631H974L659 1248H504ZM795 -21T581 -21T237 86T106 400V1099H369V410Q369 287 420 232T584 177Q694 177 744 231T795 410V1099H1057V400Q1057 194 926 87Z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1163" d="M227 1248L477 1631H685L936 1248H752L578 1466L406 1248H227ZM795 -21T581 -21T237 86T106 400V1099H369V410Q369 287 420 232T584 177Q694 177 744 231T795 410V1099H1057V400Q1057 194 926 87Z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1163" d="M273 1248V1502H468V1248H273ZM694 1248V1502H890V1248H694ZM795 -21T581 -21T237 86T106 400V1099H369V410Q369 287 420 232T584 177Q694 177 744 231T795 410V1099H1057V400Q1057 194 926 87Z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1116" d="M474 1248L645 1631H944L629 1248H474ZM191 -463Q127 -463 55 -455L42 -252Q88 -257 159 -257Q250 -257 305 -221T396 -93Q400 -83 436 20L-6 1099H274L563 302Q595 421 706 744T829 1099H1109Q652 -109 648 -119Q577
+-304 469 -383T191 -463Z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1288" d="M160 -431V1205L155 1498H385V938Q412 977 501 1024T711 1072Q832 1072 927 1029T1083 911T1174 736T1206 521Q1206 432 1188 353T1132 206T1038 88T902 10T726 -19Q654 -19 590 -3T484 38T419 82T385 118V-431H160ZM694
+176Q769 176 824 204T912 283T959 396T975 531T960 665T913 777T826 856T696 885Q540 885 462 789T384 531Q384 368 460 272T694 176Z" />
+<glyph unicode="&#xff;" horiz-adv-x="1116" d="M243 1248V1502H438V1248H243ZM664 1248V1502H860V1248H664ZM191 -463Q127 -463 55 -455L42 -252Q88 -257 159 -257Q250 -257 305 -221T396 -93Q400 -83 436 20L-6 1099H274L563 302Q595 421 706 744T829 1099H1109Q652
+-109 648 -119Q577 -304 469 -383T191 -463Z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1271" d="M89 461V646H1188V461H89Z" />
+<glyph unicode="&#x2014;" horiz-adv-x="2151" d="M30 461V646H2116V461H30Z" />
+<glyph unicode="&#x2018;" horiz-adv-x="442" d="M386 1466L278 973H60L219 1466H386Z" />
+<glyph unicode="&#x2019;" horiz-adv-x="442" d="M60 973L168 1466H386L227 973H60Z" />
+<glyph unicode="&#x201a;" horiz-adv-x="557" d="M116 -280L224 212H444L285 -280H116Z" />
+<glyph unicode="&#x201c;" horiz-adv-x="953" d="M795 1466L687 973H477L625 1466H795ZM495 1466L395 973H176L336 1466H495Z" />
+<glyph unicode="&#x201d;" horiz-adv-x="953" d="M176 973L284 1466H494L346 973H176ZM476 973L576 1466H795L635 973H476Z" />
+<glyph unicode="&#x201e;" horiz-adv-x="1005" d="M158 -280L269 212H500L331 -280H158ZM512 -280L630 212H855L692 -280H512Z" />
+<glyph unicode="&#x2022;" horiz-adv-x="995" d="M651 355T497 355T243 451T143 692Q143 838 246 937T503 1037Q655 1037 755 941T856 699Q856 552 754 454Z" />
+<glyph unicode="&#x2039;" horiz-adv-x="584" d="M321 174L55 568L327 965H529L268 568L522 174H321Z" />
+<glyph unicode="&#x203a;" horiz-adv-x="584" d="M56 174L316 569L63 965H263L531 569L257 174H56Z" />
+</font>
+</defs>
+</svg>
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.ttf b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.ttf
new file mode 100644
index 000000000..a46219ccc
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.ttf differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff
new file mode 100644
index 000000000..8388bd85d
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff2 b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff2
new file mode 100644
index 000000000..36993db06
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-700/Oxygen-700.woff2 differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/LICENSE.txt b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/LICENSE.txt
new file mode 100644
index 000000000..5f3451c67
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2012, vernon adams (vern@newtypography.co.uk), with Reserved Font Names 'Oxygen'
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.eot b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.eot
new file mode 100644
index 000000000..e1417a0af
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.eot differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.svg b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.svg
new file mode 100644
index 000000000..08201dab7
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.svg
@@ -0,0 +1,312 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs >
+<font id="Oxygen" horiz-adv-x="919" ><font-face
+ font-family="Oxygen"
+ units-per-em="2048"
+ panose-1="2 0 5 3 0 0 0 0 0 0"
+ ascent="2103"
+ descent="-483"
+ alphabetic="0" />
+<glyph unicode=" " horiz-adv-x="511" />
+<glyph unicode="!" horiz-adv-x="586" d="M160 67T160 120T195 212T293 252Q356 252 391 213T426 120T391 27T293 -12Q231 -12 196 27ZM391 1496V1354L335 435H256L194 1354V1496H391Z" />
+<glyph unicode="&quot;" horiz-adv-x="710" d="M446 1016L425 1510H576L547 1016H446ZM160 1016L139 1510H290L261 1016H160Z" />
+<glyph unicode="#" horiz-adv-x="1134" d="M1032 1055L1018 931H871L804 536H951L941 410H786L700 -23H549L633 410H398L318 -23H189L262 410H91L101 536H284L345 930H168L177 1055H370L453 1462H606L527 1055H761L832 1462H960L894 1055H1032ZM737 931H502L422
+536H658L737 931Z" />
+<glyph unicode="$" horiz-adv-x="1241" d="M580 1693H675V1525Q930 1517 1089 1418L1039 1277Q978 1311 879 1338T675 1371V863L779 838Q959 795 1052 701T1145 432Q1145 217 1020 103T675 -22V-195H580V-22Q420 -17 295 18T94 100L146 244Q348 145 580 132V712L433
+749Q96 834 96 1109Q96 1306 224 1408T580 1523V1693ZM580 886V1370Q276 1352 276 1121Q276 1036 331 985T498 906L580 886ZM675 688V131Q966 146 966 426Q966 522 915 581T727 675L675 688Z" />
+<glyph unicode="%" horiz-adv-x="1877" d="M1431 754Q1600 754 1692 648T1784 369Q1784 201 1691 93T1431 -15Q1263 -15 1171 92T1079 369T1172 646T1431 754ZM1538 640T1431 640T1265 561T1205 369Q1205 254 1264 176T1431 98T1597 177T1657 369Q1657 484 1598
+562ZM401 -4L1196 1462H1358L536 -4H401ZM420 1489Q565 1489 652 1381T740 1104Q740 940 652 834T420 728Q275 728 189 833T103 1104Q103 1271 189 1380T420 1489ZM420 1378Q330 1378 280 1298T230 1104Q230 989 279 917T420 844T561 918T611 1104Q611 1219 560
+1298T420 1378Z" />
+<glyph unicode="&amp;" horiz-adv-x="1477" d="M441 839Q348 940 308 1008T268 1165Q268 1314 373 1401T657 1489Q762 1489 848 1457T990 1353T1046 1182Q1046 1118 1021 1062T947 959T841 876T707 804L1108 375Q1188 459 1250 599L1371 507Q1309 371 1212 257L1393
+41Q1319 13 1236 -11L1100 143Q894 -23 620 -23Q367 -23 236 87T104 395Q104 548 190 652T441 839ZM544 726Q418 662 350 586T281 406Q281 277 373 205T629 132Q825 132 985 259Q911 339 765 493T544 726ZM660 1345Q567 1345 511 1298T455 1165Q455 1097 491 1041T605
+910Q666 940 703 962T781 1016T839 1087T858 1171Q858 1254 801 1299T660 1345Z" />
+<glyph unicode="&apos;" horiz-adv-x="423" d="M283 1486L263 975H148L127 1486H283Z" />
+<glyph unicode="(" horiz-adv-x="609" d="M103 598Q103 1088 376 1486H531Q273 1084 273 602Q273 376 341 146T531 -271H378Q249 -92 176 132T103 598Z" />
+<glyph unicode=")" horiz-adv-x="609" d="M506 598Q506 357 433 133T230 -271H78Q200 -84 268 146T336 602Q336 1082 77 1486H232Q506 1082 506 598Z" />
+<glyph unicode="*" horiz-adv-x="1105" d="M643 1522L607 1111L966 1262L1016 1091L649 1008Q660 993 756 866T901 675Q875 659 824 628T747 581L547 943L358 581L202 675L450 1008L87 1091L137 1262L494 1111L457 1522H643Z" />
+<glyph unicode="+" horiz-adv-x="1126" d="M637 718H1027V582H636V153H499V582H102V718H500V1142H637V718Z" />
+<glyph unicode="," horiz-adv-x="505" d="M109 -278Q112 -249 126 -125T149 85T161 234H358V190Q309 -8 214 -278H109Z" />
+<glyph unicode="-" horiz-adv-x="672" d="M86 497V644H586V497H86Z" />
+<glyph unicode="." horiz-adv-x="494" d="M261 -12Q199 -12 164 27T128 120Q128 174 163 213T261 252T359 213T394 120T359 27T261 -12Z" />
+<glyph unicode="/" horiz-adv-x="952" d="M194 -218H50L726 1466H872L194 -218Z" />
+<glyph unicode="0" horiz-adv-x="1241" d="M755 -23T622 -23T389 35T229 200T139 444T109 751Q109 890 128 1008T189 1222T290 1385T435 1488T622 1525Q750 1525 848 1469T1008 1310T1101 1066T1132 751Q1132 582 1103 444T1014 200T855 36ZM724 1373T622 1373T447
+1293T338 1075T301 757Q301 574 337 434T447 211T622 129T797 211T906 433T943 757Q943 937 907 1074T797 1292Z" />
+<glyph unicode="1" horiz-adv-x="626" d="M302 1496H461V0H284V1311Q183 1245 37 1198V1365Q53 1372 102 1393T175 1425T237 1456T302 1496Z" />
+<glyph unicode="2" horiz-adv-x="1116" d="M113 0L90 164L607 738Q659 796 707 888T778 1044L801 1107Q801 1231 732 1299T536 1368Q324 1368 202 1245L144 1395Q282 1525 548 1525Q752 1525 873 1415T994 1119Q990 1105 982 1082T948 990T892 861T819 727T728
+605L306 154H999L988 0H113Z" />
+<glyph unicode="3" horiz-adv-x="1103" d="M496 -23Q362 -23 258 12T105 93L161 240Q302 129 497 129Q647 129 735 203T824 412Q824 485 802 539T742 627T646 681T526 710T383 721Q373 721 353 721T323 722V871H373Q443 872 496 878T603 902T692 947T749 1022T771
+1133Q771 1373 496 1373Q397 1373 310 1344T161 1266L105 1412Q254 1525 534 1525Q647 1525 743 1484T901 1357T963 1156Q963 1016 894 926T700 797Q840 767 919 666T999 410Q999 213 858 95T496 -23Z" />
+<glyph unicode="4" horiz-adv-x="1211" d="M1122 371H952V0H784V371H108V524L765 1496H952V516H1136L1122 371ZM784 1269L284 516H784V1269Z" />
+<glyph unicode="5" horiz-adv-x="1177" d="M1004 1496L990 1332H379Q369 1041 364 861Q477 933 609 933Q720 933 807 898T950 800T1035 656T1064 477Q1064 250 919 114T523 -23Q272 -23 121 114L186 255Q334 139 529 139Q693 139 788 232T883 475Q883 609 803
+692T575 776T337 677L198 696L237 1496H1004Z" />
+<glyph unicode="6" horiz-adv-x="1199" d="M637 921Q763 921 870 862T1042 693T1107 449Q1107 245 970 111T607 -23Q490 -23 394 16T235 123T138 280T103 472Q103 635 162 763T378 1089Q416 1137 498 1237T644 1413L707 1489H938L412 861Q525 921 637 921ZM292
+453Q292 364 325 292T430 175T601 129Q749 129 833 220T918 446Q918 588 834 679T601 771Q444 771 368 682T292 453Z" />
+<glyph unicode="7" horiz-adv-x="1052" d="M261 0L775 1341H100L111 1496H978V1360L443 0H261Z" />
+<glyph unicode="8" horiz-adv-x="1182" d="M594 -23Q458 -23 349 22T171 162T103 385Q103 528 185 634T414 788Q134 887 134 1148Q134 1325 262 1425T594 1525Q797 1525 923 1425T1049 1148Q1049 1016 981 926T791 788Q926 740 1003 634T1080 385Q1080 193 942
+85T594 -23ZM594 703Q451 670 365 593T279 397Q279 274 368 202T594 129T817 201T904 397Q904 516 820 593T594 703ZM594 1373Q476 1373 394 1314T311 1152Q311 916 594 853Q873 916 873 1152Q873 1255 792 1314T594 1373Z" />
+<glyph unicode="9" horiz-adv-x="1165" d="M556 598Q429 598 323 653T151 814T86 1053Q86 1257 226 1391T592 1525Q709 1525 804 1488T961 1385T1056 1232T1090 1042Q1090 899 1041 783T872 504Q829 447 729 321T549 98L470 0H250L781 658Q668 598 556 598ZM901
+1061Q901 1198 824 1285T598 1373Q449 1373 362 1282T275 1056Q275 916 359 832T592 748Q750 748 825 835T901 1061Z" />
+<glyph unicode=":" horiz-adv-x="494" d="M146 893V1124H352V893H146ZM146 -25V208H352V-25H146Z" />
+<glyph unicode=";" horiz-adv-x="518" d="M174 893V1124H380V893H174ZM376 197L251 -310H138L194 197H376Z" />
+<glyph unicode="&lt;" horiz-adv-x="1175" d="M1061 146L103 605V702L1063 1195V1037L288 658L1061 304V146Z" />
+<glyph unicode="=" horiz-adv-x="1228" d="M132 377V519H1097V377H132ZM131 799V943H1097V799H131Z" />
+<glyph unicode="&gt;" horiz-adv-x="1176" d="M115 311L889 658L117 1044V1200L1075 701V604L115 152V311Z" />
+<glyph unicode="?" horiz-adv-x="865" d="M404 435H317Q317 499 346 582T418 744T501 902T572 1056T602 1186Q601 1281 541 1327T377 1373Q248 1373 118 1292L73 1427Q196 1524 404 1524Q566 1524 665 1439T765 1200Q765 1123 743 1050T680 908T597 773T499 615T404
+435ZM242 67T242 120T277 212T375 252Q438 252 473 213T508 120T473 27T375 -12Q313 -12 278 27Z" />
+<glyph unicode="@" horiz-adv-x="1814" d="M1703 784Q1703 667 1668 566T1574 399T1441 296T1290 259Q1209 259 1155 304T1090 430Q1045 366 977 317T822 268Q692 268 615 361T538 616Q538 823 649 961T956 1099Q1099 1099 1260 1044Q1253 994 1239 900T1217 751T1202
+631T1195 523Q1195 381 1306 381Q1407 381 1489 501T1572 791Q1572 1056 1397 1212T942 1368Q741 1368 582 1275T334 1018T245 649Q245 343 419 169T886 -5Q1135 -5 1332 108L1367 -3Q1177 -131 885 -131Q535 -131 323 78T111 645Q111 823 173 980T345 1249T612
+1427T951 1492Q1165 1492 1335 1406T1604 1158T1703 784ZM680 609Q680 510 720 453T841 396Q947 396 1002 483T1077 730Q1086 801 1103 958Q1046 978 957 978Q865 978 802 927T709 795T680 609Z" />
+<glyph unicode="A" horiz-adv-x="1302" d="M892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="B" horiz-adv-x="1286" d="M347 704V142H656Q844 142 938 211T1032 428Q1032 581 931 642T614 704H347ZM347 843H664Q819 843 898 897T977 1089Q977 1228 883 1280T589 1333H347V843ZM174 1479H598Q883 1479 1020 1392T1158 1115Q1158 1087 1155
+1060T1137 989T1097 911T1024 840T910 783Q1059 755 1136 657T1213 421Q1213 220 1082 110T690 0H174V1479Z" />
+<glyph unicode="C" horiz-adv-x="1290" d="M823 1352Q656 1352 536 1271T356 1053T297 738Q297 605 329 496T425 304T591 176T827 130Q998 130 1181 219L1210 72Q1061 -22 807 -22Q640 -22 508 33T289 190T157 432T112 745Q112 911 161 1051T299 1291T523 1448T821
+1504Q1070 1504 1241 1394L1173 1253Q1009 1352 823 1352Z" />
+<glyph unicode="D" horiz-adv-x="1502" d="M1205 736Q1205 1046 1045 1187T579 1328H347V151H608Q900 151 1052 298T1205 736ZM1390 741Q1390 380 1185 190T613 0H174V1479H584Q769 1479 915 1436T1168 1304T1333 1073T1390 741Z" />
+<glyph unicode="E" horiz-adv-x="1143" d="M174 0V1479H1022L1015 1326H347V842H982V691H347V153H1037L1029 0H174Z" />
+<glyph unicode="F" horiz-adv-x="1041" d="M347 0H174V1479H995L988 1326H347V807H958V660H347V0Z" />
+<glyph unicode="G" horiz-adv-x="1461" d="M819 -22Q650 -22 516 34T294 192T160 433T113 738Q113 962 198 1134T451 1405T849 1504Q1104 1504 1297 1388L1231 1245Q1045 1352 851 1352Q716 1352 610 1306T436 1177T333 983T297 738Q297 456 437 293T852 129Q1008
+129 1169 192V614H820L826 765H1331V89Q1205 29 1088 4T819 -22Z" />
+<glyph unicode="H" horiz-adv-x="1488" d="M1314 0H1141V692H347V0H174V1479H347V844H1141V1479H1314V0Z" />
+<glyph unicode="I" horiz-adv-x="540" d="M355 0H182V1479H355V0Z" />
+<glyph unicode="J" horiz-adv-x="550" d="M226 181V1496H403V241Q403 168 400 118T388 17T362 -68T316 -131T247 -178T148 -204T16 -214H-19L-40 -72H34Q87 -72 123 -59T180 -27T210 29T223 96T226 181Z" />
+<glyph unicode="K" horiz-adv-x="1242" d="M1260 0H1048L482 706L347 587V0H173V1479H347V753L997 1479H1214L614 813L1260 0Z" />
+<glyph unicode="L" horiz-adv-x="1021" d="M174 0V1479H348V154H999L993 0H174Z" />
+<glyph unicode="M" horiz-adv-x="1817" d="M822 91L368 1147L330 1248L337 886V0H175V1479H399L914 301L1424 1479H1642V0H1474V890L1481 1244L1444 1143L991 91H822Z" />
+<glyph unicode="N" horiz-adv-x="1516" d="M1342 0H1146L378 1164L328 1233Q336 1023 336 858V0H174V1479H367L1137 315L1188 246Q1181 565 1181 615V1479H1342V0Z" />
+<glyph unicode="O" horiz-adv-x="1626" d="M296 739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113 34T814 -22Q590 -22 431 73T192 339T112 740Q112 1095 297 1300T815
+1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="P" horiz-adv-x="1159" d="M323 0H146V1496H628Q738 1496 827 1473T985 1403T1092 1277T1130 1093Q1130 1006 1114 938T1059 809T957 710T796 648T567 625Q464 625 323 638V0ZM584 778Q682 778 752 797T859 844T918 917T945 999T950 1090Q950 1217
+865 1277T632 1337H323V780Q516 778 584 778Z" />
+<glyph unicode="Q" horiz-adv-x="1626" d="M1267 -470Q1219 -422 1108 -275T942 -13Q880 -22 814 -22Q590 -22 431 73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Q1514 482 1409 297T1108 31Q1124 3 1152 -42T1253 -190T1385 -350L1267
+-470ZM558 129T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739Q296 454 427 292Z" />
+<glyph unicode="R" horiz-adv-x="1339" d="M324 1341V841Q365 841 493 839T692 837Q883 837 958 900T1033 1102Q1033 1223 961 1282T720 1341H324ZM1272 0H1072L868 464Q785 651 762 689Q689 684 589 684L324 692V0H147V1496H620Q702 1496 765 1492T890 1478T999
+1449T1085 1401T1149 1330T1188 1233T1202 1105Q1202 965 1129 864T920 724Q920 722 940 688T987 605T1030 522L1272 0Z" />
+<glyph unicode="S" horiz-adv-x="1227" d="M146 244Q377 130 641 130Q966 130 966 426Q966 522 915 581T727 675L433 749Q96 834 96 1109Q96 1320 241 1422T642 1525Q776 1525 893 1496T1089 1418L1039 1277Q972 1314 862 1343T638 1372Q276 1372 276 1121Q276
+1036 331 985T498 906L779 838Q959 795 1052 701T1145 432Q1145 206 1007 92T630 -23Q452 -23 314 13T94 100L146 244Z" />
+<glyph unicode="T" horiz-adv-x="1099" d="M636 0H462V1326H7V1479H1091V1326H636V0Z" />
+<glyph unicode="U" horiz-adv-x="1438" d="M1277 1479V519Q1277 264 1138 121T713 -22T292 121T156 521V1479H330V518Q330 317 425 222T719 127Q913 127 1008 223T1104 519V1479H1277Z" />
+<glyph unicode="V" horiz-adv-x="1242" d="M1062 1479H1247L710 0H530L-5 1479H180L509 541Q573 358 620 196Q635 271 732 544Q888 991 1062 1479Z" />
+<glyph unicode="W" horiz-adv-x="2013" d="M446 0L0 1479H181L547 206L913 1452H1108L1463 205L1832 1479H2013L1561 0H1372L1012 1243L634 0H446Z" />
+<glyph unicode="X" horiz-adv-x="1240" d="M1231 0H1032L620 661L197 0H9L515 772L42 1479H243L626 887L1024 1479H1209L733 775L1231 0Z" />
+<glyph unicode="Y" horiz-adv-x="1194" d="M591 754L1007 1479H1195L673 590V0H498V586L-1 1479H186L591 754Z" />
+<glyph unicode="Z" horiz-adv-x="1184" d="M86 0V136L890 1325H115V1479H1111V1350L302 154H1118L1112 0H86Z" />
+<glyph unicode="[" horiz-adv-x="676" d="M596 -293H143V1483H596V1351H316V-161H596V-293Z" />
+<glyph unicode="\" horiz-adv-x="843" d="M208 1464L807 -60H651L52 1464H208Z" />
+<glyph unicode="]" horiz-adv-x="676" d="M80 -161H360V1351H80V1483H533V-293H80V-161Z" />
+<glyph unicode="^" horiz-adv-x="1157" d="M69 589L514 1516H616L1086 589H943L565 1335L214 589H69Z" />
+<glyph unicode="_" horiz-adv-x="1085" d="M1012 -304H73V-170H1012V-304Z" />
+<glyph unicode="`" horiz-adv-x="643" d="M408 1251L85 1638H335L520 1251H408Z" />
+<glyph unicode="a" horiz-adv-x="1098" d="M460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623 12T435 -23Q281 -23 188 57T94 289Q94 457 221 538T589 639Q622
+642 688 647T788 656V753Q788 869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="b" horiz-adv-x="1215" d="M642 981Q483 981 399 872T314 550Q314 116 641 116Q722 116 783 149T880 243T933 380T951 549Q951 675 922 769T821 922T642 981ZM659 1120Q805 1120 911 1046T1070 845T1123 554Q1123 384 1071 255T912 52T657 -23Q548
+-23 458 24T308 152L291 0H148V1523L315 1533V1170Q315 1036 311 940Q369 1023 461 1071T659 1120Z" />
+<glyph unicode="c" horiz-adv-x="968" d="M607 -23Q365 -23 229 134T92 545Q93 801 231 960T611 1120Q696 1120 775 1099T901 1044L855 914Q738 977 608 977Q449 977 357 861T264 544Q264 348 355 234T609 119Q738 119 873 189L894 56Q785 -23 607 -23Z" />
+<glyph unicode="d" horiz-adv-x="1211" d="M571 121Q736 121 816 227T897 530Q897 752 820 864T569 977Q492 977 433 944T338 852T284 717T265 549Q265 421 296 327T398 177T571 121ZM900 159Q846 76 756 27T555 -22Q338 -22 215 132T92 553Q92 807 217 963T552
+1120Q661 1120 757 1073T902 945L899 1040V1523L1064 1533V0H922L900 159Z" />
+<glyph unicode="e" horiz-adv-x="1108" d="M702 982T574 982T365 892T270 644H849Q849 807 776 894ZM607 -23Q368 -23 231 129T93 545Q93 800 226 958T576 1120Q780 1120 899 981T1019 608Q1019 596 1019 564T1018 518H265Q268 331 361 227T613 122Q787 122 962
+214L988 79Q821 -23 607 -23Z" />
+<glyph unicode="f" horiz-adv-x="669" d="M560 1416Q456 1416 418 1356T379 1148V1097H643V973H379V0H212V973H34L48 1083L212 1097V1146Q214 1358 291 1453T542 1549Q609 1549 706 1534L695 1403Q606 1416 560 1416Z" />
+<glyph unicode="g" horiz-adv-x="1187" d="M569 143Q654 143 718 173T818 256T871 374T889 516V597Q889 677 871 744T816 865T716 949T570 979Q501 979 445 953T352 885T290 786T253 671T242 554Q242 496 254 439T292 328T355 234T447 168T569 143ZM312 -502L297
+-351H501Q586 -351 649 -339T754 -300T822 -239T861 -152T879 -46T884 83V180Q824 94 745 48T544 1Q450 1 371 33T237 120T144 245T88 392T70 545Q70 665 99 767T187 949T339 1074T556 1120Q664 1120 744 1079T889 951V1097H1052V79Q1052 9 1049 -43T1032 -160T995
+-270T931 -362T832 -437T689 -484T497 -502H312Z" />
+<glyph unicode="h" horiz-adv-x="1112" d="M882 0V663Q882 828 830 903T646 978Q520 978 434 915T321 752Q312 677 312 585V0H145V1523L312 1533V1087Q312 1030 308 946Q449 1120 682 1120Q1049 1120 1049 689V0H882Z" />
+<glyph unicode="i" horiz-adv-x="511" d="M340 1097V0H172V1097H340ZM340 1496V1298H172V1496H340Z" />
+<glyph unicode="j" horiz-adv-x="445" d="M330 1097V-139Q330 -245 317 -310T266 -420T164 -484T-3 -502H-55L-77 -351H-25Q14 -351 42 -347T91 -335T125 -312T145 -282T156 -238T161 -186T162 -121V1097H330ZM330 1496V1298H162V1496H330Z" />
+<glyph unicode="k" horiz-adv-x="1041" d="M145 0V1523L311 1533V736V596Q317 602 329 616T348 637Q435 732 798 1097H1010L554 635L1042 0H834L433 540L311 435V0H145Z" />
+<glyph unicode="l" horiz-adv-x="569" d="M438 -20Q278 -20 212 66T145 365V1523L311 1533V431Q311 363 312 322T320 242T336 182T365 146T410 124T476 118Q508 118 602 130L611 -3Q508 -20 438 -20Z" />
+<glyph unicode="m" horiz-adv-x="1773" d="M1536 0V571Q1536 651 1533 705T1517 815T1482 903T1419 956T1323 977Q1213 977 1136 918T1025 752Q1016 680 1016 598V0H849V589Q849 663 844 717T825 823T788 907T725 958T632 977Q512 977 431 916T321 754Q312 677
+312 587V0H145Q143 1029 143 1097H283L304 940Q354 1016 446 1068T655 1120Q716 1120 767 1108T853 1076T915 1031T957 979T982 925Q1102 1120 1349 1120Q1532 1120 1617 1016T1703 706V0H1536Z" />
+<glyph unicode="n" horiz-adv-x="1184" d="M143 0V1097H283L304 940Q369 1021 466 1070T677 1120Q867 1120 958 1014T1049 686V0H882Q882 660 881 707Q877 847 825 912T649 977Q520 977 434 915T322 754Q312 687 312 600V0H143Z" />
+<glyph unicode="o" horiz-adv-x="1201" d="M265 546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365 -23 229 137T92 548Q92 804 229 962T605 1120Q840 1120 974
+962T1108 549Z" />
+<glyph unicode="p" horiz-adv-x="1201" d="M143 -476V1097H290L306 948Q450 1120 652 1120Q802 1120 906 1045T1059 842T1109 543Q1109 379 1055 252T897 51T652 -23Q546 -23 453 24T304 150Q310 42 310 -60V-465L143 -476ZM629 118Q705 118 765 152T862 247T918
+383T937 549Q937 737 858 857T627 978Q309 978 309 567Q309 344 383 231T629 118Z" />
+<glyph unicode="q" horiz-adv-x="1211" d="M552 -23Q409 -23 305 51T148 251T96 541Q96 711 148 840T306 1045T560 1120Q765 1120 905 942L917 1097H1065V-466L898 -476V11Q898 84 903 159Q847 75 756 26T552 -23ZM574 121Q740 121 818 225T899 529Q899 750 822
+863T573 976Q469 976 399 917T298 764T268 547Q268 454 285 379T339 245T434 154T574 121Z" />
+<glyph unicode="r" horiz-adv-x="746" d="M635 1107Q680 1107 717 1101L711 947Q665 955 631 955Q491 955 404 858T316 616V0H149Q148 1010 148 1097H287L303 900Q360 993 448 1050T635 1107Z" />
+<glyph unicode="s" horiz-adv-x="953" d="M470 -23Q358 -23 264 1T110 63L131 204Q298 115 459 115Q703 115 710 287Q710 360 658 402T454 496L371 525Q227 573 166 644T103 821Q103 950 206 1035T490 1120Q676 1120 829 1048L780 920Q625 984 490 984Q385 984
+326 943T266 826Q266 762 309 728T481 650Q514 638 564 622Q730 568 799 495T868 296Q866 144 759 61T470 -23Z" />
+<glyph unicode="t" horiz-adv-x="710" d="M493 -20Q331 -20 263 59T191 314V973H28L35 1083L190 1097L247 1348L357 1352V1097H662V973H357V344Q357 219 395 168T525 117Q558 117 668 133L675 1Q556 -20 493 -20Z" />
+<glyph unicode="u" horiz-adv-x="1100" d="M105 366V1097H273V364Q273 292 293 242T352 165T439 125T551 113Q681 113 753 170T826 364V1097H994V366Q994 282 970 215T906 104T808 30T688 -12T551 -25Q479 -25 415 -12T294 30T195 104T129 216T105 366Z" />
+<glyph unicode="v" horiz-adv-x="1031" d="M424 0L-1 1097H178L420 445Q420 445 520 167Q554 274 614 443Q690 656 850 1097H1028L606 0H424Z" />
+<glyph unicode="w" horiz-adv-x="1606" d="M1090 0Q859 738 804 919Q773 809 733 681T663 461T585 223T512 0H332L19 1097H192L427 199Q476 359 715 1097H904Q1142 343 1184 202L1416 1097H1587L1271 0H1090Z" />
+<glyph unicode="x" horiz-adv-x="1057" d="M433 558L46 1097H237L530 679L824 1097H1015L627 556L1025 0H840L531 441L222 0H31L433 558Z" />
+<glyph unicode="y" horiz-adv-x="1022" d="M3 1097H180L526 184L834 1097H1011Q567 -125 552 -163Q483 -336 385 -416T127 -497Q79 -497 26 -489L16 -347Q72 -351 100 -351Q213 -351 271 -310T376 -154Q417 -49 437 8L3 1097Z" />
+<glyph unicode="z" horiz-adv-x="912" d="M849 0H83V126L644 965H98V1097H831V965L271 132H849V0Z" />
+<glyph unicode="{" horiz-adv-x="733" d="M454 84Q454 -44 493 -93T641 -143V-281Q454 -280 372 -197T289 62V269Q289 340 282 387T252 475T187 536T75 556V701Q107 701 132 704T178 714T214 729T241 750T261 775T274 807T283 843T287 886T288 933T289 987V1230Q289
+1385 378 1462T641 1539V1401Q532 1400 493 1350T454 1173V908Q454 817 410 751T269 626Q364 596 409 521T454 349V84Z" />
+<glyph unicode="|" horiz-adv-x="799" d="M327 1579H472V-400H327V1579Z" />
+<glyph unicode="}" horiz-adv-x="738" d="M466 632Q371 662 327 736T282 908V1173Q282 1299 243 1349T95 1401V1539Q279 1539 363 1455T447 1195V987Q447 929 451 891T467 814T503 753T565 716T662 701V556Q607 556 568 542T506 505T469 444T452 365T447 269V27Q447
+-279 95 -281V-143Q203 -142 242 -93T282 84V349Q282 444 321 502T466 632Z" />
+<glyph unicode="~" horiz-adv-x="1255" d="M387 663Q323 663 266 618T172 503L120 608Q158 697 226 751T391 806Q449 806 503 791T638 739Q647 735 672 724T707 709T738 696T769 683T797 674T825 666T849 661T873 659Q932 659 988 703T1081 815L1137 719Q1098
+624 1030 571T868 517Q779 517 633 583Q568 613 537 626T464 651T387 663Z" />
+<glyph unicode="&#xa0;" horiz-adv-x="511" />
+<glyph unicode="&#xa1;" horiz-adv-x="586" d="M426 1148T426 1095T391 1003T293 963Q230 963 195 1002T160 1095T195 1188T293 1227Q355 1227 390 1188ZM195 -281V-139L251 780H330L392 -139V-281H195Z" />
+<glyph unicode="&#xa2;" horiz-adv-x="1102" d="M547 1496H642V1314Q809 1303 896 1221L854 1102Q759 1166 642 1176V307Q755 318 855 388L897 268Q803 182 642 170V1H547V170Q398 183 288 265T124 471T70 742Q71 850 104 949T197 1126T348 1254T547 1314V1496ZM547
+310V1174Q413 1154 327 1032T241 737Q241 566 324 449T547 310Z" />
+<glyph unicode="&#xa3;" horiz-adv-x="1132" d="M696 1503Q899 1503 1053 1373L975 1253Q838 1357 697 1357Q558 1357 500 1264T441 993V815H851V681H441V519Q441 382 417 296T319 153Q401 158 413 158H1068V0H96L85 139Q184 176 226 251T269 449V681H83V815H269V911Q269
+981 274 1041T291 1162T324 1273T378 1366T455 1439T560 1486T696 1503Z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1151" d="M267 860T267 732T357 514T576 423Q705 423 795 513T886 732T795 951T576 1042T358 951ZM158 732Q158 867 241 981L55 1160L129 1232L313 1057Q426 1150 576 1150Q724 1150 838 1056L1025 1232L1095 1158L911 981Q994
+864 994 732Q994 592 912 482L1094 306L1025 232L838 408Q723 315 576 315Q425 315 313 408L129 233L56 305L241 482Q158 595 158 732Z" />
+<glyph unicode="&#xa5;" horiz-adv-x="1135" d="M567 805L936 1479H1108L685 729H991V605H645V423H992V299H645V0H487V299H134V423H487V605H135V729H439L25 1479H203L567 805Z" />
+<glyph unicode="&#xa6;" horiz-adv-x="788" d="M322 310H468V-399H322V310ZM322 1579H468V872H322V1579Z" />
+<glyph unicode="&#xa7;" horiz-adv-x="1017" d="M141 797Q141 884 186 951T307 1059Q233 1106 197 1164T160 1307Q160 1429 248 1500T497 1582Q595 1591 671 1578T836 1530Q831 1505 823 1458T810 1385Q675 1446 546 1446Q318 1446 318 1311Q318 1249 371 1206T570
+1105Q730 1040 804 968T879 789Q879 703 836 632T719 514Q868 429 868 278Q868 133 753 52T446 -29Q260 -29 145 30V185Q292 109 448 109Q571 109 640 151T709 266Q709 290 704 308T683 344T653 372T604 401T544 429T464 462Q292 528 217 602T141 797ZM292 813Q292
+743 345 698T527 602L584 578Q727 665 727 768Q727 802 712 831T675 881T610 923T533 959T437 995Q373 967 333 920T292 813Z" />
+<glyph unicode="&#xa8;" horiz-adv-x="770" d="M663 1254H508V1466H663V1254ZM272 1254H118V1466H272V1254Z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1841" d="M1701 781Q1701 624 1658 491T1539 264T1363 103T1145 6T902 -26Q783 -26 670 5T457 103T281 263T161 490T117 781Q117 937 160 1070T278 1297T453 1457T665 1554T897 1586Q1023 1586 1140 1554T1359 1456T1537
+1296T1657 1070T1701 781ZM902 67Q1067 67 1199 123T1415 276T1543 502T1588 778T1543 1054T1413 1281T1195 1436T897 1493Q740 1493 613 1437T402 1283T275 1057T230 783Q230 634 275 505T403 278T615 124T902 67ZM1191 459L1230 352Q1175 317 1087 294T909 270Q703
+270 569 416T434 785Q434 1010 568 1155T919 1301Q1098 1301 1227 1211L1167 1114Q1122 1146 1052 1164T910 1182Q825 1182 759 1150T652 1063T591 939T570 789Q570 610 661 499T929 387Q997 387 1072 408T1191 459Z" />
+<glyph unicode="&#xaa;" horiz-adv-x="807" d="M134 741H679V635H134V741ZM369 937Q453 937 496 1002T543 1168V1195Q528 1193 496 1191T444 1186T396 1180T348 1169T309 1152T275 1128T255 1094T247 1048Q247 937 369 937ZM350 826Q253 826 191 887T128 1050Q128
+1106 149 1147T204 1212T295 1253T408 1277T543 1289V1307Q541 1397 513 1435T413 1473Q345 1473 296 1457T198 1385L137 1463Q234 1590 419 1590Q525 1590 592 1526T660 1330L658 982Q658 956 664 847H546L543 926Q476 826 350 826Z" />
+<glyph unicode="&#xab;" horiz-adv-x="1000" d="M390 149L120 520L100 567L393 970L536 935L262 561L531 185L390 149ZM771 149Q730 204 655 308T524 490L469 567L773 970L901 935L642 561L898 185L771 149Z" />
+<glyph unicode="&#xac;" horiz-adv-x="1225" d="M1100 825V260H965V681H109V825H1100Z" />
+<glyph unicode="&#xad;" horiz-adv-x="946" d="M108 236V386H843V236H108Z" />
+<glyph unicode="&#xae;" horiz-adv-x="1824" d="M1701 781Q1701 624 1658 491T1539 264T1363 103T1145 6T902 -26Q783 -26 670 5T457 103T281 263T161 490T117 781Q117 937 160 1070T278 1297T453 1457T665 1554T897 1586Q1023 1586 1140 1554T1359 1456T1537
+1296T1657 1070T1701 781ZM902 67Q1067 67 1199 123T1415 276T1543 502T1588 778T1543 1054T1413 1281T1195 1436T897 1493Q740 1493 613 1437T402 1283T275 1057T230 783Q230 634 275 505T403 278T615 124T902 67ZM857 843Q1005 843 1073 875T1141 999Q1141 1093
+1078 1121T847 1149H731V843H857ZM914 716H731V301H599V1277H857Q1300 1277 1300 1007Q1300 899 1239 826T1040 735Q1073 709 1105 666T1161 580T1232 453T1320 301H1171L1046 525Q1014 584 998 611T959 668T914 716Z" />
+<glyph unicode="&#xaf;" horiz-adv-x="1062" d="M886 1625V1503H176V1625H886Z" />
+<glyph unicode="&#xb0;" horiz-adv-x="846" d="M235 1286T235 1205T290 1067T424 1010T557 1067T613 1205T558 1342T424 1399Q347 1399 291 1343ZM112 1075T112 1205T203 1427T423 1519T643 1427T735 1205Q735 1077 644 983T423 889Q295 889 204 982Z" />
+<glyph unicode="&#xb1;" horiz-adv-x="1202" d="M118 0V143H1088V0H118ZM668 790H1086V647H670V233H533V647H118V790H532V1206H668V790Z" />
+<glyph unicode="&#xb2;" horiz-adv-x="763" d="M615 650H134V769Q209 854 238 886T323 985T401 1084T453 1162T493 1241T504 1303Q504 1358 471 1391T380 1424Q273 1424 217 1282L143 1367Q173 1454 237 1502T387 1551Q487 1551 552 1483T617 1305Q617 1252 600
+1197T557 1096T486 990T400 888T297 778H615V650Z" />
+<glyph unicode="&#xb3;" horiz-adv-x="756" d="M352 1424Q270 1424 185 1339L132 1442Q174 1492 233 1522T354 1553Q451 1553 522 1485T593 1305Q593 1174 498 1112Q613 1048 613 899Q613 778 537 705T350 631Q219 631 132 735L187 838Q264 753 346 753Q411 753
+454 794T498 903Q498 979 450 1012T308 1046H260V1174H304Q478 1174 478 1303Q478 1364 444 1394T352 1424Z" />
+<glyph unicode="&#xb4;" horiz-adv-x="639" d="M567 1638L242 1250H128L314 1638H567Z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1068" d="M393 -158V847Q286 849 198 903T61 1039T13 1212Q13 1281 38 1341T115 1452T255 1531T461 1561H927V1430H852V-158H737V1430H518V-158H393Z" />
+<glyph unicode="&#xb7;" horiz-adv-x="468" d="M318 759V561H150V759H318Z" />
+<glyph unicode="&#xb8;" horiz-adv-x="596" d="M268 -410H114L226 16H312L268 -410Z" />
+<glyph unicode="&#xb9;" horiz-adv-x="601" d="M122 1334V1436Q216 1484 271 1539L368 1538V746H492V650H135V746H253V1409Q205 1377 122 1334Z" />
+<glyph unicode="&#xba;" horiz-adv-x="899" d="M256 1207Q256 1090 307 1016T453 941Q543 941 594 1016T645 1203Q645 1319 593 1396T449 1473Q360 1473 308 1397T256 1207ZM303 1590T451 1590T684 1481T769 1205Q769 1041 685 934T453 826Q299 826 215 933T131
+1210Q131 1374 217 1482Z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1012" d="M534 554L230 149L102 185L361 562L104 935L231 970L534 554ZM915 554L622 149L483 185L753 562L488 935L625 970L915 554Z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1609" d="M122 1334V1436Q216 1484 271 1539L368 1538V746H492V650H135V746H253V1409Q205 1377 122 1334ZM1420 40H1313V240H923V339L1302 899H1422V358H1516L1526 240H1420V40ZM1165 1547H1300L379 0H245L1165 1547ZM1066
+358H1312Q1312 688 1313 716L1066 358Z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1591" d="M245 0L1165 1547H1300L379 0H245ZM934 -30V63Q1157 287 1218 355Q1367 527 1370 617Q1370 682 1330 721T1233 760T1119 729T1020 634L943 699Q977 778 1060 823T1237 868Q1347 868 1423 807T1499 629Q1499 593
+1492 559T1465 486T1430 421T1376 350T1319 284T1247 212T1175 144T1093 69H1487V-30H934ZM135 650V746H253V1409Q205 1377 122 1334V1436Q216 1484 271 1539L368 1538V746H492V650H135Z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1630" d="M1085 361H1331Q1331 664 1334 721L1085 361ZM331 0L1249 1547H1393L465 0H331ZM1334 44V245H942V343L1321 903H1442V361H1538L1546 245H1441V44H1334ZM333 631Q203 631 116 735L168 838Q245 753 328 753Q393 753
+438 794T484 903Q484 1046 293 1046H244V1174H288Q462 1174 462 1303Q462 1364 428 1394T337 1424Q251 1424 166 1339L116 1442Q158 1492 217 1522T338 1553Q438 1553 519 1485T600 1305Q600 1175 487 1112Q620 1049 620 899Q620 780 534 706T333 631Z" />
+<glyph unicode="&#xbf;" horiz-adv-x="865" d="M434 779H521Q521 715 492 632T420 470T337 312T266 158T236 28Q237 -67 297 -113T461 -159Q590 -159 720 -78L765 -213Q642 -310 434 -310Q272 -310 173 -225T73 14Q73 91 95 164T158 306T241 441T339 599T434 779ZM596
+1147T596 1094T561 1002T463 962Q400 962 365 1001T330 1094T365 1187T463 1226Q525 1226 560 1187Z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1302" d="M595 1627L272 2014H522L707 1627H595ZM892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1302" d="M1033 2015L708 1627H594L780 2015H1033ZM892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1302" d="M358 1627L545 2015H758L945 1627H811L650 1899L489 1627H358ZM892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1302" d="M369 1635L287 1690Q322 1788 369 1829T476 1870Q521 1870 582 1846T703 1798T803 1774Q886 1774 928 1872L1014 1836Q979 1720 929 1674T813 1627Q767 1627 705 1650T584 1696T485 1720Q408 1720 369 1635ZM892
+614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1302" d="M923 1627H768V1839H923V1627ZM532 1627H378V1839H532V1627ZM892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1302" d="M500 1806T500 1741T544 1631T651 1585T757 1631T802 1741Q802 1806 758 1851T651 1896T545 1851ZM401 1741Q401 1844 474 1918T650 1992Q753 1992 826 1918T900 1741Q900 1639 827 1564T650 1488Q548 1488 475
+1562T401 1741ZM892 614Q681 1227 659 1303Q659 1303 416 614H892ZM1121 0L948 469H358L179 0H3L571 1482H748L1299 0H1121Z" />
+<glyph unicode="&#xc6;" horiz-adv-x="2092" d="M85 0L1001 1568H1946V1409H1241L1280 882H1911V724H1300L1342 158H1966V0H1183L1152 427H498L258 0H85ZM582 589H1130L1069 1409L582 589Z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1290" d="M676 -434H522L634 -8H720L676 -434ZM823 1352Q656 1352 536 1271T356 1053T297 738Q297 605 329 496T425 304T591 176T827 130Q998 130 1181 219L1210 72Q1061 -22 807 -22Q640 -22 508 33T289 190T157 432T112
+745Q112 911 161 1051T299 1291T523 1448T821 1504Q1070 1504 1241 1394L1173 1253Q1009 1352 823 1352Z" />
+<glyph unicode="&#xc8;" horiz-adv-x="1143" d="M550 1627L227 2014H477L662 1627H550ZM174 0V1479H1022L1015 1326H347V842H982V691H347V153H1037L1029 0H174Z" />
+<glyph unicode="&#xc9;" horiz-adv-x="1143" d="M987 2015L662 1627H548L734 2015H987ZM174 0V1479H1022L1015 1326H347V842H982V691H347V153H1037L1029 0H174Z" />
+<glyph unicode="&#xca;" horiz-adv-x="1143" d="M312 1627L499 2015H712L899 1627H765L604 1899L443 1627H312ZM174 0V1479H1022L1015 1326H347V842H982V691H347V153H1037L1029 0H174Z" />
+<glyph unicode="&#xcb;" horiz-adv-x="1143" d="M878 1627H723V1839H878V1627ZM487 1627H333V1839H487V1627ZM174 0V1479H1022L1015 1326H347V842H982V691H347V153H1037L1029 0H174Z" />
+<glyph unicode="&#xcc;" horiz-adv-x="540" d="M212 1627L-111 2014H139L324 1627H212ZM355 0H182V1479H355V0Z" />
+<glyph unicode="&#xcd;" horiz-adv-x="540" d="M651 2015L326 1627H212L398 2015H651ZM355 0H182V1479H355V0Z" />
+<glyph unicode="&#xce;" horiz-adv-x="540" d="M-25 1627L162 2015H375L562 1627H428L267 1899L106 1627H-25ZM355 0H182V1479H355V0Z" />
+<glyph unicode="&#xcf;" horiz-adv-x="540" d="M541 1627H386V1839H541V1627ZM150 1627H-4V1839H150V1627ZM355 0H182V1479H355V0Z" />
+<glyph unicode="&#xd0;" horiz-adv-x="1522" d="M147 0V697H29V832H147V1496H519Q680 1496 811 1473T1056 1395T1247 1255T1368 1038T1412 738Q1412 555 1355 414T1193 182T944 46T621 0H147ZM324 155H639Q918 155 1070 301T1223 734Q1223 873 1191 978T1101 1151T957
+1263T769 1323T540 1341H324V832H566V697H324V155Z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1516" d="M477 1635L395 1690Q430 1788 477 1829T584 1870Q629 1870 690 1846T811 1798T911 1774Q994 1774 1036 1872L1122 1836Q1087 1720 1037 1674T921 1627Q875 1627 813 1650T692 1696T593 1720Q516 1720 477 1635ZM1342
+0H1146L378 1164L328 1233Q336 1023 336 858V0H174V1479H367L1137 315L1188 246Q1181 565 1181 615V1479H1342V0Z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1626" d="M757 1627L434 2014H684L869 1627H757ZM296 739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113 34T814 -22Q590 -22 431
+73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1626" d="M1195 2015L870 1627H756L942 2015H1195ZM296 739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113 34T814 -22Q590 -22
+431 73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1626" d="M520 1627L707 2015H920L1107 1627H973L812 1899L651 1627H520ZM296 739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113
+34T814 -22Q590 -22 431 73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1626" d="M531 1635L449 1690Q484 1788 531 1829T638 1870Q683 1870 744 1846T865 1798T965 1774Q1048 1774 1090 1872L1176 1836Q1141 1720 1091 1674T975 1627Q929 1627 867 1650T746 1696T647 1720Q570 1720 531 1635ZM296
+739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113 34T814 -22Q590 -22 431 73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1626" d="M1085 1627H930V1839H1085V1627ZM694 1627H540V1839H694V1627ZM296 739Q296 454 427 292T814 129T1199 291T1329 739Q1329 1031 1199 1192T815 1353T429 1192T296 739ZM1514 739Q1514 570 1468 430T1334 190T1113
+34T814 -22Q590 -22 431 73T192 339T112 740Q112 1095 297 1300T815 1505Q1143 1505 1328 1299T1514 739Z" />
+<glyph unicode="&#xd7;" horiz-adv-x="993" d="M876 278L768 181L496 494L224 181L116 278L401 604L116 932L222 1027L496 713L770 1027L876 932L591 604L876 278Z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1626" d="M502 -232L377 -189L473 50Q297 136 205 314T112 740Q112 1095 297 1300T815 1505Q940 1505 1047 1473L1136 1693L1267 1647L1175 1420Q1339 1330 1426 1155T1514 739Q1514 570 1468 430T1334 190T1113 34T814 -22Q699
+-22 598 4L502 -232ZM989 1329Q911 1353 815 1353Q562 1353 429 1192T296 739Q296 548 356 410T534 199L989 1329ZM1114 1270L657 148Q733 129 814 129Q1070 129 1199 291T1329 739Q1329 1121 1114 1270Z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1438" d="M660 1627L337 2014H587L772 1627H660ZM1277 1479V519Q1277 264 1138 121T713 -22T292 121T156 521V1479H330V518Q330 317 425 222T719 127Q913 127 1008 223T1104 519V1479H1277Z" />
+<glyph unicode="&#xda;" horiz-adv-x="1438" d="M1099 2015L774 1627H660L846 2015H1099ZM1277 1479V519Q1277 264 1138 121T713 -22T292 121T156 521V1479H330V518Q330 317 425 222T719 127Q913 127 1008 223T1104 519V1479H1277Z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1438" d="M423 1627L610 2015H823L1010 1627H876L715 1899L554 1627H423ZM1277 1479V519Q1277 264 1138 121T713 -22T292 121T156 521V1479H330V518Q330 317 425 222T719 127Q913 127 1008 223T1104 519V1479H1277Z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1438" d="M989 1627H834V1839H989V1627ZM598 1627H444V1839H598V1627ZM1277 1479V519Q1277 264 1138 121T713 -22T292 121T156 521V1479H330V518Q330 317 425 222T719 127Q913 127 1008 223T1104 519V1479H1277Z" />
+<glyph unicode="&#xdd;" horiz-adv-x="1194" d="M979 2015L654 1627H540L726 2015H979ZM591 754L1007 1479H1195L673 590V0H498V586L-1 1479H186L591 754Z" />
+<glyph unicode="&#xde;" horiz-adv-x="1291" d="M324 493H708Q1040 493 1040 782Q1040 932 955 1000T666 1068H324V493ZM147 0V1496H324V1217H648Q929 1217 1069 1119T1209 791Q1209 581 1089 462T719 342L324 349V0H147Z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1222" d="M771 148Q868 148 922 200T977 343Q977 393 951 438T877 522T785 588T680 651T591 705Q509 761 509 822Q509 880 574 934Q600 955 649 986T725 1038T776 1096T799 1182Q799 1269 732 1321T568 1373Q286 1373 286
+1056V0H118V1046Q118 1275 230 1400T568 1525Q758 1525 873 1434T988 1182Q988 1142 980 1109T953 1047T917 998T866 953T811 915T747 876T683 838Q721 811 783 774T892 708T994 640T1083 560T1142 465T1166 348Q1166 255 1138 187T1057 78T937 19T786 0H443L459
+148H771Z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1098" d="M468 1498L145 1885H395L580 1498H468ZM460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623 12T435 -23Q281 -23
+188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788 869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1098" d="M905 1630L580 1242H466L652 1630H905ZM460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623 12T435 -23Q281 -23
+188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788 869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1098" d="M230 1498L417 1886H630L817 1498H683L522 1770L361 1498H230ZM460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47
+623 12T435 -23Q281 -23 188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788 869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1098" d="M242 1250L160 1305Q195 1403 242 1444T349 1485Q394 1485 455 1461T576 1413T676 1389Q759 1389 801 1487L887 1451Q852 1335 802 1289T686 1242Q640 1242 578 1265T457 1311T358 1335Q281 1335 242 1250ZM460
+112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623 12T435 -23Q281 -23 188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788 869 734 925T564
+981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1098" d="M796 1242H641V1454H796V1242ZM405 1242H251V1454H405V1242ZM460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623
+12T435 -23Q281 -23 188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788 869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1098" d="M373 1560T373 1495T417 1385T524 1339T630 1385T675 1495Q675 1560 631 1605T524 1650T418 1605ZM274 1495Q274 1598 347 1672T523 1746Q626 1746 699 1672T773 1495Q773 1393 700 1318T523 1242Q421 1242 348
+1316T274 1495ZM460 112Q579 112 669 177T786 354V539Q781 539 726 534T653 528Q436 509 351 457T265 290Q265 202 317 157T460 112ZM823 0Q808 64 794 138Q703 47 623 12T435 -23Q281 -23 188 57T94 289Q94 457 221 538T589 639Q622 642 688 647T788 656V753Q788
+869 734 925T564 981Q402 981 237 901Q232 913 211 970T189 1030Q262 1071 362 1095T567 1120Q772 1120 862 1031T953 726V0H823Z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1674" d="M888 615L1404 644V654Q1402 825 1351 904T1189 984Q1046 984 972 883T888 615ZM416 113Q448 113 483 118T565 136T636 157T718 184T787 208Q720 330 711 499Q667 497 647 495Q489 483 401 457T281 393T248 291Q248
+113 416 113ZM404 -26Q261 -26 171 52T80 300Q80 355 96 399T139 474T210 528T298 566T406 590T523 604T651 613L714 616V781Q714 883 671 929T524 976Q426 976 330 953T168 894L132 1032Q197 1069 305 1096T520 1124Q644 1124 729 1075T837 932Q890 1027 984 1075T1192
+1124Q1291 1124 1365 1088T1482 988T1545 849T1566 684Q1566 606 1530 573T1379 534L882 509Q895 322 968 221T1194 119Q1282 119 1368 152T1517 229L1569 108Q1415 -25 1183 -25Q981 -25 856 112Q761 53 638 14T404 -26Z" />
+<glyph unicode="&#xe7;" horiz-adv-x="968" d="M496 -435H342L454 -9H540L496 -435ZM607 -23Q365 -23 229 134T92 545Q93 801 231 960T611 1120Q696 1120 775 1099T901 1044L855 914Q738 977 608 977Q449 977 357 861T264 544Q264 348 355 234T609 119Q738 119
+873 189L894 56Q785 -23 607 -23Z" />
+<glyph unicode="&#xe8;" horiz-adv-x="1108" d="M500 1498L177 1885H427L612 1498H500ZM702 982T574 982T365 892T270 644H849Q849 807 776 894ZM607 -23Q368 -23 231 129T93 545Q93 800 226 958T576 1120Q780 1120 899 981T1019 608Q1019 596 1019 564T1018 518H265Q268
+331 361 227T613 122Q787 122 962 214L988 79Q821 -23 607 -23Z" />
+<glyph unicode="&#xe9;" horiz-adv-x="1108" d="M938 1630L613 1242H499L685 1630H938ZM702 982T574 982T365 892T270 644H849Q849 807 776 894ZM607 -23Q368 -23 231 129T93 545Q93 800 226 958T576 1120Q780 1120 899 981T1019 608Q1019 596 1019 564T1018 518H265Q268
+331 361 227T613 122Q787 122 962 214L988 79Q821 -23 607 -23Z" />
+<glyph unicode="&#xea;" horiz-adv-x="1108" d="M262 1242L449 1630H662L849 1242H715L554 1514L393 1242H262ZM702 982T574 982T365 892T270 644H849Q849 807 776 894ZM607 -23Q368 -23 231 129T93 545Q93 800 226 958T576 1120Q780 1120 899 981T1019 608Q1019
+596 1019 564T1018 518H265Q268 331 361 227T613 122Q787 122 962 214L988 79Q821 -23 607 -23Z" />
+<glyph unicode="&#xeb;" horiz-adv-x="1108" d="M829 1242H674V1454H829V1242ZM438 1242H284V1454H438V1242ZM702 982T574 982T365 892T270 644H849Q849 807 776 894ZM607 -23Q368 -23 231 129T93 545Q93 800 226 958T576 1120Q780 1120 899 981T1019 608Q1019
+596 1019 564T1018 518H265Q268 331 361 227T613 122Q787 122 962 214L988 79Q821 -23 607 -23Z" />
+<glyph unicode="&#xec;" horiz-adv-x="430" d="M164 1242L-159 1629H91L276 1242H164ZM304 1098V0H135V1098H304Z" />
+<glyph unicode="&#xed;" horiz-adv-x="430" d="M601 1886L276 1498H162L348 1886H601ZM304 1098V0H135V1098H304Z" />
+<glyph unicode="&#xee;" horiz-adv-x="430" d="M-74 1242L113 1630H326L513 1242H379L218 1514L57 1242H-74ZM304 1098V0H135V1098H304Z" />
+<glyph unicode="&#xef;" horiz-adv-x="430" d="M492 1242H337V1454H492V1242ZM101 1242H-53V1454H101V1242ZM304 1098V0H135V1098H304Z" />
+<glyph unicode="&#xf0;" horiz-adv-x="1204" d="M603 833Q449 833 359 733T269 485Q269 386 305 304T421 168T609 114Q766 114 855 215T945 472Q945 541 923 605T858 720T750 802T603 833ZM569 972Q715 972 844 877Q761 1035 541 1257L269 1145L226 1277L446 1364L210
+1588H433L579 1429L868 1542L914 1413L672 1320Q920 1050 1015 884Q1117 692 1117 492Q1117 381 1084 288T988 124T827 15T603 -25Q482 -25 383 16T220 127T122 290T87 486Q87 705 219 838T569 972Z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1184" d="M315 1250L233 1305Q268 1403 315 1444T422 1485Q467 1485 528 1461T649 1413T749 1389Q832 1389 874 1487L960 1451Q925 1335 875 1289T759 1242Q713 1242 651 1265T530 1311T431 1335Q354 1335 315 1250ZM143
+0V1097H283L304 940Q369 1021 466 1070T677 1120Q867 1120 958 1014T1049 686V0H882Q882 660 881 707Q877 847 825 912T649 977Q520 977 434 915T322 754Q312 687 312 600V0H143Z" />
+<glyph unicode="&#xf2;" horiz-adv-x="1201" d="M544 1242L221 1629H471L656 1242H544ZM265 546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365 -23 229 137T92
+548Q92 804 229 962T605 1120Q840 1120 974 962T1108 549Z" />
+<glyph unicode="&#xf3;" horiz-adv-x="1201" d="M982 1630L657 1242H543L729 1630H982ZM265 546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365 -23 229 137T92
+548Q92 804 229 962T605 1120Q840 1120 974 962T1108 549Z" />
+<glyph unicode="&#xf4;" horiz-adv-x="1201" d="M306 1242L493 1630H706L893 1242H759L598 1514L437 1242H306ZM265 546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365
+-23 229 137T92 548Q92 804 229 962T605 1120Q840 1120 974 962T1108 549Z" />
+<glyph unicode="&#xf5;" horiz-adv-x="1201" d="M319 1250L237 1305Q272 1403 319 1444T426 1485Q471 1485 532 1461T653 1413T753 1389Q836 1389 878 1487L964 1451Q929 1335 879 1289T763 1242Q717 1242 655 1265T534 1311T435 1335Q358 1335 319 1250ZM265
+546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365 -23 229 137T92 548Q92 804 229 962T605 1120Q840 1120 974 962T1108 549Z" />
+<glyph unicode="&#xf6;" horiz-adv-x="1201" d="M873 1242H718V1454H873V1242ZM482 1242H328V1454H482V1242ZM265 546Q265 351 351 234T604 116Q768 116 851 233T935 548Q935 749 853 864T601 980Q437 980 351 862T265 546ZM1108 549Q1108 294 972 136T596 -23Q365
+-23 229 137T92 548Q92 804 229 962T605 1120Q840 1120 974 962T1108 549Z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1211" d="M1098 523H97V672H1098V523ZM716 1166V939H491V1166H716ZM682 249V22H491V249H682Z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1200" d="M294 -235L223 -197L332 48Q217 119 155 250T92 548Q92 804 229 962T605 1120Q707 1120 795 1087L902 1327L979 1296L869 1051Q984 981 1046 850T1108 549Q1108 294 972 136T596 -23Q491 -23 404 12L294 -235ZM736
+955Q675 980 601 980Q437 980 351 862T265 546Q265 299 394 188L736 955ZM807 913L463 144Q525 116 604 116Q768 116 851 233T935 548Q935 805 807 913Z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1100" d="M494 1498L171 1885H421L606 1498H494ZM105 366V1097H273V364Q273 292 293 242T352 165T439 125T551 113Q681 113 753 170T826 364V1097H994V366Q994 282 970 215T906 104T808 30T688 -12T551 -25Q479 -25 415 -12T294
+30T195 104T129 216T105 366Z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1100" d="M931 1630L606 1242H492L678 1630H931ZM105 366V1097H273V364Q273 292 293 242T352 165T439 125T551 113Q681 113 753 170T826 364V1097H994V366Q994 282 970 215T906 104T808 30T688 -12T551 -25Q479 -25 415 -12T294
+30T195 104T129 216T105 366Z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1100" d="M256 1242L443 1630H656L843 1242H709L548 1514L387 1242H256ZM105 366V1097H273V364Q273 292 293 242T352 165T439 125T551 113Q681 113 753 170T826 364V1097H994V366Q994 282 970 215T906 104T808 30T688 -12T551
+-25Q479 -25 415 -12T294 30T195 104T129 216T105 366Z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1100" d="M822 1242H667V1454H822V1242ZM431 1242H277V1454H431V1242ZM105 366V1097H273V364Q273 292 293 242T352 165T439 125T551 113Q681 113 753 170T826 364V1097H994V366Q994 282 970 215T906 104T808 30T688 -12T551
+-25Q479 -25 415 -12T294 30T195 104T129 216T105 366Z" />
+<glyph unicode="&#xfd;" horiz-adv-x="1022" d="M889 1630L564 1242H450L636 1630H889ZM3 1097H180L526 184L834 1097H1011Q567 -125 552 -163Q483 -336 385 -416T127 -497Q79 -497 26 -489L16 -347Q72 -351 100 -351Q213 -351 271 -310T376 -154Q417 -49 437 8L3 1097Z" />
+<glyph unicode="&#xfe;" horiz-adv-x="1205" d="M292 162V-459H124V1213V1510H292V933Q421 1124 643 1124Q778 1123 882 1049T1043 847T1099 560Q1099 471 1082 387T1027 228T937 97T809 8T643 -25Q402 -25 292 162ZM624 113Q691 113 745 140T832 212T887 315T917
+432T926 551Q926 629 912 701T865 839T773 946T631 986Q522 986 443 925T327 766T290 551Q290 461 309 385T367 246T471 149T624 113Z" />
+<glyph unicode="&#xff;" horiz-adv-x="1022" d="M779 1498H624V1710H779V1498ZM388 1498H234V1710H388V1498ZM3 1097H180L526 184L834 1097H1011Q567 -125 552 -163Q483 -336 385 -416T127 -497Q79 -497 26 -489L16 -347Q72 -351 100 -351Q213 -351 271 -310T376
+-154Q417 -49 437 8L3 1097Z" />
+<glyph unicode="&#x2013;" horiz-adv-x="1317" d="M1186 675V527H139V675H1186Z" />
+<glyph unicode="&#x2014;" horiz-adv-x="2427" d="M2296 675V527H139V675H2296Z" />
+<glyph unicode="&#x2018;" horiz-adv-x="510" d="M129 1102L265 1574H382L291 1102H129Z" />
+<glyph unicode="&#x2019;" horiz-adv-x="504" d="M249 1102H133L226 1574H383L249 1102Z" />
+<glyph unicode="&#x201a;" horiz-adv-x="504" d="M126 -256L218 216H379L245 -256H126Z" />
+<glyph unicode="&#x201c;" horiz-adv-x="818" d="M438 1102L573 1574H690L600 1102H438ZM129 1102L263 1574H383L289 1102H129Z" />
+<glyph unicode="&#x201d;" horiz-adv-x="795" d="M133 1102L226 1574H385L250 1102H133ZM420 1102L511 1574H674L537 1102H420Z" />
+<glyph unicode="&#x201e;" horiz-adv-x="819" d="M126 -256L216 216H377L244 -256H126ZM441 -256L532 216H694L559 -256H441Z" />
+<glyph unicode="&#x2022;" horiz-adv-x="867" d="M731 753Q731 615 642 515T432 415Q309 415 223 513T137 747Q137 884 227 985T436 1086Q557 1086 644 988T731 753Z" />
+<glyph unicode="&#x2039;" horiz-adv-x="620" d="M361 982H501L269 583L495 182H356L120 583L361 982Z" />
+<glyph unicode="&#x203a;" horiz-adv-x="617" d="M505 585L264 182H124L355 585L130 982H269L505 585Z" />
+</font>
+</defs>
+</svg>
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.ttf b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.ttf
new file mode 100644
index 000000000..6c19f5fe7
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.ttf differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff
new file mode 100644
index 000000000..4be1c49c9
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff differ
diff --git a/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff2 b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff2
new file mode 100644
index 000000000..44a1315f9
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/Oxygen-regular/Oxygen-regular.woff2 differ
diff --git a/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.svg b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.svg
new file mode 100644
index 000000000..855c845e5
--- /dev/null
+++ b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+ <font-face
+ font-family="FontAwesome"
+ font-weight="400"
+ font-stretch="normal"
+ units-per-em="1792"
+ panose-1="0 0 0 0 0 0 0 0 0 0"
+ ascent="1536"
+ descent="-256"
+ bbox="-1.02083 -256.962 2304.6 1537.02"
+ underline-thickness="0"
+ underline-position="0"
+ unicode-range="U+0020-F500"
+ />
+<missing-glyph horiz-adv-x="896"
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+ <glyph glyph-name=".notdef" horiz-adv-x="896"
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+ <glyph glyph-name=".null" horiz-adv-x="0"
+ />
+ <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597"
+ />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="448"
+ />
+ <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792"
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+ <glyph glyph-name="music" unicode="&#xf001;"
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664"
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+ <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792"
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792"
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+ <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664"
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+ <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664"
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+ <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+ <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920"
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664"
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792"
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792"
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+ <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408"
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+ <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664"
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+ <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664"
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+ <glyph glyph-name="off" unicode="&#xf011;"
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+ <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="cog" unicode="&#xf013;"
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+ <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408"
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664"
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+ <glyph glyph-name="file_alt" unicode="&#xf016;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+ <glyph glyph-name="time" unicode="&#xf017;"
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920"
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+ <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664"
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+ <glyph glyph-name="download" unicode="&#xf01a;"
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="upload" unicode="&#xf01b;"
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="inbox" unicode="&#xf01c;"
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+ <glyph glyph-name="play_circle" unicode="&#xf01d;"
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="repeat" unicode="&#xf01e;"
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+ <glyph glyph-name="refresh" unicode="&#xf021;"
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+ <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792"
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+ <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152"
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792"
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664"
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+ <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768"
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+ <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152"
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+ <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664"
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+ <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408"
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+ <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792"
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+ <glyph glyph-name="tag" unicode="&#xf02b;"
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+ <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920"
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+ <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664"
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+ <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280"
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+ <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664"
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+ <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664"
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+ <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408"
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+ <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024"
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+ <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792"
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+ <glyph glyph-name="text_width" unicode="&#xf035;"
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+ <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792"
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792"
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792"
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792"
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792"
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+ <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792"
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+ <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792"
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+ <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792"
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+ <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920"
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="pencil" unicode="&#xf040;"
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+ <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024"
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+ <glyph glyph-name="adjust" unicode="&#xf042;"
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024"
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+ <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792"
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+ <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664"
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+ <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664"
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+ <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792"
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+ <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024"
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+ <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792"
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+ <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664"
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+ <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408"
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+ <glyph glyph-name="pause" unicode="&#xf04c;"
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="stop" unicode="&#xf04d;"
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664"
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+ <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792"
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+ <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024"
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+ <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538"
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+ <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280"
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+ <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280"
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+ <glyph glyph-name="plus_sign" unicode="&#xf055;"
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="minus_sign" unicode="&#xf056;"
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+ <glyph glyph-name="remove_sign" unicode="&#xf057;"
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="ok_sign" unicode="&#xf058;"
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="question_sign" unicode="&#xf059;"
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="info_sign" unicode="&#xf05a;"
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="screenshot" unicode="&#xf05b;"
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="remove_circle" unicode="&#xf05c;"
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="ok_circle" unicode="&#xf05d;"
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="ban_circle" unicode="&#xf05e;"
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+ <glyph glyph-name="arrow_left" unicode="&#xf060;"
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+ <glyph glyph-name="arrow_right" unicode="&#xf061;"
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+ <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664"
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+ <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664"
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+ <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792"
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+ <glyph glyph-name="resize_full" unicode="&#xf065;"
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="resize_small" unicode="&#xf066;"
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+ <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408"
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408"
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664"
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+ <glyph glyph-name="exclamation_sign" unicode="&#xf06a;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+ <glyph glyph-name="gift" unicode="&#xf06b;"
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792"
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+ <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408"
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+ <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792"
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+ <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792"
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+ <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792"
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+ <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408"
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+ <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664"
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792"
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+ <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792"
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+ <glyph glyph-name="magnet" unicode="&#xf076;"
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792"
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+ <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792"
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+ <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920"
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+ <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664"
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664"
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+ <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920"
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+ <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768"
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+ <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792"
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+ <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048"
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+ <glyph glyph-name="twitter_sign" unicode="&#xf081;"
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="facebook_sign" unicode="&#xf082;"
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+ <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792"
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+ <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792"
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+ <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920"
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+ <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792"
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+ <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;"
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+ <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;"
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+ <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896"
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+ <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792"
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+ <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664"
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+ <glyph glyph-name="linkedin_sign" unicode="&#xf08c;"
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152"
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+ <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792"
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="signin" unicode="&#xf090;"
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664"
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="github_sign" unicode="&#xf092;"
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664"
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+ <glyph glyph-name="lemon" unicode="&#xf094;"
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+ <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408"
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+ <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408"
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280"
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+ <glyph glyph-name="phone_sign" unicode="&#xf098;"
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+ <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664"
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+ <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024"
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+ <glyph glyph-name="github" unicode="&#xf09b;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+ <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664"
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+ <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920"
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+ <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408"
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+ <glyph glyph-name="hdd" unicode="&#xf0a0;"
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+ <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792"
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+ <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792"
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+ <glyph glyph-name="certificate" unicode="&#xf0a3;"
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+ <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792"
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+ <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792"
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+ <glyph glyph-name="hand_up" unicode="&#xf0a6;"
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+ <glyph glyph-name="hand_down" unicode="&#xf0a7;"
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+ <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;"
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;"
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;"
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;"
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="globe" unicode="&#xf0ac;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+ <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664"
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+ <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408"
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+ <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="fullscreen" unicode="&#xf0b2;"
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+ <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920"
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+ <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664"
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+ <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920"
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+ <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664"
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+ <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792"
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+ <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792"
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+ <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408"
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+ <glyph glyph-name="save" unicode="&#xf0c7;"
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+ <glyph glyph-name="sign_blank" unicode="&#xf0c8;"
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="reorder" unicode="&#xf0c9;"
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792"
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+ <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792"
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+ <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+ <glyph glyph-name="underline" unicode="&#xf0cd;"
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+ <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664"
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+ <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664"
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+ <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792"
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="pinterest" unicode="&#xf0d2;"
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;"
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+ <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;"
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304"
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+ <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920"
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024"
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024"
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+ <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640"
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+ <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640"
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+ <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664"
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024"
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+ <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024"
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024"
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+ <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792"
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+ <glyph glyph-name="linkedin" unicode="&#xf0e1;"
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+ <glyph glyph-name="undo" unicode="&#xf0e2;"
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+ <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792"
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+ <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792"
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792"
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+ <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792"
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+ <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896"
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+ <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792"
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+ <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664"
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+ <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792"
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+ <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024"
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+ <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792"
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+ <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920"
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+ <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920"
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+ <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408"
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+ <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+ <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792"
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+ <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792"
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+ <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920"
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+ <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408"
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="file_text_alt" unicode="&#xf0f6;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+ <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408"
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408"
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920"
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792"
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+ <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920"
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+ <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664"
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+ <glyph glyph-name="h_sign" unicode="&#xf0fd;"
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="f0fe" unicode="&#xf0fe;"
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024"
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+ <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024"
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+ <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152"
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+ <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152"
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+ <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640"
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+ <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640"
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+ <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152"
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+ <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152"
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+ <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920"
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920"
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+ <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152"
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768"
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="circle_blank" unicode="&#xf10c;"
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664"
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+ <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664"
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+ <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792"
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+ <glyph glyph-name="circle" unicode="&#xf111;"
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792"
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+ <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664"
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+ <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664"
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+ <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920"
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+ <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="smile" unicode="&#xf118;"
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="frown" unicode="&#xf119;"
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="meh" unicode="&#xf11a;"
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920"
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+ <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920"
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+ <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792"
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+ <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792"
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+ <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664"
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+ <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920"
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+ <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792"
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+ <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664"
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+ <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408"
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+ <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664"
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024"
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+ <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664"
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+ <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024"
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+ <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640"
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640"
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+ <glyph glyph-name="superscript" unicode="&#xf12b;"
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+ <glyph glyph-name="subscript" unicode="&#xf12c;"
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+ <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920"
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+ <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664"
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+ <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152"
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+ <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408"
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+ <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280"
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664"
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408"
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+ <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664"
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+ <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792"
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+ <glyph glyph-name="chevron_sign_left" unicode="&#xf137;"
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="chevron_sign_right" unicode="&#xf138;"
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="chevron_sign_up" unicode="&#xf139;"
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;"
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408"
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+ <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792"
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+ <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152"
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+ <glyph glyph-name="bullseye" unicode="&#xf140;"
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408"
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384"
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+ <glyph glyph-name="_303" unicode="&#xf143;"
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="play_sign" unicode="&#xf144;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+ <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792"
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+ <glyph glyph-name="minus_sign_alt" unicode="&#xf146;"
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+ <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408"
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024"
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+ <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024"
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+ <glyph glyph-name="check_sign" unicode="&#xf14a;"
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="edit_sign" unicode="&#xf14b;"
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_312" unicode="&#xf14c;"
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="share_sign" unicode="&#xf14d;"
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="compass" unicode="&#xf14e;"
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="collapse" unicode="&#xf150;"
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="collapse_top" unicode="&#xf151;"
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_317" unicode="&#xf152;"
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024"
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+ <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024"
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+ <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024"
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+ <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898"
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027"
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+ <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280"
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+ <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792"
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280"
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+ <glyph glyph-name="file" unicode="&#xf15b;"
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+ <glyph glyph-name="file_text" unicode="&#xf15c;"
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+ <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664"
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+ <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664"
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+ <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792"
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792"
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="sort_by_order" unicode="&#xf162;"
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+ <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;"
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+ <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664"
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+ <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664"
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+ <glyph glyph-name="youtube_sign" unicode="&#xf166;"
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="youtube" unicode="&#xf167;"
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+ <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+ <glyph glyph-name="xing_sign" unicode="&#xf169;"
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792"
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+ <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792"
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+ <glyph glyph-name="stackexchange" unicode="&#xf16c;"
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+ <glyph glyph-name="instagram" unicode="&#xf16d;"
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+ <glyph glyph-name="flickr" unicode="&#xf16e;"
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+ <glyph glyph-name="adn" unicode="&#xf170;"
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408"
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+ <glyph glyph-name="bitbucket_sign" unicode="&#xf172;"
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024"
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+ <glyph glyph-name="tumblr_sign" unicode="&#xf174;"
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768"
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+ <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768"
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+ <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792"
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792"
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+ <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408"
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+ <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664"
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+ <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408"
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+ <glyph glyph-name="linux" unicode="&#xf17c;"
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+ <glyph glyph-name="dribble" unicode="&#xf17d;"
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="skype" unicode="&#xf17e;"
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+ <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280"
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+ <glyph glyph-name="trello" unicode="&#xf181;"
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280"
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+ <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024"
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+ <glyph glyph-name="gittip" unicode="&#xf184;"
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792"
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+ <glyph glyph-name="_366" unicode="&#xf186;"
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+ <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792"
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664"
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+ <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920"
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+ <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792"
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+ <glyph glyph-name="renren" unicode="&#xf18b;"
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+ <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408"
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+ <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280"
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+ <glyph glyph-name="_374" unicode="&#xf18e;"
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;"
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_376" unicode="&#xf191;"
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="dot_circle_alt" unicode="&#xf192;"
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664"
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+ <glyph glyph-name="vimeo_square" unicode="&#xf194;"
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152"
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408"
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176"
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+ <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664"
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+ <glyph glyph-name="_384" unicode="&#xf199;"
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+ <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792"
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+ <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792"
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+ <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048"
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+ <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304"
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+ <glyph glyph-name="_389" unicode="&#xf19e;"
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+ <glyph glyph-name="uniF1A0" unicode="&#xf1a0;"
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+ <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792"
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="_392" unicode="&#xf1a2;"
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_393" unicode="&#xf1a3;"
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920"
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+ <glyph glyph-name="_395" unicode="&#xf1a5;"
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+ <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048"
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+ <glyph glyph-name="_397" unicode="&#xf1a7;"
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038"
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+ <glyph glyph-name="_399" unicode="&#xf1a9;"
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+ <glyph glyph-name="_400" unicode="&#xf1aa;"
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+ <glyph glyph-name="f1ab" unicode="&#xf1ab;"
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+ <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792"
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+ <glyph glyph-name="_403" unicode="&#xf1ad;"
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+ <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280"
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+ <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664"
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+ <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768"
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+ <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792"
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+ <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304"
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+ <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048"
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+ <glyph glyph-name="_410" unicode="&#xf1b5;"
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+ <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792"
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+ <glyph glyph-name="_412" unicode="&#xf1b7;"
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+ <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792"
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+ <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048"
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+ <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048"
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+ <glyph glyph-name="_416" unicode="&#xf1bb;"
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+ <glyph glyph-name="_417" unicode="&#xf1bc;"
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024"
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+ <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304"
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+ <glyph glyph-name="uniF1C0" unicode="&#xf1c0;"
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+ <glyph glyph-name="uniF1C1" unicode="&#xf1c1;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+ <glyph glyph-name="_422" unicode="&#xf1c2;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+ <glyph glyph-name="_423" unicode="&#xf1c3;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+ <glyph glyph-name="_424" unicode="&#xf1c4;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+ <glyph glyph-name="_425" unicode="&#xf1c5;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+ <glyph glyph-name="_426" unicode="&#xf1c6;"
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+ <glyph glyph-name="_427" unicode="&#xf1c7;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+ <glyph glyph-name="_428" unicode="&#xf1c8;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+ <glyph glyph-name="_429" unicode="&#xf1c9;"
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+ <glyph glyph-name="_430" unicode="&#xf1ca;"
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+ <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792"
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+ <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048"
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+ <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792"
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+ <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792"
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+ <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792"
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+ <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792"
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF1D2" unicode="&#xf1d2;"
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792"
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+ <glyph glyph-name="_439" unicode="&#xf1d4;"
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280"
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+ <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792"
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+ <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048"
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+ <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792"
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+ <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792"
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+ <glyph glyph-name="_445" unicode="&#xf1da;"
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="_446" unicode="&#xf1db;"
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792"
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+ <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280"
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+ <glyph glyph-name="_449" unicode="&#xf1de;"
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+ <glyph glyph-name="uniF1E0" unicode="&#xf1e0;"
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+ <glyph glyph-name="_451" unicode="&#xf1e1;"
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792"
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+ <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792"
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+ <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792"
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+ <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792"
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792"
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+ <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792"
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+ <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792"
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+ <glyph glyph-name="_459" unicode="&#xf1e9;"
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+ <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048"
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+ <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048"
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+ <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792"
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_463" unicode="&#xf1ed;"
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+ <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792"
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+ <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304"
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304"
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304"
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+ <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304"
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+ <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304"
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304"
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048"
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+ <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048"
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+ <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408"
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="_474" unicode="&#xf1f9;"
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_475" unicode="&#xf1fa;"
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+ <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792"
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+ <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792"
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+ <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792"
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+ <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048"
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+ <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792"
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048"
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+ <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792"
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+ <glyph glyph-name="_483" unicode="&#xf203;"
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048"
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+ <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048"
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+ <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304"
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+ <glyph glyph-name="_487" unicode="&#xf207;"
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+ <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048"
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+ <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280"
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+ <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048"
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+ <glyph glyph-name="_491" unicode="&#xf20b;"
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="_492" unicode="&#xf20c;"
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+ <glyph glyph-name="_493" unicode="&#xf20d;"
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+ <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048"
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+ <glyph glyph-name="f210" unicode="&#xf210;"
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+ <glyph glyph-name="_496" unicode="&#xf211;"
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+ <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048"
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+ <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048"
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+ <glyph glyph-name="_499" unicode="&#xf214;"
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+ <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048"
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+ <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048"
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+ <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664"
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664"
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048"
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+ <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048"
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+ <glyph glyph-name="_506" unicode="&#xf21b;"
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+ <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304"
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+ <glyph glyph-name="_508" unicode="&#xf21d;"
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+ <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792"
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
+t127 -344z" />
+ <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280"
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+ <glyph glyph-name="_511" unicode="&#xf222;"
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280"
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_513" unicode="&#xf224;"
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792"
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792"
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+ <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920"
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+ <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048"
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+ <glyph glyph-name="_518" unicode="&#xf229;"
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280"
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048"
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280"
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+ <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280"
+d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+ <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="_525" unicode="&#xf230;"
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+ <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280"
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+ <glyph glyph-name="_527" unicode="&#xf232;"
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+ <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792"
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+ <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048"
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+ <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048"
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+ <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048"
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+ <glyph glyph-name="_532" unicode="&#xf237;"
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+ <glyph glyph-name="_533" unicode="&#xf238;"
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+ <glyph glyph-name="_534" unicode="&#xf239;"
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+ <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792"
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+ <glyph glyph-name="_536" unicode="&#xf23b;"
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+ <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296"
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+ <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304"
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+ <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792"
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+ <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304"
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+ <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304"
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+ <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304"
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+ <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304"
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+ <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304"
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+ <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280"
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+ <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024"
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+ <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048"
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+ <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304"
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+ <glyph glyph-name="_549" unicode="&#xf249;"
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+ <glyph glyph-name="_550" unicode="&#xf24a;"
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+ <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304"
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304"
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792"
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304"
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+ <glyph glyph-name="_555" unicode="&#xf250;"
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+ <glyph glyph-name="_556" unicode="&#xf251;"
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+ <glyph glyph-name="_557" unicode="&#xf252;"
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+ <glyph glyph-name="_558" unicode="&#xf253;"
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+ <glyph glyph-name="_559" unicode="&#xf254;"
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+ <glyph glyph-name="_560" unicode="&#xf255;"
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+ <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792"
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+ <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792"
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+ <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048"
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+ <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048"
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+ <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792"
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+ <glyph glyph-name="_566" unicode="&#xf25b;"
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+ <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973"
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+ <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792"
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792"
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+ <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048"
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+ <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792"
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304"
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+ <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280"
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+ <glyph glyph-name="_574" unicode="&#xf264;"
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720"
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+ <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304"
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+ <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792"
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+ <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792"
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+ <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792"
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+ <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792"
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+ <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792"
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+ <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048"
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792"
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+ <glyph glyph-name="_584" unicode="&#xf26e;"
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+ <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792"
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+ <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792"
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+ <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792"
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792"
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792"
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+ <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792"
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+ <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024"
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+ <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792"
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+ <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048"
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+ <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792"
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+ <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792"
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+ <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792"
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+ <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024"
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+ <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792"
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+ <glyph glyph-name="f27e" unicode="&#xf27e;"
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+ <glyph glyph-name="uniF280" unicode="&#xf280;"
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+ <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792"
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+ <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792"
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+ <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304"
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+ <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792"
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+ <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792"
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+ <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792"
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+ <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304"
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+ <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792"
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304"
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+ <glyph glyph-name="_610" unicode="&#xf28a;"
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+ <glyph glyph-name="_611" unicode="&#xf28b;"
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_612" unicode="&#xf28c;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+ <glyph glyph-name="_613" unicode="&#xf28d;"
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+ <glyph glyph-name="_614" unicode="&#xf28e;"
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+ <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792"
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+ <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048"
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+ <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792"
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+ <glyph glyph-name="_618" unicode="&#xf293;"
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+ <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024"
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+ <glyph glyph-name="_620" unicode="&#xf295;"
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+ <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792"
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+ <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792"
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+ <glyph glyph-name="_623" unicode="&#xf298;"
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+ <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792"
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+ <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792"
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="_626" unicode="&#xf29b;"
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+ <glyph glyph-name="_627" unicode="&#xf29c;"
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408"
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+ <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304"
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+ <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408"
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+ <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176"
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+ <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792"
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+ <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304"
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+ <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792"
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+ <glyph glyph-name="uniF2A5" unicode="&#xf2a5;"
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535"
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+ <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664"
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+ <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792"
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+ <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280"
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+ <glyph glyph-name="uniF2AA" unicode="&#xf2aa;"
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+ <glyph glyph-name="uniF2AB" unicode="&#xf2ab;"
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+ <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664"
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+ <glyph glyph-name="uniF2AD" unicode="&#xf2ad;"
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+ <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304"
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+ <glyph glyph-name="uniF2B0" unicode="&#xf2b0;"
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+ <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664"
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+ <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792"
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+ <glyph glyph-name="uniF2B3" unicode="&#xf2b3;"
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+ <glyph glyph-name="uniF2B4" unicode="&#xf2b4;"
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304"
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+ <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792"
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+ <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792"
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+ <glyph glyph-name="uniF2B8" unicode="&#xf2b8;"
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+ <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664"
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+ <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664"
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+ <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048"
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048"
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792"
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792"
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
+ <glyph glyph-name="uniF2C0" unicode="&#xf2c0;"
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+ <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280"
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048"
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048"
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792"
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+ <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304"
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+ <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792"
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024"
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+ <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024"
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+ <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024"
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+ <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024"
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+ <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024"
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+ <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920"
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+ <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792"
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+ <glyph glyph-name="uniF2CE" unicode="&#xf2ce;"
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+ <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792"
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792"
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048"
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+ <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792"
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792"
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792"
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794"
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF2D7" unicode="&#xf2d7;"
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+ <glyph glyph-name="uniF2D8" unicode="&#xf2d8;"
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+ <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176"
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+ <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792"
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+ <glyph glyph-name="uniF2DB" unicode="&#xf2db;"
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+ <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664"
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+ <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792"
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+ <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792"
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+ <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920"
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+ <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792"
+ />
+ <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792"
+ />
+ </font>
+</defs></svg>
diff --git a/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.ttf b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.ttf
new file mode 100644
index 000000000..35acda2fa
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.ttf differ
diff --git a/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.woff b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.woff
new file mode 100644
index 000000000..400014a4b
Binary files /dev/null and b/themes/hugo-theme-digikam/static/fonts/fontawesome-webfont.woff differ
diff --git a/themes/hugo-theme-digikam/static/js/app.js b/themes/hugo-theme-digikam/static/js/app.js
index e6a2028fd..aee94f2c3 100644
--- a/themes/hugo-theme-digikam/static/js/app.js
+++ b/themes/hugo-theme-digikam/static/js/app.js
@@ -1,20042 +1,7 @@
-"use strict";
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-/*!
- * jQuery JavaScript Library v2.2.4
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-05-20T17:23Z
- */
-
-(function (global, factory) {
-
- if ((typeof module === "undefined" ? "undefined" : _typeof(module)) === "object" && _typeof(module.exports) === "object") {
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ? factory(global, true) : function (w) {
- if (!w.document) {
- throw new Error("jQuery requires a window with a document");
- }
- return factory(w);
- };
- } else {
- factory(global);
- }
-
- // Pass this if window is not defined yet
-})(typeof window !== "undefined" ? window : undefined, function (window, noGlobal) {
-
- // Support: Firefox 18+
- // Can't be in strict mode, several libs including ASP.NET trace
- // the stack via arguments.caller.callee and Firefox dies if
- // you try to trace through "use strict" call chains. (#13335)
- //"use strict";
- var arr = [];
-
- var document = window.document;
-
- var _slice = arr.slice;
-
- var concat = arr.concat;
-
- var push = arr.push;
-
- var indexOf = arr.indexOf;
-
- var class2type = {};
-
- var toString = class2type.toString;
-
- var hasOwn = class2type.hasOwnProperty;
-
- var support = {};
-
- var version = "2.2.4",
-
-
- // Define a local copy of jQuery
- jQuery = function jQuery(selector, context) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init(selector, context);
- },
-
-
- // Support: Android<4.1
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function fcamelCase(all, letter) {
- return letter.toUpperCase();
- };
-
- jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function toArray() {
- return _slice.call(this);
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function get(num) {
- return num != null ?
-
- // Return just the one element from the set
- num < 0 ? this[num + this.length] : this[num] :
-
- // Return all the elements in a clean array
- _slice.call(this);
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function pushStack(elems) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge(this.constructor(), elems);
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function each(callback) {
- return jQuery.each(this, callback);
- },
-
- map: function map(callback) {
- return this.pushStack(jQuery.map(this, function (elem, i) {
- return callback.call(elem, i, elem);
- }));
- },
-
- slice: function slice() {
- return this.pushStack(_slice.apply(this, arguments));
- },
-
- first: function first() {
- return this.eq(0);
- },
-
- last: function last() {
- return this.eq(-1);
- },
-
- eq: function eq(i) {
- var len = this.length,
- j = +i + (i < 0 ? len : 0);
- return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
- },
-
- end: function end() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
- };
-
- jQuery.extend = jQuery.fn.extend = function () {
- var options,
- name,
- src,
- copy,
- copyIsArray,
- clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if (typeof target === "boolean") {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[i] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ((typeof target === "undefined" ? "undefined" : _typeof(target)) !== "object" && !jQuery.isFunction(target)) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if (i === length) {
- target = this;
- i--;
- }
-
- for (; i < length; i++) {
-
- // Only deal with non-null/undefined values
- if ((options = arguments[i]) != null) {
-
- // Extend the base object
- for (name in options) {
- src = target[name];
- copy = options[name];
-
- // Prevent never-ending loop
- if (target === copy) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {
-
- if (copyIsArray) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[name] = jQuery.extend(deep, clone, copy);
-
- // Don't bring in undefined values
- } else if (copy !== undefined) {
- target[name] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
- };
-
- jQuery.extend({
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function error(msg) {
- throw new Error(msg);
- },
-
- noop: function noop() {},
-
- isFunction: function isFunction(obj) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray,
-
- isWindow: function isWindow(obj) {
- return obj != null && obj === obj.window;
- },
-
- isNumeric: function isNumeric(obj) {
-
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- // adding 1 corrects loss of precision from parseFloat (#15100)
- var realStringObj = obj && obj.toString();
- return !jQuery.isArray(obj) && realStringObj - parseFloat(realStringObj) + 1 >= 0;
- },
-
- isPlainObject: function isPlainObject(obj) {
- var key;
-
- // Not plain objects:
- // - Any object or value whose internal [[Class]] property is not "[object Object]"
- // - DOM nodes
- // - window
- if (jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
- return false;
- }
-
- // Not own constructor property must be Object
- if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype || {}, "isPrototypeOf")) {
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own
- for (key in obj) {}
-
- return key === undefined || hasOwn.call(obj, key);
- },
-
- isEmptyObject: function isEmptyObject(obj) {
- var name;
- for (name in obj) {
- return false;
- }
- return true;
- },
-
- type: function type(obj) {
- if (obj == null) {
- return obj + "";
- }
-
- // Support: Android<4.0, iOS<6 (functionish RegExp)
- return (typeof obj === "undefined" ? "undefined" : _typeof(obj)) === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
- },
-
- // Evaluates a script in a global context
- globalEval: function globalEval(code) {
- var script,
- indirect = eval;
-
- code = jQuery.trim(code);
-
- if (code) {
-
- // If the code includes a valid, prologue position
- // strict mode pragma, execute code by injecting a
- // script tag into the document.
- if (code.indexOf("use strict") === 1) {
- script = document.createElement("script");
- script.text = code;
- document.head.appendChild(script).parentNode.removeChild(script);
- } else {
-
- // Otherwise, avoid the DOM node creation, insertion
- // and removal by using an indirect global eval
-
- indirect(code);
- }
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Support: IE9-11+
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function camelCase(string) {
- return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
- },
-
- nodeName: function nodeName(elem, name) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- each: function each(obj, callback) {
- var length,
- i = 0;
-
- if (isArrayLike(obj)) {
- length = obj.length;
- for (; i < length; i++) {
- if (callback.call(obj[i], i, obj[i]) === false) {
- break;
- }
- }
- } else {
- for (i in obj) {
- if (callback.call(obj[i], i, obj[i]) === false) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1
- trim: function trim(text) {
- return text == null ? "" : (text + "").replace(rtrim, "");
- },
-
- // results is for internal usage only
- makeArray: function makeArray(arr, results) {
- var ret = results || [];
-
- if (arr != null) {
- if (isArrayLike(Object(arr))) {
- jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
- } else {
- push.call(ret, arr);
- }
- }
-
- return ret;
- },
-
- inArray: function inArray(elem, arr, i) {
- return arr == null ? -1 : indexOf.call(arr, elem, i);
- },
-
- merge: function merge(first, second) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for (; j < len; j++) {
- first[i++] = second[j];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function grep(elems, callback, invert) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for (; i < length; i++) {
- callbackInverse = !callback(elems[i], i);
- if (callbackInverse !== callbackExpect) {
- matches.push(elems[i]);
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function map(elems, callback, arg) {
- var length,
- value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if (isArrayLike(elems)) {
- length = elems.length;
- for (; i < length; i++) {
- value = callback(elems[i], i, arg);
-
- if (value != null) {
- ret.push(value);
- }
- }
-
- // Go through every key on the object,
- } else {
- for (i in elems) {
- value = callback(elems[i], i, arg);
-
- if (value != null) {
- ret.push(value);
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply([], ret);
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function proxy(fn, context) {
- var tmp, args, proxy;
-
- if (typeof context === "string") {
- tmp = fn[context];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if (!jQuery.isFunction(fn)) {
- return undefined;
- }
-
- // Simulated bind
- args = _slice.call(arguments, 2);
- proxy = function proxy() {
- return fn.apply(context || this, args.concat(_slice.call(arguments)));
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: Date.now,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
- });
-
- // JSHint would error on this code due to the Symbol not being defined in ES5.
- // Defining this global in .jshintrc would create a danger of using the global
- // unguarded in another place, it seems safer to just disable JSHint for these
- // three lines.
- /* jshint ignore: start */
- if (typeof Symbol === "function") {
- jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
- }
- /* jshint ignore: end */
-
- // Populate the class2type map
- jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (i, name) {
- class2type["[object " + name + "]"] = name.toLowerCase();
- });
-
- function isArrayLike(obj) {
-
- // Support: iOS 8.2 (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = jQuery.type(obj);
-
- if (type === "function" || jQuery.isWindow(obj)) {
- return false;
- }
-
- return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
- }
- var Sizzle =
- /*!
- * Sizzle CSS Selector Engine v2.2.1
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-10-17
- */
- function (window) {
-
- var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function sortOrder(a, b) {
- if (a === b) {
- hasDuplicate = true;
- }
- return 0;
- },
-
-
- // General-purpose constants
- MAX_NEGATIVE = 1 << 31,
-
-
- // Instance methods
- hasOwn = {}.hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
-
- // Use a stripped-down indexOf as it's faster than native
- // http://jsperf.com/thor-indexof-vs-for/5
- indexOf = function indexOf(list, elem) {
- var i = 0,
- len = list.length;
- for (; i < len; i++) {
- if (list[i] === elem) {
- return i;
- }
- }
- return -1;
- },
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
-
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
- pseudos = ":(" + identifier + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" + ")\\)|)",
-
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp(whitespace + "+", "g"),
- rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
- rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
- rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
- rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g"),
- rpseudo = new RegExp(pseudos),
- ridentifier = new RegExp("^" + identifier + "$"),
- matchExpr = {
- "ID": new RegExp("^#(" + identifier + ")"),
- "CLASS": new RegExp("^\\.(" + identifier + ")"),
- "TAG": new RegExp("^(" + identifier + "|[*])"),
- "ATTR": new RegExp("^" + attributes),
- "PSEUDO": new RegExp("^" + pseudos),
- "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
- "bool": new RegExp("^(?:" + booleans + ")$", "i"),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
- },
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
- rnative = /^[^{]+\{\s*\[native \w/,
-
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"),
- funescape = function funescape(_, escaped, escapedWhitespace) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ? escaped : high < 0 ?
- // BMP codepoint
- String.fromCharCode(high + 0x10000) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
- },
-
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function unloadHandler() {
- setDocument();
- };
-
- // Optimize for push.apply( _, NodeList )
- try {
- push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[preferredDoc.childNodes.length].nodeType;
- } catch (e) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function (target, els) {
- push_native.apply(target, slice.call(els));
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function (target, els) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while (target[j++] = els[i++]) {}
- target.length = j - 1;
- }
- };
- }
-
- function Sizzle(selector, context, results, seed) {
- var m,
- i,
- elem,
- nid,
- nidselect,
- match,
- groups,
- newSelector,
- newContext = context && context.ownerDocument,
-
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if (!seed) {
-
- if ((context ? context.ownerDocument || context : preferredDoc) !== document) {
- setDocument(context);
- }
- context = context || document;
-
- if (documentIsHTML) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
-
- // ID selector
- if (m = match[1]) {
-
- // Document context
- if (nodeType === 9) {
- if (elem = context.getElementById(m)) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if (elem.id === m) {
- results.push(elem);
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
-
- results.push(elem);
- return results;
- }
- }
-
- // Type selector
- } else if (match[2]) {
- push.apply(results, context.getElementsByTagName(selector));
- return results;
-
- // Class selector
- } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
-
- push.apply(results, context.getElementsByClassName(m));
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if (support.qsa && !compilerCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
-
- if (nodeType !== 1) {
- newContext = context;
- newSelector = selector;
-
- // qSA looks outside Element context, which is not what we want
- // Thanks to Andrew Dupont for this workaround technique
- // Support: IE <=8
- // Exclude object elements
- } else if (context.nodeName.toLowerCase() !== "object") {
-
- // Capture the context ID, setting it first if necessary
- if (nid = context.getAttribute("id")) {
- nid = nid.replace(rescape, "\\$&");
- } else {
- context.setAttribute("id", nid = expando);
- }
-
- // Prefix every selector in the list
- groups = tokenize(selector);
- i = groups.length;
- nidselect = ridentifier.test(nid) ? "#" + nid : "[id='" + nid + "']";
- while (i--) {
- groups[i] = nidselect + " " + toSelector(groups[i]);
- }
- newSelector = groups.join(",");
-
- // Expand context for sibling selectors
- newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
- }
-
- if (newSelector) {
- try {
- push.apply(results, newContext.querySelectorAll(newSelector));
- return results;
- } catch (qsaError) {} finally {
- if (nid === expando) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
- }
-
- // All others
- return select(selector.replace(rtrim, "$1"), context, results, seed);
- }
-
- /**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
- function createCache() {
- var keys = [];
-
- function cache(key, value) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if (keys.push(key + " ") > Expr.cacheLength) {
- // Only keep the most recent entries
- delete cache[keys.shift()];
- }
- return cache[key + " "] = value;
- }
- return cache;
- }
-
- /**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
- function markFunction(fn) {
- fn[expando] = true;
- return fn;
- }
-
- /**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
- function assert(fn) {
- var div = document.createElement("div");
-
- try {
- return !!fn(div);
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if (div.parentNode) {
- div.parentNode.removeChild(div);
- }
- // release memory in IE
- div = null;
- }
- }
-
- /**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
- function addHandle(attrs, handler) {
- var arr = attrs.split("|"),
- i = arr.length;
-
- while (i--) {
- Expr.attrHandle[arr[i]] = handler;
- }
- }
-
- /**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
- function siblingCheck(a, b) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);
-
- // Use IE sourceIndex if available on both nodes
- if (diff) {
- return diff;
- }
-
- // Check if b follows a
- if (cur) {
- while (cur = cur.nextSibling) {
- if (cur === b) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
- }
-
- /**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
- function createInputPseudo(type) {
- return function (elem) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
- }
-
- /**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
- function createButtonPseudo(type) {
- return function (elem) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
- }
-
- /**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
- function createPositionalPseudo(fn) {
- return markFunction(function (argument) {
- argument = +argument;
- return markFunction(function (seed, matches) {
- var j,
- matchIndexes = fn([], seed.length, argument),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while (i--) {
- if (seed[j = matchIndexes[i]]) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
- }
-
- /**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
- function testContext(context) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
- }
-
- // Expose support vars for convenience
- support = Sizzle.support = {};
-
- /**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
- isXML = Sizzle.isXML = function (elem) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
- };
-
- /**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
- setDocument = Sizzle.setDocument = function (node) {
- var hasCompare,
- parent,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML(document);
-
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ((parent = document.defaultView) && parent.top !== parent) {
- // Support: IE 11
- if (parent.addEventListener) {
- parent.addEventListener("unload", unloadHandler, false);
-
- // Support: IE 9 - 10 only
- } else if (parent.attachEvent) {
- parent.attachEvent("onunload", unloadHandler);
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function (div) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function (div) {
- div.appendChild(document.createComment(""));
- return !div.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test(document.getElementsByClassName);
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function (div) {
- docElem.appendChild(div).id = expando;
- return !document.getElementsByName || !document.getElementsByName(expando).length;
- });
-
- // ID find and filter
- if (support.getById) {
- Expr.find["ID"] = function (id, context) {
- if (typeof context.getElementById !== "undefined" && documentIsHTML) {
- var m = context.getElementById(id);
- return m ? [m] : [];
- }
- };
- Expr.filter["ID"] = function (id) {
- var attrId = id.replace(runescape, funescape);
- return function (elem) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function (id) {
- var attrId = id.replace(runescape, funescape);
- return function (elem) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ? function (tag, context) {
- if (typeof context.getElementsByTagName !== "undefined") {
- return context.getElementsByTagName(tag);
-
- // DocumentFragment nodes don't have gEBTN
- } else if (support.qsa) {
- return context.querySelectorAll(tag);
- }
- } : function (tag, context) {
- var elem,
- tmp = [],
- i = 0,
-
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName(tag);
-
- // Filter out possible comments
- if (tag === "*") {
- while (elem = results[i++]) {
- if (elem.nodeType === 1) {
- tmp.push(elem);
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
- if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
- return context.getElementsByClassName(className);
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if (support.qsa = rnative.test(document.querySelectorAll)) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function (div) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- docElem.appendChild(div).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if (div.querySelectorAll("[msallowcapture^='']").length) {
- rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if (!div.querySelectorAll("[selected]").length) {
- rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if (!div.querySelectorAll("[id~=" + expando + "-]").length) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if (!div.querySelectorAll(":checked").length) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibing-combinator selector` fails
- if (!div.querySelectorAll("a#" + expando + "+*").length) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function (div) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
- input.setAttribute("type", "hidden");
- div.appendChild(input).setAttribute("name", "D");
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if (div.querySelectorAll("[name=d]").length) {
- rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if (!div.querySelectorAll(":enabled").length) {
- rbuggyQSA.push(":enabled", ":disabled");
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
-
- assert(function (div) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call(div, "div");
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call(div, "[s!='']:x");
- rbuggyMatches.push("!=", pseudos);
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
- rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test(docElem.compareDocumentPosition);
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
- } : function (a, b) {
- if (b) {
- while (b = b.parentNode) {
- if (b === a) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ? function (a, b) {
-
- // Flag for duplicate removal
- if (a === b) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if (compare) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
-
- // Choose the first element that is related to our preferred document
- if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {
- return -1;
- }
- if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
- }
-
- return compare & 4 ? -1 : 1;
- } : function (a, b) {
- // Exit early if the nodes are identical
- if (a === b) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [a],
- bp = [b];
-
- // Parentless nodes are either documents or disconnected
- if (!aup || !bup) {
- return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if (aup === bup) {
- return siblingCheck(a, b);
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while (cur = cur.parentNode) {
- ap.unshift(cur);
- }
- cur = b;
- while (cur = cur.parentNode) {
- bp.unshift(cur);
- }
-
- // Walk down the tree looking for a discrepancy
- while (ap[i] === bp[i]) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck(ap[i], bp[i]) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;
- };
-
- return document;
- };
-
- Sizzle.matches = function (expr, elements) {
- return Sizzle(expr, null, null, elements);
- };
-
- Sizzle.matchesSelector = function (elem, expr) {
- // Set document vars if needed
- if ((elem.ownerDocument || elem) !== document) {
- setDocument(elem);
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace(rattributeQuotes, "='$1']");
-
- if (support.matchesSelector && documentIsHTML && !compilerCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
-
- try {
- var ret = matches.call(elem, expr);
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if (ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11) {
- return ret;
- }
- } catch (e) {}
- }
-
- return Sizzle(expr, document, null, [elem]).length > 0;
- };
-
- Sizzle.contains = function (context, elem) {
- // Set document vars if needed
- if ((context.ownerDocument || context) !== document) {
- setDocument(context);
- }
- return contains(context, elem);
- };
-
- Sizzle.attr = function (elem, name) {
- // Set document vars if needed
- if ((elem.ownerDocument || elem) !== document) {
- setDocument(elem);
- }
-
- var fn = Expr.attrHandle[name.toLowerCase()],
-
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
-
- return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
- };
-
- Sizzle.error = function (msg) {
- throw new Error("Syntax error, unrecognized expression: " + msg);
- };
-
- /**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
- Sizzle.uniqueSort = function (results) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice(0);
- results.sort(sortOrder);
-
- if (hasDuplicate) {
- while (elem = results[i++]) {
- if (elem === results[i]) {
- j = duplicates.push(i);
- }
- }
- while (j--) {
- results.splice(duplicates[j], 1);
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
- };
-
- /**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
- getText = Sizzle.getText = function (elem) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if (!nodeType) {
- // If no nodeType, this is expected to be an array
- while (node = elem[i++]) {
- // Do not traverse comment nodes
- ret += getText(node);
- }
- } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if (typeof elem.textContent === "string") {
- return elem.textContent;
- } else {
- // Traverse its children
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
- ret += getText(elem);
- }
- }
- } else if (nodeType === 3 || nodeType === 4) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
- };
-
- Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function ATTR(match) {
- match[1] = match[1].replace(runescape, funescape);
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
-
- if (match[2] === "~=") {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice(0, 4);
- },
-
- "CHILD": function CHILD(match) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if (match[1].slice(0, 3) === "nth") {
- // nth-* requires argument
- if (!match[3]) {
- Sizzle.error(match[0]);
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
- match[5] = +(match[7] + match[8] || match[3] === "odd");
-
- // other types prohibit arguments
- } else if (match[3]) {
- Sizzle.error(match[0]);
- }
-
- return match;
- },
-
- "PSEUDO": function PSEUDO(match) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if (matchExpr["CHILD"].test(match[0])) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if (match[3]) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if (unquoted && rpseudo.test(unquoted) && (
- // Get excess from tokenize (recursively)
- excess = tokenize(unquoted, true)) && (
- // advance to the next closing parenthesis
- excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
-
- // excess is a negative index
- match[0] = match[0].slice(0, excess);
- match[2] = unquoted.slice(0, excess);
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice(0, 3);
- }
- },
-
- filter: {
-
- "TAG": function TAG(nodeNameSelector) {
- var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
- return nodeNameSelector === "*" ? function () {
- return true;
- } : function (elem) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function CLASS(className) {
- var pattern = classCache[className + " "];
-
- return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) {
- return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
- });
- },
-
- "ATTR": function ATTR(name, operator, check) {
- return function (elem) {
- var result = Sizzle.attr(elem, name);
-
- if (result == null) {
- return operator === "!=";
- }
- if (!operator) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
- };
- },
-
- "CHILD": function CHILD(type, what, argument, first, last) {
- var simple = type.slice(0, 3) !== "nth",
- forward = type.slice(-4) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function (elem) {
- return !!elem.parentNode;
- } : function (elem, context, xml) {
- var cache,
- uniqueCache,
- outerCache,
- node,
- nodeIndex,
- start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if (parent) {
-
- // :(first|last|only)-(child|of-type)
- if (simple) {
- while (dir) {
- node = elem;
- while (node = node[dir]) {
- if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
-
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [forward ? parent.firstChild : parent.lastChild];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if (forward && useCache) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[expando] || (node[expando] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-
- cache = uniqueCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = nodeIndex && cache[2];
- node = nodeIndex && parent.childNodes[nodeIndex];
-
- while (node = ++nodeIndex && node && node[dir] || (
-
- // Fallback to seeking `elem` from the start
- diff = nodeIndex = 0) || start.pop()) {
-
- // When found, cache indexes on `parent` and break
- if (node.nodeType === 1 && ++diff && node === elem) {
- uniqueCache[type] = [dirruns, nodeIndex, diff];
- break;
- }
- }
- } else {
- // Use previously-cached element index if available
- if (useCache) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[expando] || (node[expando] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-
- cache = uniqueCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if (diff === false) {
- // Use the same loop as above to seek `elem` from the start
- while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
-
- if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
-
- // Cache the index of each encountered element
- if (useCache) {
- outerCache = node[expando] || (node[expando] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-
- uniqueCache[type] = [dirruns, diff];
- }
-
- if (node === elem) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || diff % first === 0 && diff / first >= 0;
- }
- };
- },
-
- "PSEUDO": function PSEUDO(pseudo, argument) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo);
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if (fn[expando]) {
- return fn(argument);
- }
-
- // But maintain support for old signatures
- if (fn.length > 1) {
- args = [pseudo, pseudo, "", argument];
- return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {
- var idx,
- matched = fn(seed, argument),
- i = matched.length;
- while (i--) {
- idx = indexOf(seed, matched[i]);
- seed[idx] = !(matches[idx] = matched[i]);
- }
- }) : function (elem) {
- return fn(elem, 0, args);
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function (selector) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile(selector.replace(rtrim, "$1"));
-
- return matcher[expando] ? markFunction(function (seed, matches, context, xml) {
- var elem,
- unmatched = matcher(seed, null, xml, []),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while (i--) {
- if (elem = unmatched[i]) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) : function (elem, context, xml) {
- input[0] = elem;
- matcher(input, null, xml, results);
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function (selector) {
- return function (elem) {
- return Sizzle(selector, elem).length > 0;
- };
- }),
-
- "contains": markFunction(function (text) {
- text = text.replace(runescape, funescape);
- return function (elem) {
- return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction(function (lang) {
- // lang value must be a valid identifier
- if (!ridentifier.test(lang || "")) {
- Sizzle.error("unsupported lang: " + lang);
- }
- lang = lang.replace(runescape, funescape).toLowerCase();
- return function (elem) {
- var elemLang;
- do {
- if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
- }
- } while ((elem = elem.parentNode) && elem.nodeType === 1);
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function target(elem) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice(1) === elem.id;
- },
-
- "root": function root(elem) {
- return elem === docElem;
- },
-
- "focus": function focus(elem) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function enabled(elem) {
- return elem.disabled === false;
- },
-
- "disabled": function disabled(elem) {
- return elem.disabled === true;
- },
-
- "checked": function checked(elem) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;
- },
-
- "selected": function selected(elem) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if (elem.parentNode) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function empty(elem) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
- if (elem.nodeType < 6) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function parent(elem) {
- return !Expr.pseudos["empty"](elem);
- },
-
- // Element/input types
- "header": function header(elem) {
- return rheader.test(elem.nodeName);
- },
-
- "input": function input(elem) {
- return rinputs.test(elem.nodeName);
- },
-
- "button": function button(elem) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function text(elem) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && (
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function () {
- return [0];
- }),
-
- "last": createPositionalPseudo(function (matchIndexes, length) {
- return [length - 1];
- }),
-
- "eq": createPositionalPseudo(function (matchIndexes, length, argument) {
- return [argument < 0 ? argument + length : argument];
- }),
-
- "even": createPositionalPseudo(function (matchIndexes, length) {
- var i = 0;
- for (; i < length; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function (matchIndexes, length) {
- var i = 1;
- for (; i < length; i += 2) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
- var i = argument < 0 ? argument + length : argument;
- for (; --i >= 0;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
- var i = argument < 0 ? argument + length : argument;
- for (; ++i < length;) {
- matchIndexes.push(i);
- }
- return matchIndexes;
- })
- }
- };
-
- Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
- // Add button/input type pseudos
- for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
- Expr.pseudos[i] = createInputPseudo(i);
- }
- for (i in { submit: true, reset: true }) {
- Expr.pseudos[i] = createButtonPseudo(i);
- }
-
- // Easy API for creating new setFilters
- function setFilters() {}
- setFilters.prototype = Expr.filters = Expr.pseudos;
- Expr.setFilters = new setFilters();
-
- tokenize = Sizzle.tokenize = function (selector, parseOnly) {
- var matched,
- match,
- tokens,
- type,
- soFar,
- groups,
- preFilters,
- cached = tokenCache[selector + " "];
-
- if (cached) {
- return parseOnly ? 0 : cached.slice(0);
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while (soFar) {
-
- // Comma and first run
- if (!matched || (match = rcomma.exec(soFar))) {
- if (match) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice(match[0].length) || soFar;
- }
- groups.push(tokens = []);
- }
-
- matched = false;
-
- // Combinators
- if (match = rcombinators.exec(soFar)) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace(rtrim, " ")
- });
- soFar = soFar.slice(matched.length);
- }
-
- // Filters
- for (type in Expr.filter) {
- if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice(matched.length);
- }
- }
-
- if (!matched) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) :
- // Cache the tokens
- tokenCache(selector, groups).slice(0);
- };
-
- function toSelector(tokens) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for (; i < len; i++) {
- selector += tokens[i].value;
- }
- return selector;
- }
-
- function addCombinator(matcher, combinator, base) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function (elem, context, xml) {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- return matcher(elem, context, xml);
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function (elem, context, xml) {
- var oldCache,
- uniqueCache,
- outerCache,
- newCache = [dirruns, doneName];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if (xml) {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- if (matcher(elem, context, xml)) {
- return true;
- }
- }
- }
- } else {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- outerCache = elem[expando] || (elem[expando] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
-
- if ((oldCache = uniqueCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
-
- // Assign to newCache so results back-propagate to previous elements
- return newCache[2] = oldCache[2];
- } else {
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[dir] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if (newCache[2] = matcher(elem, context, xml)) {
- return true;
- }
- }
- }
- }
- }
- };
- }
-
- function elementMatcher(matchers) {
- return matchers.length > 1 ? function (elem, context, xml) {
- var i = matchers.length;
- while (i--) {
- if (!matchers[i](elem, context, xml)) {
- return false;
- }
- }
- return true;
- } : matchers[0];
- }
-
- function multipleContexts(selector, contexts, results) {
- var i = 0,
- len = contexts.length;
- for (; i < len; i++) {
- Sizzle(selector, contexts[i], results);
- }
- return results;
- }
-
- function condense(unmatched, map, filter, context, xml) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for (; i < len; i++) {
- if (elem = unmatched[i]) {
- if (!filter || filter(elem, context, xml)) {
- newUnmatched.push(elem);
- if (mapped) {
- map.push(i);
- }
- }
- }
- }
-
- return newUnmatched;
- }
-
- function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
- if (postFilter && !postFilter[expando]) {
- postFilter = setMatcher(postFilter);
- }
- if (postFinder && !postFinder[expando]) {
- postFinder = setMatcher(postFinder, postSelector);
- }
- return markFunction(function (seed, results, context, xml) {
- var temp,
- i,
- elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
-
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || (seed ? preFilter : preexisting || postFilter) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results : matcherIn;
-
- // Find primary matches
- if (matcher) {
- matcher(matcherIn, matcherOut, context, xml);
- }
-
- // Apply postFilter
- if (postFilter) {
- temp = condense(matcherOut, postMap);
- postFilter(temp, [], context, xml);
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while (i--) {
- if (elem = temp[i]) {
- matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
- }
- }
- }
-
- if (seed) {
- if (postFinder || preFilter) {
- if (postFinder) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while (i--) {
- if (elem = matcherOut[i]) {
- // Restore matcherIn since elem is not yet a final match
- temp.push(matcherIn[i] = elem);
- }
- }
- postFinder(null, matcherOut = [], temp, xml);
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while (i--) {
- if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
- if (postFinder) {
- postFinder(null, results, matcherOut, xml);
- } else {
- push.apply(results, matcherOut);
- }
- }
- });
- }
-
- function matcherFromTokens(tokens) {
- var checkContext,
- matcher,
- j,
- len = tokens.length,
- leadingRelative = Expr.relative[tokens[0].type],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator(function (elem) {
- return elem === checkContext;
- }, implicitRelative, true),
- matchAnyContext = addCombinator(function (elem) {
- return indexOf(checkContext, elem) > -1;
- }, implicitRelative, true),
- matchers = [function (elem, context, xml) {
- var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- }];
-
- for (; i < len; i++) {
- if (matcher = Expr.relative[tokens[i].type]) {
- matchers = [addCombinator(elementMatcher(matchers), matcher)];
- } else {
- matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
-
- // Return special upon seeing a positional matcher
- if (matcher[expando]) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for (; j < len; j++) {
- if (Expr.relative[tokens[j].type]) {
- break;
- }
- }
- return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === " " ? "*" : "" })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));
- }
- matchers.push(matcher);
- }
- }
-
- return elementMatcher(matchers);
- }
-
- function matcherFromGroupMatchers(elementMatchers, setMatchers) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function superMatcher(seed, context, xml, results, outermost) {
- var elem,
- j,
- matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
-
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]("*", outermost),
-
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,
- len = elems.length;
-
- if (outermost) {
- outermostContext = context === document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for (; i !== len && (elem = elems[i]) != null; i++) {
- if (byElement && elem) {
- j = 0;
- if (!context && elem.ownerDocument !== document) {
- setDocument(elem);
- xml = !documentIsHTML;
- }
- while (matcher = elementMatchers[j++]) {
- if (matcher(elem, context || document, xml)) {
- results.push(elem);
- break;
- }
- }
- if (outermost) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if (bySet) {
- // They will have gone through all possible matchers
- if (elem = !matcher && elem) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if (seed) {
- unmatched.push(elem);
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if (bySet && i !== matchedCount) {
- j = 0;
- while (matcher = setMatchers[j++]) {
- matcher(unmatched, setMatched, context, xml);
- }
-
- if (seed) {
- // Reintegrate element matches to eliminate the need for sorting
- if (matchedCount > 0) {
- while (i--) {
- if (!(unmatched[i] || setMatched[i])) {
- setMatched[i] = pop.call(results);
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense(setMatched);
- }
-
- // Add matches to results
- push.apply(results, setMatched);
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
-
- Sizzle.uniqueSort(results);
- }
- }
-
- // Override manipulation of globals by nested matchers
- if (outermost) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ? markFunction(superMatcher) : superMatcher;
- }
-
- compile = Sizzle.compile = function (selector, match /* Internal Use Only */) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[selector + " "];
-
- if (!cached) {
- // Generate a function of recursive functions that can be used to check each element
- if (!match) {
- match = tokenize(selector);
- }
- i = match.length;
- while (i--) {
- cached = matcherFromTokens(match[i]);
- if (cached[expando]) {
- setMatchers.push(cached);
- } else {
- elementMatchers.push(cached);
- }
- }
-
- // Cache the compiled function
- cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
- };
-
- /**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
- select = Sizzle.select = function (selector, context, results, seed) {
- var i,
- tokens,
- token,
- type,
- find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize(selector = compiled.selector || selector);
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if (match.length === 1) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[0] = match[0].slice(0);
- if (tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
-
- context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
- if (!context) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if (compiled) {
- context = context.parentNode;
- }
-
- selector = selector.slice(tokens.shift().value.length);
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
- while (i--) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if (Expr.relative[type = token.type]) {
- break;
- }
- if (find = Expr.find[type]) {
- // Search, expanding context for leading sibling combinators
- if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice(i, 1);
- selector = seed.length && toSelector(tokens);
- if (!selector) {
- push.apply(results, seed);
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
- return results;
- };
-
- // One-time assignments
-
- // Sort stability
- support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
-
- // Support: Chrome 14-35+
- // Always assume duplicates if they aren't passed to the comparison function
- support.detectDuplicates = !!hasDuplicate;
-
- // Initialize against the default document
- setDocument();
-
- // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
- // Detached nodes confoundingly follow *each other*
- support.sortDetached = assert(function (div1) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition(document.createElement("div")) & 1;
- });
-
- // Support: IE<8
- // Prevent attribute/property "interpolation"
- // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
- if (!assert(function (div) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#";
- })) {
- addHandle("type|href|height|width", function (elem, name, isXML) {
- if (!isXML) {
- return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
- }
- });
- }
-
- // Support: IE<9
- // Use defaultValue in place of getAttribute("value")
- if (!support.attributes || !assert(function (div) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute("value", "");
- return div.firstChild.getAttribute("value") === "";
- })) {
- addHandle("value", function (elem, name, isXML) {
- if (!isXML && elem.nodeName.toLowerCase() === "input") {
- return elem.defaultValue;
- }
- });
- }
-
- // Support: IE<9
- // Use getAttributeNode to fetch booleans when getAttribute lies
- if (!assert(function (div) {
- return div.getAttribute("disabled") == null;
- })) {
- addHandle(booleans, function (elem, name, isXML) {
- var val;
- if (!isXML) {
- return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
- }
- });
- }
-
- return Sizzle;
- }(window);
-
- jQuery.find = Sizzle;
- jQuery.expr = Sizzle.selectors;
- jQuery.expr[":"] = jQuery.expr.pseudos;
- jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
- jQuery.text = Sizzle.getText;
- jQuery.isXMLDoc = Sizzle.isXML;
- jQuery.contains = Sizzle.contains;
-
- var dir = function dir(elem, _dir, until) {
- var matched = [],
- truncate = until !== undefined;
-
- while ((elem = elem[_dir]) && elem.nodeType !== 9) {
- if (elem.nodeType === 1) {
- if (truncate && jQuery(elem).is(until)) {
- break;
- }
- matched.push(elem);
- }
- }
- return matched;
- };
-
- var _siblings = function _siblings(n, elem) {
- var matched = [];
-
- for (; n; n = n.nextSibling) {
- if (n.nodeType === 1 && n !== elem) {
- matched.push(n);
- }
- }
-
- return matched;
- };
-
- var rneedsContext = jQuery.expr.match.needsContext;
-
- var rsingleTag = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;
-
- var risSimple = /^.[^:#\[\.,]*$/;
-
- // Implement the identical functionality for filter and not
- function winnow(elements, qualifier, not) {
- if (jQuery.isFunction(qualifier)) {
- return jQuery.grep(elements, function (elem, i) {
- /* jshint -W018 */
- return !!qualifier.call(elem, i, elem) !== not;
- });
- }
-
- if (qualifier.nodeType) {
- return jQuery.grep(elements, function (elem) {
- return elem === qualifier !== not;
- });
- }
-
- if (typeof qualifier === "string") {
- if (risSimple.test(qualifier)) {
- return jQuery.filter(qualifier, elements, not);
- }
-
- qualifier = jQuery.filter(qualifier, elements);
- }
-
- return jQuery.grep(elements, function (elem) {
- return indexOf.call(qualifier, elem) > -1 !== not;
- });
- }
-
- jQuery.filter = function (expr, elems, not) {
- var elem = elems[0];
-
- if (not) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector(elem, expr) ? [elem] : [] : jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
- return elem.nodeType === 1;
- }));
- };
-
- jQuery.fn.extend({
- find: function find(selector) {
- var i,
- len = this.length,
- ret = [],
- self = this;
-
- if (typeof selector !== "string") {
- return this.pushStack(jQuery(selector).filter(function () {
- for (i = 0; i < len; i++) {
- if (jQuery.contains(self[i], this)) {
- return true;
- }
- }
- }));
- }
-
- for (i = 0; i < len; i++) {
- jQuery.find(selector, self[i], ret);
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret);
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function filter(selector) {
- return this.pushStack(winnow(this, selector || [], false));
- },
- not: function not(selector) {
- return this.pushStack(winnow(this, selector || [], true));
- },
- is: function is(selector) {
- return !!winnow(this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
- }
- });
-
- // Initialize a jQuery object
-
-
- // A central reference to the root jQuery(document)
- var rootjQuery,
-
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- init = jQuery.fn.init = function (selector, context, root) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if (!selector) {
- return this;
- }
-
- // Method init() accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if (typeof selector === "string") {
- if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [null, selector, null];
- } else {
- match = rquickExpr.exec(selector);
- }
-
- // Match html or make sure no context is specified for #id
- if (match && (match[1] || !context)) {
-
- // HANDLE: $(html) -> $(array)
- if (match[1]) {
- context = context instanceof jQuery ? context[0] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));
-
- // HANDLE: $(html, props)
- if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
- for (match in context) {
-
- // Properties of context are called as methods if possible
- if (jQuery.isFunction(this[match])) {
- this[match](context[match]);
-
- // ...and otherwise set as attributes
- } else {
- this.attr(match, context[match]);
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById(match[2]);
-
- // Support: Blackberry 4.6
- // gEBID returns nodes no longer in the document (#6963)
- if (elem && elem.parentNode) {
-
- // Inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if (!context || context.jquery) {
- return (context || root).find(selector);
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor(context).find(selector);
- }
-
- // HANDLE: $(DOMElement)
- } else if (selector.nodeType) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if (jQuery.isFunction(selector)) {
- return root.ready !== undefined ? root.ready(selector) :
-
- // Execute immediately if ready is not present
- selector(jQuery);
- }
-
- if (selector.selector !== undefined) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray(selector, this);
- };
-
- // Give the init function the jQuery prototype for later instantiation
- init.prototype = jQuery.fn;
-
- // Initialize central reference
- rootjQuery = jQuery(document);
-
- var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
-
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
- jQuery.fn.extend({
- has: function has(target) {
- var targets = jQuery(target, this),
- l = targets.length;
-
- return this.filter(function () {
- var i = 0;
- for (; i < l; i++) {
- if (jQuery.contains(this, targets[i])) {
- return true;
- }
- }
- });
- },
-
- closest: function closest(selectors, context) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test(selectors) || typeof selectors !== "string" ? jQuery(selectors, context || this.context) : 0;
-
- for (; i < l; i++) {
- for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
-
- // Always skip document fragments
- if (cur.nodeType < 11 && (pos ? pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
-
- matched.push(cur);
- break;
- }
- }
- }
-
- return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
- },
-
- // Determine the position of an element within the set
- index: function index(elem) {
-
- // No argument, return index in parent
- if (!elem) {
- return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if (typeof elem === "string") {
- return indexOf.call(jQuery(elem), this[0]);
- }
-
- // Locate the position of the desired element
- return indexOf.call(this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem);
- },
-
- add: function add(selector, context) {
- return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
- },
-
- addBack: function addBack(selector) {
- return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
- }
- });
-
- function sibling(cur, dir) {
- while ((cur = cur[dir]) && cur.nodeType !== 1) {}
- return cur;
- }
-
- jQuery.each({
- parent: function parent(elem) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function parents(elem) {
- return dir(elem, "parentNode");
- },
- parentsUntil: function parentsUntil(elem, i, until) {
- return dir(elem, "parentNode", until);
- },
- next: function next(elem) {
- return sibling(elem, "nextSibling");
- },
- prev: function prev(elem) {
- return sibling(elem, "previousSibling");
- },
- nextAll: function nextAll(elem) {
- return dir(elem, "nextSibling");
- },
- prevAll: function prevAll(elem) {
- return dir(elem, "previousSibling");
- },
- nextUntil: function nextUntil(elem, i, until) {
- return dir(elem, "nextSibling", until);
- },
- prevUntil: function prevUntil(elem, i, until) {
- return dir(elem, "previousSibling", until);
- },
- siblings: function siblings(elem) {
- return _siblings((elem.parentNode || {}).firstChild, elem);
- },
- children: function children(elem) {
- return _siblings(elem.firstChild);
- },
- contents: function contents(elem) {
- return elem.contentDocument || jQuery.merge([], elem.childNodes);
- }
- }, function (name, fn) {
- jQuery.fn[name] = function (until, selector) {
- var matched = jQuery.map(this, fn, until);
-
- if (name.slice(-5) !== "Until") {
- selector = until;
- }
-
- if (selector && typeof selector === "string") {
- matched = jQuery.filter(selector, matched);
- }
-
- if (this.length > 1) {
-
- // Remove duplicates
- if (!guaranteedUnique[name]) {
- jQuery.uniqueSort(matched);
- }
-
- // Reverse order for parents* and prev-derivatives
- if (rparentsprev.test(name)) {
- matched.reverse();
- }
- }
-
- return this.pushStack(matched);
- };
- });
- var rnotwhite = /\S+/g;
-
- // Convert String-formatted options into Object-formatted ones
- function createOptions(options) {
- var object = {};
- jQuery.each(options.match(rnotwhite) || [], function (_, flag) {
- object[flag] = true;
- });
- return object;
- }
-
- /*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
- jQuery.Callbacks = function (options) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
-
- var // Flag to know if list is currently firing
- firing,
-
-
- // Last fire value for non-forgettable lists
- memory,
-
-
- // Flag to know if list was already fired
- _fired,
-
-
- // Flag to prevent firing
- _locked,
-
-
- // Actual callback list
- list = [],
-
-
- // Queue of execution data for repeatable lists
- queue = [],
-
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
-
- // Fire callbacks
- fire = function fire() {
-
- // Enforce single-firing
- _locked = options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- _fired = firing = true;
- for (; queue.length; firingIndex = -1) {
- memory = queue.shift();
- while (++firingIndex < list.length) {
-
- // Run callback and check for early termination
- if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if (!options.memory) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if (_locked) {
-
- // Keep an empty list if we have data for future add calls
- if (memory) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function add() {
- if (list) {
-
- // If we have memory from a past run, we should fire after adding
- if (memory && !firing) {
- firingIndex = list.length - 1;
- queue.push(memory);
- }
-
- (function add(args) {
- jQuery.each(args, function (_, arg) {
- if (jQuery.isFunction(arg)) {
- if (!options.unique || !self.has(arg)) {
- list.push(arg);
- }
- } else if (arg && arg.length && jQuery.type(arg) !== "string") {
-
- // Inspect recursively
- add(arg);
- }
- });
- })(arguments);
-
- if (memory && !firing) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function remove() {
- jQuery.each(arguments, function (_, arg) {
- var index;
- while ((index = jQuery.inArray(arg, list, index)) > -1) {
- list.splice(index, 1);
-
- // Handle firing indexes
- if (index <= firingIndex) {
- firingIndex--;
- }
- }
- });
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function has(fn) {
- return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function empty() {
- if (list) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function disable() {
- _locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function disabled() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function lock() {
- _locked = queue = [];
- if (!memory) {
- list = memory = "";
- }
- return this;
- },
- locked: function locked() {
- return !!_locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function fireWith(context, args) {
- if (!_locked) {
- args = args || [];
- args = [context, args.slice ? args.slice() : args];
- queue.push(args);
- if (!firing) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function fire() {
- self.fireWith(this, arguments);
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function fired() {
- return !!_fired;
- }
- };
-
- return self;
- };
-
- jQuery.extend({
-
- Deferred: function Deferred(func) {
- var tuples = [
-
- // action, add listener, listener list, final state
- ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"], ["notify", "progress", jQuery.Callbacks("memory")]],
- _state = "pending",
- _promise = {
- state: function state() {
- return _state;
- },
- always: function always() {
- deferred.done(arguments).fail(arguments);
- return this;
- },
- then: function then() /* fnDone, fnFail, fnProgress */{
- var fns = arguments;
- return jQuery.Deferred(function (newDefer) {
- jQuery.each(tuples, function (i, tuple) {
- var fn = jQuery.isFunction(fns[i]) && fns[i];
-
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[tuple[1]](function () {
- var returned = fn && fn.apply(this, arguments);
- if (returned && jQuery.isFunction(returned.promise)) {
- returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
- } else {
- newDefer[tuple[0] + "With"](this === _promise ? newDefer.promise() : this, fn ? [returned] : arguments);
- }
- });
- });
- fns = null;
- }).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function promise(obj) {
- return obj != null ? jQuery.extend(obj, _promise) : _promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- _promise.pipe = _promise.then;
-
- // Add list-specific methods
- jQuery.each(tuples, function (i, tuple) {
- var list = tuple[2],
- stateString = tuple[3];
-
- // promise[ done | fail | progress ] = list.add
- _promise[tuple[1]] = list.add;
-
- // Handle state
- if (stateString) {
- list.add(function () {
-
- // state = [ resolved | rejected ]
- _state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[i ^ 1][2].disable, tuples[2][2].lock);
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[tuple[0]] = function () {
- deferred[tuple[0] + "With"](this === deferred ? _promise : this, arguments);
- return this;
- };
- deferred[tuple[0] + "With"] = list.fireWith;
- });
-
- // Make the deferred a promise
- _promise.promise(deferred);
-
- // Call given func if any
- if (func) {
- func.call(deferred, deferred);
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function when(subordinate /* , ..., subordinateN */) {
- var i = 0,
- resolveValues = _slice.call(arguments),
- length = resolveValues.length,
-
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || subordinate && jQuery.isFunction(subordinate.promise) ? length : 0,
-
-
- // the master Deferred.
- // If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
-
- // Update function for both resolve and progress values
- updateFunc = function updateFunc(i, contexts, values) {
- return function (value) {
- contexts[i] = this;
- values[i] = arguments.length > 1 ? _slice.call(arguments) : value;
- if (values === progressValues) {
- deferred.notifyWith(contexts, values);
- } else if (! --remaining) {
- deferred.resolveWith(contexts, values);
- }
- };
- },
- progressValues,
- progressContexts,
- resolveContexts;
-
- // Add listeners to Deferred subordinates; treat others as resolved
- if (length > 1) {
- progressValues = new Array(length);
- progressContexts = new Array(length);
- resolveContexts = new Array(length);
- for (; i < length; i++) {
- if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) {
- resolveValues[i].promise().progress(updateFunc(i, progressContexts, progressValues)).done(updateFunc(i, resolveContexts, resolveValues)).fail(deferred.reject);
- } else {
- --remaining;
- }
- }
- }
-
- // If we're not waiting on anything, resolve the master
- if (!remaining) {
- deferred.resolveWith(resolveContexts, resolveValues);
- }
-
- return deferred.promise();
- }
- });
-
- // The deferred used on DOM ready
- var readyList;
-
- jQuery.fn.ready = function (fn) {
-
- // Add the callback
- jQuery.ready.promise().done(fn);
-
- return this;
- };
-
- jQuery.extend({
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function holdReady(hold) {
- if (hold) {
- jQuery.readyWait++;
- } else {
- jQuery.ready(true);
- }
- },
-
- // Handle when the DOM is ready
- ready: function ready(wait) {
-
- // Abort if there are pending holds or we're already ready
- if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if (wait !== true && --jQuery.readyWait > 0) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith(document, [jQuery]);
-
- // Trigger any bound ready events
- if (jQuery.fn.triggerHandler) {
- jQuery(document).triggerHandler("ready");
- jQuery(document).off("ready");
- }
- }
- });
-
- /**
- * The ready event handler and self cleanup method
- */
- function completed() {
- document.removeEventListener("DOMContentLoaded", completed);
- window.removeEventListener("load", completed);
- jQuery.ready();
- }
-
- jQuery.ready.promise = function (obj) {
- if (!readyList) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called
- // after the browser event has already occurred.
- // Support: IE9-10 only
- // Older IE sometimes signals "interactive" too soon
- if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout(jQuery.ready);
- } else {
-
- // Use the handy event callback
- document.addEventListener("DOMContentLoaded", completed);
-
- // A fallback to window.onload, that will always work
- window.addEventListener("load", completed);
- }
- }
- return readyList.promise(obj);
- };
-
- // Kick off the DOM ready check even if the user does not
- jQuery.ready.promise();
-
- // Multifunctional method to get and set values of a collection
- // The value/s can optionally be executed if it's a function
- var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if (jQuery.type(key) === "object") {
- chainable = true;
- for (i in key) {
- access(elems, fn, i, key[i], true, emptyGet, raw);
- }
-
- // Sets one value
- } else if (value !== undefined) {
- chainable = true;
-
- if (!jQuery.isFunction(value)) {
- raw = true;
- }
-
- if (bulk) {
-
- // Bulk operations run against the entire set
- if (raw) {
- fn.call(elems, value);
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function fn(elem, key, value) {
- return bulk.call(jQuery(elem), value);
- };
- }
- }
-
- if (fn) {
- for (; i < len; i++) {
- fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
- }
- }
- }
-
- return chainable ? elems :
-
- // Gets
- bulk ? fn.call(elems) : len ? fn(elems[0], key) : emptyGet;
- };
- var acceptData = function acceptData(owner) {
-
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- /* jshint -W018 */
- return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
- };
-
- function Data() {
- this.expando = jQuery.expando + Data.uid++;
- }
-
- Data.uid = 1;
-
- Data.prototype = {
-
- register: function register(owner, initial) {
- var value = initial || {};
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if (owner.nodeType) {
- owner[this.expando] = value;
-
- // Otherwise secure it in a non-enumerable, non-writable property
- // configurability must be true to allow the property to be
- // deleted with the delete operator
- } else {
- Object.defineProperty(owner, this.expando, {
- value: value,
- writable: true,
- configurable: true
- });
- }
- return owner[this.expando];
- },
- cache: function cache(owner) {
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if (!acceptData(owner)) {
- return {};
- }
-
- // Check if the owner object already has a cache
- var value = owner[this.expando];
-
- // If not, create one
- if (!value) {
- value = {};
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if (acceptData(owner)) {
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if (owner.nodeType) {
- owner[this.expando] = value;
-
- // Otherwise secure it in a non-enumerable property
- // configurable must be true to allow the property to be
- // deleted when data is removed
- } else {
- Object.defineProperty(owner, this.expando, {
- value: value,
- configurable: true
- });
- }
- }
- }
-
- return value;
- },
- set: function set(owner, data, value) {
- var prop,
- cache = this.cache(owner);
-
- // Handle: [ owner, key, value ] args
- if (typeof data === "string") {
- cache[data] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
-
- // Copy the properties one-by-one to the cache object
- for (prop in data) {
- cache[prop] = data[prop];
- }
- }
- return cache;
- },
- get: function get(owner, key) {
- return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][key];
- },
- access: function access(owner, key, value) {
- var stored;
-
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if (key === undefined || key && typeof key === "string" && value === undefined) {
-
- stored = this.get(owner, key);
-
- return stored !== undefined ? stored : this.get(owner, jQuery.camelCase(key));
- }
-
- // When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set(owner, key, value);
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function remove(owner, key) {
- var i,
- name,
- camel,
- cache = owner[this.expando];
-
- if (cache === undefined) {
- return;
- }
-
- if (key === undefined) {
- this.register(owner);
- } else {
-
- // Support array or space separated string of keys
- if (jQuery.isArray(key)) {
-
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = key.concat(key.map(jQuery.camelCase));
- } else {
- camel = jQuery.camelCase(key);
-
- // Try the string as a key before any manipulation
- if (key in cache) {
- name = [key, camel];
- } else {
-
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- name = camel;
- name = name in cache ? [name] : name.match(rnotwhite) || [];
- }
- }
-
- i = name.length;
-
- while (i--) {
- delete cache[name[i]];
- }
- }
-
- // Remove the expando if there's no more data
- if (key === undefined || jQuery.isEmptyObject(cache)) {
-
- // Support: Chrome <= 35-45+
- // Webkit & Blink performance suffers when deleting properties
- // from DOM nodes, so set to undefined instead
- // https://code.google.com/p/chromium/issues/detail?id=378607
- if (owner.nodeType) {
- owner[this.expando] = undefined;
- } else {
- delete owner[this.expando];
- }
- }
- },
- hasData: function hasData(owner) {
- var cache = owner[this.expando];
- return cache !== undefined && !jQuery.isEmptyObject(cache);
- }
- };
- var dataPriv = new Data();
-
- var dataUser = new Data();
-
- // Implementation Summary
- //
- // 1. Enforce API surface and semantic compatibility with 1.9.x branch
- // 2. Improve the module's maintainability by reducing the storage
- // paths to a single mechanism.
- // 3. Use the same single mechanism to support "private" and "user" data.
- // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
- // 5. Avoid exposing implementation details on user objects (eg. expando properties)
- // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
- var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /[A-Z]/g;
-
- function dataAttr(elem, key, data) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if (data === undefined && elem.nodeType === 1) {
- name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
- data = elem.getAttribute(name);
-
- if (typeof data === "string") {
- try {
- data = data === "true" ? true : data === "false" ? false : data === "null" ? null :
-
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data : rbrace.test(data) ? jQuery.parseJSON(data) : data;
- } catch (e) {}
-
- // Make sure we set the data so it isn't changed later
- dataUser.set(elem, key, data);
- } else {
- data = undefined;
- }
- }
- return data;
- }
-
- jQuery.extend({
- hasData: function hasData(elem) {
- return dataUser.hasData(elem) || dataPriv.hasData(elem);
- },
-
- data: function data(elem, name, _data) {
- return dataUser.access(elem, name, _data);
- },
-
- removeData: function removeData(elem, name) {
- dataUser.remove(elem, name);
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to dataPriv methods, these can be deprecated.
- _data: function _data(elem, name, data) {
- return dataPriv.access(elem, name, data);
- },
-
- _removeData: function _removeData(elem, name) {
- dataPriv.remove(elem, name);
- }
- });
-
- jQuery.fn.extend({
- data: function data(key, value) {
- var i,
- name,
- data,
- elem = this[0],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if (key === undefined) {
- if (this.length) {
- data = dataUser.get(elem);
-
- if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
- i = attrs.length;
- while (i--) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if (attrs[i]) {
- name = attrs[i].name;
- if (name.indexOf("data-") === 0) {
- name = jQuery.camelCase(name.slice(5));
- dataAttr(elem, name, data[name]);
- }
- }
- }
- dataPriv.set(elem, "hasDataAttrs", true);
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ((typeof key === "undefined" ? "undefined" : _typeof(key)) === "object") {
- return this.each(function () {
- dataUser.set(this, key);
- });
- }
-
- return access(this, function (value) {
- var data, camelKey;
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if (elem && value === undefined) {
-
- // Attempt to get data from the cache
- // with the key as-is
- data = dataUser.get(elem, key) ||
-
- // Try to find dashed key if it exists (gh-2779)
- // This is for 2.2.x only
- dataUser.get(elem, key.replace(rmultiDash, "-$&").toLowerCase());
-
- if (data !== undefined) {
- return data;
- }
-
- camelKey = jQuery.camelCase(key);
-
- // Attempt to get data from the cache
- // with the key camelized
- data = dataUser.get(elem, camelKey);
- if (data !== undefined) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr(elem, camelKey, undefined);
- if (data !== undefined) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- camelKey = jQuery.camelCase(key);
- this.each(function () {
-
- // First, attempt to store a copy or reference of any
- // data that might've been store with a camelCased key.
- var data = dataUser.get(this, camelKey);
-
- // For HTML5 data-* attribute interop, we have to
- // store property names with dashes in a camelCase form.
- // This might not apply to all properties...*
- dataUser.set(this, camelKey, value);
-
- // *... In the case of properties that might _actually_
- // have dashes, we need to also store a copy of that
- // unchanged property.
- if (key.indexOf("-") > -1 && data !== undefined) {
- dataUser.set(this, key, value);
- }
- });
- }, null, value, arguments.length > 1, null, true);
- },
-
- removeData: function removeData(key) {
- return this.each(function () {
- dataUser.remove(this, key);
- });
- }
- });
-
- jQuery.extend({
- queue: function queue(elem, type, data) {
- var queue;
-
- if (elem) {
- type = (type || "fx") + "queue";
- queue = dataPriv.get(elem, type);
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if (data) {
- if (!queue || jQuery.isArray(data)) {
- queue = dataPriv.access(elem, type, jQuery.makeArray(data));
- } else {
- queue.push(data);
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function dequeue(elem, type) {
- type = type || "fx";
-
- var queue = jQuery.queue(elem, type),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks(elem, type),
- next = function next() {
- jQuery.dequeue(elem, type);
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if (fn === "inprogress") {
- fn = queue.shift();
- startLength--;
- }
-
- if (fn) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if (type === "fx") {
- queue.unshift("inprogress");
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call(elem, next, hooks);
- }
-
- if (!startLength && hooks) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function _queueHooks(elem, type) {
- var key = type + "queueHooks";
- return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
- empty: jQuery.Callbacks("once memory").add(function () {
- dataPriv.remove(elem, [type + "queue", key]);
- })
- });
- }
- });
-
- jQuery.fn.extend({
- queue: function queue(type, data) {
- var setter = 2;
-
- if (typeof type !== "string") {
- data = type;
- type = "fx";
- setter--;
- }
-
- if (arguments.length < setter) {
- return jQuery.queue(this[0], type);
- }
-
- return data === undefined ? this : this.each(function () {
- var queue = jQuery.queue(this, type, data);
-
- // Ensure a hooks for this queue
- jQuery._queueHooks(this, type);
-
- if (type === "fx" && queue[0] !== "inprogress") {
- jQuery.dequeue(this, type);
- }
- });
- },
- dequeue: function dequeue(type) {
- return this.each(function () {
- jQuery.dequeue(this, type);
- });
- },
- clearQueue: function clearQueue(type) {
- return this.queue(type || "fx", []);
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function promise(type, obj) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function resolve() {
- if (! --count) {
- defer.resolveWith(elements, [elements]);
- }
- };
-
- if (typeof type !== "string") {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while (i--) {
- tmp = dataPriv.get(elements[i], type + "queueHooks");
- if (tmp && tmp.empty) {
- count++;
- tmp.empty.add(resolve);
- }
- }
- resolve();
- return defer.promise(obj);
- }
- });
- var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
-
- var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
-
- var cssExpand = ["Top", "Right", "Bottom", "Left"];
-
- var isHidden = function isHidden(elem, el) {
-
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css(elem, "display") === "none" || !jQuery.contains(elem.ownerDocument, elem);
- };
-
- function adjustCSS(elem, prop, valueParts, tween) {
- var adjusted,
- scale = 1,
- maxIterations = 20,
- currentValue = tween ? function () {
- return tween.cur();
- } : function () {
- return jQuery.css(elem, prop, "");
- },
- initial = currentValue(),
- unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"),
-
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
-
- if (initialInUnit && initialInUnit[3] !== unit) {
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[3];
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- do {
-
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- initialInUnit = initialInUnit / scale;
- jQuery.style(elem, prop, initialInUnit + unit);
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // Break the loop if scale is unchanged or perfect, or if we've just had enough.
- } while (scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations);
- }
-
- if (valueParts) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
- if (tween) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
- }
- var rcheckableType = /^(?:checkbox|radio)$/i;
-
- var rtagName = /<([\w:-]+)/;
-
- var rscriptType = /^$|\/(?:java|ecma)script/i;
-
- // We have to close these tags to support XHTML (#13200)
- var wrapMap = {
-
- // Support: IE9
- option: [1, "<select multiple='multiple'>", "</select>"],
-
- // XHTML parsers do not magically insert elements in the
- // same way that tag soup parsers do. So we cannot shorten
- // this by omitting <tbody> or other required elements.
- thead: [1, "<table>", "</table>"],
- col: [2, "<table><colgroup>", "</colgroup></table>"],
- tr: [2, "<table><tbody>", "</tbody></table>"],
- td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
-
- _default: [0, "", ""]
- };
-
- // Support: IE9
- wrapMap.optgroup = wrapMap.option;
-
- wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
- wrapMap.th = wrapMap.td;
-
- function getAll(context, tag) {
-
- // Support: IE9-11+
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
- var ret = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName(tag || "*") : typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll(tag || "*") : [];
-
- return tag === undefined || tag && jQuery.nodeName(context, tag) ? jQuery.merge([context], ret) : ret;
- }
-
- // Mark scripts as having already been evaluated
- function setGlobalEval(elems, refElements) {
- var i = 0,
- l = elems.length;
-
- for (; i < l; i++) {
- dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
- }
- }
-
- var rhtml = /<|&#?\w+;/;
-
- function buildFragment(elems, context, scripts, selection, ignored) {
- var elem,
- tmp,
- tag,
- wrap,
- contains,
- j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for (; i < l; i++) {
- elem = elems[i];
-
- if (elem || elem === 0) {
-
- // Add nodes directly
- if (jQuery.type(elem) === "object") {
-
- // Support: Android<4.1, PhantomJS<2
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
-
- // Convert non-html into a text node
- } else if (!rhtml.test(elem)) {
- nodes.push(context.createTextNode(elem));
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild(context.createElement("div"));
-
- // Deserialize a standard representation
- tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
- wrap = wrapMap[tag] || wrapMap._default;
- tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while (j--) {
- tmp = tmp.lastChild;
- }
-
- // Support: Android<4.1, PhantomJS<2
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge(nodes, tmp.childNodes);
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while (elem = nodes[i++]) {
-
- // Skip elements already in the context collection (trac-4087)
- if (selection && jQuery.inArray(elem, selection) > -1) {
- if (ignored) {
- ignored.push(elem);
- }
- continue;
- }
-
- contains = jQuery.contains(elem.ownerDocument, elem);
-
- // Append to fragment
- tmp = getAll(fragment.appendChild(elem), "script");
-
- // Preserve script evaluation history
- if (contains) {
- setGlobalEval(tmp);
- }
-
- // Capture executables
- if (scripts) {
- j = 0;
- while (elem = tmp[j++]) {
- if (rscriptType.test(elem.type || "")) {
- scripts.push(elem);
- }
- }
- }
- }
-
- return fragment;
- }
-
- (function () {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild(document.createElement("div")),
- input = document.createElement("input");
-
- // Support: Android 4.0-4.3, Safari<=5.1
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute("type", "radio");
- input.setAttribute("checked", "checked");
- input.setAttribute("name", "t");
-
- div.appendChild(input);
-
- // Support: Safari<=5.1, Android<4.2
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
-
- // Support: IE<=11+
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
- })();
-
- var rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
- function returnTrue() {
- return true;
- }
-
- function returnFalse() {
- return false;
- }
-
- // Support: IE9
- // See #13393 for more info
- function safeActiveElement() {
- try {
- return document.activeElement;
- } catch (err) {}
- }
-
- function _on(elem, types, selector, data, fn, one) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ((typeof types === "undefined" ? "undefined" : _typeof(types)) === "object") {
-
- // ( types-Object, selector, data )
- if (typeof selector !== "string") {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for (type in types) {
- _on(elem, type, selector, data, types[type], one);
- }
- return elem;
- }
-
- if (data == null && fn == null) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if (fn == null) {
- if (typeof selector === "string") {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if (fn === false) {
- fn = returnFalse;
- } else if (!fn) {
- return elem;
- }
-
- if (one === 1) {
- origFn = fn;
- fn = function fn(event) {
-
- // Can use an empty set, since event contains the info
- jQuery().off(event);
- return origFn.apply(this, arguments);
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
- }
- return elem.each(function () {
- jQuery.event.add(this, types, fn, data, selector);
- });
- }
-
- /*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
- jQuery.event = {
-
- global: {},
-
- add: function add(elem, types, handler, data, selector) {
-
- var handleObjIn,
- eventHandle,
- tmp,
- events,
- t,
- handleObj,
- special,
- handlers,
- type,
- namespaces,
- origType,
- elemData = dataPriv.get(elem);
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if (!elemData) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if (handler.handler) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if (!handler.guid) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if (!(events = elemData.events)) {
- events = elemData.events = {};
- }
- if (!(eventHandle = elemData.handle)) {
- eventHandle = elemData.handle = function (e) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = (types || "").match(rnotwhite) || [""];
- t = types.length;
- while (t--) {
- tmp = rtypenamespace.exec(types[t]) || [];
- type = origType = tmp[1];
- namespaces = (tmp[2] || "").split(".").sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if (!type) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[type] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = (selector ? special.delegateType : special.bindType) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[type] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test(selector),
- namespace: namespaces.join(".")
- }, handleObjIn);
-
- // Init the event handler queue if we're the first
- if (!(handlers = events[type])) {
- handlers = events[type] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
-
- if (elem.addEventListener) {
- elem.addEventListener(type, eventHandle);
- }
- }
- }
-
- if (special.add) {
- special.add.call(elem, handleObj);
-
- if (!handleObj.handler.guid) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if (selector) {
- handlers.splice(handlers.delegateCount++, 0, handleObj);
- } else {
- handlers.push(handleObj);
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[type] = true;
- }
- },
-
- // Detach an event or set of events from an element
- remove: function remove(elem, types, handler, selector, mappedTypes) {
-
- var j,
- origCount,
- tmp,
- events,
- t,
- handleObj,
- special,
- handlers,
- type,
- namespaces,
- origType,
- elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
-
- if (!elemData || !(events = elemData.events)) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = (types || "").match(rnotwhite) || [""];
- t = types.length;
- while (t--) {
- tmp = rtypenamespace.exec(types[t]) || [];
- type = origType = tmp[1];
- namespaces = (tmp[2] || "").split(".").sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if (!type) {
- for (type in events) {
- jQuery.event.remove(elem, type + types[t], handler, selector, true);
- }
- continue;
- }
-
- special = jQuery.event.special[type] || {};
- type = (selector ? special.delegateType : special.bindType) || type;
- handlers = events[type] || [];
- tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
-
- // Remove matching events
- origCount = j = handlers.length;
- while (j--) {
- handleObj = handlers[j];
-
- if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
- handlers.splice(j, 1);
-
- if (handleObj.selector) {
- handlers.delegateCount--;
- }
- if (special.remove) {
- special.remove.call(elem, handleObj);
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if (origCount && !handlers.length) {
- if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
-
- jQuery.removeEvent(elem, type, elemData.handle);
- }
-
- delete events[type];
- }
- }
-
- // Remove data and the expando if it's no longer used
- if (jQuery.isEmptyObject(events)) {
- dataPriv.remove(elem, "handle events");
- }
- },
-
- dispatch: function dispatch(event) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix(event);
-
- var i,
- j,
- ret,
- matched,
- handleObj,
- handlerQueue = [],
- args = _slice.call(arguments),
- handlers = (dataPriv.get(this, "events") || {})[event.type] || [],
- special = jQuery.event.special[event.type] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if (special.preDispatch && special.preDispatch.call(this, event) === false) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call(this, event, handlers);
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
-
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if (!event.rnamespace || event.rnamespace.test(handleObj.namespace)) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
-
- if (ret !== undefined) {
- if ((event.result = ret) === false) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if (special.postDispatch) {
- special.postDispatch.call(this, event);
- }
-
- return event.result;
- },
-
- handlers: function handlers(event, _handlers) {
- var i,
- matches,
- sel,
- handleObj,
- handlerQueue = [],
- delegateCount = _handlers.delegateCount,
- cur = event.target;
-
- // Support (at least): Chrome, IE9
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- //
- // Support: Firefox<=42+
- // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
- if (delegateCount && cur.nodeType && (event.type !== "click" || isNaN(event.button) || event.button < 1)) {
-
- for (; cur !== this; cur = cur.parentNode || this) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if (cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click")) {
- matches = [];
- for (i = 0; i < delegateCount; i++) {
- handleObj = _handlers[i];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if (matches[sel] === undefined) {
- matches[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
- }
- if (matches[sel]) {
- matches.push(handleObj);
- }
- }
- if (matches.length) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if (delegateCount < _handlers.length) {
- handlerQueue.push({ elem: this, handlers: _handlers.slice(delegateCount) });
- }
-
- return handlerQueue;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: ("altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + "metaKey relatedTarget shiftKey target timeStamp view which").split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function filter(event, original) {
-
- // Add which for key events
- if (event.which == null) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: ("button buttons clientX clientY offsetX offsetY pageX pageY " + "screenX screenY toElement").split(" "),
- filter: function filter(event, original) {
- var eventDoc,
- doc,
- body,
- button = original.button;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if (event.pageX == null && original.clientX != null) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = original.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if (!event.which && button !== undefined) {
- event.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0;
- }
-
- return event;
- }
- },
-
- fix: function fix(event) {
- if (event[jQuery.expando]) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i,
- prop,
- copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[type];
-
- if (!fixHook) {
- this.fixHooks[type] = fixHook = rmouseEvent.test(type) ? this.mouseHooks : rkeyEvent.test(type) ? this.keyHooks : {};
- }
- copy = fixHook.props ? this.props.concat(fixHook.props) : this.props;
-
- event = new jQuery.Event(originalEvent);
-
- i = copy.length;
- while (i--) {
- prop = copy[i];
- event[prop] = originalEvent[prop];
- }
-
- // Support: Cordova 2.5 (WebKit) (#13255)
- // All events should have a target; Cordova deviceready doesn't
- if (!event.target) {
- event.target = document;
- }
-
- // Support: Safari 6.0+, Chrome<28
- // Target should not be a text node (#504, #13143)
- if (event.target.nodeType === 3) {
- event.target = event.target.parentNode;
- }
-
- return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
-
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function trigger() {
- if (this !== safeActiveElement() && this.focus) {
- this.focus();
- return false;
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function trigger() {
- if (this === safeActiveElement() && this.blur) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
-
- // For checkbox, fire native event so checked state will be right
- trigger: function trigger() {
- if (this.type === "checkbox" && this.click && jQuery.nodeName(this, "input")) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function _default(event) {
- return jQuery.nodeName(event.target, "a");
- }
- },
-
- beforeunload: {
- postDispatch: function postDispatch(event) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if (event.result !== undefined && event.originalEvent) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- }
- };
-
- jQuery.removeEvent = function (elem, type, handle) {
-
- // This "if" is needed for plain objects
- if (elem.removeEventListener) {
- elem.removeEventListener(type, handle);
- }
- };
-
- jQuery.Event = function (src, props) {
-
- // Allow instantiation without the 'new' keyword
- if (!(this instanceof jQuery.Event)) {
- return new jQuery.Event(src, props);
- }
-
- // Event object
- if (src && src.type) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined &&
-
- // Support: Android<4.0
- src.returnValue === false ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if (props) {
- jQuery.extend(this, props);
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[jQuery.expando] = true;
- };
-
- // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
- // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
- jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- isSimulated: false,
-
- preventDefault: function preventDefault() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if (e && !this.isSimulated) {
- e.preventDefault();
- }
- },
- stopPropagation: function stopPropagation() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if (e && !this.isSimulated) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function stopImmediatePropagation() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if (e && !this.isSimulated) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
- };
-
- // Create mouseenter/leave events using mouseover/out and event-time checks
- // so that event delegation works in jQuery.
- // Do the same for pointerenter/pointerleave and pointerover/pointerout
- //
- // Support: Safari 7 only
- // Safari sends mouseenter too often; see:
- // https://code.google.com/p/chromium/issues/detail?id=470258
- // for the description of the bug (it existed in older Chrome versions as well).
- jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
- }, function (orig, fix) {
- jQuery.event.special[orig] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function handle(event) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if (!related || related !== target && !jQuery.contains(target, related)) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply(this, arguments);
- event.type = fix;
- }
- return ret;
- }
- };
- });
-
- jQuery.fn.extend({
- on: function on(types, selector, data, fn) {
- return _on(this, types, selector, data, fn);
- },
- one: function one(types, selector, data, fn) {
- return _on(this, types, selector, data, fn, 1);
- },
- off: function off(types, selector, fn) {
- var handleObj, type;
- if (types && types.preventDefault && types.handleObj) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
- return this;
- }
- if ((typeof types === "undefined" ? "undefined" : _typeof(types)) === "object") {
-
- // ( types-object [, selector] )
- for (type in types) {
- this.off(type, selector, types[type]);
- }
- return this;
- }
- if (selector === false || typeof selector === "function") {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if (fn === false) {
- fn = returnFalse;
- }
- return this.each(function () {
- jQuery.event.remove(this, types, fn, selector);
- });
- }
- });
-
- var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
-
-
- // Support: IE 10-11, Edge 10240+
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /<script|<style|<link/i,
-
-
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
- // Manipulating tables requires a tbody
- function manipulationTarget(elem, content) {
- return jQuery.nodeName(elem, "table") && jQuery.nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr") ? elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody")) : elem;
- }
-
- // Replace/restore the type attribute of script elements for safe DOM manipulation
- function disableScript(elem) {
- elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
- return elem;
- }
- function restoreScript(elem) {
- var match = rscriptTypeMasked.exec(elem.type);
-
- if (match) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
-
- return elem;
- }
-
- function cloneCopyEvent(src, dest) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if (dest.nodeType !== 1) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if (dataPriv.hasData(src)) {
- pdataOld = dataPriv.access(src);
- pdataCur = dataPriv.set(dest, pdataOld);
- events = pdataOld.events;
-
- if (events) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for (type in events) {
- for (i = 0, l = events[type].length; i < l; i++) {
- jQuery.event.add(dest, type, events[type][i]);
- }
- }
- }
- }
-
- // 2. Copy user data
- if (dataUser.hasData(src)) {
- udataOld = dataUser.access(src);
- udataCur = jQuery.extend({}, udataOld);
-
- dataUser.set(dest, udataCur);
- }
- }
-
- // Fix IE bugs, see support tests
- function fixInput(src, dest) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if (nodeName === "input" && rcheckableType.test(src.type)) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if (nodeName === "input" || nodeName === "textarea") {
- dest.defaultValue = src.defaultValue;
- }
- }
-
- function domManip(collection, args, callback, ignored) {
-
- // Flatten any nested arrays
- args = concat.apply([], args);
-
- var fragment,
- first,
- scripts,
- hasScripts,
- node,
- doc,
- i = 0,
- l = collection.length,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction(value);
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if (isFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
- return collection.each(function (index) {
- var self = collection.eq(index);
- if (isFunction) {
- args[0] = value.call(this, index, self.html());
- }
- domManip(self, args, callback, ignored);
- });
- }
-
- if (l) {
- fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
- first = fragment.firstChild;
-
- if (fragment.childNodes.length === 1) {
- fragment = first;
- }
-
- // Require either new content or an interest in ignored elements to invoke the callback
- if (first || ignored) {
- scripts = jQuery.map(getAll(fragment, "script"), disableScript);
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item
- // instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for (; i < l; i++) {
- node = fragment;
-
- if (i !== iNoClone) {
- node = jQuery.clone(node, true, true);
-
- // Keep references to cloned scripts for later restoration
- if (hasScripts) {
-
- // Support: Android<4.1, PhantomJS<2
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge(scripts, getAll(node, "script"));
- }
- }
-
- callback.call(collection[i], node, i);
- }
-
- if (hasScripts) {
- doc = scripts[scripts.length - 1].ownerDocument;
-
- // Reenable scripts
- jQuery.map(scripts, restoreScript);
-
- // Evaluate executable scripts on first document insertion
- for (i = 0; i < hasScripts; i++) {
- node = scripts[i];
- if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
-
- if (node.src) {
-
- // Optional AJAX dependency, but won't run scripts if not present
- if (jQuery._evalUrl) {
- jQuery._evalUrl(node.src);
- }
- } else {
- jQuery.globalEval(node.textContent.replace(rcleanScript, ""));
- }
- }
- }
- }
- }
- }
-
- return collection;
- }
-
- function _remove(elem, selector, keepData) {
- var node,
- nodes = selector ? jQuery.filter(selector, elem) : elem,
- i = 0;
-
- for (; (node = nodes[i]) != null; i++) {
- if (!keepData && node.nodeType === 1) {
- jQuery.cleanData(getAll(node));
- }
-
- if (node.parentNode) {
- if (keepData && jQuery.contains(node.ownerDocument, node)) {
- setGlobalEval(getAll(node, "script"));
- }
- node.parentNode.removeChild(node);
- }
- }
-
- return elem;
- }
-
- jQuery.extend({
- htmlPrefilter: function htmlPrefilter(html) {
- return html.replace(rxhtmlTag, "<$1></$2>");
- },
-
- clone: function clone(elem, dataAndEvents, deepDataAndEvents) {
- var i,
- l,
- srcElements,
- destElements,
- clone = elem.cloneNode(true),
- inPage = jQuery.contains(elem.ownerDocument, elem);
-
- // Fix IE cloning issues
- if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll(clone);
- srcElements = getAll(elem);
-
- for (i = 0, l = srcElements.length; i < l; i++) {
- fixInput(srcElements[i], destElements[i]);
- }
- }
-
- // Copy the events from the original to the clone
- if (dataAndEvents) {
- if (deepDataAndEvents) {
- srcElements = srcElements || getAll(elem);
- destElements = destElements || getAll(clone);
-
- for (i = 0, l = srcElements.length; i < l; i++) {
- cloneCopyEvent(srcElements[i], destElements[i]);
- }
- } else {
- cloneCopyEvent(elem, clone);
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll(clone, "script");
- if (destElements.length > 0) {
- setGlobalEval(destElements, !inPage && getAll(elem, "script"));
- }
-
- // Return the cloned set
- return clone;
- },
-
- cleanData: function cleanData(elems) {
- var data,
- elem,
- type,
- special = jQuery.event.special,
- i = 0;
-
- for (; (elem = elems[i]) !== undefined; i++) {
- if (acceptData(elem)) {
- if (data = elem[dataPriv.expando]) {
- if (data.events) {
- for (type in data.events) {
- if (special[type]) {
- jQuery.event.remove(elem, type);
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent(elem, type, data.handle);
- }
- }
- }
-
- // Support: Chrome <= 35-45+
- // Assign undefined instead of using delete, see Data#remove
- elem[dataPriv.expando] = undefined;
- }
- if (elem[dataUser.expando]) {
-
- // Support: Chrome <= 35-45+
- // Assign undefined instead of using delete, see Data#remove
- elem[dataUser.expando] = undefined;
- }
- }
- }
- }
- });
-
- jQuery.fn.extend({
-
- // Keep domManip exposed until 3.0 (gh-2225)
- domManip: domManip,
-
- detach: function detach(selector) {
- return _remove(this, selector, true);
- },
-
- remove: function remove(selector) {
- return _remove(this, selector);
- },
-
- text: function text(value) {
- return access(this, function (value) {
- return value === undefined ? jQuery.text(this) : this.empty().each(function () {
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
- this.textContent = value;
- }
- });
- }, null, value, arguments.length);
- },
-
- append: function append() {
- return domManip(this, arguments, function (elem) {
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
- var target = manipulationTarget(this, elem);
- target.appendChild(elem);
- }
- });
- },
-
- prepend: function prepend() {
- return domManip(this, arguments, function (elem) {
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
- var target = manipulationTarget(this, elem);
- target.insertBefore(elem, target.firstChild);
- }
- });
- },
-
- before: function before() {
- return domManip(this, arguments, function (elem) {
- if (this.parentNode) {
- this.parentNode.insertBefore(elem, this);
- }
- });
- },
-
- after: function after() {
- return domManip(this, arguments, function (elem) {
- if (this.parentNode) {
- this.parentNode.insertBefore(elem, this.nextSibling);
- }
- });
- },
-
- empty: function empty() {
- var elem,
- i = 0;
-
- for (; (elem = this[i]) != null; i++) {
- if (elem.nodeType === 1) {
-
- // Prevent memory leaks
- jQuery.cleanData(getAll(elem, false));
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function clone(dataAndEvents, deepDataAndEvents) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function () {
- return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
- });
- },
-
- html: function html(value) {
- return access(this, function (value) {
- var elem = this[0] || {},
- i = 0,
- l = this.length;
-
- if (value === undefined && elem.nodeType === 1) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
-
- value = jQuery.htmlPrefilter(value);
-
- try {
- for (; i < l; i++) {
- elem = this[i] || {};
-
- // Remove element nodes and prevent memory leaks
- if (elem.nodeType === 1) {
- jQuery.cleanData(getAll(elem, false));
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch (e) {}
- }
-
- if (elem) {
- this.empty().append(value);
- }
- }, null, value, arguments.length);
- },
-
- replaceWith: function replaceWith() {
- var ignored = [];
-
- // Make the changes, replacing each non-ignored context element with the new content
- return domManip(this, arguments, function (elem) {
- var parent = this.parentNode;
-
- if (jQuery.inArray(this, ignored) < 0) {
- jQuery.cleanData(getAll(this));
- if (parent) {
- parent.replaceChild(elem, this);
- }
- }
-
- // Force callback invocation
- }, ignored);
- }
- });
-
- jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
- }, function (name, original) {
- jQuery.fn[name] = function (selector) {
- var elems,
- ret = [],
- insert = jQuery(selector),
- last = insert.length - 1,
- i = 0;
-
- for (; i <= last; i++) {
- elems = i === last ? this : this.clone(true);
- jQuery(insert[i])[original](elems);
-
- // Support: QtWebKit
- // .get() because push.apply(_, arraylike) throws
- push.apply(ret, elems.get());
- }
-
- return this.pushStack(ret);
- };
- });
-
- var iframe,
- elemdisplay = {
-
- // Support: Firefox
- // We have to pre-define these values for FF (#10227)
- HTML: "block",
- BODY: "block"
- };
-
- /**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-
- // Called only from within defaultDisplay
- function actualDisplay(name, doc) {
- var elem = jQuery(doc.createElement(name)).appendTo(doc.body),
- display = jQuery.css(elem[0], "display");
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
- }
-
- /**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
- function defaultDisplay(nodeName) {
- var doc = document,
- display = elemdisplay[nodeName];
-
- if (!display) {
- display = actualDisplay(nodeName, doc);
-
- // If the simple way fails, read from inside an iframe
- if (display === "none" || !display) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement);
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = iframe[0].contentDocument;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay(nodeName, doc);
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[nodeName] = display;
- }
-
- return display;
- }
- var rmargin = /^margin/;
-
- var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
-
- var getStyles = function getStyles(elem) {
-
- // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- var view = elem.ownerDocument.defaultView;
-
- if (!view || !view.opener) {
- view = window;
- }
-
- return view.getComputedStyle(elem);
- };
-
- var swap = function swap(elem, options, callback, args) {
- var ret,
- name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for (name in options) {
- old[name] = elem.style[name];
- elem.style[name] = options[name];
- }
-
- ret = callback.apply(elem, args || []);
-
- // Revert the old values
- for (name in options) {
- elem.style[name] = old[name];
- }
-
- return ret;
- };
-
- var documentElement = document.documentElement;
-
- (function () {
- var pixelPositionVal,
- boxSizingReliableVal,
- pixelMarginRightVal,
- reliableMarginLeftVal,
- container = document.createElement("div"),
- div = document.createElement("div");
-
- // Finish early in limited (non-browser) environments
- if (!div.style) {
- return;
- }
-
- // Support: IE9-11+
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode(true).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + "padding:0;margin-top:1px;position:absolute";
- container.appendChild(div);
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computeStyleTests() {
- div.style.cssText =
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + "position:relative;display:block;" + "margin:auto;border:1px;padding:1px;" + "top:1%;width:50%";
- div.innerHTML = "";
- documentElement.appendChild(container);
-
- var divStyle = window.getComputedStyle(div);
- pixelPositionVal = divStyle.top !== "1%";
- reliableMarginLeftVal = divStyle.marginLeft === "2px";
- boxSizingReliableVal = divStyle.width === "4px";
-
- // Support: Android 4.0 - 4.3 only
- // Some styles come back with percentage values, even though they shouldn't
- div.style.marginRight = "50%";
- pixelMarginRightVal = divStyle.marginRight === "4px";
-
- documentElement.removeChild(container);
- }
-
- jQuery.extend(support, {
- pixelPosition: function pixelPosition() {
-
- // This test is executed only once but we still do memoizing
- // since we can use the boxSizingReliable pre-computing.
- // No need to check if the test was already performed, though.
- computeStyleTests();
- return pixelPositionVal;
- },
- boxSizingReliable: function boxSizingReliable() {
- if (boxSizingReliableVal == null) {
- computeStyleTests();
- }
- return boxSizingReliableVal;
- },
- pixelMarginRight: function pixelMarginRight() {
-
- // Support: Android 4.0-4.3
- // We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
- // since that compresses better and they're computed together anyway.
- if (boxSizingReliableVal == null) {
- computeStyleTests();
- }
- return pixelMarginRightVal;
- },
- reliableMarginLeft: function reliableMarginLeft() {
-
- // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
- if (boxSizingReliableVal == null) {
- computeStyleTests();
- }
- return reliableMarginLeftVal;
- },
- reliableMarginRight: function reliableMarginRight() {
-
- // Support: Android 2.3
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // This support function is only executed once so no memoizing is needed.
- var ret,
- marginDiv = div.appendChild(document.createElement("div"));
-
- // Reset CSS: box-sizing; display; margin; border; padding
- marginDiv.style.cssText = div.style.cssText =
-
- // Support: Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;box-sizing:content-box;" + "display:block;margin:0;border:0;padding:0";
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
- documentElement.appendChild(container);
-
- ret = !parseFloat(window.getComputedStyle(marginDiv).marginRight);
-
- documentElement.removeChild(container);
- div.removeChild(marginDiv);
-
- return ret;
- }
- });
- })();
-
- function curCSS(elem, name, computed) {
- var width,
- minWidth,
- maxWidth,
- ret,
- style = elem.style;
-
- computed = computed || getStyles(elem);
- ret = computed ? computed.getPropertyValue(name) || computed[name] : undefined;
-
- // Support: Opera 12.1x only
- // Fall back to style even without computed
- // computed is undefined for elems on document fragments
- if ((ret === "" || ret === undefined) && !jQuery.contains(elem.ownerDocument, elem)) {
- ret = jQuery.style(elem, name);
- }
-
- // Support: IE9
- // getPropertyValue is only needed for .css('filter') (#12537)
- if (computed) {
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Android Browser returns percentage for some values,
- // but width seems to be reliably pixels.
- // This is against the CSSOM draft spec:
- // http://dev.w3.org/csswg/cssom/#resolved-values
- if (!support.pixelMarginRight() && rnumnonpx.test(ret) && rmargin.test(name)) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
-
- // Support: IE9-11+
- // IE returns zIndex value as an integer.
- ret + "" : ret;
- }
-
- function addGetHookIf(conditionFn, hookFn) {
-
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function get() {
- if (conditionFn()) {
-
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return (this.get = hookFn).apply(this, arguments);
- }
- };
- }
-
- var
-
- // Swappable if display is none or starts with table
- // except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
- cssPrefixes = ["Webkit", "O", "Moz", "ms"],
- emptyStyle = document.createElement("div").style;
-
- // Return a css property mapped to a potentially vendor prefixed property
- function vendorPropName(name) {
-
- // Shortcut for names that are not vendor prefixed
- if (name in emptyStyle) {
- return name;
- }
-
- // Check for vendor prefixed names
- var capName = name[0].toUpperCase() + name.slice(1),
- i = cssPrefixes.length;
-
- while (i--) {
- name = cssPrefixes[i] + capName;
- if (name in emptyStyle) {
- return name;
- }
- }
- }
-
- function setPositiveNumber(elem, value, subtract) {
-
- // Any relative (+/-) values have already been
- // normalized at this point
- var matches = rcssNum.exec(value);
- return matches ?
-
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
- }
-
- function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) {
- var i = extra === (isBorderBox ? "border" : "content") ?
-
- // If we already have the right measurement, avoid augmentation
- 4 :
-
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
- val = 0;
-
- for (; i < 4; i += 2) {
-
- // Both box models exclude margin, so add it if we want it
- if (extra === "margin") {
- val += jQuery.css(elem, extra + cssExpand[i], true, styles);
- }
-
- if (isBorderBox) {
-
- // border-box includes padding, so remove it if we want content
- if (extra === "content") {
- val -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
- }
-
- // At this point, extra isn't border nor margin, so remove border
- if (extra !== "margin") {
- val -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
- }
- } else {
-
- // At this point, extra isn't content, so add padding
- val += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
-
- // At this point, extra isn't content nor padding, so add border
- if (extra !== "padding") {
- val += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
- }
- }
- }
-
- return val;
- }
-
- function getWidthOrHeight(elem, name, extra) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles(elem),
- isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
-
- // Some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if (val <= 0 || val == null) {
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS(elem, name, styles);
- if (val < 0 || val == null) {
- val = elem.style[name];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if (rnumnonpx.test(val)) {
- return val;
- }
-
- // Check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && (support.boxSizingReliable() || val === elem.style[name]);
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat(val) || 0;
- }
-
- // Use the active box-sizing model to add/subtract irrelevant styles
- return val + augmentWidthOrHeight(elem, name, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles) + "px";
- }
-
- function showHide(elements, show) {
- var display,
- elem,
- hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for (; index < length; index++) {
- elem = elements[index];
- if (!elem.style) {
- continue;
- }
-
- values[index] = dataPriv.get(elem, "olddisplay");
- display = elem.style.display;
- if (show) {
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if (!values[index] && display === "none") {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if (elem.style.display === "" && isHidden(elem)) {
- values[index] = dataPriv.access(elem, "olddisplay", defaultDisplay(elem.nodeName));
- }
- } else {
- hidden = isHidden(elem);
-
- if (display !== "none" || !hidden) {
- dataPriv.set(elem, "olddisplay", hidden ? display : jQuery.css(elem, "display"));
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for (index = 0; index < length; index++) {
- elem = elements[index];
- if (!elem.style) {
- continue;
- }
- if (!show || elem.style.display === "none" || elem.style.display === "") {
- elem.style.display = show ? values[index] || "" : "none";
- }
- }
-
- return elements;
- }
-
- jQuery.extend({
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function get(elem, computed) {
- if (computed) {
-
- // We should always get a number back from opacity
- var ret = curCSS(elem, "opacity");
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- "float": "cssFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function style(elem, name, value, extra) {
-
- // Don't set styles on text and comment nodes
- if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret,
- type,
- hooks,
- origName = jQuery.camelCase(name),
- style = elem.style;
-
- name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(origName) || origName);
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
-
- // Check if we're setting a value
- if (value !== undefined) {
- type = typeof value === "undefined" ? "undefined" : _typeof(value);
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
- value = adjustCSS(elem, name, ret);
-
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if (value == null || value !== value) {
- return;
- }
-
- // If a number was passed in, add the unit (except for certain CSS properties)
- if (type === "number") {
- value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
- }
-
- // Support: IE9-11+
- // background-* props affect original clone's values
- if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
- style[name] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
-
- style[name] = value;
- }
- } else {
-
- // If a hook was provided get the non-computed value from there
- if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
-
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[name];
- }
- },
-
- css: function css(elem, name, extra, styles) {
- var val,
- num,
- hooks,
- origName = jQuery.camelCase(name);
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(origName) || origName);
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
-
- // If a hook was provided get the computed value from there
- if (hooks && "get" in hooks) {
- val = hooks.get(elem, true, extra);
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if (val === undefined) {
- val = curCSS(elem, name, styles);
- }
-
- // Convert "normal" to computed value
- if (val === "normal" && name in cssNormalTransform) {
- val = cssNormalTransform[name];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if (extra === "" || extra) {
- num = parseFloat(val);
- return extra === true || isFinite(num) ? num || 0 : val;
- }
- return val;
- }
- });
-
- jQuery.each(["height", "width"], function (i, name) {
- jQuery.cssHooks[name] = {
- get: function get(elem, computed, extra) {
- if (computed) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test(jQuery.css(elem, "display")) && elem.offsetWidth === 0 ? swap(elem, cssShow, function () {
- return getWidthOrHeight(elem, name, extra);
- }) : getWidthOrHeight(elem, name, extra);
- }
- },
-
- set: function set(elem, value, extra) {
- var matches,
- styles = extra && getStyles(elem),
- subtract = extra && augmentWidthOrHeight(elem, name, extra, jQuery.css(elem, "boxSizing", false, styles) === "border-box", styles);
-
- // Convert to pixels if value adjustment is needed
- if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
-
- elem.style[name] = value;
- value = jQuery.css(elem, name);
- }
-
- return setPositiveNumber(elem, value, subtract);
- }
- };
- });
-
- jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {
- if (computed) {
- return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function () {
- return elem.getBoundingClientRect().left;
- })) + "px";
- }
- });
-
- // Support: Android 2.3
- jQuery.cssHooks.marginRight = addGetHookIf(support.reliableMarginRight, function (elem, computed) {
- if (computed) {
- return swap(elem, { "display": "inline-block" }, curCSS, [elem, "marginRight"]);
- }
- });
-
- // These hooks are used by animate to expand properties
- jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
- }, function (prefix, suffix) {
- jQuery.cssHooks[prefix + suffix] = {
- expand: function expand(value) {
- var i = 0,
- expanded = {},
-
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [value];
-
- for (; i < 4; i++) {
- expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
- }
-
- return expanded;
- }
- };
-
- if (!rmargin.test(prefix)) {
- jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
- }
- });
-
- jQuery.fn.extend({
- css: function css(name, value) {
- return access(this, function (elem, name, value) {
- var styles,
- len,
- map = {},
- i = 0;
-
- if (jQuery.isArray(name)) {
- styles = getStyles(elem);
- len = name.length;
-
- for (; i < len; i++) {
- map[name[i]] = jQuery.css(elem, name[i], false, styles);
- }
-
- return map;
- }
-
- return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
- }, name, value, arguments.length > 1);
- },
- show: function show() {
- return showHide(this, true);
- },
- hide: function hide() {
- return showHide(this);
- },
- toggle: function toggle(state) {
- if (typeof state === "boolean") {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function () {
- if (isHidden(this)) {
- jQuery(this).show();
- } else {
- jQuery(this).hide();
- }
- });
- }
- });
-
- function Tween(elem, options, prop, end, easing) {
- return new Tween.prototype.init(elem, options, prop, end, easing);
- }
- jQuery.Tween = Tween;
-
- Tween.prototype = {
- constructor: Tween,
- init: function init(elem, options, prop, end, easing, unit) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || jQuery.easing._default;
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
- },
- cur: function cur() {
- var hooks = Tween.propHooks[this.prop];
-
- return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
- },
- run: function run(percent) {
- var eased,
- hooks = Tween.propHooks[this.prop];
-
- if (this.options.duration) {
- this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
- } else {
- this.pos = eased = percent;
- }
- this.now = (this.end - this.start) * eased + this.start;
-
- if (this.options.step) {
- this.options.step.call(this.elem, this.now, this);
- }
-
- if (hooks && hooks.set) {
- hooks.set(this);
- } else {
- Tween.propHooks._default.set(this);
- }
- return this;
- }
- };
-
- Tween.prototype.init.prototype = Tween.prototype;
-
- Tween.propHooks = {
- _default: {
- get: function get(tween) {
- var result;
-
- // Use a property on the element directly when it is not a DOM element,
- // or when there is no matching style property that exists.
- if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
- return tween.elem[tween.prop];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css(tween.elem, tween.prop, "");
-
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function set(tween) {
-
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if (jQuery.fx.step[tween.prop]) {
- jQuery.fx.step[tween.prop](tween);
- } else if (tween.elem.nodeType === 1 && (tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop])) {
- jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
- } else {
- tween.elem[tween.prop] = tween.now;
- }
- }
- }
- };
-
- // Support: IE9
- // Panic based approach to setting things on disconnected nodes
- Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function set(tween) {
- if (tween.elem.nodeType && tween.elem.parentNode) {
- tween.elem[tween.prop] = tween.now;
- }
- }
- };
-
- jQuery.easing = {
- linear: function linear(p) {
- return p;
- },
- swing: function swing(p) {
- return 0.5 - Math.cos(p * Math.PI) / 2;
- },
- _default: "swing"
- };
-
- jQuery.fx = Tween.prototype.init;
-
- // Back Compat <1.8 extension point
- jQuery.fx.step = {};
-
- var fxNow,
- timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rrun = /queueHooks$/;
-
- // Animations created synchronously will run synchronously
- function createFxNow() {
- window.setTimeout(function () {
- fxNow = undefined;
- });
- return fxNow = jQuery.now();
- }
-
- // Generate parameters to create a standard animation
- function genFx(type, includeWidth) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for (; i < 4; i += 2 - includeWidth) {
- which = cssExpand[i];
- attrs["margin" + which] = attrs["padding" + which] = type;
- }
-
- if (includeWidth) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
- }
-
- function createTween(value, prop, animation) {
- var tween,
- collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]),
- index = 0,
- length = collection.length;
- for (; index < length; index++) {
- if (tween = collection[index].call(animation, prop, value)) {
-
- // We're done with this property
- return tween;
- }
- }
- }
-
- function defaultPrefilter(elem, props, opts) {
- /* jshint validthis: true */
- var prop,
- value,
- toggle,
- tween,
- hooks,
- oldfire,
- display,
- checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden(elem),
- dataShow = dataPriv.get(elem, "fxshow");
-
- // Handle queue: false promises
- if (!opts.queue) {
- hooks = jQuery._queueHooks(elem, "fx");
- if (hooks.unqueued == null) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function () {
- if (!hooks.unqueued) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function () {
-
- // Ensure the complete handler is called before this completes
- anim.always(function () {
- hooks.unqueued--;
- if (!jQuery.queue(elem, "fx").length) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // Height/width overflow pass
- if (elem.nodeType === 1 && ("height" in props || "width" in props)) {
-
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE9-10 do not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [style.overflow, style.overflowX, style.overflowY];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css(elem, "display");
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ? dataPriv.get(elem, "olddisplay") || defaultDisplay(elem.nodeName) : display;
-
- if (checkDisplay === "inline" && jQuery.css(elem, "float") === "none") {
- style.display = "inline-block";
- }
- }
-
- if (opts.overflow) {
- style.overflow = "hidden";
- anim.always(function () {
- style.overflow = opts.overflow[0];
- style.overflowX = opts.overflow[1];
- style.overflowY = opts.overflow[2];
- });
- }
-
- // show/hide pass
- for (prop in props) {
- value = props[prop];
- if (rfxtypes.exec(value)) {
- delete props[prop];
- toggle = toggle || value === "toggle";
- if (value === (hidden ? "hide" : "show")) {
-
- // If there is dataShow left over from a stopped hide or show
- // and we are going to proceed with show, we should pretend to be hidden
- if (value === "show" && dataShow && dataShow[prop] !== undefined) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if (!jQuery.isEmptyObject(orig)) {
- if (dataShow) {
- if ("hidden" in dataShow) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = dataPriv.access(elem, "fxshow", {});
- }
-
- // Store state if its toggle - enables .stop().toggle() to "reverse"
- if (toggle) {
- dataShow.hidden = !hidden;
- }
- if (hidden) {
- jQuery(elem).show();
- } else {
- anim.done(function () {
- jQuery(elem).hide();
- });
- }
- anim.done(function () {
- var prop;
-
- dataPriv.remove(elem, "fxshow");
- for (prop in orig) {
- jQuery.style(elem, prop, orig[prop]);
- }
- });
- for (prop in orig) {
- tween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
-
- if (!(prop in dataShow)) {
- dataShow[prop] = tween.start;
- if (hidden) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ((display === "none" ? defaultDisplay(elem.nodeName) : display) === "inline") {
- style.display = display;
- }
- }
-
- function propFilter(props, specialEasing) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for (index in props) {
- name = jQuery.camelCase(index);
- easing = specialEasing[name];
- value = props[index];
- if (jQuery.isArray(value)) {
- easing = value[1];
- value = props[index] = value[0];
- }
-
- if (index !== name) {
- props[name] = value;
- delete props[index];
- }
-
- hooks = jQuery.cssHooks[name];
- if (hooks && "expand" in hooks) {
- value = hooks.expand(value);
- delete props[name];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for (index in value) {
- if (!(index in props)) {
- props[index] = value[index];
- specialEasing[index] = easing;
- }
- }
- } else {
- specialEasing[name] = easing;
- }
- }
- }
-
- function Animation(elem, properties, options) {
- var result,
- stopped,
- index = 0,
- length = Animation.prefilters.length,
- deferred = jQuery.Deferred().always(function () {
-
- // Don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function tick() {
- if (stopped) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
-
-
- // Support: Android 2.3
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for (; index < length; index++) {
- animation.tweens[index].run(percent);
- }
-
- deferred.notifyWith(elem, [animation, percent, remaining]);
-
- if (percent < 1 && length) {
- return remaining;
- } else {
- deferred.resolveWith(elem, [animation]);
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend({}, properties),
- opts: jQuery.extend(true, {
- specialEasing: {},
- easing: jQuery.easing._default
- }, options),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function createTween(prop, end) {
- var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
- animation.tweens.push(tween);
- return tween;
- },
- stop: function stop(gotoEnd) {
- var index = 0,
-
-
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if (stopped) {
- return this;
- }
- stopped = true;
- for (; index < length; index++) {
- animation.tweens[index].run(1);
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if (gotoEnd) {
- deferred.notifyWith(elem, [animation, 1, 0]);
- deferred.resolveWith(elem, [animation, gotoEnd]);
- } else {
- deferred.rejectWith(elem, [animation, gotoEnd]);
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter(props, animation.opts.specialEasing);
-
- for (; index < length; index++) {
- result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
- if (result) {
- if (jQuery.isFunction(result.stop)) {
- jQuery._queueHooks(animation.elem, animation.opts.queue).stop = jQuery.proxy(result.stop, result);
- }
- return result;
- }
- }
-
- jQuery.map(props, createTween, animation);
-
- if (jQuery.isFunction(animation.opts.start)) {
- animation.opts.start.call(elem, animation);
- }
-
- jQuery.fx.timer(jQuery.extend(tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- }));
-
- // attach callbacks from options
- return animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
- }
-
- jQuery.Animation = jQuery.extend(Animation, {
- tweeners: {
- "*": [function (prop, value) {
- var tween = this.createTween(prop, value);
- adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
- return tween;
- }]
- },
-
- tweener: function tweener(props, callback) {
- if (jQuery.isFunction(props)) {
- callback = props;
- props = ["*"];
- } else {
- props = props.match(rnotwhite);
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for (; index < length; index++) {
- prop = props[index];
- Animation.tweeners[prop] = Animation.tweeners[prop] || [];
- Animation.tweeners[prop].unshift(callback);
- }
- },
-
- prefilters: [defaultPrefilter],
-
- prefilter: function prefilter(callback, prepend) {
- if (prepend) {
- Animation.prefilters.unshift(callback);
- } else {
- Animation.prefilters.push(callback);
- }
- }
- });
-
- jQuery.speed = function (speed, easing, fn) {
- var opt = speed && (typeof speed === "undefined" ? "undefined" : _typeof(speed)) === "object" ? jQuery.extend({}, speed) : {
- complete: fn || !fn && easing || jQuery.isFunction(speed) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if (opt.queue == null || opt.queue === true) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function () {
- if (jQuery.isFunction(opt.old)) {
- opt.old.call(this);
- }
-
- if (opt.queue) {
- jQuery.dequeue(this, opt.queue);
- }
- };
-
- return opt;
- };
-
- jQuery.fn.extend({
- fadeTo: function fadeTo(speed, to, easing, callback) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter(isHidden).css("opacity", 0).show()
-
- // Animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback);
- },
- animate: function animate(prop, speed, easing, callback) {
- var empty = jQuery.isEmptyObject(prop),
- optall = jQuery.speed(speed, easing, callback),
- doAnimation = function doAnimation() {
-
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation(this, jQuery.extend({}, prop), optall);
-
- // Empty animations, or finishing resolves immediately
- if (empty || dataPriv.get(this, "finish")) {
- anim.stop(true);
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
- },
- stop: function stop(type, clearQueue, gotoEnd) {
- var stopQueue = function stopQueue(hooks) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop(gotoEnd);
- };
-
- if (typeof type !== "string") {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if (clearQueue && type !== false) {
- this.queue(type || "fx", []);
- }
-
- return this.each(function () {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = dataPriv.get(this);
-
- if (index) {
- if (data[index] && data[index].stop) {
- stopQueue(data[index]);
- }
- } else {
- for (index in data) {
- if (data[index] && data[index].stop && rrun.test(index)) {
- stopQueue(data[index]);
- }
- }
- }
-
- for (index = timers.length; index--;) {
- if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
-
- timers[index].anim.stop(gotoEnd);
- dequeue = false;
- timers.splice(index, 1);
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if (dequeue || !gotoEnd) {
- jQuery.dequeue(this, type);
- }
- });
- },
- finish: function finish(type) {
- if (type !== false) {
- type = type || "fx";
- }
- return this.each(function () {
- var index,
- data = dataPriv.get(this),
- queue = data[type + "queue"],
- hooks = data[type + "queueHooks"],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue(this, type, []);
-
- if (hooks && hooks.stop) {
- hooks.stop.call(this, true);
- }
-
- // Look for any active animations, and finish them
- for (index = timers.length; index--;) {
- if (timers[index].elem === this && timers[index].queue === type) {
- timers[index].anim.stop(true);
- timers.splice(index, 1);
- }
- }
-
- // Look for any animations in the old queue and finish them
- for (index = 0; index < length; index++) {
- if (queue[index] && queue[index].finish) {
- queue[index].finish.call(this);
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- });
- }
- });
-
- jQuery.each(["toggle", "show", "hide"], function (i, name) {
- var cssFn = jQuery.fn[name];
- jQuery.fn[name] = function (speed, easing, callback) {
- return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
- };
- });
-
- // Generate shortcuts for custom animations
- jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
- }, function (name, props) {
- jQuery.fn[name] = function (speed, easing, callback) {
- return this.animate(props, speed, easing, callback);
- };
- });
-
- jQuery.timers = [];
- jQuery.fx.tick = function () {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = jQuery.now();
-
- for (; i < timers.length; i++) {
- timer = timers[i];
-
- // Checks the timer has not already been removed
- if (!timer() && timers[i] === timer) {
- timers.splice(i--, 1);
- }
- }
-
- if (!timers.length) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
- };
-
- jQuery.fx.timer = function (timer) {
- jQuery.timers.push(timer);
- if (timer()) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
- };
-
- jQuery.fx.interval = 13;
- jQuery.fx.start = function () {
- if (!timerId) {
- timerId = window.setInterval(jQuery.fx.tick, jQuery.fx.interval);
- }
- };
-
- jQuery.fx.stop = function () {
- window.clearInterval(timerId);
-
- timerId = null;
- };
-
- jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- // Default speed
- _default: 400
- };
-
- // Based off of the plugin by Clint Helfers, with permission.
- // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
- jQuery.fn.delay = function (time, type) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue(type, function (next, hooks) {
- var timeout = window.setTimeout(next, time);
- hooks.stop = function () {
- window.clearTimeout(timeout);
- };
- });
- };
-
- (function () {
- var input = document.createElement("input"),
- select = document.createElement("select"),
- opt = select.appendChild(document.createElement("option"));
-
- input.type = "checkbox";
-
- // Support: iOS<=5.1, Android<=4.2+
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE<=11+
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: Android<=2.3
- // Options inside disabled selects are incorrectly marked as disabled
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE<=11+
- // An input loses its value after becoming a radio
- input = document.createElement("input");
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
- })();
-
- var boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
- jQuery.fn.extend({
- attr: function attr(name, value) {
- return access(this, jQuery.attr, name, value, arguments.length > 1);
- },
-
- removeAttr: function removeAttr(name) {
- return this.each(function () {
- jQuery.removeAttr(this, name);
- });
- }
- });
-
- jQuery.extend({
- attr: function attr(elem, name, value) {
- var ret,
- hooks,
- nType = elem.nodeType;
-
- // Don't get/set attributes on text, comment and attribute nodes
- if (nType === 3 || nType === 8 || nType === 2) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if (typeof elem.getAttribute === "undefined") {
- return jQuery.prop(elem, name, value);
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[name] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
- }
-
- if (value !== undefined) {
- if (value === null) {
- jQuery.removeAttr(elem, name);
- return;
- }
-
- if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
- return ret;
- }
-
- elem.setAttribute(name, value + "");
- return value;
- }
-
- if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
- return ret;
- }
-
- ret = jQuery.find.attr(elem, name);
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ? undefined : ret;
- },
-
- attrHooks: {
- type: {
- set: function set(elem, value) {
- if (!support.radioValue && value === "radio" && jQuery.nodeName(elem, "input")) {
- var val = elem.value;
- elem.setAttribute("type", value);
- if (val) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- removeAttr: function removeAttr(elem, value) {
- var name,
- propName,
- i = 0,
- attrNames = value && value.match(rnotwhite);
-
- if (attrNames && elem.nodeType === 1) {
- while (name = attrNames[i++]) {
- propName = jQuery.propFix[name] || name;
-
- // Boolean attributes get special treatment (#10870)
- if (jQuery.expr.match.bool.test(name)) {
-
- // Set corresponding property to false
- elem[propName] = false;
- }
-
- elem.removeAttribute(name);
- }
- }
- }
- });
-
- // Hooks for boolean attributes
- boolHook = {
- set: function set(elem, value, name) {
- if (value === false) {
-
- // Remove boolean attributes when set to false
- jQuery.removeAttr(elem, name);
- } else {
- elem.setAttribute(name, name);
- }
- return name;
- }
- };
- jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) {
- var getter = attrHandle[name] || jQuery.find.attr;
-
- attrHandle[name] = function (elem, name, isXML) {
- var ret, handle;
- if (!isXML) {
-
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[name];
- attrHandle[name] = ret;
- ret = getter(elem, name, isXML) != null ? name.toLowerCase() : null;
- attrHandle[name] = handle;
- }
- return ret;
- };
- });
-
- var rfocusable = /^(?:input|select|textarea|button)$/i,
- rclickable = /^(?:a|area)$/i;
-
- jQuery.fn.extend({
- prop: function prop(name, value) {
- return access(this, jQuery.prop, name, value, arguments.length > 1);
- },
-
- removeProp: function removeProp(name) {
- return this.each(function () {
- delete this[jQuery.propFix[name] || name];
- });
- }
- });
-
- jQuery.extend({
- prop: function prop(elem, name, value) {
- var ret,
- hooks,
- nType = elem.nodeType;
-
- // Don't get/set properties on text, comment and attribute nodes
- if (nType === 3 || nType === 8 || nType === 2) {
- return;
- }
-
- if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
-
- // Fix name and attach hooks
- name = jQuery.propFix[name] || name;
- hooks = jQuery.propHooks[name];
- }
-
- if (value !== undefined) {
- if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
- return ret;
- }
-
- return elem[name] = value;
- }
-
- if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
- return ret;
- }
-
- return elem[name];
- },
-
- propHooks: {
- tabIndex: {
- get: function get(elem) {
-
- // elem.tabIndex doesn't always return the
- // correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr(elem, "tabindex");
-
- return tabindex ? parseInt(tabindex, 10) : rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ? 0 : -1;
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- }
- });
-
- // Support: IE <=11 only
- // Accessing the selectedIndex property
- // forces the browser to respect setting selected
- // on the option
- // The getter ensures a default option is selected
- // when in an optgroup
- if (!support.optSelected) {
- jQuery.propHooks.selected = {
- get: function get(elem) {
- var parent = elem.parentNode;
- if (parent && parent.parentNode) {
- parent.parentNode.selectedIndex;
- }
- return null;
- },
- set: function set(elem) {
- var parent = elem.parentNode;
- if (parent) {
- parent.selectedIndex;
-
- if (parent.parentNode) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- };
- }
-
- jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
- jQuery.propFix[this.toLowerCase()] = this;
- });
-
- var rclass = /[\t\r\n\f]/g;
-
- function getClass(elem) {
- return elem.getAttribute && elem.getAttribute("class") || "";
- }
-
- jQuery.fn.extend({
- addClass: function addClass(value) {
- var classes,
- elem,
- cur,
- curValue,
- clazz,
- j,
- finalValue,
- i = 0;
-
- if (jQuery.isFunction(value)) {
- return this.each(function (j) {
- jQuery(this).addClass(value.call(this, j, getClass(this)));
- });
- }
-
- if (typeof value === "string" && value) {
- classes = value.match(rnotwhite) || [];
-
- while (elem = this[i++]) {
- curValue = getClass(elem);
- cur = elem.nodeType === 1 && (" " + curValue + " ").replace(rclass, " ");
-
- if (cur) {
- j = 0;
- while (clazz = classes[j++]) {
- if (cur.indexOf(" " + clazz + " ") < 0) {
- cur += clazz + " ";
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim(cur);
- if (curValue !== finalValue) {
- elem.setAttribute("class", finalValue);
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function removeClass(value) {
- var classes,
- elem,
- cur,
- curValue,
- clazz,
- j,
- finalValue,
- i = 0;
-
- if (jQuery.isFunction(value)) {
- return this.each(function (j) {
- jQuery(this).removeClass(value.call(this, j, getClass(this)));
- });
- }
-
- if (!arguments.length) {
- return this.attr("class", "");
- }
-
- if (typeof value === "string" && value) {
- classes = value.match(rnotwhite) || [];
-
- while (elem = this[i++]) {
- curValue = getClass(elem);
-
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && (" " + curValue + " ").replace(rclass, " ");
-
- if (cur) {
- j = 0;
- while (clazz = classes[j++]) {
-
- // Remove *all* instances
- while (cur.indexOf(" " + clazz + " ") > -1) {
- cur = cur.replace(" " + clazz + " ", " ");
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim(cur);
- if (curValue !== finalValue) {
- elem.setAttribute("class", finalValue);
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function toggleClass(value, stateVal) {
- var type = typeof value === "undefined" ? "undefined" : _typeof(value);
-
- if (typeof stateVal === "boolean" && type === "string") {
- return stateVal ? this.addClass(value) : this.removeClass(value);
- }
-
- if (jQuery.isFunction(value)) {
- return this.each(function (i) {
- jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
- });
- }
-
- return this.each(function () {
- var className, i, self, classNames;
-
- if (type === "string") {
-
- // Toggle individual class names
- i = 0;
- self = jQuery(this);
- classNames = value.match(rnotwhite) || [];
-
- while (className = classNames[i++]) {
-
- // Check each className given, space separated list
- if (self.hasClass(className)) {
- self.removeClass(className);
- } else {
- self.addClass(className);
- }
- }
-
- // Toggle whole class name
- } else if (value === undefined || type === "boolean") {
- className = getClass(this);
- if (className) {
-
- // Store className if set
- dataPriv.set(this, "__className__", className);
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- if (this.setAttribute) {
- this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
- }
- }
- });
- },
-
- hasClass: function hasClass(selector) {
- var className,
- elem,
- i = 0;
-
- className = " " + selector + " ";
- while (elem = this[i++]) {
- if (elem.nodeType === 1 && (" " + getClass(elem) + " ").replace(rclass, " ").indexOf(className) > -1) {
- return true;
- }
- }
-
- return false;
- }
- });
-
- var rreturn = /\r/g,
- rspaces = /[\x20\t\r\n\f]+/g;
-
- jQuery.fn.extend({
- val: function val(value) {
- var hooks,
- ret,
- isFunction,
- elem = this[0];
-
- if (!arguments.length) {
- if (elem) {
- hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
-
- if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
-
- // Handle most common string cases
- ret.replace(rreturn, "") :
-
- // Handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction(value);
-
- return this.each(function (i) {
- var val;
-
- if (this.nodeType !== 1) {
- return;
- }
-
- if (isFunction) {
- val = value.call(this, i, jQuery(this).val());
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if (val == null) {
- val = "";
- } else if (typeof val === "number") {
- val += "";
- } else if (jQuery.isArray(val)) {
- val = jQuery.map(val, function (value) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
-
- // If set returns undefined, fall back to normal setting
- if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
- this.value = val;
- }
- });
- }
- });
-
- jQuery.extend({
- valHooks: {
- option: {
- get: function get(elem) {
-
- var val = jQuery.find.attr(elem, "value");
- return val != null ? val :
-
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- jQuery.trim(jQuery.text(elem)).replace(rspaces, " ");
- }
- },
- select: {
- get: function get(elem) {
- var value,
- option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ? max : one ? index : 0;
-
- // Loop through all the selected options
- for (; i < max; i++) {
- option = options[i];
-
- // IE8-9 doesn't update selected after form reset (#2551)
- if ((option.selected || i === index) && (
-
- // Don't return options that are disabled or in a disabled optgroup
- support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName(option.parentNode, "optgroup"))) {
-
- // Get the specific value for the option
- value = jQuery(option).val();
-
- // We don't need an array for one selects
- if (one) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push(value);
- }
- }
-
- return values;
- },
-
- set: function set(elem, value) {
- var optionSet,
- option,
- options = elem.options,
- values = jQuery.makeArray(value),
- i = options.length;
-
- while (i--) {
- option = options[i];
- if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
- optionSet = true;
- }
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if (!optionSet) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
- });
-
- // Radios and checkboxes getter/setter
- jQuery.each(["radio", "checkbox"], function () {
- jQuery.valHooks[this] = {
- set: function set(elem, value) {
- if (jQuery.isArray(value)) {
- return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
- }
- }
- };
- if (!support.checkOn) {
- jQuery.valHooks[this].get = function (elem) {
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
- });
-
- // Return jQuery for attributes-only inclusion
-
-
- var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
-
- jQuery.extend(jQuery.event, {
-
- trigger: function trigger(event, data, elem, onlyHandlers) {
-
- var i,
- cur,
- tmp,
- bubbleType,
- ontype,
- handle,
- special,
- eventPath = [elem || document],
- type = hasOwn.call(event, "type") ? event.type : event,
- namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if (elem.nodeType === 3 || elem.nodeType === 8) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if (rfocusMorph.test(type + jQuery.event.triggered)) {
- return;
- }
-
- if (type.indexOf(".") > -1) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[jQuery.expando] ? event : new jQuery.Event(type, (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object" && event);
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if (!event.target) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ? [event] : jQuery.makeArray(data, [event]);
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[type] || {};
- if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) {
-
- bubbleType = special.delegateType || type;
- if (!rfocusMorph.test(bubbleType + type)) {
- cur = cur.parentNode;
- }
- for (; cur; cur = cur.parentNode) {
- eventPath.push(cur);
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if (tmp === (elem.ownerDocument || document)) {
- eventPath.push(tmp.defaultView || tmp.parentWindow || window);
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
-
- event.type = i > 1 ? bubbleType : special.bindType || type;
-
- // jQuery handler
- handle = (dataPriv.get(cur, "events") || {})[event.type] && dataPriv.get(cur, "handle");
- if (handle) {
- handle.apply(cur, data);
- }
-
- // Native handler
- handle = ontype && cur[ontype];
- if (handle && handle.apply && acceptData(cur)) {
- event.result = handle.apply(cur, data);
- if (event.result === false) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if (!onlyHandlers && !event.isDefaultPrevented()) {
-
- if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if (ontype && jQuery.isFunction(elem[type]) && !jQuery.isWindow(elem)) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ontype];
-
- if (tmp) {
- elem[ontype] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[type]();
- jQuery.event.triggered = undefined;
-
- if (tmp) {
- elem[ontype] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Piggyback on a donor event to simulate a different one
- // Used only for `focus(in | out)` events
- simulate: function simulate(type, elem, event) {
- var e = jQuery.extend(new jQuery.Event(), event, {
- type: type,
- isSimulated: true
- });
-
- jQuery.event.trigger(e, null, elem);
- }
-
- });
-
- jQuery.fn.extend({
-
- trigger: function trigger(type, data) {
- return this.each(function () {
- jQuery.event.trigger(type, data, this);
- });
- },
- triggerHandler: function triggerHandler(type, data) {
- var elem = this[0];
- if (elem) {
- return jQuery.event.trigger(type, data, elem, true);
- }
- }
- });
-
- jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) {
-
- // Handle event binding
- jQuery.fn[name] = function (data, fn) {
- return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
- };
- });
-
- jQuery.fn.extend({
- hover: function hover(fnOver, fnOut) {
- return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
- }
- });
-
- support.focusin = "onfocusin" in window;
-
- // Support: Firefox
- // Firefox doesn't have focus(in | out) events
- // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
- //
- // Support: Chrome, Safari
- // focus(in | out) events fire after focus & blur events,
- // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
- // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
- if (!support.focusin) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function (orig, fix) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function handler(event) {
- jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
- };
-
- jQuery.event.special[fix] = {
- setup: function setup() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access(doc, fix);
-
- if (!attaches) {
- doc.addEventListener(orig, handler, true);
- }
- dataPriv.access(doc, fix, (attaches || 0) + 1);
- },
- teardown: function teardown() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access(doc, fix) - 1;
-
- if (!attaches) {
- doc.removeEventListener(orig, handler, true);
- dataPriv.remove(doc, fix);
- } else {
- dataPriv.access(doc, fix, attaches);
- }
- }
- };
- });
- }
- var location = window.location;
-
- var nonce = jQuery.now();
-
- var rquery = /\?/;
-
- // Support: Android 2.3
- // Workaround failure to string-cast null input
- jQuery.parseJSON = function (data) {
- return JSON.parse(data + "");
- };
-
- // Cross-browser xml parsing
- jQuery.parseXML = function (data) {
- var xml;
- if (!data || typeof data !== "string") {
- return null;
- }
-
- // Support: IE9
- try {
- xml = new window.DOMParser().parseFromString(data, "text/xml");
- } catch (e) {
- xml = undefined;
- }
-
- if (!xml || xml.getElementsByTagName("parsererror").length) {
- jQuery.error("Invalid XML: " + data);
- }
- return xml;
- };
-
- var rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
-
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
-
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*"),
-
-
- // Anchor tag for parsing the document origin
- originAnchor = document.createElement("a");
- originAnchor.href = location.href;
-
- // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
- function addToPrefiltersOrTransports(structure) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function (dataTypeExpression, func) {
-
- if (typeof dataTypeExpression !== "string") {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match(rnotwhite) || [];
-
- if (jQuery.isFunction(func)) {
-
- // For each dataType in the dataTypeExpression
- while (dataType = dataTypes[i++]) {
-
- // Prepend if requested
- if (dataType[0] === "+") {
- dataType = dataType.slice(1) || "*";
- (structure[dataType] = structure[dataType] || []).unshift(func);
-
- // Otherwise append
- } else {
- (structure[dataType] = structure[dataType] || []).push(func);
- }
- }
- }
- };
- }
-
- // Base inspection function for prefilters and transports
- function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
-
- var inspected = {},
- seekingTransport = structure === transports;
-
- function inspect(dataType) {
- var selected;
- inspected[dataType] = true;
- jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
- var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
- if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
-
- options.dataTypes.unshift(dataTypeOrTransport);
- inspect(dataTypeOrTransport);
- return false;
- } else if (seekingTransport) {
- return !(selected = dataTypeOrTransport);
- }
- });
- return selected;
- }
-
- return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
- }
-
- // A special extend for ajax options
- // that takes "flat" options (not to be deep extended)
- // Fixes #9887
- function ajaxExtend(target, src) {
- var key,
- deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for (key in src) {
- if (src[key] !== undefined) {
- (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
- }
- }
- if (deep) {
- jQuery.extend(true, target, deep);
- }
-
- return target;
- }
-
- /* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
- function ajaxHandleResponses(s, jqXHR, responses) {
-
- var ct,
- type,
- finalDataType,
- firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while (dataTypes[0] === "*") {
- dataTypes.shift();
- if (ct === undefined) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if (ct) {
- for (type in contents) {
- if (contents[type] && contents[type].test(ct)) {
- dataTypes.unshift(type);
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if (dataTypes[0] in responses) {
- finalDataType = dataTypes[0];
- } else {
-
- // Try convertible dataTypes
- for (type in responses) {
- if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
- finalDataType = type;
- break;
- }
- if (!firstDataType) {
- firstDataType = type;
- }
- }
-
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if (finalDataType) {
- if (finalDataType !== dataTypes[0]) {
- dataTypes.unshift(finalDataType);
- }
- return responses[finalDataType];
- }
- }
-
- /* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
- function ajaxConvert(s, response, jqXHR, isSuccess) {
- var conv2,
- current,
- conv,
- tmp,
- prev,
- converters = {},
-
-
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if (dataTypes[1]) {
- for (conv in s.converters) {
- converters[conv.toLowerCase()] = s.converters[conv];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while (current) {
-
- if (s.responseFields[current]) {
- jqXHR[s.responseFields[current]] = response;
- }
-
- // Apply the dataFilter if provided
- if (!prev && isSuccess && s.dataFilter) {
- response = s.dataFilter(response, s.dataType);
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if (current) {
-
- // There's only work to do if current dataType is non-auto
- if (current === "*") {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if (prev !== "*" && prev !== current) {
-
- // Seek a direct converter
- conv = converters[prev + " " + current] || converters["* " + current];
-
- // If none found, seek a pair
- if (!conv) {
- for (conv2 in converters) {
-
- // If conv2 outputs current
- tmp = conv2.split(" ");
- if (tmp[1] === current) {
-
- // If prev can be converted to accepted input
- conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
- if (conv) {
-
- // Condense equivalence converters
- if (conv === true) {
- conv = converters[conv2];
-
- // Otherwise, insert the intermediate dataType
- } else if (converters[conv2] !== true) {
- current = tmp[0];
- dataTypes.unshift(tmp[1]);
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if (conv !== true) {
-
- // Unless errors are allowed to bubble, catch and return them
- if (conv && s.throws) {
- response = conv(response);
- } else {
- try {
- response = conv(response);
- } catch (e) {
- return {
- state: "parsererror",
- error: conv ? e : "No conversion from " + prev + " to " + current
- };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
- }
-
- jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: location.href,
- type: "GET",
- isLocal: rlocalProtocol.test(location.protocol),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /\bxml\b/,
- html: /\bhtml/,
- json: /\bjson\b/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function ajaxSetup(target, settings) {
- return settings ?
-
- // Building a settings object
- ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :
-
- // Extending ajaxSettings
- ajaxExtend(jQuery.ajaxSettings, target);
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
- ajaxTransport: addToPrefiltersOrTransports(transports),
-
- // Main method
- ajax: function ajax(url, options) {
-
- // If url is an object, simulate pre-1.5 signature
- if ((typeof url === "undefined" ? "undefined" : _typeof(url)) === "object") {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
-
-
- // URL without anti-cache param
- cacheURL,
-
-
- // Response headers
- responseHeadersString,
- responseHeaders,
-
-
- // timeout handle
- timeoutTimer,
-
-
- // Url cleanup var
- urlAnchor,
-
-
- // To know if global events are to be dispatched
- fireGlobals,
-
-
- // Loop variable
- i,
-
-
- // Create the final options object
- s = jQuery.ajaxSetup({}, options),
-
-
- // Callbacks context
- callbackContext = s.context || s,
-
-
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,
-
-
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
-
-
- // Status-dependent callbacks
- _statusCode = s.statusCode || {},
-
-
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
-
-
- // The jqXHR state
- state = 0,
-
-
- // Default abort message
- strAbort = "canceled",
-
-
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function getResponseHeader(key) {
- var match;
- if (state === 2) {
- if (!responseHeaders) {
- responseHeaders = {};
- while (match = rheaders.exec(responseHeadersString)) {
- responseHeaders[match[1].toLowerCase()] = match[2];
- }
- }
- match = responseHeaders[key.toLowerCase()];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function getAllResponseHeaders() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function setRequestHeader(name, value) {
- var lname = name.toLowerCase();
- if (!state) {
- name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;
- requestHeaders[name] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function overrideMimeType(type) {
- if (!state) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function statusCode(map) {
- var code;
- if (map) {
- if (state < 2) {
- for (code in map) {
-
- // Lazy-add the new callback in a way that preserves old ones
- _statusCode[code] = [_statusCode[code], map[code]];
- }
- } else {
-
- // Execute the appropriate callbacks
- jqXHR.always(map[jqXHR.status]);
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function abort(statusText) {
- var finalText = statusText || strAbort;
- if (transport) {
- transport.abort(finalText);
- }
- done(0, finalText);
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise(jqXHR).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ((url || s.url || location.href) + "").replace(rhash, "").replace(rprotocol, location.protocol + "//");
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(rnotwhite) || [""];
-
- // A cross-domain request is in order when the origin doesn't match the current origin.
- if (s.crossDomain == null) {
- urlAnchor = document.createElement("a");
-
- // Support: IE8-11+
- // IE throws exception if url is malformed, e.g. http://example.com:80x/
- try {
- urlAnchor.href = s.url;
-
- // Support: IE8-11+
- // Anchor's host property isn't correctly set when s.url is relative
- urlAnchor.href = urlAnchor.href;
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
- } catch (e) {
-
- // If there is an error parsing the URL, assume it is crossDomain,
- // it can be rejected by the transport if it is invalid
- s.crossDomain = true;
- }
- }
-
- // Convert data if not already a string
- if (s.data && s.processData && typeof s.data !== "string") {
- s.data = jQuery.param(s.data, s.traditional);
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
-
- // If request was aborted inside a prefilter, stop there
- if (state === 2) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if (fireGlobals && jQuery.active++ === 0) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test(s.type);
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if (!s.hasContent) {
-
- // If data is available, append data to url
- if (s.data) {
- cacheURL = s.url += (rquery.test(cacheURL) ? "&" : "?") + s.data;
-
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if (s.cache === false) {
- s.url = rts.test(cacheURL) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace(rts, "$1_=" + nonce++) :
-
- // Otherwise add one to the end
- cacheURL + (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if (s.ifModified) {
- if (jQuery.lastModified[cacheURL]) {
- jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
- }
- if (jQuery.etag[cacheURL]) {
- jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
- }
- }
-
- // Set the correct header, if data is being sent
- if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
- jqXHR.setRequestHeader("Content-Type", s.contentType);
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]);
-
- // Check for headers option
- for (i in s.headers) {
- jqXHR.setRequestHeader(i, s.headers[i]);
- }
-
- // Allow custom headers/mimetypes and early abort
- if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) {
-
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for (i in { success: 1, error: 1, complete: 1 }) {
- jqXHR[i](s[i]);
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
-
- // If no transport, we auto-abort
- if (!transport) {
- done(-1, "No Transport");
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if (fireGlobals) {
- globalEventContext.trigger("ajaxSend", [jqXHR, s]);
- }
-
- // If request was aborted inside ajaxSend, stop there
- if (state === 2) {
- return jqXHR;
- }
-
- // Timeout
- if (s.async && s.timeout > 0) {
- timeoutTimer = window.setTimeout(function () {
- jqXHR.abort("timeout");
- }, s.timeout);
- }
-
- try {
- state = 1;
- transport.send(requestHeaders, done);
- } catch (e) {
-
- // Propagate exception as error if not done
- if (state < 2) {
- done(-1, e);
-
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done(status, nativeStatusText, responses, headers) {
- var isSuccess,
- success,
- error,
- response,
- modified,
- statusText = nativeStatusText;
-
- // Called once
- if (state === 2) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if (timeoutTimer) {
- window.clearTimeout(timeoutTimer);
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if (responses) {
- response = ajaxHandleResponses(s, jqXHR, responses);
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert(s, response, jqXHR, isSuccess);
-
- // If successful, handle type chaining
- if (isSuccess) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if (s.ifModified) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if (modified) {
- jQuery.lastModified[cacheURL] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if (modified) {
- jQuery.etag[cacheURL] = modified;
- }
- }
-
- // if no content
- if (status === 204 || s.type === "HEAD") {
- statusText = "nocontent";
-
- // if not modified
- } else if (status === 304) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if (status || !statusText) {
- statusText = "error";
- if (status < 0) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = (nativeStatusText || statusText) + "";
-
- // Success/Error
- if (isSuccess) {
- deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
- } else {
- deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode(_statusCode);
- _statusCode = undefined;
-
- if (fireGlobals) {
- globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
- }
-
- // Complete
- completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
-
- if (fireGlobals) {
- globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
-
- // Handle the global AJAX counter
- if (! --jQuery.active) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function getJSON(url, data, callback) {
- return jQuery.get(url, data, callback, "json");
- },
-
- getScript: function getScript(url, callback) {
- return jQuery.get(url, undefined, callback, "script");
- }
- });
-
- jQuery.each(["get", "post"], function (i, method) {
- jQuery[method] = function (url, data, callback, type) {
-
- // Shift arguments if data argument was omitted
- if (jQuery.isFunction(data)) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- // The url can be an options object (which then must have .url)
- return jQuery.ajax(jQuery.extend({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- }, jQuery.isPlainObject(url) && url));
- };
- });
-
- jQuery._evalUrl = function (url) {
- return jQuery.ajax({
- url: url,
-
- // Make this explicit, since user can override this through ajaxSetup (#11264)
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
- };
-
- jQuery.fn.extend({
- wrapAll: function wrapAll(html) {
- var wrap;
-
- if (jQuery.isFunction(html)) {
- return this.each(function (i) {
- jQuery(this).wrapAll(html.call(this, i));
- });
- }
-
- if (this[0]) {
-
- // The elements to wrap the target around
- wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
-
- if (this[0].parentNode) {
- wrap.insertBefore(this[0]);
- }
-
- wrap.map(function () {
- var elem = this;
-
- while (elem.firstElementChild) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- }).append(this);
- }
-
- return this;
- },
-
- wrapInner: function wrapInner(html) {
- if (jQuery.isFunction(html)) {
- return this.each(function (i) {
- jQuery(this).wrapInner(html.call(this, i));
- });
- }
-
- return this.each(function () {
- var self = jQuery(this),
- contents = self.contents();
-
- if (contents.length) {
- contents.wrapAll(html);
- } else {
- self.append(html);
- }
- });
- },
-
- wrap: function wrap(html) {
- var isFunction = jQuery.isFunction(html);
-
- return this.each(function (i) {
- jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
- });
- },
-
- unwrap: function unwrap() {
- return this.parent().each(function () {
- if (!jQuery.nodeName(this, "body")) {
- jQuery(this).replaceWith(this.childNodes);
- }
- }).end();
- }
- });
-
- jQuery.expr.filters.hidden = function (elem) {
- return !jQuery.expr.filters.visible(elem);
- };
- jQuery.expr.filters.visible = function (elem) {
-
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- // Use OR instead of AND as the element is not visible if either is true
- // See tickets #10406 and #13132
- return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;
- };
-
- var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
- function buildParams(prefix, obj, traditional, add) {
- var name;
-
- if (jQuery.isArray(obj)) {
-
- // Serialize array item.
- jQuery.each(obj, function (i, v) {
- if (traditional || rbracket.test(prefix)) {
-
- // Treat each array item as a scalar.
- add(prefix, v);
- } else {
-
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams(prefix + "[" + ((typeof v === "undefined" ? "undefined" : _typeof(v)) === "object" && v != null ? i : "") + "]", v, traditional, add);
- }
- });
- } else if (!traditional && jQuery.type(obj) === "object") {
-
- // Serialize object item.
- for (name in obj) {
- buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
- }
- } else {
-
- // Serialize scalar item.
- add(prefix, obj);
- }
- }
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- jQuery.param = function (a, traditional) {
- var prefix,
- s = [],
- add = function add(key, value) {
-
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction(value) ? value() : value == null ? "" : value;
- s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if (traditional === undefined) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if (jQuery.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
-
- // Serialize the form elements
- jQuery.each(a, function () {
- add(this.name, this.value);
- });
- } else {
-
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for (prefix in a) {
- buildParams(prefix, a[prefix], traditional, add);
- }
- }
-
- // Return the resulting serialization
- return s.join("&").replace(r20, "+");
- };
-
- jQuery.fn.extend({
- serialize: function serialize() {
- return jQuery.param(this.serializeArray());
- },
- serializeArray: function serializeArray() {
- return this.map(function () {
-
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop(this, "elements");
- return elements ? jQuery.makeArray(elements) : this;
- }).filter(function () {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
- }).map(function (i, elem) {
- var val = jQuery(this).val();
-
- return val == null ? null : jQuery.isArray(val) ? jQuery.map(val, function (val) {
- return { name: elem.name, value: val.replace(rCRLF, "\r\n") };
- }) : { name: elem.name, value: val.replace(rCRLF, "\r\n") };
- }).get();
- }
- });
-
- jQuery.ajaxSettings.xhr = function () {
- try {
- return new window.XMLHttpRequest();
- } catch (e) {}
- };
-
- var xhrSuccessStatus = {
-
- // File protocol always yields status code 0, assume 200
- 0: 200,
-
- // Support: IE9
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
- support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
- support.ajax = xhrSupported = !!xhrSupported;
-
- jQuery.ajaxTransport(function (options) {
- var _callback, errorCallback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if (support.cors || xhrSupported && !options.crossDomain) {
- return {
- send: function send(headers, complete) {
- var i,
- xhr = options.xhr();
-
- xhr.open(options.type, options.url, options.async, options.username, options.password);
-
- // Apply custom fields if provided
- if (options.xhrFields) {
- for (i in options.xhrFields) {
- xhr[i] = options.xhrFields[i];
- }
- }
-
- // Override mime type if needed
- if (options.mimeType && xhr.overrideMimeType) {
- xhr.overrideMimeType(options.mimeType);
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if (!options.crossDomain && !headers["X-Requested-With"]) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for (i in headers) {
- xhr.setRequestHeader(i, headers[i]);
- }
-
- // Callback
- _callback = function callback(type) {
- return function () {
- if (_callback) {
- _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
-
- if (type === "abort") {
- xhr.abort();
- } else if (type === "error") {
-
- // Support: IE9
- // On a manual native abort, IE9 throws
- // errors on any property access that is not readyState
- if (typeof xhr.status !== "number") {
- complete(0, "error");
- } else {
- complete(
-
- // File: protocol always yields status 0; see #8605, #14207
- xhr.status, xhr.statusText);
- }
- } else {
- complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText,
-
- // Support: IE9 only
- // IE9 has no XHR2 but throws on binary (trac-11426)
- // For XHR2 non-text, let the caller handle it (gh-2498)
- (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? { binary: xhr.response } : { text: xhr.responseText }, xhr.getAllResponseHeaders());
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = _callback();
- errorCallback = xhr.onerror = _callback("error");
-
- // Support: IE9
- // Use onreadystatechange to replace onabort
- // to handle uncaught aborts
- if (xhr.onabort !== undefined) {
- xhr.onabort = errorCallback;
- } else {
- xhr.onreadystatechange = function () {
-
- // Check readyState before timeout as it changes
- if (xhr.readyState === 4) {
-
- // Allow onerror to be called first,
- // but that will not handle a native abort
- // Also, save errorCallback to a variable
- // as xhr.onerror cannot be accessed
- window.setTimeout(function () {
- if (_callback) {
- errorCallback();
- }
- });
- }
- };
- }
-
- // Create the abort callback
- _callback = _callback("abort");
-
- try {
-
- // Do send the request (this may raise an exception)
- xhr.send(options.hasContent && options.data || null);
- } catch (e) {
-
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if (_callback) {
- throw e;
- }
- }
- },
-
- abort: function abort() {
- if (_callback) {
- _callback();
- }
- }
- };
- }
- });
-
- // Install script dataType
- jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /\b(?:java|ecma)script\b/
- },
- converters: {
- "text script": function textScript(text) {
- jQuery.globalEval(text);
- return text;
- }
- }
- });
-
- // Handle cache's special case and crossDomain
- jQuery.ajaxPrefilter("script", function (s) {
- if (s.cache === undefined) {
- s.cache = false;
- }
- if (s.crossDomain) {
- s.type = "GET";
- }
- });
-
- // Bind script tag hack transport
- jQuery.ajaxTransport("script", function (s) {
-
- // This transport only deals with cross domain requests
- if (s.crossDomain) {
- var script, _callback2;
- return {
- send: function send(_, complete) {
- script = jQuery("<script>").prop({
- charset: s.scriptCharset,
- src: s.url
- }).on("load error", _callback2 = function callback(evt) {
- script.remove();
- _callback2 = null;
- if (evt) {
- complete(evt.type === "error" ? 404 : 200, evt.type);
- }
- });
-
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- document.head.appendChild(script[0]);
- },
- abort: function abort() {
- if (_callback2) {
- _callback2();
- }
- }
- };
- }
- });
-
- var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
- // Default jsonp settings
- jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function jsonpCallback() {
- var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce++;
- this[callback] = true;
- return callback;
- }
- });
-
- // Detect, normalize options and install callbacks for jsonp requests
- jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
-
- var callbackName,
- overwritten,
- responseContainer,
- jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data");
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if (jsonProp || s.dataTypes[0] === "jsonp") {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
-
- // Insert callback into url or form data
- if (jsonProp) {
- s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
- } else if (s.jsonp !== false) {
- s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function () {
- if (!responseContainer) {
- jQuery.error(callbackName + " was not called");
- }
- return responseContainer[0];
- };
-
- // Force json dataType
- s.dataTypes[0] = "json";
-
- // Install callback
- overwritten = window[callbackName];
- window[callbackName] = function () {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function () {
-
- // If previous value didn't exist - remove it
- if (overwritten === undefined) {
- jQuery(window).removeProp(callbackName);
-
- // Otherwise restore preexisting value
- } else {
- window[callbackName] = overwritten;
- }
-
- // Save back as free
- if (s[callbackName]) {
-
- // Make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // Save the callback name for future use
- oldCallbacks.push(callbackName);
- }
-
- // Call if it was a function and we have a response
- if (responseContainer && jQuery.isFunction(overwritten)) {
- overwritten(responseContainer[0]);
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
- });
-
- // Argument "data" should be string of html
- // context (optional): If specified, the fragment will be created in this context,
- // defaults to document
- // keepScripts (optional): If true, will include scripts passed in the html string
- jQuery.parseHTML = function (data, context, keepScripts) {
- if (!data || typeof data !== "string") {
- return null;
- }
- if (typeof context === "boolean") {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec(data),
- scripts = !keepScripts && [];
-
- // Single tag
- if (parsed) {
- return [context.createElement(parsed[1])];
- }
-
- parsed = buildFragment([data], context, scripts);
-
- if (scripts && scripts.length) {
- jQuery(scripts).remove();
- }
-
- return jQuery.merge([], parsed.childNodes);
- };
-
- // Keep a copy of the old load method
- var _load = jQuery.fn.load;
-
- /**
- * Load a url into a page
- */
- jQuery.fn.load = function (url, params, callback) {
- if (typeof url !== "string" && _load) {
- return _load.apply(this, arguments);
- }
-
- var selector,
- type,
- response,
- self = this,
- off = url.indexOf(" ");
-
- if (off > -1) {
- selector = jQuery.trim(url.slice(off));
- url = url.slice(0, off);
- }
-
- // If it's a function
- if (jQuery.isFunction(params)) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if (params && (typeof params === "undefined" ? "undefined" : _typeof(params)) === "object") {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if (self.length > 0) {
- jQuery.ajax({
- url: url,
-
- // If "type" variable is undefined, then "GET" method will be used.
- // Make value of this field explicit since
- // user can override it through ajaxSetup method
- type: type || "GET",
- dataType: "html",
- data: params
- }).done(function (responseText) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html(selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
-
- // Otherwise use the full result
- responseText);
-
- // If the request succeeds, this function gets "data", "status", "jqXHR"
- // but they are ignored because response was set above.
- // If it fails, this function gets "jqXHR", "status", "error"
- }).always(callback && function (jqXHR, status) {
- self.each(function () {
- callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
- });
- });
- }
-
- return this;
- };
-
- // Attach a bunch of functions for handling common AJAX events
- jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (i, type) {
- jQuery.fn[type] = function (fn) {
- return this.on(type, fn);
- };
- });
-
- jQuery.expr.filters.animated = function (elem) {
- return jQuery.grep(jQuery.timers, function (fn) {
- return elem === fn.elem;
- }).length;
- };
-
- /**
- * Gets a window from an element
- */
- function getWindow(elem) {
- return jQuery.isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
- }
-
- jQuery.offset = {
- setOffset: function setOffset(elem, options, i) {
- var curPosition,
- curLeft,
- curCSSTop,
- curTop,
- curOffset,
- curCSSLeft,
- calculatePosition,
- position = jQuery.css(elem, "position"),
- curElem = jQuery(elem),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if (position === "static") {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css(elem, "top");
- curCSSLeft = jQuery.css(elem, "left");
- calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
-
- // Need to be able to calculate position if either
- // top or left is auto and position is either absolute or fixed
- if (calculatePosition) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat(curCSSTop) || 0;
- curLeft = parseFloat(curCSSLeft) || 0;
- }
-
- if (jQuery.isFunction(options)) {
-
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
- options = options.call(elem, i, jQuery.extend({}, curOffset));
- }
-
- if (options.top != null) {
- props.top = options.top - curOffset.top + curTop;
- }
- if (options.left != null) {
- props.left = options.left - curOffset.left + curLeft;
- }
-
- if ("using" in options) {
- options.using.call(elem, props);
- } else {
- curElem.css(props);
- }
- }
- };
-
- jQuery.fn.extend({
- offset: function offset(options) {
- if (arguments.length) {
- return options === undefined ? this : this.each(function (i) {
- jQuery.offset.setOffset(this, options, i);
- });
- }
-
- var docElem,
- win,
- elem = this[0],
- box = { top: 0, left: 0 },
- doc = elem && elem.ownerDocument;
-
- if (!doc) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if (!jQuery.contains(docElem, elem)) {
- return box;
- }
-
- box = elem.getBoundingClientRect();
- win = getWindow(doc);
- return {
- top: box.top + win.pageYOffset - docElem.clientTop,
- left: box.left + win.pageXOffset - docElem.clientLeft
- };
- },
-
- position: function position() {
- if (!this[0]) {
- return;
- }
-
- var offsetParent,
- offset,
- elem = this[0],
- parentOffset = { top: 0, left: 0 };
-
- // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
- // because it is its only offset parent
- if (jQuery.css(elem, "position") === "fixed") {
-
- // Assume getBoundingClientRect is there when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if (!jQuery.nodeName(offsetParent[0], "html")) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true);
- parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true);
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
- left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
- };
- },
-
- // This method will return documentElement in the following cases:
- // 1) For the element inside the iframe without offsetParent, this method will return
- // documentElement of the parent window
- // 2) For the hidden or detached element
- // 3) For body or html element, i.e. in case of the html node - it will return itself
- //
- // but those exceptions were never presented as a real life use-cases
- // and might be considered as more preferable results.
- //
- // This logic, however, is not guaranteed and can change at any point in the future
- offsetParent: function offsetParent() {
- return this.map(function () {
- var offsetParent = this.offsetParent;
-
- while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || documentElement;
- });
- }
- });
-
- // Create scrollLeft and scrollTop methods
- jQuery.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (method, prop) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[method] = function (val) {
- return access(this, function (elem, method, val) {
- var win = getWindow(elem);
-
- if (val === undefined) {
- return win ? win[prop] : elem[method];
- }
-
- if (win) {
- win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
- } else {
- elem[method] = val;
- }
- }, method, val, arguments.length);
- };
- });
-
- // Support: Safari<7-8+, Chrome<37-44+
- // Add the top/left cssHooks using jQuery.fn.position
- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
- // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
- // getComputedStyle returns percent when specified for top/left/bottom/right;
- // rather than make the css module depend on the offset module, just check for it here
- jQuery.each(["top", "left"], function (i, prop) {
- jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {
- if (computed) {
- computed = curCSS(elem, prop);
-
- // If curCSS returns percentage, fallback to offset
- return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
- }
- });
- });
-
- // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
- jQuery.each({ Height: "height", Width: "width" }, function (name, type) {
- jQuery.each({ padding: "inner" + name, content: type, "": "outer" + name }, function (defaultExtra, funcName) {
-
- // Margin is only for outerHeight, outerWidth
- jQuery.fn[funcName] = function (margin, value) {
- var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"),
- extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
-
- return access(this, function (elem, type, value) {
- var doc;
-
- if (jQuery.isWindow(elem)) {
-
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement["client" + name];
- }
-
- // Get document width or height
- if (elem.nodeType === 9) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
- }
-
- return value === undefined ?
-
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css(elem, type, extra) :
-
- // Set width or height on the element
- jQuery.style(elem, type, value, extra);
- }, type, chainable ? margin : undefined, chainable, null);
- };
- });
- });
-
- jQuery.fn.extend({
-
- bind: function bind(types, data, fn) {
- return this.on(types, null, data, fn);
- },
- unbind: function unbind(types, fn) {
- return this.off(types, null, fn);
- },
-
- delegate: function delegate(selector, types, data, fn) {
- return this.on(types, selector, data, fn);
- },
- undelegate: function undelegate(selector, types, fn) {
-
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
- },
- size: function size() {
- return this.length;
- }
- });
-
- jQuery.fn.andSelf = jQuery.fn.addBack;
-
- // Register as a named AMD module, since jQuery can be concatenated with other
- // files that may use define, but not via a proper concatenation script that
- // understands anonymous AMD modules. A named AMD is safest and most robust
- // way to register. Lowercase jquery is used because AMD module names are
- // derived from file names, and jQuery is normally delivered in a lowercase
- // file name. Do this after creating the global so that if an AMD module wants
- // to call noConflict to hide this version of jQuery, it will work.
-
- // Note that for maximum portability, libraries that are not jQuery should
- // declare themselves as anonymous modules, and avoid setting a global if an
- // AMD loader is present. jQuery is a special case. For more information, see
- // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
- if (typeof define === "function" && define.amd) {
- define("jquery", [], function () {
- return jQuery;
- });
- }
-
- var
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
- jQuery.noConflict = function (deep) {
- if (window.$ === jQuery) {
- window.$ = _$;
- }
-
- if (deep && window.jQuery === jQuery) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- };
-
- // Expose jQuery and $ identifiers, even in AMD
- // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
- // and CommonJS for browser emulators (#13566)
- if (!noGlobal) {
- window.jQuery = window.$ = jQuery;
- }
-
- return jQuery;
-});
-/**
- * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).
- * @version v4.0.6
- * @link https://github.com/ten1seven/what-input
- * @license MIT
- */
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define("whatInput", [], factory);
- else if(typeof exports === 'object')
- exports["whatInput"] = factory();
- else
- root["whatInput"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports) {
-
- module.exports = (function() {
-
- /*
- ---------------
- Variables
- ---------------
- */
-
- // cache document.documentElement
- var docElem = document.documentElement;
-
- // last used input type
- var currentInput = 'initial';
-
- // last used input intent
- var currentIntent = null;
-
- // form input types
- var formInputs = [
- 'input',
- 'select',
- 'textarea'
- ];
-
- // list of modifier keys commonly used with the mouse and
- // can be safely ignored to prevent false keyboard detection
- var ignoreMap = [
- 16, // shift
- 17, // control
- 18, // alt
- 91, // Windows key / left Apple cmd
- 93 // Windows menu / right Apple cmd
- ];
-
- // mapping of events to input types
- var inputMap = {
- 'keyup': 'keyboard',
- 'mousedown': 'mouse',
- 'mousemove': 'mouse',
- 'MSPointerDown': 'pointer',
- 'MSPointerMove': 'pointer',
- 'pointerdown': 'pointer',
- 'pointermove': 'pointer',
- 'touchstart': 'touch'
- };
-
- // array of all used input types
- var inputTypes = [];
-
- // boolean: true if touch buffer timer is running
- var isBuffering = false;
-
- // map of IE 10 pointer events
- var pointerMap = {
- 2: 'touch',
- 3: 'touch', // treat pen like touch
- 4: 'mouse'
- };
-
- // touch buffer timer
- var touchTimer = null;
-
-
- /*
- ---------------
- Set up
- ---------------
- */
-
- var setUp = function() {
-
- // add correct mouse wheel event mapping to `inputMap`
- inputMap[detectWheel()] = 'mouse';
-
- addListeners();
- setInput();
- };
-
-
- /*
- ---------------
- Events
- ---------------
- */
-
- var addListeners = function() {
-
- // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding
- // can only demonstrate potential, but not actual, interaction
- // and are treated separately
-
- // pointer events (mouse, pen, touch)
- if (window.PointerEvent) {
- docElem.addEventListener('pointerdown', updateInput);
- docElem.addEventListener('pointermove', setIntent);
- } else if (window.MSPointerEvent) {
- docElem.addEventListener('MSPointerDown', updateInput);
- docElem.addEventListener('MSPointerMove', setIntent);
- } else {
-
- // mouse events
- docElem.addEventListener('mousedown', updateInput);
- docElem.addEventListener('mousemove', setIntent);
-
- // touch events
- if ('ontouchstart' in window) {
- docElem.addEventListener('touchstart', touchBuffer);
- }
- }
-
- // mouse wheel
- docElem.addEventListener(detectWheel(), setIntent);
-
- // keyboard events
- docElem.addEventListener('keydown', updateInput);
- docElem.addEventListener('keyup', updateInput);
- };
-
- // checks conditions before updating new input
- var updateInput = function(event) {
-
- // only execute if the touch buffer timer isn't running
- if (!isBuffering) {
- var eventKey = event.which;
- var value = inputMap[event.type];
- if (value === 'pointer') value = pointerType(event);
-
- if (
- currentInput !== value ||
- currentIntent !== value
- ) {
-
- var activeElem = document.activeElement;
- var activeInput = (
- activeElem &&
- activeElem.nodeName &&
- formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1
- ) ? true : false;
-
- if (
- value === 'touch' ||
-
- // ignore mouse modifier keys
- (value === 'mouse' && ignoreMap.indexOf(eventKey) === -1) ||
-
- // don't switch if the current element is a form input
- (value === 'keyboard' && activeInput)
- ) {
-
- // set the current and catch-all variable
- currentInput = currentIntent = value;
-
- setInput();
- }
- }
- }
- };
-
- // updates the doc and `inputTypes` array with new input
- var setInput = function() {
- docElem.setAttribute('data-whatinput', currentInput);
- docElem.setAttribute('data-whatintent', currentInput);
-
- if (inputTypes.indexOf(currentInput) === -1) {
- inputTypes.push(currentInput);
- docElem.className += ' whatinput-types-' + currentInput;
- }
- };
-
- // updates input intent for `mousemove` and `pointermove`
- var setIntent = function(event) {
-
- // only execute if the touch buffer timer isn't running
- if (!isBuffering) {
- var value = inputMap[event.type];
- if (value === 'pointer') value = pointerType(event);
-
- if (currentIntent !== value) {
- currentIntent = value;
-
- docElem.setAttribute('data-whatintent', currentIntent);
- }
- }
- };
-
- // buffers touch events because they frequently also fire mouse events
- var touchBuffer = function(event) {
-
- // clear the timer if it happens to be running
- window.clearTimeout(touchTimer);
-
- // set the current input
- updateInput(event);
-
- // set the isBuffering to `true`
- isBuffering = true;
-
- // run the timer
- touchTimer = window.setTimeout(function() {
-
- // if the timer runs out, set isBuffering back to `false`
- isBuffering = false;
- }, 200);
- };
-
-
- /*
- ---------------
- Utilities
- ---------------
- */
-
- var pointerType = function(event) {
- if (typeof event.pointerType === 'number') {
- return pointerMap[event.pointerType];
- } else {
- return (event.pointerType === 'pen') ? 'touch' : event.pointerType; // treat pen like touch
- }
- };
-
- // detect version of mouse wheel event to use
- // via https://developer.mozilla.org/en-US/docs/Web/Events/wheel
- var detectWheel = function() {
- return 'onwheel' in document.createElement('div') ?
- 'wheel' : // Modern browsers support "wheel"
-
- document.onmousewheel !== undefined ?
- 'mousewheel' : // Webkit and IE support at least "mousewheel"
- 'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox
- };
-
-
- /*
- ---------------
- Init
-
- don't start script unless browser cuts the mustard
- (also passes if polyfills are used)
- ---------------
- */
-
- if (
- 'addEventListener' in window &&
- Array.prototype.indexOf
- ) {
- setUp();
- }
-
-
- /*
- ---------------
- API
- ---------------
- */
-
- return {
-
- // returns string: the current input type
- // opt: 'loose'|'strict'
- // 'strict' (default): returns the same value as the `data-whatinput` attribute
- // 'loose': includes `data-whatintent` value if it's more current than `data-whatinput`
- ask: function(opt) { return (opt === 'loose') ? currentIntent : currentInput; },
-
- // returns array: all the detected input types
- types: function() { return inputTypes; }
-
- };
-
- }());
-
-
-/***/ }
-/******/ ])
-});
-;
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-!function ($) {
-
- "use strict";
-
- var FOUNDATION_VERSION = '6.3.1';
-
- // Global Foundation object
- // This is attached to the window, or used as a module for AMD/Browserify
- var Foundation = {
- version: FOUNDATION_VERSION,
-
- /**
- * Stores initialized plugins.
- */
- _plugins: {},
-
- /**
- * Stores generated unique ids for plugin instances
- */
- _uuids: [],
-
- /**
- * Returns a boolean for RTL support
- */
- rtl: function rtl() {
- return $('html').attr('dir') === 'rtl';
- },
- /**
- * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.
- * @param {Object} plugin - The constructor of the plugin.
- */
- plugin: function plugin(_plugin, name) {
- // Object key to use when adding to global Foundation object
- // Examples: Foundation.Reveal, Foundation.OffCanvas
- var className = name || functionName(_plugin);
- // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin
- // Examples: data-reveal, data-off-canvas
- var attrName = hyphenate(className);
-
- // Add to the Foundation object and the plugins list (for reflowing)
- this._plugins[attrName] = this[className] = _plugin;
- },
- /**
- * @function
- * Populates the _uuids array with pointers to each individual plugin instance.
- * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.
- * Also fires the initialization event for each plugin, consolidating repetitive code.
- * @param {Object} plugin - an instance of a plugin, usually `this` in context.
- * @param {String} name - the name of the plugin, passed as a camelCased string.
- * @fires Plugin#init
- */
- registerPlugin: function registerPlugin(plugin, name) {
- var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();
- plugin.uuid = this.GetYoDigits(6, pluginName);
-
- if (!plugin.$element.attr('data-' + pluginName)) {
- plugin.$element.attr('data-' + pluginName, plugin.uuid);
- }
- if (!plugin.$element.data('zfPlugin')) {
- plugin.$element.data('zfPlugin', plugin);
- }
- /**
- * Fires when the plugin has initialized.
- * @event Plugin#init
- */
- plugin.$element.trigger('init.zf.' + pluginName);
-
- this._uuids.push(plugin.uuid);
-
- return;
- },
- /**
- * @function
- * Removes the plugins uuid from the _uuids array.
- * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.
- * Also fires the destroyed event for the plugin, consolidating repetitive code.
- * @param {Object} plugin - an instance of a plugin, usually `this` in context.
- * @fires Plugin#destroyed
- */
- unregisterPlugin: function unregisterPlugin(plugin) {
- var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));
-
- this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);
- plugin.$element.removeAttr('data-' + pluginName).removeData('zfPlugin')
- /**
- * Fires when the plugin has been destroyed.
- * @event Plugin#destroyed
- */
- .trigger('destroyed.zf.' + pluginName);
- for (var prop in plugin) {
- plugin[prop] = null; //clean up script to prep for garbage collection.
- }
- return;
- },
-
- /**
- * @function
- * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.
- * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`
- * @default If no argument is passed, reflow all currently active plugins.
- */
- reInit: function reInit(plugins) {
- var isJQ = plugins instanceof $;
- try {
- if (isJQ) {
- plugins.each(function () {
- $(this).data('zfPlugin')._init();
- });
- } else {
- var type = typeof plugins === 'undefined' ? 'undefined' : _typeof(plugins),
- _this = this,
- fns = {
- 'object': function object(plgs) {
- plgs.forEach(function (p) {
- p = hyphenate(p);
- $('[data-' + p + ']').foundation('_init');
- });
- },
- 'string': function string() {
- plugins = hyphenate(plugins);
- $('[data-' + plugins + ']').foundation('_init');
- },
- 'undefined': function undefined() {
- this['object'](Object.keys(_this._plugins));
- }
- };
- fns[type](plugins);
- }
- } catch (err) {
- console.error(err);
- } finally {
- return plugins;
- }
- },
-
- /**
- * returns a random base-36 uid with namespacing
- * @function
- * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.
- * @param {String} namespace - name of plugin to be incorporated in uid, optional.
- * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.
- * @returns {String} - unique id
- */
- GetYoDigits: function GetYoDigits(length, namespace) {
- length = length || 6;
- return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length)).toString(36).slice(1) + (namespace ? '-' + namespace : '');
- },
- /**
- * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.
- * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.
- * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.
- */
- reflow: function reflow(elem, plugins) {
-
- // If plugins is undefined, just grab everything
- if (typeof plugins === 'undefined') {
- plugins = Object.keys(this._plugins);
- }
- // If plugins is a string, convert it to an array with one item
- else if (typeof plugins === 'string') {
- plugins = [plugins];
- }
-
- var _this = this;
-
- // Iterate through each plugin
- $.each(plugins, function (i, name) {
- // Get the current plugin
- var plugin = _this._plugins[name];
-
- // Localize the search to all elements inside elem, as well as elem itself, unless elem === document
- var $elem = $(elem).find('[data-' + name + ']').addBack('[data-' + name + ']');
-
- // For each plugin found, initialize it
- $elem.each(function () {
- var $el = $(this),
- opts = {};
- // Don't double-dip on plugins
- if ($el.data('zfPlugin')) {
- console.warn("Tried to initialize " + name + " on an element that already has a Foundation plugin.");
- return;
- }
-
- if ($el.attr('data-options')) {
- var thing = $el.attr('data-options').split(';').forEach(function (e, i) {
- var opt = e.split(':').map(function (el) {
- return el.trim();
- });
- if (opt[0]) opts[opt[0]] = parseValue(opt[1]);
- });
- }
- try {
- $el.data('zfPlugin', new plugin($(this), opts));
- } catch (er) {
- console.error(er);
- } finally {
- return;
- }
- });
- });
- },
- getFnName: functionName,
- transitionend: function transitionend($elem) {
- var transitions = {
- 'transition': 'transitionend',
- 'WebkitTransition': 'webkitTransitionEnd',
- 'MozTransition': 'transitionend',
- 'OTransition': 'otransitionend'
- };
- var elem = document.createElement('div'),
- end;
-
- for (var t in transitions) {
- if (typeof elem.style[t] !== 'undefined') {
- end = transitions[t];
- }
- }
- if (end) {
- return end;
- } else {
- end = setTimeout(function () {
- $elem.triggerHandler('transitionend', [$elem]);
- }, 1);
- return 'transitionend';
- }
- }
- };
-
- Foundation.util = {
- /**
- * Function for applying a debounce effect to a function call.
- * @function
- * @param {Function} func - Function to be called at end of timeout.
- * @param {Number} delay - Time in ms to delay the call of `func`.
- * @returns function
- */
- throttle: function throttle(func, delay) {
- var timer = null;
-
- return function () {
- var context = this,
- args = arguments;
-
- if (timer === null) {
- timer = setTimeout(function () {
- func.apply(context, args);
- timer = null;
- }, delay);
- }
- };
- }
- };
-
- // TODO: consider not making this a jQuery function
- // TODO: need way to reflow vs. re-initialize
- /**
- * The Foundation jQuery method.
- * @param {String|Array} method - An action to perform on the current jQuery object.
- */
- var foundation = function foundation(method) {
- var type = typeof method === 'undefined' ? 'undefined' : _typeof(method),
- $meta = $('meta.foundation-mq'),
- $noJS = $('.no-js');
-
- if (!$meta.length) {
- $('<meta class="foundation-mq">').appendTo(document.head);
- }
- if ($noJS.length) {
- $noJS.removeClass('no-js');
- }
-
- if (type === 'undefined') {
- //needs to initialize the Foundation object, or an individual plugin.
- Foundation.MediaQuery._init();
- Foundation.reflow(this);
- } else if (type === 'string') {
- //an individual method to invoke on a plugin or group of plugins
- var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary
- var plugClass = this.data('zfPlugin'); //determine the class of plugin
-
- if (plugClass !== undefined && plugClass[method] !== undefined) {
- //make sure both the class and method exist
- if (this.length === 1) {
- //if there's only one, call it directly.
- plugClass[method].apply(plugClass, args);
- } else {
- this.each(function (i, el) {
- //otherwise loop through the jQuery collection and invoke the method on each
- plugClass[method].apply($(el).data('zfPlugin'), args);
- });
- }
- } else {
- //error for no class or no method
- throw new ReferenceError("We're sorry, '" + method + "' is not an available method for " + (plugClass ? functionName(plugClass) : 'this element') + '.');
- }
- } else {
- //error for invalid argument type
- throw new TypeError('We\'re sorry, ' + type + ' is not a valid parameter. You must use a string representing the method you wish to invoke.');
- }
- return this;
- };
-
- window.Foundation = Foundation;
- $.fn.foundation = foundation;
-
- // Polyfill for requestAnimationFrame
- (function () {
- if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () {
- return new Date().getTime();
- };
-
- var vendors = ['webkit', 'moz'];
- for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
- var vp = vendors[i];
- window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];
- window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];
- }
- if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
- var lastTime = 0;
- window.requestAnimationFrame = function (callback) {
- var now = Date.now();
- var nextTime = Math.max(lastTime + 16, now);
- return setTimeout(function () {
- callback(lastTime = nextTime);
- }, nextTime - now);
- };
- window.cancelAnimationFrame = clearTimeout;
- }
- /**
- * Polyfill for performance.now, required by rAF
- */
- if (!window.performance || !window.performance.now) {
- window.performance = {
- start: Date.now(),
- now: function now() {
- return Date.now() - this.start;
- }
- };
- }
- })();
- if (!Function.prototype.bind) {
- Function.prototype.bind = function (oThis) {
- if (typeof this !== 'function') {
- // closest thing possible to the ECMAScript 5
- // internal IsCallable function
- throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
- }
-
- var aArgs = Array.prototype.slice.call(arguments, 1),
- fToBind = this,
- fNOP = function fNOP() {},
- fBound = function fBound() {
- return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));
- };
-
- if (this.prototype) {
- // native functions don't have a prototype
- fNOP.prototype = this.prototype;
- }
- fBound.prototype = new fNOP();
-
- return fBound;
- };
- }
- // Polyfill to get the name of a function in IE9
- function functionName(fn) {
- if (Function.prototype.name === undefined) {
- var funcNameRegex = /function\s([^(]{1,})\(/;
- var results = funcNameRegex.exec(fn.toString());
- return results && results.length > 1 ? results[1].trim() : "";
- } else if (fn.prototype === undefined) {
- return fn.constructor.name;
- } else {
- return fn.prototype.constructor.name;
- }
- }
- function parseValue(str) {
- if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str);
- return str;
- }
- // Convert PascalCase to kebab-case
- // Thank you: http://stackoverflow.com/a/8955580
- function hyphenate(str) {
- return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
- }
-}(jQuery);
-'use strict';
-
-!function ($) {
-
- Foundation.Box = {
- ImNotTouchingYou: ImNotTouchingYou,
- GetDimensions: GetDimensions,
- GetOffsets: GetOffsets
- };
-
- /**
- * Compares the dimensions of an element to a container and determines collision events with container.
- * @function
- * @param {jQuery} element - jQuery object to test for collisions.
- * @param {jQuery} parent - jQuery object to use as bounding container.
- * @param {Boolean} lrOnly - set to true to check left and right values only.
- * @param {Boolean} tbOnly - set to true to check top and bottom values only.
- * @default if no parent object passed, detects collisions with `window`.
- * @returns {Boolean} - true if collision free, false if a collision in any direction.
- */
- function ImNotTouchingYou(element, parent, lrOnly, tbOnly) {
- var eleDims = GetDimensions(element),
- top,
- bottom,
- left,
- right;
-
- if (parent) {
- var parDims = GetDimensions(parent);
-
- bottom = eleDims.offset.top + eleDims.height <= parDims.height + parDims.offset.top;
- top = eleDims.offset.top >= parDims.offset.top;
- left = eleDims.offset.left >= parDims.offset.left;
- right = eleDims.offset.left + eleDims.width <= parDims.width + parDims.offset.left;
- } else {
- bottom = eleDims.offset.top + eleDims.height <= eleDims.windowDims.height + eleDims.windowDims.offset.top;
- top = eleDims.offset.top >= eleDims.windowDims.offset.top;
- left = eleDims.offset.left >= eleDims.windowDims.offset.left;
- right = eleDims.offset.left + eleDims.width <= eleDims.windowDims.width;
- }
-
- var allDirs = [bottom, top, left, right];
-
- if (lrOnly) {
- return left === right === true;
- }
-
- if (tbOnly) {
- return top === bottom === true;
- }
-
- return allDirs.indexOf(false) === -1;
- };
-
- /**
- * Uses native methods to return an object of dimension values.
- * @function
- * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.
- * @returns {Object} - nested object of integer pixel values
- * TODO - if element is window, return only those values.
- */
- function GetDimensions(elem, test) {
- elem = elem.length ? elem[0] : elem;
-
- if (elem === window || elem === document) {
- throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");
- }
-
- var rect = elem.getBoundingClientRect(),
- parRect = elem.parentNode.getBoundingClientRect(),
- winRect = document.body.getBoundingClientRect(),
- winY = window.pageYOffset,
- winX = window.pageXOffset;
-
- return {
- width: rect.width,
- height: rect.height,
- offset: {
- top: rect.top + winY,
- left: rect.left + winX
- },
- parentDims: {
- width: parRect.width,
- height: parRect.height,
- offset: {
- top: parRect.top + winY,
- left: parRect.left + winX
- }
- },
- windowDims: {
- width: winRect.width,
- height: winRect.height,
- offset: {
- top: winY,
- left: winX
- }
- }
- };
- }
-
- /**
- * Returns an object of top and left integer pixel values for dynamically rendered elements,
- * such as: Tooltip, Reveal, and Dropdown
- * @function
- * @param {jQuery} element - jQuery object for the element being positioned.
- * @param {jQuery} anchor - jQuery object for the element's anchor point.
- * @param {String} position - a string relating to the desired position of the element, relative to it's anchor
- * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.
- * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.
- * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.
- * TODO alter/rewrite to work with `em` values as well/instead of pixels
- */
- function GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) {
- var $eleDims = GetDimensions(element),
- $anchorDims = anchor ? GetDimensions(anchor) : null;
-
- switch (position) {
- case 'top':
- return {
- left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left,
- top: $anchorDims.offset.top - ($eleDims.height + vOffset)
- };
- break;
- case 'left':
- return {
- left: $anchorDims.offset.left - ($eleDims.width + hOffset),
- top: $anchorDims.offset.top
- };
- break;
- case 'right':
- return {
- left: $anchorDims.offset.left + $anchorDims.width + hOffset,
- top: $anchorDims.offset.top
- };
- break;
- case 'center top':
- return {
- left: $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2,
- top: $anchorDims.offset.top - ($eleDims.height + vOffset)
- };
- break;
- case 'center bottom':
- return {
- left: isOverflow ? hOffset : $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2,
- top: $anchorDims.offset.top + $anchorDims.height + vOffset
- };
- break;
- case 'center left':
- return {
- left: $anchorDims.offset.left - ($eleDims.width + hOffset),
- top: $anchorDims.offset.top + $anchorDims.height / 2 - $eleDims.height / 2
- };
- break;
- case 'center right':
- return {
- left: $anchorDims.offset.left + $anchorDims.width + hOffset + 1,
- top: $anchorDims.offset.top + $anchorDims.height / 2 - $eleDims.height / 2
- };
- break;
- case 'center':
- return {
- left: $eleDims.windowDims.offset.left + $eleDims.windowDims.width / 2 - $eleDims.width / 2,
- top: $eleDims.windowDims.offset.top + $eleDims.windowDims.height / 2 - $eleDims.height / 2
- };
- break;
- case 'reveal':
- return {
- left: ($eleDims.windowDims.width - $eleDims.width) / 2,
- top: $eleDims.windowDims.offset.top + vOffset
- };
- case 'reveal full':
- return {
- left: $eleDims.windowDims.offset.left,
- top: $eleDims.windowDims.offset.top
- };
- break;
- case 'left bottom':
- return {
- left: $anchorDims.offset.left,
- top: $anchorDims.offset.top + $anchorDims.height + vOffset
- };
- break;
- case 'right bottom':
- return {
- left: $anchorDims.offset.left + $anchorDims.width + hOffset - $eleDims.width,
- top: $anchorDims.offset.top + $anchorDims.height + vOffset
- };
- break;
- default:
- return {
- left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left + hOffset,
- top: $anchorDims.offset.top + $anchorDims.height + vOffset
- };
- }
- }
-}(jQuery);
-/*******************************************
- * *
- * This util was created by Marius Olbertz *
- * Please thank Marius on GitHub /owlbertz *
- * or the web http://www.mariusolbertz.de/ *
- * *
- ******************************************/
-
-'use strict';
-
-!function ($) {
-
- var keyCodes = {
- 9: 'TAB',
- 13: 'ENTER',
- 27: 'ESCAPE',
- 32: 'SPACE',
- 37: 'ARROW_LEFT',
- 38: 'ARROW_UP',
- 39: 'ARROW_RIGHT',
- 40: 'ARROW_DOWN'
- };
-
- var commands = {};
-
- var Keyboard = {
- keys: getKeyCodes(keyCodes),
-
- /**
- * Parses the (keyboard) event and returns a String that represents its key
- * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE
- * @param {Event} event - the event generated by the event handler
- * @return String key - String that represents the key pressed
- */
- parseKey: function parseKey(event) {
- var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();
-
- // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events
- key = key.replace(/\W+/, '');
-
- if (event.shiftKey) key = 'SHIFT_' + key;
- if (event.ctrlKey) key = 'CTRL_' + key;
- if (event.altKey) key = 'ALT_' + key;
-
- // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)
- key = key.replace(/_$/, '');
-
- return key;
- },
-
-
- /**
- * Handles the given (keyboard) event
- * @param {Event} event - the event generated by the event handler
- * @param {String} component - Foundation component's name, e.g. Slider or Reveal
- * @param {Objects} functions - collection of functions that are to be executed
- */
- handleKey: function handleKey(event, component, functions) {
- var commandList = commands[component],
- keyCode = this.parseKey(event),
- cmds,
- command,
- fn;
-
- if (!commandList) return console.warn('Component not defined!');
-
- if (typeof commandList.ltr === 'undefined') {
- // this component does not differentiate between ltr and rtl
- cmds = commandList; // use plain list
- } else {
- // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa
- if (Foundation.rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);else cmds = $.extend({}, commandList.rtl, commandList.ltr);
- }
- command = cmds[keyCode];
-
- fn = functions[command];
- if (fn && typeof fn === 'function') {
- // execute function if exists
- var returnValue = fn.apply();
- if (functions.handled || typeof functions.handled === 'function') {
- // execute function when event was handled
- functions.handled(returnValue);
- }
- } else {
- if (functions.unhandled || typeof functions.unhandled === 'function') {
- // execute function when event was not handled
- functions.unhandled();
- }
- }
- },
-
-
- /**
- * Finds all focusable elements within the given `$element`
- * @param {jQuery} $element - jQuery object to search within
- * @return {jQuery} $focusable - all focusable elements within `$element`
- */
- findFocusable: function findFocusable($element) {
- if (!$element) {
- return false;
- }
- return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {
- if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) {
- return false;
- } //only have visible elements and those that have a tabindex greater or equal 0
- return true;
- });
- },
-
-
- /**
- * Returns the component name name
- * @param {Object} component - Foundation component, e.g. Slider or Reveal
- * @return String componentName
- */
-
- register: function register(componentName, cmds) {
- commands[componentName] = cmds;
- },
-
-
- /**
- * Traps the focus in the given element.
- * @param {jQuery} $element jQuery object to trap the foucs into.
- */
- trapFocus: function trapFocus($element) {
- var $focusable = Foundation.Keyboard.findFocusable($element),
- $firstFocusable = $focusable.eq(0),
- $lastFocusable = $focusable.eq(-1);
-
- $element.on('keydown.zf.trapfocus', function (event) {
- if (event.target === $lastFocusable[0] && Foundation.Keyboard.parseKey(event) === 'TAB') {
- event.preventDefault();
- $firstFocusable.focus();
- } else if (event.target === $firstFocusable[0] && Foundation.Keyboard.parseKey(event) === 'SHIFT_TAB') {
- event.preventDefault();
- $lastFocusable.focus();
- }
- });
- },
-
- /**
- * Releases the trapped focus from the given element.
- * @param {jQuery} $element jQuery object to release the focus for.
- */
- releaseFocus: function releaseFocus($element) {
- $element.off('keydown.zf.trapfocus');
- }
- };
-
- /*
- * Constants for easier comparing.
- * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE
- */
- function getKeyCodes(kcs) {
- var k = {};
- for (var kc in kcs) {
- k[kcs[kc]] = kcs[kc];
- }return k;
- }
-
- Foundation.Keyboard = Keyboard;
-}(jQuery);
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-!function ($) {
-
- // Default set of media queries
- var defaultQueries = {
- 'default': 'only screen',
- landscape: 'only screen and (orientation: landscape)',
- portrait: 'only screen and (orientation: portrait)',
- retina: 'only screen and (-webkit-min-device-pixel-ratio: 2),' + 'only screen and (min--moz-device-pixel-ratio: 2),' + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + 'only screen and (min-device-pixel-ratio: 2),' + 'only screen and (min-resolution: 192dpi),' + 'only screen and (min-resolution: 2dppx)'
- };
-
- var MediaQuery = {
- queries: [],
-
- current: '',
-
- /**
- * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.
- * @function
- * @private
- */
- _init: function _init() {
- var self = this;
- var extractedStyles = $('.foundation-mq').css('font-family');
- var namedQueries;
-
- namedQueries = parseStyleToObject(extractedStyles);
-
- for (var key in namedQueries) {
- if (namedQueries.hasOwnProperty(key)) {
- self.queries.push({
- name: key,
- value: 'only screen and (min-width: ' + namedQueries[key] + ')'
- });
- }
- }
-
- this.current = this._getCurrentSize();
-
- this._watcher();
- },
-
-
- /**
- * Checks if the screen is at least as wide as a breakpoint.
- * @function
- * @param {String} size - Name of the breakpoint to check.
- * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.
- */
- atLeast: function atLeast(size) {
- var query = this.get(size);
-
- if (query) {
- return window.matchMedia(query).matches;
- }
-
- return false;
- },
-
-
- /**
- * Checks if the screen matches to a breakpoint.
- * @function
- * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.
- * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.
- */
- is: function is(size) {
- size = size.trim().split(' ');
- if (size.length > 1 && size[1] === 'only') {
- if (size[0] === this._getCurrentSize()) return true;
- } else {
- return this.atLeast(size[0]);
- }
- return false;
- },
-
-
- /**
- * Gets the media query of a breakpoint.
- * @function
- * @param {String} size - Name of the breakpoint to get.
- * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.
- */
- get: function get(size) {
- for (var i in this.queries) {
- if (this.queries.hasOwnProperty(i)) {
- var query = this.queries[i];
- if (size === query.name) return query.value;
- }
- }
-
- return null;
- },
-
-
- /**
- * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).
- * @function
- * @private
- * @returns {String} Name of the current breakpoint.
- */
- _getCurrentSize: function _getCurrentSize() {
- var matched;
-
- for (var i = 0; i < this.queries.length; i++) {
- var query = this.queries[i];
-
- if (window.matchMedia(query.value).matches) {
- matched = query;
- }
- }
-
- if ((typeof matched === 'undefined' ? 'undefined' : _typeof(matched)) === 'object') {
- return matched.name;
- } else {
- return matched;
- }
- },
-
-
- /**
- * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.
- * @function
- * @private
- */
- _watcher: function _watcher() {
- var _this = this;
-
- $(window).on('resize.zf.mediaquery', function () {
- var newSize = _this._getCurrentSize(),
- currentSize = _this.current;
-
- if (newSize !== currentSize) {
- // Change the current media query
- _this.current = newSize;
-
- // Broadcast the media query change on the window
- $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);
- }
- });
- }
- };
-
- Foundation.MediaQuery = MediaQuery;
-
- // matchMedia() polyfill - Test a CSS media type/query in JS.
- // Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license
- window.matchMedia || (window.matchMedia = function () {
- 'use strict';
-
- // For browsers that support matchMedium api such as IE 9 and webkit
-
- var styleMedia = window.styleMedia || window.media;
-
- // For those that don't support matchMedium
- if (!styleMedia) {
- var style = document.createElement('style'),
- script = document.getElementsByTagName('script')[0],
- info = null;
-
- style.type = 'text/css';
- style.id = 'matchmediajs-test';
-
- script && script.parentNode && script.parentNode.insertBefore(style, script);
-
- // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
- info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;
-
- styleMedia = {
- matchMedium: function matchMedium(media) {
- var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
-
- // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
- if (style.styleSheet) {
- style.styleSheet.cssText = text;
- } else {
- style.textContent = text;
- }
-
- // Test if media query is true or false
- return info.width === '1px';
- }
- };
- }
-
- return function (media) {
- return {
- matches: styleMedia.matchMedium(media || 'all'),
- media: media || 'all'
- };
- };
- }());
-
- // Thank you: https://github.com/sindresorhus/query-string
- function parseStyleToObject(str) {
- var styleObject = {};
-
- if (typeof str !== 'string') {
- return styleObject;
- }
-
- str = str.trim().slice(1, -1); // browsers re-quote string style values
-
- if (!str) {
- return styleObject;
- }
-
- styleObject = str.split('&').reduce(function (ret, param) {
- var parts = param.replace(/\+/g, ' ').split('=');
- var key = parts[0];
- var val = parts[1];
- key = decodeURIComponent(key);
-
- // missing `=` should be `null`:
- // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
- val = val === undefined ? null : decodeURIComponent(val);
-
- if (!ret.hasOwnProperty(key)) {
- ret[key] = val;
- } else if (Array.isArray(ret[key])) {
- ret[key].push(val);
- } else {
- ret[key] = [ret[key], val];
- }
- return ret;
- }, {});
-
- return styleObject;
- }
-
- Foundation.MediaQuery = MediaQuery;
-}(jQuery);
-'use strict';
-
-!function ($) {
-
- /**
- * Motion module.
- * @module foundation.motion
- */
-
- var initClasses = ['mui-enter', 'mui-leave'];
- var activeClasses = ['mui-enter-active', 'mui-leave-active'];
-
- var Motion = {
- animateIn: function animateIn(element, animation, cb) {
- animate(true, element, animation, cb);
- },
-
- animateOut: function animateOut(element, animation, cb) {
- animate(false, element, animation, cb);
- }
- };
-
- function Move(duration, elem, fn) {
- var anim,
- prog,
- start = null;
- // console.log('called');
-
- if (duration === 0) {
- fn.apply(elem);
- elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);
- return;
- }
-
- function move(ts) {
- if (!start) start = ts;
- // console.log(start, ts);
- prog = ts - start;
- fn.apply(elem);
-
- if (prog < duration) {
- anim = window.requestAnimationFrame(move, elem);
- } else {
- window.cancelAnimationFrame(anim);
- elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);
- }
- }
- anim = window.requestAnimationFrame(move);
- }
-
- /**
- * Animates an element in or out using a CSS transition class.
- * @function
- * @private
- * @param {Boolean} isIn - Defines if the animation is in or out.
- * @param {Object} element - jQuery or HTML object to animate.
- * @param {String} animation - CSS class to use.
- * @param {Function} cb - Callback to run when animation is finished.
- */
- function animate(isIn, element, animation, cb) {
- element = $(element).eq(0);
-
- if (!element.length) return;
-
- var initClass = isIn ? initClasses[0] : initClasses[1];
- var activeClass = isIn ? activeClasses[0] : activeClasses[1];
-
- // Set up the animation
- reset();
-
- element.addClass(animation).css('transition', 'none');
-
- requestAnimationFrame(function () {
- element.addClass(initClass);
- if (isIn) element.show();
- });
-
- // Start the animation
- requestAnimationFrame(function () {
- element[0].offsetWidth;
- element.css('transition', '').addClass(activeClass);
- });
-
- // Clean up the animation when it finishes
- element.one(Foundation.transitionend(element), finish);
-
- // Hides the element (for out animations), resets the element, and runs a callback
- function finish() {
- if (!isIn) element.hide();
- reset();
- if (cb) cb.apply(element);
- }
-
- // Resets transitions and removes motion-specific classes
- function reset() {
- element[0].style.transitionDuration = 0;
- element.removeClass(initClass + ' ' + activeClass + ' ' + animation);
- }
- }
-
- Foundation.Move = Move;
- Foundation.Motion = Motion;
-}(jQuery);
-'use strict';
-
-!function ($) {
-
- var Nest = {
- Feather: function Feather(menu) {
- var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf';
-
- menu.attr('role', 'menubar');
-
- var items = menu.find('li').attr({ 'role': 'menuitem' }),
- subMenuClass = 'is-' + type + '-submenu',
- subItemClass = subMenuClass + '-item',
- hasSubClass = 'is-' + type + '-submenu-parent';
-
- items.each(function () {
- var $item = $(this),
- $sub = $item.children('ul');
-
- if ($sub.length) {
- $item.addClass(hasSubClass).attr({
- 'aria-haspopup': true,
- 'aria-label': $item.children('a:first').text()
- });
- // Note: Drilldowns behave differently in how they hide, and so need
- // additional attributes. We should look if this possibly over-generalized
- // utility (Nest) is appropriate when we rework menus in 6.4
- if (type === 'drilldown') {
- $item.attr({ 'aria-expanded': false });
- }
-
- $sub.addClass('submenu ' + subMenuClass).attr({
- 'data-submenu': '',
- 'role': 'menu'
- });
- if (type === 'drilldown') {
- $sub.attr({ 'aria-hidden': true });
- }
- }
-
- if ($item.parent('[data-submenu]').length) {
- $item.addClass('is-submenu-item ' + subItemClass);
- }
- });
-
- return;
- },
- Burn: function Burn(menu, type) {
- var //items = menu.find('li'),
- subMenuClass = 'is-' + type + '-submenu',
- subItemClass = subMenuClass + '-item',
- hasSubClass = 'is-' + type + '-submenu-parent';
-
- menu.find('>li, .menu, .menu > li').removeClass(subMenuClass + ' ' + subItemClass + ' ' + hasSubClass + ' is-submenu-item submenu is-active').removeAttr('data-submenu').css('display', '');
-
- // console.log( menu.find('.' + subMenuClass + ', .' + subItemClass + ', .has-submenu, .is-submenu-item, .submenu, [data-submenu]')
- // .removeClass(subMenuClass + ' ' + subItemClass + ' has-submenu is-submenu-item submenu')
- // .removeAttr('data-submenu'));
- // items.each(function(){
- // var $item = $(this),
- // $sub = $item.children('ul');
- // if($item.parent('[data-submenu]').length){
- // $item.removeClass('is-submenu-item ' + subItemClass);
- // }
- // if($sub.length){
- // $item.removeClass('has-submenu');
- // $sub.removeClass('submenu ' + subMenuClass).removeAttr('data-submenu');
- // }
- // });
- }
- };
-
- Foundation.Nest = Nest;
-}(jQuery);
-'use strict';
-
-!function ($) {
-
- function Timer(elem, options, cb) {
- var _this = this,
- duration = options.duration,
- //options is an object for easily adding features later.
- nameSpace = Object.keys(elem.data())[0] || 'timer',
- remain = -1,
- start,
- timer;
-
- this.isPaused = false;
-
- this.restart = function () {
- remain = -1;
- clearTimeout(timer);
- this.start();
- };
-
- this.start = function () {
- this.isPaused = false;
- // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
- clearTimeout(timer);
- remain = remain <= 0 ? duration : remain;
- elem.data('paused', false);
- start = Date.now();
- timer = setTimeout(function () {
- if (options.infinite) {
- _this.restart(); //rerun the timer.
- }
- if (cb && typeof cb === 'function') {
- cb();
- }
- }, remain);
- elem.trigger('timerstart.zf.' + nameSpace);
- };
-
- this.pause = function () {
- this.isPaused = true;
- //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.
- clearTimeout(timer);
- elem.data('paused', true);
- var end = Date.now();
- remain = remain - (end - start);
- elem.trigger('timerpaused.zf.' + nameSpace);
- };
- }
-
- /**
- * Runs a callback function when images are fully loaded.
- * @param {Object} images - Image(s) to check if loaded.
- * @param {Func} callback - Function to execute when image is fully loaded.
- */
- function onImagesLoaded(images, callback) {
- var self = this,
- unloaded = images.length;
-
- if (unloaded === 0) {
- callback();
- }
-
- images.each(function () {
- // Check if image is loaded
- if (this.complete || this.readyState === 4 || this.readyState === 'complete') {
- singleImageLoaded();
- }
- // Force load the image
- else {
- // fix for IE. See https://css-tricks.com/snippets/jquery/fixing-load-in-ie-for-cached-images/
- var src = $(this).attr('src');
- $(this).attr('src', src + (src.indexOf('?') >= 0 ? '&' : '?') + new Date().getTime());
- $(this).one('load', function () {
- singleImageLoaded();
- });
- }
- });
-
- function singleImageLoaded() {
- unloaded--;
- if (unloaded === 0) {
- callback();
- }
- }
- }
-
- Foundation.Timer = Timer;
- Foundation.onImagesLoaded = onImagesLoaded;
-}(jQuery);
-'use strict';
-
-//**************************************************
-//**Work inspired by multiple jquery swipe plugins**
-//**Done by Yohai Ararat ***************************
-//**************************************************
-(function ($) {
-
- $.spotSwipe = {
- version: '1.0.0',
- enabled: 'ontouchstart' in document.documentElement,
- preventDefault: false,
- moveThreshold: 75,
- timeThreshold: 200
- };
-
- var startPosX,
- startPosY,
- startTime,
- elapsedTime,
- isMoving = false;
-
- function onTouchEnd() {
- // alert(this);
- this.removeEventListener('touchmove', onTouchMove);
- this.removeEventListener('touchend', onTouchEnd);
- isMoving = false;
- }
-
- function onTouchMove(e) {
- if ($.spotSwipe.preventDefault) {
- e.preventDefault();
- }
- if (isMoving) {
- var x = e.touches[0].pageX;
- var y = e.touches[0].pageY;
- var dx = startPosX - x;
- var dy = startPosY - y;
- var dir;
- elapsedTime = new Date().getTime() - startTime;
- if (Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {
- dir = dx > 0 ? 'left' : 'right';
- }
- // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {
- // dir = dy > 0 ? 'down' : 'up';
- // }
- if (dir) {
- e.preventDefault();
- onTouchEnd.call(this);
- $(this).trigger('swipe', dir).trigger('swipe' + dir);
- }
- }
- }
-
- function onTouchStart(e) {
- if (e.touches.length == 1) {
- startPosX = e.touches[0].pageX;
- startPosY = e.touches[0].pageY;
- isMoving = true;
- startTime = new Date().getTime();
- this.addEventListener('touchmove', onTouchMove, false);
- this.addEventListener('touchend', onTouchEnd, false);
- }
- }
-
- function init() {
- this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);
- }
-
- function teardown() {
- this.removeEventListener('touchstart', onTouchStart);
- }
-
- $.event.special.swipe = { setup: init };
-
- $.each(['left', 'up', 'down', 'right'], function () {
- $.event.special['swipe' + this] = { setup: function setup() {
- $(this).on('swipe', $.noop);
- } };
- });
-})(jQuery);
-/****************************************************
- * Method for adding psuedo drag events to elements *
- ***************************************************/
-!function ($) {
- $.fn.addTouch = function () {
- this.each(function (i, el) {
- $(el).bind('touchstart touchmove touchend touchcancel', function () {
- //we pass the original event object because the jQuery event
- //object is normalized to w3c specs and does not provide the TouchList
- handleTouch(event);
- });
- });
-
- var handleTouch = function handleTouch(event) {
- var touches = event.changedTouches,
- first = touches[0],
- eventTypes = {
- touchstart: 'mousedown',
- touchmove: 'mousemove',
- touchend: 'mouseup'
- },
- type = eventTypes[event.type],
- simulatedEvent;
-
- if ('MouseEvent' in window && typeof window.MouseEvent === 'function') {
- simulatedEvent = new window.MouseEvent(type, {
- 'bubbles': true,
- 'cancelable': true,
- 'screenX': first.screenX,
- 'screenY': first.screenY,
- 'clientX': first.clientX,
- 'clientY': first.clientY
- });
- } else {
- simulatedEvent = document.createEvent('MouseEvent');
- simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0 /*left*/, null);
- }
- first.target.dispatchEvent(simulatedEvent);
- };
- };
-}(jQuery);
-
-//**********************************
-//**From the jQuery Mobile Library**
-//**need to recreate functionality**
-//**and try to improve if possible**
-//**********************************
-
-/* Removing the jQuery function ****
-************************************
-
-(function( $, window, undefined ) {
-
- var $document = $( document ),
- // supportTouch = $.mobile.support.touch,
- touchStartEvent = 'touchstart'//supportTouch ? "touchstart" : "mousedown",
- touchStopEvent = 'touchend'//supportTouch ? "touchend" : "mouseup",
- touchMoveEvent = 'touchmove'//supportTouch ? "touchmove" : "mousemove";
-
- // setup new event shortcuts
- $.each( ( "touchstart touchmove touchend " +
- "swipe swipeleft swiperight" ).split( " " ), function( i, name ) {
-
- $.fn[ name ] = function( fn ) {
- return fn ? this.bind( name, fn ) : this.trigger( name );
- };
-
- // jQuery < 1.8
- if ( $.attrFn ) {
- $.attrFn[ name ] = true;
- }
- });
-
- function triggerCustomEvent( obj, eventType, event, bubble ) {
- var originalType = event.type;
- event.type = eventType;
- if ( bubble ) {
- $.event.trigger( event, undefined, obj );
- } else {
- $.event.dispatch.call( obj, event );
- }
- event.type = originalType;
- }
-
- // also handles taphold
-
- // Also handles swipeleft, swiperight
- $.event.special.swipe = {
-
- // More than this horizontal displacement, and we will suppress scrolling.
- scrollSupressionThreshold: 30,
-
- // More time than this, and it isn't a swipe.
- durationThreshold: 1000,
-
- // Swipe horizontal displacement must be more than this.
- horizontalDistanceThreshold: window.devicePixelRatio >= 2 ? 15 : 30,
-
- // Swipe vertical displacement must be less than this.
- verticalDistanceThreshold: window.devicePixelRatio >= 2 ? 15 : 30,
-
- getLocation: function ( event ) {
- var winPageX = window.pageXOffset,
- winPageY = window.pageYOffset,
- x = event.clientX,
- y = event.clientY;
-
- if ( event.pageY === 0 && Math.floor( y ) > Math.floor( event.pageY ) ||
- event.pageX === 0 && Math.floor( x ) > Math.floor( event.pageX ) ) {
-
- // iOS4 clientX/clientY have the value that should have been
- // in pageX/pageY. While pageX/page/ have the value 0
- x = x - winPageX;
- y = y - winPageY;
- } else if ( y < ( event.pageY - winPageY) || x < ( event.pageX - winPageX ) ) {
-
- // Some Android browsers have totally bogus values for clientX/Y
- // when scrolling/zooming a page. Detectable since clientX/clientY
- // should never be smaller than pageX/pageY minus page scroll
- x = event.pageX - winPageX;
- y = event.pageY - winPageY;
- }
-
- return {
- x: x,
- y: y
- };
- },
-
- start: function( event ) {
- var data = event.originalEvent.touches ?
- event.originalEvent.touches[ 0 ] : event,
- location = $.event.special.swipe.getLocation( data );
- return {
- time: ( new Date() ).getTime(),
- coords: [ location.x, location.y ],
- origin: $( event.target )
- };
- },
-
- stop: function( event ) {
- var data = event.originalEvent.touches ?
- event.originalEvent.touches[ 0 ] : event,
- location = $.event.special.swipe.getLocation( data );
- return {
- time: ( new Date() ).getTime(),
- coords: [ location.x, location.y ]
- };
- },
-
- handleSwipe: function( start, stop, thisObject, origTarget ) {
- if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
- Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
- Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
- var direction = start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight";
-
- triggerCustomEvent( thisObject, "swipe", $.Event( "swipe", { target: origTarget, swipestart: start, swipestop: stop }), true );
- triggerCustomEvent( thisObject, direction,$.Event( direction, { target: origTarget, swipestart: start, swipestop: stop } ), true );
- return true;
- }
- return false;
-
- },
-
- // This serves as a flag to ensure that at most one swipe event event is
- // in work at any given time
- eventInProgress: false,
-
- setup: function() {
- var events,
- thisObject = this,
- $this = $( thisObject ),
- context = {};
-
- // Retrieve the events data for this element and add the swipe context
- events = $.data( this, "mobile-events" );
- if ( !events ) {
- events = { length: 0 };
- $.data( this, "mobile-events", events );
- }
- events.length++;
- events.swipe = context;
-
- context.start = function( event ) {
-
- // Bail if we're already working on a swipe event
- if ( $.event.special.swipe.eventInProgress ) {
- return;
- }
- $.event.special.swipe.eventInProgress = true;
-
- var stop,
- start = $.event.special.swipe.start( event ),
- origTarget = event.target,
- emitted = false;
-
- context.move = function( event ) {
- if ( !start || event.isDefaultPrevented() ) {
- return;
- }
-
- stop = $.event.special.swipe.stop( event );
- if ( !emitted ) {
- emitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget );
- if ( emitted ) {
-
- // Reset the context to make way for the next swipe event
- $.event.special.swipe.eventInProgress = false;
- }
- }
- // prevent scrolling
- if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
- event.preventDefault();
- }
- };
-
- context.stop = function() {
- emitted = true;
-
- // Reset the context to make way for the next swipe event
- $.event.special.swipe.eventInProgress = false;
- $document.off( touchMoveEvent, context.move );
- context.move = null;
- };
-
- $document.on( touchMoveEvent, context.move )
- .one( touchStopEvent, context.stop );
- };
- $this.on( touchStartEvent, context.start );
- },
-
- teardown: function() {
- var events, context;
-
- events = $.data( this, "mobile-events" );
- if ( events ) {
- context = events.swipe;
- delete events.swipe;
- events.length--;
- if ( events.length === 0 ) {
- $.removeData( this, "mobile-events" );
- }
- }
-
- if ( context ) {
- if ( context.start ) {
- $( this ).off( touchStartEvent, context.start );
- }
- if ( context.move ) {
- $document.off( touchMoveEvent, context.move );
- }
- if ( context.stop ) {
- $document.off( touchStopEvent, context.stop );
- }
- }
- }
- };
- $.each({
- swipeleft: "swipe.left",
- swiperight: "swipe.right"
- }, function( event, sourceEvent ) {
-
- $.event.special[ event ] = {
- setup: function() {
- $( this ).bind( sourceEvent, $.noop );
- },
- teardown: function() {
- $( this ).unbind( sourceEvent );
- }
- };
- });
-})( jQuery, this );
-*/
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-!function ($) {
-
- var MutationObserver = function () {
- var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];
- for (var i = 0; i < prefixes.length; i++) {
- if (prefixes[i] + 'MutationObserver' in window) {
- return window[prefixes[i] + 'MutationObserver'];
- }
- }
- return false;
- }();
-
- var triggers = function triggers(el, type) {
- el.data(type).split(' ').forEach(function (id) {
- $('#' + id)[type === 'close' ? 'trigger' : 'triggerHandler'](type + '.zf.trigger', [el]);
- });
- };
- // Elements with [data-open] will reveal a plugin that supports it when clicked.
- $(document).on('click.zf.trigger', '[data-open]', function () {
- triggers($(this), 'open');
- });
-
- // Elements with [data-close] will close a plugin that supports it when clicked.
- // If used without a value on [data-close], the event will bubble, allowing it to close a parent component.
- $(document).on('click.zf.trigger', '[data-close]', function () {
- var id = $(this).data('close');
- if (id) {
- triggers($(this), 'close');
- } else {
- $(this).trigger('close.zf.trigger');
- }
- });
-
- // Elements with [data-toggle] will toggle a plugin that supports it when clicked.
- $(document).on('click.zf.trigger', '[data-toggle]', function () {
- var id = $(this).data('toggle');
- if (id) {
- triggers($(this), 'toggle');
- } else {
- $(this).trigger('toggle.zf.trigger');
- }
- });
-
- // Elements with [data-closable] will respond to close.zf.trigger events.
- $(document).on('close.zf.trigger', '[data-closable]', function (e) {
- e.stopPropagation();
- var animation = $(this).data('closable');
-
- if (animation !== '') {
- Foundation.Motion.animateOut($(this), animation, function () {
- $(this).trigger('closed.zf');
- });
- } else {
- $(this).fadeOut().trigger('closed.zf');
- }
- });
-
- $(document).on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', function () {
- var id = $(this).data('toggle-focus');
- $('#' + id).triggerHandler('toggle.zf.trigger', [$(this)]);
- });
-
- /**
- * Fires once after all other scripts have loaded
- * @function
- * @private
- */
- $(window).on('load', function () {
- checkListeners();
- });
-
- function checkListeners() {
- eventsListener();
- resizeListener();
- scrollListener();
- closemeListener();
- }
-
- //******** only fires this function once on load, if there's something to watch ********
- function closemeListener(pluginName) {
- var yetiBoxes = $('[data-yeti-box]'),
- plugNames = ['dropdown', 'tooltip', 'reveal'];
-
- if (pluginName) {
- if (typeof pluginName === 'string') {
- plugNames.push(pluginName);
- } else if ((typeof pluginName === 'undefined' ? 'undefined' : _typeof(pluginName)) === 'object' && typeof pluginName[0] === 'string') {
- plugNames.concat(pluginName);
- } else {
- console.error('Plugin names must be strings');
- }
- }
- if (yetiBoxes.length) {
- var listeners = plugNames.map(function (name) {
- return 'closeme.zf.' + name;
- }).join(' ');
-
- $(window).off(listeners).on(listeners, function (e, pluginId) {
- var plugin = e.namespace.split('.')[0];
- var plugins = $('[data-' + plugin + ']').not('[data-yeti-box="' + pluginId + '"]');
-
- plugins.each(function () {
- var _this = $(this);
-
- _this.triggerHandler('close.zf.trigger', [_this]);
- });
- });
- }
- }
-
- function resizeListener(debounce) {
- var timer = void 0,
- $nodes = $('[data-resize]');
- if ($nodes.length) {
- $(window).off('resize.zf.trigger').on('resize.zf.trigger', function (e) {
- if (timer) {
- clearTimeout(timer);
- }
-
- timer = setTimeout(function () {
-
- if (!MutationObserver) {
- //fallback for IE 9
- $nodes.each(function () {
- $(this).triggerHandler('resizeme.zf.trigger');
- });
- }
- //trigger all listening elements and signal a resize event
- $nodes.attr('data-events', "resize");
- }, debounce || 10); //default time to emit resize event
- });
- }
- }
-
- function scrollListener(debounce) {
- var timer = void 0,
- $nodes = $('[data-scroll]');
- if ($nodes.length) {
- $(window).off('scroll.zf.trigger').on('scroll.zf.trigger', function (e) {
- if (timer) {
- clearTimeout(timer);
- }
-
- timer = setTimeout(function () {
-
- if (!MutationObserver) {
- //fallback for IE 9
- $nodes.each(function () {
- $(this).triggerHandler('scrollme.zf.trigger');
- });
- }
- //trigger all listening elements and signal a scroll event
- $nodes.attr('data-events', "scroll");
- }, debounce || 10); //default time to emit scroll event
- });
- }
- }
-
- function eventsListener() {
- if (!MutationObserver) {
- return false;
- }
- var nodes = document.querySelectorAll('[data-resize], [data-scroll], [data-mutate]');
-
- //element callback
- var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) {
- var $target = $(mutationRecordsList[0].target);
-
- //trigger the event handler for the element depending on type
- switch (mutationRecordsList[0].type) {
-
- case "attributes":
- if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
- $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
- }
- if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
- $target.triggerHandler('resizeme.zf.trigger', [$target]);
- }
- if (mutationRecordsList[0].attributeName === "style") {
- $target.closest("[data-mutate]").attr("data-events", "mutate");
- $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
- }
- break;
-
- case "childList":
- $target.closest("[data-mutate]").attr("data-events", "mutate");
- $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
- break;
-
- default:
- return false;
- //nothing
- }
- };
-
- if (nodes.length) {
- //for each element that needs to listen for resizing, scrolling, or mutation add a single observer
- for (var i = 0; i <= nodes.length - 1; i++) {
- var elementObserver = new MutationObserver(listeningElementsMutation);
- elementObserver.observe(nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] });
- }
- }
- }
-
- // ------------------------------------
-
- // [PH]
- // Foundation.CheckWatchers = checkWatchers;
- Foundation.IHearYou = checkListeners;
- // Foundation.ISeeYou = scrollListener;
- // Foundation.IFeelYou = closemeListener;
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Abide module.
- * @module foundation.abide
- */
-
- var Abide = function () {
- /**
- * Creates a new instance of Abide.
- * @class
- * @fires Abide#init
- * @param {Object} element - jQuery object to add the trigger to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Abide(element) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
- _classCallCheck(this, Abide);
-
- this.$element = element;
- this.options = $.extend({}, Abide.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Abide');
- }
-
- /**
- * Initializes the Abide plugin and calls functions to get Abide functioning on load.
- * @private
- */
-
-
- _createClass(Abide, [{
- key: '_init',
- value: function _init() {
- this.$inputs = this.$element.find('input, textarea, select');
-
- this._events();
- }
-
- /**
- * Initializes events for Abide.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this2 = this;
-
- this.$element.off('.abide').on('reset.zf.abide', function () {
- _this2.resetForm();
- }).on('submit.zf.abide', function () {
- return _this2.validateForm();
- });
-
- if (this.options.validateOn === 'fieldChange') {
- this.$inputs.off('change.zf.abide').on('change.zf.abide', function (e) {
- _this2.validateInput($(e.target));
- });
- }
-
- if (this.options.liveValidate) {
- this.$inputs.off('input.zf.abide').on('input.zf.abide', function (e) {
- _this2.validateInput($(e.target));
- });
- }
-
- if (this.options.validateOnBlur) {
- this.$inputs.off('blur.zf.abide').on('blur.zf.abide', function (e) {
- _this2.validateInput($(e.target));
- });
- }
- }
-
- /**
- * Calls necessary functions to update Abide upon DOM change
- * @private
- */
-
- }, {
- key: '_reflow',
- value: function _reflow() {
- this._init();
- }
-
- /**
- * Checks whether or not a form element has the required attribute and if it's checked or not
- * @param {Object} element - jQuery object to check for required attribute
- * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty
- */
-
- }, {
- key: 'requiredCheck',
- value: function requiredCheck($el) {
- if (!$el.attr('required')) return true;
-
- var isGood = true;
-
- switch ($el[0].type) {
- case 'checkbox':
- isGood = $el[0].checked;
- break;
-
- case 'select':
- case 'select-one':
- case 'select-multiple':
- var opt = $el.find('option:selected');
- if (!opt.length || !opt.val()) isGood = false;
- break;
-
- default:
- if (!$el.val() || !$el.val().length) isGood = false;
- }
-
- return isGood;
- }
-
- /**
- * Get:
- * - Based on $el, the first element(s) corresponding to `formErrorSelector` in this order:
- * 1. The element's direct sibling('s).
- * 2. The element's parent's children.
- * - Element(s) with the attribute `[data-form-error-for]` set with the element's id.
- *
- * This allows for multiple form errors per input, though if none are found, no form errors will be shown.
- *
- * @param {Object} $el - jQuery object to use as reference to find the form error selector.
- * @returns {Object} jQuery object with the selector.
- */
-
- }, {
- key: 'findFormError',
- value: function findFormError($el) {
- var id = $el[0].id;
- var $error = $el.siblings(this.options.formErrorSelector);
-
- if (!$error.length) {
- $error = $el.parent().find(this.options.formErrorSelector);
- }
-
- $error = $error.add(this.$element.find('[data-form-error-for="' + id + '"]'));
-
- return $error;
- }
-
- /**
- * Get the first element in this order:
- * 2. The <label> with the attribute `[for="someInputId"]`
- * 3. The `.closest()` <label>
- *
- * @param {Object} $el - jQuery object to check for required attribute
- * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty
- */
-
- }, {
- key: 'findLabel',
- value: function findLabel($el) {
- var id = $el[0].id;
- var $label = this.$element.find('label[for="' + id + '"]');
-
- if (!$label.length) {
- return $el.closest('label');
- }
-
- return $label;
- }
-
- /**
- * Get the set of labels associated with a set of radio els in this order
- * 2. The <label> with the attribute `[for="someInputId"]`
- * 3. The `.closest()` <label>
- *
- * @param {Object} $el - jQuery object to check for required attribute
- * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty
- */
-
- }, {
- key: 'findRadioLabels',
- value: function findRadioLabels($els) {
- var _this3 = this;
-
- var labels = $els.map(function (i, el) {
- var id = el.id;
- var $label = _this3.$element.find('label[for="' + id + '"]');
-
- if (!$label.length) {
- $label = $(el).closest('label');
- }
- return $label[0];
- });
-
- return $(labels);
- }
-
- /**
- * Adds the CSS error class as specified by the Abide settings to the label, input, and the form
- * @param {Object} $el - jQuery object to add the class to
- */
-
- }, {
- key: 'addErrorClasses',
- value: function addErrorClasses($el) {
- var $label = this.findLabel($el);
- var $formError = this.findFormError($el);
-
- if ($label.length) {
- $label.addClass(this.options.labelErrorClass);
- }
-
- if ($formError.length) {
- $formError.addClass(this.options.formErrorClass);
- }
-
- $el.addClass(this.options.inputErrorClass).attr('data-invalid', '');
- }
-
- /**
- * Remove CSS error classes etc from an entire radio button group
- * @param {String} groupName - A string that specifies the name of a radio button group
- *
- */
-
- }, {
- key: 'removeRadioErrorClasses',
- value: function removeRadioErrorClasses(groupName) {
- var $els = this.$element.find(':radio[name="' + groupName + '"]');
- var $labels = this.findRadioLabels($els);
- var $formErrors = this.findFormError($els);
-
- if ($labels.length) {
- $labels.removeClass(this.options.labelErrorClass);
- }
-
- if ($formErrors.length) {
- $formErrors.removeClass(this.options.formErrorClass);
- }
-
- $els.removeClass(this.options.inputErrorClass).removeAttr('data-invalid');
- }
-
- /**
- * Removes CSS error class as specified by the Abide settings from the label, input, and the form
- * @param {Object} $el - jQuery object to remove the class from
- */
-
- }, {
- key: 'removeErrorClasses',
- value: function removeErrorClasses($el) {
- // radios need to clear all of the els
- if ($el[0].type == 'radio') {
- return this.removeRadioErrorClasses($el.attr('name'));
- }
-
- var $label = this.findLabel($el);
- var $formError = this.findFormError($el);
-
- if ($label.length) {
- $label.removeClass(this.options.labelErrorClass);
- }
-
- if ($formError.length) {
- $formError.removeClass(this.options.formErrorClass);
- }
-
- $el.removeClass(this.options.inputErrorClass).removeAttr('data-invalid');
- }
-
- /**
- * Goes through a form to find inputs and proceeds to validate them in ways specific to their type.
- * Ignores inputs with data-abide-ignore, type="hidden" or disabled attributes set
- * @fires Abide#invalid
- * @fires Abide#valid
- * @param {Object} element - jQuery object to validate, should be an HTML input
- * @returns {Boolean} goodToGo - If the input is valid or not.
- */
-
- }, {
- key: 'validateInput',
- value: function validateInput($el) {
- var clearRequire = this.requiredCheck($el),
- validated = false,
- customValidator = true,
- validator = $el.attr('data-validator'),
- equalTo = true;
-
- // don't validate ignored inputs or hidden inputs or disabled inputs
- if ($el.is('[data-abide-ignore]') || $el.is('[type="hidden"]') || $el.is('[disabled]')) {
- return true;
- }
-
- switch ($el[0].type) {
- case 'radio':
- validated = this.validateRadio($el.attr('name'));
- break;
-
- case 'checkbox':
- validated = clearRequire;
- break;
-
- case 'select':
- case 'select-one':
- case 'select-multiple':
- validated = clearRequire;
- break;
-
- default:
- validated = this.validateText($el);
- }
-
- if (validator) {
- customValidator = this.matchValidation($el, validator, $el.attr('required'));
- }
-
- if ($el.attr('data-equalto')) {
- equalTo = this.options.validators.equalTo($el);
- }
-
- var goodToGo = [clearRequire, validated, customValidator, equalTo].indexOf(false) === -1;
- var message = (goodToGo ? 'valid' : 'invalid') + '.zf.abide';
-
- if (goodToGo) {
- // Re-validate inputs that depend on this one with equalto
- var dependentElements = this.$element.find('[data-equalto="' + $el.attr('id') + '"]');
- if (dependentElements.length) {
- var _this = this;
- dependentElements.each(function () {
- if ($(this).val()) {
- _this.validateInput($(this));
- }
- });
- }
- }
-
- this[goodToGo ? 'removeErrorClasses' : 'addErrorClasses']($el);
-
- /**
- * Fires when the input is done checking for validation. Event trigger is either `valid.zf.abide` or `invalid.zf.abide`
- * Trigger includes the DOM element of the input.
- * @event Abide#valid
- * @event Abide#invalid
- */
- $el.trigger(message, [$el]);
-
- return goodToGo;
- }
-
- /**
- * Goes through a form and if there are any invalid inputs, it will display the form error element
- * @returns {Boolean} noError - true if no errors were detected...
- * @fires Abide#formvalid
- * @fires Abide#forminvalid
- */
-
- }, {
- key: 'validateForm',
- value: function validateForm() {
- var acc = [];
- var _this = this;
-
- this.$inputs.each(function () {
- acc.push(_this.validateInput($(this)));
- });
-
- var noError = acc.indexOf(false) === -1;
-
- this.$element.find('[data-abide-error]').css('display', noError ? 'none' : 'block');
-
- /**
- * Fires when the form is finished validating. Event trigger is either `formvalid.zf.abide` or `forminvalid.zf.abide`.
- * Trigger includes the element of the form.
- * @event Abide#formvalid
- * @event Abide#forminvalid
- */
- this.$element.trigger((noError ? 'formvalid' : 'forminvalid') + '.zf.abide', [this.$element]);
-
- return noError;
- }
-
- /**
- * Determines whether or a not a text input is valid based on the pattern specified in the attribute. If no matching pattern is found, returns true.
- * @param {Object} $el - jQuery object to validate, should be a text input HTML element
- * @param {String} pattern - string value of one of the RegEx patterns in Abide.options.patterns
- * @returns {Boolean} Boolean value depends on whether or not the input value matches the pattern specified
- */
-
- }, {
- key: 'validateText',
- value: function validateText($el, pattern) {
- // A pattern can be passed to this function, or it will be infered from the input's "pattern" attribute, or it's "type" attribute
- pattern = pattern || $el.attr('pattern') || $el.attr('type');
- var inputText = $el.val();
- var valid = false;
-
- if (inputText.length) {
- // If the pattern attribute on the element is in Abide's list of patterns, then test that regexp
- if (this.options.patterns.hasOwnProperty(pattern)) {
- valid = this.options.patterns[pattern].test(inputText);
- }
- // If the pattern name isn't also the type attribute of the field, then test it as a regexp
- else if (pattern !== $el.attr('type')) {
- valid = new RegExp(pattern).test(inputText);
- } else {
- valid = true;
- }
- }
- // An empty field is valid if it's not required
- else if (!$el.prop('required')) {
- valid = true;
- }
-
- return valid;
- }
-
- /**
- * Determines whether or a not a radio input is valid based on whether or not it is required and selected. Although the function targets a single `<input>`, it validates by checking the `required` and `checked` properties of all radio buttons in its group.
- * @param {String} groupName - A string that specifies the name of a radio button group
- * @returns {Boolean} Boolean value depends on whether or not at least one radio input has been selected (if it's required)
- */
-
- }, {
- key: 'validateRadio',
- value: function validateRadio(groupName) {
- // If at least one radio in the group has the `required` attribute, the group is considered required
- // Per W3C spec, all radio buttons in a group should have `required`, but we're being nice
- var $group = this.$element.find(':radio[name="' + groupName + '"]');
- var valid = false,
- required = false;
-
- // For the group to be required, at least one radio needs to be required
- $group.each(function (i, e) {
- if ($(e).attr('required')) {
- required = true;
- }
- });
- if (!required) valid = true;
-
- if (!valid) {
- // For the group to be valid, at least one radio needs to be checked
- $group.each(function (i, e) {
- if ($(e).prop('checked')) {
- valid = true;
- }
- });
- };
-
- return valid;
- }
-
- /**
- * Determines if a selected input passes a custom validation function. Multiple validations can be used, if passed to the element with `data-validator="foo bar baz"` in a space separated listed.
- * @param {Object} $el - jQuery input element.
- * @param {String} validators - a string of function names matching functions in the Abide.options.validators object.
- * @param {Boolean} required - self explanatory?
- * @returns {Boolean} - true if validations passed.
- */
-
- }, {
- key: 'matchValidation',
- value: function matchValidation($el, validators, required) {
- var _this4 = this;
-
- required = required ? true : false;
-
- var clear = validators.split(' ').map(function (v) {
- return _this4.options.validators[v]($el, required, $el.parent());
- });
- return clear.indexOf(false) === -1;
- }
-
- /**
- * Resets form inputs and styles
- * @fires Abide#formreset
- */
-
- }, {
- key: 'resetForm',
- value: function resetForm() {
- var $form = this.$element,
- opts = this.options;
-
- $('.' + opts.labelErrorClass, $form).not('small').removeClass(opts.labelErrorClass);
- $('.' + opts.inputErrorClass, $form).not('small').removeClass(opts.inputErrorClass);
- $(opts.formErrorSelector + '.' + opts.formErrorClass).removeClass(opts.formErrorClass);
- $form.find('[data-abide-error]').css('display', 'none');
- $(':input', $form).not(':button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]').val('').removeAttr('data-invalid');
- $(':input:radio', $form).not('[data-abide-ignore]').prop('checked', false).removeAttr('data-invalid');
- $(':input:checkbox', $form).not('[data-abide-ignore]').prop('checked', false).removeAttr('data-invalid');
- /**
- * Fires when the form has been reset.
- * @event Abide#formreset
- */
- $form.trigger('formreset.zf.abide', [$form]);
- }
-
- /**
- * Destroys an instance of Abide.
- * Removes error styles and classes from elements, without resetting their values.
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- var _this = this;
- this.$element.off('.abide').find('[data-abide-error]').css('display', 'none');
-
- this.$inputs.off('.abide').each(function () {
- _this.removeErrorClasses($(this));
- });
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Abide;
- }();
-
- /**
- * Default settings for plugin
- */
-
-
- Abide.defaults = {
- /**
- * The default event to validate inputs. Checkboxes and radios validate immediately.
- * Remove or change this value for manual validation.
- * @option
- * @type {?string}
- * @default 'fieldChange'
- */
- validateOn: 'fieldChange',
-
- /**
- * Class to be applied to input labels on failed validation.
- * @option
- * @type {string}
- * @default 'is-invalid-label'
- */
- labelErrorClass: 'is-invalid-label',
-
- /**
- * Class to be applied to inputs on failed validation.
- * @option
- * @type {string}
- * @default 'is-invalid-input'
- */
- inputErrorClass: 'is-invalid-input',
-
- /**
- * Class selector to use to target Form Errors for show/hide.
- * @option
- * @type {string}
- * @default '.form-error'
- */
- formErrorSelector: '.form-error',
-
- /**
- * Class added to Form Errors on failed validation.
- * @option
- * @type {string}
- * @default 'is-visible'
- */
- formErrorClass: 'is-visible',
-
- /**
- * Set to true to validate text inputs on any value change.
- * @option
- * @type {boolean}
- * @default false
- */
- liveValidate: false,
-
- /**
- * Set to true to validate inputs on blur.
- * @option
- * @type {boolean}
- * @default false
- */
- validateOnBlur: false,
-
- patterns: {
- alpha: /^[a-zA-Z]+$/,
- alpha_numeric: /^[a-zA-Z0-9]+$/,
- integer: /^[-+]?\d+$/,
- number: /^[-+]?\d*(?:[\.\,]\d+)?$/,
-
- // amex, visa, diners
- card: /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,
- cvv: /^([0-9]){3,4}$/,
-
- // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
- email: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,
-
- url: /^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/,
- // abc.de
- domain: /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,
-
- datetime: /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,
- // YYYY-MM-DD
- date: /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,
- // HH:MM:SS
- time: /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,
- dateISO: /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,
- // MM/DD/YYYY
- month_day_year: /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,
- // DD/MM/YYYY
- day_month_year: /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,
-
- // #FFF or #FFFFFF
- color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
- },
-
- /**
- * Optional validation functions to be used. `equalTo` being the only default included function.
- * Functions should return only a boolean if the input is valid or not. Functions are given the following arguments:
- * el : The jQuery element to validate.
- * required : Boolean value of the required attribute be present or not.
- * parent : The direct parent of the input.
- * @option
- */
- validators: {
- equalTo: function equalTo(el, required, parent) {
- return $('#' + el.attr('data-equalto')).val() === el.val();
- }
- }
- };
-
- // Window exports
- Foundation.plugin(Abide, 'Abide');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Accordion module.
- * @module foundation.accordion
- * @requires foundation.util.keyboard
- * @requires foundation.util.motion
- */
-
- var Accordion = function () {
- /**
- * Creates a new instance of an accordion.
- * @class
- * @fires Accordion#init
- * @param {jQuery} element - jQuery object to make into an accordion.
- * @param {Object} options - a plain object with settings to override the default options.
- */
- function Accordion(element, options) {
- _classCallCheck(this, Accordion);
-
- this.$element = element;
- this.options = $.extend({}, Accordion.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Accordion');
- Foundation.Keyboard.register('Accordion', {
- 'ENTER': 'toggle',
- 'SPACE': 'toggle',
- 'ARROW_DOWN': 'next',
- 'ARROW_UP': 'previous'
- });
- }
-
- /**
- * Initializes the accordion by animating the preset active pane(s).
- * @private
- */
-
-
- _createClass(Accordion, [{
- key: '_init',
- value: function _init() {
- var _this2 = this;
-
- this.$element.attr('role', 'tablist');
- this.$tabs = this.$element.children('[data-accordion-item]');
-
- this.$tabs.each(function (idx, el) {
- var $el = $(el),
- $content = $el.children('[data-tab-content]'),
- id = $content[0].id || Foundation.GetYoDigits(6, 'accordion'),
- linkId = el.id || id + '-label';
-
- $el.find('a:first').attr({
- 'aria-controls': id,
- 'role': 'tab',
- 'id': linkId,
- 'aria-expanded': false,
- 'aria-selected': false
- });
-
- $content.attr({ 'role': 'tabpanel', 'aria-labelledby': linkId, 'aria-hidden': true, 'id': id });
- });
- var $initActive = this.$element.find('.is-active').children('[data-tab-content]');
- this.firstTimeInit = true;
- if ($initActive.length) {
- this.down($initActive, this.firstTimeInit);
- this.firstTimeInit = false;
- }
-
- this._checkDeepLink = function () {
- var anchor = window.location.hash;
- //need a hash and a relevant anchor in this tabset
- if (anchor.length) {
- var $link = _this2.$element.find('[href$="' + anchor + '"]'),
- $anchor = $(anchor);
-
- if ($link.length && $anchor) {
- if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {
- _this2.down($anchor, _this2.firstTimeInit);
- _this2.firstTimeInit = false;
- };
-
- //roll up a little to show the titles
- if (_this2.options.deepLinkSmudge) {
- var _this = _this2;
- $(window).load(function () {
- var offset = _this.$element.offset();
- $('html, body').animate({ scrollTop: offset.top }, _this.options.deepLinkSmudgeDelay);
- });
- }
-
- /**
- * Fires when the zplugin has deeplinked at pageload
- * @event Accordion#deeplink
- */
- _this2.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);
- }
- }
- };
-
- //use browser to open a tab, if it exists in this tabset
- if (this.options.deepLink) {
- this._checkDeepLink();
- }
-
- this._events();
- }
-
- /**
- * Adds event handlers for items within the accordion.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- this.$tabs.each(function () {
- var $elem = $(this);
- var $tabContent = $elem.children('[data-tab-content]');
- if ($tabContent.length) {
- $elem.children('a').off('click.zf.accordion keydown.zf.accordion').on('click.zf.accordion', function (e) {
- e.preventDefault();
- _this.toggle($tabContent);
- }).on('keydown.zf.accordion', function (e) {
- Foundation.Keyboard.handleKey(e, 'Accordion', {
- toggle: function toggle() {
- _this.toggle($tabContent);
- },
- next: function next() {
- var $a = $elem.next().find('a').focus();
- if (!_this.options.multiExpand) {
- $a.trigger('click.zf.accordion');
- }
- },
- previous: function previous() {
- var $a = $elem.prev().find('a').focus();
- if (!_this.options.multiExpand) {
- $a.trigger('click.zf.accordion');
- }
- },
- handled: function handled() {
- e.preventDefault();
- e.stopPropagation();
- }
- });
- });
- }
- });
- if (this.options.deepLink) {
- $(window).on('popstate', this._checkDeepLink);
- }
- }
-
- /**
- * Toggles the selected content pane's open/close state.
- * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).
- * @function
- */
-
- }, {
- key: 'toggle',
- value: function toggle($target) {
- if ($target.parent().hasClass('is-active')) {
- this.up($target);
- } else {
- this.down($target);
- }
- //either replace or update browser history
- if (this.options.deepLink) {
- var anchor = $target.prev('a').attr('href');
-
- if (this.options.updateHistory) {
- history.pushState({}, '', anchor);
- } else {
- history.replaceState({}, '', anchor);
- }
- }
- }
-
- /**
- * Opens the accordion tab defined by `$target`.
- * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).
- * @param {Boolean} firstTime - flag to determine if reflow should happen.
- * @fires Accordion#down
- * @function
- */
-
- }, {
- key: 'down',
- value: function down($target, firstTime) {
- var _this3 = this;
-
- $target.attr('aria-hidden', false).parent('[data-tab-content]').addBack().parent().addClass('is-active');
-
- if (!this.options.multiExpand && !firstTime) {
- var $currentActive = this.$element.children('.is-active').children('[data-tab-content]');
- if ($currentActive.length) {
- this.up($currentActive.not($target));
- }
- }
-
- $target.slideDown(this.options.slideSpeed, function () {
- /**
- * Fires when the tab is done opening.
- * @event Accordion#down
- */
- _this3.$element.trigger('down.zf.accordion', [$target]);
- });
-
- $('#' + $target.attr('aria-labelledby')).attr({
- 'aria-expanded': true,
- 'aria-selected': true
- });
- }
-
- /**
- * Closes the tab defined by `$target`.
- * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).
- * @fires Accordion#up
- * @function
- */
-
- }, {
- key: 'up',
- value: function up($target) {
- var $aunts = $target.parent().siblings(),
- _this = this;
-
- if (!this.options.allowAllClosed && !$aunts.hasClass('is-active') || !$target.parent().hasClass('is-active')) {
- return;
- }
-
- // Foundation.Move(this.options.slideSpeed, $target, function(){
- $target.slideUp(_this.options.slideSpeed, function () {
- /**
- * Fires when the tab is done collapsing up.
- * @event Accordion#up
- */
- _this.$element.trigger('up.zf.accordion', [$target]);
- });
- // });
-
- $target.attr('aria-hidden', true).parent().removeClass('is-active');
-
- $('#' + $target.attr('aria-labelledby')).attr({
- 'aria-expanded': false,
- 'aria-selected': false
- });
- }
-
- /**
- * Destroys an instance of an accordion.
- * @fires Accordion#destroyed
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');
- this.$element.find('a').off('.zf.accordion');
- if (this.options.deepLink) {
- $(window).off('popstate', this._checkDeepLink);
- }
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Accordion;
- }();
-
- Accordion.defaults = {
- /**
- * Amount of time to animate the opening of an accordion pane.
- * @option
- * @type {number}
- * @default 250
- */
- slideSpeed: 250,
- /**
- * Allow the accordion to have multiple open panes.
- * @option
- * @type {boolean}
- * @default false
- */
- multiExpand: false,
- /**
- * Allow the accordion to close all panes.
- * @option
- * @type {boolean}
- * @default false
- */
- allowAllClosed: false,
- /**
- * Allows the window to scroll to content of pane specified by hash anchor
- * @option
- * @type {boolean}
- * @default false
- */
- deepLink: false,
-
- /**
- * Adjust the deep link scroll to make sure the top of the accordion panel is visible
- * @option
- * @type {boolean}
- * @default false
- */
- deepLinkSmudge: false,
-
- /**
- * Animation time (ms) for the deep link adjustment
- * @option
- * @type {number}
- * @default 300
- */
- deepLinkSmudgeDelay: 300,
-
- /**
- * Update the browser history with the open accordion
- * @option
- * @type {boolean}
- * @default false
- */
- updateHistory: false
- };
-
- // Window exports
- Foundation.plugin(Accordion, 'Accordion');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * AccordionMenu module.
- * @module foundation.accordionMenu
- * @requires foundation.util.keyboard
- * @requires foundation.util.motion
- * @requires foundation.util.nest
- */
-
- var AccordionMenu = function () {
- /**
- * Creates a new instance of an accordion menu.
- * @class
- * @fires AccordionMenu#init
- * @param {jQuery} element - jQuery object to make into an accordion menu.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function AccordionMenu(element, options) {
- _classCallCheck(this, AccordionMenu);
-
- this.$element = element;
- this.options = $.extend({}, AccordionMenu.defaults, this.$element.data(), options);
-
- Foundation.Nest.Feather(this.$element, 'accordion');
-
- this._init();
-
- Foundation.registerPlugin(this, 'AccordionMenu');
- Foundation.Keyboard.register('AccordionMenu', {
- 'ENTER': 'toggle',
- 'SPACE': 'toggle',
- 'ARROW_RIGHT': 'open',
- 'ARROW_UP': 'up',
- 'ARROW_DOWN': 'down',
- 'ARROW_LEFT': 'close',
- 'ESCAPE': 'closeAll'
- });
- }
-
- /**
- * Initializes the accordion menu by hiding all nested menus.
- * @private
- */
-
-
- _createClass(AccordionMenu, [{
- key: '_init',
- value: function _init() {
- this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem');
- this.$element.attr({
- 'role': 'menu',
- 'aria-multiselectable': this.options.multiOpen
- });
-
- this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');
- this.$menuLinks.each(function () {
- var linkId = this.id || Foundation.GetYoDigits(6, 'acc-menu-link'),
- $elem = $(this),
- $sub = $elem.children('[data-submenu]'),
- subId = $sub[0].id || Foundation.GetYoDigits(6, 'acc-menu'),
- isActive = $sub.hasClass('is-active');
- $elem.attr({
- 'aria-controls': subId,
- 'aria-expanded': isActive,
- 'role': 'menuitem',
- 'id': linkId
- });
- $sub.attr({
- 'aria-labelledby': linkId,
- 'aria-hidden': !isActive,
- 'role': 'menu',
- 'id': subId
- });
- });
- var initPanes = this.$element.find('.is-active');
- if (initPanes.length) {
- var _this = this;
- initPanes.each(function () {
- _this.down($(this));
- });
- }
- this._events();
- }
-
- /**
- * Adds event handlers for items within the menu.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- this.$element.find('li').each(function () {
- var $submenu = $(this).children('[data-submenu]');
-
- if ($submenu.length) {
- $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {
- e.preventDefault();
-
- _this.toggle($submenu);
- });
- }
- }).on('keydown.zf.accordionmenu', function (e) {
- var $element = $(this),
- $elements = $element.parent('ul').children('li'),
- $prevElement,
- $nextElement,
- $target = $element.children('[data-submenu]');
-
- $elements.each(function (i) {
- if ($(this).is($element)) {
- $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first();
- $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first();
-
- if ($(this).children('[data-submenu]:visible').length) {
- // has open sub menu
- $nextElement = $element.find('li:first-child').find('a').first();
- }
- if ($(this).is(':first-child')) {
- // is first element of sub menu
- $prevElement = $element.parents('li').first().find('a').first();
- } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) {
- // if previous element has open sub menu
- $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();
- }
- if ($(this).is(':last-child')) {
- // is last element of sub menu
- $nextElement = $element.parents('li').first().next('li').find('a').first();
- }
-
- return;
- }
- });
-
- Foundation.Keyboard.handleKey(e, 'AccordionMenu', {
- open: function open() {
- if ($target.is(':hidden')) {
- _this.down($target);
- $target.find('li').first().find('a').first().focus();
- }
- },
- close: function close() {
- if ($target.length && !$target.is(':hidden')) {
- // close active sub of this item
- _this.up($target);
- } else if ($element.parent('[data-submenu]').length) {
- // close currently open sub
- _this.up($element.parent('[data-submenu]'));
- $element.parents('li').first().find('a').first().focus();
- }
- },
- up: function up() {
- $prevElement.focus();
- return true;
- },
- down: function down() {
- $nextElement.focus();
- return true;
- },
- toggle: function toggle() {
- if ($element.children('[data-submenu]').length) {
- _this.toggle($element.children('[data-submenu]'));
- }
- },
- closeAll: function closeAll() {
- _this.hideAll();
- },
- handled: function handled(preventDefault) {
- if (preventDefault) {
- e.preventDefault();
- }
- e.stopImmediatePropagation();
- }
- });
- }); //.attr('tabindex', 0);
- }
-
- /**
- * Closes all panes of the menu.
- * @function
- */
-
- }, {
- key: 'hideAll',
- value: function hideAll() {
- this.up(this.$element.find('[data-submenu]'));
- }
-
- /**
- * Opens all panes of the menu.
- * @function
- */
-
- }, {
- key: 'showAll',
- value: function showAll() {
- this.down(this.$element.find('[data-submenu]'));
- }
-
- /**
- * Toggles the open/close state of a submenu.
- * @function
- * @param {jQuery} $target - the submenu to toggle
- */
-
- }, {
- key: 'toggle',
- value: function toggle($target) {
- if (!$target.is(':animated')) {
- if (!$target.is(':hidden')) {
- this.up($target);
- } else {
- this.down($target);
- }
- }
- }
-
- /**
- * Opens the sub-menu defined by `$target`.
- * @param {jQuery} $target - Sub-menu to open.
- * @fires AccordionMenu#down
- */
-
- }, {
- key: 'down',
- value: function down($target) {
- var _this = this;
-
- if (!this.options.multiOpen) {
- this.up(this.$element.find('.is-active').not($target.parentsUntil(this.$element).add($target)));
- }
-
- $target.addClass('is-active').attr({ 'aria-hidden': false }).parent('.is-accordion-submenu-parent').attr({ 'aria-expanded': true });
-
- //Foundation.Move(this.options.slideSpeed, $target, function() {
- $target.slideDown(_this.options.slideSpeed, function () {
- /**
- * Fires when the menu is done opening.
- * @event AccordionMenu#down
- */
- _this.$element.trigger('down.zf.accordionMenu', [$target]);
- });
- //});
- }
-
- /**
- * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.
- * @param {jQuery} $target - Sub-menu to close.
- * @fires AccordionMenu#up
- */
-
- }, {
- key: 'up',
- value: function up($target) {
- var _this = this;
- //Foundation.Move(this.options.slideSpeed, $target, function(){
- $target.slideUp(_this.options.slideSpeed, function () {
- /**
- * Fires when the menu is done collapsing up.
- * @event AccordionMenu#up
- */
- _this.$element.trigger('up.zf.accordionMenu', [$target]);
- });
- //});
-
- var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true);
-
- $menus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);
- }
-
- /**
- * Destroys an instance of accordion menu.
- * @fires AccordionMenu#destroyed
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.find('[data-submenu]').slideDown(0).css('display', '');
- this.$element.find('a').off('click.zf.accordionMenu');
-
- Foundation.Nest.Burn(this.$element, 'accordion');
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return AccordionMenu;
- }();
-
- AccordionMenu.defaults = {
- /**
- * Amount of time to animate the opening of a submenu in ms.
- * @option
- * @type {number}
- * @default 250
- */
- slideSpeed: 250,
- /**
- * Allow the menu to have multiple open panes.
- * @option
- * @type {boolean}
- * @default true
- */
- multiOpen: true
- };
-
- // Window exports
- Foundation.plugin(AccordionMenu, 'AccordionMenu');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Drilldown module.
- * @module foundation.drilldown
- * @requires foundation.util.keyboard
- * @requires foundation.util.motion
- * @requires foundation.util.nest
- */
-
- var Drilldown = function () {
- /**
- * Creates a new instance of a drilldown menu.
- * @class
- * @param {jQuery} element - jQuery object to make into an accordion menu.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Drilldown(element, options) {
- _classCallCheck(this, Drilldown);
-
- this.$element = element;
- this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options);
-
- Foundation.Nest.Feather(this.$element, 'drilldown');
-
- this._init();
-
- Foundation.registerPlugin(this, 'Drilldown');
- Foundation.Keyboard.register('Drilldown', {
- 'ENTER': 'open',
- 'SPACE': 'open',
- 'ARROW_RIGHT': 'next',
- 'ARROW_UP': 'up',
- 'ARROW_DOWN': 'down',
- 'ARROW_LEFT': 'previous',
- 'ESCAPE': 'close',
- 'TAB': 'down',
- 'SHIFT_TAB': 'up'
- });
- }
-
- /**
- * Initializes the drilldown by creating jQuery collections of elements
- * @private
- */
-
-
- _createClass(Drilldown, [{
- key: '_init',
- value: function _init() {
- this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');
- this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]');
- this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'menuitem').find('a');
- this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || Foundation.GetYoDigits(6, 'drilldown'));
-
- this._prepareMenu();
- this._registerEvents();
-
- this._keyboardEvents();
- }
-
- /**
- * prepares drilldown menu by setting attributes to links and elements
- * sets a min height to prevent content jumping
- * wraps the element if not already wrapped
- * @private
- * @function
- */
-
- }, {
- key: '_prepareMenu',
- value: function _prepareMenu() {
- var _this = this;
- // if(!this.options.holdOpen){
- // this._menuLinkEvents();
- // }
- this.$submenuAnchors.each(function () {
- var $link = $(this);
- var $sub = $link.parent();
- if (_this.options.parentLink) {
- $link.clone().prependTo($sub.children('[data-submenu]')).wrap('<li class="is-submenu-parent-item is-submenu-item is-drilldown-submenu-item" role="menu-item"></li>');
- }
- $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);
- $link.children('[data-submenu]').attr({
- 'aria-hidden': true,
- 'tabindex': 0,
- 'role': 'menu'
- });
- _this._events($link);
- });
- this.$submenus.each(function () {
- var $menu = $(this),
- $back = $menu.find('.js-drilldown-back');
- if (!$back.length) {
- switch (_this.options.backButtonPosition) {
- case "bottom":
- $menu.append(_this.options.backButton);
- break;
- case "top":
- $menu.prepend(_this.options.backButton);
- break;
- default:
- console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'");
- }
- }
- _this._back($menu);
- });
-
- this.$submenus.addClass('invisible');
- if (!this.options.autoHeight) {
- this.$submenus.addClass('drilldown-submenu-cover-previous');
- }
-
- // create a wrapper on element if it doesn't exist.
- if (!this.$element.parent().hasClass('is-drilldown')) {
- this.$wrapper = $(this.options.wrapper).addClass('is-drilldown');
- if (this.options.animateHeight) this.$wrapper.addClass('animate-height');
- this.$element.wrap(this.$wrapper);
- }
- // set wrapper
- this.$wrapper = this.$element.parent();
- this.$wrapper.css(this._getMaxDims());
- }
- }, {
- key: '_resize',
- value: function _resize() {
- this.$wrapper.css({ 'max-width': 'none', 'min-height': 'none' });
- // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths
- this.$wrapper.css(this._getMaxDims());
- }
-
- /**
- * Adds event handlers to elements in the menu.
- * @function
- * @private
- * @param {jQuery} $elem - the current menu item to add handlers to.
- */
-
- }, {
- key: '_events',
- value: function _events($elem) {
- var _this = this;
-
- $elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) {
- if ($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) {
- e.stopImmediatePropagation();
- e.preventDefault();
- }
-
- // if(e.target !== e.currentTarget.firstElementChild){
- // return false;
- // }
- _this._show($elem.parent('li'));
-
- if (_this.options.closeOnClick) {
- var $body = $('body');
- $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) {
- if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) {
- return;
- }
- e.preventDefault();
- _this._hideAll();
- $body.off('.zf.drilldown');
- });
- }
- });
- this.$element.on('mutateme.zf.trigger', this._resize.bind(this));
- }
-
- /**
- * Adds event handlers to the menu element.
- * @function
- * @private
- */
-
- }, {
- key: '_registerEvents',
- value: function _registerEvents() {
- if (this.options.scrollTop) {
- this._bindHandler = this._scrollTop.bind(this);
- this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler);
- }
- }
-
- /**
- * Scroll to Top of Element or data-scroll-top-element
- * @function
- * @fires Drilldown#scrollme
- */
-
- }, {
- key: '_scrollTop',
- value: function _scrollTop() {
- var _this = this;
- var $scrollTopElement = _this.options.scrollTopElement != '' ? $(_this.options.scrollTopElement) : _this.$element,
- scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset);
- $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing, function () {
- /**
- * Fires after the menu has scrolled
- * @event Drilldown#scrollme
- */
- if (this === $('html')[0]) _this.$element.trigger('scrollme.zf.drilldown');
- });
- }
-
- /**
- * Adds keydown event listener to `li`'s in the menu.
- * @private
- */
-
- }, {
- key: '_keyboardEvents',
- value: function _keyboardEvents() {
- var _this = this;
-
- this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) {
- var $element = $(this),
- $elements = $element.parent('li').parent('ul').children('li').children('a'),
- $prevElement,
- $nextElement;
-
- $elements.each(function (i) {
- if ($(this).is($element)) {
- $prevElement = $elements.eq(Math.max(0, i - 1));
- $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));
- return;
- }
- });
-
- Foundation.Keyboard.handleKey(e, 'Drilldown', {
- next: function next() {
- if ($element.is(_this.$submenuAnchors)) {
- _this._show($element.parent('li'));
- $element.parent('li').one(Foundation.transitionend($element), function () {
- $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus();
- });
- return true;
- }
- },
- previous: function previous() {
- _this._hide($element.parent('li').parent('ul'));
- $element.parent('li').parent('ul').one(Foundation.transitionend($element), function () {
- setTimeout(function () {
- $element.parent('li').parent('ul').parent('li').children('a').first().focus();
- }, 1);
- });
- return true;
- },
- up: function up() {
- $prevElement.focus();
- // Don't tap focus on first element in root ul
- return !$element.is(_this.$element.find('> li:first-child > a'));
- },
- down: function down() {
- $nextElement.focus();
- // Don't tap focus on last element in root ul
- return !$element.is(_this.$element.find('> li:last-child > a'));
- },
- close: function close() {
- // Don't close on element in root ul
- if (!$element.is(_this.$element.find('> li > a'))) {
- _this._hide($element.parent().parent());
- $element.parent().parent().siblings('a').focus();
- }
- },
- open: function open() {
- if (!$element.is(_this.$menuItems)) {
- // not menu item means back button
- _this._hide($element.parent('li').parent('ul'));
- $element.parent('li').parent('ul').one(Foundation.transitionend($element), function () {
- setTimeout(function () {
- $element.parent('li').parent('ul').parent('li').children('a').first().focus();
- }, 1);
- });
- return true;
- } else if ($element.is(_this.$submenuAnchors)) {
- _this._show($element.parent('li'));
- $element.parent('li').one(Foundation.transitionend($element), function () {
- $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus();
- });
- return true;
- }
- },
- handled: function handled(preventDefault) {
- if (preventDefault) {
- e.preventDefault();
- }
- e.stopImmediatePropagation();
- }
- });
- }); // end keyboardAccess
- }
-
- /**
- * Closes all open elements, and returns to root menu.
- * @function
- * @fires Drilldown#closed
- */
-
- }, {
- key: '_hideAll',
- value: function _hideAll() {
- var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing');
- if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') });
- $elem.one(Foundation.transitionend($elem), function (e) {
- $elem.removeClass('is-active is-closing');
- });
- /**
- * Fires when the menu is fully closed.
- * @event Drilldown#closed
- */
- this.$element.trigger('closed.zf.drilldown');
- }
-
- /**
- * Adds event listener for each `back` button, and closes open menus.
- * @function
- * @fires Drilldown#back
- * @param {jQuery} $elem - the current sub-menu to add `back` event.
- */
-
- }, {
- key: '_back',
- value: function _back($elem) {
- var _this = this;
- $elem.off('click.zf.drilldown');
- $elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) {
- e.stopImmediatePropagation();
- // console.log('mouseup on back');
- _this._hide($elem);
-
- // If there is a parent submenu, call show
- var parentSubMenu = $elem.parent('li').parent('ul').parent('li');
- if (parentSubMenu.length) {
- _this._show(parentSubMenu);
- }
- });
- }
-
- /**
- * Adds event listener to menu items w/o submenus to close open menus on click.
- * @function
- * @private
- */
-
- }, {
- key: '_menuLinkEvents',
- value: function _menuLinkEvents() {
- var _this = this;
- this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) {
- // e.stopImmediatePropagation();
- setTimeout(function () {
- _this._hideAll();
- }, 0);
- });
- }
-
- /**
- * Opens a submenu.
- * @function
- * @fires Drilldown#open
- * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.
- */
-
- }, {
- key: '_show',
- value: function _show($elem) {
- if (this.options.autoHeight) this.$wrapper.css({ height: $elem.children('[data-submenu]').data('calcHeight') });
- $elem.attr('aria-expanded', true);
- $elem.children('[data-submenu]').addClass('is-active').removeClass('invisible').attr('aria-hidden', false);
- /**
- * Fires when the submenu has opened.
- * @event Drilldown#open
- */
- this.$element.trigger('open.zf.drilldown', [$elem]);
- }
- }, {
- key: '_hide',
-
-
- /**
- * Hides a submenu
- * @function
- * @fires Drilldown#hide
- * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.
- */
- value: function _hide($elem) {
- if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') });
- var _this = this;
- $elem.parent('li').attr('aria-expanded', false);
- $elem.attr('aria-hidden', true).addClass('is-closing');
- $elem.addClass('is-closing').one(Foundation.transitionend($elem), function () {
- $elem.removeClass('is-active is-closing');
- $elem.blur().addClass('invisible');
- });
- /**
- * Fires when the submenu has closed.
- * @event Drilldown#hide
- */
- $elem.trigger('hide.zf.drilldown', [$elem]);
- }
-
- /**
- * Iterates through the nested menus to calculate the min-height, and max-width for the menu.
- * Prevents content jumping.
- * @function
- * @private
- */
-
- }, {
- key: '_getMaxDims',
- value: function _getMaxDims() {
- var maxHeight = 0,
- result = {},
- _this = this;
- this.$submenus.add(this.$element).each(function () {
- var numOfElems = $(this).children('li').length;
- var height = Foundation.Box.GetDimensions(this).height;
- maxHeight = height > maxHeight ? height : maxHeight;
- if (_this.options.autoHeight) {
- $(this).data('calcHeight', height);
- if (!$(this).hasClass('is-drilldown-submenu')) result['height'] = height;
- }
- });
-
- if (!this.options.autoHeight) result['min-height'] = maxHeight + 'px';
-
- result['max-width'] = this.$element[0].getBoundingClientRect().width + 'px';
-
- return result;
- }
-
- /**
- * Destroys the Drilldown Menu
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler);
- this._hideAll();
- this.$element.off('mutateme.zf.trigger');
- Foundation.Nest.Burn(this.$element, 'drilldown');
- this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');
- this.$submenuAnchors.each(function () {
- $(this).off('.zf.drilldown');
- });
-
- this.$submenus.removeClass('drilldown-submenu-cover-previous');
-
- this.$element.find('a').each(function () {
- var $link = $(this);
- $link.removeAttr('tabindex');
- if ($link.data('savedHref')) {
- $link.attr('href', $link.data('savedHref')).removeData('savedHref');
- } else {
- return;
- }
- });
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Drilldown;
- }();
-
- Drilldown.defaults = {
- /**
- * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting.
- * @option
- * @type {string}
- * @default '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>'
- */
- backButton: '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>',
- /**
- * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.
- * @option
- * @type {string}
- * @default top
- */
- backButtonPosition: 'top',
- /**
- * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting.
- * @option
- * @type {string}
- * @default '<div></div>'
- */
- wrapper: '<div></div>',
- /**
- * Adds the parent link to the submenu.
- * @option
- * @type {boolean}
- * @default false
- */
- parentLink: false,
- /**
- * Allow the menu to return to root list on body click.
- * @option
- * @type {boolean}
- * @default false
- */
- closeOnClick: false,
- /**
- * Allow the menu to auto adjust height.
- * @option
- * @type {boolean}
- * @default false
- */
- autoHeight: false,
- /**
- * Animate the auto adjust height.
- * @option
- * @type {boolean}
- * @default false
- */
- animateHeight: false,
- /**
- * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button
- * @option
- * @type {boolean}
- * @default false
- */
- scrollTop: false,
- /**
- * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken
- * @option
- * @type {string}
- * @default ''
- */
- scrollTopElement: '',
- /**
- * ScrollTop offset
- * @option
- * @type {number}
- * @default 0
- */
- scrollTopOffset: 0,
- /**
- * Scroll animation duration
- * @option
- * @type {number}
- * @default 500
- */
- animationDuration: 500,
- /**
- * Scroll animation easing. Can be `'swing'` or `'linear'`.
- * @option
- * @type {string}
- * @see {@link https://api.jquery.com/animate|JQuery animate}
- * @default 'swing'
- */
- animationEasing: 'swing'
- // holdOpen: false
- };
-
- // Window exports
- Foundation.plugin(Drilldown, 'Drilldown');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Dropdown module.
- * @module foundation.dropdown
- * @requires foundation.util.keyboard
- * @requires foundation.util.box
- * @requires foundation.util.triggers
- */
-
- var Dropdown = function () {
- /**
- * Creates a new instance of a dropdown.
- * @class
- * @param {jQuery} element - jQuery object to make into a dropdown.
- * Object should be of the dropdown panel, rather than its anchor.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Dropdown(element, options) {
- _classCallCheck(this, Dropdown);
-
- this.$element = element;
- this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options);
- this._init();
-
- Foundation.registerPlugin(this, 'Dropdown');
- Foundation.Keyboard.register('Dropdown', {
- 'ENTER': 'open',
- 'SPACE': 'open',
- 'ESCAPE': 'close'
- });
- }
-
- /**
- * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.
- * @function
- * @private
- */
-
-
- _createClass(Dropdown, [{
- key: '_init',
- value: function _init() {
- var $id = this.$element.attr('id');
-
- this.$anchor = $('[data-toggle="' + $id + '"]').length ? $('[data-toggle="' + $id + '"]') : $('[data-open="' + $id + '"]');
- this.$anchor.attr({
- 'aria-controls': $id,
- 'data-is-focus': false,
- 'data-yeti-box': $id,
- 'aria-haspopup': true,
- 'aria-expanded': false
-
- });
-
- if (this.options.parentClass) {
- this.$parent = this.$element.parents('.' + this.options.parentClass);
- } else {
- this.$parent = null;
- }
- this.options.positionClass = this.getPositionClass();
- this.counter = 4;
- this.usedPositions = [];
- this.$element.attr({
- 'aria-hidden': 'true',
- 'data-yeti-box': $id,
- 'data-resize': $id,
- 'aria-labelledby': this.$anchor[0].id || Foundation.GetYoDigits(6, 'dd-anchor')
- });
- this._events();
- }
-
- /**
- * Helper function to determine current orientation of dropdown pane.
- * @function
- * @returns {String} position - string value of a position class.
- */
-
- }, {
- key: 'getPositionClass',
- value: function getPositionClass() {
- var verticalPosition = this.$element[0].className.match(/(top|left|right|bottom)/g);
- verticalPosition = verticalPosition ? verticalPosition[0] : '';
- var horizontalPosition = /float-(\S+)/.exec(this.$anchor[0].className);
- horizontalPosition = horizontalPosition ? horizontalPosition[1] : '';
- var position = horizontalPosition ? horizontalPosition + ' ' + verticalPosition : verticalPosition;
-
- return position;
- }
-
- /**
- * Adjusts the dropdown panes orientation by adding/removing positioning classes.
- * @function
- * @private
- * @param {String} position - position class to remove.
- */
-
- }, {
- key: '_reposition',
- value: function _reposition(position) {
- this.usedPositions.push(position ? position : 'bottom');
- //default, try switching to opposite side
- if (!position && this.usedPositions.indexOf('top') < 0) {
- this.$element.addClass('top');
- } else if (position === 'top' && this.usedPositions.indexOf('bottom') < 0) {
- this.$element.removeClass(position);
- } else if (position === 'left' && this.usedPositions.indexOf('right') < 0) {
- this.$element.removeClass(position).addClass('right');
- } else if (position === 'right' && this.usedPositions.indexOf('left') < 0) {
- this.$element.removeClass(position).addClass('left');
- }
-
- //if default change didn't work, try bottom or left first
- else if (!position && this.usedPositions.indexOf('top') > -1 && this.usedPositions.indexOf('left') < 0) {
- this.$element.addClass('left');
- } else if (position === 'top' && this.usedPositions.indexOf('bottom') > -1 && this.usedPositions.indexOf('left') < 0) {
- this.$element.removeClass(position).addClass('left');
- } else if (position === 'left' && this.usedPositions.indexOf('right') > -1 && this.usedPositions.indexOf('bottom') < 0) {
- this.$element.removeClass(position);
- } else if (position === 'right' && this.usedPositions.indexOf('left') > -1 && this.usedPositions.indexOf('bottom') < 0) {
- this.$element.removeClass(position);
- }
- //if nothing cleared, set to bottom
- else {
- this.$element.removeClass(position);
- }
- this.classChanged = true;
- this.counter--;
- }
-
- /**
- * Sets the position and orientation of the dropdown pane, checks for collisions.
- * Recursively calls itself if a collision is detected, with a new position class.
- * @function
- * @private
- */
-
- }, {
- key: '_setPosition',
- value: function _setPosition() {
- if (this.$anchor.attr('aria-expanded') === 'false') {
- return false;
- }
- var position = this.getPositionClass(),
- $eleDims = Foundation.Box.GetDimensions(this.$element),
- $anchorDims = Foundation.Box.GetDimensions(this.$anchor),
- _this = this,
- direction = position === 'left' ? 'left' : position === 'right' ? 'left' : 'top',
- param = direction === 'top' ? 'height' : 'width',
- offset = param === 'height' ? this.options.vOffset : this.options.hOffset;
-
- if ($eleDims.width >= $eleDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.$element, this.$parent)) {
- var newWidth = $eleDims.windowDims.width,
- parentHOffset = 0;
- if (this.$parent) {
- var $parentDims = Foundation.Box.GetDimensions(this.$parent),
- parentHOffset = $parentDims.offset.left;
- if ($parentDims.width < newWidth) {
- newWidth = $parentDims.width;
- }
- }
-
- this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, 'center bottom', this.options.vOffset, this.options.hOffset + parentHOffset, true)).css({
- 'width': newWidth - this.options.hOffset * 2,
- 'height': 'auto'
- });
- this.classChanged = true;
- return false;
- }
-
- this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, position, this.options.vOffset, this.options.hOffset));
-
- while (!Foundation.Box.ImNotTouchingYou(this.$element, this.$parent, true) && this.counter) {
- this._reposition(position);
- this._setPosition();
- }
- }
-
- /**
- * Adds event listeners to the element utilizing the triggers utility library.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
- this.$element.on({
- 'open.zf.trigger': this.open.bind(this),
- 'close.zf.trigger': this.close.bind(this),
- 'toggle.zf.trigger': this.toggle.bind(this),
- 'resizeme.zf.trigger': this._setPosition.bind(this)
- });
-
- if (this.options.hover) {
- this.$anchor.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () {
- var bodyData = $('body').data();
- if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') {
- clearTimeout(_this.timeout);
- _this.timeout = setTimeout(function () {
- _this.open();
- _this.$anchor.data('hover', true);
- }, _this.options.hoverDelay);
- }
- }).on('mouseleave.zf.dropdown', function () {
- clearTimeout(_this.timeout);
- _this.timeout = setTimeout(function () {
- _this.close();
- _this.$anchor.data('hover', false);
- }, _this.options.hoverDelay);
- });
- if (this.options.hoverPane) {
- this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () {
- clearTimeout(_this.timeout);
- }).on('mouseleave.zf.dropdown', function () {
- clearTimeout(_this.timeout);
- _this.timeout = setTimeout(function () {
- _this.close();
- _this.$anchor.data('hover', false);
- }, _this.options.hoverDelay);
- });
- }
- }
- this.$anchor.add(this.$element).on('keydown.zf.dropdown', function (e) {
-
- var $target = $(this),
- visibleFocusableElements = Foundation.Keyboard.findFocusable(_this.$element);
-
- Foundation.Keyboard.handleKey(e, 'Dropdown', {
- open: function open() {
- if ($target.is(_this.$anchor)) {
- _this.open();
- _this.$element.attr('tabindex', -1).focus();
- e.preventDefault();
- }
- },
- close: function close() {
- _this.close();
- _this.$anchor.focus();
- }
- });
- });
- }
-
- /**
- * Adds an event handler to the body to close any dropdowns on a click.
- * @function
- * @private
- */
-
- }, {
- key: '_addBodyHandler',
- value: function _addBodyHandler() {
- var $body = $(document.body).not(this.$element),
- _this = this;
- $body.off('click.zf.dropdown').on('click.zf.dropdown', function (e) {
- if (_this.$anchor.is(e.target) || _this.$anchor.find(e.target).length) {
- return;
- }
- if (_this.$element.find(e.target).length) {
- return;
- }
- _this.close();
- $body.off('click.zf.dropdown');
- });
- }
-
- /**
- * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.
- * @function
- * @fires Dropdown#closeme
- * @fires Dropdown#show
- */
-
- }, {
- key: 'open',
- value: function open() {
- // var _this = this;
- /**
- * Fires to close other open dropdowns, typically when dropdown is opening
- * @event Dropdown#closeme
- */
- this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));
- this.$anchor.addClass('hover').attr({ 'aria-expanded': true });
- // this.$element/*.show()*/;
- this._setPosition();
- this.$element.addClass('is-open').attr({ 'aria-hidden': false });
-
- if (this.options.autoFocus) {
- var $focusable = Foundation.Keyboard.findFocusable(this.$element);
- if ($focusable.length) {
- $focusable.eq(0).focus();
- }
- }
-
- if (this.options.closeOnClick) {
- this._addBodyHandler();
- }
-
- if (this.options.trapFocus) {
- Foundation.Keyboard.trapFocus(this.$element);
- }
-
- /**
- * Fires once the dropdown is visible.
- * @event Dropdown#show
- */
- this.$element.trigger('show.zf.dropdown', [this.$element]);
- }
-
- /**
- * Closes the open dropdown pane.
- * @function
- * @fires Dropdown#hide
- */
-
- }, {
- key: 'close',
- value: function close() {
- if (!this.$element.hasClass('is-open')) {
- return false;
- }
- this.$element.removeClass('is-open').attr({ 'aria-hidden': true });
-
- this.$anchor.removeClass('hover').attr('aria-expanded', false);
-
- if (this.classChanged) {
- var curPositionClass = this.getPositionClass();
- if (curPositionClass) {
- this.$element.removeClass(curPositionClass);
- }
- this.$element.addClass(this.options.positionClass)
- /*.hide()*/.css({ height: '', width: '' });
- this.classChanged = false;
- this.counter = 4;
- this.usedPositions.length = 0;
- }
- /**
- * Fires once the dropdown is no longer visible.
- * @event Dropdown#hide
- */
- this.$element.trigger('hide.zf.dropdown', [this.$element]);
-
- if (this.options.trapFocus) {
- Foundation.Keyboard.releaseFocus(this.$element);
- }
- }
-
- /**
- * Toggles the dropdown pane's visibility.
- * @function
- */
-
- }, {
- key: 'toggle',
- value: function toggle() {
- if (this.$element.hasClass('is-open')) {
- if (this.$anchor.data('hover')) return;
- this.close();
- } else {
- this.open();
- }
- }
-
- /**
- * Destroys the dropdown.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.off('.zf.trigger').hide();
- this.$anchor.off('.zf.dropdown');
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Dropdown;
- }();
-
- Dropdown.defaults = {
- /**
- * Class that designates bounding container of Dropdown (default: window)
- * @option
- * @type {?string}
- * @default null
- */
- parentClass: null,
- /**
- * Amount of time to delay opening a submenu on hover event.
- * @option
- * @type {number}
- * @default 250
- */
- hoverDelay: 250,
- /**
- * Allow submenus to open on hover events
- * @option
- * @type {boolean}
- * @default false
- */
- hover: false,
- /**
- * Don't close dropdown when hovering over dropdown pane
- * @option
- * @type {boolean}
- * @default false
- */
- hoverPane: false,
- /**
- * Number of pixels between the dropdown pane and the triggering element on open.
- * @option
- * @type {number}
- * @default 1
- */
- vOffset: 1,
- /**
- * Number of pixels between the dropdown pane and the triggering element on open.
- * @option
- * @type {number}
- * @default 1
- */
- hOffset: 1,
- /**
- * Class applied to adjust open position. JS will test and fill this in.
- * @option
- * @type {string}
- * @default ''
- */
- positionClass: '',
- /**
- * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.
- * @option
- * @type {boolean}
- * @default false
- */
- trapFocus: false,
- /**
- * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.
- * @option
- * @type {boolean}
- * @default false
- */
- autoFocus: false,
- /**
- * Allows a click on the body to close the dropdown.
- * @option
- * @type {boolean}
- * @default false
- */
- closeOnClick: false
- };
-
- // Window exports
- Foundation.plugin(Dropdown, 'Dropdown');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * DropdownMenu module.
- * @module foundation.dropdown-menu
- * @requires foundation.util.keyboard
- * @requires foundation.util.box
- * @requires foundation.util.nest
- */
-
- var DropdownMenu = function () {
- /**
- * Creates a new instance of DropdownMenu.
- * @class
- * @fires DropdownMenu#init
- * @param {jQuery} element - jQuery object to make into a dropdown menu.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function DropdownMenu(element, options) {
- _classCallCheck(this, DropdownMenu);
-
- this.$element = element;
- this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);
-
- Foundation.Nest.Feather(this.$element, 'dropdown');
- this._init();
-
- Foundation.registerPlugin(this, 'DropdownMenu');
- Foundation.Keyboard.register('DropdownMenu', {
- 'ENTER': 'open',
- 'SPACE': 'open',
- 'ARROW_RIGHT': 'next',
- 'ARROW_UP': 'up',
- 'ARROW_DOWN': 'down',
- 'ARROW_LEFT': 'previous',
- 'ESCAPE': 'close'
- });
- }
-
- /**
- * Initializes the plugin, and calls _prepareMenu
- * @private
- * @function
- */
-
-
- _createClass(DropdownMenu, [{
- key: '_init',
- value: function _init() {
- var subs = this.$element.find('li.is-dropdown-submenu-parent');
- this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');
-
- this.$menuItems = this.$element.find('[role="menuitem"]');
- this.$tabs = this.$element.children('[role="menuitem"]');
- this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);
-
- if (this.$element.hasClass(this.options.rightClass) || this.options.alignment === 'right' || Foundation.rtl() || this.$element.parents('.top-bar-right').is('*')) {
- this.options.alignment = 'right';
- subs.addClass('opens-left');
- } else {
- subs.addClass('opens-right');
- }
- this.changed = false;
- this._events();
- }
- }, {
- key: '_isVertical',
- value: function _isVertical() {
- return this.$tabs.css('display') === 'block';
- }
-
- /**
- * Adds event listeners to elements within the menu
- * @private
- * @function
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this,
- hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined',
- parClass = 'is-dropdown-submenu-parent';
-
- // used for onClick and in the keyboard handlers
- var handleClickFn = function handleClickFn(e) {
- var $elem = $(e.target).parentsUntil('ul', '.' + parClass),
- hasSub = $elem.hasClass(parClass),
- hasClicked = $elem.attr('data-is-click') === 'true',
- $sub = $elem.children('.is-dropdown-submenu');
-
- if (hasSub) {
- if (hasClicked) {
- if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) {
- return;
- } else {
- e.stopImmediatePropagation();
- e.preventDefault();
- _this._hide($elem);
- }
- } else {
- e.preventDefault();
- e.stopImmediatePropagation();
- _this._show($sub);
- $elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true);
- }
- }
- };
-
- if (this.options.clickOpen || hasTouch) {
- this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn);
- }
-
- // Handle Leaf element Clicks
- if (_this.options.closeOnClickInside) {
- this.$menuItems.on('click.zf.dropdownmenu', function (e) {
- var $elem = $(this),
- hasSub = $elem.hasClass(parClass);
- if (!hasSub) {
- _this._hide();
- }
- });
- }
-
- if (!this.options.disableHover) {
- this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) {
- var $elem = $(this),
- hasSub = $elem.hasClass(parClass);
-
- if (hasSub) {
- clearTimeout($elem.data('_delay'));
- $elem.data('_delay', setTimeout(function () {
- _this._show($elem.children('.is-dropdown-submenu'));
- }, _this.options.hoverDelay));
- }
- }).on('mouseleave.zf.dropdownmenu', function (e) {
- var $elem = $(this),
- hasSub = $elem.hasClass(parClass);
- if (hasSub && _this.options.autoclose) {
- if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) {
- return false;
- }
-
- clearTimeout($elem.data('_delay'));
- $elem.data('_delay', setTimeout(function () {
- _this._hide($elem);
- }, _this.options.closingTime));
- }
- });
- }
- this.$menuItems.on('keydown.zf.dropdownmenu', function (e) {
- var $element = $(e.target).parentsUntil('ul', '[role="menuitem"]'),
- isTab = _this.$tabs.index($element) > -1,
- $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),
- $prevElement,
- $nextElement;
-
- $elements.each(function (i) {
- if ($(this).is($element)) {
- $prevElement = $elements.eq(i - 1);
- $nextElement = $elements.eq(i + 1);
- return;
- }
- });
-
- var nextSibling = function nextSibling() {
- if (!$element.is(':last-child')) {
- $nextElement.children('a:first').focus();
- e.preventDefault();
- }
- },
- prevSibling = function prevSibling() {
- $prevElement.children('a:first').focus();
- e.preventDefault();
- },
- openSub = function openSub() {
- var $sub = $element.children('ul.is-dropdown-submenu');
- if ($sub.length) {
- _this._show($sub);
- $element.find('li > a:first').focus();
- e.preventDefault();
- } else {
- return;
- }
- },
- closeSub = function closeSub() {
- //if ($element.is(':first-child')) {
- var close = $element.parent('ul').parent('li');
- close.children('a:first').focus();
- _this._hide(close);
- e.preventDefault();
- //}
- };
- var functions = {
- open: openSub,
- close: function close() {
- _this._hide(_this.$element);
- _this.$menuItems.find('a:first').focus(); // focus to first element
- e.preventDefault();
- },
- handled: function handled() {
- e.stopImmediatePropagation();
- }
- };
-
- if (isTab) {
- if (_this._isVertical()) {
- // vertical menu
- if (Foundation.rtl()) {
- // right aligned
- $.extend(functions, {
- down: nextSibling,
- up: prevSibling,
- next: closeSub,
- previous: openSub
- });
- } else {
- // left aligned
- $.extend(functions, {
- down: nextSibling,
- up: prevSibling,
- next: openSub,
- previous: closeSub
- });
- }
- } else {
- // horizontal menu
- if (Foundation.rtl()) {
- // right aligned
- $.extend(functions, {
- next: prevSibling,
- previous: nextSibling,
- down: openSub,
- up: closeSub
- });
- } else {
- // left aligned
- $.extend(functions, {
- next: nextSibling,
- previous: prevSibling,
- down: openSub,
- up: closeSub
- });
- }
- }
- } else {
- // not tabs -> one sub
- if (Foundation.rtl()) {
- // right aligned
- $.extend(functions, {
- next: closeSub,
- previous: openSub,
- down: nextSibling,
- up: prevSibling
- });
- } else {
- // left aligned
- $.extend(functions, {
- next: openSub,
- previous: closeSub,
- down: nextSibling,
- up: prevSibling
- });
- }
- }
- Foundation.Keyboard.handleKey(e, 'DropdownMenu', functions);
- });
- }
-
- /**
- * Adds an event handler to the body to close any dropdowns on a click.
- * @function
- * @private
- */
-
- }, {
- key: '_addBodyHandler',
- value: function _addBodyHandler() {
- var $body = $(document.body),
- _this = this;
- $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) {
- var $link = _this.$element.find(e.target);
- if ($link.length) {
- return;
- }
-
- _this._hide();
- $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu');
- });
- }
-
- /**
- * Opens a dropdown pane, and checks for collisions first.
- * @param {jQuery} $sub - ul element that is a submenu to show
- * @function
- * @private
- * @fires DropdownMenu#show
- */
-
- }, {
- key: '_show',
- value: function _show($sub) {
- var idx = this.$tabs.index(this.$tabs.filter(function (i, el) {
- return $(el).find($sub).length > 0;
- }));
- var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');
- this._hide($sibs, idx);
- $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active');
- var clear = Foundation.Box.ImNotTouchingYou($sub, null, true);
- if (!clear) {
- var oldClass = this.options.alignment === 'left' ? '-right' : '-left',
- $parentLi = $sub.parent('.is-dropdown-submenu-parent');
- $parentLi.removeClass('opens' + oldClass).addClass('opens-' + this.options.alignment);
- clear = Foundation.Box.ImNotTouchingYou($sub, null, true);
- if (!clear) {
- $parentLi.removeClass('opens-' + this.options.alignment).addClass('opens-inner');
- }
- this.changed = true;
- }
- $sub.css('visibility', '');
- if (this.options.closeOnClick) {
- this._addBodyHandler();
- }
- /**
- * Fires when the new dropdown pane is visible.
- * @event DropdownMenu#show
- */
- this.$element.trigger('show.zf.dropdownmenu', [$sub]);
- }
-
- /**
- * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.
- * @function
- * @param {jQuery} $elem - element with a submenu to hide
- * @param {Number} idx - index of the $tabs collection to hide
- * @private
- */
-
- }, {
- key: '_hide',
- value: function _hide($elem, idx) {
- var $toClose;
- if ($elem && $elem.length) {
- $toClose = $elem;
- } else if (idx !== undefined) {
- $toClose = this.$tabs.not(function (i, el) {
- return i === idx;
- });
- } else {
- $toClose = this.$element;
- }
- var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;
-
- if (somethingToClose) {
- $toClose.find('li.is-active').add($toClose).attr({
- 'data-is-click': false
- }).removeClass('is-active');
-
- $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');
-
- if (this.changed || $toClose.find('opens-inner').length) {
- var oldClass = this.options.alignment === 'left' ? 'right' : 'left';
- $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass('opens-inner opens-' + this.options.alignment).addClass('opens-' + oldClass);
- this.changed = false;
- }
- /**
- * Fires when the open menus are closed.
- * @event DropdownMenu#hide
- */
- this.$element.trigger('hide.zf.dropdownmenu', [$toClose]);
- }
- }
-
- /**
- * Destroys the plugin.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');
- $(document.body).off('.zf.dropdownmenu');
- Foundation.Nest.Burn(this.$element, 'dropdown');
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return DropdownMenu;
- }();
-
- /**
- * Default settings for plugin
- */
-
-
- DropdownMenu.defaults = {
- /**
- * Disallows hover events from opening submenus
- * @option
- * @type {boolean}
- * @default false
- */
- disableHover: false,
- /**
- * Allow a submenu to automatically close on a mouseleave event, if not clicked open.
- * @option
- * @type {boolean}
- * @default true
- */
- autoclose: true,
- /**
- * Amount of time to delay opening a submenu on hover event.
- * @option
- * @type {number}
- * @default 50
- */
- hoverDelay: 50,
- /**
- * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.
- * @option
- * @type {boolean}
- * @default false
- */
- clickOpen: false,
- /**
- * Amount of time to delay closing a submenu on a mouseleave event.
- * @option
- * @type {number}
- * @default 500
- */
-
- closingTime: 500,
- /**
- * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'left'` or `'right'`.
- * @option
- * @type {string}
- * @default 'left'
- */
- alignment: 'left',
- /**
- * Allow clicks on the body to close any open submenus.
- * @option
- * @type {boolean}
- * @default true
- */
- closeOnClick: true,
- /**
- * Allow clicks on leaf anchor links to close any open submenus.
- * @option
- * @type {boolean}
- * @default true
- */
- closeOnClickInside: true,
- /**
- * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.
- * @option
- * @type {string}
- * @default 'vertical'
- */
- verticalClass: 'vertical',
- /**
- * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.
- * @option
- * @type {string}
- * @default 'align-right'
- */
- rightClass: 'align-right',
- /**
- * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.
- * @option
- * @type {boolean}
- * @default true
- */
- forceFollow: true
- };
-
- // Window exports
- Foundation.plugin(DropdownMenu, 'DropdownMenu');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Equalizer module.
- * @module foundation.equalizer
- * @requires foundation.util.mediaQuery
- * @requires foundation.util.timerAndImageLoader if equalizer contains images
- */
-
- var Equalizer = function () {
- /**
- * Creates a new instance of Equalizer.
- * @class
- * @fires Equalizer#init
- * @param {Object} element - jQuery object to add the trigger to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Equalizer(element, options) {
- _classCallCheck(this, Equalizer);
-
- this.$element = element;
- this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Equalizer');
- }
-
- /**
- * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.
- * @private
- */
-
-
- _createClass(Equalizer, [{
- key: '_init',
- value: function _init() {
- var eqId = this.$element.attr('data-equalizer') || '';
- var $watched = this.$element.find('[data-equalizer-watch="' + eqId + '"]');
-
- this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');
- this.$element.attr('data-resize', eqId || Foundation.GetYoDigits(6, 'eq'));
- this.$element.attr('data-mutate', eqId || Foundation.GetYoDigits(6, 'eq'));
-
- this.hasNested = this.$element.find('[data-equalizer]').length > 0;
- this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;
- this.isOn = false;
- this._bindHandler = {
- onResizeMeBound: this._onResizeMe.bind(this),
- onPostEqualizedBound: this._onPostEqualized.bind(this)
- };
-
- var imgs = this.$element.find('img');
- var tooSmall;
- if (this.options.equalizeOn) {
- tooSmall = this._checkMQ();
- $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));
- } else {
- this._events();
- }
- if (tooSmall !== undefined && tooSmall === false || tooSmall === undefined) {
- if (imgs.length) {
- Foundation.onImagesLoaded(imgs, this._reflow.bind(this));
- } else {
- this._reflow();
- }
- }
- }
-
- /**
- * Removes event listeners if the breakpoint is too small.
- * @private
- */
-
- }, {
- key: '_pauseEvents',
- value: function _pauseEvents() {
- this.isOn = false;
- this.$element.off({
- '.zf.equalizer': this._bindHandler.onPostEqualizedBound,
- 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,
- 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound
- });
- }
-
- /**
- * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound
- * @private
- */
-
- }, {
- key: '_onResizeMe',
- value: function _onResizeMe(e) {
- this._reflow();
- }
-
- /**
- * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound
- * @private
- */
-
- }, {
- key: '_onPostEqualized',
- value: function _onPostEqualized(e) {
- if (e.target !== this.$element[0]) {
- this._reflow();
- }
- }
-
- /**
- * Initializes events for Equalizer.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
- this._pauseEvents();
- if (this.hasNested) {
- this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);
- } else {
- this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);
- this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);
- }
- this.isOn = true;
- }
-
- /**
- * Checks the current breakpoint to the minimum required size.
- * @private
- */
-
- }, {
- key: '_checkMQ',
- value: function _checkMQ() {
- var tooSmall = !Foundation.MediaQuery.is(this.options.equalizeOn);
- if (tooSmall) {
- if (this.isOn) {
- this._pauseEvents();
- this.$watched.css('height', 'auto');
- }
- } else {
- if (!this.isOn) {
- this._events();
- }
- }
- return tooSmall;
- }
-
- /**
- * A noop version for the plugin
- * @private
- */
-
- }, {
- key: '_killswitch',
- value: function _killswitch() {
- return;
- }
-
- /**
- * Calls necessary functions to update Equalizer upon DOM change
- * @private
- */
-
- }, {
- key: '_reflow',
- value: function _reflow() {
- if (!this.options.equalizeOnStack) {
- if (this._isStacked()) {
- this.$watched.css('height', 'auto');
- return false;
- }
- }
- if (this.options.equalizeByRow) {
- this.getHeightsByRow(this.applyHeightByRow.bind(this));
- } else {
- this.getHeights(this.applyHeight.bind(this));
- }
- }
-
- /**
- * Manually determines if the first 2 elements are *NOT* stacked.
- * @private
- */
-
- }, {
- key: '_isStacked',
- value: function _isStacked() {
- if (!this.$watched[0] || !this.$watched[1]) {
- return true;
- }
- return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;
- }
-
- /**
- * Finds the outer heights of children contained within an Equalizer parent and returns them in an array
- * @param {Function} cb - A non-optional callback to return the heights array to.
- * @returns {Array} heights - An array of heights of children within Equalizer container
- */
-
- }, {
- key: 'getHeights',
- value: function getHeights(cb) {
- var heights = [];
- for (var i = 0, len = this.$watched.length; i < len; i++) {
- this.$watched[i].style.height = 'auto';
- heights.push(this.$watched[i].offsetHeight);
- }
- cb(heights);
- }
-
- /**
- * Finds the outer heights of children contained within an Equalizer parent and returns them in an array
- * @param {Function} cb - A non-optional callback to return the heights array to.
- * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child
- */
-
- }, {
- key: 'getHeightsByRow',
- value: function getHeightsByRow(cb) {
- var lastElTopOffset = this.$watched.length ? this.$watched.first().offset().top : 0,
- groups = [],
- group = 0;
- //group by Row
- groups[group] = [];
- for (var i = 0, len = this.$watched.length; i < len; i++) {
- this.$watched[i].style.height = 'auto';
- //maybe could use this.$watched[i].offsetTop
- var elOffsetTop = $(this.$watched[i]).offset().top;
- if (elOffsetTop != lastElTopOffset) {
- group++;
- groups[group] = [];
- lastElTopOffset = elOffsetTop;
- }
- groups[group].push([this.$watched[i], this.$watched[i].offsetHeight]);
- }
-
- for (var j = 0, ln = groups.length; j < ln; j++) {
- var heights = $(groups[j]).map(function () {
- return this[1];
- }).get();
- var max = Math.max.apply(null, heights);
- groups[j].push(max);
- }
- cb(groups);
- }
-
- /**
- * Changes the CSS height property of each child in an Equalizer parent to match the tallest
- * @param {array} heights - An array of heights of children within Equalizer container
- * @fires Equalizer#preequalized
- * @fires Equalizer#postequalized
- */
-
- }, {
- key: 'applyHeight',
- value: function applyHeight(heights) {
- var max = Math.max.apply(null, heights);
- /**
- * Fires before the heights are applied
- * @event Equalizer#preequalized
- */
- this.$element.trigger('preequalized.zf.equalizer');
-
- this.$watched.css('height', max);
-
- /**
- * Fires when the heights have been applied
- * @event Equalizer#postequalized
- */
- this.$element.trigger('postequalized.zf.equalizer');
- }
-
- /**
- * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row
- * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child
- * @fires Equalizer#preequalized
- * @fires Equalizer#preequalizedrow
- * @fires Equalizer#postequalizedrow
- * @fires Equalizer#postequalized
- */
-
- }, {
- key: 'applyHeightByRow',
- value: function applyHeightByRow(groups) {
- /**
- * Fires before the heights are applied
- */
- this.$element.trigger('preequalized.zf.equalizer');
- for (var i = 0, len = groups.length; i < len; i++) {
- var groupsILength = groups[i].length,
- max = groups[i][groupsILength - 1];
- if (groupsILength <= 2) {
- $(groups[i][0][0]).css({ 'height': 'auto' });
- continue;
- }
- /**
- * Fires before the heights per row are applied
- * @event Equalizer#preequalizedrow
- */
- this.$element.trigger('preequalizedrow.zf.equalizer');
- for (var j = 0, lenJ = groupsILength - 1; j < lenJ; j++) {
- $(groups[i][j][0]).css({ 'height': max });
- }
- /**
- * Fires when the heights per row have been applied
- * @event Equalizer#postequalizedrow
- */
- this.$element.trigger('postequalizedrow.zf.equalizer');
- }
- /**
- * Fires when the heights have been applied
- */
- this.$element.trigger('postequalized.zf.equalizer');
- }
-
- /**
- * Destroys an instance of Equalizer.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this._pauseEvents();
- this.$watched.css('height', 'auto');
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Equalizer;
- }();
-
- /**
- * Default settings for plugin
- */
-
-
- Equalizer.defaults = {
- /**
- * Enable height equalization when stacked on smaller screens.
- * @option
- * @type {boolean}
- * @default false
- */
- equalizeOnStack: false,
- /**
- * Enable height equalization row by row.
- * @option
- * @type {boolean}
- * @default false
- */
- equalizeByRow: false,
- /**
- * String representing the minimum breakpoint size the plugin should equalize heights on.
- * @option
- * @type {string}
- * @default ''
- */
- equalizeOn: ''
- };
-
- // Window exports
- Foundation.plugin(Equalizer, 'Equalizer');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Interchange module.
- * @module foundation.interchange
- * @requires foundation.util.mediaQuery
- * @requires foundation.util.timerAndImageLoader
- */
-
- var Interchange = function () {
- /**
- * Creates a new instance of Interchange.
- * @class
- * @fires Interchange#init
- * @param {Object} element - jQuery object to add the trigger to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Interchange(element, options) {
- _classCallCheck(this, Interchange);
-
- this.$element = element;
- this.options = $.extend({}, Interchange.defaults, options);
- this.rules = [];
- this.currentPath = '';
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'Interchange');
- }
-
- /**
- * Initializes the Interchange plugin and calls functions to get interchange functioning on load.
- * @function
- * @private
- */
-
-
- _createClass(Interchange, [{
- key: '_init',
- value: function _init() {
- this._addBreakpoints();
- this._generateRules();
- this._reflow();
- }
-
- /**
- * Initializes events for Interchange.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this2 = this;
-
- $(window).on('resize.zf.interchange', Foundation.util.throttle(function () {
- _this2._reflow();
- }, 50));
- }
-
- /**
- * Calls necessary functions to update Interchange upon DOM change
- * @function
- * @private
- */
-
- }, {
- key: '_reflow',
- value: function _reflow() {
- var match;
-
- // Iterate through each rule, but only save the last match
- for (var i in this.rules) {
- if (this.rules.hasOwnProperty(i)) {
- var rule = this.rules[i];
- if (window.matchMedia(rule.query).matches) {
- match = rule;
- }
- }
- }
-
- if (match) {
- this.replace(match.path);
- }
- }
-
- /**
- * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object.
- * @function
- * @private
- */
-
- }, {
- key: '_addBreakpoints',
- value: function _addBreakpoints() {
- for (var i in Foundation.MediaQuery.queries) {
- if (Foundation.MediaQuery.queries.hasOwnProperty(i)) {
- var query = Foundation.MediaQuery.queries[i];
- Interchange.SPECIAL_QUERIES[query.name] = query.value;
- }
- }
- }
-
- /**
- * Checks the Interchange element for the provided media query + content pairings
- * @function
- * @private
- * @param {Object} element - jQuery object that is an Interchange instance
- * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys
- */
-
- }, {
- key: '_generateRules',
- value: function _generateRules(element) {
- var rulesList = [];
- var rules;
-
- if (this.options.rules) {
- rules = this.options.rules;
- } else {
- rules = this.$element.data('interchange');
- }
-
- rules = typeof rules === 'string' ? rules.match(/\[.*?\]/g) : rules;
-
- for (var i in rules) {
- if (rules.hasOwnProperty(i)) {
- var rule = rules[i].slice(1, -1).split(', ');
- var path = rule.slice(0, -1).join('');
- var query = rule[rule.length - 1];
-
- if (Interchange.SPECIAL_QUERIES[query]) {
- query = Interchange.SPECIAL_QUERIES[query];
- }
-
- rulesList.push({
- path: path,
- query: query
- });
- }
- }
-
- this.rules = rulesList;
- }
-
- /**
- * Update the `src` property of an image, or change the HTML of a container, to the specified path.
- * @function
- * @param {String} path - Path to the image or HTML partial.
- * @fires Interchange#replaced
- */
-
- }, {
- key: 'replace',
- value: function replace(path) {
- if (this.currentPath === path) return;
-
- var _this = this,
- trigger = 'replaced.zf.interchange';
-
- // Replacing images
- if (this.$element[0].nodeName === 'IMG') {
- this.$element.attr('src', path).on('load', function () {
- _this.currentPath = path;
- }).trigger(trigger);
- }
- // Replacing background images
- else if (path.match(/\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) {
- this.$element.css({ 'background-image': 'url(' + path + ')' }).trigger(trigger);
- }
- // Replacing HTML
- else {
- $.get(path, function (response) {
- _this.$element.html(response).trigger(trigger);
- $(response).foundation();
- _this.currentPath = path;
- });
- }
-
- /**
- * Fires when content in an Interchange element is done being loaded.
- * @event Interchange#replaced
- */
- // this.$element.trigger('replaced.zf.interchange');
- }
-
- /**
- * Destroys an instance of interchange.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- //TODO this.
- }
- }]);
-
- return Interchange;
- }();
-
- /**
- * Default settings for plugin
- */
-
-
- Interchange.defaults = {
- /**
- * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation.
- * @option
- * @type {?array}
- * @default null
- */
- rules: null
- };
-
- Interchange.SPECIAL_QUERIES = {
- 'landscape': 'screen and (orientation: landscape)',
- 'portrait': 'screen and (orientation: portrait)',
- 'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)'
- };
-
- // Window exports
- Foundation.plugin(Interchange, 'Interchange');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Magellan module.
- * @module foundation.magellan
- */
-
- var Magellan = function () {
- /**
- * Creates a new instance of Magellan.
- * @class
- * @fires Magellan#init
- * @param {Object} element - jQuery object to add the trigger to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Magellan(element, options) {
- _classCallCheck(this, Magellan);
-
- this.$element = element;
- this.options = $.extend({}, Magellan.defaults, this.$element.data(), options);
-
- this._init();
- this.calcPoints();
-
- Foundation.registerPlugin(this, 'Magellan');
- }
-
- /**
- * Initializes the Magellan plugin and calls functions to get equalizer functioning on load.
- * @private
- */
-
-
- _createClass(Magellan, [{
- key: '_init',
- value: function _init() {
- var id = this.$element[0].id || Foundation.GetYoDigits(6, 'magellan');
- var _this = this;
- this.$targets = $('[data-magellan-target]');
- this.$links = this.$element.find('a');
- this.$element.attr({
- 'data-resize': id,
- 'data-scroll': id,
- 'id': id
- });
- this.$active = $();
- this.scrollPos = parseInt(window.pageYOffset, 10);
-
- this._events();
- }
-
- /**
- * Calculates an array of pixel values that are the demarcation lines between locations on the page.
- * Can be invoked if new elements are added or the size of a location changes.
- * @function
- */
-
- }, {
- key: 'calcPoints',
- value: function calcPoints() {
- var _this = this,
- body = document.body,
- html = document.documentElement;
-
- this.points = [];
- this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight));
- this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight));
-
- this.$targets.each(function () {
- var $tar = $(this),
- pt = Math.round($tar.offset().top - _this.options.threshold);
- $tar.targetPoint = pt;
- _this.points.push(pt);
- });
- }
-
- /**
- * Initializes events for Magellan.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this,
- $body = $('html, body'),
- opts = {
- duration: _this.options.animationDuration,
- easing: _this.options.animationEasing
- };
- $(window).one('load', function () {
- if (_this.options.deepLinking) {
- if (location.hash) {
- _this.scrollToLoc(location.hash);
- }
- }
- _this.calcPoints();
- _this._updateActive();
- });
-
- this.$element.on({
- 'resizeme.zf.trigger': this.reflow.bind(this),
- 'scrollme.zf.trigger': this._updateActive.bind(this)
- }).on('click.zf.magellan', 'a[href^="#"]', function (e) {
- e.preventDefault();
- var arrival = this.getAttribute('href');
- _this.scrollToLoc(arrival);
- });
- $(window).on('popstate', function (e) {
- if (_this.options.deepLinking) {
- _this.scrollToLoc(window.location.hash);
- }
- });
- }
-
- /**
- * Function to scroll to a given location on the page.
- * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo'
- * @function
- */
-
- }, {
- key: 'scrollToLoc',
- value: function scrollToLoc(loc) {
- // Do nothing if target does not exist to prevent errors
- if (!$(loc).length) {
- return false;
- }
- this._inTransition = true;
- var _this = this,
- scrollPos = Math.round($(loc).offset().top - this.options.threshold / 2 - this.options.barOffset);
-
- $('html, body').stop(true).animate({ scrollTop: scrollPos }, this.options.animationDuration, this.options.animationEasing, function () {
- _this._inTransition = false;_this._updateActive();
- });
- }
-
- /**
- * Calls necessary functions to update Magellan upon DOM change
- * @function
- */
-
- }, {
- key: 'reflow',
- value: function reflow() {
- this.calcPoints();
- this._updateActive();
- }
-
- /**
- * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled.
- * @private
- * @function
- * @fires Magellan#update
- */
-
- }, {
- key: '_updateActive',
- value: function _updateActive() /*evt, elem, scrollPos*/{
- if (this._inTransition) {
- return;
- }
- var winPos = /*scrollPos ||*/parseInt(window.pageYOffset, 10),
- curIdx;
-
- if (winPos + this.winHeight === this.docHeight) {
- curIdx = this.points.length - 1;
- } else if (winPos < this.points[0]) {
- curIdx = undefined;
- } else {
- var isDown = this.scrollPos < winPos,
- _this = this,
- curVisible = this.points.filter(function (p, i) {
- return isDown ? p - _this.options.barOffset <= winPos : p - _this.options.barOffset - _this.options.threshold <= winPos;
- });
- curIdx = curVisible.length ? curVisible.length - 1 : 0;
- }
-
- this.$active.removeClass(this.options.activeClass);
- this.$active = this.$links.filter('[href="#' + this.$targets.eq(curIdx).data('magellan-target') + '"]').addClass(this.options.activeClass);
-
- if (this.options.deepLinking) {
- var hash = "";
- if (curIdx != undefined) {
- hash = this.$active[0].getAttribute('href');
- }
- if (hash !== window.location.hash) {
- if (window.history.pushState) {
- window.history.pushState(null, null, hash);
- } else {
- window.location.hash = hash;
- }
- }
- }
-
- this.scrollPos = winPos;
- /**
- * Fires when magellan is finished updating to the new active element.
- * @event Magellan#update
- */
- this.$element.trigger('update.zf.magellan', [this.$active]);
- }
-
- /**
- * Destroys an instance of Magellan and resets the url of the window.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.off('.zf.trigger .zf.magellan').find('.' + this.options.activeClass).removeClass(this.options.activeClass);
-
- if (this.options.deepLinking) {
- var hash = this.$active[0].getAttribute('href');
- window.location.hash.replace(hash, '');
- }
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Magellan;
- }();
-
- /**
- * Default settings for plugin
- */
-
-
- Magellan.defaults = {
- /**
- * Amount of time, in ms, the animated scrolling should take between locations.
- * @option
- * @type {number}
- * @default 500
- */
- animationDuration: 500,
- /**
- * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.
- * @option
- * @type {string}
- * @default 'linear'
- * @see {@link https://api.jquery.com/animate|Jquery animate}
- */
- animationEasing: 'linear',
- /**
- * Number of pixels to use as a marker for location changes.
- * @option
- * @type {number}
- * @default 50
- */
- threshold: 50,
- /**
- * Class applied to the active locations link on the magellan container.
- * @option
- * @type {string}
- * @default 'active'
- */
- activeClass: 'active',
- /**
- * Allows the script to manipulate the url of the current page, and if supported, alter the history.
- * @option
- * @type {boolean}
- * @default false
- */
- deepLinking: false,
- /**
- * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.
- * @option
- * @type {number}
- * @default 0
- */
- barOffset: 0
- };
-
- // Window exports
- Foundation.plugin(Magellan, 'Magellan');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * OffCanvas module.
- * @module foundation.offcanvas
- * @requires foundation.util.keyboard
- * @requires foundation.util.mediaQuery
- * @requires foundation.util.triggers
- * @requires foundation.util.motion
- */
-
- var OffCanvas = function () {
- /**
- * Creates a new instance of an off-canvas wrapper.
- * @class
- * @fires OffCanvas#init
- * @param {Object} element - jQuery object to initialize.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function OffCanvas(element, options) {
- _classCallCheck(this, OffCanvas);
-
- this.$element = element;
- this.options = $.extend({}, OffCanvas.defaults, this.$element.data(), options);
- this.$lastTrigger = $();
- this.$triggers = $();
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'OffCanvas');
- Foundation.Keyboard.register('OffCanvas', {
- 'ESCAPE': 'close'
- });
- }
-
- /**
- * Initializes the off-canvas wrapper by adding the exit overlay (if needed).
- * @function
- * @private
- */
-
-
- _createClass(OffCanvas, [{
- key: '_init',
- value: function _init() {
- var id = this.$element.attr('id');
-
- this.$element.attr('aria-hidden', 'true');
-
- this.$element.addClass('is-transition-' + this.options.transition);
-
- // Find triggers that affect this element and add aria-expanded to them
- this.$triggers = $(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id);
-
- // Add an overlay over the content if necessary
- if (this.options.contentOverlay === true) {
- var overlay = document.createElement('div');
- var overlayPosition = $(this.$element).css("position") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute';
- overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition);
- this.$overlay = $(overlay);
- if (overlayPosition === 'is-overlay-fixed') {
- $('body').append(this.$overlay);
- } else {
- this.$element.siblings('[data-off-canvas-content]').append(this.$overlay);
- }
- }
-
- this.options.isRevealed = this.options.isRevealed || new RegExp(this.options.revealClass, 'g').test(this.$element[0].className);
-
- if (this.options.isRevealed === true) {
- this.options.revealOn = this.options.revealOn || this.$element[0].className.match(/(reveal-for-medium|reveal-for-large)/g)[0].split('-')[2];
- this._setMQChecker();
- }
- if (!this.options.transitionTime === true) {
- this.options.transitionTime = parseFloat(window.getComputedStyle($('[data-off-canvas]')[0]).transitionDuration) * 1000;
- }
- }
-
- /**
- * Adds event handlers to the off-canvas wrapper and the exit overlay.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- this.$element.off('.zf.trigger .zf.offcanvas').on({
- 'open.zf.trigger': this.open.bind(this),
- 'close.zf.trigger': this.close.bind(this),
- 'toggle.zf.trigger': this.toggle.bind(this),
- 'keydown.zf.offcanvas': this._handleKeyboard.bind(this)
- });
-
- if (this.options.closeOnClick === true) {
- var $target = this.options.contentOverlay ? this.$overlay : $('[data-off-canvas-content]');
- $target.on({ 'click.zf.offcanvas': this.close.bind(this) });
- }
- }
-
- /**
- * Applies event listener for elements that will reveal at certain breakpoints.
- * @private
- */
-
- }, {
- key: '_setMQChecker',
- value: function _setMQChecker() {
- var _this = this;
-
- $(window).on('changed.zf.mediaquery', function () {
- if (Foundation.MediaQuery.atLeast(_this.options.revealOn)) {
- _this.reveal(true);
- } else {
- _this.reveal(false);
- }
- }).one('load.zf.offcanvas', function () {
- if (Foundation.MediaQuery.atLeast(_this.options.revealOn)) {
- _this.reveal(true);
- }
- });
- }
-
- /**
- * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open.
- * @param {Boolean} isRevealed - true if element should be revealed.
- * @function
- */
-
- }, {
- key: 'reveal',
- value: function reveal(isRevealed) {
- var $closer = this.$element.find('[data-close]');
- if (isRevealed) {
- this.close();
- this.isRevealed = true;
- this.$element.attr('aria-hidden', 'false');
- this.$element.off('open.zf.trigger toggle.zf.trigger');
- if ($closer.length) {
- $closer.hide();
- }
- } else {
- this.isRevealed = false;
- this.$element.attr('aria-hidden', 'true');
- this.$element.off('open.zf.trigger toggle.zf.trigger').on({
- 'open.zf.trigger': this.open.bind(this),
- 'toggle.zf.trigger': this.toggle.bind(this)
- });
- if ($closer.length) {
- $closer.show();
- }
- }
- }
-
- /**
- * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers.
- * @private
- */
-
- }, {
- key: '_stopScrolling',
- value: function _stopScrolling(event) {
- return false;
- }
-
- // Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios
- // Only really works for y, not sure how to extend to x or if we need to.
-
- }, {
- key: '_recordScrollable',
- value: function _recordScrollable(event) {
- var elem = this; // called from event handler context with this as elem
-
- // If the element is scrollable (content overflows), then...
- if (elem.scrollHeight !== elem.clientHeight) {
- // If we're at the top, scroll down one pixel to allow scrolling up
- if (elem.scrollTop === 0) {
- elem.scrollTop = 1;
- }
- // If we're at the bottom, scroll up one pixel to allow scrolling down
- if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) {
- elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1;
- }
- }
- elem.allowUp = elem.scrollTop > 0;
- elem.allowDown = elem.scrollTop < elem.scrollHeight - elem.clientHeight;
- elem.lastY = event.originalEvent.pageY;
- }
- }, {
- key: '_stopScrollPropagation',
- value: function _stopScrollPropagation(event) {
- var elem = this; // called from event handler context with this as elem
- var up = event.pageY < elem.lastY;
- var down = !up;
- elem.lastY = event.pageY;
-
- if (up && elem.allowUp || down && elem.allowDown) {
- event.stopPropagation();
- } else {
- event.preventDefault();
- }
- }
-
- /**
- * Opens the off-canvas menu.
- * @function
- * @param {Object} event - Event object passed from listener.
- * @param {jQuery} trigger - element that triggered the off-canvas to open.
- * @fires OffCanvas#opened
- */
-
- }, {
- key: 'open',
- value: function open(event, trigger) {
- if (this.$element.hasClass('is-open') || this.isRevealed) {
- return;
- }
- var _this = this;
-
- if (trigger) {
- this.$lastTrigger = trigger;
- }
-
- if (this.options.forceTo === 'top') {
- window.scrollTo(0, 0);
- } else if (this.options.forceTo === 'bottom') {
- window.scrollTo(0, document.body.scrollHeight);
- }
-
- /**
- * Fires when the off-canvas menu opens.
- * @event OffCanvas#opened
- */
- _this.$element.addClass('is-open');
-
- this.$triggers.attr('aria-expanded', 'true');
- this.$element.attr('aria-hidden', 'false').trigger('opened.zf.offcanvas');
-
- // If `contentScroll` is set to false, add class and disable scrolling on touch devices.
- if (this.options.contentScroll === false) {
- $('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling);
- this.$element.on('touchstart', this._recordScrollable);
- this.$element.on('touchmove', this._stopScrollPropagation);
- }
-
- if (this.options.contentOverlay === true) {
- this.$overlay.addClass('is-visible');
- }
-
- if (this.options.closeOnClick === true && this.options.contentOverlay === true) {
- this.$overlay.addClass('is-closable');
- }
-
- if (this.options.autoFocus === true) {
- this.$element.one(Foundation.transitionend(this.$element), function () {
- var canvasFocus = _this.$element.find('[data-autofocus]');
- if (canvasFocus.length) {
- canvasFocus.eq(0).focus();
- } else {
- _this.$element.find('a, button').eq(0).focus();
- }
- });
- }
-
- if (this.options.trapFocus === true) {
- this.$element.siblings('[data-off-canvas-content]').attr('tabindex', '-1');
- Foundation.Keyboard.trapFocus(this.$element);
- }
- }
-
- /**
- * Closes the off-canvas menu.
- * @function
- * @param {Function} cb - optional cb to fire after closure.
- * @fires OffCanvas#closed
- */
-
- }, {
- key: 'close',
- value: function close(cb) {
- if (!this.$element.hasClass('is-open') || this.isRevealed) {
- return;
- }
-
- var _this = this;
-
- _this.$element.removeClass('is-open');
-
- this.$element.attr('aria-hidden', 'true')
- /**
- * Fires when the off-canvas menu opens.
- * @event OffCanvas#closed
- */
- .trigger('closed.zf.offcanvas');
-
- // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices.
- if (this.options.contentScroll === false) {
- $('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling);
- this.$element.off('touchstart', this._recordScrollable);
- this.$element.off('touchmove', this._stopScrollPropagation);
- }
-
- if (this.options.contentOverlay === true) {
- this.$overlay.removeClass('is-visible');
- }
-
- if (this.options.closeOnClick === true && this.options.contentOverlay === true) {
- this.$overlay.removeClass('is-closable');
- }
-
- this.$triggers.attr('aria-expanded', 'false');
-
- if (this.options.trapFocus === true) {
- this.$element.siblings('[data-off-canvas-content]').removeAttr('tabindex');
- Foundation.Keyboard.releaseFocus(this.$element);
- }
- }
-
- /**
- * Toggles the off-canvas menu open or closed.
- * @function
- * @param {Object} event - Event object passed from listener.
- * @param {jQuery} trigger - element that triggered the off-canvas to open.
- */
-
- }, {
- key: 'toggle',
- value: function toggle(event, trigger) {
- if (this.$element.hasClass('is-open')) {
- this.close(event, trigger);
- } else {
- this.open(event, trigger);
- }
- }
-
- /**
- * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu.
- * @function
- * @private
- */
-
- }, {
- key: '_handleKeyboard',
- value: function _handleKeyboard(e) {
- var _this2 = this;
-
- Foundation.Keyboard.handleKey(e, 'OffCanvas', {
- close: function close() {
- _this2.close();
- _this2.$lastTrigger.focus();
- return true;
- },
- handled: function handled() {
- e.stopPropagation();
- e.preventDefault();
- }
- });
- }
-
- /**
- * Destroys the offcanvas plugin.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.close();
- this.$element.off('.zf.trigger .zf.offcanvas');
- this.$overlay.off('.zf.offcanvas');
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return OffCanvas;
- }();
-
- OffCanvas.defaults = {
- /**
- * Allow the user to click outside of the menu to close it.
- * @option
- * @type {boolean}
- * @default true
- */
- closeOnClick: true,
-
- /**
- * Adds an overlay on top of `[data-off-canvas-content]`.
- * @option
- * @type {boolean}
- * @default true
- */
- contentOverlay: true,
-
- /**
- * Enable/disable scrolling of the main content when an off canvas panel is open.
- * @option
- * @type {boolean}
- * @default true
- */
- contentScroll: true,
-
- /**
- * Amount of time in ms the open and close transition requires. If none selected, pulls from body style.
- * @option
- * @type {number}
- * @default 0
- */
- transitionTime: 0,
-
- /**
- * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'.
- * @option
- * @type {string}
- * @default push
- */
- transition: 'push',
-
- /**
- * Force the page to scroll to top or bottom on open.
- * @option
- * @type {?string}
- * @default null
- */
- forceTo: null,
-
- /**
- * Allow the offcanvas to remain open for certain breakpoints.
- * @option
- * @type {boolean}
- * @default false
- */
- isRevealed: false,
-
- /**
- * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option.
- * @option
- * @type {?string}
- * @default null
- */
- revealOn: null,
-
- /**
- * Force focus to the offcanvas on open. If true, will focus the opening trigger on close.
- * @option
- * @type {boolean}
- * @default true
- */
- autoFocus: true,
-
- /**
- * Class used to force an offcanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`.
- * @option
- * @type {string}
- * @default reveal-for-
- * @todo improve the regex testing for this.
- */
- revealClass: 'reveal-for-',
-
- /**
- * Triggers optional focus trapping when opening an offcanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes.
- * @option
- * @type {boolean}
- * @default false
- */
- trapFocus: false
- };
-
- // Window exports
- Foundation.plugin(OffCanvas, 'OffCanvas');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Orbit module.
- * @module foundation.orbit
- * @requires foundation.util.keyboard
- * @requires foundation.util.motion
- * @requires foundation.util.timerAndImageLoader
- * @requires foundation.util.touch
- */
-
- var Orbit = function () {
- /**
- * Creates a new instance of an orbit carousel.
- * @class
- * @param {jQuery} element - jQuery object to make into an Orbit Carousel.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Orbit(element, options) {
- _classCallCheck(this, Orbit);
-
- this.$element = element;
- this.options = $.extend({}, Orbit.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Orbit');
- Foundation.Keyboard.register('Orbit', {
- 'ltr': {
- 'ARROW_RIGHT': 'next',
- 'ARROW_LEFT': 'previous'
- },
- 'rtl': {
- 'ARROW_LEFT': 'next',
- 'ARROW_RIGHT': 'previous'
- }
- });
- }
-
- /**
- * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation.
- * @function
- * @private
- */
-
-
- _createClass(Orbit, [{
- key: '_init',
- value: function _init() {
- // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide
- this._reset();
-
- this.$wrapper = this.$element.find('.' + this.options.containerClass);
- this.$slides = this.$element.find('.' + this.options.slideClass);
-
- var $images = this.$element.find('img'),
- initActive = this.$slides.filter('.is-active'),
- id = this.$element[0].id || Foundation.GetYoDigits(6, 'orbit');
-
- this.$element.attr({
- 'data-resize': id,
- 'id': id
- });
-
- if (!initActive.length) {
- this.$slides.eq(0).addClass('is-active');
- }
-
- if (!this.options.useMUI) {
- this.$slides.addClass('no-motionui');
- }
-
- if ($images.length) {
- Foundation.onImagesLoaded($images, this._prepareForOrbit.bind(this));
- } else {
- this._prepareForOrbit(); //hehe
- }
-
- if (this.options.bullets) {
- this._loadBullets();
- }
-
- this._events();
-
- if (this.options.autoPlay && this.$slides.length > 1) {
- this.geoSync();
- }
-
- if (this.options.accessible) {
- // allow wrapper to be focusable to enable arrow navigation
- this.$wrapper.attr('tabindex', 0);
- }
- }
-
- /**
- * Creates a jQuery collection of bullets, if they are being used.
- * @function
- * @private
- */
-
- }, {
- key: '_loadBullets',
- value: function _loadBullets() {
- this.$bullets = this.$element.find('.' + this.options.boxOfBullets).find('button');
- }
-
- /**
- * Sets a `timer` object on the orbit, and starts the counter for the next slide.
- * @function
- */
-
- }, {
- key: 'geoSync',
- value: function geoSync() {
- var _this = this;
- this.timer = new Foundation.Timer(this.$element, {
- duration: this.options.timerDelay,
- infinite: false
- }, function () {
- _this.changeSlide(true);
- });
- this.timer.start();
- }
-
- /**
- * Sets wrapper and slide heights for the orbit.
- * @function
- * @private
- */
-
- }, {
- key: '_prepareForOrbit',
- value: function _prepareForOrbit() {
- var _this = this;
- this._setWrapperHeight();
- }
-
- /**
- * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height.
- * @function
- * @private
- * @param {Function} cb - a callback function to fire when complete.
- */
-
- }, {
- key: '_setWrapperHeight',
- value: function _setWrapperHeight(cb) {
- //rewrite this to `for` loop
- var max = 0,
- temp,
- counter = 0,
- _this = this;
-
- this.$slides.each(function () {
- temp = this.getBoundingClientRect().height;
- $(this).attr('data-slide', counter);
-
- if (_this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) {
- //if not the active slide, set css position and display property
- $(this).css({ 'position': 'relative', 'display': 'none' });
- }
- max = temp > max ? temp : max;
- counter++;
- });
-
- if (counter === this.$slides.length) {
- this.$wrapper.css({ 'height': max }); //only change the wrapper height property once.
- if (cb) {
- cb(max);
- } //fire callback with max height dimension.
- }
- }
-
- /**
- * Sets the max-height of each slide.
- * @function
- * @private
- */
-
- }, {
- key: '_setSlideHeight',
- value: function _setSlideHeight(height) {
- this.$slides.each(function () {
- $(this).css('max-height', height);
- });
- }
-
- /**
- * Adds event listeners to basically everything within the element.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- //***************************************
- //**Now using custom event - thanks to:**
- //** Yohai Ararat of Toronto **
- //***************************************
- //
- this.$element.off('.resizeme.zf.trigger').on({
- 'resizeme.zf.trigger': this._prepareForOrbit.bind(this)
- });
- if (this.$slides.length > 1) {
-
- if (this.options.swipe) {
- this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit').on('swipeleft.zf.orbit', function (e) {
- e.preventDefault();
- _this.changeSlide(true);
- }).on('swiperight.zf.orbit', function (e) {
- e.preventDefault();
- _this.changeSlide(false);
- });
- }
- //***************************************
-
- if (this.options.autoPlay) {
- this.$slides.on('click.zf.orbit', function () {
- _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true);
- _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start']();
- });
-
- if (this.options.pauseOnHover) {
- this.$element.on('mouseenter.zf.orbit', function () {
- _this.timer.pause();
- }).on('mouseleave.zf.orbit', function () {
- if (!_this.$element.data('clickedOn')) {
- _this.timer.start();
- }
- });
- }
- }
-
- if (this.options.navButtons) {
- var $controls = this.$element.find('.' + this.options.nextClass + ', .' + this.options.prevClass);
- $controls.attr('tabindex', 0)
- //also need to handle enter/return and spacebar key presses
- .on('click.zf.orbit touchend.zf.orbit', function (e) {
- e.preventDefault();
- _this.changeSlide($(this).hasClass(_this.options.nextClass));
- });
- }
-
- if (this.options.bullets) {
- this.$bullets.on('click.zf.orbit touchend.zf.orbit', function () {
- if (/is-active/g.test(this.className)) {
- return false;
- } //if this is active, kick out of function.
- var idx = $(this).data('slide'),
- ltr = idx > _this.$slides.filter('.is-active').data('slide'),
- $slide = _this.$slides.eq(idx);
-
- _this.changeSlide(ltr, $slide, idx);
- });
- }
-
- if (this.options.accessible) {
- this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) {
- // handle keyboard event with keyboard util
- Foundation.Keyboard.handleKey(e, 'Orbit', {
- next: function next() {
- _this.changeSlide(true);
- },
- previous: function previous() {
- _this.changeSlide(false);
- },
- handled: function handled() {
- // if bullet is focused, make sure focus moves
- if ($(e.target).is(_this.$bullets)) {
- _this.$bullets.filter('.is-active').focus();
- }
- }
- });
- });
- }
- }
- }
-
- /**
- * Resets Orbit so it can be reinitialized
- */
-
- }, {
- key: '_reset',
- value: function _reset() {
- // Don't do anything if there are no slides (first run)
- if (typeof this.$slides == 'undefined') {
- return;
- }
-
- if (this.$slides.length > 1) {
- // Remove old events
- this.$element.off('.zf.orbit').find('*').off('.zf.orbit');
-
- // Restart timer if autoPlay is enabled
- if (this.options.autoPlay) {
- this.timer.restart();
- }
-
- // Reset all sliddes
- this.$slides.each(function (el) {
- $(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide();
- });
-
- // Show the first slide
- this.$slides.first().addClass('is-active').show();
-
- // Triggers when the slide has finished animating
- this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]);
-
- // Select first bullet if bullets are present
- if (this.options.bullets) {
- this._updateBullets(0);
- }
- }
- }
-
- /**
- * Changes the current slide to a new one.
- * @function
- * @param {Boolean} isLTR - flag if the slide should move left to right.
- * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected.
- * @param {Number} idx - the index of the new slide in its collection, if one chosen.
- * @fires Orbit#slidechange
- */
-
- }, {
- key: 'changeSlide',
- value: function changeSlide(isLTR, chosenSlide, idx) {
- if (!this.$slides) {
- return;
- } // Don't freak out if we're in the middle of cleanup
- var $curSlide = this.$slides.filter('.is-active').eq(0);
-
- if (/mui/g.test($curSlide[0].className)) {
- return false;
- } //if the slide is currently animating, kick out of the function
-
- var $firstSlide = this.$slides.first(),
- $lastSlide = this.$slides.last(),
- dirIn = isLTR ? 'Right' : 'Left',
- dirOut = isLTR ? 'Left' : 'Right',
- _this = this,
- $newSlide;
-
- if (!chosenSlide) {
- //most of the time, this will be auto played or clicked from the navButtons.
- $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!!
- this.options.infiniteWrap ? $curSlide.next('.' + this.options.slideClass).length ? $curSlide.next('.' + this.options.slideClass) : $firstSlide : $curSlide.next('.' + this.options.slideClass) : //pick next slide if moving left to right
- this.options.infiniteWrap ? $curSlide.prev('.' + this.options.slideClass).length ? $curSlide.prev('.' + this.options.slideClass) : $lastSlide : $curSlide.prev('.' + this.options.slideClass); //pick prev slide if moving right to left
- } else {
- $newSlide = chosenSlide;
- }
-
- if ($newSlide.length) {
- /**
- * Triggers before the next slide starts animating in and only if a next slide has been found.
- * @event Orbit#beforeslidechange
- */
- this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]);
-
- if (this.options.bullets) {
- idx = idx || this.$slides.index($newSlide); //grab index to update bullets
- this._updateBullets(idx);
- }
-
- if (this.options.useMUI && !this.$element.is(':hidden')) {
- Foundation.Motion.animateIn($newSlide.addClass('is-active').css({ 'position': 'absolute', 'top': 0 }), this.options['animInFrom' + dirIn], function () {
- $newSlide.css({ 'position': 'relative', 'display': 'block' }).attr('aria-live', 'polite');
- });
-
- Foundation.Motion.animateOut($curSlide.removeClass('is-active'), this.options['animOutTo' + dirOut], function () {
- $curSlide.removeAttr('aria-live');
- if (_this.options.autoPlay && !_this.timer.isPaused) {
- _this.timer.restart();
- }
- //do stuff?
- });
- } else {
- $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide();
- $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show();
- if (this.options.autoPlay && !this.timer.isPaused) {
- this.timer.restart();
- }
- }
- /**
- * Triggers when the slide has finished animating in.
- * @event Orbit#slidechange
- */
- this.$element.trigger('slidechange.zf.orbit', [$newSlide]);
- }
- }
-
- /**
- * Updates the active state of the bullets, if displayed.
- * @function
- * @private
- * @param {Number} idx - the index of the current slide.
- */
-
- }, {
- key: '_updateBullets',
- value: function _updateBullets(idx) {
- var $oldBullet = this.$element.find('.' + this.options.boxOfBullets).find('.is-active').removeClass('is-active').blur(),
- span = $oldBullet.find('span:last').detach(),
- $newBullet = this.$bullets.eq(idx).addClass('is-active').append(span);
- }
-
- /**
- * Destroys the carousel and hides the element.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide();
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Orbit;
- }();
-
- Orbit.defaults = {
- /**
- * Tells the JS to look for and loadBullets.
- * @option
- * @type {boolean}
- * @default true
- */
- bullets: true,
- /**
- * Tells the JS to apply event listeners to nav buttons
- * @option
- * @type {boolean}
- * @default true
- */
- navButtons: true,
- /**
- * motion-ui animation class to apply
- * @option
- * @type {string}
- * @default 'slide-in-right'
- */
- animInFromRight: 'slide-in-right',
- /**
- * motion-ui animation class to apply
- * @option
- * @type {string}
- * @default 'slide-out-right'
- */
- animOutToRight: 'slide-out-right',
- /**
- * motion-ui animation class to apply
- * @option
- * @type {string}
- * @default 'slide-in-left'
- *
- */
- animInFromLeft: 'slide-in-left',
- /**
- * motion-ui animation class to apply
- * @option
- * @type {string}
- * @default 'slide-out-left'
- */
- animOutToLeft: 'slide-out-left',
- /**
- * Allows Orbit to automatically animate on page load.
- * @option
- * @type {boolean}
- * @default true
- */
- autoPlay: true,
- /**
- * Amount of time, in ms, between slide transitions
- * @option
- * @type {number}
- * @default 5000
- */
- timerDelay: 5000,
- /**
- * Allows Orbit to infinitely loop through the slides
- * @option
- * @type {boolean}
- * @default true
- */
- infiniteWrap: true,
- /**
- * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library
- * @option
- * @type {boolean}
- * @default true
- */
- swipe: true,
- /**
- * Allows the timing function to pause animation on hover.
- * @option
- * @type {boolean}
- * @default true
- */
- pauseOnHover: true,
- /**
- * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys
- * @option
- * @type {boolean}
- * @default true
- */
- accessible: true,
- /**
- * Class applied to the container of Orbit
- * @option
- * @type {string}
- * @default 'orbit-container'
- */
- containerClass: 'orbit-container',
- /**
- * Class applied to individual slides.
- * @option
- * @type {string}
- * @default 'orbit-slide'
- */
- slideClass: 'orbit-slide',
- /**
- * Class applied to the bullet container. You're welcome.
- * @option
- * @type {string}
- * @default 'orbit-bullets'
- */
- boxOfBullets: 'orbit-bullets',
- /**
- * Class applied to the `next` navigation button.
- * @option
- * @type {string}
- * @default 'orbit-next'
- */
- nextClass: 'orbit-next',
- /**
- * Class applied to the `previous` navigation button.
- * @option
- * @type {string}
- * @default 'orbit-previous'
- */
- prevClass: 'orbit-previous',
- /**
- * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatability.
- * @option
- * @type {boolean}
- * @default true
- */
- useMUI: true
- };
-
- // Window exports
- Foundation.plugin(Orbit, 'Orbit');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * ResponsiveMenu module.
- * @module foundation.responsiveMenu
- * @requires foundation.util.triggers
- * @requires foundation.util.mediaQuery
- */
-
- var ResponsiveMenu = function () {
- /**
- * Creates a new instance of a responsive menu.
- * @class
- * @fires ResponsiveMenu#init
- * @param {jQuery} element - jQuery object to make into a dropdown menu.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function ResponsiveMenu(element, options) {
- _classCallCheck(this, ResponsiveMenu);
-
- this.$element = $(element);
- this.rules = this.$element.data('responsive-menu');
- this.currentMq = null;
- this.currentPlugin = null;
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'ResponsiveMenu');
- }
-
- /**
- * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.
- * @function
- * @private
- */
-
-
- _createClass(ResponsiveMenu, [{
- key: '_init',
- value: function _init() {
- // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules
- if (typeof this.rules === 'string') {
- var rulesTree = {};
-
- // Parse rules from "classes" pulled from data attribute
- var rules = this.rules.split(' ');
-
- // Iterate through every rule found
- for (var i = 0; i < rules.length; i++) {
- var rule = rules[i].split('-');
- var ruleSize = rule.length > 1 ? rule[0] : 'small';
- var rulePlugin = rule.length > 1 ? rule[1] : rule[0];
-
- if (MenuPlugins[rulePlugin] !== null) {
- rulesTree[ruleSize] = MenuPlugins[rulePlugin];
- }
- }
-
- this.rules = rulesTree;
- }
-
- if (!$.isEmptyObject(this.rules)) {
- this._checkMediaQueries();
- }
- // Add data-mutate since children may need it.
- this.$element.attr('data-mutate', this.$element.attr('data-mutate') || Foundation.GetYoDigits(6, 'responsive-menu'));
- }
-
- /**
- * Initializes events for the Menu.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- $(window).on('changed.zf.mediaquery', function () {
- _this._checkMediaQueries();
- });
- // $(window).on('resize.zf.ResponsiveMenu', function() {
- // _this._checkMediaQueries();
- // });
- }
-
- /**
- * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.
- * @function
- * @private
- */
-
- }, {
- key: '_checkMediaQueries',
- value: function _checkMediaQueries() {
- var matchedMq,
- _this = this;
- // Iterate through each rule and find the last matching rule
- $.each(this.rules, function (key) {
- if (Foundation.MediaQuery.atLeast(key)) {
- matchedMq = key;
- }
- });
-
- // No match? No dice
- if (!matchedMq) return;
-
- // Plugin already initialized? We good
- if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;
-
- // Remove existing plugin-specific CSS classes
- $.each(MenuPlugins, function (key, value) {
- _this.$element.removeClass(value.cssClass);
- });
-
- // Add the CSS class for the new plugin
- this.$element.addClass(this.rules[matchedMq].cssClass);
-
- // Create an instance of the new plugin
- if (this.currentPlugin) this.currentPlugin.destroy();
- this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});
- }
-
- /**
- * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.currentPlugin.destroy();
- $(window).off('.zf.ResponsiveMenu');
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return ResponsiveMenu;
- }();
-
- ResponsiveMenu.defaults = {};
-
- // The plugin matches the plugin classes with these plugin instances.
- var MenuPlugins = {
- dropdown: {
- cssClass: 'dropdown',
- plugin: Foundation._plugins['dropdown-menu'] || null
- },
- drilldown: {
- cssClass: 'drilldown',
- plugin: Foundation._plugins['drilldown'] || null
- },
- accordion: {
- cssClass: 'accordion-menu',
- plugin: Foundation._plugins['accordion-menu'] || null
- }
- };
-
- // Window exports
- Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * ResponsiveToggle module.
- * @module foundation.responsiveToggle
- * @requires foundation.util.mediaQuery
- */
-
- var ResponsiveToggle = function () {
- /**
- * Creates a new instance of Tab Bar.
- * @class
- * @fires ResponsiveToggle#init
- * @param {jQuery} element - jQuery object to attach tab bar functionality to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function ResponsiveToggle(element, options) {
- _classCallCheck(this, ResponsiveToggle);
-
- this.$element = $(element);
- this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'ResponsiveToggle');
- }
-
- /**
- * Initializes the tab bar by finding the target element, toggling element, and running update().
- * @function
- * @private
- */
-
-
- _createClass(ResponsiveToggle, [{
- key: '_init',
- value: function _init() {
- var targetID = this.$element.data('responsive-toggle');
- if (!targetID) {
- console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');
- }
-
- this.$targetMenu = $('#' + targetID);
- this.$toggler = this.$element.find('[data-toggle]').filter(function () {
- var target = $(this).data('toggle');
- return target === targetID || target === "";
- });
- this.options = $.extend({}, this.options, this.$targetMenu.data());
-
- // If they were set, parse the animation classes
- if (this.options.animate) {
- var input = this.options.animate.split(' ');
-
- this.animationIn = input[0];
- this.animationOut = input[1] || null;
- }
-
- this._update();
- }
-
- /**
- * Adds necessary event handlers for the tab bar to work.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- this._updateMqHandler = this._update.bind(this);
-
- $(window).on('changed.zf.mediaquery', this._updateMqHandler);
-
- this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));
- }
-
- /**
- * Checks the current media query to determine if the tab bar should be visible or hidden.
- * @function
- * @private
- */
-
- }, {
- key: '_update',
- value: function _update() {
- // Mobile
- if (!Foundation.MediaQuery.atLeast(this.options.hideFor)) {
- this.$element.show();
- this.$targetMenu.hide();
- }
-
- // Desktop
- else {
- this.$element.hide();
- this.$targetMenu.show();
- }
- }
-
- /**
- * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.
- * @function
- * @fires ResponsiveToggle#toggled
- */
-
- }, {
- key: 'toggleMenu',
- value: function toggleMenu() {
- var _this2 = this;
-
- if (!Foundation.MediaQuery.atLeast(this.options.hideFor)) {
- /**
- * Fires when the element attached to the tab bar toggles.
- * @event ResponsiveToggle#toggled
- */
- if (this.options.animate) {
- if (this.$targetMenu.is(':hidden')) {
- Foundation.Motion.animateIn(this.$targetMenu, this.animationIn, function () {
- _this2.$element.trigger('toggled.zf.responsiveToggle');
- _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');
- });
- } else {
- Foundation.Motion.animateOut(this.$targetMenu, this.animationOut, function () {
- _this2.$element.trigger('toggled.zf.responsiveToggle');
- });
- }
- } else {
- this.$targetMenu.toggle(0);
- this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');
- this.$element.trigger('toggled.zf.responsiveToggle');
- }
- }
- }
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.off('.zf.responsiveToggle');
- this.$toggler.off('.zf.responsiveToggle');
-
- $(window).off('changed.zf.mediaquery', this._updateMqHandler);
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return ResponsiveToggle;
- }();
-
- ResponsiveToggle.defaults = {
- /**
- * The breakpoint after which the menu is always shown, and the tab bar is hidden.
- * @option
- * @type {string}
- * @default 'medium'
- */
- hideFor: 'medium',
-
- /**
- * To decide if the toggle should be animated or not.
- * @option
- * @type {boolean}
- * @default false
- */
- animate: false
- };
-
- // Window exports
- Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Reveal module.
- * @module foundation.reveal
- * @requires foundation.util.keyboard
- * @requires foundation.util.box
- * @requires foundation.util.triggers
- * @requires foundation.util.mediaQuery
- * @requires foundation.util.motion if using animations
- */
-
- var Reveal = function () {
- /**
- * Creates a new instance of Reveal.
- * @class
- * @param {jQuery} element - jQuery object to use for the modal.
- * @param {Object} options - optional parameters.
- */
- function Reveal(element, options) {
- _classCallCheck(this, Reveal);
-
- this.$element = element;
- this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);
- this._init();
-
- Foundation.registerPlugin(this, 'Reveal');
- Foundation.Keyboard.register('Reveal', {
- 'ENTER': 'open',
- 'SPACE': 'open',
- 'ESCAPE': 'close'
- });
- }
-
- /**
- * Initializes the modal by adding the overlay and close buttons, (if selected).
- * @private
- */
-
-
- _createClass(Reveal, [{
- key: '_init',
- value: function _init() {
- this.id = this.$element.attr('id');
- this.isActive = false;
- this.cached = { mq: Foundation.MediaQuery.current };
- this.isMobile = mobileSniff();
-
- this.$anchor = $('[data-open="' + this.id + '"]').length ? $('[data-open="' + this.id + '"]') : $('[data-toggle="' + this.id + '"]');
- this.$anchor.attr({
- 'aria-controls': this.id,
- 'aria-haspopup': true,
- 'tabindex': 0
- });
-
- if (this.options.fullScreen || this.$element.hasClass('full')) {
- this.options.fullScreen = true;
- this.options.overlay = false;
- }
- if (this.options.overlay && !this.$overlay) {
- this.$overlay = this._makeOverlay(this.id);
- }
-
- this.$element.attr({
- 'role': 'dialog',
- 'aria-hidden': true,
- 'data-yeti-box': this.id,
- 'data-resize': this.id
- });
-
- if (this.$overlay) {
- this.$element.detach().appendTo(this.$overlay);
- } else {
- this.$element.detach().appendTo($(this.options.appendTo));
- this.$element.addClass('without-overlay');
- }
- this._events();
- if (this.options.deepLink && window.location.hash === '#' + this.id) {
- $(window).one('load.zf.reveal', this.open.bind(this));
- }
- }
-
- /**
- * Creates an overlay div to display behind the modal.
- * @private
- */
-
- }, {
- key: '_makeOverlay',
- value: function _makeOverlay() {
- return $('<div></div>').addClass('reveal-overlay').appendTo(this.options.appendTo);
- }
-
- /**
- * Updates position of modal
- * TODO: Figure out if we actually need to cache these values or if it doesn't matter
- * @private
- */
-
- }, {
- key: '_updatePosition',
- value: function _updatePosition() {
- var width = this.$element.outerWidth();
- var outerWidth = $(window).width();
- var height = this.$element.outerHeight();
- var outerHeight = $(window).height();
- var left, top;
- if (this.options.hOffset === 'auto') {
- left = parseInt((outerWidth - width) / 2, 10);
- } else {
- left = parseInt(this.options.hOffset, 10);
- }
- if (this.options.vOffset === 'auto') {
- if (height > outerHeight) {
- top = parseInt(Math.min(100, outerHeight / 10), 10);
- } else {
- top = parseInt((outerHeight - height) / 4, 10);
- }
- } else {
- top = parseInt(this.options.vOffset, 10);
- }
- this.$element.css({ top: top + 'px' });
- // only worry about left if we don't have an overlay or we havea horizontal offset,
- // otherwise we're perfectly in the middle
- if (!this.$overlay || this.options.hOffset !== 'auto') {
- this.$element.css({ left: left + 'px' });
- this.$element.css({ margin: '0px' });
- }
- }
-
- /**
- * Adds event handlers for the modal.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this2 = this;
-
- var _this = this;
-
- this.$element.on({
- 'open.zf.trigger': this.open.bind(this),
- 'close.zf.trigger': function closeZfTrigger(event, $element) {
- if (event.target === _this.$element[0] || $(event.target).parents('[data-closable]')[0] === $element) {
- // only close reveal when it's explicitly called
- return _this2.close.apply(_this2);
- }
- },
- 'toggle.zf.trigger': this.toggle.bind(this),
- 'resizeme.zf.trigger': function resizemeZfTrigger() {
- _this._updatePosition();
- }
- });
-
- if (this.$anchor.length) {
- this.$anchor.on('keydown.zf.reveal', function (e) {
- if (e.which === 13 || e.which === 32) {
- e.stopPropagation();
- e.preventDefault();
- _this.open();
- }
- });
- }
-
- if (this.options.closeOnClick && this.options.overlay) {
- this.$overlay.off('.zf.reveal').on('click.zf.reveal', function (e) {
- if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) {
- return;
- }
- _this.close();
- });
- }
- if (this.options.deepLink) {
- $(window).on('popstate.zf.reveal:' + this.id, this._handleState.bind(this));
- }
- }
-
- /**
- * Handles modal methods on back/forward button clicks or any other event that triggers popstate.
- * @private
- */
-
- }, {
- key: '_handleState',
- value: function _handleState(e) {
- if (window.location.hash === '#' + this.id && !this.isActive) {
- this.open();
- } else {
- this.close();
- }
- }
-
- /**
- * Opens the modal controlled by `this.$anchor`, and closes all others by default.
- * @function
- * @fires Reveal#closeme
- * @fires Reveal#open
- */
-
- }, {
- key: 'open',
- value: function open() {
- var _this3 = this;
-
- if (this.options.deepLink) {
- var hash = '#' + this.id;
-
- if (window.history.pushState) {
- window.history.pushState(null, null, hash);
- } else {
- window.location.hash = hash;
- }
- }
-
- this.isActive = true;
-
- // Make elements invisible, but remove display: none so we can get size and positioning
- this.$element.css({ 'visibility': 'hidden' }).show().scrollTop(0);
- if (this.options.overlay) {
- this.$overlay.css({ 'visibility': 'hidden' }).show();
- }
-
- this._updatePosition();
-
- this.$element.hide().css({ 'visibility': '' });
-
- if (this.$overlay) {
- this.$overlay.css({ 'visibility': '' }).hide();
- if (this.$element.hasClass('fast')) {
- this.$overlay.addClass('fast');
- } else if (this.$element.hasClass('slow')) {
- this.$overlay.addClass('slow');
- }
- }
-
- if (!this.options.multipleOpened) {
- /**
- * Fires immediately before the modal opens.
- * Closes any other modals that are currently open
- * @event Reveal#closeme
- */
- this.$element.trigger('closeme.zf.reveal', this.id);
- }
-
- var _this = this;
-
- function addRevealOpenClasses() {
- if (_this.isMobile) {
- if (!_this.originalScrollPos) {
- _this.originalScrollPos = window.pageYOffset;
- }
- $('html, body').addClass('is-reveal-open');
- } else {
- $('body').addClass('is-reveal-open');
- }
- }
- // Motion UI method of reveal
- if (this.options.animationIn) {
- var afterAnimation = function afterAnimation() {
- _this.$element.attr({
- 'aria-hidden': false,
- 'tabindex': -1
- }).focus();
- addRevealOpenClasses();
- Foundation.Keyboard.trapFocus(_this.$element);
- };
-
- if (this.options.overlay) {
- Foundation.Motion.animateIn(this.$overlay, 'fade-in');
- }
- Foundation.Motion.animateIn(this.$element, this.options.animationIn, function () {
- if (_this3.$element) {
- // protect against object having been removed
- _this3.focusableElements = Foundation.Keyboard.findFocusable(_this3.$element);
- afterAnimation();
- }
- });
- }
- // jQuery method of reveal
- else {
- if (this.options.overlay) {
- this.$overlay.show(0);
- }
- this.$element.show(this.options.showDelay);
- }
-
- // handle accessibility
- this.$element.attr({
- 'aria-hidden': false,
- 'tabindex': -1
- }).focus();
- Foundation.Keyboard.trapFocus(this.$element);
-
- /**
- * Fires when the modal has successfully opened.
- * @event Reveal#open
- */
- this.$element.trigger('open.zf.reveal');
-
- addRevealOpenClasses();
-
- setTimeout(function () {
- _this3._extraHandlers();
- }, 0);
- }
-
- /**
- * Adds extra event handlers for the body and window if necessary.
- * @private
- */
-
- }, {
- key: '_extraHandlers',
- value: function _extraHandlers() {
- var _this = this;
- if (!this.$element) {
- return;
- } // If we're in the middle of cleanup, don't freak out
- this.focusableElements = Foundation.Keyboard.findFocusable(this.$element);
-
- if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {
- $('body').on('click.zf.reveal', function (e) {
- if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) {
- return;
- }
- _this.close();
- });
- }
-
- if (this.options.closeOnEsc) {
- $(window).on('keydown.zf.reveal', function (e) {
- Foundation.Keyboard.handleKey(e, 'Reveal', {
- close: function close() {
- if (_this.options.closeOnEsc) {
- _this.close();
- _this.$anchor.focus();
- }
- }
- });
- });
- }
-
- // lock focus within modal while tabbing
- this.$element.on('keydown.zf.reveal', function (e) {
- var $target = $(this);
- // handle keyboard event with keyboard util
- Foundation.Keyboard.handleKey(e, 'Reveal', {
- open: function open() {
- if (_this.$element.find(':focus').is(_this.$element.find('[data-close]'))) {
- setTimeout(function () {
- // set focus back to anchor if close button has been activated
- _this.$anchor.focus();
- }, 1);
- } else if ($target.is(_this.focusableElements)) {
- // dont't trigger if acual element has focus (i.e. inputs, links, ...)
- _this.open();
- }
- },
- close: function close() {
- if (_this.options.closeOnEsc) {
- _this.close();
- _this.$anchor.focus();
- }
- },
- handled: function handled(preventDefault) {
- if (preventDefault) {
- e.preventDefault();
- }
- }
- });
- });
- }
-
- /**
- * Closes the modal.
- * @function
- * @fires Reveal#closed
- */
-
- }, {
- key: 'close',
- value: function close() {
- if (!this.isActive || !this.$element.is(':visible')) {
- return false;
- }
- var _this = this;
-
- // Motion UI method of hiding
- if (this.options.animationOut) {
- if (this.options.overlay) {
- Foundation.Motion.animateOut(this.$overlay, 'fade-out', finishUp);
- } else {
- finishUp();
- }
-
- Foundation.Motion.animateOut(this.$element, this.options.animationOut);
- }
- // jQuery method of hiding
- else {
-
- this.$element.hide(this.options.hideDelay);
-
- if (this.options.overlay) {
- this.$overlay.hide(0, finishUp);
- } else {
- finishUp();
- }
- }
-
- // Conditionals to remove extra event listeners added on open
- if (this.options.closeOnEsc) {
- $(window).off('keydown.zf.reveal');
- }
-
- if (!this.options.overlay && this.options.closeOnClick) {
- $('body').off('click.zf.reveal');
- }
-
- this.$element.off('keydown.zf.reveal');
-
- function finishUp() {
- if (_this.isMobile) {
- if ($('.reveal:visible').length === 0) {
- $('html, body').removeClass('is-reveal-open');
- }
- if (_this.originalScrollPos) {
- $('body').scrollTop(_this.originalScrollPos);
- _this.originalScrollPos = null;
- }
- } else {
- if ($('.reveal:visible').length === 0) {
- $('body').removeClass('is-reveal-open');
- }
- }
-
- Foundation.Keyboard.releaseFocus(_this.$element);
-
- _this.$element.attr('aria-hidden', true);
-
- /**
- * Fires when the modal is done closing.
- * @event Reveal#closed
- */
- _this.$element.trigger('closed.zf.reveal');
- }
-
- /**
- * Resets the modal content
- * This prevents a running video to keep going in the background
- */
- if (this.options.resetOnClose) {
- this.$element.html(this.$element.html());
- }
-
- this.isActive = false;
- if (_this.options.deepLink) {
- if (window.history.replaceState) {
- window.history.replaceState('', document.title, window.location.href.replace('#' + this.id, ''));
- } else {
- window.location.hash = '';
- }
- }
- }
-
- /**
- * Toggles the open/closed state of a modal.
- * @function
- */
-
- }, {
- key: 'toggle',
- value: function toggle() {
- if (this.isActive) {
- this.close();
- } else {
- this.open();
- }
- }
- }, {
- key: 'destroy',
-
-
- /**
- * Destroys an instance of a modal.
- * @function
- */
- value: function destroy() {
- if (this.options.overlay) {
- this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()
- this.$overlay.hide().off().remove();
- }
- this.$element.hide().off();
- this.$anchor.off('.zf');
- $(window).off('.zf.reveal:' + this.id);
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Reveal;
- }();
-
- Reveal.defaults = {
- /**
- * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.
- * @option
- * @type {string}
- * @default ''
- */
- animationIn: '',
- /**
- * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.
- * @option
- * @type {string}
- * @default ''
- */
- animationOut: '',
- /**
- * Time, in ms, to delay the opening of a modal after a click if no animation used.
- * @option
- * @type {number}
- * @default 0
- */
- showDelay: 0,
- /**
- * Time, in ms, to delay the closing of a modal after a click if no animation used.
- * @option
- * @type {number}
- * @default 0
- */
- hideDelay: 0,
- /**
- * Allows a click on the body/overlay to close the modal.
- * @option
- * @type {boolean}
- * @default true
- */
- closeOnClick: true,
- /**
- * Allows the modal to close if the user presses the `ESCAPE` key.
- * @option
- * @type {boolean}
- * @default true
- */
- closeOnEsc: true,
- /**
- * If true, allows multiple modals to be displayed at once.
- * @option
- * @type {boolean}
- * @default false
- */
- multipleOpened: false,
- /**
- * Distance, in pixels, the modal should push down from the top of the screen.
- * @option
- * @type {number|string}
- * @default auto
- */
- vOffset: 'auto',
- /**
- * Distance, in pixels, the modal should push in from the side of the screen.
- * @option
- * @type {number|string}
- * @default auto
- */
- hOffset: 'auto',
- /**
- * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.
- * @option
- * @type {boolean}
- * @default false
- */
- fullScreen: false,
- /**
- * Percentage of screen height the modal should push up from the bottom of the view.
- * @option
- * @type {number}
- * @default 10
- */
- btmOffsetPct: 10,
- /**
- * Allows the modal to generate an overlay div, which will cover the view when modal opens.
- * @option
- * @type {boolean}
- * @default true
- */
- overlay: true,
- /**
- * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.
- * @option
- * @type {boolean}
- * @default false
- */
- resetOnClose: false,
- /**
- * Allows the modal to alter the url on open/close, and allows the use of the `back` button to close modals. ALSO, allows a modal to auto-maniacally open on page load IF the hash === the modal's user-set id.
- * @option
- * @type {boolean}
- * @default false
- */
- deepLink: false,
- /**
- * Allows the modal to append to custom div.
- * @option
- * @type {string}
- * @default "body"
- */
- appendTo: "body"
-
- };
-
- // Window exports
- Foundation.plugin(Reveal, 'Reveal');
-
- function iPhoneSniff() {
- return (/iP(ad|hone|od).*OS/.test(window.navigator.userAgent)
- );
- }
-
- function androidSniff() {
- return (/Android/.test(window.navigator.userAgent)
- );
- }
-
- function mobileSniff() {
- return iPhoneSniff() || androidSniff();
- }
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Slider module.
- * @module foundation.slider
- * @requires foundation.util.motion
- * @requires foundation.util.triggers
- * @requires foundation.util.keyboard
- * @requires foundation.util.touch
- */
-
- var Slider = function () {
- /**
- * Creates a new instance of a slider control.
- * @class
- * @param {jQuery} element - jQuery object to make into a slider control.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Slider(element, options) {
- _classCallCheck(this, Slider);
-
- this.$element = element;
- this.options = $.extend({}, Slider.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Slider');
- Foundation.Keyboard.register('Slider', {
- 'ltr': {
- 'ARROW_RIGHT': 'increase',
- 'ARROW_UP': 'increase',
- 'ARROW_DOWN': 'decrease',
- 'ARROW_LEFT': 'decrease',
- 'SHIFT_ARROW_RIGHT': 'increase_fast',
- 'SHIFT_ARROW_UP': 'increase_fast',
- 'SHIFT_ARROW_DOWN': 'decrease_fast',
- 'SHIFT_ARROW_LEFT': 'decrease_fast'
- },
- 'rtl': {
- 'ARROW_LEFT': 'increase',
- 'ARROW_RIGHT': 'decrease',
- 'SHIFT_ARROW_LEFT': 'increase_fast',
- 'SHIFT_ARROW_RIGHT': 'decrease_fast'
- }
- });
- }
-
- /**
- * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).
- * @function
- * @private
- */
-
-
- _createClass(Slider, [{
- key: '_init',
- value: function _init() {
- this.inputs = this.$element.find('input');
- this.handles = this.$element.find('[data-slider-handle]');
-
- this.$handle = this.handles.eq(0);
- this.$input = this.inputs.length ? this.inputs.eq(0) : $('#' + this.$handle.attr('aria-controls'));
- this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);
-
- var isDbl = false,
- _this = this;
- if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {
- this.options.disabled = true;
- this.$element.addClass(this.options.disabledClass);
- }
- if (!this.inputs.length) {
- this.inputs = $().add(this.$input);
- this.options.binding = true;
- }
-
- this._setInitAttr(0);
-
- if (this.handles[1]) {
- this.options.doubleSided = true;
- this.$handle2 = this.handles.eq(1);
- this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $('#' + this.$handle2.attr('aria-controls'));
-
- if (!this.inputs[1]) {
- this.inputs = this.inputs.add(this.$input2);
- }
- isDbl = true;
-
- // this.$handle.triggerHandler('click.zf.slider');
- this._setInitAttr(1);
- }
-
- // Set handle positions
- this.setHandles();
-
- this._events();
- }
- }, {
- key: 'setHandles',
- value: function setHandles() {
- var _this2 = this;
-
- if (this.handles[1]) {
- this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, function () {
- _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val(), true);
- });
- } else {
- this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true);
- }
- }
- }, {
- key: '_reflow',
- value: function _reflow() {
- this.setHandles();
- }
- /**
- * @function
- * @private
- * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)
- */
-
- }, {
- key: '_pctOfBar',
- value: function _pctOfBar(value) {
- var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start);
-
- switch (this.options.positionValueFunction) {
- case "pow":
- pctOfBar = this._logTransform(pctOfBar);
- break;
- case "log":
- pctOfBar = this._powTransform(pctOfBar);
- break;
- }
-
- return pctOfBar.toFixed(2);
- }
-
- /**
- * @function
- * @private
- * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value
- */
-
- }, {
- key: '_value',
- value: function _value(pctOfBar) {
- switch (this.options.positionValueFunction) {
- case "pow":
- pctOfBar = this._powTransform(pctOfBar);
- break;
- case "log":
- pctOfBar = this._logTransform(pctOfBar);
- break;
- }
- var value = (this.options.end - this.options.start) * pctOfBar + this.options.start;
-
- return value;
- }
-
- /**
- * @function
- * @private
- * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function
- */
-
- }, {
- key: '_logTransform',
- value: function _logTransform(value) {
- return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1);
- }
-
- /**
- * @function
- * @private
- * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function
- */
-
- }, {
- key: '_powTransform',
- value: function _powTransform(value) {
- return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1);
- }
-
- /**
- * Sets the position of the selected handle and fill bar.
- * @function
- * @private
- * @param {jQuery} $hndl - the selected handle to move.
- * @param {Number} location - floating point between the start and end values of the slider bar.
- * @param {Function} cb - callback function to fire on completion.
- * @fires Slider#moved
- * @fires Slider#changed
- */
-
- }, {
- key: '_setHandlePos',
- value: function _setHandlePos($hndl, location, noInvert, cb) {
- // don't move if the slider has been disabled since its initialization
- if (this.$element.hasClass(this.options.disabledClass)) {
- return;
- }
- //might need to alter that slightly for bars that will have odd number selections.
- location = parseFloat(location); //on input change events, convert string to number...grumble.
-
- // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max
- if (location < this.options.start) {
- location = this.options.start;
- } else if (location > this.options.end) {
- location = this.options.end;
- }
-
- var isDbl = this.options.doubleSided;
-
- if (isDbl) {
- //this block is to prevent 2 handles from crossing eachother. Could/should be improved.
- if (this.handles.index($hndl) === 0) {
- var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));
- location = location >= h2Val ? h2Val - this.options.step : location;
- } else {
- var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));
- location = location <= h1Val ? h1Val + this.options.step : location;
- }
- }
-
- //this is for single-handled vertical sliders, it adjusts the value to account for the slider being "upside-down"
- //for click and drag events, it's weird due to the scale(-1, 1) css property
- if (this.options.vertical && !noInvert) {
- location = this.options.end - location;
- }
-
- var _this = this,
- vert = this.options.vertical,
- hOrW = vert ? 'height' : 'width',
- lOrT = vert ? 'top' : 'left',
- handleDim = $hndl[0].getBoundingClientRect()[hOrW],
- elemDim = this.$element[0].getBoundingClientRect()[hOrW],
-
- //percentage of bar min/max value based on click or drag point
- pctOfBar = this._pctOfBar(location),
-
- //number of actual pixels to shift the handle, based on the percentage obtained above
- pxToMove = (elemDim - handleDim) * pctOfBar,
-
- //percentage of bar to shift the handle
- movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal);
- //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value
- location = parseFloat(location.toFixed(this.options.decimal));
- // declare empty object for css adjustments, only used with 2 handled-sliders
- var css = {};
-
- this._setValues($hndl, location);
-
- // TODO update to calculate based on values set to respective inputs??
- if (isDbl) {
- var isLeftHndl = this.handles.index($hndl) === 0,
-
- //empty variable, will be used for min-height/width for fill bar
- dim,
-
- //percentage w/h of the handle compared to the slider bar
- handlePct = ~~(percent(handleDim, elemDim) * 100);
- //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar
- if (isLeftHndl) {
- //left or top percentage value to apply to the fill bar.
- css[lOrT] = movement + '%';
- //calculate the new min-height/width for the fill bar.
- dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct;
- //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider
- //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.
- if (cb && typeof cb === 'function') {
- cb();
- } //this is only needed for the initialization of 2 handled sliders
- } else {
- //just caching the value of the left/bottom handle's left/top property
- var handlePos = parseFloat(this.$handle[0].style[lOrT]);
- //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0
- //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself
- dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct;
- }
- // assign the min-height/width to our css object
- css['min-' + hOrW] = dim + '%';
- }
-
- this.$element.one('finished.zf.animate', function () {
- /**
- * Fires when the handle is done moving.
- * @event Slider#moved
- */
- _this.$element.trigger('moved.zf.slider', [$hndl]);
- });
-
- //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.
- var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime;
-
- Foundation.Move(moveTime, $hndl, function () {
- // adjusting the left/top property of the handle, based on the percentage calculated above
- // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,
- // fall back to next best guess.
- if (isNaN(movement)) {
- $hndl.css(lOrT, pctOfBar * 100 + '%');
- } else {
- $hndl.css(lOrT, movement + '%');
- }
-
- if (!_this.options.doubleSided) {
- //if single-handled, a simple method to expand the fill bar
- _this.$fill.css(hOrW, pctOfBar * 100 + '%');
- } else {
- //otherwise, use the css object we created above
- _this.$fill.css(css);
- }
- });
-
- /**
- * Fires when the value has not been change for a given time.
- * @event Slider#changed
- */
- clearTimeout(_this.timeout);
- _this.timeout = setTimeout(function () {
- _this.$element.trigger('changed.zf.slider', [$hndl]);
- }, _this.options.changedDelay);
- }
-
- /**
- * Sets the initial attribute for the slider element.
- * @function
- * @private
- * @param {Number} idx - index of the current handle/input to use.
- */
-
- }, {
- key: '_setInitAttr',
- value: function _setInitAttr(idx) {
- var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd;
- var id = this.inputs.eq(idx).attr('id') || Foundation.GetYoDigits(6, 'slider');
- this.inputs.eq(idx).attr({
- 'id': id,
- 'max': this.options.end,
- 'min': this.options.start,
- 'step': this.options.step
- });
- this.inputs.eq(idx).val(initVal);
- this.handles.eq(idx).attr({
- 'role': 'slider',
- 'aria-controls': id,
- 'aria-valuemax': this.options.end,
- 'aria-valuemin': this.options.start,
- 'aria-valuenow': initVal,
- 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',
- 'tabindex': 0
- });
- }
-
- /**
- * Sets the input and `aria-valuenow` values for the slider element.
- * @function
- * @private
- * @param {jQuery} $handle - the currently selected handle.
- * @param {Number} val - floating point of the new value.
- */
-
- }, {
- key: '_setValues',
- value: function _setValues($handle, val) {
- var idx = this.options.doubleSided ? this.handles.index($handle) : 0;
- this.inputs.eq(idx).val(val);
- $handle.attr('aria-valuenow', val);
- }
-
- /**
- * Handles events on the slider element.
- * Calculates the new location of the current handle.
- * If there are two handles and the bar was clicked, it determines which handle to move.
- * @function
- * @private
- * @param {Object} e - the `event` object passed from the listener.
- * @param {jQuery} $handle - the current handle to calculate for, if selected.
- * @param {Number} val - floating point number for the new value of the slider.
- * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.
- */
-
- }, {
- key: '_handleEvent',
- value: function _handleEvent(e, $handle, val) {
- var value, hasVal;
- if (!val) {
- //click or drag events
- e.preventDefault();
- var _this = this,
- vertical = this.options.vertical,
- param = vertical ? 'height' : 'width',
- direction = vertical ? 'top' : 'left',
- eventOffset = vertical ? e.pageY : e.pageX,
- halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2,
- barDim = this.$element[0].getBoundingClientRect()[param],
- windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft();
-
- var elemOffset = this.$element.offset()[direction];
-
- // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...
- // best way to guess this is simulated is if clientY == pageY
- if (e.clientY === e.pageY) {
- eventOffset = eventOffset + windowScroll;
- }
- var eventFromBar = eventOffset - elemOffset;
- var barXY;
- if (eventFromBar < 0) {
- barXY = 0;
- } else if (eventFromBar > barDim) {
- barXY = barDim;
- } else {
- barXY = eventFromBar;
- }
- var offsetPct = percent(barXY, barDim);
-
- value = this._value(offsetPct);
-
- // turn everything around for RTL, yay math!
- if (Foundation.rtl() && !this.options.vertical) {
- value = this.options.end - value;
- }
-
- value = _this._adjustValue(null, value);
- //boolean flag for the setHandlePos fn, specifically for vertical sliders
- hasVal = false;
-
- if (!$handle) {
- //figure out which handle it is, pass it to the next function.
- var firstHndlPos = absPosition(this.$handle, direction, barXY, param),
- secndHndlPos = absPosition(this.$handle2, direction, barXY, param);
- $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;
- }
- } else {
- //change event on input
- value = this._adjustValue(null, val);
- hasVal = true;
- }
-
- this._setHandlePos($handle, value, hasVal);
- }
-
- /**
- * Adjustes value for handle in regard to step value. returns adjusted value
- * @function
- * @private
- * @param {jQuery} $handle - the selected handle.
- * @param {Number} value - value to adjust. used if $handle is falsy
- */
-
- }, {
- key: '_adjustValue',
- value: function _adjustValue($handle, value) {
- var val,
- step = this.options.step,
- div = parseFloat(step / 2),
- left,
- prev_val,
- next_val;
- if (!!$handle) {
- val = parseFloat($handle.attr('aria-valuenow'));
- } else {
- val = value;
- }
- left = val % step;
- prev_val = val - left;
- next_val = prev_val + step;
- if (left === 0) {
- return val;
- }
- val = val >= prev_val + div ? next_val : prev_val;
- return val;
- }
-
- /**
- * Adds event listeners to the slider elements.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- this._eventsForHandle(this.$handle);
- if (this.handles[1]) {
- this._eventsForHandle(this.$handle2);
- }
- }
-
- /**
- * Adds event listeners a particular handle
- * @function
- * @private
- * @param {jQuery} $handle - the current handle to apply listeners to.
- */
-
- }, {
- key: '_eventsForHandle',
- value: function _eventsForHandle($handle) {
- var _this = this,
- curHandle,
- timer;
-
- this.inputs.off('change.zf.slider').on('change.zf.slider', function (e) {
- var idx = _this.inputs.index($(this));
- _this._handleEvent(e, _this.handles.eq(idx), $(this).val());
- });
-
- if (this.options.clickSelect) {
- this.$element.off('click.zf.slider').on('click.zf.slider', function (e) {
- if (_this.$element.data('dragging')) {
- return false;
- }
-
- if (!$(e.target).is('[data-slider-handle]')) {
- if (_this.options.doubleSided) {
- _this._handleEvent(e);
- } else {
- _this._handleEvent(e, _this.$handle);
- }
- }
- });
- }
-
- if (this.options.draggable) {
- this.handles.addTouch();
-
- var $body = $('body');
- $handle.off('mousedown.zf.slider').on('mousedown.zf.slider', function (e) {
- $handle.addClass('is-dragging');
- _this.$fill.addClass('is-dragging'); //
- _this.$element.data('dragging', true);
-
- curHandle = $(e.currentTarget);
-
- $body.on('mousemove.zf.slider', function (e) {
- e.preventDefault();
- _this._handleEvent(e, curHandle);
- }).on('mouseup.zf.slider', function (e) {
- _this._handleEvent(e, curHandle);
-
- $handle.removeClass('is-dragging');
- _this.$fill.removeClass('is-dragging');
- _this.$element.data('dragging', false);
-
- $body.off('mousemove.zf.slider mouseup.zf.slider');
- });
- })
- // prevent events triggered by touch
- .on('selectstart.zf.slider touchmove.zf.slider', function (e) {
- e.preventDefault();
- });
- }
-
- $handle.off('keydown.zf.slider').on('keydown.zf.slider', function (e) {
- var _$handle = $(this),
- idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,
- oldValue = parseFloat(_this.inputs.eq(idx).val()),
- newValue;
-
- // handle keyboard event with keyboard util
- Foundation.Keyboard.handleKey(e, 'Slider', {
- decrease: function decrease() {
- newValue = oldValue - _this.options.step;
- },
- increase: function increase() {
- newValue = oldValue + _this.options.step;
- },
- decrease_fast: function decrease_fast() {
- newValue = oldValue - _this.options.step * 10;
- },
- increase_fast: function increase_fast() {
- newValue = oldValue + _this.options.step * 10;
- },
- handled: function handled() {
- // only set handle pos when event was handled specially
- e.preventDefault();
- _this._setHandlePos(_$handle, newValue, true);
- }
- });
- /*if (newValue) { // if pressed key has special function, update value
- e.preventDefault();
- _this._setHandlePos(_$handle, newValue);
- }*/
- });
- }
-
- /**
- * Destroys the slider plugin.
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.handles.off('.zf.slider');
- this.inputs.off('.zf.slider');
- this.$element.off('.zf.slider');
-
- clearTimeout(this.timeout);
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Slider;
- }();
-
- Slider.defaults = {
- /**
- * Minimum value for the slider scale.
- * @option
- * @type {number}
- * @default 0
- */
- start: 0,
- /**
- * Maximum value for the slider scale.
- * @option
- * @type {number}
- * @default 100
- */
- end: 100,
- /**
- * Minimum value change per change event.
- * @option
- * @type {number}
- * @default 1
- */
- step: 1,
- /**
- * Value at which the handle/input *(left handle/first input)* should be set to on initialization.
- * @option
- * @type {number}
- * @default 0
- */
- initialStart: 0,
- /**
- * Value at which the right handle/second input should be set to on initialization.
- * @option
- * @type {number}
- * @default 100
- */
- initialEnd: 100,
- /**
- * Allows the input to be located outside the container and visible. Set to by the JS
- * @option
- * @type {boolean}
- * @default false
- */
- binding: false,
- /**
- * Allows the user to click/tap on the slider bar to select a value.
- * @option
- * @type {boolean}
- * @default true
- */
- clickSelect: true,
- /**
- * Set to true and use the `vertical` class to change alignment to vertical.
- * @option
- * @type {boolean}
- * @default false
- */
- vertical: false,
- /**
- * Allows the user to drag the slider handle(s) to select a value.
- * @option
- * @type {boolean}
- * @default true
- */
- draggable: true,
- /**
- * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.
- * @option
- * @type {boolean}
- * @default false
- */
- disabled: false,
- /**
- * Allows the use of two handles. Double checked by the JS. Changes some logic handling.
- * @option
- * @type {boolean}
- * @default false
- */
- doubleSided: false,
- /**
- * Potential future feature.
- */
- // steps: 100,
- /**
- * Number of decimal places the plugin should go to for floating point precision.
- * @option
- * @type {number}
- * @default 2
- */
- decimal: 2,
- /**
- * Time delay for dragged elements.
- */
- // dragDelay: 0,
- /**
- * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.
- * @option
- * @type {number}
- * @default 200
- */
- moveTime: 200, //update this if changing the transition time in the sass
- /**
- * Class applied to disabled sliders.
- * @option
- * @type {string}
- * @default 'disabled'
- */
- disabledClass: 'disabled',
- /**
- * Will invert the default layout for a vertical<span data-tooltip title="who would do this???"> </span>slider.
- * @option
- * @type {boolean}
- * @default false
- */
- invertVertical: false,
- /**
- * Milliseconds before the `changed.zf-slider` event is triggered after value change.
- * @option
- * @type {number}
- * @default 500
- */
- changedDelay: 500,
- /**
- * Basevalue for non-linear sliders
- * @option
- * @type {number}
- * @default 5
- */
- nonLinearBase: 5,
- /**
- * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.
- * @option
- * @type {string}
- * @default 'linear'
- */
- positionValueFunction: 'linear'
- };
-
- function percent(frac, num) {
- return frac / num;
- }
- function absPosition($handle, dir, clickPos, param) {
- return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos);
- }
- function baseLog(base, value) {
- return Math.log(value) / Math.log(base);
- }
-
- // Window exports
- Foundation.plugin(Slider, 'Slider');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Sticky module.
- * @module foundation.sticky
- * @requires foundation.util.triggers
- * @requires foundation.util.mediaQuery
- */
-
- var Sticky = function () {
- /**
- * Creates a new instance of a sticky thing.
- * @class
- * @param {jQuery} element - jQuery object to make sticky.
- * @param {Object} options - options object passed when creating the element programmatically.
- */
- function Sticky(element, options) {
- _classCallCheck(this, Sticky);
-
- this.$element = element;
- this.options = $.extend({}, Sticky.defaults, this.$element.data(), options);
-
- this._init();
-
- Foundation.registerPlugin(this, 'Sticky');
- }
-
- /**
- * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes
- * @function
- * @private
- */
-
-
- _createClass(Sticky, [{
- key: '_init',
- value: function _init() {
- var $parent = this.$element.parent('[data-sticky-container]'),
- id = this.$element[0].id || Foundation.GetYoDigits(6, 'sticky'),
- _this = this;
-
- if (!$parent.length) {
- this.wasWrapped = true;
- }
- this.$container = $parent.length ? $parent : $(this.options.container).wrapInner(this.$element);
- this.$container.addClass(this.options.containerClass);
-
- this.$element.addClass(this.options.stickyClass).attr({ 'data-resize': id, 'data-mutate': id });
- if (this.options.anchor !== '') {
- $('#' + _this.options.anchor).attr({ 'data-mutate': id });
- }
-
- this.scrollCount = this.options.checkEvery;
- this.isStuck = false;
- $(window).one('load.zf.sticky', function () {
- //We calculate the container height to have correct values for anchor points offset calculation.
- _this.containerHeight = _this.$element.css("display") == "none" ? 0 : _this.$element[0].getBoundingClientRect().height;
- _this.$container.css('height', _this.containerHeight);
- _this.elemHeight = _this.containerHeight;
- if (_this.options.anchor !== '') {
- _this.$anchor = $('#' + _this.options.anchor);
- } else {
- _this._parsePoints();
- }
-
- _this._setSizes(function () {
- var scroll = window.pageYOffset;
- _this._calc(false, scroll);
- //Unstick the element will ensure that proper classes are set.
- if (!_this.isStuck) {
- _this._removeSticky(scroll >= _this.topPoint ? false : true);
- }
- });
- _this._events(id.split('-').reverse().join('-'));
- });
- }
-
- /**
- * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.
- * @function
- * @private
- */
-
- }, {
- key: '_parsePoints',
- value: function _parsePoints() {
- var top = this.options.topAnchor == "" ? 1 : this.options.topAnchor,
- btm = this.options.btmAnchor == "" ? document.documentElement.scrollHeight : this.options.btmAnchor,
- pts = [top, btm],
- breaks = {};
- for (var i = 0, len = pts.length; i < len && pts[i]; i++) {
- var pt;
- if (typeof pts[i] === 'number') {
- pt = pts[i];
- } else {
- var place = pts[i].split(':'),
- anchor = $('#' + place[0]);
-
- pt = anchor.offset().top;
- if (place[1] && place[1].toLowerCase() === 'bottom') {
- pt += anchor[0].getBoundingClientRect().height;
- }
- }
- breaks[i] = pt;
- }
-
- this.points = breaks;
- return;
- }
-
- /**
- * Adds event handlers for the scrolling element.
- * @private
- * @param {String} id - psuedo-random id for unique scroll event listener.
- */
-
- }, {
- key: '_events',
- value: function _events(id) {
- var _this = this,
- scrollListener = this.scrollListener = 'scroll.zf.' + id;
- if (this.isOn) {
- return;
- }
- if (this.canStick) {
- this.isOn = true;
- $(window).off(scrollListener).on(scrollListener, function (e) {
- if (_this.scrollCount === 0) {
- _this.scrollCount = _this.options.checkEvery;
- _this._setSizes(function () {
- _this._calc(false, window.pageYOffset);
- });
- } else {
- _this.scrollCount--;
- _this._calc(false, window.pageYOffset);
- }
- });
- }
-
- this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function (e, el) {
- _this._eventsHandler(id);
- });
-
- this.$element.on('mutateme.zf.trigger', function (e, el) {
- _this._eventsHandler(id);
- });
-
- if (this.$anchor) {
- this.$anchor.on('mutateme.zf.trigger', function (e, el) {
- _this._eventsHandler(id);
- });
- }
- }
-
- /**
- * Handler for events.
- * @private
- * @param {String} id - psuedo-random id for unique scroll event listener.
- */
-
- }, {
- key: '_eventsHandler',
- value: function _eventsHandler(id) {
- var _this = this,
- scrollListener = this.scrollListener = 'scroll.zf.' + id;
-
- _this._setSizes(function () {
- _this._calc(false);
- if (_this.canStick) {
- if (!_this.isOn) {
- _this._events(id);
- }
- } else if (_this.isOn) {
- _this._pauseListeners(scrollListener);
- }
- });
- }
-
- /**
- * Removes event handlers for scroll and change events on anchor.
- * @fires Sticky#pause
- * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`
- */
-
- }, {
- key: '_pauseListeners',
- value: function _pauseListeners(scrollListener) {
- this.isOn = false;
- $(window).off(scrollListener);
-
- /**
- * Fires when the plugin is paused due to resize event shrinking the view.
- * @event Sticky#pause
- * @private
- */
- this.$element.trigger('pause.zf.sticky');
- }
-
- /**
- * Called on every `scroll` event and on `_init`
- * fires functions based on booleans and cached values
- * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.
- * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.
- */
-
- }, {
- key: '_calc',
- value: function _calc(checkSizes, scroll) {
- if (checkSizes) {
- this._setSizes();
- }
-
- if (!this.canStick) {
- if (this.isStuck) {
- this._removeSticky(true);
- }
- return false;
- }
-
- if (!scroll) {
- scroll = window.pageYOffset;
- }
-
- if (scroll >= this.topPoint) {
- if (scroll <= this.bottomPoint) {
- if (!this.isStuck) {
- this._setSticky();
- }
- } else {
- if (this.isStuck) {
- this._removeSticky(false);
- }
- }
- } else {
- if (this.isStuck) {
- this._removeSticky(true);
- }
- }
- }
-
- /**
- * Causes the $element to become stuck.
- * Adds `position: fixed;`, and helper classes.
- * @fires Sticky#stuckto
- * @function
- * @private
- */
-
- }, {
- key: '_setSticky',
- value: function _setSticky() {
- var _this = this,
- stickTo = this.options.stickTo,
- mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',
- notStuckTo = stickTo === 'top' ? 'bottom' : 'top',
- css = {};
-
- css[mrgn] = this.options[mrgn] + 'em';
- css[stickTo] = 0;
- css[notStuckTo] = 'auto';
- this.isStuck = true;
- this.$element.removeClass('is-anchored is-at-' + notStuckTo).addClass('is-stuck is-at-' + stickTo).css(css)
- /**
- * Fires when the $element has become `position: fixed;`
- * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`
- * @event Sticky#stuckto
- */
- .trigger('sticky.zf.stuckto:' + stickTo);
- this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function () {
- _this._setSizes();
- });
- }
-
- /**
- * Causes the $element to become unstuck.
- * Removes `position: fixed;`, and helper classes.
- * Adds other helper classes.
- * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.
- * @fires Sticky#unstuckfrom
- * @private
- */
-
- }, {
- key: '_removeSticky',
- value: function _removeSticky(isTop) {
- var stickTo = this.options.stickTo,
- stickToTop = stickTo === 'top',
- css = {},
- anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,
- mrgn = stickToTop ? 'marginTop' : 'marginBottom',
- notStuckTo = stickToTop ? 'bottom' : 'top',
- topOrBottom = isTop ? 'top' : 'bottom';
-
- css[mrgn] = 0;
-
- css['bottom'] = 'auto';
- if (isTop) {
- css['top'] = 0;
- } else {
- css['top'] = anchorPt;
- }
-
- this.isStuck = false;
- this.$element.removeClass('is-stuck is-at-' + stickTo).addClass('is-anchored is-at-' + topOrBottom).css(css)
- /**
- * Fires when the $element has become anchored.
- * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`
- * @event Sticky#unstuckfrom
- */
- .trigger('sticky.zf.unstuckfrom:' + topOrBottom);
- }
-
- /**
- * Sets the $element and $container sizes for plugin.
- * Calls `_setBreakPoints`.
- * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.
- * @private
- */
-
- }, {
- key: '_setSizes',
- value: function _setSizes(cb) {
- this.canStick = Foundation.MediaQuery.is(this.options.stickyOn);
- if (!this.canStick) {
- if (cb && typeof cb === 'function') {
- cb();
- }
- }
- var _this = this,
- newElemWidth = this.$container[0].getBoundingClientRect().width,
- comp = window.getComputedStyle(this.$container[0]),
- pdngl = parseInt(comp['padding-left'], 10),
- pdngr = parseInt(comp['padding-right'], 10);
-
- if (this.$anchor && this.$anchor.length) {
- this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;
- } else {
- this._parsePoints();
- }
-
- this.$element.css({
- 'max-width': newElemWidth - pdngl - pdngr + 'px'
- });
-
- var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;
- if (this.$element.css("display") == "none") {
- newContainerHeight = 0;
- }
- this.containerHeight = newContainerHeight;
- this.$container.css({
- height: newContainerHeight
- });
- this.elemHeight = newContainerHeight;
-
- if (!this.isStuck) {
- if (this.$element.hasClass('is-at-bottom')) {
- var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;
- this.$element.css('top', anchorPt);
- }
- }
-
- this._setBreakPoints(newContainerHeight, function () {
- if (cb && typeof cb === 'function') {
- cb();
- }
- });
- }
-
- /**
- * Sets the upper and lower breakpoints for the element to become sticky/unsticky.
- * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.
- * @param {Function} cb - optional callback function to be called on completion.
- * @private
- */
-
- }, {
- key: '_setBreakPoints',
- value: function _setBreakPoints(elemHeight, cb) {
- if (!this.canStick) {
- if (cb && typeof cb === 'function') {
- cb();
- } else {
- return false;
- }
- }
- var mTop = emCalc(this.options.marginTop),
- mBtm = emCalc(this.options.marginBottom),
- topPoint = this.points ? this.points[0] : this.$anchor.offset().top,
- bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,
-
- // topPoint = this.$anchor.offset().top || this.points[0],
- // bottomPoint = topPoint + this.anchorHeight || this.points[1],
- winHeight = window.innerHeight;
-
- if (this.options.stickTo === 'top') {
- topPoint -= mTop;
- bottomPoint -= elemHeight + mTop;
- } else if (this.options.stickTo === 'bottom') {
- topPoint -= winHeight - (elemHeight + mBtm);
- bottomPoint -= winHeight - mBtm;
- } else {
- //this would be the stickTo: both option... tricky
- }
-
- this.topPoint = topPoint;
- this.bottomPoint = bottomPoint;
-
- if (cb && typeof cb === 'function') {
- cb();
- }
- }
-
- /**
- * Destroys the current sticky element.
- * Resets the element to the top position first.
- * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this._removeSticky(true);
-
- this.$element.removeClass(this.options.stickyClass + ' is-anchored is-at-top').css({
- height: '',
- top: '',
- bottom: '',
- 'max-width': ''
- }).off('resizeme.zf.trigger').off('mutateme.zf.trigger');
- if (this.$anchor && this.$anchor.length) {
- this.$anchor.off('change.zf.sticky');
- }
- $(window).off(this.scrollListener);
-
- if (this.wasWrapped) {
- this.$element.unwrap();
- } else {
- this.$container.removeClass(this.options.containerClass).css({
- height: ''
- });
- }
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Sticky;
- }();
-
- Sticky.defaults = {
- /**
- * Customizable container template. Add your own classes for styling and sizing.
- * @option
- * @type {string}
- * @default '&lt;div data-sticky-container&gt;&lt;/div&gt;'
- */
- container: '<div data-sticky-container></div>',
- /**
- * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.
- * @option
- * @type {string}
- * @default 'top'
- */
- stickTo: 'top',
- /**
- * If anchored to a single element, the id of that element.
- * @option
- * @type {string}
- * @default ''
- */
- anchor: '',
- /**
- * If using more than one element as anchor points, the id of the top anchor.
- * @option
- * @type {string}
- * @default ''
- */
- topAnchor: '',
- /**
- * If using more than one element as anchor points, the id of the bottom anchor.
- * @option
- * @type {string}
- * @default ''
- */
- btmAnchor: '',
- /**
- * Margin, in `em`'s to apply to the top of the element when it becomes sticky.
- * @option
- * @type {number}
- * @default 1
- */
- marginTop: 1,
- /**
- * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.
- * @option
- * @type {number}
- * @default 1
- */
- marginBottom: 1,
- /**
- * Breakpoint string that is the minimum screen size an element should become sticky.
- * @option
- * @type {string}
- * @default 'medium'
- */
- stickyOn: 'medium',
- /**
- * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.
- * @option
- * @type {string}
- * @default 'sticky'
- */
- stickyClass: 'sticky',
- /**
- * Class applied to sticky container. Foundation defaults to `sticky-container`.
- * @option
- * @type {string}
- * @default 'sticky-container'
- */
- containerClass: 'sticky-container',
- /**
- * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.
- * @option
- * @type {number}
- * @default -1
- */
- checkEvery: -1
- };
-
- /**
- * Helper function to calculate em values
- * @param Number {em} - number of em's to calculate into pixels
- */
- function emCalc(em) {
- return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;
- }
-
- // Window exports
- Foundation.plugin(Sticky, 'Sticky');
-}(jQuery);
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Tabs module.
- * @module foundation.tabs
- * @requires foundation.util.keyboard
- * @requires foundation.util.timerAndImageLoader if tabs contain images
- */
-
- var Tabs = function () {
- /**
- * Creates a new instance of tabs.
- * @class
- * @fires Tabs#init
- * @param {jQuery} element - jQuery object to make into tabs.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Tabs(element, options) {
- _classCallCheck(this, Tabs);
-
- this.$element = element;
- this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);
-
- this._init();
- Foundation.registerPlugin(this, 'Tabs');
- Foundation.Keyboard.register('Tabs', {
- 'ENTER': 'open',
- 'SPACE': 'open',
- 'ARROW_RIGHT': 'next',
- 'ARROW_UP': 'previous',
- 'ARROW_DOWN': 'next',
- 'ARROW_LEFT': 'previous'
- // 'TAB': 'next',
- // 'SHIFT_TAB': 'previous'
- });
- }
-
- /**
- * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.
- * @private
- */
-
-
- _createClass(Tabs, [{
- key: '_init',
- value: function _init() {
- var _this2 = this;
-
- var _this = this;
-
- this.$element.attr({ 'role': 'tablist' });
- this.$tabTitles = this.$element.find('.' + this.options.linkClass);
- this.$tabContent = $('[data-tabs-content="' + this.$element[0].id + '"]');
-
- this.$tabTitles.each(function () {
- var $elem = $(this),
- $link = $elem.find('a'),
- isActive = $elem.hasClass('' + _this.options.linkActiveClass),
- hash = $link[0].hash.slice(1),
- linkId = $link[0].id ? $link[0].id : hash + '-label',
- $tabContent = $('#' + hash);
-
- $elem.attr({ 'role': 'presentation' });
-
- $link.attr({
- 'role': 'tab',
- 'aria-controls': hash,
- 'aria-selected': isActive,
- 'id': linkId
- });
-
- $tabContent.attr({
- 'role': 'tabpanel',
- 'aria-hidden': !isActive,
- 'aria-labelledby': linkId
- });
-
- if (isActive && _this.options.autoFocus) {
- $(window).load(function () {
- $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, function () {
- $link.focus();
- });
- });
- }
- });
- if (this.options.matchHeight) {
- var $images = this.$tabContent.find('img');
-
- if ($images.length) {
- Foundation.onImagesLoaded($images, this._setHeight.bind(this));
- } else {
- this._setHeight();
- }
- }
-
- //current context-bound function to open tabs on page load or history popstate
- this._checkDeepLink = function () {
- var anchor = window.location.hash;
- //need a hash and a relevant anchor in this tabset
- if (anchor.length) {
- var $link = _this2.$element.find('[href$="' + anchor + '"]');
- if ($link.length) {
- _this2.selectTab($(anchor), true);
-
- //roll up a little to show the titles
- if (_this2.options.deepLinkSmudge) {
- var offset = _this2.$element.offset();
- $('html, body').animate({ scrollTop: offset.top }, _this2.options.deepLinkSmudgeDelay);
- }
-
- /**
- * Fires when the zplugin has deeplinked at pageload
- * @event Tabs#deeplink
- */
- _this2.$element.trigger('deeplink.zf.tabs', [$link, $(anchor)]);
- }
- }
- };
-
- //use browser to open a tab, if it exists in this tabset
- if (this.options.deepLink) {
- this._checkDeepLink();
- }
-
- this._events();
- }
-
- /**
- * Adds event handlers for items within the tabs.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- this._addKeyHandler();
- this._addClickHandler();
- this._setHeightMqHandler = null;
-
- if (this.options.matchHeight) {
- this._setHeightMqHandler = this._setHeight.bind(this);
-
- $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);
- }
-
- if (this.options.deepLink) {
- $(window).on('popstate', this._checkDeepLink);
- }
- }
-
- /**
- * Adds click handlers for items within the tabs.
- * @private
- */
-
- }, {
- key: '_addClickHandler',
- value: function _addClickHandler() {
- var _this = this;
-
- this.$element.off('click.zf.tabs').on('click.zf.tabs', '.' + this.options.linkClass, function (e) {
- e.preventDefault();
- e.stopPropagation();
- _this._handleTabChange($(this));
- });
- }
-
- /**
- * Adds keyboard event handlers for items within the tabs.
- * @private
- */
-
- }, {
- key: '_addKeyHandler',
- value: function _addKeyHandler() {
- var _this = this;
-
- this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) {
- if (e.which === 9) return;
-
- var $element = $(this),
- $elements = $element.parent('ul').children('li'),
- $prevElement,
- $nextElement;
-
- $elements.each(function (i) {
- if ($(this).is($element)) {
- if (_this.options.wrapOnKeys) {
- $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1);
- $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1);
- } else {
- $prevElement = $elements.eq(Math.max(0, i - 1));
- $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));
- }
- return;
- }
- });
-
- // handle keyboard event with keyboard util
- Foundation.Keyboard.handleKey(e, 'Tabs', {
- open: function open() {
- $element.find('[role="tab"]').focus();
- _this._handleTabChange($element);
- },
- previous: function previous() {
- $prevElement.find('[role="tab"]').focus();
- _this._handleTabChange($prevElement);
- },
- next: function next() {
- $nextElement.find('[role="tab"]').focus();
- _this._handleTabChange($nextElement);
- },
- handled: function handled() {
- e.stopPropagation();
- e.preventDefault();
- }
- });
- });
- }
-
- /**
- * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.
- * @param {jQuery} $target - Tab to open.
- * @param {boolean} historyHandled - browser has already handled a history update
- * @fires Tabs#change
- * @function
- */
-
- }, {
- key: '_handleTabChange',
- value: function _handleTabChange($target, historyHandled) {
-
- /**
- * Check for active class on target. Collapse if exists.
- */
- if ($target.hasClass('' + this.options.linkActiveClass)) {
- if (this.options.activeCollapse) {
- this._collapseTab($target);
-
- /**
- * Fires when the zplugin has successfully collapsed tabs.
- * @event Tabs#collapse
- */
- this.$element.trigger('collapse.zf.tabs', [$target]);
- }
- return;
- }
-
- var $oldTab = this.$element.find('.' + this.options.linkClass + '.' + this.options.linkActiveClass),
- $tabLink = $target.find('[role="tab"]'),
- hash = $tabLink[0].hash,
- $targetContent = this.$tabContent.find(hash);
-
- //close old tab
- this._collapseTab($oldTab);
-
- //open new tab
- this._openTab($target);
-
- //either replace or update browser history
- if (this.options.deepLink && !historyHandled) {
- var anchor = $target.find('a').attr('href');
-
- if (this.options.updateHistory) {
- history.pushState({}, '', anchor);
- } else {
- history.replaceState({}, '', anchor);
- }
- }
-
- /**
- * Fires when the plugin has successfully changed tabs.
- * @event Tabs#change
- */
- this.$element.trigger('change.zf.tabs', [$target, $targetContent]);
-
- //fire to children a mutation event
- $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger");
- }
-
- /**
- * Opens the tab `$targetContent` defined by `$target`.
- * @param {jQuery} $target - Tab to Open.
- * @function
- */
-
- }, {
- key: '_openTab',
- value: function _openTab($target) {
- var $tabLink = $target.find('[role="tab"]'),
- hash = $tabLink[0].hash,
- $targetContent = this.$tabContent.find(hash);
-
- $target.addClass('' + this.options.linkActiveClass);
-
- $tabLink.attr({ 'aria-selected': 'true' });
-
- $targetContent.addClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'false' });
- }
-
- /**
- * Collapses `$targetContent` defined by `$target`.
- * @param {jQuery} $target - Tab to Open.
- * @function
- */
-
- }, {
- key: '_collapseTab',
- value: function _collapseTab($target) {
- var $target_anchor = $target.removeClass('' + this.options.linkActiveClass).find('[role="tab"]').attr({ 'aria-selected': 'false' });
-
- $('#' + $target_anchor.attr('aria-controls')).removeClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'true' });
- }
-
- /**
- * Public method for selecting a content pane to display.
- * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.
- * @param {boolean} historyHandled - browser has already handled a history update
- * @function
- */
-
- }, {
- key: 'selectTab',
- value: function selectTab(elem, historyHandled) {
- var idStr;
-
- if ((typeof elem === 'undefined' ? 'undefined' : _typeof(elem)) === 'object') {
- idStr = elem[0].id;
- } else {
- idStr = elem;
- }
-
- if (idStr.indexOf('#') < 0) {
- idStr = '#' + idStr;
- }
-
- var $target = this.$tabTitles.find('[href$="' + idStr + '"]').parent('.' + this.options.linkClass);
-
- this._handleTabChange($target, historyHandled);
- }
- }, {
- key: '_setHeight',
-
- /**
- * Sets the height of each panel to the height of the tallest panel.
- * If enabled in options, gets called on media query change.
- * If loading content via external source, can be called directly or with _reflow.
- * If enabled with `data-match-height="true"`, tabs sets to equal height
- * @function
- * @private
- */
- value: function _setHeight() {
- var max = 0,
- _this = this; // Lock down the `this` value for the root tabs object
-
- this.$tabContent.find('.' + this.options.panelClass).css('height', '').each(function () {
-
- var panel = $(this),
- isActive = panel.hasClass('' + _this.options.panelActiveClass); // get the options from the parent instead of trying to get them from the child
-
- if (!isActive) {
- panel.css({ 'visibility': 'hidden', 'display': 'block' });
- }
-
- var temp = this.getBoundingClientRect().height;
-
- if (!isActive) {
- panel.css({
- 'visibility': '',
- 'display': ''
- });
- }
-
- max = temp > max ? temp : max;
- }).css('height', max + 'px');
- }
-
- /**
- * Destroys an instance of an tabs.
- * @fires Tabs#destroyed
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.find('.' + this.options.linkClass).off('.zf.tabs').hide().end().find('.' + this.options.panelClass).hide();
-
- if (this.options.matchHeight) {
- if (this._setHeightMqHandler != null) {
- $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);
- }
- }
-
- if (this.options.deepLink) {
- $(window).off('popstate', this._checkDeepLink);
- }
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Tabs;
- }();
-
- Tabs.defaults = {
- /**
- * Allows the window to scroll to content of pane specified by hash anchor
- * @option
- * @type {boolean}
- * @default false
- */
- deepLink: false,
-
- /**
- * Adjust the deep link scroll to make sure the top of the tab panel is visible
- * @option
- * @type {boolean}
- * @default false
- */
- deepLinkSmudge: false,
-
- /**
- * Animation time (ms) for the deep link adjustment
- * @option
- * @type {number}
- * @default 300
- */
- deepLinkSmudgeDelay: 300,
-
- /**
- * Update the browser history with the open tab
- * @option
- * @type {boolean}
- * @default false
- */
- updateHistory: false,
-
- /**
- * Allows the window to scroll to content of active pane on load if set to true.
- * Not recommended if more than one tab panel per page.
- * @option
- * @type {boolean}
- * @default false
- */
- autoFocus: false,
-
- /**
- * Allows keyboard input to 'wrap' around the tab links.
- * @option
- * @type {boolean}
- * @default true
- */
- wrapOnKeys: true,
-
- /**
- * Allows the tab content panes to match heights if set to true.
- * @option
- * @type {boolean}
- * @default false
- */
- matchHeight: false,
-
- /**
- * Allows active tabs to collapse when clicked.
- * @option
- * @type {boolean}
- * @default false
- */
- activeCollapse: false,
-
- /**
- * Class applied to `li`'s in tab link list.
- * @option
- * @type {string}
- * @default 'tabs-title'
- */
- linkClass: 'tabs-title',
-
- /**
- * Class applied to the active `li` in tab link list.
- * @option
- * @type {string}
- * @default 'is-active'
- */
- linkActiveClass: 'is-active',
-
- /**
- * Class applied to the content containers.
- * @option
- * @type {string}
- * @default 'tabs-panel'
- */
- panelClass: 'tabs-panel',
-
- /**
- * Class applied to the active content container.
- * @option
- * @type {string}
- * @default 'is-active'
- */
- panelActiveClass: 'is-active'
- };
-
- // Window exports
- Foundation.plugin(Tabs, 'Tabs');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Toggler module.
- * @module foundation.toggler
- * @requires foundation.util.motion
- * @requires foundation.util.triggers
- */
-
- var Toggler = function () {
- /**
- * Creates a new instance of Toggler.
- * @class
- * @fires Toggler#init
- * @param {Object} element - jQuery object to add the trigger to.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function Toggler(element, options) {
- _classCallCheck(this, Toggler);
-
- this.$element = element;
- this.options = $.extend({}, Toggler.defaults, element.data(), options);
- this.className = '';
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'Toggler');
- }
-
- /**
- * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.
- * @function
- * @private
- */
-
-
- _createClass(Toggler, [{
- key: '_init',
- value: function _init() {
- var input;
- // Parse animation classes if they were set
- if (this.options.animate) {
- input = this.options.animate.split(' ');
-
- this.animationIn = input[0];
- this.animationOut = input[1] || null;
- }
- // Otherwise, parse toggle class
- else {
- input = this.$element.data('toggler');
- // Allow for a . at the beginning of the string
- this.className = input[0] === '.' ? input.slice(1) : input;
- }
-
- // Add ARIA attributes to triggers
- var id = this.$element[0].id;
- $('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-controls', id);
- // If the target is hidden, add aria-hidden
- this.$element.attr('aria-expanded', this.$element.is(':hidden') ? false : true);
- }
-
- /**
- * Initializes events for the toggle trigger.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));
- }
-
- /**
- * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was "on" or "off".
- * @function
- * @fires Toggler#on
- * @fires Toggler#off
- */
-
- }, {
- key: 'toggle',
- value: function toggle() {
- this[this.options.animate ? '_toggleAnimate' : '_toggleClass']();
- }
- }, {
- key: '_toggleClass',
- value: function _toggleClass() {
- this.$element.toggleClass(this.className);
-
- var isOn = this.$element.hasClass(this.className);
- if (isOn) {
- /**
- * Fires if the target element has the class after a toggle.
- * @event Toggler#on
- */
- this.$element.trigger('on.zf.toggler');
- } else {
- /**
- * Fires if the target element does not have the class after a toggle.
- * @event Toggler#off
- */
- this.$element.trigger('off.zf.toggler');
- }
-
- this._updateARIA(isOn);
- this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');
- }
- }, {
- key: '_toggleAnimate',
- value: function _toggleAnimate() {
- var _this = this;
-
- if (this.$element.is(':hidden')) {
- Foundation.Motion.animateIn(this.$element, this.animationIn, function () {
- _this._updateARIA(true);
- this.trigger('on.zf.toggler');
- this.find('[data-mutate]').trigger('mutateme.zf.trigger');
- });
- } else {
- Foundation.Motion.animateOut(this.$element, this.animationOut, function () {
- _this._updateARIA(false);
- this.trigger('off.zf.toggler');
- this.find('[data-mutate]').trigger('mutateme.zf.trigger');
- });
- }
- }
- }, {
- key: '_updateARIA',
- value: function _updateARIA(isOn) {
- this.$element.attr('aria-expanded', isOn ? true : false);
- }
-
- /**
- * Destroys the instance of Toggler on the element.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.off('.zf.toggler');
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Toggler;
- }();
-
- Toggler.defaults = {
- /**
- * Tells the plugin if the element should animated when toggled.
- * @option
- * @type {boolean}
- * @default false
- */
- animate: false
- };
-
- // Window exports
- Foundation.plugin(Toggler, 'Toggler');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * Tooltip module.
- * @module foundation.tooltip
- * @requires foundation.util.box
- * @requires foundation.util.mediaQuery
- * @requires foundation.util.triggers
- */
-
- var Tooltip = function () {
- /**
- * Creates a new instance of a Tooltip.
- * @class
- * @fires Tooltip#init
- * @param {jQuery} element - jQuery object to attach a tooltip to.
- * @param {Object} options - object to extend the default configuration.
- */
- function Tooltip(element, options) {
- _classCallCheck(this, Tooltip);
-
- this.$element = element;
- this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options);
-
- this.isActive = false;
- this.isClick = false;
- this._init();
-
- Foundation.registerPlugin(this, 'Tooltip');
- }
-
- /**
- * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.
- * @private
- */
-
-
- _createClass(Tooltip, [{
- key: '_init',
- value: function _init() {
- var elemId = this.$element.attr('aria-describedby') || Foundation.GetYoDigits(6, 'tooltip');
-
- this.options.positionClass = this.options.positionClass || this._getPositionClass(this.$element);
- this.options.tipText = this.options.tipText || this.$element.attr('title');
- this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId);
-
- if (this.options.allowHtml) {
- this.template.appendTo(document.body).html(this.options.tipText).hide();
- } else {
- this.template.appendTo(document.body).text(this.options.tipText).hide();
- }
-
- this.$element.attr({
- 'title': '',
- 'aria-describedby': elemId,
- 'data-yeti-box': elemId,
- 'data-toggle': elemId,
- 'data-resize': elemId
- }).addClass(this.options.triggerClass);
-
- //helper variables to track movement on collisions
- this.usedPositions = [];
- this.counter = 4;
- this.classChanged = false;
-
- this._events();
- }
-
- /**
- * Grabs the current positioning class, if present, and returns the value or an empty string.
- * @private
- */
-
- }, {
- key: '_getPositionClass',
- value: function _getPositionClass(element) {
- if (!element) {
- return '';
- }
- // var position = element.attr('class').match(/top|left|right/g);
- var position = element[0].className.match(/\b(top|left|right)\b/g);
- position = position ? position[0] : '';
- return position;
- }
- }, {
- key: '_buildTemplate',
-
- /**
- * builds the tooltip element, adds attributes, and returns the template.
- * @private
- */
- value: function _buildTemplate(id) {
- var templateClasses = (this.options.tooltipClass + ' ' + this.options.positionClass + ' ' + this.options.templateClasses).trim();
- var $template = $('<div></div>').addClass(templateClasses).attr({
- 'role': 'tooltip',
- 'aria-hidden': true,
- 'data-is-active': false,
- 'data-is-focus': false,
- 'id': id
- });
- return $template;
- }
-
- /**
- * Function that gets called if a collision event is detected.
- * @param {String} position - positioning class to try
- * @private
- */
-
- }, {
- key: '_reposition',
- value: function _reposition(position) {
- this.usedPositions.push(position ? position : 'bottom');
-
- //default, try switching to opposite side
- if (!position && this.usedPositions.indexOf('top') < 0) {
- this.template.addClass('top');
- } else if (position === 'top' && this.usedPositions.indexOf('bottom') < 0) {
- this.template.removeClass(position);
- } else if (position === 'left' && this.usedPositions.indexOf('right') < 0) {
- this.template.removeClass(position).addClass('right');
- } else if (position === 'right' && this.usedPositions.indexOf('left') < 0) {
- this.template.removeClass(position).addClass('left');
- }
-
- //if default change didn't work, try bottom or left first
- else if (!position && this.usedPositions.indexOf('top') > -1 && this.usedPositions.indexOf('left') < 0) {
- this.template.addClass('left');
- } else if (position === 'top' && this.usedPositions.indexOf('bottom') > -1 && this.usedPositions.indexOf('left') < 0) {
- this.template.removeClass(position).addClass('left');
- } else if (position === 'left' && this.usedPositions.indexOf('right') > -1 && this.usedPositions.indexOf('bottom') < 0) {
- this.template.removeClass(position);
- } else if (position === 'right' && this.usedPositions.indexOf('left') > -1 && this.usedPositions.indexOf('bottom') < 0) {
- this.template.removeClass(position);
- }
- //if nothing cleared, set to bottom
- else {
- this.template.removeClass(position);
- }
- this.classChanged = true;
- this.counter--;
- }
-
- /**
- * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.
- * if the tooltip is larger than the screen width, default to full width - any user selected margin
- * @private
- */
-
- }, {
- key: '_setPosition',
- value: function _setPosition() {
- var position = this._getPositionClass(this.template),
- $tipDims = Foundation.Box.GetDimensions(this.template),
- $anchorDims = Foundation.Box.GetDimensions(this.$element),
- direction = position === 'left' ? 'left' : position === 'right' ? 'left' : 'top',
- param = direction === 'top' ? 'height' : 'width',
- offset = param === 'height' ? this.options.vOffset : this.options.hOffset,
- _this = this;
-
- if ($tipDims.width >= $tipDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.template)) {
- this.template.offset(Foundation.Box.GetOffsets(this.template, this.$element, 'center bottom', this.options.vOffset, this.options.hOffset, true)).css({
- // this.$element.offset(Foundation.GetOffsets(this.template, this.$element, 'center bottom', this.options.vOffset, this.options.hOffset, true)).css({
- 'width': $anchorDims.windowDims.width - this.options.hOffset * 2,
- 'height': 'auto'
- });
- return false;
- }
-
- this.template.offset(Foundation.Box.GetOffsets(this.template, this.$element, 'center ' + (position || 'bottom'), this.options.vOffset, this.options.hOffset));
-
- while (!Foundation.Box.ImNotTouchingYou(this.template) && this.counter) {
- this._reposition(position);
- this._setPosition();
- }
- }
-
- /**
- * reveals the tooltip, and fires an event to close any other open tooltips on the page
- * @fires Tooltip#closeme
- * @fires Tooltip#show
- * @function
- */
-
- }, {
- key: 'show',
- value: function show() {
- if (this.options.showOn !== 'all' && !Foundation.MediaQuery.is(this.options.showOn)) {
- // console.error('The screen is too small to display this tooltip');
- return false;
- }
-
- var _this = this;
- this.template.css('visibility', 'hidden').show();
- this._setPosition();
-
- /**
- * Fires to close all other open tooltips on the page
- * @event Closeme#tooltip
- */
- this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));
-
- this.template.attr({
- 'data-is-active': true,
- 'aria-hidden': false
- });
- _this.isActive = true;
- // console.log(this.template);
- this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function () {
- //maybe do stuff?
- });
- /**
- * Fires when the tooltip is shown
- * @event Tooltip#show
- */
- this.$element.trigger('show.zf.tooltip');
- }
-
- /**
- * Hides the current tooltip, and resets the positioning class if it was changed due to collision
- * @fires Tooltip#hide
- * @function
- */
-
- }, {
- key: 'hide',
- value: function hide() {
- // console.log('hiding', this.$element.data('yeti-box'));
- var _this = this;
- this.template.stop().attr({
- 'aria-hidden': true,
- 'data-is-active': false
- }).fadeOut(this.options.fadeOutDuration, function () {
- _this.isActive = false;
- _this.isClick = false;
- if (_this.classChanged) {
- _this.template.removeClass(_this._getPositionClass(_this.template)).addClass(_this.options.positionClass);
-
- _this.usedPositions = [];
- _this.counter = 4;
- _this.classChanged = false;
- }
- });
- /**
- * fires when the tooltip is hidden
- * @event Tooltip#hide
- */
- this.$element.trigger('hide.zf.tooltip');
- }
-
- /**
- * adds event listeners for the tooltip and its anchor
- * TODO combine some of the listeners like focus and mouseenter, etc.
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
- var $template = this.template;
- var isFocus = false;
-
- if (!this.options.disableHover) {
-
- this.$element.on('mouseenter.zf.tooltip', function (e) {
- if (!_this.isActive) {
- _this.timeout = setTimeout(function () {
- _this.show();
- }, _this.options.hoverDelay);
- }
- }).on('mouseleave.zf.tooltip', function (e) {
- clearTimeout(_this.timeout);
- if (!isFocus || _this.isClick && !_this.options.clickOpen) {
- _this.hide();
- }
- });
- }
-
- if (this.options.clickOpen) {
- this.$element.on('mousedown.zf.tooltip', function (e) {
- e.stopImmediatePropagation();
- if (_this.isClick) {
- //_this.hide();
- // _this.isClick = false;
- } else {
- _this.isClick = true;
- if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {
- _this.show();
- }
- }
- });
- } else {
- this.$element.on('mousedown.zf.tooltip', function (e) {
- e.stopImmediatePropagation();
- _this.isClick = true;
- });
- }
-
- if (!this.options.disableForTouch) {
- this.$element.on('tap.zf.tooltip touchend.zf.tooltip', function (e) {
- _this.isActive ? _this.hide() : _this.show();
- });
- }
-
- this.$element.on({
- // 'toggle.zf.trigger': this.toggle.bind(this),
- // 'close.zf.trigger': this.hide.bind(this)
- 'close.zf.trigger': this.hide.bind(this)
- });
-
- this.$element.on('focus.zf.tooltip', function (e) {
- isFocus = true;
- if (_this.isClick) {
- // If we're not showing open on clicks, we need to pretend a click-launched focus isn't
- // a real focus, otherwise on hover and come back we get bad behavior
- if (!_this.options.clickOpen) {
- isFocus = false;
- }
- return false;
- } else {
- _this.show();
- }
- }).on('focusout.zf.tooltip', function (e) {
- isFocus = false;
- _this.isClick = false;
- _this.hide();
- }).on('resizeme.zf.trigger', function () {
- if (_this.isActive) {
- _this._setPosition();
- }
- });
- }
-
- /**
- * adds a toggle method, in addition to the static show() & hide() functions
- * @function
- */
-
- }, {
- key: 'toggle',
- value: function toggle() {
- if (this.isActive) {
- this.hide();
- } else {
- this.show();
- }
- }
-
- /**
- * Destroys an instance of tooltip, removes template element from the view.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass('has-tip top right left').removeAttr('aria-describedby aria-haspopup data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');
-
- this.template.remove();
-
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return Tooltip;
- }();
-
- Tooltip.defaults = {
- disableForTouch: false,
- /**
- * Time, in ms, before a tooltip should open on hover.
- * @option
- * @type {number}
- * @default 200
- */
- hoverDelay: 200,
- /**
- * Time, in ms, a tooltip should take to fade into view.
- * @option
- * @type {number}
- * @default 150
- */
- fadeInDuration: 150,
- /**
- * Time, in ms, a tooltip should take to fade out of view.
- * @option
- * @type {number}
- * @default 150
- */
- fadeOutDuration: 150,
- /**
- * Disables hover events from opening the tooltip if set to true
- * @option
- * @type {boolean}
- * @default false
- */
- disableHover: false,
- /**
- * Optional addtional classes to apply to the tooltip template on init.
- * @option
- * @type {string}
- * @default ''
- */
- templateClasses: '',
- /**
- * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.
- * @option
- * @type {string}
- * @default 'tooltip'
- */
- tooltipClass: 'tooltip',
- /**
- * Class applied to the tooltip anchor element.
- * @option
- * @type {string}
- * @default 'has-tip'
- */
- triggerClass: 'has-tip',
- /**
- * Minimum breakpoint size at which to open the tooltip.
- * @option
- * @type {string}
- * @default 'small'
- */
- showOn: 'small',
- /**
- * Custom template to be used to generate markup for tooltip.
- * @option
- * @type {string}
- * @default ''
- */
- template: '',
- /**
- * Text displayed in the tooltip template on open.
- * @option
- * @type {string}
- * @default ''
- */
- tipText: '',
- touchCloseText: 'Tap to close.',
- /**
- * Allows the tooltip to remain open if triggered with a click or touch event.
- * @option
- * @type {boolean}
- * @default true
- */
- clickOpen: true,
- /**
- * Additional positioning classes, set by the JS
- * @option
- * @type {string}
- * @default ''
- */
- positionClass: '',
- /**
- * Distance, in pixels, the template should push away from the anchor on the Y axis.
- * @option
- * @type {number}
- * @default 10
- */
- vOffset: 10,
- /**
- * Distance, in pixels, the template should push away from the anchor on the X axis, if aligned to a side.
- * @option
- * @type {number}
- * @default 12
- */
- hOffset: 12,
- /**
- * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,
- * allowing HTML may open yourself up to XSS attacks.
- * @option
- * @type {boolean}
- * @default false
- */
- allowHtml: false
- };
-
- /**
- * TODO utilize resize event trigger
- */
-
- // Window exports
- Foundation.plugin(Tooltip, 'Tooltip');
-}(jQuery);
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-!function ($) {
-
- /**
- * ResponsiveAccordionTabs module.
- * @module foundation.responsiveAccordionTabs
- * @requires foundation.util.keyboard
- * @requires foundation.util.timerAndImageLoader
- * @requires foundation.util.motion
- * @requires foundation.accordion
- * @requires foundation.tabs
- */
-
- var ResponsiveAccordionTabs = function () {
- /**
- * Creates a new instance of a responsive accordion tabs.
- * @class
- * @fires ResponsiveAccordionTabs#init
- * @param {jQuery} element - jQuery object to make into a dropdown menu.
- * @param {Object} options - Overrides to the default plugin settings.
- */
- function ResponsiveAccordionTabs(element, options) {
- _classCallCheck(this, ResponsiveAccordionTabs);
-
- this.$element = $(element);
- this.options = $.extend({}, this.$element.data(), options);
- this.rules = this.$element.data('responsive-accordion-tabs');
- this.currentMq = null;
- this.currentPlugin = null;
- if (!this.$element.attr('id')) {
- this.$element.attr('id', Foundation.GetYoDigits(6, 'responsiveaccordiontabs'));
- };
-
- this._init();
- this._events();
-
- Foundation.registerPlugin(this, 'ResponsiveAccordionTabs');
- }
-
- /**
- * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.
- * @function
- * @private
- */
-
-
- _createClass(ResponsiveAccordionTabs, [{
- key: '_init',
- value: function _init() {
- // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules
- if (typeof this.rules === 'string') {
- var rulesTree = {};
-
- // Parse rules from "classes" pulled from data attribute
- var rules = this.rules.split(' ');
-
- // Iterate through every rule found
- for (var i = 0; i < rules.length; i++) {
- var rule = rules[i].split('-');
- var ruleSize = rule.length > 1 ? rule[0] : 'small';
- var rulePlugin = rule.length > 1 ? rule[1] : rule[0];
-
- if (MenuPlugins[rulePlugin] !== null) {
- rulesTree[ruleSize] = MenuPlugins[rulePlugin];
- }
- }
-
- this.rules = rulesTree;
- }
-
- this._getAllOptions();
-
- if (!$.isEmptyObject(this.rules)) {
- this._checkMediaQueries();
- }
- }
- }, {
- key: '_getAllOptions',
- value: function _getAllOptions() {
- //get all defaults and options
- var _this = this;
- _this.allOptions = {};
- for (var key in MenuPlugins) {
- if (MenuPlugins.hasOwnProperty(key)) {
- var obj = MenuPlugins[key];
- try {
- var dummyPlugin = $('<ul></ul>');
- var tmpPlugin = new obj.plugin(dummyPlugin, _this.options);
- for (var keyKey in tmpPlugin.options) {
- if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {
- var objObj = tmpPlugin.options[keyKey];
- _this.allOptions[keyKey] = objObj;
- }
- }
- tmpPlugin.destroy();
- } catch (e) {}
- }
- }
- }
-
- /**
- * Initializes events for the Menu.
- * @function
- * @private
- */
-
- }, {
- key: '_events',
- value: function _events() {
- var _this = this;
-
- $(window).on('changed.zf.mediaquery', function () {
- _this._checkMediaQueries();
- });
- }
-
- /**
- * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.
- * @function
- * @private
- */
-
- }, {
- key: '_checkMediaQueries',
- value: function _checkMediaQueries() {
- var matchedMq,
- _this = this;
- // Iterate through each rule and find the last matching rule
- $.each(this.rules, function (key) {
- if (Foundation.MediaQuery.atLeast(key)) {
- matchedMq = key;
- }
- });
-
- // No match? No dice
- if (!matchedMq) return;
-
- // Plugin already initialized? We good
- if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;
-
- // Remove existing plugin-specific CSS classes
- $.each(MenuPlugins, function (key, value) {
- _this.$element.removeClass(value.cssClass);
- });
-
- // Add the CSS class for the new plugin
- this.$element.addClass(this.rules[matchedMq].cssClass);
-
- // Create an instance of the new plugin
- if (this.currentPlugin) {
- //don't know why but on nested elements data zfPlugin get's lost
- if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin', this.storezfData);
- this.currentPlugin.destroy();
- }
- this._handleMarkup(this.rules[matchedMq].cssClass);
- this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});
- this.storezfData = this.currentPlugin.$element.data('zfPlugin');
- }
- }, {
- key: '_handleMarkup',
- value: function _handleMarkup(toSet) {
- var _this = this,
- fromString = 'accordion';
- var $panels = $('[data-tabs-content=' + this.$element.attr('id') + ']');
- if ($panels.length) fromString = 'tabs';
- if (fromString === toSet) {
- return;
- };
-
- var tabsTitle = _this.allOptions.linkClass ? _this.allOptions.linkClass : 'tabs-title';
- var tabsPanel = _this.allOptions.panelClass ? _this.allOptions.panelClass : 'tabs-panel';
-
- this.$element.removeAttr('role');
- var $liHeads = this.$element.children('.' + tabsTitle + ',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');
- var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');
-
- if (fromString === 'tabs') {
- $panels = $panels.children('.' + tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');
- $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');
- } else {
- $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');
- };
-
- $panels.css({ display: '', visibility: '' });
- $liHeads.css({ display: '', visibility: '' });
- if (toSet === 'accordion') {
- $panels.each(function (key, value) {
- $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content', '').removeClass('is-active').css({ height: '' });
- $('[data-tabs-content=' + _this.$element.attr('id') + ']').after('<div id="tabs-placeholder-' + _this.$element.attr('id') + '"></div>').remove();
- $liHeads.addClass('accordion-item').attr('data-accordion-item', '');
- $liHeadsA.addClass('accordion-title');
- });
- } else if (toSet === 'tabs') {
- var $tabsContent = $('[data-tabs-content=' + _this.$element.attr('id') + ']');
- var $placeholder = $('#tabs-placeholder-' + _this.$element.attr('id'));
- if ($placeholder.length) {
- $tabsContent = $('<div class="tabs-content"></div>').insertAfter($placeholder).attr('data-tabs-content', _this.$element.attr('id'));
- $placeholder.remove();
- } else {
- $tabsContent = $('<div class="tabs-content"></div>').insertAfter(_this.$element).attr('data-tabs-content', _this.$element.attr('id'));
- };
- $panels.each(function (key, value) {
- var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel);
- var hash = $liHeadsA.get(key).hash.slice(1);
- var id = $(value).attr('id') || Foundation.GetYoDigits(6, 'accordion');
- if (hash !== id) {
- if (hash !== '') {
- $(value).attr('id', hash);
- } else {
- hash = id;
- $(value).attr('id', hash);
- $($liHeadsA.get(key)).attr('href', $($liHeadsA.get(key)).attr('href').replace('#', '') + '#' + hash);
- };
- };
- var isActive = $($liHeads.get(key)).hasClass('is-active');
- if (isActive) {
- tempValue.addClass('is-active');
- };
- });
- $liHeads.addClass(tabsTitle);
- };
- }
-
- /**
- * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.
- * @function
- */
-
- }, {
- key: 'destroy',
- value: function destroy() {
- if (this.currentPlugin) this.currentPlugin.destroy();
- $(window).off('.zf.ResponsiveAccordionTabs');
- Foundation.unregisterPlugin(this);
- }
- }]);
-
- return ResponsiveAccordionTabs;
- }();
-
- ResponsiveAccordionTabs.defaults = {};
-
- // The plugin matches the plugin classes with these plugin instances.
- var MenuPlugins = {
- tabs: {
- cssClass: 'tabs',
- plugin: Foundation._plugins.tabs || null
- },
- accordion: {
- cssClass: 'accordion',
- plugin: Foundation._plugins.accordion || null
- }
- };
-
- // Window exports
- Foundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs');
-}(jQuery);
-$(document).foundation();
-//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsIndoYXQtaW5wdXQuanMiLCJmb3VuZGF0aW9uLmNvcmUuanMiLCJmb3VuZGF0aW9uLnV0aWwuYm94LmpzIiwiZm91bmRhdGlvbi51dGlsLmtleWJvYXJkLmpzIiwiZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnkuanMiLCJmb3VuZGF0aW9uLnV0aWwubW90aW9uLmpzIiwiZm91bmRhdGlvbi51dGlsLm5lc3QuanMiLCJmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlci5qcyIsImZvdW5kYXRpb24udXRpbC50b3VjaC5qcyIsImZvdW5kYXRpb24udXRpbC50cmlnZ2Vycy5qcyIsImZvdW5kYXRpb24uYWJpZGUuanMiLCJmb3VuZGF0aW9uLmFjY29yZGlvbi5qcyIsImZvdW5kYXRpb24uYWNjb3JkaW9uTWVudS5qcyIsImZvdW5kYXRpb24uZHJpbGxkb3duLmpzIiwiZm91bmRhdGlvbi5kcm9wZG93bi5qcyIsImZvdW5kYXRpb24uZHJvcGRvd25NZW51LmpzIiwiZm91bmRhdGlvbi5lcXVhbGl6ZXIuanMiLCJmb3VuZGF0aW9uLmludGVyY2hhbmdlLmpzIiwiZm91bmRhdGlvbi5tYWdlbGxhbi5qcyIsImZvdW5kYXRpb24ub2ZmY2FudmFzLmpzIiwiZm91bmRhdGlvbi5vcmJpdC5qcyIsImZvdW5kYXRpb24ucmVzcG9uc2l2ZU1lbnUuanMiLCJmb3VuZGF0aW9uLnJlc3BvbnNpdmVUb2dnbGUuanMiLCJmb3VuZGF0aW9uLnJldmVhbC5qcyIsImZvdW5kYXRpb24uc2xpZGVyLmpzIiwiZm91bmRhdGlvbi5zdGlja3kuanMiLCJmb3VuZGF0aW9uLnRhYnMuanMiLCJmb3VuZGF0aW9uLnRvZ2dsZXIuanMiLCJmb3VuZGF0aW9uLnRvb2x0aXAuanMiLCJmb3VuZGF0aW9uLnpmLnJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLmpzIiwiYXBwLmpzIl0sIm5hbWVzIjpbImdsb2JhbCIsImZhY3RvcnkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZG9jdW1lbnQiLCJ3IiwiRXJyb3IiLCJ3aW5kb3ciLCJub0dsb2JhbCIsImFyciIsInNsaWNlIiwiY29uY2F0IiwicHVzaCIsImluZGV4T2YiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsInN1cHBvcnQiLCJ2ZXJzaW9uIiwialF1ZXJ5Iiwic2VsZWN0b3IiLCJjb250ZXh0IiwiZm4iLCJpbml0IiwicnRyaW0iLCJybXNQcmVmaXgiLCJyZGFzaEFscGhhIiwiZmNhbWVsQ2FzZSIsImFsbCIsImxldHRlciIsInRvVXBwZXJDYXNlIiwicHJvdG90eXBlIiwianF1ZXJ5IiwiY29uc3RydWN0b3IiLCJsZW5ndGgiLCJ0b0FycmF5IiwiY2FsbCIsImdldCIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwicmV0IiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwibWFwIiwiZWxlbSIsImkiLCJhcHBseSIsImFyZ3VtZW50cyIsImZpcnN0IiwiZXEiLCJsYXN0IiwibGVuIiwiaiIsImVuZCIsInNvcnQiLCJzcGxpY2UiLCJleHRlbmQiLCJvcHRpb25zIiwibmFtZSIsInNyYyIsImNvcHkiLCJjb3B5SXNBcnJheSIsImNsb25lIiwidGFyZ2V0IiwiZGVlcCIsImlzRnVuY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsImlzUmVhZHkiLCJlcnJvciIsIm1zZyIsIm5vb3AiLCJvYmoiLCJ0eXBlIiwiQXJyYXkiLCJpc1dpbmRvdyIsImlzTnVtZXJpYyIsInJlYWxTdHJpbmdPYmoiLCJwYXJzZUZsb2F0Iiwia2V5Iiwibm9kZVR5cGUiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImNvZGUiLCJzY3JpcHQiLCJpbmRpcmVjdCIsImV2YWwiLCJ0cmltIiwiY3JlYXRlRWxlbWVudCIsInRleHQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJjYW1lbENhc2UiLCJzdHJpbmciLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiaXNBcnJheUxpa2UiLCJtYWtlQXJyYXkiLCJyZXN1bHRzIiwiT2JqZWN0IiwiaW5BcnJheSIsInNlY29uZCIsImdyZXAiLCJpbnZlcnQiLCJjYWxsYmFja0ludmVyc2UiLCJtYXRjaGVzIiwiY2FsbGJhY2tFeHBlY3QiLCJhcmciLCJ2YWx1ZSIsImd1aWQiLCJwcm94eSIsInRtcCIsImFyZ3MiLCJub3ciLCJEYXRlIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJzcGxpdCIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwiY29udGFpbnMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwic29ydE9yZGVyIiwiYSIsImIiLCJNQVhfTkVHQVRJVkUiLCJwb3AiLCJwdXNoX25hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsIlJlZ0V4cCIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJhdHRyaWJ1dGVRdW90ZXMiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJyaW5wdXRzIiwicmhlYWRlciIsInJuYXRpdmUiLCJycXVpY2tFeHByIiwicnNpYmxpbmciLCJyZXNjYXBlIiwicnVuZXNjYXBlIiwiZnVuZXNjYXBlIiwiXyIsImVzY2FwZWQiLCJlc2NhcGVkV2hpdGVzcGFjZSIsImhpZ2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ1bmxvYWRIYW5kbGVyIiwiY2hpbGROb2RlcyIsImUiLCJlbHMiLCJzZWVkIiwibSIsIm5pZCIsIm5pZHNlbGVjdCIsIm1hdGNoIiwiZ3JvdXBzIiwibmV3U2VsZWN0b3IiLCJuZXdDb250ZXh0Iiwib3duZXJEb2N1bWVudCIsImV4ZWMiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicXNhIiwidGVzdCIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRvU2VsZWN0b3IiLCJqb2luIiwidGVzdENvbnRleHQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicXNhRXJyb3IiLCJyZW1vdmVBdHRyaWJ1dGUiLCJrZXlzIiwiY2FjaGUiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZGl2IiwiYWRkSGFuZGxlIiwiYXR0cnMiLCJoYW5kbGVyIiwiYXR0ckhhbmRsZSIsInNpYmxpbmdDaGVjayIsImN1ciIsImRpZmYiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJkb2N1bWVudEVsZW1lbnQiLCJub2RlIiwiaGFzQ29tcGFyZSIsInBhcmVudCIsImRvYyIsImRlZmF1bHRWaWV3IiwidG9wIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiY2xhc3NOYW1lIiwiY3JlYXRlQ29tbWVudCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImZpbmQiLCJmaWx0ZXIiLCJhdHRySWQiLCJnZXRBdHRyaWJ1dGVOb2RlIiwidGFnIiwiaW5uZXJIVE1MIiwiaW5wdXQiLCJtYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJkaXNjb25uZWN0ZWRNYXRjaCIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiYWRvd24iLCJidXAiLCJjb21wYXJlIiwic29ydERldGFjaGVkIiwiYXVwIiwiYXAiLCJicCIsInVuc2hpZnQiLCJleHByIiwiZWxlbWVudHMiLCJhdHRyIiwidmFsIiwic3BlY2lmaWVkIiwidW5pcXVlU29ydCIsImR1cGxpY2F0ZXMiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsInRleHRDb250ZW50IiwiZmlyc3RDaGlsZCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiZGlyIiwicHJlRmlsdGVyIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJyZXN1bHQiLCJ3aGF0Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInN0YXJ0IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJ1bmlxdWVJRCIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImlubmVyVGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJsb2NhdGlvbiIsImFjdGl2ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImhyZWYiLCJ0YWJJbmRleCIsImRpc2FibGVkIiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiYmFzZSIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsIm9sZENhY2hlIiwibmV3Q2FjaGUiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwibXVsdGlwbGVDb250ZXh0cyIsImNvbnRleHRzIiwiY29uZGVuc2UiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJ0b2tlbiIsImNvbXBpbGVkIiwiZGl2MSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJuIiwicm5lZWRzQ29udGV4dCIsIm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJyaXNTaW1wbGUiLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJub3QiLCJzZWxmIiwicm9vdGpRdWVyeSIsInJvb3QiLCJwYXJzZUhUTUwiLCJyZWFkeSIsInJwYXJlbnRzcHJldiIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwibmV4dCIsInByZXYiLCJoYXMiLCJ0YXJnZXRzIiwibCIsImNsb3Nlc3QiLCJwb3MiLCJpbmRleCIsInByZXZBbGwiLCJhZGQiLCJhZGRCYWNrIiwic2libGluZyIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwicmV2ZXJzZSIsInJub3R3aGl0ZSIsImNyZWF0ZU9wdGlvbnMiLCJvYmplY3QiLCJmbGFnIiwiQ2FsbGJhY2tzIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsIm9uY2UiLCJzdG9wT25GYWxzZSIsInJlbW92ZSIsImVtcHR5IiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwicHJvbWlzZSIsImFsd2F5cyIsImRlZmVycmVkIiwiZmFpbCIsInRoZW4iLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsInJlc29sdmUiLCJyZWplY3QiLCJwaXBlIiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic3Vib3JkaW5hdGUiLCJyZXNvbHZlVmFsdWVzIiwicmVtYWluaW5nIiwidXBkYXRlRnVuYyIsInZhbHVlcyIsInByb2dyZXNzVmFsdWVzIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvZ3Jlc3NDb250ZXh0cyIsInJlc29sdmVDb250ZXh0cyIsInJlYWR5TGlzdCIsInJlYWR5V2FpdCIsImhvbGRSZWFkeSIsImhvbGQiLCJ3YWl0IiwidHJpZ2dlckhhbmRsZXIiLCJvZmYiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHlTdGF0ZSIsImRvU2Nyb2xsIiwic2V0VGltZW91dCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJyZWdpc3RlciIsImluaXRpYWwiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwic2V0IiwiZGF0YSIsInByb3AiLCJzdG9yZWQiLCJjYW1lbCIsImhhc0RhdGEiLCJkYXRhUHJpdiIsImRhdGFVc2VyIiwicmJyYWNlIiwicm11bHRpRGFzaCIsImRhdGFBdHRyIiwicGFyc2VKU09OIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJjYW1lbEtleSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJzdG9wIiwic2V0dGVyIiwiY2xlYXJRdWV1ZSIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwic291cmNlIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzSGlkZGVuIiwiZWwiLCJjc3MiLCJhZGp1c3RDU1MiLCJ2YWx1ZVBhcnRzIiwidHdlZW4iLCJhZGp1c3RlZCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImN1cnJlbnRWYWx1ZSIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0Iiwic3R5bGUiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJ3cmFwTWFwIiwib3B0aW9uIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwiX2RlZmF1bHQiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJyZWZFbGVtZW50cyIsInJodG1sIiwiYnVpbGRGcmFnbWVudCIsInNjcmlwdHMiLCJzZWxlY3Rpb24iLCJpZ25vcmVkIiwid3JhcCIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm5vZGVzIiwiY3JlYXRlVGV4dE5vZGUiLCJodG1sUHJlZmlsdGVyIiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50IiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJzcGVjaWFsIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJmaXgiLCJoYW5kbGVyUXVldWUiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJpc05hTiIsImJ1dHRvbiIsInByb3BzIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIm9yaWdpbmFsIiwid2hpY2giLCJjaGFyQ29kZSIsImtleUNvZGUiLCJtb3VzZUhvb2tzIiwiZXZlbnREb2MiLCJib2R5IiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJvcmlnaW5hbEV2ZW50IiwiZml4SG9vayIsIkV2ZW50IiwibG9hZCIsIm5vQnViYmxlIiwiZm9jdXMiLCJ0cmlnZ2VyIiwiYmx1ciIsImNsaWNrIiwiYmVmb3JldW5sb2FkIiwicmV0dXJuVmFsdWUiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGltZVN0YW1wIiwiaXNTaW11bGF0ZWQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsInJ4aHRtbFRhZyIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicnNjcmlwdFR5cGVNYXNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJjb250ZW50IiwiZGlzYWJsZVNjcmlwdCIsInJlc3RvcmVTY3JpcHQiLCJjbG9uZUNvcHlFdmVudCIsImRlc3QiLCJwZGF0YU9sZCIsInBkYXRhQ3VyIiwidWRhdGFPbGQiLCJ1ZGF0YUN1ciIsImZpeElucHV0IiwiZG9tTWFuaXAiLCJjb2xsZWN0aW9uIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwiaHRtbCIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImRldGFjaCIsImFwcGVuZCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJpbnNlcnQiLCJpZnJhbWUiLCJlbGVtZGlzcGxheSIsIkhUTUwiLCJCT0RZIiwiYWN0dWFsRGlzcGxheSIsImRpc3BsYXkiLCJkZWZhdWx0RGlzcGxheSIsIndyaXRlIiwiY2xvc2UiLCJybWFyZ2luIiwicm51bW5vbnB4IiwiZ2V0U3R5bGVzIiwidmlldyIsIm9wZW5lciIsImdldENvbXB1dGVkU3R5bGUiLCJzd2FwIiwib2xkIiwicGl4ZWxQb3NpdGlvblZhbCIsImJveFNpemluZ1JlbGlhYmxlVmFsIiwicGl4ZWxNYXJnaW5SaWdodFZhbCIsInJlbGlhYmxlTWFyZ2luTGVmdFZhbCIsImNvbnRhaW5lciIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiY3NzVGV4dCIsImNvbXB1dGVTdHlsZVRlc3RzIiwiZGl2U3R5bGUiLCJtYXJnaW5MZWZ0Iiwid2lkdGgiLCJtYXJnaW5SaWdodCIsInBpeGVsUG9zaXRpb24iLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsTWFyZ2luUmlnaHQiLCJyZWxpYWJsZU1hcmdpbkxlZnQiLCJyZWxpYWJsZU1hcmdpblJpZ2h0IiwibWFyZ2luRGl2IiwiY3VyQ1NTIiwiY29tcHV0ZWQiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImFkZEdldEhvb2tJZiIsImNvbmRpdGlvbkZuIiwiaG9va0ZuIiwicmRpc3BsYXlzd2FwIiwiY3NzU2hvdyIsInBvc2l0aW9uIiwidmlzaWJpbGl0eSIsImNzc05vcm1hbFRyYW5zZm9ybSIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzUHJlZml4ZXMiLCJlbXB0eVN0eWxlIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwic2V0UG9zaXRpdmVOdW1iZXIiLCJzdWJ0cmFjdCIsIm1heCIsImF1Z21lbnRXaWR0aE9ySGVpZ2h0IiwiZXh0cmEiLCJpc0JvcmRlckJveCIsInN0eWxlcyIsImdldFdpZHRoT3JIZWlnaHQiLCJ2YWx1ZUlzQm9yZGVyQm94Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG93SGlkZSIsInNob3ciLCJoaWRkZW4iLCJjc3NIb29rcyIsIm9wYWNpdHkiLCJjc3NQcm9wcyIsIm9yaWdOYW1lIiwiaXNGaW5pdGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInByZWZpeCIsInN1ZmZpeCIsImV4cGFuZCIsImV4cGFuZGVkIiwicGFydHMiLCJoaWRlIiwidG9nZ2xlIiwiVHdlZW4iLCJlYXNpbmciLCJwcm9wSG9va3MiLCJydW4iLCJwZXJjZW50IiwiZWFzZWQiLCJkdXJhdGlvbiIsInN0ZXAiLCJmeCIsImxpbmVhciIsInAiLCJzd2luZyIsImNvcyIsIlBJIiwiZnhOb3ciLCJ0aW1lcklkIiwicmZ4dHlwZXMiLCJycnVuIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJkZWZhdWx0UHJlZmlsdGVyIiwib3B0cyIsIm9sZGZpcmUiLCJjaGVja0Rpc3BsYXkiLCJhbmltIiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJ0aWNrIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJ0d2VlbnMiLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJvcmlnaW5hbE9wdGlvbnMiLCJnb3RvRW5kIiwicmVqZWN0V2l0aCIsInRpbWVyIiwiY29tcGxldGUiLCJ0d2VlbmVyIiwicHJlZmlsdGVyIiwic3BlZWQiLCJvcHQiLCJzcGVlZHMiLCJmYWRlVG8iLCJ0byIsImFuaW1hdGUiLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImNzc0ZuIiwic2xpZGVEb3duIiwic2xpZGVVcCIsInNsaWRlVG9nZ2xlIiwiZmFkZUluIiwiZmFkZU91dCIsImZhZGVUb2dnbGUiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJ0aW1lIiwidGltZW91dCIsImNsZWFyVGltZW91dCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsInByb3BOYW1lIiwiYXR0ck5hbWVzIiwicHJvcEZpeCIsImdldHRlciIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwicmVtb3ZlUHJvcCIsInRhYmluZGV4IiwicGFyc2VJbnQiLCJyY2xhc3MiLCJnZXRDbGFzcyIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiY2xhc3NOYW1lcyIsImhhc0NsYXNzIiwicnJldHVybiIsInJzcGFjZXMiLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsInJmb2N1c01vcnBoIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImV2ZW50UGF0aCIsImlzVHJpZ2dlciIsInBhcmVudFdpbmRvdyIsInNpbXVsYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImZvY3VzaW4iLCJhdHRhY2hlcyIsIm5vbmNlIiwicnF1ZXJ5IiwiSlNPTiIsInBhcnNlIiwicGFyc2VYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwidHJhbnNwb3J0cyIsImFsbFR5cGVzIiwib3JpZ2luQW5jaG9yIiwiYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwic3RydWN0dXJlIiwiZGF0YVR5cGVFeHByZXNzaW9uIiwiZGF0YVR5cGUiLCJkYXRhVHlwZXMiLCJpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsImpxWEhSIiwiaW5zcGVjdGVkIiwic2Vla2luZ1RyYW5zcG9ydCIsImluc3BlY3QiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheFNldHRpbmdzIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInMiLCJyZXNwb25zZXMiLCJjdCIsImZpbmFsRGF0YVR5cGUiLCJmaXJzdERhdGFUeXBlIiwibWltZVR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImNvbnZlcnRlcnMiLCJhamF4Q29udmVydCIsInJlc3BvbnNlIiwiaXNTdWNjZXNzIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsInJlc3BvbnNlRmllbGRzIiwiZGF0YUZpbHRlciIsInRocm93cyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvdG9jb2wiLCJwcm9jZXNzRGF0YSIsImFzeW5jIiwiY29udGVudFR5cGUiLCJhY2NlcHRzIiwianNvbiIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJhamF4IiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJ1cmxBbmNob3IiLCJmaXJlR2xvYmFscyIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwibG5hbWUiLCJvdmVycmlkZU1pbWVUeXBlIiwic3RhdHVzIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwiaG9zdCIsInBhcmFtIiwidHJhZGl0aW9uYWwiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwic2VuZCIsIm5hdGl2ZVN0YXR1c1RleHQiLCJtb2RpZmllZCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJ1bndyYXAiLCJ2aXNpYmxlIiwiZ2V0Q2xpZW50UmVjdHMiLCJyMjAiLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwiYnVpbGRQYXJhbXMiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplIiwic2VyaWFsaXplQXJyYXkiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJjb3JzIiwiZXJyb3JDYWxsYmFjayIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwia2VlcFNjcmlwdHMiLCJwYXJzZWQiLCJfbG9hZCIsInBhcmFtcyIsImFuaW1hdGVkIiwiZ2V0V2luZG93Iiwib2Zmc2V0Iiwic2V0T2Zmc2V0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwiY3VyRWxlbSIsInVzaW5nIiwid2luIiwiYm94IiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsImJpbmQiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJzaXplIiwiYW5kU2VsZiIsImRlZmluZSIsImFtZCIsIl9qUXVlcnkiLCJfJCIsIiQiLCJub0NvbmZsaWN0IiwiRk9VTkRBVElPTl9WRVJTSU9OIiwiRm91bmRhdGlvbiIsIl9wbHVnaW5zIiwiX3V1aWRzIiwicnRsIiwicGx1Z2luIiwiZnVuY3Rpb25OYW1lIiwiYXR0ck5hbWUiLCJoeXBoZW5hdGUiLCJyZWdpc3RlclBsdWdpbiIsInBsdWdpbk5hbWUiLCJ1dWlkIiwiR2V0WW9EaWdpdHMiLCIkZWxlbWVudCIsInVucmVnaXN0ZXJQbHVnaW4iLCJyZUluaXQiLCJwbHVnaW5zIiwiaXNKUSIsIl9pbml0IiwiX3RoaXMiLCJwbGdzIiwiZm9yRWFjaCIsImZvdW5kYXRpb24iLCJjb25zb2xlIiwicm91bmQiLCJwb3ciLCJyZWZsb3ciLCIkZWxlbSIsIiRlbCIsIndhcm4iLCJ0aGluZyIsInBhcnNlVmFsdWUiLCJlciIsImdldEZuTmFtZSIsInRyYW5zaXRpb25lbmQiLCJ0cmFuc2l0aW9ucyIsInV0aWwiLCJ0aHJvdHRsZSIsIiRtZXRhIiwiJG5vSlMiLCJNZWRpYVF1ZXJ5IiwicGx1Z0NsYXNzIiwiUmVmZXJlbmNlRXJyb3IiLCJUeXBlRXJyb3IiLCJnZXRUaW1lIiwidmVuZG9ycyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInZwIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJsYXN0VGltZSIsIm5leHRUaW1lIiwicGVyZm9ybWFuY2UiLCJGdW5jdGlvbiIsIm9UaGlzIiwiYUFyZ3MiLCJmVG9CaW5kIiwiZk5PUCIsImZCb3VuZCIsImZ1bmNOYW1lUmVnZXgiLCJzdHIiLCJCb3giLCJJbU5vdFRvdWNoaW5nWW91IiwiR2V0RGltZW5zaW9ucyIsIkdldE9mZnNldHMiLCJlbGVtZW50IiwibHJPbmx5IiwidGJPbmx5IiwiZWxlRGltcyIsImJvdHRvbSIsInJpZ2h0IiwicGFyRGltcyIsIndpbmRvd0RpbXMiLCJhbGxEaXJzIiwicmVjdCIsInBhclJlY3QiLCJ3aW5SZWN0Iiwid2luWSIsIndpblgiLCJwYXJlbnREaW1zIiwiYW5jaG9yIiwidk9mZnNldCIsImhPZmZzZXQiLCJpc092ZXJmbG93IiwiJGVsZURpbXMiLCIkYW5jaG9yRGltcyIsImtleUNvZGVzIiwiY29tbWFuZHMiLCJLZXlib2FyZCIsImdldEtleUNvZGVzIiwicGFyc2VLZXkiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJoYW5kbGVLZXkiLCJjb21wb25lbnQiLCJmdW5jdGlvbnMiLCJjb21tYW5kTGlzdCIsImNtZHMiLCJjb21tYW5kIiwibHRyIiwiaGFuZGxlZCIsInVuaGFuZGxlZCIsImZpbmRGb2N1c2FibGUiLCJjb21wb25lbnROYW1lIiwidHJhcEZvY3VzIiwiJGZvY3VzYWJsZSIsIiRmaXJzdEZvY3VzYWJsZSIsIiRsYXN0Rm9jdXNhYmxlIiwicmVsZWFzZUZvY3VzIiwia2NzIiwiayIsImtjIiwiZGVmYXVsdFF1ZXJpZXMiLCJsYW5kc2NhcGUiLCJwb3J0cmFpdCIsInJldGluYSIsInF1ZXJpZXMiLCJleHRyYWN0ZWRTdHlsZXMiLCJuYW1lZFF1ZXJpZXMiLCJwYXJzZVN0eWxlVG9PYmplY3QiLCJfZ2V0Q3VycmVudFNpemUiLCJfd2F0Y2hlciIsImF0TGVhc3QiLCJxdWVyeSIsIm1hdGNoTWVkaWEiLCJuZXdTaXplIiwiY3VycmVudFNpemUiLCJzdHlsZU1lZGlhIiwibWVkaWEiLCJpbmZvIiwiY3VycmVudFN0eWxlIiwibWF0Y2hNZWRpdW0iLCJzdHlsZVNoZWV0Iiwic3R5bGVPYmplY3QiLCJyZWR1Y2UiLCJkZWNvZGVVUklDb21wb25lbnQiLCJpbml0Q2xhc3NlcyIsImFjdGl2ZUNsYXNzZXMiLCJNb3Rpb24iLCJhbmltYXRlSW4iLCJjYiIsImFuaW1hdGVPdXQiLCJNb3ZlIiwicHJvZyIsIm1vdmUiLCJ0cyIsImlzSW4iLCJpbml0Q2xhc3MiLCJhY3RpdmVDbGFzcyIsInRyYW5zaXRpb25EdXJhdGlvbiIsIk5lc3QiLCJGZWF0aGVyIiwibWVudSIsIml0ZW1zIiwic3ViTWVudUNsYXNzIiwic3ViSXRlbUNsYXNzIiwiaGFzU3ViQ2xhc3MiLCIkaXRlbSIsIiRzdWIiLCJCdXJuIiwiVGltZXIiLCJuYW1lU3BhY2UiLCJyZW1haW4iLCJpc1BhdXNlZCIsInJlc3RhcnQiLCJpbmZpbml0ZSIsInBhdXNlIiwib25JbWFnZXNMb2FkZWQiLCJpbWFnZXMiLCJ1bmxvYWRlZCIsInNpbmdsZUltYWdlTG9hZGVkIiwic3BvdFN3aXBlIiwiZW5hYmxlZCIsIm1vdmVUaHJlc2hvbGQiLCJ0aW1lVGhyZXNob2xkIiwic3RhcnRQb3NYIiwic3RhcnRQb3NZIiwiZWxhcHNlZFRpbWUiLCJpc01vdmluZyIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIngiLCJ0b3VjaGVzIiwieSIsImR4IiwiZHkiLCJhYnMiLCJvblRvdWNoU3RhcnQiLCJzd2lwZSIsImFkZFRvdWNoIiwiaGFuZGxlVG91Y2giLCJjaGFuZ2VkVG91Y2hlcyIsImV2ZW50VHlwZXMiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJzaW11bGF0ZWRFdmVudCIsIk1vdXNlRXZlbnQiLCJzY3JlZW5YIiwic2NyZWVuWSIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiTXV0YXRpb25PYnNlcnZlciIsInByZWZpeGVzIiwidHJpZ2dlcnMiLCJjaGVja0xpc3RlbmVycyIsImV2ZW50c0xpc3RlbmVyIiwicmVzaXplTGlzdGVuZXIiLCJzY3JvbGxMaXN0ZW5lciIsImNsb3NlbWVMaXN0ZW5lciIsInlldGlCb3hlcyIsInBsdWdOYW1lcyIsImxpc3RlbmVycyIsInBsdWdpbklkIiwiZGVib3VuY2UiLCIkbm9kZXMiLCJsaXN0ZW5pbmdFbGVtZW50c011dGF0aW9uIiwibXV0YXRpb25SZWNvcmRzTGlzdCIsIiR0YXJnZXQiLCJhdHRyaWJ1dGVOYW1lIiwiZWxlbWVudE9ic2VydmVyIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwiYXR0cmlidXRlRmlsdGVyIiwiSUhlYXJZb3UiLCJBYmlkZSIsImRlZmF1bHRzIiwiJGlucHV0cyIsIl9ldmVudHMiLCJyZXNldEZvcm0iLCJ2YWxpZGF0ZUZvcm0iLCJ2YWxpZGF0ZU9uIiwidmFsaWRhdGVJbnB1dCIsImxpdmVWYWxpZGF0ZSIsInZhbGlkYXRlT25CbHVyIiwiaXNHb29kIiwiJGVycm9yIiwiZm9ybUVycm9yU2VsZWN0b3IiLCIkbGFiZWwiLCIkZWxzIiwibGFiZWxzIiwiZmluZExhYmVsIiwiJGZvcm1FcnJvciIsImZpbmRGb3JtRXJyb3IiLCJsYWJlbEVycm9yQ2xhc3MiLCJmb3JtRXJyb3JDbGFzcyIsImlucHV0RXJyb3JDbGFzcyIsImdyb3VwTmFtZSIsIiRsYWJlbHMiLCJmaW5kUmFkaW9MYWJlbHMiLCIkZm9ybUVycm9ycyIsInJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzIiwiY2xlYXJSZXF1aXJlIiwicmVxdWlyZWRDaGVjayIsInZhbGlkYXRlZCIsImN1c3RvbVZhbGlkYXRvciIsInZhbGlkYXRvciIsImVxdWFsVG8iLCJ2YWxpZGF0ZVJhZGlvIiwidmFsaWRhdGVUZXh0IiwibWF0Y2hWYWxpZGF0aW9uIiwidmFsaWRhdG9ycyIsImdvb2RUb0dvIiwibWVzc2FnZSIsImRlcGVuZGVudEVsZW1lbnRzIiwiYWNjIiwibm9FcnJvciIsImlucHV0VGV4dCIsInZhbGlkIiwicGF0dGVybnMiLCIkZ3JvdXAiLCJyZXF1aXJlZCIsImNsZWFyIiwiJGZvcm0iLCJyZW1vdmVFcnJvckNsYXNzZXMiLCJhbHBoYSIsImFscGhhX251bWVyaWMiLCJpbnRlZ2VyIiwibnVtYmVyIiwiY2FyZCIsImN2diIsImVtYWlsIiwiZG9tYWluIiwiZGF0ZXRpbWUiLCJkYXRlIiwiZGF0ZUlTTyIsIm1vbnRoX2RheV95ZWFyIiwiZGF5X21vbnRoX3llYXIiLCJjb2xvciIsIkFjY29yZGlvbiIsIiR0YWJzIiwiJGNvbnRlbnQiLCJsaW5rSWQiLCIkaW5pdEFjdGl2ZSIsImZpcnN0VGltZUluaXQiLCJkb3duIiwiX2NoZWNrRGVlcExpbmsiLCIkbGluayIsIiRhbmNob3IiLCJkZWVwTGlua1NtdWRnZSIsImRlZXBMaW5rU211ZGdlRGVsYXkiLCJkZWVwTGluayIsIiR0YWJDb250ZW50IiwiJGEiLCJtdWx0aUV4cGFuZCIsInByZXZpb3VzIiwidXAiLCJ1cGRhdGVIaXN0b3J5IiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsInJlcGxhY2VTdGF0ZSIsImZpcnN0VGltZSIsIiRjdXJyZW50QWN0aXZlIiwic2xpZGVTcGVlZCIsIiRhdW50cyIsImFsbG93QWxsQ2xvc2VkIiwiQWNjb3JkaW9uTWVudSIsIm11bHRpT3BlbiIsIiRtZW51TGlua3MiLCJzdWJJZCIsImlzQWN0aXZlIiwiaW5pdFBhbmVzIiwiJHN1Ym1lbnUiLCIkZWxlbWVudHMiLCIkcHJldkVsZW1lbnQiLCIkbmV4dEVsZW1lbnQiLCJtaW4iLCJjbG9zZUFsbCIsImhpZGVBbGwiLCIkbWVudXMiLCJEcmlsbGRvd24iLCIkc3VibWVudUFuY2hvcnMiLCIkc3VibWVudXMiLCIkbWVudUl0ZW1zIiwiX3ByZXBhcmVNZW51IiwiX3JlZ2lzdGVyRXZlbnRzIiwiX2tleWJvYXJkRXZlbnRzIiwicGFyZW50TGluayIsIiRtZW51IiwiJGJhY2siLCJiYWNrQnV0dG9uUG9zaXRpb24iLCJiYWNrQnV0dG9uIiwiX2JhY2siLCJhdXRvSGVpZ2h0IiwiJHdyYXBwZXIiLCJ3cmFwcGVyIiwiYW5pbWF0ZUhlaWdodCIsIl9nZXRNYXhEaW1zIiwiX3Nob3ciLCJjbG9zZU9uQ2xpY2siLCIkYm9keSIsIl9oaWRlQWxsIiwiX3Jlc2l6ZSIsIl9iaW5kSGFuZGxlciIsIl9zY3JvbGxUb3AiLCIkc2Nyb2xsVG9wRWxlbWVudCIsInNjcm9sbFRvcEVsZW1lbnQiLCJzY3JvbGxQb3MiLCJzY3JvbGxUb3BPZmZzZXQiLCJhbmltYXRpb25EdXJhdGlvbiIsImFuaW1hdGlvbkVhc2luZyIsIl9oaWRlIiwicGFyZW50U3ViTWVudSIsIm1heEhlaWdodCIsIm51bU9mRWxlbXMiLCJEcm9wZG93biIsIiRpZCIsInBhcmVudENsYXNzIiwiJHBhcmVudCIsInBvc2l0aW9uQ2xhc3MiLCJnZXRQb3NpdGlvbkNsYXNzIiwiY291bnRlciIsInVzZWRQb3NpdGlvbnMiLCJ2ZXJ0aWNhbFBvc2l0aW9uIiwiaG9yaXpvbnRhbFBvc2l0aW9uIiwiY2xhc3NDaGFuZ2VkIiwiZGlyZWN0aW9uIiwibmV3V2lkdGgiLCJwYXJlbnRIT2Zmc2V0IiwiJHBhcmVudERpbXMiLCJfcmVwb3NpdGlvbiIsIl9zZXRQb3NpdGlvbiIsImJvZHlEYXRhIiwid2hhdGlucHV0IiwiaG92ZXJEZWxheSIsImhvdmVyUGFuZSIsInZpc2libGVGb2N1c2FibGVFbGVtZW50cyIsImF1dG9Gb2N1cyIsIl9hZGRCb2R5SGFuZGxlciIsImN1clBvc2l0aW9uQ2xhc3MiLCJEcm9wZG93bk1lbnUiLCJzdWJzIiwidmVydGljYWxDbGFzcyIsInJpZ2h0Q2xhc3MiLCJhbGlnbm1lbnQiLCJjaGFuZ2VkIiwiaGFzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJwYXJDbGFzcyIsImhhbmRsZUNsaWNrRm4iLCJoYXNTdWIiLCJoYXNDbGlja2VkIiwiY2xpY2tPcGVuIiwiZm9yY2VGb2xsb3ciLCJjbG9zZU9uQ2xpY2tJbnNpZGUiLCJkaXNhYmxlSG92ZXIiLCJhdXRvY2xvc2UiLCJjbG9zaW5nVGltZSIsImlzVGFiIiwicHJldlNpYmxpbmciLCJvcGVuU3ViIiwiY2xvc2VTdWIiLCJfaXNWZXJ0aWNhbCIsIiRzaWJzIiwib2xkQ2xhc3MiLCIkcGFyZW50TGkiLCIkdG9DbG9zZSIsInNvbWV0aGluZ1RvQ2xvc2UiLCJFcXVhbGl6ZXIiLCJlcUlkIiwiJHdhdGNoZWQiLCJoYXNOZXN0ZWQiLCJpc05lc3RlZCIsImlzT24iLCJvblJlc2l6ZU1lQm91bmQiLCJfb25SZXNpemVNZSIsIm9uUG9zdEVxdWFsaXplZEJvdW5kIiwiX29uUG9zdEVxdWFsaXplZCIsImltZ3MiLCJ0b29TbWFsbCIsImVxdWFsaXplT24iLCJfY2hlY2tNUSIsIl9yZWZsb3ciLCJfcGF1c2VFdmVudHMiLCJlcXVhbGl6ZU9uU3RhY2siLCJfaXNTdGFja2VkIiwiZXF1YWxpemVCeVJvdyIsImdldEhlaWdodHNCeVJvdyIsImFwcGx5SGVpZ2h0QnlSb3ciLCJnZXRIZWlnaHRzIiwiYXBwbHlIZWlnaHQiLCJoZWlnaHRzIiwibGFzdEVsVG9wT2Zmc2V0IiwiZ3JvdXAiLCJlbE9mZnNldFRvcCIsImxuIiwiZ3JvdXBzSUxlbmd0aCIsImxlbkoiLCJJbnRlcmNoYW5nZSIsInJ1bGVzIiwiY3VycmVudFBhdGgiLCJfYWRkQnJlYWtwb2ludHMiLCJfZ2VuZXJhdGVSdWxlcyIsInJ1bGUiLCJwYXRoIiwiU1BFQ0lBTF9RVUVSSUVTIiwicnVsZXNMaXN0IiwiTWFnZWxsYW4iLCJjYWxjUG9pbnRzIiwiJHRhcmdldHMiLCIkbGlua3MiLCIkYWN0aXZlIiwicG9pbnRzIiwid2luSGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkb2NIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCIkdGFyIiwicHQiLCJ0aHJlc2hvbGQiLCJ0YXJnZXRQb2ludCIsImRlZXBMaW5raW5nIiwic2Nyb2xsVG9Mb2MiLCJfdXBkYXRlQWN0aXZlIiwiYXJyaXZhbCIsImxvYyIsIl9pblRyYW5zaXRpb24iLCJiYXJPZmZzZXQiLCJ3aW5Qb3MiLCJjdXJJZHgiLCJpc0Rvd24iLCJjdXJWaXNpYmxlIiwiT2ZmQ2FudmFzIiwiJGxhc3RUcmlnZ2VyIiwiJHRyaWdnZXJzIiwidHJhbnNpdGlvbiIsImNvbnRlbnRPdmVybGF5Iiwib3ZlcmxheSIsIm92ZXJsYXlQb3NpdGlvbiIsIiRvdmVybGF5IiwiaXNSZXZlYWxlZCIsInJldmVhbENsYXNzIiwicmV2ZWFsT24iLCJfc2V0TVFDaGVja2VyIiwidHJhbnNpdGlvblRpbWUiLCJfaGFuZGxlS2V5Ym9hcmQiLCJyZXZlYWwiLCIkY2xvc2VyIiwiYWxsb3dVcCIsImFsbG93RG93biIsImxhc3RZIiwiZm9yY2VUbyIsImNvbnRlbnRTY3JvbGwiLCJfc3RvcFNjcm9sbGluZyIsIl9yZWNvcmRTY3JvbGxhYmxlIiwiX3N0b3BTY3JvbGxQcm9wYWdhdGlvbiIsImNhbnZhc0ZvY3VzIiwiT3JiaXQiLCJfcmVzZXQiLCJjb250YWluZXJDbGFzcyIsIiRzbGlkZXMiLCJzbGlkZUNsYXNzIiwiJGltYWdlcyIsImluaXRBY3RpdmUiLCJ1c2VNVUkiLCJfcHJlcGFyZUZvck9yYml0IiwiYnVsbGV0cyIsIl9sb2FkQnVsbGV0cyIsImF1dG9QbGF5IiwiZ2VvU3luYyIsImFjY2Vzc2libGUiLCIkYnVsbGV0cyIsImJveE9mQnVsbGV0cyIsInRpbWVyRGVsYXkiLCJjaGFuZ2VTbGlkZSIsIl9zZXRXcmFwcGVySGVpZ2h0IiwicGF1c2VPbkhvdmVyIiwibmF2QnV0dG9ucyIsIiRjb250cm9scyIsIm5leHRDbGFzcyIsInByZXZDbGFzcyIsIiRzbGlkZSIsIl91cGRhdGVCdWxsZXRzIiwiaXNMVFIiLCJjaG9zZW5TbGlkZSIsIiRjdXJTbGlkZSIsIiRmaXJzdFNsaWRlIiwiJGxhc3RTbGlkZSIsImRpckluIiwiZGlyT3V0IiwiJG5ld1NsaWRlIiwiaW5maW5pdGVXcmFwIiwiJG9sZEJ1bGxldCIsInNwYW4iLCIkbmV3QnVsbGV0IiwiYW5pbUluRnJvbVJpZ2h0IiwiYW5pbU91dFRvUmlnaHQiLCJhbmltSW5Gcm9tTGVmdCIsImFuaW1PdXRUb0xlZnQiLCJSZXNwb25zaXZlTWVudSIsImN1cnJlbnRNcSIsImN1cnJlbnRQbHVnaW4iLCJydWxlc1RyZWUiLCJydWxlU2l6ZSIsInJ1bGVQbHVnaW4iLCJNZW51UGx1Z2lucyIsIl9jaGVja01lZGlhUXVlcmllcyIsIm1hdGNoZWRNcSIsImNzc0NsYXNzIiwiZGVzdHJveSIsImRyb3Bkb3duIiwiZHJpbGxkb3duIiwiYWNjb3JkaW9uIiwiUmVzcG9uc2l2ZVRvZ2dsZSIsInRhcmdldElEIiwiJHRhcmdldE1lbnUiLCIkdG9nZ2xlciIsImFuaW1hdGlvbkluIiwiYW5pbWF0aW9uT3V0IiwiX3VwZGF0ZSIsIl91cGRhdGVNcUhhbmRsZXIiLCJ0b2dnbGVNZW51IiwiaGlkZUZvciIsIlJldmVhbCIsIm1xIiwiaXNNb2JpbGUiLCJtb2JpbGVTbmlmZiIsImZ1bGxTY3JlZW4iLCJfbWFrZU92ZXJsYXkiLCJvdXRlcldpZHRoIiwib3V0ZXJIZWlnaHQiLCJfdXBkYXRlUG9zaXRpb24iLCJfaGFuZGxlU3RhdGUiLCJtdWx0aXBsZU9wZW5lZCIsImFkZFJldmVhbE9wZW5DbGFzc2VzIiwib3JpZ2luYWxTY3JvbGxQb3MiLCJhZnRlckFuaW1hdGlvbiIsImZvY3VzYWJsZUVsZW1lbnRzIiwic2hvd0RlbGF5IiwiX2V4dHJhSGFuZGxlcnMiLCJjbG9zZU9uRXNjIiwiZmluaXNoVXAiLCJoaWRlRGVsYXkiLCJyZXNldE9uQ2xvc2UiLCJ0aXRsZSIsImJ0bU9mZnNldFBjdCIsImlQaG9uZVNuaWZmIiwiYW5kcm9pZFNuaWZmIiwiU2xpZGVyIiwiaW5wdXRzIiwiaGFuZGxlcyIsIiRoYW5kbGUiLCIkaW5wdXQiLCIkZmlsbCIsInZlcnRpY2FsIiwiaXNEYmwiLCJkaXNhYmxlZENsYXNzIiwiYmluZGluZyIsIl9zZXRJbml0QXR0ciIsImRvdWJsZVNpZGVkIiwiJGhhbmRsZTIiLCIkaW5wdXQyIiwic2V0SGFuZGxlcyIsIl9zZXRIYW5kbGVQb3MiLCJwY3RPZkJhciIsInBvc2l0aW9uVmFsdWVGdW5jdGlvbiIsIl9sb2dUcmFuc2Zvcm0iLCJfcG93VHJhbnNmb3JtIiwidG9GaXhlZCIsImJhc2VMb2ciLCJub25MaW5lYXJCYXNlIiwiJGhuZGwiLCJub0ludmVydCIsImgyVmFsIiwiaDFWYWwiLCJ2ZXJ0IiwiaE9yVyIsImxPclQiLCJoYW5kbGVEaW0iLCJlbGVtRGltIiwiX3BjdE9mQmFyIiwicHhUb01vdmUiLCJtb3ZlbWVudCIsImRlY2ltYWwiLCJfc2V0VmFsdWVzIiwiaXNMZWZ0SG5kbCIsImRpbSIsImhhbmRsZVBjdCIsImhhbmRsZVBvcyIsImluaXRpYWxTdGFydCIsIm1vdmVUaW1lIiwiY2hhbmdlZERlbGF5IiwiaW5pdFZhbCIsImluaXRpYWxFbmQiLCJoYXNWYWwiLCJldmVudE9mZnNldCIsImhhbGZPZkhhbmRsZSIsImJhckRpbSIsIndpbmRvd1Njcm9sbCIsImVsZW1PZmZzZXQiLCJldmVudEZyb21CYXIiLCJiYXJYWSIsIm9mZnNldFBjdCIsIl92YWx1ZSIsIl9hZGp1c3RWYWx1ZSIsImZpcnN0SG5kbFBvcyIsImFic1Bvc2l0aW9uIiwic2VjbmRIbmRsUG9zIiwicHJldl92YWwiLCJuZXh0X3ZhbCIsIl9ldmVudHNGb3JIYW5kbGUiLCJjdXJIYW5kbGUiLCJfaGFuZGxlRXZlbnQiLCJjbGlja1NlbGVjdCIsImRyYWdnYWJsZSIsIl8kaGFuZGxlIiwib2xkVmFsdWUiLCJuZXdWYWx1ZSIsImRlY3JlYXNlIiwiaW5jcmVhc2UiLCJkZWNyZWFzZV9mYXN0IiwiaW5jcmVhc2VfZmFzdCIsImludmVydFZlcnRpY2FsIiwiZnJhYyIsImNsaWNrUG9zIiwibG9nIiwiU3RpY2t5Iiwid2FzV3JhcHBlZCIsIiRjb250YWluZXIiLCJzdGlja3lDbGFzcyIsInNjcm9sbENvdW50IiwiY2hlY2tFdmVyeSIsImlzU3R1Y2siLCJjb250YWluZXJIZWlnaHQiLCJlbGVtSGVpZ2h0IiwiX3BhcnNlUG9pbnRzIiwiX3NldFNpemVzIiwic2Nyb2xsIiwiX2NhbGMiLCJfcmVtb3ZlU3RpY2t5IiwidG9wUG9pbnQiLCJ0b3BBbmNob3IiLCJidG0iLCJidG1BbmNob3IiLCJwdHMiLCJicmVha3MiLCJwbGFjZSIsImNhblN0aWNrIiwiX2V2ZW50c0hhbmRsZXIiLCJfcGF1c2VMaXN0ZW5lcnMiLCJjaGVja1NpemVzIiwiYm90dG9tUG9pbnQiLCJfc2V0U3RpY2t5Iiwic3RpY2tUbyIsIm1yZ24iLCJub3RTdHVja1RvIiwiaXNUb3AiLCJzdGlja1RvVG9wIiwiYW5jaG9yUHQiLCJhbmNob3JIZWlnaHQiLCJ0b3BPckJvdHRvbSIsInN0aWNreU9uIiwibmV3RWxlbVdpZHRoIiwiY29tcCIsInBkbmdsIiwicGRuZ3IiLCJuZXdDb250YWluZXJIZWlnaHQiLCJfc2V0QnJlYWtQb2ludHMiLCJtVG9wIiwiZW1DYWxjIiwibWFyZ2luVG9wIiwibUJ0bSIsIm1hcmdpbkJvdHRvbSIsImVtIiwiZm9udFNpemUiLCJUYWJzIiwiJHRhYlRpdGxlcyIsImxpbmtDbGFzcyIsImxpbmtBY3RpdmVDbGFzcyIsIm1hdGNoSGVpZ2h0IiwiX3NldEhlaWdodCIsInNlbGVjdFRhYiIsIl9hZGRLZXlIYW5kbGVyIiwiX2FkZENsaWNrSGFuZGxlciIsIl9zZXRIZWlnaHRNcUhhbmRsZXIiLCJfaGFuZGxlVGFiQ2hhbmdlIiwid3JhcE9uS2V5cyIsImhpc3RvcnlIYW5kbGVkIiwiYWN0aXZlQ29sbGFwc2UiLCJfY29sbGFwc2VUYWIiLCIkb2xkVGFiIiwiJHRhYkxpbmsiLCIkdGFyZ2V0Q29udGVudCIsIl9vcGVuVGFiIiwicGFuZWxBY3RpdmVDbGFzcyIsIiR0YXJnZXRfYW5jaG9yIiwiaWRTdHIiLCJwYW5lbENsYXNzIiwicGFuZWwiLCJUb2dnbGVyIiwiX3VwZGF0ZUFSSUEiLCJUb29sdGlwIiwiaXNDbGljayIsImVsZW1JZCIsIl9nZXRQb3NpdGlvbkNsYXNzIiwidGlwVGV4dCIsInRlbXBsYXRlIiwiX2J1aWxkVGVtcGxhdGUiLCJhbGxvd0h0bWwiLCJ0cmlnZ2VyQ2xhc3MiLCJ0ZW1wbGF0ZUNsYXNzZXMiLCJ0b29sdGlwQ2xhc3MiLCIkdGVtcGxhdGUiLCIkdGlwRGltcyIsInNob3dPbiIsImZhZGVJbkR1cmF0aW9uIiwiZmFkZU91dER1cmF0aW9uIiwiaXNGb2N1cyIsImRpc2FibGVGb3JUb3VjaCIsInRvdWNoQ2xvc2VUZXh0IiwiUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMiLCJfZ2V0QWxsT3B0aW9ucyIsImFsbE9wdGlvbnMiLCJkdW1teVBsdWdpbiIsInRtcFBsdWdpbiIsImtleUtleSIsIm9iak9iaiIsInN0b3JlemZEYXRhIiwiX2hhbmRsZU1hcmt1cCIsInRvU2V0IiwiZnJvbVN0cmluZyIsIiRwYW5lbHMiLCJ0YWJzVGl0bGUiLCJ0YWJzUGFuZWwiLCIkbGlIZWFkcyIsIiRsaUhlYWRzQSIsIiR0YWJzQ29udGVudCIsIiRwbGFjZWhvbGRlciIs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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoVkEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7QUFFQSxNQUFJRSxxQkFBcUIsT0FBekI7O0FBRUE7QUFDQTtBQUNBLE1BQUlDLGFBQWE7QUFDZmhrQyxhQUFTK2pDLGtCQURNOztBQUdmOzs7QUFHQUUsY0FBVSxFQU5LOztBQVFmOzs7QUFHQUMsWUFBUSxFQVhPOztBQWFmOzs7QUFHQUMsU0FBSyxlQUFVO0FBQ2IsYUFBT04sRUFBRSxNQUFGLEVBQVVoMEIsSUFBVixDQUFlLEtBQWYsTUFBMEIsS0FBakM7QUFDRCxLQWxCYztBQW1CZjs7OztBQUlBdTBCLFlBQVEsZ0JBQVNBLE9BQVQsRUFBaUJ6aEMsSUFBakIsRUFBdUI7QUFDN0I7QUFDQTtBQUNBLFVBQUlzTCxZQUFhdEwsUUFBUTBoQyxhQUFhRCxPQUFiLENBQXpCO0FBQ0E7QUFDQTtBQUNBLFVBQUlFLFdBQVlDLFVBQVV0MkIsU0FBVixDQUFoQjs7QUFFQTtBQUNBLFdBQUtnMkIsUUFBTCxDQUFjSyxRQUFkLElBQTBCLEtBQUtyMkIsU0FBTCxJQUFrQm0yQixPQUE1QztBQUNELEtBakNjO0FBa0NmOzs7Ozs7Ozs7QUFTQUksb0JBQWdCLHdCQUFTSixNQUFULEVBQWlCemhDLElBQWpCLEVBQXNCO0FBQ3BDLFVBQUk4aEMsYUFBYTloQyxPQUFPNGhDLFVBQVU1aEMsSUFBVixDQUFQLEdBQXlCMGhDLGFBQWFELE9BQU9yakMsV0FBcEIsRUFBaUN3RSxXQUFqQyxFQUExQztBQUNBNitCLGFBQU9NLElBQVAsR0FBYyxLQUFLQyxXQUFMLENBQWlCLENBQWpCLEVBQW9CRixVQUFwQixDQUFkOztBQUVBLFVBQUcsQ0FBQ0wsT0FBT1EsUUFBUCxDQUFnQi8wQixJQUFoQixXQUE2QjQwQixVQUE3QixDQUFKLEVBQStDO0FBQUVMLGVBQU9RLFFBQVAsQ0FBZ0IvMEIsSUFBaEIsV0FBNkI0MEIsVUFBN0IsRUFBMkNMLE9BQU9NLElBQWxEO0FBQTBEO0FBQzNHLFVBQUcsQ0FBQ04sT0FBT1EsUUFBUCxDQUFnQjFtQixJQUFoQixDQUFxQixVQUFyQixDQUFKLEVBQXFDO0FBQUVrbUIsZUFBT1EsUUFBUCxDQUFnQjFtQixJQUFoQixDQUFxQixVQUFyQixFQUFpQ2ttQixNQUFqQztBQUEyQztBQUM1RTs7OztBQUlOQSxhQUFPUSxRQUFQLENBQWdCdmQsT0FBaEIsY0FBbUNvZCxVQUFuQzs7QUFFQSxXQUFLUCxNQUFMLENBQVl6a0MsSUFBWixDQUFpQjJrQyxPQUFPTSxJQUF4Qjs7QUFFQTtBQUNELEtBMURjO0FBMkRmOzs7Ozs7OztBQVFBRyxzQkFBa0IsMEJBQVNULE1BQVQsRUFBZ0I7QUFDaEMsVUFBSUssYUFBYUYsVUFBVUYsYUFBYUQsT0FBT1EsUUFBUCxDQUFnQjFtQixJQUFoQixDQUFxQixVQUFyQixFQUFpQ25kLFdBQTlDLENBQVYsQ0FBakI7O0FBRUEsV0FBS21qQyxNQUFMLENBQVkxaEMsTUFBWixDQUFtQixLQUFLMGhDLE1BQUwsQ0FBWXhrQyxPQUFaLENBQW9CMGtDLE9BQU9NLElBQTNCLENBQW5CLEVBQXFELENBQXJEO0FBQ0FOLGFBQU9RLFFBQVAsQ0FBZ0JqUCxVQUFoQixXQUFtQzhPLFVBQW5DLEVBQWlENWxCLFVBQWpELENBQTRELFVBQTVEO0FBQ007Ozs7QUFETixPQUtPd0ksT0FMUCxtQkFLK0JvZCxVQUwvQjtBQU1BLFdBQUksSUFBSXRtQixJQUFSLElBQWdCaW1CLE1BQWhCLEVBQXVCO0FBQ3JCQSxlQUFPam1CLElBQVAsSUFBZSxJQUFmLENBRHFCLENBQ0Q7QUFDckI7QUFDRDtBQUNELEtBakZjOztBQW1GZjs7Ozs7O0FBTUMybUIsWUFBUSxnQkFBU0MsT0FBVCxFQUFpQjtBQUN2QixVQUFJQyxPQUFPRCxtQkFBbUJsQixDQUE5QjtBQUNBLFVBQUc7QUFDRCxZQUFHbUIsSUFBSCxFQUFRO0FBQ05ELGtCQUFRcmpDLElBQVIsQ0FBYSxZQUFVO0FBQ3JCbWlDLGNBQUUsSUFBRixFQUFRM2xCLElBQVIsQ0FBYSxVQUFiLEVBQXlCK21CLEtBQXpCO0FBQ0QsV0FGRDtBQUdELFNBSkQsTUFJSztBQUNILGNBQUlsaEMsY0FBY2doQyxPQUFkLHlDQUFjQSxPQUFkLENBQUo7QUFBQSxjQUNBRyxRQUFRLElBRFI7QUFBQSxjQUVBaHFCLE1BQU07QUFDSixzQkFBVSxnQkFBU2lxQixJQUFULEVBQWM7QUFDdEJBLG1CQUFLQyxPQUFMLENBQWEsVUFBU3BVLENBQVQsRUFBVztBQUN0QkEsb0JBQUl1VCxVQUFVdlQsQ0FBVixDQUFKO0FBQ0E2UyxrQkFBRSxXQUFVN1MsQ0FBVixHQUFhLEdBQWYsRUFBb0JxVSxVQUFwQixDQUErQixPQUEvQjtBQUNELGVBSEQ7QUFJRCxhQU5HO0FBT0osc0JBQVUsa0JBQVU7QUFDbEJOLHdCQUFVUixVQUFVUSxPQUFWLENBQVY7QUFDQWxCLGdCQUFFLFdBQVVrQixPQUFWLEdBQW1CLEdBQXJCLEVBQTBCTSxVQUExQixDQUFxQyxPQUFyQztBQUNELGFBVkc7QUFXSix5QkFBYSxxQkFBVTtBQUNyQixtQkFBSyxRQUFMLEVBQWUxL0IsT0FBT3dHLElBQVAsQ0FBWSs0QixNQUFNakIsUUFBbEIsQ0FBZjtBQUNEO0FBYkcsV0FGTjtBQWlCQS9vQixjQUFJblgsSUFBSixFQUFVZ2hDLE9BQVY7QUFDRDtBQUNGLE9BekJELENBeUJDLE9BQU01aEIsR0FBTixFQUFVO0FBQ1RtaUIsZ0JBQVEzaEMsS0FBUixDQUFjd2YsR0FBZDtBQUNELE9BM0JELFNBMkJRO0FBQ04sZUFBTzRoQixPQUFQO0FBQ0Q7QUFDRixLQXpIYTs7QUEySGY7Ozs7Ozs7O0FBUUFKLGlCQUFhLHFCQUFTM2pDLE1BQVQsRUFBaUJ3akIsU0FBakIsRUFBMkI7QUFDdEN4akIsZUFBU0EsVUFBVSxDQUFuQjtBQUNBLGFBQU91QyxLQUFLZ2lDLEtBQUwsQ0FBWWhpQyxLQUFLaWlDLEdBQUwsQ0FBUyxFQUFULEVBQWF4a0MsU0FBUyxDQUF0QixJQUEyQnVDLEtBQUtDLE1BQUwsS0FBZ0JELEtBQUtpaUMsR0FBTCxDQUFTLEVBQVQsRUFBYXhrQyxNQUFiLENBQXZELEVBQThFcEIsUUFBOUUsQ0FBdUYsRUFBdkYsRUFBMkZMLEtBQTNGLENBQWlHLENBQWpHLEtBQXVHaWxCLGtCQUFnQkEsU0FBaEIsR0FBOEIsRUFBckksQ0FBUDtBQUNELEtBdEljO0FBdUlmOzs7OztBQUtBaWhCLFlBQVEsZ0JBQVM1akMsSUFBVCxFQUFla2pDLE9BQWYsRUFBd0I7O0FBRTlCO0FBQ0EsVUFBSSxPQUFPQSxPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSxrQkFBVXAvQixPQUFPd0csSUFBUCxDQUFZLEtBQUs4M0IsUUFBakIsQ0FBVjtBQUNEO0FBQ0Q7QUFIQSxXQUlLLElBQUksT0FBT2MsT0FBUCxLQUFtQixRQUF2QixFQUFpQztBQUNwQ0Esb0JBQVUsQ0FBQ0EsT0FBRCxDQUFWO0FBQ0Q7O0FBRUQsVUFBSUcsUUFBUSxJQUFaOztBQUVBO0FBQ0FyQixRQUFFbmlDLElBQUYsQ0FBT3FqQyxPQUFQLEVBQWdCLFVBQVNqakMsQ0FBVCxFQUFZYSxJQUFaLEVBQWtCO0FBQ2hDO0FBQ0EsWUFBSXloQyxTQUFTYyxNQUFNakIsUUFBTixDQUFldGhDLElBQWYsQ0FBYjs7QUFFQTtBQUNBLFlBQUkraUMsUUFBUTdCLEVBQUVoaUMsSUFBRixFQUFRd00sSUFBUixDQUFhLFdBQVMxTCxJQUFULEdBQWMsR0FBM0IsRUFBZ0NrVyxPQUFoQyxDQUF3QyxXQUFTbFcsSUFBVCxHQUFjLEdBQXRELENBQVo7O0FBRUE7QUFDQStpQyxjQUFNaGtDLElBQU4sQ0FBVyxZQUFXO0FBQ3BCLGNBQUlpa0MsTUFBTTlCLEVBQUUsSUFBRixDQUFWO0FBQUEsY0FDSTVSLE9BQU8sRUFEWDtBQUVBO0FBQ0EsY0FBSTBULElBQUl6bkIsSUFBSixDQUFTLFVBQVQsQ0FBSixFQUEwQjtBQUN4Qm9uQixvQkFBUU0sSUFBUixDQUFhLHlCQUF1QmpqQyxJQUF2QixHQUE0QixzREFBekM7QUFDQTtBQUNEOztBQUVELGNBQUdnakMsSUFBSTkxQixJQUFKLENBQVMsY0FBVCxDQUFILEVBQTRCO0FBQzFCLGdCQUFJZzJCLFFBQVFGLElBQUk5MUIsSUFBSixDQUFTLGNBQVQsRUFBeUJoSixLQUF6QixDQUErQixHQUEvQixFQUFvQ3UrQixPQUFwQyxDQUE0QyxVQUFTMzZCLENBQVQsRUFBWTNJLENBQVosRUFBYztBQUNwRSxrQkFBSTh4QixNQUFNbnBCLEVBQUU1RCxLQUFGLENBQVEsR0FBUixFQUFhakYsR0FBYixDQUFpQixVQUFTbWUsRUFBVCxFQUFZO0FBQUUsdUJBQU9BLEdBQUdsYixJQUFILEVBQVA7QUFBbUIsZUFBbEQsQ0FBVjtBQUNBLGtCQUFHK3VCLElBQUksQ0FBSixDQUFILEVBQVczQixLQUFLMkIsSUFBSSxDQUFKLENBQUwsSUFBZWtTLFdBQVdsUyxJQUFJLENBQUosQ0FBWCxDQUFmO0FBQ1osYUFIVyxDQUFaO0FBSUQ7QUFDRCxjQUFHO0FBQ0QrUixnQkFBSXpuQixJQUFKLENBQVMsVUFBVCxFQUFxQixJQUFJa21CLE1BQUosQ0FBV1AsRUFBRSxJQUFGLENBQVgsRUFBb0I1UixJQUFwQixDQUFyQjtBQUNELFdBRkQsQ0FFQyxPQUFNOFQsRUFBTixFQUFTO0FBQ1JULG9CQUFRM2hDLEtBQVIsQ0FBY29pQyxFQUFkO0FBQ0QsV0FKRCxTQUlRO0FBQ047QUFDRDtBQUNGLFNBdEJEO0FBdUJELE9BL0JEO0FBZ0NELEtBMUxjO0FBMkxmQyxlQUFXM0IsWUEzTEk7QUE0TGY0QixtQkFBZSx1QkFBU1AsS0FBVCxFQUFlO0FBQzVCLFVBQUlRLGNBQWM7QUFDaEIsc0JBQWMsZUFERTtBQUVoQiw0QkFBb0IscUJBRko7QUFHaEIseUJBQWlCLGVBSEQ7QUFJaEIsdUJBQWU7QUFKQyxPQUFsQjtBQU1BLFVBQUlya0MsT0FBTzVDLFNBQVM2RixhQUFULENBQXVCLEtBQXZCLENBQVg7QUFBQSxVQUNJeEMsR0FESjs7QUFHQSxXQUFLLElBQUlzaEIsQ0FBVCxJQUFjc2lCLFdBQWQsRUFBMEI7QUFDeEIsWUFBSSxPQUFPcmtDLEtBQUs4ZSxLQUFMLENBQVdpRCxDQUFYLENBQVAsS0FBeUIsV0FBN0IsRUFBeUM7QUFDdkN0aEIsZ0JBQU00akMsWUFBWXRpQixDQUFaLENBQU47QUFDRDtBQUNGO0FBQ0QsVUFBR3RoQixHQUFILEVBQU87QUFDTCxlQUFPQSxHQUFQO0FBQ0QsT0FGRCxNQUVLO0FBQ0hBLGNBQU00YSxXQUFXLFlBQVU7QUFDekJ3b0IsZ0JBQU05b0IsY0FBTixDQUFxQixlQUFyQixFQUFzQyxDQUFDOG9CLEtBQUQsQ0FBdEM7QUFDRCxTQUZLLEVBRUgsQ0FGRyxDQUFOO0FBR0EsZUFBTyxlQUFQO0FBQ0Q7QUFDRjtBQW5OYyxHQUFqQjs7QUFzTkExQixhQUFXbUMsSUFBWCxHQUFrQjtBQUNoQjs7Ozs7OztBQU9BQyxjQUFVLGtCQUFVMXJCLElBQVYsRUFBZ0J3YSxLQUFoQixFQUF1QjtBQUMvQixVQUFJM0IsUUFBUSxJQUFaOztBQUVBLGFBQU8sWUFBWTtBQUNqQixZQUFJcHpCLFVBQVUsSUFBZDtBQUFBLFlBQW9CcUcsT0FBT3hFLFNBQTNCOztBQUVBLFlBQUl1eEIsVUFBVSxJQUFkLEVBQW9CO0FBQ2xCQSxrQkFBUXJXLFdBQVcsWUFBWTtBQUM3QnhDLGlCQUFLM1ksS0FBTCxDQUFXNUIsT0FBWCxFQUFvQnFHLElBQXBCO0FBQ0Erc0Isb0JBQVEsSUFBUjtBQUNELFdBSE8sRUFHTDJCLEtBSEssQ0FBUjtBQUlEO0FBQ0YsT0FURDtBQVVEO0FBckJlLEdBQWxCOztBQXdCQTtBQUNBO0FBQ0E7Ozs7QUFJQSxNQUFJbVEsYUFBYSxTQUFiQSxVQUFhLENBQVN4SCxNQUFULEVBQWlCO0FBQ2hDLFFBQUk5NUIsY0FBYzg1QixNQUFkLHlDQUFjQSxNQUFkLENBQUo7QUFBQSxRQUNJd0ksUUFBUXhDLEVBQUUsb0JBQUYsQ0FEWjtBQUFBLFFBRUl5QyxRQUFRekMsRUFBRSxRQUFGLENBRlo7O0FBSUEsUUFBRyxDQUFDd0MsTUFBTXJsQyxNQUFWLEVBQWlCO0FBQ2Y2aUMsUUFBRSw4QkFBRixFQUFrQ2xaLFFBQWxDLENBQTJDMXJCLFNBQVMrRixJQUFwRDtBQUNEO0FBQ0QsUUFBR3NoQyxNQUFNdGxDLE1BQVQsRUFBZ0I7QUFDZHNsQyxZQUFNdlAsV0FBTixDQUFrQixPQUFsQjtBQUNEOztBQUVELFFBQUdoekIsU0FBUyxXQUFaLEVBQXdCO0FBQUM7QUFDdkJpZ0MsaUJBQVd1QyxVQUFYLENBQXNCdEIsS0FBdEI7QUFDQWpCLGlCQUFXeUIsTUFBWCxDQUFrQixJQUFsQjtBQUNELEtBSEQsTUFHTSxJQUFHMWhDLFNBQVMsUUFBWixFQUFxQjtBQUFDO0FBQzFCLFVBQUl5QyxPQUFPeEMsTUFBTW5ELFNBQU4sQ0FBZ0J0QixLQUFoQixDQUFzQjJCLElBQXRCLENBQTJCYyxTQUEzQixFQUFzQyxDQUF0QyxDQUFYLENBRHlCLENBQzJCO0FBQ3BELFVBQUl3a0MsWUFBWSxLQUFLdG9CLElBQUwsQ0FBVSxVQUFWLENBQWhCLENBRnlCLENBRWE7O0FBRXRDLFVBQUdzb0IsY0FBY25qQyxTQUFkLElBQTJCbWpDLFVBQVUzSSxNQUFWLE1BQXNCeDZCLFNBQXBELEVBQThEO0FBQUM7QUFDN0QsWUFBRyxLQUFLckMsTUFBTCxLQUFnQixDQUFuQixFQUFxQjtBQUFDO0FBQ2xCd2xDLG9CQUFVM0ksTUFBVixFQUFrQjk3QixLQUFsQixDQUF3QnlrQyxTQUF4QixFQUFtQ2hnQyxJQUFuQztBQUNILFNBRkQsTUFFSztBQUNILGVBQUs5RSxJQUFMLENBQVUsVUFBU0ksQ0FBVCxFQUFZaWUsRUFBWixFQUFlO0FBQUM7QUFDeEJ5bUIsc0JBQVUzSSxNQUFWLEVBQWtCOTdCLEtBQWxCLENBQXdCOGhDLEVBQUU5akIsRUFBRixFQUFNN0IsSUFBTixDQUFXLFVBQVgsQ0FBeEIsRUFBZ0QxWCxJQUFoRDtBQUNELFdBRkQ7QUFHRDtBQUNGLE9BUkQsTUFRSztBQUFDO0FBQ0osY0FBTSxJQUFJaWdDLGNBQUosQ0FBbUIsbUJBQW1CNUksTUFBbkIsR0FBNEIsbUNBQTVCLElBQW1FMkksWUFBWW5DLGFBQWFtQyxTQUFiLENBQVosR0FBc0MsY0FBekcsSUFBMkgsR0FBOUksQ0FBTjtBQUNEO0FBQ0YsS0FmSyxNQWVEO0FBQUM7QUFDSixZQUFNLElBQUlFLFNBQUosb0JBQThCM2lDLElBQTlCLGtHQUFOO0FBQ0Q7QUFDRCxXQUFPLElBQVA7QUFDRCxHQWxDRDs7QUFvQ0EzRSxTQUFPNGtDLFVBQVAsR0FBb0JBLFVBQXBCO0FBQ0FILElBQUV6akMsRUFBRixDQUFLaWxDLFVBQUwsR0FBa0JBLFVBQWxCOztBQUVBO0FBQ0EsR0FBQyxZQUFXO0FBQ1YsUUFBSSxDQUFDMytCLEtBQUtELEdBQU4sSUFBYSxDQUFDckgsT0FBT3NILElBQVAsQ0FBWUQsR0FBOUIsRUFDRXJILE9BQU9zSCxJQUFQLENBQVlELEdBQVosR0FBa0JDLEtBQUtELEdBQUwsR0FBVyxZQUFXO0FBQUUsYUFBTyxJQUFJQyxJQUFKLEdBQVdpZ0MsT0FBWCxFQUFQO0FBQThCLEtBQXhFOztBQUVGLFFBQUlDLFVBQVUsQ0FBQyxRQUFELEVBQVcsS0FBWCxDQUFkO0FBQ0EsU0FBSyxJQUFJOWtDLElBQUksQ0FBYixFQUFnQkEsSUFBSThrQyxRQUFRNWxDLE1BQVosSUFBc0IsQ0FBQzVCLE9BQU95bkMscUJBQTlDLEVBQXFFLEVBQUUva0MsQ0FBdkUsRUFBMEU7QUFDdEUsVUFBSWdsQyxLQUFLRixRQUFROWtDLENBQVIsQ0FBVDtBQUNBMUMsYUFBT3luQyxxQkFBUCxHQUErQnpuQyxPQUFPMG5DLEtBQUcsdUJBQVYsQ0FBL0I7QUFDQTFuQyxhQUFPMm5DLG9CQUFQLEdBQStCM25DLE9BQU8wbkMsS0FBRyxzQkFBVixLQUNEMW5DLE9BQU8wbkMsS0FBRyw2QkFBVixDQUQ5QjtBQUVIO0FBQ0QsUUFBSSx1QkFBdUJwN0IsSUFBdkIsQ0FBNEJ0TSxPQUFPNG5DLFNBQVAsQ0FBaUJDLFNBQTdDLEtBQ0MsQ0FBQzduQyxPQUFPeW5DLHFCQURULElBQ2tDLENBQUN6bkMsT0FBTzJuQyxvQkFEOUMsRUFDb0U7QUFDbEUsVUFBSUcsV0FBVyxDQUFmO0FBQ0E5bkMsYUFBT3luQyxxQkFBUCxHQUErQixVQUFTbGxDLFFBQVQsRUFBbUI7QUFDOUMsWUFBSThFLE1BQU1DLEtBQUtELEdBQUwsRUFBVjtBQUNBLFlBQUkwZ0MsV0FBVzVqQyxLQUFLa3JCLEdBQUwsQ0FBU3lZLFdBQVcsRUFBcEIsRUFBd0J6Z0MsR0FBeEIsQ0FBZjtBQUNBLGVBQU95VyxXQUFXLFlBQVc7QUFBRXZiLG1CQUFTdWxDLFdBQVdDLFFBQXBCO0FBQWdDLFNBQXhELEVBQ1dBLFdBQVcxZ0MsR0FEdEIsQ0FBUDtBQUVILE9BTEQ7QUFNQXJILGFBQU8ybkMsb0JBQVAsR0FBOEIxUixZQUE5QjtBQUNEO0FBQ0Q7OztBQUdBLFFBQUcsQ0FBQ2oyQixPQUFPZ29DLFdBQVIsSUFBdUIsQ0FBQ2hvQyxPQUFPZ29DLFdBQVAsQ0FBbUIzZ0MsR0FBOUMsRUFBa0Q7QUFDaERySCxhQUFPZ29DLFdBQVAsR0FBcUI7QUFDbkJ6MUIsZUFBT2pMLEtBQUtELEdBQUwsRUFEWTtBQUVuQkEsYUFBSyxlQUFVO0FBQUUsaUJBQU9DLEtBQUtELEdBQUwsS0FBYSxLQUFLa0wsS0FBekI7QUFBaUM7QUFGL0IsT0FBckI7QUFJRDtBQUNGLEdBL0JEO0FBZ0NBLE1BQUksQ0FBQzAxQixTQUFTeG1DLFNBQVQsQ0FBbUJzaUMsSUFBeEIsRUFBOEI7QUFDNUJrRSxhQUFTeG1DLFNBQVQsQ0FBbUJzaUMsSUFBbkIsR0FBMEIsVUFBU21FLEtBQVQsRUFBZ0I7QUFDeEMsVUFBSSxPQUFPLElBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUI7QUFDQTtBQUNBLGNBQU0sSUFBSVosU0FBSixDQUFjLHNFQUFkLENBQU47QUFDRDs7QUFFRCxVQUFJYSxRQUFVdmpDLE1BQU1uRCxTQUFOLENBQWdCdEIsS0FBaEIsQ0FBc0IyQixJQUF0QixDQUEyQmMsU0FBM0IsRUFBc0MsQ0FBdEMsQ0FBZDtBQUFBLFVBQ0l3bEMsVUFBVSxJQURkO0FBQUEsVUFFSUMsT0FBVSxTQUFWQSxJQUFVLEdBQVcsQ0FBRSxDQUYzQjtBQUFBLFVBR0lDLFNBQVUsU0FBVkEsTUFBVSxHQUFXO0FBQ25CLGVBQU9GLFFBQVF6bEMsS0FBUixDQUFjLGdCQUFnQjBsQyxJQUFoQixHQUNaLElBRFksR0FFWkgsS0FGRixFQUdBQyxNQUFNL25DLE1BQU4sQ0FBYXdFLE1BQU1uRCxTQUFOLENBQWdCdEIsS0FBaEIsQ0FBc0IyQixJQUF0QixDQUEyQmMsU0FBM0IsQ0FBYixDQUhBLENBQVA7QUFJRCxPQVJMOztBQVVBLFVBQUksS0FBS25CLFNBQVQsRUFBb0I7QUFDbEI7QUFDQTRtQyxhQUFLNW1DLFNBQUwsR0FBaUIsS0FBS0EsU0FBdEI7QUFDRDtBQUNENm1DLGFBQU83bUMsU0FBUCxHQUFtQixJQUFJNG1DLElBQUosRUFBbkI7O0FBRUEsYUFBT0MsTUFBUDtBQUNELEtBeEJEO0FBeUJEO0FBQ0Q7QUFDQSxXQUFTckQsWUFBVCxDQUFzQmprQyxFQUF0QixFQUEwQjtBQUN4QixRQUFJaW5DLFNBQVN4bUMsU0FBVCxDQUFtQjhCLElBQW5CLEtBQTRCVSxTQUFoQyxFQUEyQztBQUN6QyxVQUFJc2tDLGdCQUFnQix3QkFBcEI7QUFDQSxVQUFJamlDLFVBQVdpaUMsYUFBRCxDQUFnQnY4QixJQUFoQixDQUFzQmhMLEVBQUQsQ0FBS1IsUUFBTCxFQUFyQixDQUFkO0FBQ0EsYUFBUThGLFdBQVdBLFFBQVExRSxNQUFSLEdBQWlCLENBQTdCLEdBQWtDMEUsUUFBUSxDQUFSLEVBQVdiLElBQVgsRUFBbEMsR0FBc0QsRUFBN0Q7QUFDRCxLQUpELE1BS0ssSUFBSXpFLEdBQUdTLFNBQUgsS0FBaUJ3QyxTQUFyQixFQUFnQztBQUNuQyxhQUFPakQsR0FBR1csV0FBSCxDQUFlNEIsSUFBdEI7QUFDRCxLQUZJLE1BR0E7QUFDSCxhQUFPdkMsR0FBR1MsU0FBSCxDQUFhRSxXQUFiLENBQXlCNEIsSUFBaEM7QUFDRDtBQUNGO0FBQ0QsV0FBU21qQyxVQUFULENBQW9COEIsR0FBcEIsRUFBd0I7QUFDdEIsUUFBSSxXQUFXQSxHQUFmLEVBQW9CLE9BQU8sSUFBUCxDQUFwQixLQUNLLElBQUksWUFBWUEsR0FBaEIsRUFBcUIsT0FBTyxLQUFQLENBQXJCLEtBQ0EsSUFBSSxDQUFDamlCLE1BQU1paUIsTUFBTSxDQUFaLENBQUwsRUFBcUIsT0FBT3hqQyxXQUFXd2pDLEdBQVgsQ0FBUDtBQUMxQixXQUFPQSxHQUFQO0FBQ0Q7QUFDRDtBQUNBO0FBQ0EsV0FBU3JELFNBQVQsQ0FBbUJxRCxHQUFuQixFQUF3QjtBQUN0QixXQUFPQSxJQUFJbmtDLE9BQUosQ0FBWSxpQkFBWixFQUErQixPQUEvQixFQUF3QzhCLFdBQXhDLEVBQVA7QUFDRDtBQUVBLENBelhBLENBeVhDdEYsTUF6WEQsQ0FBRDtBQ0FBOztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWJHLGFBQVc2RCxHQUFYLEdBQWlCO0FBQ2ZDLHNCQUFrQkEsZ0JBREg7QUFFZkMsbUJBQWVBLGFBRkE7QUFHZkMsZ0JBQVlBO0FBSEcsR0FBakI7O0FBTUE7Ozs7Ozs7Ozs7QUFVQSxXQUFTRixnQkFBVCxDQUEwQkcsT0FBMUIsRUFBbUN0NkIsTUFBbkMsRUFBMkN1NkIsTUFBM0MsRUFBbURDLE1BQW5ELEVBQTJEO0FBQ3pELFFBQUlDLFVBQVVMLGNBQWNFLE9BQWQsQ0FBZDtBQUFBLFFBQ0luNkIsR0FESjtBQUFBLFFBQ1N1NkIsTUFEVDtBQUFBLFFBQ2lCMVksSUFEakI7QUFBQSxRQUN1QjJZLEtBRHZCOztBQUdBLFFBQUkzNkIsTUFBSixFQUFZO0FBQ1YsVUFBSTQ2QixVQUFVUixjQUFjcDZCLE1BQWQsQ0FBZDs7QUFFQTA2QixlQUFVRCxRQUFRdkcsTUFBUixDQUFlL3pCLEdBQWYsR0FBcUJzNkIsUUFBUXpXLE1BQTdCLElBQXVDNFcsUUFBUTVXLE1BQVIsR0FBaUI0VyxRQUFRMUcsTUFBUixDQUFlL3pCLEdBQWpGO0FBQ0FBLFlBQVVzNkIsUUFBUXZHLE1BQVIsQ0FBZS96QixHQUFmLElBQXNCeTZCLFFBQVExRyxNQUFSLENBQWUvekIsR0FBL0M7QUFDQTZoQixhQUFVeVksUUFBUXZHLE1BQVIsQ0FBZWxTLElBQWYsSUFBdUI0WSxRQUFRMUcsTUFBUixDQUFlbFMsSUFBaEQ7QUFDQTJZLGNBQVVGLFFBQVF2RyxNQUFSLENBQWVsUyxJQUFmLEdBQXNCeVksUUFBUXhiLEtBQTlCLElBQXVDMmIsUUFBUTNiLEtBQVIsR0FBZ0IyYixRQUFRMUcsTUFBUixDQUFlbFMsSUFBaEY7QUFDRCxLQVBELE1BUUs7QUFDSDBZLGVBQVVELFFBQVF2RyxNQUFSLENBQWUvekIsR0FBZixHQUFxQnM2QixRQUFRelcsTUFBN0IsSUFBdUN5VyxRQUFRSSxVQUFSLENBQW1CN1csTUFBbkIsR0FBNEJ5VyxRQUFRSSxVQUFSLENBQW1CM0csTUFBbkIsQ0FBMEIvekIsR0FBdkc7QUFDQUEsWUFBVXM2QixRQUFRdkcsTUFBUixDQUFlL3pCLEdBQWYsSUFBc0JzNkIsUUFBUUksVUFBUixDQUFtQjNHLE1BQW5CLENBQTBCL3pCLEdBQTFEO0FBQ0E2aEIsYUFBVXlZLFFBQVF2RyxNQUFSLENBQWVsUyxJQUFmLElBQXVCeVksUUFBUUksVUFBUixDQUFtQjNHLE1BQW5CLENBQTBCbFMsSUFBM0Q7QUFDQTJZLGNBQVVGLFFBQVF2RyxNQUFSLENBQWVsUyxJQUFmLEdBQXNCeVksUUFBUXhiLEtBQTlCLElBQXVDd2IsUUFBUUksVUFBUixDQUFtQjViLEtBQXBFO0FBQ0Q7O0FBRUQsUUFBSTZiLFVBQVUsQ0FBQ0osTUFBRCxFQUFTdjZCLEdBQVQsRUFBYzZoQixJQUFkLEVBQW9CMlksS0FBcEIsQ0FBZDs7QUFFQSxRQUFJSixNQUFKLEVBQVk7QUFDVixhQUFPdlksU0FBUzJZLEtBQVQsS0FBbUIsSUFBMUI7QUFDRDs7QUFFRCxRQUFJSCxNQUFKLEVBQVk7QUFDVixhQUFPcjZCLFFBQVF1NkIsTUFBUixLQUFtQixJQUExQjtBQUNEOztBQUVELFdBQU9JLFFBQVEvb0MsT0FBUixDQUFnQixLQUFoQixNQUEyQixDQUFDLENBQW5DO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFPQSxXQUFTcW9DLGFBQVQsQ0FBdUJsbUMsSUFBdkIsRUFBNkI2SixJQUE3QixFQUFrQztBQUNoQzdKLFdBQU9BLEtBQUtiLE1BQUwsR0FBY2EsS0FBSyxDQUFMLENBQWQsR0FBd0JBLElBQS9COztBQUVBLFFBQUlBLFNBQVN6QyxNQUFULElBQW1CeUMsU0FBUzVDLFFBQWhDLEVBQTBDO0FBQ3hDLFlBQU0sSUFBSUUsS0FBSixDQUFVLDhDQUFWLENBQU47QUFDRDs7QUFFRCxRQUFJdXBDLE9BQU83bUMsS0FBSzZ0QixxQkFBTCxFQUFYO0FBQUEsUUFDSWlaLFVBQVU5bUMsS0FBS3FELFVBQUwsQ0FBZ0J3cUIscUJBQWhCLEVBRGQ7QUFBQSxRQUVJa1osVUFBVTNwQyxTQUFTcW5CLElBQVQsQ0FBY29KLHFCQUFkLEVBRmQ7QUFBQSxRQUdJbVosT0FBT3pwQyxPQUFPc2pDLFdBSGxCO0FBQUEsUUFJSW9HLE9BQU8xcEMsT0FBT3VqQyxXQUpsQjs7QUFNQSxXQUFPO0FBQ0wvVixhQUFPOGIsS0FBSzliLEtBRFA7QUFFTCtFLGNBQVErVyxLQUFLL1csTUFGUjtBQUdMa1EsY0FBUTtBQUNOL3pCLGFBQUs0NkIsS0FBSzU2QixHQUFMLEdBQVcrNkIsSUFEVjtBQUVObFosY0FBTStZLEtBQUsvWSxJQUFMLEdBQVltWjtBQUZaLE9BSEg7QUFPTEMsa0JBQVk7QUFDVm5jLGVBQU8rYixRQUFRL2IsS0FETDtBQUVWK0UsZ0JBQVFnWCxRQUFRaFgsTUFGTjtBQUdWa1EsZ0JBQVE7QUFDTi96QixlQUFLNjZCLFFBQVE3NkIsR0FBUixHQUFjKzZCLElBRGI7QUFFTmxaLGdCQUFNZ1osUUFBUWhaLElBQVIsR0FBZW1aO0FBRmY7QUFIRSxPQVBQO0FBZUxOLGtCQUFZO0FBQ1Y1YixlQUFPZ2MsUUFBUWhjLEtBREw7QUFFVitFLGdCQUFRaVgsUUFBUWpYLE1BRk47QUFHVmtRLGdCQUFRO0FBQ04vekIsZUFBSys2QixJQURDO0FBRU5sWixnQkFBTW1aO0FBRkE7QUFIRTtBQWZQLEtBQVA7QUF3QkQ7O0FBRUQ7Ozs7Ozs7Ozs7OztBQVlBLFdBQVNkLFVBQVQsQ0FBb0JDLE9BQXBCLEVBQTZCZSxNQUE3QixFQUFxQ2xiLFFBQXJDLEVBQStDbWIsT0FBL0MsRUFBd0RDLE9BQXhELEVBQWlFQyxVQUFqRSxFQUE2RTtBQUMzRSxRQUFJQyxXQUFXckIsY0FBY0UsT0FBZCxDQUFmO0FBQUEsUUFDSW9CLGNBQWNMLFNBQVNqQixjQUFjaUIsTUFBZCxDQUFULEdBQWlDLElBRG5EOztBQUdBLFlBQVFsYixRQUFSO0FBQ0UsV0FBSyxLQUFMO0FBQ0UsZUFBTztBQUNMNkIsZ0JBQU9xVSxXQUFXRyxHQUFYLEtBQW1Ca0YsWUFBWXhILE1BQVosQ0FBbUJsUyxJQUFuQixHQUEwQnlaLFNBQVN4YyxLQUFuQyxHQUEyQ3ljLFlBQVl6YyxLQUExRSxHQUFrRnljLFlBQVl4SCxNQUFaLENBQW1CbFMsSUFEdkc7QUFFTDdoQixlQUFLdTdCLFlBQVl4SCxNQUFaLENBQW1CL3pCLEdBQW5CLElBQTBCczdCLFNBQVN6WCxNQUFULEdBQWtCc1gsT0FBNUM7QUFGQSxTQUFQO0FBSUE7QUFDRixXQUFLLE1BQUw7QUFDRSxlQUFPO0FBQ0x0WixnQkFBTTBaLFlBQVl4SCxNQUFaLENBQW1CbFMsSUFBbkIsSUFBMkJ5WixTQUFTeGMsS0FBVCxHQUFpQnNjLE9BQTVDLENBREQ7QUFFTHA3QixlQUFLdTdCLFlBQVl4SCxNQUFaLENBQW1CL3pCO0FBRm5CLFNBQVA7QUFJQTtBQUNGLFdBQUssT0FBTDtBQUNFLGVBQU87QUFDTDZoQixnQkFBTTBaLFlBQVl4SCxNQUFaLENBQW1CbFMsSUFBbkIsR0FBMEIwWixZQUFZemMsS0FBdEMsR0FBOENzYyxPQUQvQztBQUVMcDdCLGVBQUt1N0IsWUFBWXhILE1BQVosQ0FBbUIvekI7QUFGbkIsU0FBUDtBQUlBO0FBQ0YsV0FBSyxZQUFMO0FBQ0UsZUFBTztBQUNMNmhCLGdCQUFPMFosWUFBWXhILE1BQVosQ0FBbUJsUyxJQUFuQixHQUEyQjBaLFlBQVl6YyxLQUFaLEdBQW9CLENBQWhELEdBQXVEd2MsU0FBU3hjLEtBQVQsR0FBaUIsQ0FEekU7QUFFTDllLGVBQUt1N0IsWUFBWXhILE1BQVosQ0FBbUIvekIsR0FBbkIsSUFBMEJzN0IsU0FBU3pYLE1BQVQsR0FBa0JzWCxPQUE1QztBQUZBLFNBQVA7QUFJQTtBQUNGLFdBQUssZUFBTDtBQUNFLGVBQU87QUFDTHRaLGdCQUFNd1osYUFBYUQsT0FBYixHQUF5QkcsWUFBWXhILE1BQVosQ0FBbUJsUyxJQUFuQixHQUEyQjBaLFlBQVl6YyxLQUFaLEdBQW9CLENBQWhELEdBQXVEd2MsU0FBU3hjLEtBQVQsR0FBaUIsQ0FEakc7QUFFTDllLGVBQUt1N0IsWUFBWXhILE1BQVosQ0FBbUIvekIsR0FBbkIsR0FBeUJ1N0IsWUFBWTFYLE1BQXJDLEdBQThDc1g7QUFGOUMsU0FBUDtBQUlBO0FBQ0YsV0FBSyxhQUFMO0FBQ0UsZUFBTztBQUNMdFosZ0JBQU0wWixZQUFZeEgsTUFBWixDQUFtQmxTLElBQW5CLElBQTJCeVosU0FBU3hjLEtBQVQsR0FBaUJzYyxPQUE1QyxDQUREO0FBRUxwN0IsZUFBTXU3QixZQUFZeEgsTUFBWixDQUFtQi96QixHQUFuQixHQUEwQnU3QixZQUFZMVgsTUFBWixHQUFxQixDQUFoRCxHQUF1RHlYLFNBQVN6WCxNQUFULEdBQWtCO0FBRnpFLFNBQVA7QUFJQTtBQUNGLFdBQUssY0FBTDtBQUNFLGVBQU87QUFDTGhDLGdCQUFNMFosWUFBWXhILE1BQVosQ0FBbUJsUyxJQUFuQixHQUEwQjBaLFlBQVl6YyxLQUF0QyxHQUE4Q3NjLE9BQTlDLEdBQXdELENBRHpEO0FBRUxwN0IsZUFBTXU3QixZQUFZeEgsTUFBWixDQUFtQi96QixHQUFuQixHQUEwQnU3QixZQUFZMVgsTUFBWixHQUFxQixDQUFoRCxHQUF1RHlYLFNBQVN6WCxNQUFULEdBQWtCO0FBRnpFLFNBQVA7QUFJQTtBQUNGLFdBQUssUUFBTDtBQUNFLGVBQU87QUFDTGhDLGdCQUFPeVosU0FBU1osVUFBVCxDQUFvQjNHLE1BQXBCLENBQTJCbFMsSUFBM0IsR0FBbUN5WixTQUFTWixVQUFULENBQW9CNWIsS0FBcEIsR0FBNEIsQ0FBaEUsR0FBdUV3YyxTQUFTeGMsS0FBVCxHQUFpQixDQUR6RjtBQUVMOWUsZUFBTXM3QixTQUFTWixVQUFULENBQW9CM0csTUFBcEIsQ0FBMkIvekIsR0FBM0IsR0FBa0NzN0IsU0FBU1osVUFBVCxDQUFvQjdXLE1BQXBCLEdBQTZCLENBQWhFLEdBQXVFeVgsU0FBU3pYLE1BQVQsR0FBa0I7QUFGekYsU0FBUDtBQUlBO0FBQ0YsV0FBSyxRQUFMO0FBQ0UsZUFBTztBQUNMaEMsZ0JBQU0sQ0FBQ3laLFNBQVNaLFVBQVQsQ0FBb0I1YixLQUFwQixHQUE0QndjLFNBQVN4YyxLQUF0QyxJQUErQyxDQURoRDtBQUVMOWUsZUFBS3M3QixTQUFTWixVQUFULENBQW9CM0csTUFBcEIsQ0FBMkIvekIsR0FBM0IsR0FBaUNtN0I7QUFGakMsU0FBUDtBQUlGLFdBQUssYUFBTDtBQUNFLGVBQU87QUFDTHRaLGdCQUFNeVosU0FBU1osVUFBVCxDQUFvQjNHLE1BQXBCLENBQTJCbFMsSUFENUI7QUFFTDdoQixlQUFLczdCLFNBQVNaLFVBQVQsQ0FBb0IzRyxNQUFwQixDQUEyQi96QjtBQUYzQixTQUFQO0FBSUE7QUFDRixXQUFLLGFBQUw7QUFDRSxlQUFPO0FBQ0w2aEIsZ0JBQU0wWixZQUFZeEgsTUFBWixDQUFtQmxTLElBRHBCO0FBRUw3aEIsZUFBS3U3QixZQUFZeEgsTUFBWixDQUFtQi96QixHQUFuQixHQUF5QnU3QixZQUFZMVgsTUFBckMsR0FBOENzWDtBQUY5QyxTQUFQO0FBSUE7QUFDRixXQUFLLGNBQUw7QUFDRSxlQUFPO0FBQ0x0WixnQkFBTTBaLFlBQVl4SCxNQUFaLENBQW1CbFMsSUFBbkIsR0FBMEIwWixZQUFZemMsS0FBdEMsR0FBOENzYyxPQUE5QyxHQUF3REUsU0FBU3hjLEtBRGxFO0FBRUw5ZSxlQUFLdTdCLFlBQVl4SCxNQUFaLENBQW1CL3pCLEdBQW5CLEdBQXlCdTdCLFlBQVkxWCxNQUFyQyxHQUE4Q3NYO0FBRjlDLFNBQVA7QUFJQTtBQUNGO0FBQ0UsZUFBTztBQUNMdFosZ0JBQU9xVSxXQUFXRyxHQUFYLEtBQW1Ca0YsWUFBWXhILE1BQVosQ0FBbUJsUyxJQUFuQixHQUEwQnlaLFNBQVN4YyxLQUFuQyxHQUEyQ3ljLFlBQVl6YyxLQUExRSxHQUFrRnljLFlBQVl4SCxNQUFaLENBQW1CbFMsSUFBbkIsR0FBMEJ1WixPQUQ5RztBQUVMcDdCLGVBQUt1N0IsWUFBWXhILE1BQVosQ0FBbUIvekIsR0FBbkIsR0FBeUJ1N0IsWUFBWTFYLE1BQXJDLEdBQThDc1g7QUFGOUMsU0FBUDtBQXpFSjtBQThFRDtBQUVBLENBaE1BLENBZ01DaHBDLE1BaE1ELENBQUQ7QUNGQTs7Ozs7Ozs7QUFRQTs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViLE1BQU15RixXQUFXO0FBQ2YsT0FBRyxLQURZO0FBRWYsUUFBSSxPQUZXO0FBR2YsUUFBSSxRQUhXO0FBSWYsUUFBSSxPQUpXO0FBS2YsUUFBSSxZQUxXO0FBTWYsUUFBSSxVQU5XO0FBT2YsUUFBSSxhQVBXO0FBUWYsUUFBSTtBQVJXLEdBQWpCOztBQVdBLE1BQUlDLFdBQVcsRUFBZjs7QUFFQSxNQUFJQyxXQUFXO0FBQ2JyOUIsVUFBTXM5QixZQUFZSCxRQUFaLENBRE87O0FBR2I7Ozs7OztBQU1BSSxZQVRhLG9CQVNKbG1CLEtBVEksRUFTRztBQUNkLFVBQUluZixNQUFNaWxDLFNBQVM5bEIsTUFBTXlDLEtBQU4sSUFBZXpDLE1BQU0yQyxPQUE5QixLQUEwQzliLE9BQU9DLFlBQVAsQ0FBb0JrWixNQUFNeUMsS0FBMUIsRUFBaUNybEIsV0FBakMsRUFBcEQ7O0FBRUE7QUFDQXlELFlBQU1BLElBQUlaLE9BQUosQ0FBWSxLQUFaLEVBQW1CLEVBQW5CLENBQU47O0FBRUEsVUFBSStmLE1BQU1tbUIsUUFBVixFQUFvQnRsQyxpQkFBZUEsR0FBZjtBQUNwQixVQUFJbWYsTUFBTW9tQixPQUFWLEVBQW1CdmxDLGdCQUFjQSxHQUFkO0FBQ25CLFVBQUltZixNQUFNcW1CLE1BQVYsRUFBa0J4bEMsZUFBYUEsR0FBYjs7QUFFbEI7QUFDQUEsWUFBTUEsSUFBSVosT0FBSixDQUFZLElBQVosRUFBa0IsRUFBbEIsQ0FBTjs7QUFFQSxhQUFPWSxHQUFQO0FBQ0QsS0F2Qlk7OztBQXlCYjs7Ozs7O0FBTUF5bEMsYUEvQmEscUJBK0JIdG1CLEtBL0JHLEVBK0JJdW1CLFNBL0JKLEVBK0JlQyxTQS9CZixFQStCMEI7QUFDckMsVUFBSUMsY0FBY1YsU0FBU1EsU0FBVCxDQUFsQjtBQUFBLFVBQ0U1akIsVUFBVSxLQUFLdWpCLFFBQUwsQ0FBY2xtQixLQUFkLENBRFo7QUFBQSxVQUVFMG1CLElBRkY7QUFBQSxVQUdFQyxPQUhGO0FBQUEsVUFJRS9wQyxFQUpGOztBQU1BLFVBQUksQ0FBQzZwQyxXQUFMLEVBQWtCLE9BQU8zRSxRQUFRTSxJQUFSLENBQWEsd0JBQWIsQ0FBUDs7QUFFbEIsVUFBSSxPQUFPcUUsWUFBWUcsR0FBbkIsS0FBMkIsV0FBL0IsRUFBNEM7QUFBRTtBQUMxQ0YsZUFBT0QsV0FBUCxDQUR3QyxDQUNwQjtBQUN2QixPQUZELE1BRU87QUFBRTtBQUNMLFlBQUlqRyxXQUFXRyxHQUFYLEVBQUosRUFBc0IrRixPQUFPckcsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhd25DLFlBQVlHLEdBQXpCLEVBQThCSCxZQUFZOUYsR0FBMUMsQ0FBUCxDQUF0QixLQUVLK0YsT0FBT3JHLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYXduQyxZQUFZOUYsR0FBekIsRUFBOEI4RixZQUFZRyxHQUExQyxDQUFQO0FBQ1I7QUFDREQsZ0JBQVVELEtBQUsvakIsT0FBTCxDQUFWOztBQUVBL2xCLFdBQUs0cEMsVUFBVUcsT0FBVixDQUFMO0FBQ0EsVUFBSS9wQyxNQUFNLE9BQU9BLEVBQVAsS0FBYyxVQUF4QixFQUFvQztBQUFFO0FBQ3BDLFlBQUlxbkIsY0FBY3JuQixHQUFHMkIsS0FBSCxFQUFsQjtBQUNBLFlBQUlpb0MsVUFBVUssT0FBVixJQUFxQixPQUFPTCxVQUFVSyxPQUFqQixLQUE2QixVQUF0RCxFQUFrRTtBQUFFO0FBQ2hFTCxvQkFBVUssT0FBVixDQUFrQjVpQixXQUFsQjtBQUNIO0FBQ0YsT0FMRCxNQUtPO0FBQ0wsWUFBSXVpQixVQUFVTSxTQUFWLElBQXVCLE9BQU9OLFVBQVVNLFNBQWpCLEtBQStCLFVBQTFELEVBQXNFO0FBQUU7QUFDcEVOLG9CQUFVTSxTQUFWO0FBQ0g7QUFDRjtBQUNGLEtBNURZOzs7QUE4RGI7Ozs7O0FBS0FDLGlCQW5FYSx5QkFtRUMzRixRQW5FRCxFQW1FVztBQUN0QixVQUFHLENBQUNBLFFBQUosRUFBYztBQUFDLGVBQU8sS0FBUDtBQUFlO0FBQzlCLGFBQU9BLFNBQVN2MkIsSUFBVCxDQUFjLDhLQUFkLEVBQThMQyxNQUE5TCxDQUFxTSxZQUFXO0FBQ3JOLFlBQUksQ0FBQ3UxQixFQUFFLElBQUYsRUFBUTdzQixFQUFSLENBQVcsVUFBWCxDQUFELElBQTJCNnNCLEVBQUUsSUFBRixFQUFRaDBCLElBQVIsQ0FBYSxVQUFiLElBQTJCLENBQTFELEVBQTZEO0FBQUUsaUJBQU8sS0FBUDtBQUFlLFNBRHVJLENBQ3RJO0FBQy9FLGVBQU8sSUFBUDtBQUNELE9BSE0sQ0FBUDtBQUlELEtBekVZOzs7QUEyRWI7Ozs7OztBQU1BK04sWUFqRmEsb0JBaUZKNHNCLGFBakZJLEVBaUZXTixJQWpGWCxFQWlGaUI7QUFDNUJYLGVBQVNpQixhQUFULElBQTBCTixJQUExQjtBQUNELEtBbkZZOzs7QUFxRmI7Ozs7QUFJQU8sYUF6RmEscUJBeUZIN0YsUUF6RkcsRUF5Rk87QUFDbEIsVUFBSThGLGFBQWExRyxXQUFXd0YsUUFBWCxDQUFvQmUsYUFBcEIsQ0FBa0MzRixRQUFsQyxDQUFqQjtBQUFBLFVBQ0krRixrQkFBa0JELFdBQVd4b0MsRUFBWCxDQUFjLENBQWQsQ0FEdEI7QUFBQSxVQUVJMG9DLGlCQUFpQkYsV0FBV3hvQyxFQUFYLENBQWMsQ0FBQyxDQUFmLENBRnJCOztBQUlBMGlDLGVBQVN4aEIsRUFBVCxDQUFZLHNCQUFaLEVBQW9DLFVBQVNJLEtBQVQsRUFBZ0I7QUFDbEQsWUFBSUEsTUFBTXhnQixNQUFOLEtBQWlCNG5DLGVBQWUsQ0FBZixDQUFqQixJQUFzQzVHLFdBQVd3RixRQUFYLENBQW9CRSxRQUFwQixDQUE2QmxtQixLQUE3QixNQUF3QyxLQUFsRixFQUF5RjtBQUN2RkEsZ0JBQU0rQixjQUFOO0FBQ0FvbEIsMEJBQWdCdmpCLEtBQWhCO0FBQ0QsU0FIRCxNQUlLLElBQUk1RCxNQUFNeGdCLE1BQU4sS0FBaUIybkMsZ0JBQWdCLENBQWhCLENBQWpCLElBQXVDM0csV0FBV3dGLFFBQVgsQ0FBb0JFLFFBQXBCLENBQTZCbG1CLEtBQTdCLE1BQXdDLFdBQW5GLEVBQWdHO0FBQ25HQSxnQkFBTStCLGNBQU47QUFDQXFsQix5QkFBZXhqQixLQUFmO0FBQ0Q7QUFDRixPQVREO0FBVUQsS0F4R1k7O0FBeUdiOzs7O0FBSUF5akIsZ0JBN0dhLHdCQTZHQWpHLFFBN0dBLEVBNkdVO0FBQ3JCQSxlQUFTL25CLEdBQVQsQ0FBYSxzQkFBYjtBQUNEO0FBL0dZLEdBQWY7O0FBa0hBOzs7O0FBSUEsV0FBUzRzQixXQUFULENBQXFCcUIsR0FBckIsRUFBMEI7QUFDeEIsUUFBSUMsSUFBSSxFQUFSO0FBQ0EsU0FBSyxJQUFJQyxFQUFULElBQWVGLEdBQWY7QUFBb0JDLFFBQUVELElBQUlFLEVBQUosQ0FBRixJQUFhRixJQUFJRSxFQUFKLENBQWI7QUFBcEIsS0FDQSxPQUFPRCxDQUFQO0FBQ0Q7O0FBRUQvRyxhQUFXd0YsUUFBWCxHQUFzQkEsUUFBdEI7QUFFQyxDQTdJQSxDQTZJQ3ZwQyxNQTdJRCxDQUFEO0FDVkE7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViO0FBQ0EsTUFBTW9ILGlCQUFpQjtBQUNyQixlQUFZLGFBRFM7QUFFckJDLGVBQVksMENBRlM7QUFHckJDLGNBQVcseUNBSFU7QUFJckJDLFlBQVMseURBQ1AsbURBRE8sR0FFUCxtREFGTyxHQUdQLDhDQUhPLEdBSVAsMkNBSk8sR0FLUDtBQVRtQixHQUF2Qjs7QUFZQSxNQUFJN0UsYUFBYTtBQUNmOEUsYUFBUyxFQURNOztBQUdmcFEsYUFBUyxFQUhNOztBQUtmOzs7OztBQUtBZ0ssU0FWZSxtQkFVUDtBQUNOLFVBQUl2dEIsT0FBTyxJQUFYO0FBQ0EsVUFBSTR6QixrQkFBa0J6SCxFQUFFLGdCQUFGLEVBQW9CN2pCLEdBQXBCLENBQXdCLGFBQXhCLENBQXRCO0FBQ0EsVUFBSXVyQixZQUFKOztBQUVBQSxxQkFBZUMsbUJBQW1CRixlQUFuQixDQUFmOztBQUVBLFdBQUssSUFBSWpuQyxHQUFULElBQWdCa25DLFlBQWhCLEVBQThCO0FBQzVCLFlBQUdBLGFBQWF6ckMsY0FBYixDQUE0QnVFLEdBQTVCLENBQUgsRUFBcUM7QUFDbkNxVCxlQUFLMnpCLE9BQUwsQ0FBYTVyQyxJQUFiLENBQWtCO0FBQ2hCa0Qsa0JBQU0wQixHQURVO0FBRWhCK0Isb0RBQXNDbWxDLGFBQWFsbkMsR0FBYixDQUF0QztBQUZnQixXQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsV0FBSzQyQixPQUFMLEdBQWUsS0FBS3dRLGVBQUwsRUFBZjs7QUFFQSxXQUFLQyxRQUFMO0FBQ0QsS0E3QmM7OztBQStCZjs7Ozs7O0FBTUFDLFdBckNlLG1CQXFDUHBJLElBckNPLEVBcUNEO0FBQ1osVUFBSXFJLFFBQVEsS0FBS3pxQyxHQUFMLENBQVNvaUMsSUFBVCxDQUFaOztBQUVBLFVBQUlxSSxLQUFKLEVBQVc7QUFDVCxlQUFPeHNDLE9BQU95c0MsVUFBUCxDQUFrQkQsS0FBbEIsRUFBeUIzbEMsT0FBaEM7QUFDRDs7QUFFRCxhQUFPLEtBQVA7QUFDRCxLQTdDYzs7O0FBK0NmOzs7Ozs7QUFNQStRLE1BckRlLGNBcURadXNCLElBckRZLEVBcUROO0FBQ1BBLGFBQU9BLEtBQUsxK0IsSUFBTCxHQUFZZ0MsS0FBWixDQUFrQixHQUFsQixDQUFQO0FBQ0EsVUFBRzA4QixLQUFLdmlDLE1BQUwsR0FBYyxDQUFkLElBQW1CdWlDLEtBQUssQ0FBTCxNQUFZLE1BQWxDLEVBQTBDO0FBQ3hDLFlBQUdBLEtBQUssQ0FBTCxNQUFZLEtBQUtrSSxlQUFMLEVBQWYsRUFBdUMsT0FBTyxJQUFQO0FBQ3hDLE9BRkQsTUFFTztBQUNMLGVBQU8sS0FBS0UsT0FBTCxDQUFhcEksS0FBSyxDQUFMLENBQWIsQ0FBUDtBQUNEO0FBQ0QsYUFBTyxLQUFQO0FBQ0QsS0E3RGM7OztBQStEZjs7Ozs7O0FBTUFwaUMsT0FyRWUsZUFxRVhvaUMsSUFyRVcsRUFxRUw7QUFDUixXQUFLLElBQUl6aEMsQ0FBVCxJQUFjLEtBQUt1cEMsT0FBbkIsRUFBNEI7QUFDMUIsWUFBRyxLQUFLQSxPQUFMLENBQWF2ckMsY0FBYixDQUE0QmdDLENBQTVCLENBQUgsRUFBbUM7QUFDakMsY0FBSThwQyxRQUFRLEtBQUtQLE9BQUwsQ0FBYXZwQyxDQUFiLENBQVo7QUFDQSxjQUFJeWhDLFNBQVNxSSxNQUFNanBDLElBQW5CLEVBQXlCLE9BQU9pcEMsTUFBTXhsQyxLQUFiO0FBQzFCO0FBQ0Y7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0E5RWM7OztBQWdGZjs7Ozs7O0FBTUFxbEMsbUJBdEZlLDZCQXNGRztBQUNoQixVQUFJdjVCLE9BQUo7O0FBRUEsV0FBSyxJQUFJcFEsSUFBSSxDQUFiLEVBQWdCQSxJQUFJLEtBQUt1cEMsT0FBTCxDQUFhcnFDLE1BQWpDLEVBQXlDYyxHQUF6QyxFQUE4QztBQUM1QyxZQUFJOHBDLFFBQVEsS0FBS1AsT0FBTCxDQUFhdnBDLENBQWIsQ0FBWjs7QUFFQSxZQUFJMUMsT0FBT3lzQyxVQUFQLENBQWtCRCxNQUFNeGxDLEtBQXhCLEVBQStCSCxPQUFuQyxFQUE0QztBQUMxQ2lNLG9CQUFVMDVCLEtBQVY7QUFDRDtBQUNGOztBQUVELFVBQUksUUFBTzE1QixPQUFQLHlDQUFPQSxPQUFQLE9BQW1CLFFBQXZCLEVBQWlDO0FBQy9CLGVBQU9BLFFBQVF2UCxJQUFmO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsZUFBT3VQLE9BQVA7QUFDRDtBQUNGLEtBdEdjOzs7QUF3R2Y7Ozs7O0FBS0F3NUIsWUE3R2Usc0JBNkdKO0FBQUE7O0FBQ1Q3SCxRQUFFemtDLE1BQUYsRUFBVWdrQixFQUFWLENBQWEsc0JBQWIsRUFBcUMsWUFBTTtBQUN6QyxZQUFJMG9CLFVBQVUsTUFBS0wsZUFBTCxFQUFkO0FBQUEsWUFBc0NNLGNBQWMsTUFBSzlRLE9BQXpEOztBQUVBLFlBQUk2USxZQUFZQyxXQUFoQixFQUE2QjtBQUMzQjtBQUNBLGdCQUFLOVEsT0FBTCxHQUFlNlEsT0FBZjs7QUFFQTtBQUNBakksWUFBRXprQyxNQUFGLEVBQVVpb0IsT0FBVixDQUFrQix1QkFBbEIsRUFBMkMsQ0FBQ3lrQixPQUFELEVBQVVDLFdBQVYsQ0FBM0M7QUFDRDtBQUNGLE9BVkQ7QUFXRDtBQXpIYyxHQUFqQjs7QUE0SEEvSCxhQUFXdUMsVUFBWCxHQUF3QkEsVUFBeEI7O0FBRUE7QUFDQTtBQUNBbm5DLFNBQU95c0MsVUFBUCxLQUFzQnpzQyxPQUFPeXNDLFVBQVAsR0FBb0IsWUFBVztBQUNuRDs7QUFFQTs7QUFDQSxRQUFJRyxhQUFjNXNDLE9BQU80c0MsVUFBUCxJQUFxQjVzQyxPQUFPNnNDLEtBQTlDOztBQUVBO0FBQ0EsUUFBSSxDQUFDRCxVQUFMLEVBQWlCO0FBQ2YsVUFBSXJyQixRQUFVMWhCLFNBQVM2RixhQUFULENBQXVCLE9BQXZCLENBQWQ7QUFBQSxVQUNBSixTQUFjekYsU0FBU3NNLG9CQUFULENBQThCLFFBQTlCLEVBQXdDLENBQXhDLENBRGQ7QUFBQSxVQUVBMmdDLE9BQWMsSUFGZDs7QUFJQXZyQixZQUFNNWMsSUFBTixHQUFjLFVBQWQ7QUFDQTRjLFlBQU1yVixFQUFOLEdBQWMsbUJBQWQ7O0FBRUE1RyxnQkFBVUEsT0FBT1EsVUFBakIsSUFBK0JSLE9BQU9RLFVBQVAsQ0FBa0JvbEIsWUFBbEIsQ0FBK0IzSixLQUEvQixFQUFzQ2pjLE1BQXRDLENBQS9COztBQUVBO0FBQ0F3bkMsYUFBUSxzQkFBc0I5c0MsTUFBdkIsSUFBa0NBLE9BQU8wc0IsZ0JBQVAsQ0FBd0JuTCxLQUF4QixFQUErQixJQUEvQixDQUFsQyxJQUEwRUEsTUFBTXdyQixZQUF2Rjs7QUFFQUgsbUJBQWE7QUFDWEksbUJBRFcsdUJBQ0NILEtBREQsRUFDUTtBQUNqQixjQUFJbG5DLG1CQUFpQmtuQyxLQUFqQiwyQ0FBSjs7QUFFQTtBQUNBLGNBQUl0ckIsTUFBTTByQixVQUFWLEVBQXNCO0FBQ3BCMXJCLGtCQUFNMHJCLFVBQU4sQ0FBaUI3ZixPQUFqQixHQUEyQnpuQixJQUEzQjtBQUNELFdBRkQsTUFFTztBQUNMNGIsa0JBQU12USxXQUFOLEdBQW9CckwsSUFBcEI7QUFDRDs7QUFFRDtBQUNBLGlCQUFPbW5DLEtBQUt0ZixLQUFMLEtBQWUsS0FBdEI7QUFDRDtBQWJVLE9BQWI7QUFlRDs7QUFFRCxXQUFPLFVBQVNxZixLQUFULEVBQWdCO0FBQ3JCLGFBQU87QUFDTGhtQyxpQkFBUytsQyxXQUFXSSxXQUFYLENBQXVCSCxTQUFTLEtBQWhDLENBREo7QUFFTEEsZUFBT0EsU0FBUztBQUZYLE9BQVA7QUFJRCxLQUxEO0FBTUQsR0EzQ3lDLEVBQTFDOztBQTZDQTtBQUNBLFdBQVNULGtCQUFULENBQTRCNUQsR0FBNUIsRUFBaUM7QUFDL0IsUUFBSTBFLGNBQWMsRUFBbEI7O0FBRUEsUUFBSSxPQUFPMUUsR0FBUCxLQUFlLFFBQW5CLEVBQTZCO0FBQzNCLGFBQU8wRSxXQUFQO0FBQ0Q7O0FBRUQxRSxVQUFNQSxJQUFJL2lDLElBQUosR0FBV3RGLEtBQVgsQ0FBaUIsQ0FBakIsRUFBb0IsQ0FBQyxDQUFyQixDQUFOLENBUCtCLENBT0E7O0FBRS9CLFFBQUksQ0FBQ3FvQyxHQUFMLEVBQVU7QUFDUixhQUFPMEUsV0FBUDtBQUNEOztBQUVEQSxrQkFBYzFFLElBQUkvZ0MsS0FBSixDQUFVLEdBQVYsRUFBZTBsQyxNQUFmLENBQXNCLFVBQVNockMsR0FBVCxFQUFjeThCLEtBQWQsRUFBcUI7QUFDdkQsVUFBSTdOLFFBQVE2TixNQUFNdjZCLE9BQU4sQ0FBYyxLQUFkLEVBQXFCLEdBQXJCLEVBQTBCb0QsS0FBMUIsQ0FBZ0MsR0FBaEMsQ0FBWjtBQUNBLFVBQUl4QyxNQUFNOHJCLE1BQU0sQ0FBTixDQUFWO0FBQ0EsVUFBSXJnQixNQUFNcWdCLE1BQU0sQ0FBTixDQUFWO0FBQ0E5ckIsWUFBTW1vQyxtQkFBbUJub0MsR0FBbkIsQ0FBTjs7QUFFQTtBQUNBO0FBQ0F5TCxZQUFNQSxRQUFRek0sU0FBUixHQUFvQixJQUFwQixHQUEyQm1wQyxtQkFBbUIxOEIsR0FBbkIsQ0FBakM7O0FBRUEsVUFBSSxDQUFDdk8sSUFBSXpCLGNBQUosQ0FBbUJ1RSxHQUFuQixDQUFMLEVBQThCO0FBQzVCOUMsWUFBSThDLEdBQUosSUFBV3lMLEdBQVg7QUFDRCxPQUZELE1BRU8sSUFBSTlMLE1BQU1aLE9BQU4sQ0FBYzdCLElBQUk4QyxHQUFKLENBQWQsQ0FBSixFQUE2QjtBQUNsQzlDLFlBQUk4QyxHQUFKLEVBQVM1RSxJQUFULENBQWNxUSxHQUFkO0FBQ0QsT0FGTSxNQUVBO0FBQ0x2TyxZQUFJOEMsR0FBSixJQUFXLENBQUM5QyxJQUFJOEMsR0FBSixDQUFELEVBQVd5TCxHQUFYLENBQVg7QUFDRDtBQUNELGFBQU92TyxHQUFQO0FBQ0QsS0FsQmEsRUFrQlgsRUFsQlcsQ0FBZDs7QUFvQkEsV0FBTytxQyxXQUFQO0FBQ0Q7O0FBRUR0SSxhQUFXdUMsVUFBWCxHQUF3QkEsVUFBeEI7QUFFQyxDQW5PQSxDQW1PQ3RtQyxNQW5PRCxDQUFEO0FDRkE7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7QUFLQSxNQUFNNEksY0FBZ0IsQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUF0QjtBQUNBLE1BQU1DLGdCQUFnQixDQUFDLGtCQUFELEVBQXFCLGtCQUFyQixDQUF0Qjs7QUFFQSxNQUFNQyxTQUFTO0FBQ2JDLGVBQVcsbUJBQVMzRSxPQUFULEVBQWtCcFcsU0FBbEIsRUFBNkJnYixFQUE3QixFQUFpQztBQUMxQzdZLGNBQVEsSUFBUixFQUFjaVUsT0FBZCxFQUF1QnBXLFNBQXZCLEVBQWtDZ2IsRUFBbEM7QUFDRCxLQUhZOztBQUtiQyxnQkFBWSxvQkFBUzdFLE9BQVQsRUFBa0JwVyxTQUFsQixFQUE2QmdiLEVBQTdCLEVBQWlDO0FBQzNDN1ksY0FBUSxLQUFSLEVBQWVpVSxPQUFmLEVBQXdCcFcsU0FBeEIsRUFBbUNnYixFQUFuQztBQUNEO0FBUFksR0FBZjs7QUFVQSxXQUFTRSxJQUFULENBQWNuYyxRQUFkLEVBQXdCL3VCLElBQXhCLEVBQThCekIsRUFBOUIsRUFBaUM7QUFDL0IsUUFBSWd5QixJQUFKO0FBQUEsUUFBVTRhLElBQVY7QUFBQSxRQUFnQnI3QixRQUFRLElBQXhCO0FBQ0E7O0FBRUEsUUFBSWlmLGFBQWEsQ0FBakIsRUFBb0I7QUFDbEJ4d0IsU0FBRzJCLEtBQUgsQ0FBU0YsSUFBVDtBQUNBQSxXQUFLd2xCLE9BQUwsQ0FBYSxxQkFBYixFQUFvQyxDQUFDeGxCLElBQUQsQ0FBcEMsRUFBNEMrYSxjQUE1QyxDQUEyRCxxQkFBM0QsRUFBa0YsQ0FBQy9hLElBQUQsQ0FBbEY7QUFDQTtBQUNEOztBQUVELGFBQVNvckMsSUFBVCxDQUFjQyxFQUFkLEVBQWlCO0FBQ2YsVUFBRyxDQUFDdjdCLEtBQUosRUFBV0EsUUFBUXU3QixFQUFSO0FBQ1g7QUFDQUYsYUFBT0UsS0FBS3Y3QixLQUFaO0FBQ0F2UixTQUFHMkIsS0FBSCxDQUFTRixJQUFUOztBQUVBLFVBQUdtckMsT0FBT3BjLFFBQVYsRUFBbUI7QUFBRXdCLGVBQU9oekIsT0FBT3luQyxxQkFBUCxDQUE2Qm9HLElBQTdCLEVBQW1DcHJDLElBQW5DLENBQVA7QUFBa0QsT0FBdkUsTUFDSTtBQUNGekMsZUFBTzJuQyxvQkFBUCxDQUE0QjNVLElBQTVCO0FBQ0F2d0IsYUFBS3dsQixPQUFMLENBQWEscUJBQWIsRUFBb0MsQ0FBQ3hsQixJQUFELENBQXBDLEVBQTRDK2EsY0FBNUMsQ0FBMkQscUJBQTNELEVBQWtGLENBQUMvYSxJQUFELENBQWxGO0FBQ0Q7QUFDRjtBQUNEdXdCLFdBQU9oekIsT0FBT3luQyxxQkFBUCxDQUE2Qm9HLElBQTdCLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7O0FBU0EsV0FBU2paLE9BQVQsQ0FBaUJtWixJQUFqQixFQUF1QmxGLE9BQXZCLEVBQWdDcFcsU0FBaEMsRUFBMkNnYixFQUEzQyxFQUErQztBQUM3QzVFLGNBQVVwRSxFQUFFb0UsT0FBRixFQUFXL2xDLEVBQVgsQ0FBYyxDQUFkLENBQVY7O0FBRUEsUUFBSSxDQUFDK2xDLFFBQVFqbkMsTUFBYixFQUFxQjs7QUFFckIsUUFBSW9zQyxZQUFZRCxPQUFPVixZQUFZLENBQVosQ0FBUCxHQUF3QkEsWUFBWSxDQUFaLENBQXhDO0FBQ0EsUUFBSVksY0FBY0YsT0FBT1QsY0FBYyxDQUFkLENBQVAsR0FBMEJBLGNBQWMsQ0FBZCxDQUE1Qzs7QUFFQTtBQUNBbDVCOztBQUVBeTBCLFlBQ0d2UixRQURILENBQ1k3RSxTQURaLEVBRUc3UixHQUZILENBRU8sWUFGUCxFQUVxQixNQUZyQjs7QUFJQTZtQiwwQkFBc0IsWUFBTTtBQUMxQm9CLGNBQVF2UixRQUFSLENBQWlCMFcsU0FBakI7QUFDQSxVQUFJRCxJQUFKLEVBQVVsRixRQUFROVksSUFBUjtBQUNYLEtBSEQ7O0FBS0E7QUFDQTBYLDBCQUFzQixZQUFNO0FBQzFCb0IsY0FBUSxDQUFSLEVBQVdqWixXQUFYO0FBQ0FpWixjQUNHam9CLEdBREgsQ0FDTyxZQURQLEVBQ3FCLEVBRHJCLEVBRUcwVyxRQUZILENBRVkyVyxXQUZaO0FBR0QsS0FMRDs7QUFPQTtBQUNBcEYsWUFBUTNrQixHQUFSLENBQVkwZ0IsV0FBV2lDLGFBQVgsQ0FBeUJnQyxPQUF6QixDQUFaLEVBQStDOVQsTUFBL0M7O0FBRUE7QUFDQSxhQUFTQSxNQUFULEdBQWtCO0FBQ2hCLFVBQUksQ0FBQ2daLElBQUwsRUFBV2xGLFFBQVE3WCxJQUFSO0FBQ1g1YztBQUNBLFVBQUlxNUIsRUFBSixFQUFRQSxHQUFHOXFDLEtBQUgsQ0FBU2ttQyxPQUFUO0FBQ1Q7O0FBRUQ7QUFDQSxhQUFTejBCLEtBQVQsR0FBaUI7QUFDZnkwQixjQUFRLENBQVIsRUFBV3RuQixLQUFYLENBQWlCMnNCLGtCQUFqQixHQUFzQyxDQUF0QztBQUNBckYsY0FBUWxSLFdBQVIsQ0FBdUJxVyxTQUF2QixTQUFvQ0MsV0FBcEMsU0FBbUR4YixTQUFuRDtBQUNEO0FBQ0Y7O0FBRURtUyxhQUFXK0ksSUFBWCxHQUFrQkEsSUFBbEI7QUFDQS9JLGFBQVcySSxNQUFYLEdBQW9CQSxNQUFwQjtBQUVDLENBdEdBLENBc0dDMXNDLE1BdEdELENBQUQ7QUNGQTs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViLE1BQU0wSixPQUFPO0FBQ1hDLFdBRFcsbUJBQ0hDLElBREcsRUFDZ0I7QUFBQSxVQUFiMXBDLElBQWEsdUVBQU4sSUFBTTs7QUFDekIwcEMsV0FBSzU5QixJQUFMLENBQVUsTUFBVixFQUFrQixTQUFsQjs7QUFFQSxVQUFJNjlCLFFBQVFELEtBQUtwL0IsSUFBTCxDQUFVLElBQVYsRUFBZ0J3QixJQUFoQixDQUFxQixFQUFDLFFBQVEsVUFBVCxFQUFyQixDQUFaO0FBQUEsVUFDSTg5Qix1QkFBcUI1cEMsSUFBckIsYUFESjtBQUFBLFVBRUk2cEMsZUFBa0JELFlBQWxCLFVBRko7QUFBQSxVQUdJRSxzQkFBb0I5cEMsSUFBcEIsb0JBSEo7O0FBS0EycEMsWUFBTWhzQyxJQUFOLENBQVcsWUFBVztBQUNwQixZQUFJb3NDLFFBQVFqSyxFQUFFLElBQUYsQ0FBWjtBQUFBLFlBQ0lrSyxPQUFPRCxNQUFNNzFCLFFBQU4sQ0FBZSxJQUFmLENBRFg7O0FBR0EsWUFBSTgxQixLQUFLL3NDLE1BQVQsRUFBaUI7QUFDZjhzQyxnQkFDR3BYLFFBREgsQ0FDWW1YLFdBRFosRUFFR2grQixJQUZILENBRVE7QUFDSiw2QkFBaUIsSUFEYjtBQUVKLDBCQUFjaStCLE1BQU03MUIsUUFBTixDQUFlLFNBQWYsRUFBMEJsVCxJQUExQjtBQUZWLFdBRlI7QUFNRTtBQUNBO0FBQ0E7QUFDQSxjQUFHaEIsU0FBUyxXQUFaLEVBQXlCO0FBQ3ZCK3BDLGtCQUFNaitCLElBQU4sQ0FBVyxFQUFDLGlCQUFpQixLQUFsQixFQUFYO0FBQ0Q7O0FBRUhrK0IsZUFDR3JYLFFBREgsY0FDdUJpWCxZQUR2QixFQUVHOTlCLElBRkgsQ0FFUTtBQUNKLDRCQUFnQixFQURaO0FBRUosb0JBQVE7QUFGSixXQUZSO0FBTUEsY0FBRzlMLFNBQVMsV0FBWixFQUF5QjtBQUN2QmdxQyxpQkFBS2wrQixJQUFMLENBQVUsRUFBQyxlQUFlLElBQWhCLEVBQVY7QUFDRDtBQUNGOztBQUVELFlBQUlpK0IsTUFBTW5nQyxNQUFOLENBQWEsZ0JBQWIsRUFBK0IzTSxNQUFuQyxFQUEyQztBQUN6QzhzQyxnQkFBTXBYLFFBQU4sc0JBQWtDa1gsWUFBbEM7QUFDRDtBQUNGLE9BaENEOztBQWtDQTtBQUNELEtBNUNVO0FBOENYSSxRQTlDVyxnQkE4Q05QLElBOUNNLEVBOENBMXBDLElBOUNBLEVBOENNO0FBQ2YsVUFBSTtBQUNBNHBDLDZCQUFxQjVwQyxJQUFyQixhQURKO0FBQUEsVUFFSTZwQyxlQUFrQkQsWUFBbEIsVUFGSjtBQUFBLFVBR0lFLHNCQUFvQjlwQyxJQUFwQixvQkFISjs7QUFLQTBwQyxXQUNHcC9CLElBREgsQ0FDUSx3QkFEUixFQUVHMG9CLFdBRkgsQ0FFa0I0VyxZQUZsQixTQUVrQ0MsWUFGbEMsU0FFa0RDLFdBRmxELHlDQUdHbFksVUFISCxDQUdjLGNBSGQsRUFHOEIzVixHQUg5QixDQUdrQyxTQUhsQyxFQUc2QyxFQUg3Qzs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7QUF2RVUsR0FBYjs7QUEwRUFna0IsYUFBV3VKLElBQVgsR0FBa0JBLElBQWxCO0FBRUMsQ0E5RUEsQ0E4RUN0dEMsTUE5RUQsQ0FBRDtBQ0ZBOztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWIsV0FBU29LLEtBQVQsQ0FBZXBzQyxJQUFmLEVBQXFCYSxPQUFyQixFQUE4Qm1xQyxFQUE5QixFQUFrQztBQUNoQyxRQUFJM0gsUUFBUSxJQUFaO0FBQUEsUUFDSXRVLFdBQVdsdUIsUUFBUWt1QixRQUR2QjtBQUFBLFFBQ2dDO0FBQzVCc2QsZ0JBQVl2b0MsT0FBT3dHLElBQVAsQ0FBWXRLLEtBQUtxYyxJQUFMLEVBQVosRUFBeUIsQ0FBekIsS0FBK0IsT0FGL0M7QUFBQSxRQUdJaXdCLFNBQVMsQ0FBQyxDQUhkO0FBQUEsUUFJSXg4QixLQUpKO0FBQUEsUUFLSTRoQixLQUxKOztBQU9BLFNBQUs2YSxRQUFMLEdBQWdCLEtBQWhCOztBQUVBLFNBQUtDLE9BQUwsR0FBZSxZQUFXO0FBQ3hCRixlQUFTLENBQUMsQ0FBVjtBQUNBOVksbUJBQWE5QixLQUFiO0FBQ0EsV0FBSzVoQixLQUFMO0FBQ0QsS0FKRDs7QUFNQSxTQUFLQSxLQUFMLEdBQWEsWUFBVztBQUN0QixXQUFLeThCLFFBQUwsR0FBZ0IsS0FBaEI7QUFDQTtBQUNBL1ksbUJBQWE5QixLQUFiO0FBQ0E0YSxlQUFTQSxVQUFVLENBQVYsR0FBY3ZkLFFBQWQsR0FBeUJ1ZCxNQUFsQztBQUNBdHNDLFdBQUtxYyxJQUFMLENBQVUsUUFBVixFQUFvQixLQUFwQjtBQUNBdk0sY0FBUWpMLEtBQUtELEdBQUwsRUFBUjtBQUNBOHNCLGNBQVFyVyxXQUFXLFlBQVU7QUFDM0IsWUFBR3hhLFFBQVE0ckMsUUFBWCxFQUFvQjtBQUNsQnBKLGdCQUFNbUosT0FBTixHQURrQixDQUNGO0FBQ2pCO0FBQ0QsWUFBSXhCLE1BQU0sT0FBT0EsRUFBUCxLQUFjLFVBQXhCLEVBQW9DO0FBQUVBO0FBQU87QUFDOUMsT0FMTyxFQUtMc0IsTUFMSyxDQUFSO0FBTUF0c0MsV0FBS3dsQixPQUFMLG9CQUE4QjZtQixTQUE5QjtBQUNELEtBZEQ7O0FBZ0JBLFNBQUtLLEtBQUwsR0FBYSxZQUFXO0FBQ3RCLFdBQUtILFFBQUwsR0FBZ0IsSUFBaEI7QUFDQTtBQUNBL1ksbUJBQWE5QixLQUFiO0FBQ0ExeEIsV0FBS3FjLElBQUwsQ0FBVSxRQUFWLEVBQW9CLElBQXBCO0FBQ0EsVUFBSTViLE1BQU1vRSxLQUFLRCxHQUFMLEVBQVY7QUFDQTBuQyxlQUFTQSxVQUFVN3JDLE1BQU1xUCxLQUFoQixDQUFUO0FBQ0E5UCxXQUFLd2xCLE9BQUwscUJBQStCNm1CLFNBQS9CO0FBQ0QsS0FSRDtBQVNEOztBQUVEOzs7OztBQUtBLFdBQVNNLGNBQVQsQ0FBd0JDLE1BQXhCLEVBQWdDOXNDLFFBQWhDLEVBQXlDO0FBQ3ZDLFFBQUkrVixPQUFPLElBQVg7QUFBQSxRQUNJZzNCLFdBQVdELE9BQU96dEMsTUFEdEI7O0FBR0EsUUFBSTB0QyxhQUFhLENBQWpCLEVBQW9CO0FBQ2xCL3NDO0FBQ0Q7O0FBRUQ4c0MsV0FBTy9zQyxJQUFQLENBQVksWUFBVztBQUNyQjtBQUNBLFVBQUksS0FBSzh4QixRQUFMLElBQWtCLEtBQUt4VyxVQUFMLEtBQW9CLENBQXRDLElBQTZDLEtBQUtBLFVBQUwsS0FBb0IsVUFBckUsRUFBa0Y7QUFDaEYyeEI7QUFDRDtBQUNEO0FBSEEsV0FJSztBQUNIO0FBQ0EsY0FBSS9yQyxNQUFNaWhDLEVBQUUsSUFBRixFQUFRaDBCLElBQVIsQ0FBYSxLQUFiLENBQVY7QUFDQWcwQixZQUFFLElBQUYsRUFBUWgwQixJQUFSLENBQWEsS0FBYixFQUFvQmpOLE9BQU9BLElBQUlsRCxPQUFKLENBQVksR0FBWixLQUFvQixDQUFwQixHQUF3QixHQUF4QixHQUE4QixHQUFyQyxJQUE2QyxJQUFJZ0gsSUFBSixHQUFXaWdDLE9BQVgsRUFBakU7QUFDQTlDLFlBQUUsSUFBRixFQUFRdmdCLEdBQVIsQ0FBWSxNQUFaLEVBQW9CLFlBQVc7QUFDN0JxckI7QUFDRCxXQUZEO0FBR0Q7QUFDRixLQWREOztBQWdCQSxhQUFTQSxpQkFBVCxHQUE2QjtBQUMzQkQ7QUFDQSxVQUFJQSxhQUFhLENBQWpCLEVBQW9CO0FBQ2xCL3NDO0FBQ0Q7QUFDRjtBQUNGOztBQUVEcWlDLGFBQVdpSyxLQUFYLEdBQW1CQSxLQUFuQjtBQUNBakssYUFBV3dLLGNBQVgsR0FBNEJBLGNBQTVCO0FBRUMsQ0FyRkEsQ0FxRkN2dUMsTUFyRkQsQ0FBRDs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUVYQSxHQUFFK0ssU0FBRixHQUFjO0FBQ1o1dUMsV0FBUyxPQURHO0FBRVo2dUMsV0FBUyxrQkFBa0I1dkMsU0FBU3VPLGVBRnhCO0FBR1orWCxrQkFBZ0IsS0FISjtBQUladXBCLGlCQUFlLEVBSkg7QUFLWkMsaUJBQWU7QUFMSCxFQUFkOztBQVFBLEtBQU1DLFNBQU47QUFBQSxLQUNNQyxTQUROO0FBQUEsS0FFTWhjLFNBRk47QUFBQSxLQUdNaWMsV0FITjtBQUFBLEtBSU1DLFdBQVcsS0FKakI7O0FBTUEsVUFBU0MsVUFBVCxHQUFzQjtBQUNwQjtBQUNBLE9BQUtyeUIsbUJBQUwsQ0FBeUIsV0FBekIsRUFBc0NzeUIsV0FBdEM7QUFDQSxPQUFLdHlCLG1CQUFMLENBQXlCLFVBQXpCLEVBQXFDcXlCLFVBQXJDO0FBQ0FELGFBQVcsS0FBWDtBQUNEOztBQUVELFVBQVNFLFdBQVQsQ0FBcUI1a0MsQ0FBckIsRUFBd0I7QUFDdEIsTUFBSW81QixFQUFFK0ssU0FBRixDQUFZcnBCLGNBQWhCLEVBQWdDO0FBQUU5YSxLQUFFOGEsY0FBRjtBQUFxQjtBQUN2RCxNQUFHNHBCLFFBQUgsRUFBYTtBQUNYLE9BQUlHLElBQUk3a0MsRUFBRThrQyxPQUFGLENBQVUsQ0FBVixFQUFhaHBCLEtBQXJCO0FBQ0EsT0FBSWlwQixJQUFJL2tDLEVBQUU4a0MsT0FBRixDQUFVLENBQVYsRUFBYTVvQixLQUFyQjtBQUNBLE9BQUk4b0IsS0FBS1QsWUFBWU0sQ0FBckI7QUFDQSxPQUFJSSxLQUFLVCxZQUFZTyxDQUFyQjtBQUNBLE9BQUk5K0IsR0FBSjtBQUNBdytCLGlCQUFjLElBQUl4b0MsSUFBSixHQUFXaWdDLE9BQVgsS0FBdUIxVCxTQUFyQztBQUNBLE9BQUcxdkIsS0FBS29zQyxHQUFMLENBQVNGLEVBQVQsS0FBZ0I1TCxFQUFFK0ssU0FBRixDQUFZRSxhQUE1QixJQUE2Q0ksZUFBZXJMLEVBQUUrSyxTQUFGLENBQVlHLGFBQTNFLEVBQTBGO0FBQ3hGcitCLFVBQU0rK0IsS0FBSyxDQUFMLEdBQVMsTUFBVCxHQUFrQixPQUF4QjtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FBRy8rQixHQUFILEVBQVE7QUFDTmpHLE1BQUU4YSxjQUFGO0FBQ0E2cEIsZUFBV2x1QyxJQUFYLENBQWdCLElBQWhCO0FBQ0EyaUMsTUFBRSxJQUFGLEVBQVF4YyxPQUFSLENBQWdCLE9BQWhCLEVBQXlCM1csR0FBekIsRUFBOEIyVyxPQUE5QixXQUE4QzNXLEdBQTlDO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFVBQVNrL0IsWUFBVCxDQUFzQm5sQyxDQUF0QixFQUF5QjtBQUN2QixNQUFJQSxFQUFFOGtDLE9BQUYsQ0FBVXZ1QyxNQUFWLElBQW9CLENBQXhCLEVBQTJCO0FBQ3pCZ3VDLGVBQVl2a0MsRUFBRThrQyxPQUFGLENBQVUsQ0FBVixFQUFhaHBCLEtBQXpCO0FBQ0Ewb0IsZUFBWXhrQyxFQUFFOGtDLE9BQUYsQ0FBVSxDQUFWLEVBQWE1b0IsS0FBekI7QUFDQXdvQixjQUFXLElBQVg7QUFDQWxjLGVBQVksSUFBSXZzQixJQUFKLEdBQVdpZ0MsT0FBWCxFQUFaO0FBQ0EsUUFBSzU0QixnQkFBTCxDQUFzQixXQUF0QixFQUFtQ3NoQyxXQUFuQyxFQUFnRCxLQUFoRDtBQUNBLFFBQUt0aEMsZ0JBQUwsQ0FBc0IsVUFBdEIsRUFBa0NxaEMsVUFBbEMsRUFBOEMsS0FBOUM7QUFDRDtBQUNGOztBQUVELFVBQVMvdUMsSUFBVCxHQUFnQjtBQUNkLE9BQUswTixnQkFBTCxJQUF5QixLQUFLQSxnQkFBTCxDQUFzQixZQUF0QixFQUFvQzZoQyxZQUFwQyxFQUFrRCxLQUFsRCxDQUF6QjtBQUNEOztBQUVELFVBQVMvcUIsUUFBVCxHQUFvQjtBQUNsQixPQUFLOUgsbUJBQUwsQ0FBeUIsWUFBekIsRUFBdUM2eUIsWUFBdkM7QUFDRDs7QUFFRC9MLEdBQUVyZ0IsS0FBRixDQUFRTSxPQUFSLENBQWdCK3JCLEtBQWhCLEdBQXdCLEVBQUVuckIsT0FBT3JrQixJQUFULEVBQXhCOztBQUVBd2pDLEdBQUVuaUMsSUFBRixDQUFPLENBQUMsTUFBRCxFQUFTLElBQVQsRUFBZSxNQUFmLEVBQXVCLE9BQXZCLENBQVAsRUFBd0MsWUFBWTtBQUNsRG1pQyxJQUFFcmdCLEtBQUYsQ0FBUU0sT0FBUixXQUF3QixJQUF4QixJQUFrQyxFQUFFWSxPQUFPLGlCQUFVO0FBQ25EbWYsTUFBRSxJQUFGLEVBQVF6Z0IsRUFBUixDQUFXLE9BQVgsRUFBb0J5Z0IsRUFBRWhnQyxJQUF0QjtBQUNELElBRmlDLEVBQWxDO0FBR0QsRUFKRDtBQUtELENBeEVELEVBd0VHNUQsTUF4RUg7QUF5RUE7OztBQUdBLENBQUMsVUFBUzRqQyxDQUFULEVBQVc7QUFDVkEsR0FBRXpqQyxFQUFGLENBQUswdkMsUUFBTCxHQUFnQixZQUFVO0FBQ3hCLE9BQUtwdUMsSUFBTCxDQUFVLFVBQVNJLENBQVQsRUFBV2llLEVBQVgsRUFBYztBQUN0QjhqQixLQUFFOWpCLEVBQUYsRUFBTW9qQixJQUFOLENBQVcsMkNBQVgsRUFBdUQsWUFBVTtBQUMvRDtBQUNBO0FBQ0E0TSxnQkFBWXZzQixLQUFaO0FBQ0QsSUFKRDtBQUtELEdBTkQ7O0FBUUEsTUFBSXVzQixjQUFjLFNBQWRBLFdBQWMsQ0FBU3ZzQixLQUFULEVBQWU7QUFDL0IsT0FBSStyQixVQUFVL3JCLE1BQU13c0IsY0FBcEI7QUFBQSxPQUNJL3RDLFFBQVFzdEMsUUFBUSxDQUFSLENBRFo7QUFBQSxPQUVJVSxhQUFhO0FBQ1hDLGdCQUFZLFdBREQ7QUFFWEMsZUFBVyxXQUZBO0FBR1hDLGNBQVU7QUFIQyxJQUZqQjtBQUFBLE9BT0lyc0MsT0FBT2tzQyxXQUFXenNCLE1BQU16ZixJQUFqQixDQVBYO0FBQUEsT0FRSXNzQyxjQVJKOztBQVdBLE9BQUcsZ0JBQWdCanhDLE1BQWhCLElBQTBCLE9BQU9BLE9BQU9reEMsVUFBZCxLQUE2QixVQUExRCxFQUFzRTtBQUNwRUQscUJBQWlCLElBQUlqeEMsT0FBT2t4QyxVQUFYLENBQXNCdnNDLElBQXRCLEVBQTRCO0FBQzNDLGdCQUFXLElBRGdDO0FBRTNDLG1CQUFjLElBRjZCO0FBRzNDLGdCQUFXOUIsTUFBTXN1QyxPQUgwQjtBQUkzQyxnQkFBV3R1QyxNQUFNdXVDLE9BSjBCO0FBSzNDLGdCQUFXdnVDLE1BQU11a0IsT0FMMEI7QUFNM0MsZ0JBQVd2a0IsTUFBTTJrQjtBQU4wQixLQUE1QixDQUFqQjtBQVFELElBVEQsTUFTTztBQUNMeXBCLHFCQUFpQnB4QyxTQUFTd3hDLFdBQVQsQ0FBcUIsWUFBckIsQ0FBakI7QUFDQUosbUJBQWVLLGNBQWYsQ0FBOEIzc0MsSUFBOUIsRUFBb0MsSUFBcEMsRUFBMEMsSUFBMUMsRUFBZ0QzRSxNQUFoRCxFQUF3RCxDQUF4RCxFQUEyRDZDLE1BQU1zdUMsT0FBakUsRUFBMEV0dUMsTUFBTXV1QyxPQUFoRixFQUF5RnZ1QyxNQUFNdWtCLE9BQS9GLEVBQXdHdmtCLE1BQU0ya0IsT0FBOUcsRUFBdUgsS0FBdkgsRUFBOEgsS0FBOUgsRUFBcUksS0FBckksRUFBNEksS0FBNUksRUFBbUosQ0FBbkosQ0FBb0osUUFBcEosRUFBOEosSUFBOUo7QUFDRDtBQUNEM2tCLFNBQU1lLE1BQU4sQ0FBYTJ0QyxhQUFiLENBQTJCTixjQUEzQjtBQUNELEdBMUJEO0FBMkJELEVBcENEO0FBcUNELENBdENBLENBc0NDcHdDLE1BdENELENBQUQ7O0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9IQTs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWIsTUFBTStNLG1CQUFvQixZQUFZO0FBQ3BDLFFBQUlDLFdBQVcsQ0FBQyxRQUFELEVBQVcsS0FBWCxFQUFrQixHQUFsQixFQUF1QixJQUF2QixFQUE2QixFQUE3QixDQUFmO0FBQ0EsU0FBSyxJQUFJL3VDLElBQUUsQ0FBWCxFQUFjQSxJQUFJK3VDLFNBQVM3dkMsTUFBM0IsRUFBbUNjLEdBQW5DLEVBQXdDO0FBQ3RDLFVBQU8rdUMsU0FBUy91QyxDQUFULENBQUgseUJBQW9DMUMsTUFBeEMsRUFBZ0Q7QUFDOUMsZUFBT0EsT0FBVXl4QyxTQUFTL3VDLENBQVQsQ0FBVixzQkFBUDtBQUNEO0FBQ0Y7QUFDRCxXQUFPLEtBQVA7QUFDRCxHQVJ5QixFQUExQjs7QUFVQSxNQUFNZ3ZDLFdBQVcsU0FBWEEsUUFBVyxDQUFDL3dCLEVBQUQsRUFBS2hjLElBQUwsRUFBYztBQUM3QmdjLE9BQUc3QixJQUFILENBQVFuYSxJQUFSLEVBQWM4QyxLQUFkLENBQW9CLEdBQXBCLEVBQXlCdStCLE9BQXpCLENBQWlDLGNBQU07QUFDckN2QixjQUFNdjRCLEVBQU4sRUFBYXZILFNBQVMsT0FBVCxHQUFtQixTQUFuQixHQUErQixnQkFBNUMsRUFBaUVBLElBQWpFLGtCQUFvRixDQUFDZ2MsRUFBRCxDQUFwRjtBQUNELEtBRkQ7QUFHRCxHQUpEO0FBS0E7QUFDQThqQixJQUFFNWtDLFFBQUYsRUFBWW1rQixFQUFaLENBQWUsa0JBQWYsRUFBbUMsYUFBbkMsRUFBa0QsWUFBVztBQUMzRDB0QixhQUFTak4sRUFBRSxJQUFGLENBQVQsRUFBa0IsTUFBbEI7QUFDRCxHQUZEOztBQUlBO0FBQ0E7QUFDQUEsSUFBRTVrQyxRQUFGLEVBQVlta0IsRUFBWixDQUFlLGtCQUFmLEVBQW1DLGNBQW5DLEVBQW1ELFlBQVc7QUFDNUQsUUFBSTlYLEtBQUt1NEIsRUFBRSxJQUFGLEVBQVEzbEIsSUFBUixDQUFhLE9BQWIsQ0FBVDtBQUNBLFFBQUk1UyxFQUFKLEVBQVE7QUFDTndsQyxlQUFTak4sRUFBRSxJQUFGLENBQVQsRUFBa0IsT0FBbEI7QUFDRCxLQUZELE1BR0s7QUFDSEEsUUFBRSxJQUFGLEVBQVF4YyxPQUFSLENBQWdCLGtCQUFoQjtBQUNEO0FBQ0YsR0FSRDs7QUFVQTtBQUNBd2MsSUFBRTVrQyxRQUFGLEVBQVlta0IsRUFBWixDQUFlLGtCQUFmLEVBQW1DLGVBQW5DLEVBQW9ELFlBQVc7QUFDN0QsUUFBSTlYLEtBQUt1NEIsRUFBRSxJQUFGLEVBQVEzbEIsSUFBUixDQUFhLFFBQWIsQ0FBVDtBQUNBLFFBQUk1UyxFQUFKLEVBQVE7QUFDTndsQyxlQUFTak4sRUFBRSxJQUFGLENBQVQsRUFBa0IsUUFBbEI7QUFDRCxLQUZELE1BRU87QUFDTEEsUUFBRSxJQUFGLEVBQVF4YyxPQUFSLENBQWdCLG1CQUFoQjtBQUNEO0FBQ0YsR0FQRDs7QUFTQTtBQUNBd2MsSUFBRTVrQyxRQUFGLEVBQVlta0IsRUFBWixDQUFlLGtCQUFmLEVBQW1DLGlCQUFuQyxFQUFzRCxVQUFTM1ksQ0FBVCxFQUFXO0FBQy9EQSxNQUFFK2EsZUFBRjtBQUNBLFFBQUlxTSxZQUFZZ1MsRUFBRSxJQUFGLEVBQVEzbEIsSUFBUixDQUFhLFVBQWIsQ0FBaEI7O0FBRUEsUUFBRzJULGNBQWMsRUFBakIsRUFBb0I7QUFDbEJtUyxpQkFBVzJJLE1BQVgsQ0FBa0JHLFVBQWxCLENBQTZCakosRUFBRSxJQUFGLENBQTdCLEVBQXNDaFMsU0FBdEMsRUFBaUQsWUFBVztBQUMxRGdTLFVBQUUsSUFBRixFQUFReGMsT0FBUixDQUFnQixXQUFoQjtBQUNELE9BRkQ7QUFHRCxLQUpELE1BSUs7QUFDSHdjLFFBQUUsSUFBRixFQUFRbFAsT0FBUixHQUFrQnROLE9BQWxCLENBQTBCLFdBQTFCO0FBQ0Q7QUFDRixHQVhEOztBQWFBd2MsSUFBRTVrQyxRQUFGLEVBQVlta0IsRUFBWixDQUFlLGtDQUFmLEVBQW1ELHFCQUFuRCxFQUEwRSxZQUFXO0FBQ25GLFFBQUk5WCxLQUFLdTRCLEVBQUUsSUFBRixFQUFRM2xCLElBQVIsQ0FBYSxjQUFiLENBQVQ7QUFDQTJsQixZQUFNdjRCLEVBQU4sRUFBWXNSLGNBQVosQ0FBMkIsbUJBQTNCLEVBQWdELENBQUNpbkIsRUFBRSxJQUFGLENBQUQsQ0FBaEQ7QUFDRCxHQUhEOztBQUtBOzs7OztBQUtBQSxJQUFFemtDLE1BQUYsRUFBVWdrQixFQUFWLENBQWEsTUFBYixFQUFxQixZQUFNO0FBQ3pCMnRCO0FBQ0QsR0FGRDs7QUFJQSxXQUFTQSxjQUFULEdBQTBCO0FBQ3hCQztBQUNBQztBQUNBQztBQUNBQztBQUNEOztBQUVEO0FBQ0EsV0FBU0EsZUFBVCxDQUF5QjFNLFVBQXpCLEVBQXFDO0FBQ25DLFFBQUkyTSxZQUFZdk4sRUFBRSxpQkFBRixDQUFoQjtBQUFBLFFBQ0l3TixZQUFZLENBQUMsVUFBRCxFQUFhLFNBQWIsRUFBd0IsUUFBeEIsQ0FEaEI7O0FBR0EsUUFBRzVNLFVBQUgsRUFBYztBQUNaLFVBQUcsT0FBT0EsVUFBUCxLQUFzQixRQUF6QixFQUFrQztBQUNoQzRNLGtCQUFVNXhDLElBQVYsQ0FBZWdsQyxVQUFmO0FBQ0QsT0FGRCxNQUVNLElBQUcsUUFBT0EsVUFBUCx5Q0FBT0EsVUFBUCxPQUFzQixRQUF0QixJQUFrQyxPQUFPQSxXQUFXLENBQVgsQ0FBUCxLQUF5QixRQUE5RCxFQUF1RTtBQUMzRTRNLGtCQUFVN3hDLE1BQVYsQ0FBaUJpbEMsVUFBakI7QUFDRCxPQUZLLE1BRUQ7QUFDSGEsZ0JBQVEzaEMsS0FBUixDQUFjLDhCQUFkO0FBQ0Q7QUFDRjtBQUNELFFBQUd5dEMsVUFBVXB3QyxNQUFiLEVBQW9CO0FBQ2xCLFVBQUlzd0MsWUFBWUQsVUFBVXp2QyxHQUFWLENBQWMsVUFBQ2UsSUFBRCxFQUFVO0FBQ3RDLCtCQUFxQkEsSUFBckI7QUFDRCxPQUZlLEVBRWJtSixJQUZhLENBRVIsR0FGUSxDQUFoQjs7QUFJQSszQixRQUFFemtDLE1BQUYsRUFBVXlkLEdBQVYsQ0FBY3kwQixTQUFkLEVBQXlCbHVCLEVBQXpCLENBQTRCa3VCLFNBQTVCLEVBQXVDLFVBQVM3bUMsQ0FBVCxFQUFZOG1DLFFBQVosRUFBcUI7QUFDMUQsWUFBSW5OLFNBQVMzNUIsRUFBRStaLFNBQUYsQ0FBWTNkLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsQ0FBdkIsQ0FBYjtBQUNBLFlBQUlrK0IsVUFBVWxCLGFBQVdPLE1BQVgsUUFBc0Izc0IsR0FBdEIsc0JBQTZDODVCLFFBQTdDLFFBQWQ7O0FBRUF4TSxnQkFBUXJqQyxJQUFSLENBQWEsWUFBVTtBQUNyQixjQUFJd2pDLFFBQVFyQixFQUFFLElBQUYsQ0FBWjs7QUFFQXFCLGdCQUFNdG9CLGNBQU4sQ0FBcUIsa0JBQXJCLEVBQXlDLENBQUNzb0IsS0FBRCxDQUF6QztBQUNELFNBSkQ7QUFLRCxPQVREO0FBVUQ7QUFDRjs7QUFFRCxXQUFTK0wsY0FBVCxDQUF3Qk8sUUFBeEIsRUFBaUM7QUFDL0IsUUFBSWplLGNBQUo7QUFBQSxRQUNJa2UsU0FBUzVOLEVBQUUsZUFBRixDQURiO0FBRUEsUUFBRzROLE9BQU96d0MsTUFBVixFQUFpQjtBQUNmNmlDLFFBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLG1CQUFkLEVBQ0N1RyxFQURELENBQ0ksbUJBREosRUFDeUIsVUFBUzNZLENBQVQsRUFBWTtBQUNuQyxZQUFJOG9CLEtBQUosRUFBVztBQUFFOEIsdUJBQWE5QixLQUFiO0FBQXNCOztBQUVuQ0EsZ0JBQVFyVyxXQUFXLFlBQVU7O0FBRTNCLGNBQUcsQ0FBQzB6QixnQkFBSixFQUFxQjtBQUFDO0FBQ3BCYSxtQkFBTy92QyxJQUFQLENBQVksWUFBVTtBQUNwQm1pQyxnQkFBRSxJQUFGLEVBQVFqbkIsY0FBUixDQUF1QixxQkFBdkI7QUFDRCxhQUZEO0FBR0Q7QUFDRDtBQUNBNjBCLGlCQUFPNWhDLElBQVAsQ0FBWSxhQUFaLEVBQTJCLFFBQTNCO0FBQ0QsU0FUTyxFQVNMMmhDLFlBQVksRUFUUCxDQUFSLENBSG1DLENBWWhCO0FBQ3BCLE9BZEQ7QUFlRDtBQUNGOztBQUVELFdBQVNOLGNBQVQsQ0FBd0JNLFFBQXhCLEVBQWlDO0FBQy9CLFFBQUlqZSxjQUFKO0FBQUEsUUFDSWtlLFNBQVM1TixFQUFFLGVBQUYsQ0FEYjtBQUVBLFFBQUc0TixPQUFPendDLE1BQVYsRUFBaUI7QUFDZjZpQyxRQUFFemtDLE1BQUYsRUFBVXlkLEdBQVYsQ0FBYyxtQkFBZCxFQUNDdUcsRUFERCxDQUNJLG1CQURKLEVBQ3lCLFVBQVMzWSxDQUFULEVBQVc7QUFDbEMsWUFBRzhvQixLQUFILEVBQVM7QUFBRThCLHVCQUFhOUIsS0FBYjtBQUFzQjs7QUFFakNBLGdCQUFRclcsV0FBVyxZQUFVOztBQUUzQixjQUFHLENBQUMwekIsZ0JBQUosRUFBcUI7QUFBQztBQUNwQmEsbUJBQU8vdkMsSUFBUCxDQUFZLFlBQVU7QUFDcEJtaUMsZ0JBQUUsSUFBRixFQUFRam5CLGNBQVIsQ0FBdUIscUJBQXZCO0FBQ0QsYUFGRDtBQUdEO0FBQ0Q7QUFDQTYwQixpQkFBTzVoQyxJQUFQLENBQVksYUFBWixFQUEyQixRQUEzQjtBQUNELFNBVE8sRUFTTDJoQyxZQUFZLEVBVFAsQ0FBUixDQUhrQyxDQVlmO0FBQ3BCLE9BZEQ7QUFlRDtBQUNGOztBQUVELFdBQVNSLGNBQVQsR0FBMEI7QUFDeEIsUUFBRyxDQUFDSixnQkFBSixFQUFxQjtBQUFFLGFBQU8sS0FBUDtBQUFlO0FBQ3RDLFFBQUlydUIsUUFBUXRqQixTQUFTK00sZ0JBQVQsQ0FBMEIsNkNBQTFCLENBQVo7O0FBRUE7QUFDQSxRQUFJMGxDLDRCQUE0QixTQUE1QkEseUJBQTRCLENBQVVDLG1CQUFWLEVBQStCO0FBQzNELFVBQUlDLFVBQVUvTixFQUFFOE4sb0JBQW9CLENBQXBCLEVBQXVCM3VDLE1BQXpCLENBQWQ7O0FBRUg7QUFDRyxjQUFRMnVDLG9CQUFvQixDQUFwQixFQUF1QjV0QyxJQUEvQjs7QUFFRSxhQUFLLFlBQUw7QUFDRSxjQUFJNnRDLFFBQVEvaEMsSUFBUixDQUFhLGFBQWIsTUFBZ0MsUUFBaEMsSUFBNEM4aEMsb0JBQW9CLENBQXBCLEVBQXVCRSxhQUF2QixLQUF5QyxhQUF6RixFQUF3RztBQUM3R0Qsb0JBQVFoMUIsY0FBUixDQUF1QixxQkFBdkIsRUFBOEMsQ0FBQ2cxQixPQUFELEVBQVV4eUMsT0FBT3NqQyxXQUFqQixDQUE5QztBQUNBO0FBQ0QsY0FBSWtQLFFBQVEvaEMsSUFBUixDQUFhLGFBQWIsTUFBZ0MsUUFBaEMsSUFBNEM4aEMsb0JBQW9CLENBQXBCLEVBQXVCRSxhQUF2QixLQUF5QyxhQUF6RixFQUF3RztBQUN2R0Qsb0JBQVFoMUIsY0FBUixDQUF1QixxQkFBdkIsRUFBOEMsQ0FBQ2cxQixPQUFELENBQTlDO0FBQ0M7QUFDRixjQUFJRCxvQkFBb0IsQ0FBcEIsRUFBdUJFLGFBQXZCLEtBQXlDLE9BQTdDLEVBQXNEO0FBQ3JERCxvQkFBUXA1QixPQUFSLENBQWdCLGVBQWhCLEVBQWlDM0ksSUFBakMsQ0FBc0MsYUFBdEMsRUFBb0QsUUFBcEQ7QUFDQStoQyxvQkFBUXA1QixPQUFSLENBQWdCLGVBQWhCLEVBQWlDb0UsY0FBakMsQ0FBZ0QscUJBQWhELEVBQXVFLENBQUNnMUIsUUFBUXA1QixPQUFSLENBQWdCLGVBQWhCLENBQUQsQ0FBdkU7QUFDQTtBQUNEOztBQUVJLGFBQUssV0FBTDtBQUNKbzVCLGtCQUFRcDVCLE9BQVIsQ0FBZ0IsZUFBaEIsRUFBaUMzSSxJQUFqQyxDQUFzQyxhQUF0QyxFQUFvRCxRQUFwRDtBQUNBK2hDLGtCQUFRcDVCLE9BQVIsQ0FBZ0IsZUFBaEIsRUFBaUNvRSxjQUFqQyxDQUFnRCxxQkFBaEQsRUFBdUUsQ0FBQ2cxQixRQUFRcDVCLE9BQVIsQ0FBZ0IsZUFBaEIsQ0FBRCxDQUF2RTtBQUNNOztBQUVGO0FBQ0UsaUJBQU8sS0FBUDtBQUNGO0FBdEJGO0FBd0JELEtBNUJIOztBQThCRSxRQUFJK0osTUFBTXZoQixNQUFWLEVBQWtCO0FBQ2hCO0FBQ0EsV0FBSyxJQUFJYyxJQUFJLENBQWIsRUFBZ0JBLEtBQUt5Z0IsTUFBTXZoQixNQUFOLEdBQWUsQ0FBcEMsRUFBdUNjLEdBQXZDLEVBQTRDO0FBQzFDLFlBQUlnd0Msa0JBQWtCLElBQUlsQixnQkFBSixDQUFxQmMseUJBQXJCLENBQXRCO0FBQ0FJLHdCQUFnQkMsT0FBaEIsQ0FBd0J4dkIsTUFBTXpnQixDQUFOLENBQXhCLEVBQWtDLEVBQUVpSCxZQUFZLElBQWQsRUFBb0JpcEMsV0FBVyxJQUEvQixFQUFxQ0MsZUFBZSxLQUFwRCxFQUEyREMsU0FBUyxJQUFwRSxFQUEwRUMsaUJBQWlCLENBQUMsYUFBRCxFQUFnQixPQUFoQixDQUEzRixFQUFsQztBQUNEO0FBQ0Y7QUFDRjs7QUFFSDs7QUFFQTtBQUNBO0FBQ0FuTyxhQUFXb08sUUFBWCxHQUFzQnJCLGNBQXRCO0FBQ0E7QUFDQTtBQUVDLENBL01BLENBK01DOXdDLE1BL01ELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7QUFGYSxNQU9Qd08sS0FQTztBQVFYOzs7Ozs7O0FBT0EsbUJBQVlwSyxPQUFaLEVBQW1DO0FBQUEsVUFBZHZsQyxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ2pDLFdBQUtraUMsUUFBTCxHQUFnQnFELE9BQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWdCbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYTR2QyxNQUFNQyxRQUFuQixFQUE2QixLQUFLMU4sUUFBTCxDQUFjMW1CLElBQWQsRUFBN0IsRUFBbUR4YixPQUFuRCxDQUFoQjs7QUFFQSxXQUFLdWlDLEtBQUw7O0FBRUFqQixpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxPQUFoQztBQUNEOztBQUVEOzs7Ozs7QUF4Qlc7QUFBQTtBQUFBLDhCQTRCSDtBQUNOLGFBQUsrTixPQUFMLEdBQWUsS0FBSzNOLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLHlCQUFuQixDQUFmOztBQUVBLGFBQUtta0MsT0FBTDtBQUNEOztBQUVEOzs7OztBQWxDVztBQUFBO0FBQUEsZ0NBc0NEO0FBQUE7O0FBQ1IsYUFBSzVOLFFBQUwsQ0FBYy9uQixHQUFkLENBQWtCLFFBQWxCLEVBQ0d1RyxFQURILENBQ00sZ0JBRE4sRUFDd0IsWUFBTTtBQUMxQixpQkFBS3F2QixTQUFMO0FBQ0QsU0FISCxFQUlHcnZCLEVBSkgsQ0FJTSxpQkFKTixFQUl5QixZQUFNO0FBQzNCLGlCQUFPLE9BQUtzdkIsWUFBTCxFQUFQO0FBQ0QsU0FOSDs7QUFRQSxZQUFJLEtBQUtod0MsT0FBTCxDQUFhaXdDLFVBQWIsS0FBNEIsYUFBaEMsRUFBK0M7QUFDN0MsZUFBS0osT0FBTCxDQUNHMTFCLEdBREgsQ0FDTyxpQkFEUCxFQUVHdUcsRUFGSCxDQUVNLGlCQUZOLEVBRXlCLFVBQUMzWSxDQUFELEVBQU87QUFDNUIsbUJBQUttb0MsYUFBTCxDQUFtQi9PLEVBQUVwNUIsRUFBRXpILE1BQUosQ0FBbkI7QUFDRCxXQUpIO0FBS0Q7O0FBRUQsWUFBSSxLQUFLTixPQUFMLENBQWFtd0MsWUFBakIsRUFBK0I7QUFDN0IsZUFBS04sT0FBTCxDQUNHMTFCLEdBREgsQ0FDTyxnQkFEUCxFQUVHdUcsRUFGSCxDQUVNLGdCQUZOLEVBRXdCLFVBQUMzWSxDQUFELEVBQU87QUFDM0IsbUJBQUttb0MsYUFBTCxDQUFtQi9PLEVBQUVwNUIsRUFBRXpILE1BQUosQ0FBbkI7QUFDRCxXQUpIO0FBS0Q7O0FBRUQsWUFBSSxLQUFLTixPQUFMLENBQWFvd0MsY0FBakIsRUFBaUM7QUFDL0IsZUFBS1AsT0FBTCxDQUNHMTFCLEdBREgsQ0FDTyxlQURQLEVBRUd1RyxFQUZILENBRU0sZUFGTixFQUV1QixVQUFDM1ksQ0FBRCxFQUFPO0FBQzFCLG1CQUFLbW9DLGFBQUwsQ0FBbUIvTyxFQUFFcDVCLEVBQUV6SCxNQUFKLENBQW5CO0FBQ0QsV0FKSDtBQUtEO0FBQ0Y7O0FBRUQ7Ozs7O0FBeEVXO0FBQUE7QUFBQSxnQ0E0RUQ7QUFDUixhQUFLaWlDLEtBQUw7QUFDRDs7QUFFRDs7Ozs7O0FBaEZXO0FBQUE7QUFBQSxvQ0FxRkdVLEdBckZILEVBcUZRO0FBQ2pCLFlBQUksQ0FBQ0EsSUFBSTkxQixJQUFKLENBQVMsVUFBVCxDQUFMLEVBQTJCLE9BQU8sSUFBUDs7QUFFM0IsWUFBSWtqQyxTQUFTLElBQWI7O0FBRUEsZ0JBQVFwTixJQUFJLENBQUosRUFBTzVoQyxJQUFmO0FBQ0UsZUFBSyxVQUFMO0FBQ0VndkMscUJBQVNwTixJQUFJLENBQUosRUFBTzV5QixPQUFoQjtBQUNBOztBQUVGLGVBQUssUUFBTDtBQUNBLGVBQUssWUFBTDtBQUNBLGVBQUssaUJBQUw7QUFDRSxnQkFBSTZnQixNQUFNK1IsSUFBSXQzQixJQUFKLENBQVMsaUJBQVQsQ0FBVjtBQUNBLGdCQUFJLENBQUN1bEIsSUFBSTV5QixNQUFMLElBQWUsQ0FBQzR5QixJQUFJOWpCLEdBQUosRUFBcEIsRUFBK0JpakMsU0FBUyxLQUFUO0FBQy9COztBQUVGO0FBQ0UsZ0JBQUcsQ0FBQ3BOLElBQUk3MUIsR0FBSixFQUFELElBQWMsQ0FBQzYxQixJQUFJNzFCLEdBQUosR0FBVTlPLE1BQTVCLEVBQW9DK3hDLFNBQVMsS0FBVDtBQWJ4Qzs7QUFnQkEsZUFBT0EsTUFBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7Ozs7O0FBN0dXO0FBQUE7QUFBQSxvQ0F5SEdwTixHQXpISCxFQXlIUTtBQUNqQixZQUFJcjZCLEtBQUtxNkIsSUFBSSxDQUFKLEVBQU9yNkIsRUFBaEI7QUFDQSxZQUFJMG5DLFNBQVNyTixJQUFJMXVCLFFBQUosQ0FBYSxLQUFLdlUsT0FBTCxDQUFhdXdDLGlCQUExQixDQUFiOztBQUVBLFlBQUksQ0FBQ0QsT0FBT2h5QyxNQUFaLEVBQW9CO0FBQ2xCZ3lDLG1CQUFTck4sSUFBSWg0QixNQUFKLEdBQWFVLElBQWIsQ0FBa0IsS0FBSzNMLE9BQUwsQ0FBYXV3QyxpQkFBL0IsQ0FBVDtBQUNEOztBQUVERCxpQkFBU0EsT0FBT3A2QixHQUFQLENBQVcsS0FBS2dzQixRQUFMLENBQWN2MkIsSUFBZCw0QkFBNEMvQyxFQUE1QyxRQUFYLENBQVQ7O0FBRUEsZUFBTzBuQyxNQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OztBQXRJVztBQUFBO0FBQUEsZ0NBOElEck4sR0E5SUMsRUE4SUk7QUFDYixZQUFJcjZCLEtBQUtxNkIsSUFBSSxDQUFKLEVBQU9yNkIsRUFBaEI7QUFDQSxZQUFJNG5DLFNBQVMsS0FBS3RPLFFBQUwsQ0FBY3YyQixJQUFkLGlCQUFpQy9DLEVBQWpDLFFBQWI7O0FBRUEsWUFBSSxDQUFDNG5DLE9BQU9seUMsTUFBWixFQUFvQjtBQUNsQixpQkFBTzJrQyxJQUFJbnRCLE9BQUosQ0FBWSxPQUFaLENBQVA7QUFDRDs7QUFFRCxlQUFPMDZCLE1BQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7O0FBekpXO0FBQUE7QUFBQSxzQ0FpS0tDLElBaktMLEVBaUtXO0FBQUE7O0FBQ3BCLFlBQUlDLFNBQVNELEtBQUt2eEMsR0FBTCxDQUFTLFVBQUNFLENBQUQsRUFBSWllLEVBQUosRUFBVztBQUMvQixjQUFJelUsS0FBS3lVLEdBQUd6VSxFQUFaO0FBQ0EsY0FBSTRuQyxTQUFTLE9BQUt0TyxRQUFMLENBQWN2MkIsSUFBZCxpQkFBaUMvQyxFQUFqQyxRQUFiOztBQUVBLGNBQUksQ0FBQzRuQyxPQUFPbHlDLE1BQVosRUFBb0I7QUFDbEJreUMscUJBQVNyUCxFQUFFOWpCLEVBQUYsRUFBTXZILE9BQU4sQ0FBYyxPQUFkLENBQVQ7QUFDRDtBQUNELGlCQUFPMDZCLE9BQU8sQ0FBUCxDQUFQO0FBQ0QsU0FSWSxDQUFiOztBQVVBLGVBQU9yUCxFQUFFdVAsTUFBRixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7O0FBL0tXO0FBQUE7QUFBQSxzQ0FtTEt6TixHQW5MTCxFQW1MVTtBQUNuQixZQUFJdU4sU0FBUyxLQUFLRyxTQUFMLENBQWUxTixHQUFmLENBQWI7QUFDQSxZQUFJMk4sYUFBYSxLQUFLQyxhQUFMLENBQW1CNU4sR0FBbkIsQ0FBakI7O0FBRUEsWUFBSXVOLE9BQU9seUMsTUFBWCxFQUFtQjtBQUNqQmt5QyxpQkFBT3hjLFFBQVAsQ0FBZ0IsS0FBS2gwQixPQUFMLENBQWE4d0MsZUFBN0I7QUFDRDs7QUFFRCxZQUFJRixXQUFXdHlDLE1BQWYsRUFBdUI7QUFDckJzeUMscUJBQVc1YyxRQUFYLENBQW9CLEtBQUtoMEIsT0FBTCxDQUFhK3dDLGNBQWpDO0FBQ0Q7O0FBRUQ5TixZQUFJalAsUUFBSixDQUFhLEtBQUtoMEIsT0FBTCxDQUFhZ3hDLGVBQTFCLEVBQTJDN2pDLElBQTNDLENBQWdELGNBQWhELEVBQWdFLEVBQWhFO0FBQ0Q7O0FBRUQ7Ozs7OztBQWxNVztBQUFBO0FBQUEsOENBd01hOGpDLFNBeE1iLEVBd013QjtBQUNqQyxZQUFJUixPQUFPLEtBQUt2TyxRQUFMLENBQWN2MkIsSUFBZCxtQkFBbUNzbEMsU0FBbkMsUUFBWDtBQUNBLFlBQUlDLFVBQVUsS0FBS0MsZUFBTCxDQUFxQlYsSUFBckIsQ0FBZDtBQUNBLFlBQUlXLGNBQWMsS0FBS1AsYUFBTCxDQUFtQkosSUFBbkIsQ0FBbEI7O0FBRUEsWUFBSVMsUUFBUTV5QyxNQUFaLEVBQW9CO0FBQ2xCNHlDLGtCQUFRN2MsV0FBUixDQUFvQixLQUFLcjBCLE9BQUwsQ0FBYTh3QyxlQUFqQztBQUNEOztBQUVELFlBQUlNLFlBQVk5eUMsTUFBaEIsRUFBd0I7QUFDdEI4eUMsc0JBQVkvYyxXQUFaLENBQXdCLEtBQUtyMEIsT0FBTCxDQUFhK3dDLGNBQXJDO0FBQ0Q7O0FBRUROLGFBQUtwYyxXQUFMLENBQWlCLEtBQUtyMEIsT0FBTCxDQUFhZ3hDLGVBQTlCLEVBQStDL2QsVUFBL0MsQ0FBMEQsY0FBMUQ7QUFFRDs7QUFFRDs7Ozs7QUF6Tlc7QUFBQTtBQUFBLHlDQTZOUWdRLEdBN05SLEVBNk5hO0FBQ3RCO0FBQ0EsWUFBR0EsSUFBSSxDQUFKLEVBQU81aEMsSUFBUCxJQUFlLE9BQWxCLEVBQTJCO0FBQ3pCLGlCQUFPLEtBQUtnd0MsdUJBQUwsQ0FBNkJwTyxJQUFJOTFCLElBQUosQ0FBUyxNQUFULENBQTdCLENBQVA7QUFDRDs7QUFFRCxZQUFJcWpDLFNBQVMsS0FBS0csU0FBTCxDQUFlMU4sR0FBZixDQUFiO0FBQ0EsWUFBSTJOLGFBQWEsS0FBS0MsYUFBTCxDQUFtQjVOLEdBQW5CLENBQWpCOztBQUVBLFlBQUl1TixPQUFPbHlDLE1BQVgsRUFBbUI7QUFDakJreUMsaUJBQU9uYyxXQUFQLENBQW1CLEtBQUtyMEIsT0FBTCxDQUFhOHdDLGVBQWhDO0FBQ0Q7O0FBRUQsWUFBSUYsV0FBV3R5QyxNQUFmLEVBQXVCO0FBQ3JCc3lDLHFCQUFXdmMsV0FBWCxDQUF1QixLQUFLcjBCLE9BQUwsQ0FBYSt3QyxjQUFwQztBQUNEOztBQUVEOU4sWUFBSTVPLFdBQUosQ0FBZ0IsS0FBS3IwQixPQUFMLENBQWFneEMsZUFBN0IsRUFBOEMvZCxVQUE5QyxDQUF5RCxjQUF6RDtBQUNEOztBQUVEOzs7Ozs7Ozs7QUFqUFc7QUFBQTtBQUFBLG9DQXlQR2dRLEdBelBILEVBeVBRO0FBQ2pCLFlBQUlxTyxlQUFlLEtBQUtDLGFBQUwsQ0FBbUJ0TyxHQUFuQixDQUFuQjtBQUFBLFlBQ0l1TyxZQUFZLEtBRGhCO0FBQUEsWUFFSUMsa0JBQWtCLElBRnRCO0FBQUEsWUFHSUMsWUFBWXpPLElBQUk5MUIsSUFBSixDQUFTLGdCQUFULENBSGhCO0FBQUEsWUFJSXdrQyxVQUFVLElBSmQ7O0FBTUE7QUFDQSxZQUFJMU8sSUFBSTN1QixFQUFKLENBQU8scUJBQVAsS0FBaUMydUIsSUFBSTN1QixFQUFKLENBQU8saUJBQVAsQ0FBakMsSUFBOEQydUIsSUFBSTN1QixFQUFKLENBQU8sWUFBUCxDQUFsRSxFQUF3RjtBQUN0RixpQkFBTyxJQUFQO0FBQ0Q7O0FBRUQsZ0JBQVEydUIsSUFBSSxDQUFKLEVBQU81aEMsSUFBZjtBQUNFLGVBQUssT0FBTDtBQUNFbXdDLHdCQUFZLEtBQUtJLGFBQUwsQ0FBbUIzTyxJQUFJOTFCLElBQUosQ0FBUyxNQUFULENBQW5CLENBQVo7QUFDQTs7QUFFRixlQUFLLFVBQUw7QUFDRXFrQyx3QkFBWUYsWUFBWjtBQUNBOztBQUVGLGVBQUssUUFBTDtBQUNBLGVBQUssWUFBTDtBQUNBLGVBQUssaUJBQUw7QUFDRUUsd0JBQVlGLFlBQVo7QUFDQTs7QUFFRjtBQUNFRSx3QkFBWSxLQUFLSyxZQUFMLENBQWtCNU8sR0FBbEIsQ0FBWjtBQWhCSjs7QUFtQkEsWUFBSXlPLFNBQUosRUFBZTtBQUNiRCw0QkFBa0IsS0FBS0ssZUFBTCxDQUFxQjdPLEdBQXJCLEVBQTBCeU8sU0FBMUIsRUFBcUN6TyxJQUFJOTFCLElBQUosQ0FBUyxVQUFULENBQXJDLENBQWxCO0FBQ0Q7O0FBRUQsWUFBSTgxQixJQUFJOTFCLElBQUosQ0FBUyxjQUFULENBQUosRUFBOEI7QUFDNUJ3a0Msb0JBQVUsS0FBSzN4QyxPQUFMLENBQWEreEMsVUFBYixDQUF3QkosT0FBeEIsQ0FBZ0MxTyxHQUFoQyxDQUFWO0FBQ0Q7O0FBR0QsWUFBSStPLFdBQVcsQ0FBQ1YsWUFBRCxFQUFlRSxTQUFmLEVBQTBCQyxlQUExQixFQUEyQ0UsT0FBM0MsRUFBb0QzMEMsT0FBcEQsQ0FBNEQsS0FBNUQsTUFBdUUsQ0FBQyxDQUF2RjtBQUNBLFlBQUlpMUMsVUFBVSxDQUFDRCxXQUFXLE9BQVgsR0FBcUIsU0FBdEIsSUFBbUMsV0FBakQ7O0FBRUEsWUFBSUEsUUFBSixFQUFjO0FBQ1o7QUFDQSxjQUFNRSxvQkFBb0IsS0FBS2hRLFFBQUwsQ0FBY3YyQixJQUFkLHFCQUFxQ3MzQixJQUFJOTFCLElBQUosQ0FBUyxJQUFULENBQXJDLFFBQTFCO0FBQ0EsY0FBSStrQyxrQkFBa0I1ekMsTUFBdEIsRUFBOEI7QUFDNUIsZ0JBQUlra0MsUUFBUSxJQUFaO0FBQ0EwUCw4QkFBa0JsekMsSUFBbEIsQ0FBdUIsWUFBVztBQUNoQyxrQkFBSW1pQyxFQUFFLElBQUYsRUFBUS96QixHQUFSLEVBQUosRUFBbUI7QUFDakJvMUIsc0JBQU0wTixhQUFOLENBQW9CL08sRUFBRSxJQUFGLENBQXBCO0FBQ0Q7QUFDRixhQUpEO0FBS0Q7QUFDRjs7QUFFRCxhQUFLNlEsV0FBVyxvQkFBWCxHQUFrQyxpQkFBdkMsRUFBMEQvTyxHQUExRDs7QUFFQTs7Ozs7O0FBTUFBLFlBQUl0ZSxPQUFKLENBQVlzdEIsT0FBWixFQUFxQixDQUFDaFAsR0FBRCxDQUFyQjs7QUFFQSxlQUFPK08sUUFBUDtBQUNEOztBQUVEOzs7Ozs7O0FBOVRXO0FBQUE7QUFBQSxxQ0FvVUk7QUFDYixZQUFJRyxNQUFNLEVBQVY7QUFDQSxZQUFJM1AsUUFBUSxJQUFaOztBQUVBLGFBQUtxTixPQUFMLENBQWE3d0MsSUFBYixDQUFrQixZQUFXO0FBQzNCbXpDLGNBQUlwMUMsSUFBSixDQUFTeWxDLE1BQU0wTixhQUFOLENBQW9CL08sRUFBRSxJQUFGLENBQXBCLENBQVQ7QUFDRCxTQUZEOztBQUlBLFlBQUlpUixVQUFVRCxJQUFJbjFDLE9BQUosQ0FBWSxLQUFaLE1BQXVCLENBQUMsQ0FBdEM7O0FBRUEsYUFBS2tsQyxRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixvQkFBbkIsRUFBeUMyUixHQUF6QyxDQUE2QyxTQUE3QyxFQUF5RDgwQixVQUFVLE1BQVYsR0FBbUIsT0FBNUU7O0FBRUE7Ozs7OztBQU1BLGFBQUtsUSxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLENBQUN5dEIsVUFBVSxXQUFWLEdBQXdCLGFBQXpCLElBQTBDLFdBQWhFLEVBQTZFLENBQUMsS0FBS2xRLFFBQU4sQ0FBN0U7O0FBRUEsZUFBT2tRLE9BQVA7QUFDRDs7QUFFRDs7Ozs7OztBQTNWVztBQUFBO0FBQUEsbUNBaVdFblAsR0FqV0YsRUFpV081MEIsT0FqV1AsRUFpV2dCO0FBQ3pCO0FBQ0FBLGtCQUFXQSxXQUFXNDBCLElBQUk5MUIsSUFBSixDQUFTLFNBQVQsQ0FBWCxJQUFrQzgxQixJQUFJOTFCLElBQUosQ0FBUyxNQUFULENBQTdDO0FBQ0EsWUFBSWtsQyxZQUFZcFAsSUFBSTcxQixHQUFKLEVBQWhCO0FBQ0EsWUFBSWtsQyxRQUFRLEtBQVo7O0FBRUEsWUFBSUQsVUFBVS96QyxNQUFkLEVBQXNCO0FBQ3BCO0FBQ0EsY0FBSSxLQUFLMEIsT0FBTCxDQUFhdXlDLFFBQWIsQ0FBc0JuMUMsY0FBdEIsQ0FBcUNpUixPQUFyQyxDQUFKLEVBQW1EO0FBQ2pEaWtDLG9CQUFRLEtBQUt0eUMsT0FBTCxDQUFhdXlDLFFBQWIsQ0FBc0Jsa0MsT0FBdEIsRUFBK0JyRixJQUEvQixDQUFvQ3FwQyxTQUFwQyxDQUFSO0FBQ0Q7QUFDRDtBQUhBLGVBSUssSUFBSWhrQyxZQUFZNDBCLElBQUk5MUIsSUFBSixDQUFTLE1BQVQsQ0FBaEIsRUFBa0M7QUFDckNtbEMsc0JBQVEsSUFBSTlyQyxNQUFKLENBQVc2SCxPQUFYLEVBQW9CckYsSUFBcEIsQ0FBeUJxcEMsU0FBekIsQ0FBUjtBQUNELGFBRkksTUFHQTtBQUNIQyxzQkFBUSxJQUFSO0FBQ0Q7QUFDRjtBQUNEO0FBYkEsYUFjSyxJQUFJLENBQUNyUCxJQUFJeG5CLElBQUosQ0FBUyxVQUFULENBQUwsRUFBMkI7QUFDOUI2MkIsb0JBQVEsSUFBUjtBQUNEOztBQUVELGVBQU9BLEtBQVA7QUFDQTs7QUFFRjs7Ozs7O0FBNVhXO0FBQUE7QUFBQSxvQ0FpWUdyQixTQWpZSCxFQWlZYztBQUN2QjtBQUNBO0FBQ0EsWUFBSXVCLFNBQVMsS0FBS3RRLFFBQUwsQ0FBY3YyQixJQUFkLG1CQUFtQ3NsQyxTQUFuQyxRQUFiO0FBQ0EsWUFBSXFCLFFBQVEsS0FBWjtBQUFBLFlBQW1CRyxXQUFXLEtBQTlCOztBQUVBO0FBQ0FELGVBQU94ekMsSUFBUCxDQUFZLFVBQUNJLENBQUQsRUFBSTJJLENBQUosRUFBVTtBQUNwQixjQUFJbzVCLEVBQUVwNUIsQ0FBRixFQUFLb0YsSUFBTCxDQUFVLFVBQVYsQ0FBSixFQUEyQjtBQUN6QnNsQyx1QkFBVyxJQUFYO0FBQ0Q7QUFDRixTQUpEO0FBS0EsWUFBRyxDQUFDQSxRQUFKLEVBQWNILFFBQU0sSUFBTjs7QUFFZCxZQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWO0FBQ0FFLGlCQUFPeHpDLElBQVAsQ0FBWSxVQUFDSSxDQUFELEVBQUkySSxDQUFKLEVBQVU7QUFDcEIsZ0JBQUlvNUIsRUFBRXA1QixDQUFGLEVBQUswVCxJQUFMLENBQVUsU0FBVixDQUFKLEVBQTBCO0FBQ3hCNjJCLHNCQUFRLElBQVI7QUFDRDtBQUNGLFdBSkQ7QUFLRDs7QUFFRCxlQUFPQSxLQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7O0FBM1pXO0FBQUE7QUFBQSxzQ0FrYUtyUCxHQWxhTCxFQWthVThPLFVBbGFWLEVBa2FzQlUsUUFsYXRCLEVBa2FnQztBQUFBOztBQUN6Q0EsbUJBQVdBLFdBQVcsSUFBWCxHQUFrQixLQUE3Qjs7QUFFQSxZQUFJQyxRQUFRWCxXQUFXNXRDLEtBQVgsQ0FBaUIsR0FBakIsRUFBc0JqRixHQUF0QixDQUEwQixVQUFDMjlCLENBQUQsRUFBTztBQUMzQyxpQkFBTyxPQUFLNzhCLE9BQUwsQ0FBYSt4QyxVQUFiLENBQXdCbFYsQ0FBeEIsRUFBMkJvRyxHQUEzQixFQUFnQ3dQLFFBQWhDLEVBQTBDeFAsSUFBSWg0QixNQUFKLEVBQTFDLENBQVA7QUFDRCxTQUZXLENBQVo7QUFHQSxlQUFPeW5DLE1BQU0xMUMsT0FBTixDQUFjLEtBQWQsTUFBeUIsQ0FBQyxDQUFqQztBQUNEOztBQUVEOzs7OztBQTNhVztBQUFBO0FBQUEsa0NBK2FDO0FBQ1YsWUFBSTIxQyxRQUFRLEtBQUt6USxRQUFqQjtBQUFBLFlBQ0kzUyxPQUFPLEtBQUt2dkIsT0FEaEI7O0FBR0FtaEMsZ0JBQU01UixLQUFLdWhCLGVBQVgsRUFBOEI2QixLQUE5QixFQUFxQzU5QixHQUFyQyxDQUF5QyxPQUF6QyxFQUFrRHNmLFdBQWxELENBQThEOUUsS0FBS3VoQixlQUFuRTtBQUNBM1AsZ0JBQU01UixLQUFLeWhCLGVBQVgsRUFBOEIyQixLQUE5QixFQUFxQzU5QixHQUFyQyxDQUF5QyxPQUF6QyxFQUFrRHNmLFdBQWxELENBQThEOUUsS0FBS3loQixlQUFuRTtBQUNBN1AsVUFBSzVSLEtBQUtnaEIsaUJBQVYsU0FBK0JoaEIsS0FBS3doQixjQUFwQyxFQUFzRDFjLFdBQXRELENBQWtFOUUsS0FBS3doQixjQUF2RTtBQUNBNEIsY0FBTWhuQyxJQUFOLENBQVcsb0JBQVgsRUFBaUMyUixHQUFqQyxDQUFxQyxTQUFyQyxFQUFnRCxNQUFoRDtBQUNBNmpCLFVBQUUsUUFBRixFQUFZd1IsS0FBWixFQUFtQjU5QixHQUFuQixDQUF1QiwyRUFBdkIsRUFBb0czSCxHQUFwRyxDQUF3RyxFQUF4RyxFQUE0RzZsQixVQUE1RyxDQUF1SCxjQUF2SDtBQUNBa08sVUFBRSxjQUFGLEVBQWtCd1IsS0FBbEIsRUFBeUI1OUIsR0FBekIsQ0FBNkIscUJBQTdCLEVBQW9EMEcsSUFBcEQsQ0FBeUQsU0FBekQsRUFBbUUsS0FBbkUsRUFBMEV3WCxVQUExRSxDQUFxRixjQUFyRjtBQUNBa08sVUFBRSxpQkFBRixFQUFxQndSLEtBQXJCLEVBQTRCNTlCLEdBQTVCLENBQWdDLHFCQUFoQyxFQUF1RDBHLElBQXZELENBQTRELFNBQTVELEVBQXNFLEtBQXRFLEVBQTZFd1gsVUFBN0UsQ0FBd0YsY0FBeEY7QUFDQTs7OztBQUlBMGYsY0FBTWh1QixPQUFOLENBQWMsb0JBQWQsRUFBb0MsQ0FBQ2d1QixLQUFELENBQXBDO0FBQ0Q7O0FBRUQ7Ozs7O0FBamNXO0FBQUE7QUFBQSxnQ0FxY0Q7QUFDUixZQUFJblEsUUFBUSxJQUFaO0FBQ0EsYUFBS04sUUFBTCxDQUNHL25CLEdBREgsQ0FDTyxRQURQLEVBRUd4TyxJQUZILENBRVEsb0JBRlIsRUFHSzJSLEdBSEwsQ0FHUyxTQUhULEVBR29CLE1BSHBCOztBQUtBLGFBQUt1eUIsT0FBTCxDQUNHMTFCLEdBREgsQ0FDTyxRQURQLEVBRUduYixJQUZILENBRVEsWUFBVztBQUNmd2pDLGdCQUFNb1Esa0JBQU4sQ0FBeUJ6UixFQUFFLElBQUYsQ0FBekI7QUFDRCxTQUpIOztBQU1BRyxtQkFBV2EsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQW5kVTs7QUFBQTtBQUFBOztBQXNkYjs7Ozs7QUFHQXdOLFFBQU1DLFFBQU4sR0FBaUI7QUFDZjs7Ozs7OztBQU9BSyxnQkFBWSxhQVJHOztBQVVmOzs7Ozs7QUFNQWEscUJBQWlCLGtCQWhCRjs7QUFrQmY7Ozs7OztBQU1BRSxxQkFBaUIsa0JBeEJGOztBQTBCZjs7Ozs7O0FBTUFULHVCQUFtQixhQWhDSjs7QUFrQ2Y7Ozs7OztBQU1BUSxvQkFBZ0IsWUF4Q0Q7O0FBMENmOzs7Ozs7QUFNQVosa0JBQWMsS0FoREM7O0FBa0RmOzs7Ozs7QUFNQUMsb0JBQWdCLEtBeEREOztBQTBEZm1DLGNBQVU7QUFDUk0sYUFBUSxhQURBO0FBRVJDLHFCQUFnQixnQkFGUjtBQUdSQyxlQUFVLFlBSEY7QUFJUkMsY0FBUywwQkFKRDs7QUFNUjtBQUNBQyxZQUFPLHVKQVBDO0FBUVJDLFdBQU0sZ0JBUkU7O0FBVVI7QUFDQUMsYUFBUSx1SUFYQTs7QUFhUnBhLFdBQU0sb3RDQWJFO0FBY1I7QUFDQXFhLGNBQVMsa0VBZkQ7O0FBaUJSQyxnQkFBVyxvSEFqQkg7QUFrQlI7QUFDQUMsWUFBTyxnSUFuQkM7QUFvQlI7QUFDQTdnQixZQUFPLDBDQXJCQztBQXNCUjhnQixlQUFVLG1DQXRCRjtBQXVCUjtBQUNBQyxzQkFBaUIsOERBeEJUO0FBeUJSO0FBQ0FDLHNCQUFpQiw4REExQlQ7O0FBNEJSO0FBQ0FDLGFBQVE7QUE3QkEsS0ExREs7O0FBMEZmOzs7Ozs7OztBQVFBM0IsZ0JBQVk7QUFDVkosZUFBUyxpQkFBVXQwQixFQUFWLEVBQWNvMUIsUUFBZCxFQUF3QnhuQyxNQUF4QixFQUFnQztBQUN2QyxlQUFPazJCLFFBQU05akIsR0FBR2xRLElBQUgsQ0FBUSxjQUFSLENBQU4sRUFBaUNDLEdBQWpDLE9BQTJDaVEsR0FBR2pRLEdBQUgsRUFBbEQ7QUFDRDtBQUhTO0FBbEdHLEdBQWpCOztBQXlHQTtBQUNBazBCLGFBQVdJLE1BQVgsQ0FBa0JpTyxLQUFsQixFQUF5QixPQUF6QjtBQUVDLENBcmtCQSxDQXFrQkNweUMsTUFya0JELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7OztBQUZhLE1BU1B3UyxTQVRPO0FBVVg7Ozs7Ozs7QUFPQSx1QkFBWXBPLE9BQVosRUFBcUJ2bEMsT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBS2tpQyxRQUFMLEdBQWdCcUQsT0FBaEI7QUFDQSxXQUFLdmxDLE9BQUwsR0FBZW1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWE0ekMsVUFBVS9ELFFBQXZCLEVBQWlDLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUFqQyxFQUF1RHhiLE9BQXZELENBQWY7O0FBRUEsV0FBS3VpQyxLQUFMOztBQUVBakIsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsV0FBaEM7QUFDQVIsaUJBQVd3RixRQUFYLENBQW9CNXJCLFFBQXBCLENBQTZCLFdBQTdCLEVBQTBDO0FBQ3hDLGlCQUFTLFFBRCtCO0FBRXhDLGlCQUFTLFFBRitCO0FBR3hDLHNCQUFjLE1BSDBCO0FBSXhDLG9CQUFZO0FBSjRCLE9BQTFDO0FBTUQ7O0FBRUQ7Ozs7OztBQWhDVztBQUFBO0FBQUEsOEJBb0NIO0FBQUE7O0FBQ04sYUFBS2duQixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixNQUFuQixFQUEyQixTQUEzQjtBQUNBLGFBQUt5bUMsS0FBTCxHQUFhLEtBQUsxUixRQUFMLENBQWMzc0IsUUFBZCxDQUF1Qix1QkFBdkIsQ0FBYjs7QUFFQSxhQUFLcStCLEtBQUwsQ0FBVzUwQyxJQUFYLENBQWdCLFVBQVN1USxHQUFULEVBQWM4TixFQUFkLEVBQWtCO0FBQ2hDLGNBQUk0bEIsTUFBTTlCLEVBQUU5akIsRUFBRixDQUFWO0FBQUEsY0FDSXcyQixXQUFXNVEsSUFBSTF0QixRQUFKLENBQWEsb0JBQWIsQ0FEZjtBQUFBLGNBRUkzTSxLQUFLaXJDLFNBQVMsQ0FBVCxFQUFZanJDLEVBQVosSUFBa0IwNEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixXQUExQixDQUYzQjtBQUFBLGNBR0k2UixTQUFTejJCLEdBQUd6VSxFQUFILElBQVlBLEVBQVosV0FIYjs7QUFLQXE2QixjQUFJdDNCLElBQUosQ0FBUyxTQUFULEVBQW9Cd0IsSUFBcEIsQ0FBeUI7QUFDdkIsNkJBQWlCdkUsRUFETTtBQUV2QixvQkFBUSxLQUZlO0FBR3ZCLGtCQUFNa3JDLE1BSGlCO0FBSXZCLDZCQUFpQixLQUpNO0FBS3ZCLDZCQUFpQjtBQUxNLFdBQXpCOztBQVFBRCxtQkFBUzFtQyxJQUFULENBQWMsRUFBQyxRQUFRLFVBQVQsRUFBcUIsbUJBQW1CMm1DLE1BQXhDLEVBQWdELGVBQWUsSUFBL0QsRUFBcUUsTUFBTWxyQyxFQUEzRSxFQUFkO0FBQ0QsU0FmRDtBQWdCQSxZQUFJbXJDLGNBQWMsS0FBSzdSLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLFlBQW5CLEVBQWlDNEosUUFBakMsQ0FBMEMsb0JBQTFDLENBQWxCO0FBQ0EsYUFBS3krQixhQUFMLEdBQXFCLElBQXJCO0FBQ0EsWUFBR0QsWUFBWXoxQyxNQUFmLEVBQXNCO0FBQ3BCLGVBQUsyMUMsSUFBTCxDQUFVRixXQUFWLEVBQXVCLEtBQUtDLGFBQTVCO0FBQ0EsZUFBS0EsYUFBTCxHQUFxQixLQUFyQjtBQUNEOztBQUVELGFBQUtFLGNBQUwsR0FBc0IsWUFBTTtBQUMxQixjQUFJNU4sU0FBUzVwQyxPQUFPcVQsUUFBUCxDQUFnQkQsSUFBN0I7QUFDQTtBQUNBLGNBQUd3MkIsT0FBT2hvQyxNQUFWLEVBQWtCO0FBQ2hCLGdCQUFJNjFDLFFBQVEsT0FBS2pTLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLGFBQVcyNkIsTUFBWCxHQUFrQixJQUFyQyxDQUFaO0FBQUEsZ0JBQ0E4TixVQUFValQsRUFBRW1GLE1BQUYsQ0FEVjs7QUFHQSxnQkFBSTZOLE1BQU03MUMsTUFBTixJQUFnQjgxQyxPQUFwQixFQUE2QjtBQUMzQixrQkFBSSxDQUFDRCxNQUFNbHBDLE1BQU4sQ0FBYSx1QkFBYixFQUFzQ3dwQixRQUF0QyxDQUErQyxXQUEvQyxDQUFMLEVBQWtFO0FBQ2hFLHVCQUFLd2YsSUFBTCxDQUFVRyxPQUFWLEVBQW1CLE9BQUtKLGFBQXhCO0FBQ0EsdUJBQUtBLGFBQUwsR0FBcUIsS0FBckI7QUFDRDs7QUFFRDtBQUNBLGtCQUFJLE9BQUtoMEMsT0FBTCxDQUFhcTBDLGNBQWpCLEVBQWlDO0FBQy9CLG9CQUFJN1IsY0FBSjtBQUNBckIsa0JBQUV6a0MsTUFBRixFQUFVOG5CLElBQVYsQ0FBZSxZQUFXO0FBQ3hCLHNCQUFJMmEsU0FBU3FELE1BQU1OLFFBQU4sQ0FBZS9DLE1BQWYsRUFBYjtBQUNBZ0Msb0JBQUUsWUFBRixFQUFnQjdQLE9BQWhCLENBQXdCLEVBQUVuTixXQUFXZ2IsT0FBTy96QixHQUFwQixFQUF4QixFQUFtRG8zQixNQUFNeGlDLE9BQU4sQ0FBY3MwQyxtQkFBakU7QUFDRCxpQkFIRDtBQUlEOztBQUVEOzs7O0FBSUEscUJBQUtwUyxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLHVCQUF0QixFQUErQyxDQUFDd3ZCLEtBQUQsRUFBUUMsT0FBUixDQUEvQztBQUNEO0FBQ0Y7QUFDRixTQTdCRDs7QUErQkE7QUFDQSxZQUFJLEtBQUtwMEMsT0FBTCxDQUFhdTBDLFFBQWpCLEVBQTJCO0FBQ3pCLGVBQUtMLGNBQUw7QUFDRDs7QUFFRCxhQUFLcEUsT0FBTDtBQUNEOztBQUVEOzs7OztBQXRHVztBQUFBO0FBQUEsZ0NBMEdEO0FBQ1IsWUFBSXROLFFBQVEsSUFBWjs7QUFFQSxhQUFLb1IsS0FBTCxDQUFXNTBDLElBQVgsQ0FBZ0IsWUFBVztBQUN6QixjQUFJZ2tDLFFBQVE3QixFQUFFLElBQUYsQ0FBWjtBQUNBLGNBQUlxVCxjQUFjeFIsTUFBTXp0QixRQUFOLENBQWUsb0JBQWYsQ0FBbEI7QUFDQSxjQUFJaS9CLFlBQVlsMkMsTUFBaEIsRUFBd0I7QUFDdEIwa0Msa0JBQU16dEIsUUFBTixDQUFlLEdBQWYsRUFBb0I0RSxHQUFwQixDQUF3Qix5Q0FBeEIsRUFDUXVHLEVBRFIsQ0FDVyxvQkFEWCxFQUNpQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQzNDQSxnQkFBRThhLGNBQUY7QUFDQTJmLG9CQUFNN1UsTUFBTixDQUFhNm1CLFdBQWI7QUFDRCxhQUpELEVBSUc5ekIsRUFKSCxDQUlNLHNCQUpOLEVBSThCLFVBQVMzWSxDQUFULEVBQVc7QUFDdkN1NUIseUJBQVd3RixRQUFYLENBQW9CTSxTQUFwQixDQUE4QnIvQixDQUE5QixFQUFpQyxXQUFqQyxFQUE4QztBQUM1QzRsQix3QkFBUSxrQkFBVztBQUNqQjZVLHdCQUFNN1UsTUFBTixDQUFhNm1CLFdBQWI7QUFDRCxpQkFIMkM7QUFJNUMvK0Isc0JBQU0sZ0JBQVc7QUFDZixzQkFBSWcvQixLQUFLelIsTUFBTXZ0QixJQUFOLEdBQWE5SixJQUFiLENBQWtCLEdBQWxCLEVBQXVCK1ksS0FBdkIsRUFBVDtBQUNBLHNCQUFJLENBQUM4ZCxNQUFNeGlDLE9BQU4sQ0FBYzAwQyxXQUFuQixFQUFnQztBQUM5QkQsdUJBQUc5dkIsT0FBSCxDQUFXLG9CQUFYO0FBQ0Q7QUFDRixpQkFUMkM7QUFVNUNnd0IsMEJBQVUsb0JBQVc7QUFDbkIsc0JBQUlGLEtBQUt6UixNQUFNdHRCLElBQU4sR0FBYS9KLElBQWIsQ0FBa0IsR0FBbEIsRUFBdUIrWSxLQUF2QixFQUFUO0FBQ0Esc0JBQUksQ0FBQzhkLE1BQU14aUMsT0FBTixDQUFjMDBDLFdBQW5CLEVBQWdDO0FBQzlCRCx1QkFBRzl2QixPQUFILENBQVcsb0JBQVg7QUFDRDtBQUNGLGlCQWYyQztBQWdCNUNnakIseUJBQVMsbUJBQVc7QUFDbEI1L0Isb0JBQUU4YSxjQUFGO0FBQ0E5YSxvQkFBRSthLGVBQUY7QUFDRDtBQW5CMkMsZUFBOUM7QUFxQkQsYUExQkQ7QUEyQkQ7QUFDRixTQWhDRDtBQWlDQSxZQUFHLEtBQUs5aUIsT0FBTCxDQUFhdTBDLFFBQWhCLEVBQTBCO0FBQ3hCcFQsWUFBRXprQyxNQUFGLEVBQVVna0IsRUFBVixDQUFhLFVBQWIsRUFBeUIsS0FBS3d6QixjQUE5QjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7OztBQW5KVztBQUFBO0FBQUEsNkJBd0pKaEYsT0F4SkksRUF3Sks7QUFDZCxZQUFHQSxRQUFRamtDLE1BQVIsR0FBaUJ3cEIsUUFBakIsQ0FBMEIsV0FBMUIsQ0FBSCxFQUEyQztBQUN6QyxlQUFLbWdCLEVBQUwsQ0FBUTFGLE9BQVI7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLK0UsSUFBTCxDQUFVL0UsT0FBVjtBQUNEO0FBQ0Q7QUFDQSxZQUFJLEtBQUtsdkMsT0FBTCxDQUFhdTBDLFFBQWpCLEVBQTJCO0FBQ3pCLGNBQUlqTyxTQUFTNEksUUFBUXg1QixJQUFSLENBQWEsR0FBYixFQUFrQnZJLElBQWxCLENBQXVCLE1BQXZCLENBQWI7O0FBRUEsY0FBSSxLQUFLbk4sT0FBTCxDQUFhNjBDLGFBQWpCLEVBQWdDO0FBQzlCQyxvQkFBUUMsU0FBUixDQUFrQixFQUFsQixFQUFzQixFQUF0QixFQUEwQnpPLE1BQTFCO0FBQ0QsV0FGRCxNQUVPO0FBQ0x3TyxvQkFBUUUsWUFBUixDQUFxQixFQUFyQixFQUF5QixFQUF6QixFQUE2QjFPLE1BQTdCO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7Ozs7OztBQTFLVztBQUFBO0FBQUEsMkJBaUxONEksT0FqTE0sRUFpTEcrRixTQWpMSCxFQWlMYztBQUFBOztBQUN2Qi9GLGdCQUNHL2hDLElBREgsQ0FDUSxhQURSLEVBQ3VCLEtBRHZCLEVBRUdsQyxNQUZILENBRVUsb0JBRlYsRUFHR2tMLE9BSEgsR0FJR2xMLE1BSkgsR0FJWStvQixRQUpaLENBSXFCLFdBSnJCOztBQU1BLFlBQUksQ0FBQyxLQUFLaDBCLE9BQUwsQ0FBYTAwQyxXQUFkLElBQTZCLENBQUNPLFNBQWxDLEVBQTZDO0FBQzNDLGNBQUlDLGlCQUFpQixLQUFLaFQsUUFBTCxDQUFjM3NCLFFBQWQsQ0FBdUIsWUFBdkIsRUFBcUNBLFFBQXJDLENBQThDLG9CQUE5QyxDQUFyQjtBQUNBLGNBQUkyL0IsZUFBZTUyQyxNQUFuQixFQUEyQjtBQUN6QixpQkFBS3MyQyxFQUFMLENBQVFNLGVBQWVuZ0MsR0FBZixDQUFtQm02QixPQUFuQixDQUFSO0FBQ0Q7QUFDRjs7QUFFREEsZ0JBQVFyZCxTQUFSLENBQWtCLEtBQUs3eEIsT0FBTCxDQUFhbTFDLFVBQS9CLEVBQTJDLFlBQU07QUFDL0M7Ozs7QUFJQSxpQkFBS2pULFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IsbUJBQXRCLEVBQTJDLENBQUN1cUIsT0FBRCxDQUEzQztBQUNELFNBTkQ7O0FBUUEvTixnQkFBTStOLFFBQVEvaEMsSUFBUixDQUFhLGlCQUFiLENBQU4sRUFBeUNBLElBQXpDLENBQThDO0FBQzVDLDJCQUFpQixJQUQyQjtBQUU1QywyQkFBaUI7QUFGMkIsU0FBOUM7QUFJRDs7QUFFRDs7Ozs7OztBQTdNVztBQUFBO0FBQUEseUJBbU5SK2hDLE9Bbk5RLEVBbU5DO0FBQ1YsWUFBSWtHLFNBQVNsRyxRQUFRamtDLE1BQVIsR0FBaUJzSixRQUFqQixFQUFiO0FBQUEsWUFDSWl1QixRQUFRLElBRFo7O0FBR0EsWUFBSSxDQUFDLEtBQUt4aUMsT0FBTCxDQUFhcTFDLGNBQWQsSUFBZ0MsQ0FBQ0QsT0FBTzNnQixRQUFQLENBQWdCLFdBQWhCLENBQWxDLElBQW1FLENBQUN5YSxRQUFRamtDLE1BQVIsR0FBaUJ3cEIsUUFBakIsQ0FBMEIsV0FBMUIsQ0FBdkUsRUFBK0c7QUFDN0c7QUFDRDs7QUFFRDtBQUNFeWEsZ0JBQVFwZCxPQUFSLENBQWdCMFEsTUFBTXhpQyxPQUFOLENBQWNtMUMsVUFBOUIsRUFBMEMsWUFBWTtBQUNwRDs7OztBQUlBM1MsZ0JBQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIsaUJBQXZCLEVBQTBDLENBQUN1cUIsT0FBRCxDQUExQztBQUNELFNBTkQ7QUFPRjs7QUFFQUEsZ0JBQVEvaEMsSUFBUixDQUFhLGFBQWIsRUFBNEIsSUFBNUIsRUFDUWxDLE1BRFIsR0FDaUJvcEIsV0FEakIsQ0FDNkIsV0FEN0I7O0FBR0E4TSxnQkFBTStOLFFBQVEvaEMsSUFBUixDQUFhLGlCQUFiLENBQU4sRUFBeUNBLElBQXpDLENBQThDO0FBQzdDLDJCQUFpQixLQUQ0QjtBQUU3QywyQkFBaUI7QUFGNEIsU0FBOUM7QUFJRDs7QUFFRDs7Ozs7O0FBOU9XO0FBQUE7QUFBQSxnQ0FtUEQ7QUFDUixhQUFLKzBCLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLG9CQUFuQixFQUF5Q2dSLElBQXpDLENBQThDLElBQTlDLEVBQW9EbVYsT0FBcEQsQ0FBNEQsQ0FBNUQsRUFBK0R4VSxHQUEvRCxDQUFtRSxTQUFuRSxFQUE4RSxFQUE5RTtBQUNBLGFBQUs0a0IsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsR0FBbkIsRUFBd0J3TyxHQUF4QixDQUE0QixlQUE1QjtBQUNBLFlBQUcsS0FBS25hLE9BQUwsQ0FBYXUwQyxRQUFoQixFQUEwQjtBQUN4QnBULFlBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLFVBQWQsRUFBMEIsS0FBSys1QixjQUEvQjtBQUNEOztBQUVENVMsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUEzUFU7O0FBQUE7QUFBQTs7QUE4UGJ3UixZQUFVL0QsUUFBVixHQUFxQjtBQUNuQjs7Ozs7O0FBTUF1RixnQkFBWSxHQVBPO0FBUW5COzs7Ozs7QUFNQVQsaUJBQWEsS0FkTTtBQWVuQjs7Ozs7O0FBTUFXLG9CQUFnQixLQXJCRztBQXNCbkI7Ozs7OztBQU1BZCxjQUFVLEtBNUJTOztBQThCbkI7Ozs7OztBQU1BRixvQkFBZ0IsS0FwQ0c7O0FBc0NuQjs7Ozs7O0FBTUFDLHlCQUFxQixHQTVDRjs7QUE4Q25COzs7Ozs7QUFNQU8sbUJBQWU7QUFwREksR0FBckI7O0FBdURBO0FBQ0F2VCxhQUFXSSxNQUFYLENBQWtCaVMsU0FBbEIsRUFBNkIsV0FBN0I7QUFFQyxDQXhUQSxDQXdUQ3AyQyxNQXhURCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7O0FBRmEsTUFVUG1VLGFBVk87QUFXWDs7Ozs7OztBQU9BLDJCQUFZL1AsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFlbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYXUxQyxjQUFjMUYsUUFBM0IsRUFBcUMsS0FBSzFOLFFBQUwsQ0FBYzFtQixJQUFkLEVBQXJDLEVBQTJEeGIsT0FBM0QsQ0FBZjs7QUFFQXNoQyxpQkFBV3VKLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCLEtBQUs1SSxRQUE3QixFQUF1QyxXQUF2Qzs7QUFFQSxXQUFLSyxLQUFMOztBQUVBakIsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsZUFBaEM7QUFDQVIsaUJBQVd3RixRQUFYLENBQW9CNXJCLFFBQXBCLENBQTZCLGVBQTdCLEVBQThDO0FBQzVDLGlCQUFTLFFBRG1DO0FBRTVDLGlCQUFTLFFBRm1DO0FBRzVDLHVCQUFlLE1BSDZCO0FBSTVDLG9CQUFZLElBSmdDO0FBSzVDLHNCQUFjLE1BTDhCO0FBTTVDLHNCQUFjLE9BTjhCO0FBTzVDLGtCQUFVO0FBUGtDLE9BQTlDO0FBU0Q7O0FBSUQ7Ozs7OztBQXhDVztBQUFBO0FBQUEsOEJBNENIO0FBQ04sYUFBS2duQixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixnQkFBbkIsRUFBcUNvSixHQUFyQyxDQUF5QyxZQUF6QyxFQUF1RCtjLE9BQXZELENBQStELENBQS9ELEVBRE0sQ0FDNEQ7QUFDbEUsYUFBS29RLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CO0FBQ2pCLGtCQUFRLE1BRFM7QUFFakIsa0NBQXdCLEtBQUtuTixPQUFMLENBQWF1MUM7QUFGcEIsU0FBbkI7O0FBS0EsYUFBS0MsVUFBTCxHQUFrQixLQUFLdFQsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsOEJBQW5CLENBQWxCO0FBQ0EsYUFBSzZwQyxVQUFMLENBQWdCeDJDLElBQWhCLENBQXFCLFlBQVU7QUFDN0IsY0FBSTgwQyxTQUFTLEtBQUtsckMsRUFBTCxJQUFXMDRCLFdBQVdXLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsZUFBMUIsQ0FBeEI7QUFBQSxjQUNJZSxRQUFRN0IsRUFBRSxJQUFGLENBRFo7QUFBQSxjQUVJa0ssT0FBT3JJLE1BQU16dEIsUUFBTixDQUFlLGdCQUFmLENBRlg7QUFBQSxjQUdJa2dDLFFBQVFwSyxLQUFLLENBQUwsRUFBUXppQyxFQUFSLElBQWMwNEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixVQUExQixDQUgxQjtBQUFBLGNBSUl5VCxXQUFXckssS0FBSzVXLFFBQUwsQ0FBYyxXQUFkLENBSmY7QUFLQXVPLGdCQUFNNzFCLElBQU4sQ0FBVztBQUNULDZCQUFpQnNvQyxLQURSO0FBRVQsNkJBQWlCQyxRQUZSO0FBR1Qsb0JBQVEsVUFIQztBQUlULGtCQUFNNUI7QUFKRyxXQUFYO0FBTUF6SSxlQUFLbCtCLElBQUwsQ0FBVTtBQUNSLCtCQUFtQjJtQyxNQURYO0FBRVIsMkJBQWUsQ0FBQzRCLFFBRlI7QUFHUixvQkFBUSxNQUhBO0FBSVIsa0JBQU1EO0FBSkUsV0FBVjtBQU1ELFNBbEJEO0FBbUJBLFlBQUlFLFlBQVksS0FBS3pULFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLFlBQW5CLENBQWhCO0FBQ0EsWUFBR2dxQyxVQUFVcjNDLE1BQWIsRUFBb0I7QUFDbEIsY0FBSWtrQyxRQUFRLElBQVo7QUFDQW1ULG9CQUFVMzJDLElBQVYsQ0FBZSxZQUFVO0FBQ3ZCd2pDLGtCQUFNeVIsSUFBTixDQUFXOVMsRUFBRSxJQUFGLENBQVg7QUFDRCxXQUZEO0FBR0Q7QUFDRCxhQUFLMk8sT0FBTDtBQUNEOztBQUVEOzs7OztBQWpGVztBQUFBO0FBQUEsZ0NBcUZEO0FBQ1IsWUFBSXROLFFBQVEsSUFBWjs7QUFFQSxhQUFLTixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixJQUFuQixFQUF5QjNNLElBQXpCLENBQThCLFlBQVc7QUFDdkMsY0FBSTQyQyxXQUFXelUsRUFBRSxJQUFGLEVBQVE1ckIsUUFBUixDQUFpQixnQkFBakIsQ0FBZjs7QUFFQSxjQUFJcWdDLFNBQVN0M0MsTUFBYixFQUFxQjtBQUNuQjZpQyxjQUFFLElBQUYsRUFBUTVyQixRQUFSLENBQWlCLEdBQWpCLEVBQXNCNEUsR0FBdEIsQ0FBMEIsd0JBQTFCLEVBQW9EdUcsRUFBcEQsQ0FBdUQsd0JBQXZELEVBQWlGLFVBQVMzWSxDQUFULEVBQVk7QUFDM0ZBLGdCQUFFOGEsY0FBRjs7QUFFQTJmLG9CQUFNN1UsTUFBTixDQUFhaW9CLFFBQWI7QUFDRCxhQUpEO0FBS0Q7QUFDRixTQVZELEVBVUdsMUIsRUFWSCxDQVVNLDBCQVZOLEVBVWtDLFVBQVMzWSxDQUFULEVBQVc7QUFDM0MsY0FBSW02QixXQUFXZixFQUFFLElBQUYsQ0FBZjtBQUFBLGNBQ0kwVSxZQUFZM1QsU0FBU2ozQixNQUFULENBQWdCLElBQWhCLEVBQXNCc0ssUUFBdEIsQ0FBK0IsSUFBL0IsQ0FEaEI7QUFBQSxjQUVJdWdDLFlBRko7QUFBQSxjQUdJQyxZQUhKO0FBQUEsY0FJSTdHLFVBQVVoTixTQUFTM3NCLFFBQVQsQ0FBa0IsZ0JBQWxCLENBSmQ7O0FBTUFzZ0Msb0JBQVU3MkMsSUFBVixDQUFlLFVBQVNJLENBQVQsRUFBWTtBQUN6QixnQkFBSStoQyxFQUFFLElBQUYsRUFBUTdzQixFQUFSLENBQVc0dEIsUUFBWCxDQUFKLEVBQTBCO0FBQ3hCNFQsNkJBQWVELFVBQVVyMkMsRUFBVixDQUFhcUIsS0FBS2tyQixHQUFMLENBQVMsQ0FBVCxFQUFZM3NCLElBQUUsQ0FBZCxDQUFiLEVBQStCdU0sSUFBL0IsQ0FBb0MsR0FBcEMsRUFBeUNwTSxLQUF6QyxFQUFmO0FBQ0F3MkMsNkJBQWVGLFVBQVVyMkMsRUFBVixDQUFhcUIsS0FBS20xQyxHQUFMLENBQVM1MkMsSUFBRSxDQUFYLEVBQWN5MkMsVUFBVXYzQyxNQUFWLEdBQWlCLENBQS9CLENBQWIsRUFBZ0RxTixJQUFoRCxDQUFxRCxHQUFyRCxFQUEwRHBNLEtBQTFELEVBQWY7O0FBRUEsa0JBQUk0aEMsRUFBRSxJQUFGLEVBQVE1ckIsUUFBUixDQUFpQix3QkFBakIsRUFBMkNqWCxNQUEvQyxFQUF1RDtBQUFFO0FBQ3ZEeTNDLCtCQUFlN1QsU0FBU3YyQixJQUFULENBQWMsZ0JBQWQsRUFBZ0NBLElBQWhDLENBQXFDLEdBQXJDLEVBQTBDcE0sS0FBMUMsRUFBZjtBQUNEO0FBQ0Qsa0JBQUk0aEMsRUFBRSxJQUFGLEVBQVE3c0IsRUFBUixDQUFXLGNBQVgsQ0FBSixFQUFnQztBQUFFO0FBQ2hDd2hDLCtCQUFlNVQsU0FBUzdyQixPQUFULENBQWlCLElBQWpCLEVBQXVCOVcsS0FBdkIsR0FBK0JvTSxJQUEvQixDQUFvQyxHQUFwQyxFQUF5Q3BNLEtBQXpDLEVBQWY7QUFDRCxlQUZELE1BRU8sSUFBSXUyQyxhQUFhei9CLE9BQWIsQ0FBcUIsSUFBckIsRUFBMkI5VyxLQUEzQixHQUFtQ2dXLFFBQW5DLENBQTRDLHdCQUE1QyxFQUFzRWpYLE1BQTFFLEVBQWtGO0FBQUU7QUFDekZ3M0MsK0JBQWVBLGFBQWF6L0IsT0FBYixDQUFxQixJQUFyQixFQUEyQjFLLElBQTNCLENBQWdDLGVBQWhDLEVBQWlEQSxJQUFqRCxDQUFzRCxHQUF0RCxFQUEyRHBNLEtBQTNELEVBQWY7QUFDRDtBQUNELGtCQUFJNGhDLEVBQUUsSUFBRixFQUFRN3NCLEVBQVIsQ0FBVyxhQUFYLENBQUosRUFBK0I7QUFBRTtBQUMvQnloQywrQkFBZTdULFNBQVM3ckIsT0FBVCxDQUFpQixJQUFqQixFQUF1QjlXLEtBQXZCLEdBQStCa1csSUFBL0IsQ0FBb0MsSUFBcEMsRUFBMEM5SixJQUExQyxDQUErQyxHQUEvQyxFQUFvRHBNLEtBQXBELEVBQWY7QUFDRDs7QUFFRDtBQUNEO0FBQ0YsV0FuQkQ7O0FBcUJBK2hDLHFCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsZUFBakMsRUFBa0Q7QUFDaER3MUIsa0JBQU0sZ0JBQVc7QUFDZixrQkFBSTJSLFFBQVE1NkIsRUFBUixDQUFXLFNBQVgsQ0FBSixFQUEyQjtBQUN6Qmt1QixzQkFBTXlSLElBQU4sQ0FBVy9FLE9BQVg7QUFDQUEsd0JBQVF2akMsSUFBUixDQUFhLElBQWIsRUFBbUJwTSxLQUFuQixHQUEyQm9NLElBQTNCLENBQWdDLEdBQWhDLEVBQXFDcE0sS0FBckMsR0FBNkNtbEIsS0FBN0M7QUFDRDtBQUNGLGFBTitDO0FBT2hEb0UsbUJBQU8saUJBQVc7QUFDaEIsa0JBQUlvbUIsUUFBUTV3QyxNQUFSLElBQWtCLENBQUM0d0MsUUFBUTU2QixFQUFSLENBQVcsU0FBWCxDQUF2QixFQUE4QztBQUFFO0FBQzlDa3VCLHNCQUFNb1MsRUFBTixDQUFTMUYsT0FBVDtBQUNELGVBRkQsTUFFTyxJQUFJaE4sU0FBU2ozQixNQUFULENBQWdCLGdCQUFoQixFQUFrQzNNLE1BQXRDLEVBQThDO0FBQUU7QUFDckRra0Msc0JBQU1vUyxFQUFOLENBQVMxUyxTQUFTajNCLE1BQVQsQ0FBZ0IsZ0JBQWhCLENBQVQ7QUFDQWkzQix5QkFBUzdyQixPQUFULENBQWlCLElBQWpCLEVBQXVCOVcsS0FBdkIsR0FBK0JvTSxJQUEvQixDQUFvQyxHQUFwQyxFQUF5Q3BNLEtBQXpDLEdBQWlEbWxCLEtBQWpEO0FBQ0Q7QUFDRixhQWQrQztBQWVoRGt3QixnQkFBSSxjQUFXO0FBQ2JrQiwyQkFBYXB4QixLQUFiO0FBQ0EscUJBQU8sSUFBUDtBQUNELGFBbEIrQztBQW1CaER1dkIsa0JBQU0sZ0JBQVc7QUFDZjhCLDJCQUFhcnhCLEtBQWI7QUFDQSxxQkFBTyxJQUFQO0FBQ0QsYUF0QitDO0FBdUJoRGlKLG9CQUFRLGtCQUFXO0FBQ2pCLGtCQUFJdVUsU0FBUzNzQixRQUFULENBQWtCLGdCQUFsQixFQUFvQ2pYLE1BQXhDLEVBQWdEO0FBQzlDa2tDLHNCQUFNN1UsTUFBTixDQUFhdVUsU0FBUzNzQixRQUFULENBQWtCLGdCQUFsQixDQUFiO0FBQ0Q7QUFDRixhQTNCK0M7QUE0QmhEMGdDLHNCQUFVLG9CQUFXO0FBQ25CelQsb0JBQU0wVCxPQUFOO0FBQ0QsYUE5QitDO0FBK0JoRHZPLHFCQUFTLGlCQUFTOWtCLGNBQVQsRUFBeUI7QUFDaEMsa0JBQUlBLGNBQUosRUFBb0I7QUFDbEI5YSxrQkFBRThhLGNBQUY7QUFDRDtBQUNEOWEsZ0JBQUVxZCx3QkFBRjtBQUNEO0FBcEMrQyxXQUFsRDtBQXNDRCxTQTVFRCxFQUhRLENBK0VMO0FBQ0o7O0FBRUQ7Ozs7O0FBdktXO0FBQUE7QUFBQSxnQ0EyS0Q7QUFDUixhQUFLd3ZCLEVBQUwsQ0FBUSxLQUFLMVMsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsZ0JBQW5CLENBQVI7QUFDRDs7QUFFRDs7Ozs7QUEvS1c7QUFBQTtBQUFBLGdDQW1MRDtBQUNSLGFBQUtzb0MsSUFBTCxDQUFVLEtBQUsvUixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixnQkFBbkIsQ0FBVjtBQUNEOztBQUVEOzs7Ozs7QUF2TFc7QUFBQTtBQUFBLDZCQTRMSnVqQyxPQTVMSSxFQTRMSTtBQUNiLFlBQUcsQ0FBQ0EsUUFBUTU2QixFQUFSLENBQVcsV0FBWCxDQUFKLEVBQTZCO0FBQzNCLGNBQUksQ0FBQzQ2QixRQUFRNTZCLEVBQVIsQ0FBVyxTQUFYLENBQUwsRUFBNEI7QUFDMUIsaUJBQUtzZ0MsRUFBTCxDQUFRMUYsT0FBUjtBQUNELFdBRkQsTUFHSztBQUNILGlCQUFLK0UsSUFBTCxDQUFVL0UsT0FBVjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDs7Ozs7O0FBdk1XO0FBQUE7QUFBQSwyQkE0TU5BLE9BNU1NLEVBNE1HO0FBQ1osWUFBSTFNLFFBQVEsSUFBWjs7QUFFQSxZQUFHLENBQUMsS0FBS3hpQyxPQUFMLENBQWF1MUMsU0FBakIsRUFBNEI7QUFDMUIsZUFBS1gsRUFBTCxDQUFRLEtBQUsxUyxRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixZQUFuQixFQUFpQ29KLEdBQWpDLENBQXFDbTZCLFFBQVE1NEIsWUFBUixDQUFxQixLQUFLNHJCLFFBQTFCLEVBQW9DaHNCLEdBQXBDLENBQXdDZzVCLE9BQXhDLENBQXJDLENBQVI7QUFDRDs7QUFFREEsZ0JBQVFsYixRQUFSLENBQWlCLFdBQWpCLEVBQThCN21CLElBQTlCLENBQW1DLEVBQUMsZUFBZSxLQUFoQixFQUFuQyxFQUNHbEMsTUFESCxDQUNVLDhCQURWLEVBQzBDa0MsSUFEMUMsQ0FDK0MsRUFBQyxpQkFBaUIsSUFBbEIsRUFEL0M7O0FBR0U7QUFDRStoQyxnQkFBUXJkLFNBQVIsQ0FBa0IyUSxNQUFNeGlDLE9BQU4sQ0FBY20xQyxVQUFoQyxFQUE0QyxZQUFZO0FBQ3REOzs7O0FBSUEzUyxnQkFBTU4sUUFBTixDQUFldmQsT0FBZixDQUF1Qix1QkFBdkIsRUFBZ0QsQ0FBQ3VxQixPQUFELENBQWhEO0FBQ0QsU0FORDtBQU9GO0FBQ0g7O0FBRUQ7Ozs7OztBQWpPVztBQUFBO0FBQUEseUJBc09SQSxPQXRPUSxFQXNPQztBQUNWLFlBQUkxTSxRQUFRLElBQVo7QUFDQTtBQUNFME0sZ0JBQVFwZCxPQUFSLENBQWdCMFEsTUFBTXhpQyxPQUFOLENBQWNtMUMsVUFBOUIsRUFBMEMsWUFBWTtBQUNwRDs7OztBQUlBM1MsZ0JBQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIscUJBQXZCLEVBQThDLENBQUN1cUIsT0FBRCxDQUE5QztBQUNELFNBTkQ7QUFPRjs7QUFFQSxZQUFJaUgsU0FBU2pILFFBQVF2akMsSUFBUixDQUFhLGdCQUFiLEVBQStCbW1CLE9BQS9CLENBQXVDLENBQXZDLEVBQTBDM2IsT0FBMUMsR0FBb0RoSixJQUFwRCxDQUF5RCxhQUF6RCxFQUF3RSxJQUF4RSxDQUFiOztBQUVBZ3BDLGVBQU9sckMsTUFBUCxDQUFjLDhCQUFkLEVBQThDa0MsSUFBOUMsQ0FBbUQsZUFBbkQsRUFBb0UsS0FBcEU7QUFDRDs7QUFFRDs7Ozs7QUF2UFc7QUFBQTtBQUFBLGdDQTJQRDtBQUNSLGFBQUsrMEIsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsZ0JBQW5CLEVBQXFDa21CLFNBQXJDLENBQStDLENBQS9DLEVBQWtEdlUsR0FBbEQsQ0FBc0QsU0FBdEQsRUFBaUUsRUFBakU7QUFDQSxhQUFLNGtCLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLEdBQW5CLEVBQXdCd08sR0FBeEIsQ0FBNEIsd0JBQTVCOztBQUVBbW5CLG1CQUFXdUosSUFBWCxDQUFnQlMsSUFBaEIsQ0FBcUIsS0FBS3BKLFFBQTFCLEVBQW9DLFdBQXBDO0FBQ0FaLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBalFVOztBQUFBO0FBQUE7O0FBb1FibVQsZ0JBQWMxRixRQUFkLEdBQXlCO0FBQ3ZCOzs7Ozs7QUFNQXVGLGdCQUFZLEdBUFc7QUFRdkI7Ozs7OztBQU1BSSxlQUFXO0FBZFksR0FBekI7O0FBaUJBO0FBQ0FqVSxhQUFXSSxNQUFYLENBQWtCNFQsYUFBbEIsRUFBaUMsZUFBakM7QUFFQyxDQXhSQSxDQXdSQy8zQyxNQXhSRCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7O0FBRmEsTUFVUGlWLFNBVk87QUFXWDs7Ozs7O0FBTUEsdUJBQVk3USxPQUFaLEVBQXFCdmxDLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUtraUMsUUFBTCxHQUFnQnFELE9BQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhcTJDLFVBQVV4RyxRQUF2QixFQUFpQyxLQUFLMU4sUUFBTCxDQUFjMW1CLElBQWQsRUFBakMsRUFBdUR4YixPQUF2RCxDQUFmOztBQUVBc2hDLGlCQUFXdUosSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0IsS0FBSzVJLFFBQTdCLEVBQXVDLFdBQXZDOztBQUVBLFdBQUtLLEtBQUw7O0FBRUFqQixpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxXQUFoQztBQUNBUixpQkFBV3dGLFFBQVgsQ0FBb0I1ckIsUUFBcEIsQ0FBNkIsV0FBN0IsRUFBMEM7QUFDeEMsaUJBQVMsTUFEK0I7QUFFeEMsaUJBQVMsTUFGK0I7QUFHeEMsdUJBQWUsTUFIeUI7QUFJeEMsb0JBQVksSUFKNEI7QUFLeEMsc0JBQWMsTUFMMEI7QUFNeEMsc0JBQWMsVUFOMEI7QUFPeEMsa0JBQVUsT0FQOEI7QUFReEMsZUFBTyxNQVJpQztBQVN4QyxxQkFBYTtBQVQyQixPQUExQztBQVdEOztBQUVEOzs7Ozs7QUF2Q1c7QUFBQTtBQUFBLDhCQTJDSDtBQUNOLGFBQUttN0IsZUFBTCxHQUF1QixLQUFLblUsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsZ0NBQW5CLEVBQXFENEosUUFBckQsQ0FBOEQsR0FBOUQsQ0FBdkI7QUFDQSxhQUFLK2dDLFNBQUwsR0FBaUIsS0FBS0QsZUFBTCxDQUFxQnByQyxNQUFyQixDQUE0QixJQUE1QixFQUFrQ3NLLFFBQWxDLENBQTJDLGdCQUEzQyxDQUFqQjtBQUNBLGFBQUtnaEMsVUFBTCxHQUFrQixLQUFLclUsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUJvSixHQUF6QixDQUE2QixvQkFBN0IsRUFBbUQ1SCxJQUFuRCxDQUF3RCxNQUF4RCxFQUFnRSxVQUFoRSxFQUE0RXhCLElBQTVFLENBQWlGLEdBQWpGLENBQWxCO0FBQ0EsYUFBS3UyQixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixhQUFuQixFQUFtQyxLQUFLKzBCLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGdCQUFuQixLQUF3Q20wQixXQUFXVyxXQUFYLENBQXVCLENBQXZCLEVBQTBCLFdBQTFCLENBQTNFOztBQUVBLGFBQUt1VSxZQUFMO0FBQ0EsYUFBS0MsZUFBTDs7QUFFQSxhQUFLQyxlQUFMO0FBQ0Q7O0FBRUQ7Ozs7Ozs7O0FBdkRXO0FBQUE7QUFBQSxxQ0E4REk7QUFDYixZQUFJbFUsUUFBUSxJQUFaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSzZULGVBQUwsQ0FBcUJyM0MsSUFBckIsQ0FBMEIsWUFBVTtBQUNsQyxjQUFJbTFDLFFBQVFoVCxFQUFFLElBQUYsQ0FBWjtBQUNBLGNBQUlrSyxPQUFPOEksTUFBTWxwQyxNQUFOLEVBQVg7QUFDQSxjQUFHdTNCLE1BQU14aUMsT0FBTixDQUFjMjJDLFVBQWpCLEVBQTRCO0FBQzFCeEMsa0JBQU05ekMsS0FBTixHQUFjNm5CLFNBQWQsQ0FBd0JtakIsS0FBSzkxQixRQUFMLENBQWMsZ0JBQWQsQ0FBeEIsRUFBeURtSyxJQUF6RCxDQUE4RCxxR0FBOUQ7QUFDRDtBQUNEeTBCLGdCQUFNMzRCLElBQU4sQ0FBVyxXQUFYLEVBQXdCMjRCLE1BQU1obkMsSUFBTixDQUFXLE1BQVgsQ0FBeEIsRUFBNEM4bEIsVUFBNUMsQ0FBdUQsTUFBdkQsRUFBK0Q5bEIsSUFBL0QsQ0FBb0UsVUFBcEUsRUFBZ0YsQ0FBaEY7QUFDQWduQyxnQkFBTTUrQixRQUFOLENBQWUsZ0JBQWYsRUFDS3BJLElBREwsQ0FDVTtBQUNKLDJCQUFlLElBRFg7QUFFSix3QkFBWSxDQUZSO0FBR0osb0JBQVE7QUFISixXQURWO0FBTUFxMUIsZ0JBQU1zTixPQUFOLENBQWNxRSxLQUFkO0FBQ0QsU0FkRDtBQWVBLGFBQUttQyxTQUFMLENBQWV0M0MsSUFBZixDQUFvQixZQUFVO0FBQzVCLGNBQUk0M0MsUUFBUXpWLEVBQUUsSUFBRixDQUFaO0FBQUEsY0FDSTBWLFFBQVFELE1BQU1qckMsSUFBTixDQUFXLG9CQUFYLENBRFo7QUFFQSxjQUFHLENBQUNrckMsTUFBTXY0QyxNQUFWLEVBQWlCO0FBQ2Ysb0JBQVFra0MsTUFBTXhpQyxPQUFOLENBQWM4MkMsa0JBQXRCO0FBQ0UsbUJBQUssUUFBTDtBQUNFRixzQkFBTWx2QixNQUFOLENBQWE4YSxNQUFNeGlDLE9BQU4sQ0FBYysyQyxVQUEzQjtBQUNBO0FBQ0YsbUJBQUssS0FBTDtBQUNFSCxzQkFBTWp2QixPQUFOLENBQWM2YSxNQUFNeGlDLE9BQU4sQ0FBYysyQyxVQUE1QjtBQUNBO0FBQ0Y7QUFDRW5VLHdCQUFRM2hDLEtBQVIsQ0FBYywyQ0FBMkN1aEMsTUFBTXhpQyxPQUFOLENBQWM4MkMsa0JBQXpELEdBQThFLEdBQTVGO0FBUko7QUFVRDtBQUNEdFUsZ0JBQU13VSxLQUFOLENBQVlKLEtBQVo7QUFDRCxTQWhCRDs7QUFrQkEsYUFBS04sU0FBTCxDQUFldGlCLFFBQWYsQ0FBd0IsV0FBeEI7QUFDQSxZQUFHLENBQUMsS0FBS2gwQixPQUFMLENBQWFpM0MsVUFBakIsRUFBNkI7QUFDM0IsZUFBS1gsU0FBTCxDQUFldGlCLFFBQWYsQ0FBd0Isa0NBQXhCO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFHLENBQUMsS0FBS2tPLFFBQUwsQ0FBY2ozQixNQUFkLEdBQXVCd3BCLFFBQXZCLENBQWdDLGNBQWhDLENBQUosRUFBb0Q7QUFDbEQsZUFBS3lpQixRQUFMLEdBQWdCL1YsRUFBRSxLQUFLbmhDLE9BQUwsQ0FBYW0zQyxPQUFmLEVBQXdCbmpCLFFBQXhCLENBQWlDLGNBQWpDLENBQWhCO0FBQ0EsY0FBRyxLQUFLaDBCLE9BQUwsQ0FBYW8zQyxhQUFoQixFQUErQixLQUFLRixRQUFMLENBQWNsakIsUUFBZCxDQUF1QixnQkFBdkI7QUFDL0IsZUFBS2tPLFFBQUwsQ0FBY3hpQixJQUFkLENBQW1CLEtBQUt3M0IsUUFBeEI7QUFDRDtBQUNEO0FBQ0EsYUFBS0EsUUFBTCxHQUFnQixLQUFLaFYsUUFBTCxDQUFjajNCLE1BQWQsRUFBaEI7QUFDQSxhQUFLaXNDLFFBQUwsQ0FBYzU1QixHQUFkLENBQWtCLEtBQUsrNUIsV0FBTCxFQUFsQjtBQUNEO0FBbEhVO0FBQUE7QUFBQSxnQ0FvSEQ7QUFDUixhQUFLSCxRQUFMLENBQWM1NUIsR0FBZCxDQUFrQixFQUFDLGFBQWEsTUFBZCxFQUFzQixjQUFjLE1BQXBDLEVBQWxCO0FBQ0E7QUFDQSxhQUFLNDVCLFFBQUwsQ0FBYzU1QixHQUFkLENBQWtCLEtBQUsrNUIsV0FBTCxFQUFsQjtBQUNEOztBQUVEOzs7Ozs7O0FBMUhXO0FBQUE7QUFBQSw4QkFnSUhyVSxLQWhJRyxFQWdJSTtBQUNiLFlBQUlSLFFBQVEsSUFBWjs7QUFFQVEsY0FBTTdvQixHQUFOLENBQVUsb0JBQVYsRUFDQ3VHLEVBREQsQ0FDSSxvQkFESixFQUMwQixVQUFTM1ksQ0FBVCxFQUFXO0FBQ25DLGNBQUdvNUIsRUFBRXA1QixFQUFFekgsTUFBSixFQUFZZ1csWUFBWixDQUF5QixJQUF6QixFQUErQixJQUEvQixFQUFxQ21lLFFBQXJDLENBQThDLDZCQUE5QyxDQUFILEVBQWdGO0FBQzlFMXNCLGNBQUVxZCx3QkFBRjtBQUNBcmQsY0FBRThhLGNBQUY7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQTJmLGdCQUFNOFUsS0FBTixDQUFZdFUsTUFBTS8zQixNQUFOLENBQWEsSUFBYixDQUFaOztBQUVBLGNBQUd1M0IsTUFBTXhpQyxPQUFOLENBQWN1M0MsWUFBakIsRUFBOEI7QUFDNUIsZ0JBQUlDLFFBQVFyVyxFQUFFLE1BQUYsQ0FBWjtBQUNBcVcsa0JBQU1yOUIsR0FBTixDQUFVLGVBQVYsRUFBMkJ1RyxFQUEzQixDQUE4QixvQkFBOUIsRUFBb0QsVUFBUzNZLENBQVQsRUFBVztBQUM3RCxrQkFBSUEsRUFBRXpILE1BQUYsS0FBYWtpQyxNQUFNTixRQUFOLENBQWUsQ0FBZixDQUFiLElBQWtDZixFQUFFaDhCLFFBQUYsQ0FBV3E5QixNQUFNTixRQUFOLENBQWUsQ0FBZixDQUFYLEVBQThCbjZCLEVBQUV6SCxNQUFoQyxDQUF0QyxFQUErRTtBQUFFO0FBQVM7QUFDMUZ5SCxnQkFBRThhLGNBQUY7QUFDQTJmLG9CQUFNaVYsUUFBTjtBQUNBRCxvQkFBTXI5QixHQUFOLENBQVUsZUFBVjtBQUNELGFBTEQ7QUFNRDtBQUNGLFNBckJEO0FBc0JELGFBQUsrbkIsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIscUJBQWpCLEVBQXdDLEtBQUtnM0IsT0FBTCxDQUFhalgsSUFBYixDQUFrQixJQUFsQixDQUF4QztBQUNBOztBQUVEOzs7Ozs7QUE1Slc7QUFBQTtBQUFBLHdDQWlLTztBQUNoQixZQUFHLEtBQUt6Z0MsT0FBTCxDQUFhbWtCLFNBQWhCLEVBQTBCO0FBQ3hCLGVBQUt3ekIsWUFBTCxHQUFvQixLQUFLQyxVQUFMLENBQWdCblgsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBcEI7QUFDQSxlQUFLeUIsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIseURBQWpCLEVBQTJFLEtBQUtpM0IsWUFBaEY7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUF4S1c7QUFBQTtBQUFBLG1DQTZLRTtBQUNYLFlBQUluVixRQUFRLElBQVo7QUFDQSxZQUFJcVYsb0JBQW9CclYsTUFBTXhpQyxPQUFOLENBQWM4M0MsZ0JBQWQsSUFBZ0MsRUFBaEMsR0FBbUMzVyxFQUFFcUIsTUFBTXhpQyxPQUFOLENBQWM4M0MsZ0JBQWhCLENBQW5DLEdBQXFFdFYsTUFBTU4sUUFBbkc7QUFBQSxZQUNJNlYsWUFBWWxrQixTQUFTZ2tCLGtCQUFrQjFZLE1BQWxCLEdBQTJCL3pCLEdBQTNCLEdBQStCbzNCLE1BQU14aUMsT0FBTixDQUFjZzRDLGVBQXRELENBRGhCO0FBRUE3VyxVQUFFLFlBQUYsRUFBZ0J4a0IsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIyVSxPQUEzQixDQUFtQyxFQUFFbk4sV0FBVzR6QixTQUFiLEVBQW5DLEVBQTZEdlYsTUFBTXhpQyxPQUFOLENBQWNpNEMsaUJBQTNFLEVBQThGelYsTUFBTXhpQyxPQUFOLENBQWNrNEMsZUFBNUcsRUFBNEgsWUFBVTtBQUNwSTs7OztBQUlBLGNBQUcsU0FBTy9XLEVBQUUsTUFBRixFQUFVLENBQVYsQ0FBVixFQUF1QnFCLE1BQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIsdUJBQXZCO0FBQ3hCLFNBTkQ7QUFPRDs7QUFFRDs7Ozs7QUExTFc7QUFBQTtBQUFBLHdDQThMTztBQUNoQixZQUFJNmQsUUFBUSxJQUFaOztBQUVBLGFBQUsrVCxVQUFMLENBQWdCcmdDLEdBQWhCLENBQW9CLEtBQUtnc0IsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIscURBQW5CLENBQXBCLEVBQStGK1UsRUFBL0YsQ0FBa0csc0JBQWxHLEVBQTBILFVBQVMzWSxDQUFULEVBQVc7QUFDbkksY0FBSW02QixXQUFXZixFQUFFLElBQUYsQ0FBZjtBQUFBLGNBQ0kwVSxZQUFZM1QsU0FBU2ozQixNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQ3NLLFFBQW5DLENBQTRDLElBQTVDLEVBQWtEQSxRQUFsRCxDQUEyRCxHQUEzRCxDQURoQjtBQUFBLGNBRUl1Z0MsWUFGSjtBQUFBLGNBR0lDLFlBSEo7O0FBS0FGLG9CQUFVNzJDLElBQVYsQ0FBZSxVQUFTSSxDQUFULEVBQVk7QUFDekIsZ0JBQUkraEMsRUFBRSxJQUFGLEVBQVE3c0IsRUFBUixDQUFXNHRCLFFBQVgsQ0FBSixFQUEwQjtBQUN4QjRULDZCQUFlRCxVQUFVcjJDLEVBQVYsQ0FBYXFCLEtBQUtrckIsR0FBTCxDQUFTLENBQVQsRUFBWTNzQixJQUFFLENBQWQsQ0FBYixDQUFmO0FBQ0EyMkMsNkJBQWVGLFVBQVVyMkMsRUFBVixDQUFhcUIsS0FBS20xQyxHQUFMLENBQVM1MkMsSUFBRSxDQUFYLEVBQWN5MkMsVUFBVXYzQyxNQUFWLEdBQWlCLENBQS9CLENBQWIsQ0FBZjtBQUNBO0FBQ0Q7QUFDRixXQU5EOztBQVFBZ2pDLHFCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsV0FBakMsRUFBOEM7QUFDNUMwTixrQkFBTSxnQkFBVztBQUNmLGtCQUFJeXNCLFNBQVM1dEIsRUFBVCxDQUFZa3VCLE1BQU02VCxlQUFsQixDQUFKLEVBQXdDO0FBQ3RDN1Qsc0JBQU04VSxLQUFOLENBQVlwVixTQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsQ0FBWjtBQUNBaTNCLHlCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0IyVixHQUF0QixDQUEwQjBnQixXQUFXaUMsYUFBWCxDQUF5QnJCLFFBQXpCLENBQTFCLEVBQThELFlBQVU7QUFDdEVBLDJCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JVLElBQXRCLENBQTJCLFNBQTNCLEVBQXNDQyxNQUF0QyxDQUE2QzQyQixNQUFNK1QsVUFBbkQsRUFBK0RoM0MsS0FBL0QsR0FBdUVtbEIsS0FBdkU7QUFDRCxpQkFGRDtBQUdBLHVCQUFPLElBQVA7QUFDRDtBQUNGLGFBVDJDO0FBVTVDaXdCLHNCQUFVLG9CQUFXO0FBQ25CblMsb0JBQU0yVixLQUFOLENBQVlqVyxTQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JBLE1BQXRCLENBQTZCLElBQTdCLENBQVo7QUFDQWkzQix1QkFBU2ozQixNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQzJWLEdBQW5DLENBQXVDMGdCLFdBQVdpQyxhQUFYLENBQXlCckIsUUFBekIsQ0FBdkMsRUFBMkUsWUFBVTtBQUNuRjFuQiwyQkFBVyxZQUFXO0FBQ3BCMG5CLDJCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JBLE1BQXRCLENBQTZCLElBQTdCLEVBQW1DQSxNQUFuQyxDQUEwQyxJQUExQyxFQUFnRHNLLFFBQWhELENBQXlELEdBQXpELEVBQThEaFcsS0FBOUQsR0FBc0VtbEIsS0FBdEU7QUFDRCxpQkFGRCxFQUVHLENBRkg7QUFHRCxlQUpEO0FBS0EscUJBQU8sSUFBUDtBQUNELGFBbEIyQztBQW1CNUNrd0IsZ0JBQUksY0FBVztBQUNia0IsMkJBQWFweEIsS0FBYjtBQUNBO0FBQ0EscUJBQU8sQ0FBQ3dkLFNBQVM1dEIsRUFBVCxDQUFZa3VCLE1BQU1OLFFBQU4sQ0FBZXYyQixJQUFmLENBQW9CLHNCQUFwQixDQUFaLENBQVI7QUFDRCxhQXZCMkM7QUF3QjVDc29DLGtCQUFNLGdCQUFXO0FBQ2Y4QiwyQkFBYXJ4QixLQUFiO0FBQ0E7QUFDQSxxQkFBTyxDQUFDd2QsU0FBUzV0QixFQUFULENBQVlrdUIsTUFBTU4sUUFBTixDQUFldjJCLElBQWYsQ0FBb0IscUJBQXBCLENBQVosQ0FBUjtBQUNELGFBNUIyQztBQTZCNUNtZCxtQkFBTyxpQkFBVztBQUNoQjtBQUNBLGtCQUFJLENBQUNvWixTQUFTNXRCLEVBQVQsQ0FBWWt1QixNQUFNTixRQUFOLENBQWV2MkIsSUFBZixDQUFvQixVQUFwQixDQUFaLENBQUwsRUFBbUQ7QUFDakQ2MkIsc0JBQU0yVixLQUFOLENBQVlqVyxTQUFTajNCLE1BQVQsR0FBa0JBLE1BQWxCLEVBQVo7QUFDQWkzQix5QkFBU2ozQixNQUFULEdBQWtCQSxNQUFsQixHQUEyQnNKLFFBQTNCLENBQW9DLEdBQXBDLEVBQXlDbVEsS0FBekM7QUFDRDtBQUNGLGFBbkMyQztBQW9DNUM2WSxrQkFBTSxnQkFBVztBQUNmLGtCQUFJLENBQUMyRSxTQUFTNXRCLEVBQVQsQ0FBWWt1QixNQUFNK1QsVUFBbEIsQ0FBTCxFQUFvQztBQUFFO0FBQ3BDL1Qsc0JBQU0yVixLQUFOLENBQVlqVyxTQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JBLE1BQXRCLENBQTZCLElBQTdCLENBQVo7QUFDQWkzQix5QkFBU2ozQixNQUFULENBQWdCLElBQWhCLEVBQXNCQSxNQUF0QixDQUE2QixJQUE3QixFQUFtQzJWLEdBQW5DLENBQXVDMGdCLFdBQVdpQyxhQUFYLENBQXlCckIsUUFBekIsQ0FBdkMsRUFBMkUsWUFBVTtBQUNuRjFuQiw2QkFBVyxZQUFXO0FBQ3BCMG5CLDZCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JBLE1BQXRCLENBQTZCLElBQTdCLEVBQW1DQSxNQUFuQyxDQUEwQyxJQUExQyxFQUFnRHNLLFFBQWhELENBQXlELEdBQXpELEVBQThEaFcsS0FBOUQsR0FBc0VtbEIsS0FBdEU7QUFDRCxtQkFGRCxFQUVHLENBRkg7QUFHRCxpQkFKRDtBQUtBLHVCQUFPLElBQVA7QUFDRCxlQVJELE1BUU8sSUFBSXdkLFNBQVM1dEIsRUFBVCxDQUFZa3VCLE1BQU02VCxlQUFsQixDQUFKLEVBQXdDO0FBQzdDN1Qsc0JBQU04VSxLQUFOLENBQVlwVixTQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsQ0FBWjtBQUNBaTNCLHlCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0IyVixHQUF0QixDQUEwQjBnQixXQUFXaUMsYUFBWCxDQUF5QnJCLFFBQXpCLENBQTFCLEVBQThELFlBQVU7QUFDdEVBLDJCQUFTajNCLE1BQVQsQ0FBZ0IsSUFBaEIsRUFBc0JVLElBQXRCLENBQTJCLFNBQTNCLEVBQXNDQyxNQUF0QyxDQUE2QzQyQixNQUFNK1QsVUFBbkQsRUFBK0RoM0MsS0FBL0QsR0FBdUVtbEIsS0FBdkU7QUFDRCxpQkFGRDtBQUdBLHVCQUFPLElBQVA7QUFDRDtBQUNGLGFBcEQyQztBQXFENUNpakIscUJBQVMsaUJBQVM5a0IsY0FBVCxFQUF5QjtBQUNoQyxrQkFBSUEsY0FBSixFQUFvQjtBQUNsQjlhLGtCQUFFOGEsY0FBRjtBQUNEO0FBQ0Q5YSxnQkFBRXFkLHdCQUFGO0FBQ0Q7QUExRDJDLFdBQTlDO0FBNERELFNBMUVELEVBSGdCLENBNkVaO0FBQ0w7O0FBRUQ7Ozs7OztBQTlRVztBQUFBO0FBQUEsaUNBbVJBO0FBQ1QsWUFBSTRkLFFBQVEsS0FBS2QsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsaUNBQW5CLEVBQXNEcW9CLFFBQXRELENBQStELFlBQS9ELENBQVo7QUFDQSxZQUFHLEtBQUtoMEIsT0FBTCxDQUFhaTNDLFVBQWhCLEVBQTRCLEtBQUtDLFFBQUwsQ0FBYzU1QixHQUFkLENBQWtCLEVBQUMyUixRQUFPK1QsTUFBTS8zQixNQUFOLEdBQWU2SyxPQUFmLENBQXVCLElBQXZCLEVBQTZCMEYsSUFBN0IsQ0FBa0MsWUFBbEMsQ0FBUixFQUFsQjtBQUM1QnduQixjQUFNcGlCLEdBQU4sQ0FBVTBnQixXQUFXaUMsYUFBWCxDQUF5QlAsS0FBekIsQ0FBVixFQUEyQyxVQUFTajdCLENBQVQsRUFBVztBQUNwRGk3QixnQkFBTTNPLFdBQU4sQ0FBa0Isc0JBQWxCO0FBQ0QsU0FGRDtBQUdJOzs7O0FBSUosYUFBSzZOLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IscUJBQXRCO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFoU1c7QUFBQTtBQUFBLDRCQXNTTHFlLEtBdFNLLEVBc1NFO0FBQ1gsWUFBSVIsUUFBUSxJQUFaO0FBQ0FRLGNBQU03b0IsR0FBTixDQUFVLG9CQUFWO0FBQ0E2b0IsY0FBTXp0QixRQUFOLENBQWUsb0JBQWYsRUFDR21MLEVBREgsQ0FDTSxvQkFETixFQUM0QixVQUFTM1ksQ0FBVCxFQUFXO0FBQ25DQSxZQUFFcWQsd0JBQUY7QUFDQTtBQUNBb2QsZ0JBQU0yVixLQUFOLENBQVluVixLQUFaOztBQUVBO0FBQ0EsY0FBSW9WLGdCQUFnQnBWLE1BQU0vM0IsTUFBTixDQUFhLElBQWIsRUFBbUJBLE1BQW5CLENBQTBCLElBQTFCLEVBQWdDQSxNQUFoQyxDQUF1QyxJQUF2QyxDQUFwQjtBQUNBLGNBQUltdEMsY0FBYzk1QyxNQUFsQixFQUEwQjtBQUN4QmtrQyxrQkFBTThVLEtBQU4sQ0FBWWMsYUFBWjtBQUNEO0FBQ0YsU0FYSDtBQVlEOztBQUVEOzs7Ozs7QUF2VFc7QUFBQTtBQUFBLHdDQTRUTztBQUNoQixZQUFJNVYsUUFBUSxJQUFaO0FBQ0EsYUFBSytULFVBQUwsQ0FBZ0J4aEMsR0FBaEIsQ0FBb0IsOEJBQXBCLEVBQ0tvRixHQURMLENBQ1Msb0JBRFQsRUFFS3VHLEVBRkwsQ0FFUSxvQkFGUixFQUU4QixVQUFTM1ksQ0FBVCxFQUFXO0FBQ25DO0FBQ0F5UyxxQkFBVyxZQUFVO0FBQ25CZ29CLGtCQUFNaVYsUUFBTjtBQUNELFdBRkQsRUFFRyxDQUZIO0FBR0gsU0FQSDtBQVFEOztBQUVEOzs7Ozs7O0FBeFVXO0FBQUE7QUFBQSw0QkE4VUx6VSxLQTlVSyxFQThVRTtBQUNYLFlBQUcsS0FBS2hqQyxPQUFMLENBQWFpM0MsVUFBaEIsRUFBNEIsS0FBS0MsUUFBTCxDQUFjNTVCLEdBQWQsQ0FBa0IsRUFBQzJSLFFBQU8rVCxNQUFNenRCLFFBQU4sQ0FBZSxnQkFBZixFQUFpQ2lHLElBQWpDLENBQXNDLFlBQXRDLENBQVIsRUFBbEI7QUFDNUJ3bkIsY0FBTTcxQixJQUFOLENBQVcsZUFBWCxFQUE0QixJQUE1QjtBQUNBNjFCLGNBQU16dEIsUUFBTixDQUFlLGdCQUFmLEVBQWlDeWUsUUFBakMsQ0FBMEMsV0FBMUMsRUFBdURLLFdBQXZELENBQW1FLFdBQW5FLEVBQWdGbG5CLElBQWhGLENBQXFGLGFBQXJGLEVBQW9HLEtBQXBHO0FBQ0E7Ozs7QUFJQSxhQUFLKzBCLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IsbUJBQXRCLEVBQTJDLENBQUNxZSxLQUFELENBQTNDO0FBQ0Q7QUF2VlU7QUFBQTs7O0FBeVZYOzs7Ozs7QUF6VlcsNEJBK1ZMQSxLQS9WSyxFQStWRTtBQUNYLFlBQUcsS0FBS2hqQyxPQUFMLENBQWFpM0MsVUFBaEIsRUFBNEIsS0FBS0MsUUFBTCxDQUFjNTVCLEdBQWQsQ0FBa0IsRUFBQzJSLFFBQU8rVCxNQUFNLzNCLE1BQU4sR0FBZTZLLE9BQWYsQ0FBdUIsSUFBdkIsRUFBNkIwRixJQUE3QixDQUFrQyxZQUFsQyxDQUFSLEVBQWxCO0FBQzVCLFlBQUlnbkIsUUFBUSxJQUFaO0FBQ0FRLGNBQU0vM0IsTUFBTixDQUFhLElBQWIsRUFBbUJrQyxJQUFuQixDQUF3QixlQUF4QixFQUF5QyxLQUF6QztBQUNBNjFCLGNBQU03MUIsSUFBTixDQUFXLGFBQVgsRUFBMEIsSUFBMUIsRUFBZ0M2bUIsUUFBaEMsQ0FBeUMsWUFBekM7QUFDQWdQLGNBQU1oUCxRQUFOLENBQWUsWUFBZixFQUNNcFQsR0FETixDQUNVMGdCLFdBQVdpQyxhQUFYLENBQXlCUCxLQUF6QixDQURWLEVBQzJDLFlBQVU7QUFDOUNBLGdCQUFNM08sV0FBTixDQUFrQixzQkFBbEI7QUFDQTJPLGdCQUFNcGUsSUFBTixHQUFhb1AsUUFBYixDQUFzQixXQUF0QjtBQUNELFNBSk47QUFLQTs7OztBQUlBZ1AsY0FBTXJlLE9BQU4sQ0FBYyxtQkFBZCxFQUFtQyxDQUFDcWUsS0FBRCxDQUFuQztBQUNEOztBQUVEOzs7Ozs7O0FBaFhXO0FBQUE7QUFBQSxvQ0FzWEc7QUFDWixZQUFLcVYsWUFBWSxDQUFqQjtBQUFBLFlBQW9CN3BDLFNBQVMsRUFBN0I7QUFBQSxZQUFpQ2cwQixRQUFRLElBQXpDO0FBQ0EsYUFBSzhULFNBQUwsQ0FBZXBnQyxHQUFmLENBQW1CLEtBQUtnc0IsUUFBeEIsRUFBa0NsakMsSUFBbEMsQ0FBdUMsWUFBVTtBQUMvQyxjQUFJczVDLGFBQWFuWCxFQUFFLElBQUYsRUFBUTVyQixRQUFSLENBQWlCLElBQWpCLEVBQXVCalgsTUFBeEM7QUFDQSxjQUFJMndCLFNBQVNxUyxXQUFXNkQsR0FBWCxDQUFlRSxhQUFmLENBQTZCLElBQTdCLEVBQW1DcFcsTUFBaEQ7QUFDQW9wQixzQkFBWXBwQixTQUFTb3BCLFNBQVQsR0FBcUJwcEIsTUFBckIsR0FBOEJvcEIsU0FBMUM7QUFDQSxjQUFHN1YsTUFBTXhpQyxPQUFOLENBQWNpM0MsVUFBakIsRUFBNkI7QUFDM0I5VixjQUFFLElBQUYsRUFBUTNsQixJQUFSLENBQWEsWUFBYixFQUEwQnlULE1BQTFCO0FBQ0EsZ0JBQUksQ0FBQ2tTLEVBQUUsSUFBRixFQUFRMU0sUUFBUixDQUFpQixzQkFBakIsQ0FBTCxFQUErQ2ptQixPQUFPLFFBQVAsSUFBbUJ5Z0IsTUFBbkI7QUFDaEQ7QUFDRixTQVJEOztBQVVBLFlBQUcsQ0FBQyxLQUFLanZCLE9BQUwsQ0FBYWkzQyxVQUFqQixFQUE2QnpvQyxPQUFPLFlBQVAsSUFBMEI2cEMsU0FBMUI7O0FBRTdCN3BDLGVBQU8sV0FBUCxJQUF5QixLQUFLMHpCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCbFYscUJBQWpCLEdBQXlDOUMsS0FBbEU7O0FBRUEsZUFBTzFiLE1BQVA7QUFDRDs7QUFFRDs7Ozs7QUF6WVc7QUFBQTtBQUFBLGdDQTZZRDtBQUNSLFlBQUcsS0FBS3hPLE9BQUwsQ0FBYW1rQixTQUFoQixFQUEyQixLQUFLK2QsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsZUFBbEIsRUFBa0MsS0FBS3c5QixZQUF2QztBQUMzQixhQUFLRixRQUFMO0FBQ0QsYUFBS3ZWLFFBQUwsQ0FBYy9uQixHQUFkLENBQWtCLHFCQUFsQjtBQUNDbW5CLG1CQUFXdUosSUFBWCxDQUFnQlMsSUFBaEIsQ0FBcUIsS0FBS3BKLFFBQTFCLEVBQW9DLFdBQXBDO0FBQ0EsYUFBS0EsUUFBTCxDQUFjOUYsTUFBZCxHQUNjendCLElBRGQsQ0FDbUIsNkNBRG5CLEVBQ2tFK0wsTUFEbEUsR0FFYzlYLEdBRmQsR0FFb0IrTCxJQUZwQixDQUV5QixnREFGekIsRUFFMkUwb0IsV0FGM0UsQ0FFdUYsMkNBRnZGLEVBR2N6MEIsR0FIZCxHQUdvQitMLElBSHBCLENBR3lCLGdCQUh6QixFQUcyQ3NuQixVQUgzQyxDQUdzRCwyQkFIdEQ7QUFJQSxhQUFLb2pCLGVBQUwsQ0FBcUJyM0MsSUFBckIsQ0FBMEIsWUFBVztBQUNuQ21pQyxZQUFFLElBQUYsRUFBUWhuQixHQUFSLENBQVksZUFBWjtBQUNELFNBRkQ7O0FBSUEsYUFBS204QixTQUFMLENBQWVqaUIsV0FBZixDQUEyQixrQ0FBM0I7O0FBRUEsYUFBSzZOLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLEdBQW5CLEVBQXdCM00sSUFBeEIsQ0FBNkIsWUFBVTtBQUNyQyxjQUFJbTFDLFFBQVFoVCxFQUFFLElBQUYsQ0FBWjtBQUNBZ1QsZ0JBQU1saEIsVUFBTixDQUFpQixVQUFqQjtBQUNBLGNBQUdraEIsTUFBTTM0QixJQUFOLENBQVcsV0FBWCxDQUFILEVBQTJCO0FBQ3pCMjRCLGtCQUFNaG5DLElBQU4sQ0FBVyxNQUFYLEVBQW1CZ25DLE1BQU0zNEIsSUFBTixDQUFXLFdBQVgsQ0FBbkIsRUFBNENXLFVBQTVDLENBQXVELFdBQXZEO0FBQ0QsV0FGRCxNQUVLO0FBQUU7QUFBUztBQUNqQixTQU5EO0FBT0FtbEIsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUFwYVU7O0FBQUE7QUFBQTs7QUF1YWJpVSxZQUFVeEcsUUFBVixHQUFxQjtBQUNuQjs7Ozs7O0FBTUFtSCxnQkFBWSw2REFQTztBQVFuQjs7Ozs7O0FBTUFELHdCQUFvQixLQWREO0FBZW5COzs7Ozs7QUFNQUssYUFBUyxhQXJCVTtBQXNCbkI7Ozs7OztBQU1BUixnQkFBWSxLQTVCTztBQTZCbkI7Ozs7OztBQU1BWSxrQkFBYyxLQW5DSztBQW9DbkI7Ozs7OztBQU1BTixnQkFBWSxLQTFDTztBQTJDbkI7Ozs7OztBQU1BRyxtQkFBZSxLQWpESTtBQWtEbkI7Ozs7OztBQU1BanpCLGVBQVcsS0F4RFE7QUF5RG5COzs7Ozs7QUFNQTJ6QixzQkFBa0IsRUEvREM7QUFnRW5COzs7Ozs7QUFNQUUscUJBQWlCLENBdEVFO0FBdUVuQjs7Ozs7O0FBTUFDLHVCQUFtQixHQTdFQTtBQThFbkI7Ozs7Ozs7QUFPQUMscUJBQWlCO0FBQ2pCO0FBdEZtQixHQUFyQjs7QUF5RkE7QUFDQTVXLGFBQVdJLE1BQVgsQ0FBa0IwVSxTQUFsQixFQUE2QixXQUE3QjtBQUVDLENBbmdCQSxDQW1nQkM3NEMsTUFuZ0JELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7QUFGYSxNQVVQb1gsUUFWTztBQVdYOzs7Ozs7O0FBT0Esc0JBQVloVCxPQUFaLEVBQXFCdmxDLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUtraUMsUUFBTCxHQUFnQnFELE9BQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhdzRDLFNBQVMzSSxRQUF0QixFQUFnQyxLQUFLMU4sUUFBTCxDQUFjMW1CLElBQWQsRUFBaEMsRUFBc0R4YixPQUF0RCxDQUFmO0FBQ0EsV0FBS3VpQyxLQUFMOztBQUVBakIsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsVUFBaEM7QUFDQVIsaUJBQVd3RixRQUFYLENBQW9CNXJCLFFBQXBCLENBQTZCLFVBQTdCLEVBQXlDO0FBQ3ZDLGlCQUFTLE1BRDhCO0FBRXZDLGlCQUFTLE1BRjhCO0FBR3ZDLGtCQUFVO0FBSDZCLE9BQXpDO0FBS0Q7O0FBRUQ7Ozs7Ozs7QUEvQlc7QUFBQTtBQUFBLDhCQW9DSDtBQUNOLFlBQUlzOUIsTUFBTSxLQUFLdFcsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBVjs7QUFFQSxhQUFLaW5DLE9BQUwsR0FBZWpULHFCQUFtQnFYLEdBQW5CLFNBQTRCbDZDLE1BQTVCLEdBQXFDNmlDLHFCQUFtQnFYLEdBQW5CLFFBQXJDLEdBQW1FclgsbUJBQWlCcVgsR0FBakIsUUFBbEY7QUFDQSxhQUFLcEUsT0FBTCxDQUFham5DLElBQWIsQ0FBa0I7QUFDaEIsMkJBQWlCcXJDLEdBREQ7QUFFaEIsMkJBQWlCLEtBRkQ7QUFHaEIsMkJBQWlCQSxHQUhEO0FBSWhCLDJCQUFpQixJQUpEO0FBS2hCLDJCQUFpQjs7QUFMRCxTQUFsQjs7QUFTQSxZQUFHLEtBQUt4NEMsT0FBTCxDQUFheTRDLFdBQWhCLEVBQTRCO0FBQzFCLGVBQUtDLE9BQUwsR0FBZSxLQUFLeFcsUUFBTCxDQUFjN3JCLE9BQWQsQ0FBc0IsTUFBTSxLQUFLclcsT0FBTCxDQUFheTRDLFdBQXpDLENBQWY7QUFDRCxTQUZELE1BRUs7QUFDSCxlQUFLQyxPQUFMLEdBQWUsSUFBZjtBQUNEO0FBQ0QsYUFBSzE0QyxPQUFMLENBQWEyNEMsYUFBYixHQUE2QixLQUFLQyxnQkFBTCxFQUE3QjtBQUNBLGFBQUtDLE9BQUwsR0FBZSxDQUFmO0FBQ0EsYUFBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLGFBQUs1VyxRQUFMLENBQWMvMEIsSUFBZCxDQUFtQjtBQUNqQix5QkFBZSxNQURFO0FBRWpCLDJCQUFpQnFyQyxHQUZBO0FBR2pCLHlCQUFlQSxHQUhFO0FBSWpCLDZCQUFtQixLQUFLcEUsT0FBTCxDQUFhLENBQWIsRUFBZ0J4ckMsRUFBaEIsSUFBc0IwNEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixXQUExQjtBQUp4QixTQUFuQjtBQU1BLGFBQUs2TixPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQWxFVztBQUFBO0FBQUEseUNBdUVRO0FBQ2pCLFlBQUlpSixtQkFBbUIsS0FBSzdXLFFBQUwsQ0FBYyxDQUFkLEVBQWlCMzJCLFNBQWpCLENBQTJCbEQsS0FBM0IsQ0FBaUMsMEJBQWpDLENBQXZCO0FBQ0kwd0MsMkJBQW1CQSxtQkFBbUJBLGlCQUFpQixDQUFqQixDQUFuQixHQUF5QyxFQUE1RDtBQUNKLFlBQUlDLHFCQUFxQixjQUFjdHdDLElBQWQsQ0FBbUIsS0FBSzByQyxPQUFMLENBQWEsQ0FBYixFQUFnQjdvQyxTQUFuQyxDQUF6QjtBQUNJeXRDLDZCQUFxQkEscUJBQXFCQSxtQkFBbUIsQ0FBbkIsQ0FBckIsR0FBNkMsRUFBbEU7QUFDSixZQUFJNXRCLFdBQVc0dEIscUJBQXFCQSxxQkFBcUIsR0FBckIsR0FBMkJELGdCQUFoRCxHQUFtRUEsZ0JBQWxGOztBQUVBLGVBQU8zdEIsUUFBUDtBQUNEOztBQUVEOzs7Ozs7O0FBakZXO0FBQUE7QUFBQSxrQ0F1RkNBLFFBdkZELEVBdUZXO0FBQ3BCLGFBQUswdEIsYUFBTCxDQUFtQi83QyxJQUFuQixDQUF3QnF1QixXQUFXQSxRQUFYLEdBQXNCLFFBQTlDO0FBQ0E7QUFDQSxZQUFHLENBQUNBLFFBQUQsSUFBYyxLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsS0FBM0IsSUFBb0MsQ0FBckQsRUFBd0Q7QUFDdEQsZUFBS2tsQyxRQUFMLENBQWNsTyxRQUFkLENBQXVCLEtBQXZCO0FBQ0QsU0FGRCxNQUVNLElBQUc1SSxhQUFhLEtBQWIsSUFBdUIsS0FBSzB0QixhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLFFBQTNCLElBQXVDLENBQWpFLEVBQW9FO0FBQ3hFLGVBQUtrbEMsUUFBTCxDQUFjN04sV0FBZCxDQUEwQmpKLFFBQTFCO0FBQ0QsU0FGSyxNQUVBLElBQUdBLGFBQWEsTUFBYixJQUF3QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsT0FBM0IsSUFBc0MsQ0FBakUsRUFBb0U7QUFDeEUsZUFBS2tsQyxRQUFMLENBQWM3TixXQUFkLENBQTBCakosUUFBMUIsRUFDSzRJLFFBREwsQ0FDYyxPQURkO0FBRUQsU0FISyxNQUdBLElBQUc1SSxhQUFhLE9BQWIsSUFBeUIsS0FBSzB0QixhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQWpFLEVBQW9FO0FBQ3hFLGVBQUtrbEMsUUFBTCxDQUFjN04sV0FBZCxDQUEwQmpKLFFBQTFCLEVBQ0s0SSxRQURMLENBQ2MsTUFEZDtBQUVEOztBQUVEO0FBTE0sYUFNRCxJQUFHLENBQUM1SSxRQUFELElBQWMsS0FBSzB0QixhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLEtBQTNCLElBQW9DLENBQUMsQ0FBbkQsSUFBMEQsS0FBSzg3QyxhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQWxHLEVBQXFHO0FBQ3hHLGlCQUFLa2xDLFFBQUwsQ0FBY2xPLFFBQWQsQ0FBdUIsTUFBdkI7QUFDRCxXQUZJLE1BRUMsSUFBRzVJLGFBQWEsS0FBYixJQUF1QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBQyxDQUEvRCxJQUFzRSxLQUFLODdDLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBOUcsRUFBaUg7QUFDckgsaUJBQUtrbEMsUUFBTCxDQUFjN04sV0FBZCxDQUEwQmpKLFFBQTFCLEVBQ0s0SSxRQURMLENBQ2MsTUFEZDtBQUVELFdBSEssTUFHQSxJQUFHNUksYUFBYSxNQUFiLElBQXdCLEtBQUswdEIsYUFBTCxDQUFtQjk3QyxPQUFuQixDQUEyQixPQUEzQixJQUFzQyxDQUFDLENBQS9ELElBQXNFLEtBQUs4N0MsYUFBTCxDQUFtQjk3QyxPQUFuQixDQUEyQixRQUEzQixJQUF1QyxDQUFoSCxFQUFtSDtBQUN2SCxpQkFBS2tsQyxRQUFMLENBQWM3TixXQUFkLENBQTBCakosUUFBMUI7QUFDRCxXQUZLLE1BRUEsSUFBR0EsYUFBYSxPQUFiLElBQXlCLEtBQUswdEIsYUFBTCxDQUFtQjk3QyxPQUFuQixDQUEyQixNQUEzQixJQUFxQyxDQUFDLENBQS9ELElBQXNFLEtBQUs4N0MsYUFBTCxDQUFtQjk3QyxPQUFuQixDQUEyQixRQUEzQixJQUF1QyxDQUFoSCxFQUFtSDtBQUN2SCxpQkFBS2tsQyxRQUFMLENBQWM3TixXQUFkLENBQTBCakosUUFBMUI7QUFDRDtBQUNEO0FBSE0sZUFJRjtBQUNGLG1CQUFLOFcsUUFBTCxDQUFjN04sV0FBZCxDQUEwQmpKLFFBQTFCO0FBQ0Q7QUFDRCxhQUFLNnRCLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxhQUFLSixPQUFMO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUF6SFc7QUFBQTtBQUFBLHFDQStISTtBQUNiLFlBQUcsS0FBS3pFLE9BQUwsQ0FBYWpuQyxJQUFiLENBQWtCLGVBQWxCLE1BQXVDLE9BQTFDLEVBQWtEO0FBQUUsaUJBQU8sS0FBUDtBQUFlO0FBQ25FLFlBQUlpZSxXQUFXLEtBQUt3dEIsZ0JBQUwsRUFBZjtBQUFBLFlBQ0lsUyxXQUFXcEYsV0FBVzZELEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLbkQsUUFBbEMsQ0FEZjtBQUFBLFlBRUl5RSxjQUFjckYsV0FBVzZELEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLK08sT0FBbEMsQ0FGbEI7QUFBQSxZQUdJNVIsUUFBUSxJQUhaO0FBQUEsWUFJSTBXLFlBQWE5dEIsYUFBYSxNQUFiLEdBQXNCLE1BQXRCLEdBQWlDQSxhQUFhLE9BQWQsR0FBeUIsTUFBekIsR0FBa0MsS0FKbkY7QUFBQSxZQUtJa1EsUUFBUzRkLGNBQWMsS0FBZixHQUF3QixRQUF4QixHQUFtQyxPQUwvQztBQUFBLFlBTUkvWixTQUFVN0QsVUFBVSxRQUFYLEdBQXVCLEtBQUt0N0IsT0FBTCxDQUFhdW1DLE9BQXBDLEdBQThDLEtBQUt2bUMsT0FBTCxDQUFhd21DLE9BTnhFOztBQVFBLFlBQUlFLFNBQVN4YyxLQUFULElBQWtCd2MsU0FBU1osVUFBVCxDQUFvQjViLEtBQXZDLElBQWtELENBQUMsS0FBSzJ1QixPQUFOLElBQWlCLENBQUN2WCxXQUFXNkQsR0FBWCxDQUFlQyxnQkFBZixDQUFnQyxLQUFLbEQsUUFBckMsRUFBK0MsS0FBS3dXLE9BQXBELENBQXZFLEVBQXFJO0FBQ25JLGNBQUlTLFdBQVd6UyxTQUFTWixVQUFULENBQW9CNWIsS0FBbkM7QUFBQSxjQUNJa3ZCLGdCQUFnQixDQURwQjtBQUVBLGNBQUcsS0FBS1YsT0FBUixFQUFnQjtBQUNkLGdCQUFJVyxjQUFjL1gsV0FBVzZELEdBQVgsQ0FBZUUsYUFBZixDQUE2QixLQUFLcVQsT0FBbEMsQ0FBbEI7QUFBQSxnQkFDSVUsZ0JBQWdCQyxZQUFZbGEsTUFBWixDQUFtQmxTLElBRHZDO0FBRUEsZ0JBQUlvc0IsWUFBWW52QixLQUFaLEdBQW9CaXZCLFFBQXhCLEVBQWlDO0FBQy9CQSx5QkFBV0UsWUFBWW52QixLQUF2QjtBQUNEO0FBQ0Y7O0FBRUQsZUFBS2dZLFFBQUwsQ0FBYy9DLE1BQWQsQ0FBcUJtQyxXQUFXNkQsR0FBWCxDQUFlRyxVQUFmLENBQTBCLEtBQUtwRCxRQUEvQixFQUF5QyxLQUFLa1MsT0FBOUMsRUFBdUQsZUFBdkQsRUFBd0UsS0FBS3AwQyxPQUFMLENBQWF1bUMsT0FBckYsRUFBOEYsS0FBS3ZtQyxPQUFMLENBQWF3bUMsT0FBYixHQUF1QjRTLGFBQXJILEVBQW9JLElBQXBJLENBQXJCLEVBQWdLOTdCLEdBQWhLLENBQW9LO0FBQ2xLLHFCQUFTNjdCLFdBQVksS0FBS241QyxPQUFMLENBQWF3bUMsT0FBYixHQUF1QixDQURzSDtBQUVsSyxzQkFBVTtBQUZ3SixXQUFwSztBQUlBLGVBQUt5UyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELGFBQUsvVyxRQUFMLENBQWMvQyxNQUFkLENBQXFCbUMsV0FBVzZELEdBQVgsQ0FBZUcsVUFBZixDQUEwQixLQUFLcEQsUUFBL0IsRUFBeUMsS0FBS2tTLE9BQTlDLEVBQXVEaHBCLFFBQXZELEVBQWlFLEtBQUtwckIsT0FBTCxDQUFhdW1DLE9BQTlFLEVBQXVGLEtBQUt2bUMsT0FBTCxDQUFhd21DLE9BQXBHLENBQXJCOztBQUVBLGVBQU0sQ0FBQ2xGLFdBQVc2RCxHQUFYLENBQWVDLGdCQUFmLENBQWdDLEtBQUtsRCxRQUFyQyxFQUErQyxLQUFLd1csT0FBcEQsRUFBNkQsSUFBN0QsQ0FBRCxJQUF1RSxLQUFLRyxPQUFsRixFQUEwRjtBQUN4RixlQUFLUyxXQUFMLENBQWlCbHVCLFFBQWpCO0FBQ0EsZUFBS211QixZQUFMO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBcEtXO0FBQUE7QUFBQSxnQ0F5S0Q7QUFDUixZQUFJL1csUUFBUSxJQUFaO0FBQ0EsYUFBS04sUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUI7QUFDZiw2QkFBbUIsS0FBSzZjLElBQUwsQ0FBVWtELElBQVYsQ0FBZSxJQUFmLENBREo7QUFFZiw4QkFBb0IsS0FBSzNYLEtBQUwsQ0FBVzJYLElBQVgsQ0FBZ0IsSUFBaEIsQ0FGTDtBQUdmLCtCQUFxQixLQUFLOVMsTUFBTCxDQUFZOFMsSUFBWixDQUFpQixJQUFqQixDQUhOO0FBSWYsaUNBQXVCLEtBQUs4WSxZQUFMLENBQWtCOVksSUFBbEIsQ0FBdUIsSUFBdkI7QUFKUixTQUFqQjs7QUFPQSxZQUFHLEtBQUt6Z0MsT0FBTCxDQUFhczFCLEtBQWhCLEVBQXNCO0FBQ3BCLGVBQUs4ZSxPQUFMLENBQWFqNkIsR0FBYixDQUFpQiwrQ0FBakIsRUFDQ3VHLEVBREQsQ0FDSSx3QkFESixFQUM4QixZQUFVO0FBQ3RDLGdCQUFJODRCLFdBQVdyWSxFQUFFLE1BQUYsRUFBVTNsQixJQUFWLEVBQWY7QUFDQSxnQkFBRyxPQUFPZytCLFNBQVNDLFNBQWhCLEtBQStCLFdBQS9CLElBQThDRCxTQUFTQyxTQUFULEtBQXVCLE9BQXhFLEVBQWlGO0FBQy9FOW1CLDJCQUFhNlAsTUFBTTlQLE9BQW5CO0FBQ0E4UCxvQkFBTTlQLE9BQU4sR0FBZ0JsWSxXQUFXLFlBQVU7QUFDbkNnb0Isc0JBQU1qRixJQUFOO0FBQ0FpRixzQkFBTTRSLE9BQU4sQ0FBYzU0QixJQUFkLENBQW1CLE9BQW5CLEVBQTRCLElBQTVCO0FBQ0QsZUFIZSxFQUdiZ25CLE1BQU14aUMsT0FBTixDQUFjMDVDLFVBSEQsQ0FBaEI7QUFJRDtBQUNGLFdBVkQsRUFVR2g1QixFQVZILENBVU0sd0JBVk4sRUFVZ0MsWUFBVTtBQUN4Q2lTLHlCQUFhNlAsTUFBTTlQLE9BQW5CO0FBQ0E4UCxrQkFBTTlQLE9BQU4sR0FBZ0JsWSxXQUFXLFlBQVU7QUFDbkNnb0Isb0JBQU0xWixLQUFOO0FBQ0EwWixvQkFBTTRSLE9BQU4sQ0FBYzU0QixJQUFkLENBQW1CLE9BQW5CLEVBQTRCLEtBQTVCO0FBQ0QsYUFIZSxFQUdiZ25CLE1BQU14aUMsT0FBTixDQUFjMDVDLFVBSEQsQ0FBaEI7QUFJRCxXQWhCRDtBQWlCQSxjQUFHLEtBQUsxNUMsT0FBTCxDQUFhMjVDLFNBQWhCLEVBQTBCO0FBQ3hCLGlCQUFLelgsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsK0NBQWxCLEVBQ0t1RyxFQURMLENBQ1Esd0JBRFIsRUFDa0MsWUFBVTtBQUN0Q2lTLDJCQUFhNlAsTUFBTTlQLE9BQW5CO0FBQ0QsYUFITCxFQUdPaFMsRUFIUCxDQUdVLHdCQUhWLEVBR29DLFlBQVU7QUFDeENpUywyQkFBYTZQLE1BQU05UCxPQUFuQjtBQUNBOFAsb0JBQU05UCxPQUFOLEdBQWdCbFksV0FBVyxZQUFVO0FBQ25DZ29CLHNCQUFNMVosS0FBTjtBQUNBMFosc0JBQU00UixPQUFOLENBQWM1NEIsSUFBZCxDQUFtQixPQUFuQixFQUE0QixLQUE1QjtBQUNELGVBSGUsRUFHYmduQixNQUFNeGlDLE9BQU4sQ0FBYzA1QyxVQUhELENBQWhCO0FBSUQsYUFUTDtBQVVEO0FBQ0Y7QUFDRCxhQUFLdEYsT0FBTCxDQUFhbCtCLEdBQWIsQ0FBaUIsS0FBS2dzQixRQUF0QixFQUFnQ3hoQixFQUFoQyxDQUFtQyxxQkFBbkMsRUFBMEQsVUFBUzNZLENBQVQsRUFBWTs7QUFFcEUsY0FBSW1uQyxVQUFVL04sRUFBRSxJQUFGLENBQWQ7QUFBQSxjQUNFeVksMkJBQTJCdFksV0FBV3dGLFFBQVgsQ0FBb0JlLGFBQXBCLENBQWtDckYsTUFBTU4sUUFBeEMsQ0FEN0I7O0FBR0FaLHFCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsVUFBakMsRUFBNkM7QUFDM0N3MUIsa0JBQU0sZ0JBQVc7QUFDZixrQkFBSTJSLFFBQVE1NkIsRUFBUixDQUFXa3VCLE1BQU00UixPQUFqQixDQUFKLEVBQStCO0FBQzdCNVIsc0JBQU1qRixJQUFOO0FBQ0FpRixzQkFBTU4sUUFBTixDQUFlLzBCLElBQWYsQ0FBb0IsVUFBcEIsRUFBZ0MsQ0FBQyxDQUFqQyxFQUFvQ3VYLEtBQXBDO0FBQ0EzYyxrQkFBRThhLGNBQUY7QUFDRDtBQUNGLGFBUDBDO0FBUTNDaUcsbUJBQU8saUJBQVc7QUFDaEIwWixvQkFBTTFaLEtBQU47QUFDQTBaLG9CQUFNNFIsT0FBTixDQUFjMXZCLEtBQWQ7QUFDRDtBQVgwQyxXQUE3QztBQWFELFNBbEJEO0FBbUJEOztBQUVEOzs7Ozs7QUF0T1c7QUFBQTtBQUFBLHdDQTJPTztBQUNmLFlBQUk4eUIsUUFBUXJXLEVBQUU1a0MsU0FBU3FuQixJQUFYLEVBQWlCN08sR0FBakIsQ0FBcUIsS0FBS210QixRQUExQixDQUFaO0FBQUEsWUFDSU0sUUFBUSxJQURaO0FBRUFnVixjQUFNcjlCLEdBQU4sQ0FBVSxtQkFBVixFQUNNdUcsRUFETixDQUNTLG1CQURULEVBQzhCLFVBQVMzWSxDQUFULEVBQVc7QUFDbEMsY0FBR3k2QixNQUFNNFIsT0FBTixDQUFjOS9CLEVBQWQsQ0FBaUJ2TSxFQUFFekgsTUFBbkIsS0FBOEJraUMsTUFBTTRSLE9BQU4sQ0FBY3pvQyxJQUFkLENBQW1CNUQsRUFBRXpILE1BQXJCLEVBQTZCaEMsTUFBOUQsRUFBc0U7QUFDcEU7QUFDRDtBQUNELGNBQUdra0MsTUFBTU4sUUFBTixDQUFldjJCLElBQWYsQ0FBb0I1RCxFQUFFekgsTUFBdEIsRUFBOEJoQyxNQUFqQyxFQUF5QztBQUN2QztBQUNEO0FBQ0Rra0MsZ0JBQU0xWixLQUFOO0FBQ0EwdUIsZ0JBQU1yOUIsR0FBTixDQUFVLG1CQUFWO0FBQ0QsU0FWTjtBQVdGOztBQUVEOzs7Ozs7O0FBM1BXO0FBQUE7QUFBQSw2QkFpUUo7QUFDTDtBQUNBOzs7O0FBSUEsYUFBSytuQixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLHFCQUF0QixFQUE2QyxLQUFLdWQsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBN0M7QUFDQSxhQUFLaW5DLE9BQUwsQ0FBYXBnQixRQUFiLENBQXNCLE9BQXRCLEVBQ0s3bUIsSUFETCxDQUNVLEVBQUMsaUJBQWlCLElBQWxCLEVBRFY7QUFFQTtBQUNBLGFBQUtvc0MsWUFBTDtBQUNBLGFBQUtyWCxRQUFMLENBQWNsTyxRQUFkLENBQXVCLFNBQXZCLEVBQ0s3bUIsSUFETCxDQUNVLEVBQUMsZUFBZSxLQUFoQixFQURWOztBQUdBLFlBQUcsS0FBS25OLE9BQUwsQ0FBYTY1QyxTQUFoQixFQUEwQjtBQUN4QixjQUFJN1IsYUFBYTFHLFdBQVd3RixRQUFYLENBQW9CZSxhQUFwQixDQUFrQyxLQUFLM0YsUUFBdkMsQ0FBakI7QUFDQSxjQUFHOEYsV0FBVzFwQyxNQUFkLEVBQXFCO0FBQ25CMHBDLHVCQUFXeG9DLEVBQVgsQ0FBYyxDQUFkLEVBQWlCa2xCLEtBQWpCO0FBQ0Q7QUFDRjs7QUFFRCxZQUFHLEtBQUsxa0IsT0FBTCxDQUFhdTNDLFlBQWhCLEVBQTZCO0FBQUUsZUFBS3VDLGVBQUw7QUFBeUI7O0FBRXhELFlBQUksS0FBSzk1QyxPQUFMLENBQWErbkMsU0FBakIsRUFBNEI7QUFDMUJ6RyxxQkFBV3dGLFFBQVgsQ0FBb0JpQixTQUFwQixDQUE4QixLQUFLN0YsUUFBbkM7QUFDRDs7QUFFRDs7OztBQUlBLGFBQUtBLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0Isa0JBQXRCLEVBQTBDLENBQUMsS0FBS3VkLFFBQU4sQ0FBMUM7QUFDRDs7QUFFRDs7Ozs7O0FBblNXO0FBQUE7QUFBQSw4QkF3U0g7QUFDTixZQUFHLENBQUMsS0FBS0EsUUFBTCxDQUFjek4sUUFBZCxDQUF1QixTQUF2QixDQUFKLEVBQXNDO0FBQ3BDLGlCQUFPLEtBQVA7QUFDRDtBQUNELGFBQUt5TixRQUFMLENBQWM3TixXQUFkLENBQTBCLFNBQTFCLEVBQ0tsbkIsSUFETCxDQUNVLEVBQUMsZUFBZSxJQUFoQixFQURWOztBQUdBLGFBQUtpbkMsT0FBTCxDQUFhL2YsV0FBYixDQUF5QixPQUF6QixFQUNLbG5CLElBREwsQ0FDVSxlQURWLEVBQzJCLEtBRDNCOztBQUdBLFlBQUcsS0FBSzhyQyxZQUFSLEVBQXFCO0FBQ25CLGNBQUljLG1CQUFtQixLQUFLbkIsZ0JBQUwsRUFBdkI7QUFDQSxjQUFHbUIsZ0JBQUgsRUFBb0I7QUFDbEIsaUJBQUs3WCxRQUFMLENBQWM3TixXQUFkLENBQTBCMGxCLGdCQUExQjtBQUNEO0FBQ0QsZUFBSzdYLFFBQUwsQ0FBY2xPLFFBQWQsQ0FBdUIsS0FBS2gwQixPQUFMLENBQWEyNEMsYUFBcEM7QUFDSSxxQkFESixDQUNnQnI3QixHQURoQixDQUNvQixFQUFDMlIsUUFBUSxFQUFULEVBQWEvRSxPQUFPLEVBQXBCLEVBRHBCO0FBRUEsZUFBSyt1QixZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsZUFBS0osT0FBTCxHQUFlLENBQWY7QUFDQSxlQUFLQyxhQUFMLENBQW1CeDZDLE1BQW5CLEdBQTRCLENBQTVCO0FBQ0Q7QUFDRDs7OztBQUlBLGFBQUs0akMsUUFBTCxDQUFjdmQsT0FBZCxDQUFzQixrQkFBdEIsRUFBMEMsQ0FBQyxLQUFLdWQsUUFBTixDQUExQzs7QUFFQSxZQUFJLEtBQUtsaUMsT0FBTCxDQUFhK25DLFNBQWpCLEVBQTRCO0FBQzFCekcscUJBQVd3RixRQUFYLENBQW9CcUIsWUFBcEIsQ0FBaUMsS0FBS2pHLFFBQXRDO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUF4VVc7QUFBQTtBQUFBLCtCQTRVRjtBQUNQLFlBQUcsS0FBS0EsUUFBTCxDQUFjek4sUUFBZCxDQUF1QixTQUF2QixDQUFILEVBQXFDO0FBQ25DLGNBQUcsS0FBSzJmLE9BQUwsQ0FBYTU0QixJQUFiLENBQWtCLE9BQWxCLENBQUgsRUFBK0I7QUFDL0IsZUFBS3NOLEtBQUw7QUFDRCxTQUhELE1BR0s7QUFDSCxlQUFLeVUsSUFBTDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBclZXO0FBQUE7QUFBQSxnQ0F5VkQ7QUFDUixhQUFLMkUsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsYUFBbEIsRUFBaUN1VCxJQUFqQztBQUNBLGFBQUswbUIsT0FBTCxDQUFhajZCLEdBQWIsQ0FBaUIsY0FBakI7O0FBRUFtbkIsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUE5VlU7O0FBQUE7QUFBQTs7QUFpV2JvVyxXQUFTM0ksUUFBVCxHQUFvQjtBQUNsQjs7Ozs7O0FBTUE2SSxpQkFBYSxJQVBLO0FBUWxCOzs7Ozs7QUFNQWlCLGdCQUFZLEdBZE07QUFlbEI7Ozs7OztBQU1BcGtCLFdBQU8sS0FyQlc7QUFzQmxCOzs7Ozs7QUFNQXFrQixlQUFXLEtBNUJPO0FBNkJsQjs7Ozs7O0FBTUFwVCxhQUFTLENBbkNTO0FBb0NsQjs7Ozs7O0FBTUFDLGFBQVMsQ0ExQ1M7QUEyQ2xCOzs7Ozs7QUFNQW1TLG1CQUFlLEVBakRHO0FBa0RsQjs7Ozs7O0FBTUE1USxlQUFXLEtBeERPO0FBeURsQjs7Ozs7O0FBTUE4UixlQUFXLEtBL0RPO0FBZ0VsQjs7Ozs7O0FBTUF0QyxrQkFBYztBQXRFSSxHQUFwQjs7QUF5RUE7QUFDQWpXLGFBQVdJLE1BQVgsQ0FBa0I2VyxRQUFsQixFQUE0QixVQUE1QjtBQUVDLENBN2FBLENBNmFDaDdDLE1BN2FELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7QUFGYSxNQVVQNlksWUFWTztBQVdYOzs7Ozs7O0FBT0EsMEJBQVl6VSxPQUFaLEVBQXFCdmxDLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUtraUMsUUFBTCxHQUFnQnFELE9BQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhaTZDLGFBQWFwSyxRQUExQixFQUFvQyxLQUFLMU4sUUFBTCxDQUFjMW1CLElBQWQsRUFBcEMsRUFBMER4YixPQUExRCxDQUFmOztBQUVBc2hDLGlCQUFXdUosSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0IsS0FBSzVJLFFBQTdCLEVBQXVDLFVBQXZDO0FBQ0EsV0FBS0ssS0FBTDs7QUFFQWpCLGlCQUFXUSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLGNBQWhDO0FBQ0FSLGlCQUFXd0YsUUFBWCxDQUFvQjVyQixRQUFwQixDQUE2QixjQUE3QixFQUE2QztBQUMzQyxpQkFBUyxNQURrQztBQUUzQyxpQkFBUyxNQUZrQztBQUczQyx1QkFBZSxNQUg0QjtBQUkzQyxvQkFBWSxJQUorQjtBQUszQyxzQkFBYyxNQUw2QjtBQU0zQyxzQkFBYyxVQU42QjtBQU8zQyxrQkFBVTtBQVBpQyxPQUE3QztBQVNEOztBQUVEOzs7Ozs7O0FBckNXO0FBQUE7QUFBQSw4QkEwQ0g7QUFDTixZQUFJKytCLE9BQU8sS0FBSy9YLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLCtCQUFuQixDQUFYO0FBQ0EsYUFBS3UyQixRQUFMLENBQWMzc0IsUUFBZCxDQUF1Qiw2QkFBdkIsRUFBc0RBLFFBQXRELENBQStELHNCQUEvRCxFQUF1RnllLFFBQXZGLENBQWdHLFdBQWhHOztBQUVBLGFBQUt1aUIsVUFBTCxHQUFrQixLQUFLclUsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsbUJBQW5CLENBQWxCO0FBQ0EsYUFBS2lvQyxLQUFMLEdBQWEsS0FBSzFSLFFBQUwsQ0FBYzNzQixRQUFkLENBQXVCLG1CQUF2QixDQUFiO0FBQ0EsYUFBS3ErQixLQUFMLENBQVdqb0MsSUFBWCxDQUFnQix3QkFBaEIsRUFBMENxb0IsUUFBMUMsQ0FBbUQsS0FBS2gwQixPQUFMLENBQWFrNkMsYUFBaEU7O0FBRUEsWUFBSSxLQUFLaFksUUFBTCxDQUFjek4sUUFBZCxDQUF1QixLQUFLejBCLE9BQUwsQ0FBYW02QyxVQUFwQyxLQUFtRCxLQUFLbjZDLE9BQUwsQ0FBYW82QyxTQUFiLEtBQTJCLE9BQTlFLElBQXlGOVksV0FBV0csR0FBWCxFQUF6RixJQUE2RyxLQUFLUyxRQUFMLENBQWM3ckIsT0FBZCxDQUFzQixnQkFBdEIsRUFBd0MvQixFQUF4QyxDQUEyQyxHQUEzQyxDQUFqSCxFQUFrSztBQUNoSyxlQUFLdFUsT0FBTCxDQUFhbzZDLFNBQWIsR0FBeUIsT0FBekI7QUFDQUgsZUFBS2ptQixRQUFMLENBQWMsWUFBZDtBQUNELFNBSEQsTUFHTztBQUNMaW1CLGVBQUtqbUIsUUFBTCxDQUFjLGFBQWQ7QUFDRDtBQUNELGFBQUtxbUIsT0FBTCxHQUFlLEtBQWY7QUFDQSxhQUFLdkssT0FBTDtBQUNEO0FBMURVO0FBQUE7QUFBQSxvQ0E0REc7QUFDWixlQUFPLEtBQUs4RCxLQUFMLENBQVd0MkIsR0FBWCxDQUFlLFNBQWYsTUFBOEIsT0FBckM7QUFDRDs7QUFFRDs7Ozs7O0FBaEVXO0FBQUE7QUFBQSxnQ0FxRUQ7QUFDUixZQUFJa2xCLFFBQVEsSUFBWjtBQUFBLFlBQ0k4WCxXQUFXLGtCQUFrQjU5QyxNQUFsQixJQUE2QixPQUFPQSxPQUFPNjlDLFlBQWQsS0FBK0IsV0FEM0U7QUFBQSxZQUVJQyxXQUFXLDRCQUZmOztBQUlBO0FBQ0EsWUFBSUMsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFTMXlDLENBQVQsRUFBWTtBQUM5QixjQUFJaTdCLFFBQVE3QixFQUFFcDVCLEVBQUV6SCxNQUFKLEVBQVlnVyxZQUFaLENBQXlCLElBQXpCLFFBQW1Da2tDLFFBQW5DLENBQVo7QUFBQSxjQUNJRSxTQUFTMVgsTUFBTXZPLFFBQU4sQ0FBZStsQixRQUFmLENBRGI7QUFBQSxjQUVJRyxhQUFhM1gsTUFBTTcxQixJQUFOLENBQVcsZUFBWCxNQUFnQyxNQUZqRDtBQUFBLGNBR0lrK0IsT0FBT3JJLE1BQU16dEIsUUFBTixDQUFlLHNCQUFmLENBSFg7O0FBS0EsY0FBSW1sQyxNQUFKLEVBQVk7QUFDVixnQkFBSUMsVUFBSixFQUFnQjtBQUNkLGtCQUFJLENBQUNuWSxNQUFNeGlDLE9BQU4sQ0FBY3UzQyxZQUFmLElBQWdDLENBQUMvVSxNQUFNeGlDLE9BQU4sQ0FBYzQ2QyxTQUFmLElBQTRCLENBQUNOLFFBQTdELElBQTJFOVgsTUFBTXhpQyxPQUFOLENBQWM2NkMsV0FBZCxJQUE2QlAsUUFBNUcsRUFBdUg7QUFBRTtBQUFTLGVBQWxJLE1BQ0s7QUFDSHZ5QyxrQkFBRXFkLHdCQUFGO0FBQ0FyZCxrQkFBRThhLGNBQUY7QUFDQTJmLHNCQUFNMlYsS0FBTixDQUFZblYsS0FBWjtBQUNEO0FBQ0YsYUFQRCxNQU9PO0FBQ0xqN0IsZ0JBQUU4YSxjQUFGO0FBQ0E5YSxnQkFBRXFkLHdCQUFGO0FBQ0FvZCxvQkFBTThVLEtBQU4sQ0FBWWpNLElBQVo7QUFDQXJJLG9CQUFNOXNCLEdBQU4sQ0FBVThzQixNQUFNMXNCLFlBQU4sQ0FBbUJrc0IsTUFBTU4sUUFBekIsUUFBdUNzWSxRQUF2QyxDQUFWLEVBQThEcnRDLElBQTlELENBQW1FLGVBQW5FLEVBQW9GLElBQXBGO0FBQ0Q7QUFDRjtBQUNGLFNBckJEOztBQXVCQSxZQUFJLEtBQUtuTixPQUFMLENBQWE0NkMsU0FBYixJQUEwQk4sUUFBOUIsRUFBd0M7QUFDdEMsZUFBSy9ELFVBQUwsQ0FBZ0I3MUIsRUFBaEIsQ0FBbUIsa0RBQW5CLEVBQXVFKzVCLGFBQXZFO0FBQ0Q7O0FBRUQ7QUFDQSxZQUFHalksTUFBTXhpQyxPQUFOLENBQWM4NkMsa0JBQWpCLEVBQW9DO0FBQ2xDLGVBQUt2RSxVQUFMLENBQWdCNzFCLEVBQWhCLENBQW1CLHVCQUFuQixFQUE0QyxVQUFTM1ksQ0FBVCxFQUFZO0FBQ3RELGdCQUFJaTdCLFFBQVE3QixFQUFFLElBQUYsQ0FBWjtBQUFBLGdCQUNJdVosU0FBUzFYLE1BQU12TyxRQUFOLENBQWUrbEIsUUFBZixDQURiO0FBRUEsZ0JBQUcsQ0FBQ0UsTUFBSixFQUFXO0FBQ1RsWSxvQkFBTTJWLEtBQU47QUFDRDtBQUNGLFdBTkQ7QUFPRDs7QUFFRCxZQUFJLENBQUMsS0FBS240QyxPQUFMLENBQWErNkMsWUFBbEIsRUFBZ0M7QUFDOUIsZUFBS3hFLFVBQUwsQ0FBZ0I3MUIsRUFBaEIsQ0FBbUIsNEJBQW5CLEVBQWlELFVBQVMzWSxDQUFULEVBQVk7QUFDM0QsZ0JBQUlpN0IsUUFBUTdCLEVBQUUsSUFBRixDQUFaO0FBQUEsZ0JBQ0l1WixTQUFTMVgsTUFBTXZPLFFBQU4sQ0FBZStsQixRQUFmLENBRGI7O0FBR0EsZ0JBQUlFLE1BQUosRUFBWTtBQUNWL25CLDJCQUFhcVEsTUFBTXhuQixJQUFOLENBQVcsUUFBWCxDQUFiO0FBQ0F3bkIsb0JBQU14bkIsSUFBTixDQUFXLFFBQVgsRUFBcUJoQixXQUFXLFlBQVc7QUFDekNnb0Isc0JBQU04VSxLQUFOLENBQVl0VSxNQUFNenRCLFFBQU4sQ0FBZSxzQkFBZixDQUFaO0FBQ0QsZUFGb0IsRUFFbEJpdEIsTUFBTXhpQyxPQUFOLENBQWMwNUMsVUFGSSxDQUFyQjtBQUdEO0FBQ0YsV0FWRCxFQVVHaDVCLEVBVkgsQ0FVTSw0QkFWTixFQVVvQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQzlDLGdCQUFJaTdCLFFBQVE3QixFQUFFLElBQUYsQ0FBWjtBQUFBLGdCQUNJdVosU0FBUzFYLE1BQU12TyxRQUFOLENBQWUrbEIsUUFBZixDQURiO0FBRUEsZ0JBQUlFLFVBQVVsWSxNQUFNeGlDLE9BQU4sQ0FBY2c3QyxTQUE1QixFQUF1QztBQUNyQyxrQkFBSWhZLE1BQU03MUIsSUFBTixDQUFXLGVBQVgsTUFBZ0MsTUFBaEMsSUFBMENxMUIsTUFBTXhpQyxPQUFOLENBQWM0NkMsU0FBNUQsRUFBdUU7QUFBRSx1QkFBTyxLQUFQO0FBQWU7O0FBRXhGam9CLDJCQUFhcVEsTUFBTXhuQixJQUFOLENBQVcsUUFBWCxDQUFiO0FBQ0F3bkIsb0JBQU14bkIsSUFBTixDQUFXLFFBQVgsRUFBcUJoQixXQUFXLFlBQVc7QUFDekNnb0Isc0JBQU0yVixLQUFOLENBQVluVixLQUFaO0FBQ0QsZUFGb0IsRUFFbEJSLE1BQU14aUMsT0FBTixDQUFjaTdDLFdBRkksQ0FBckI7QUFHRDtBQUNGLFdBckJEO0FBc0JEO0FBQ0QsYUFBSzFFLFVBQUwsQ0FBZ0I3MUIsRUFBaEIsQ0FBbUIseUJBQW5CLEVBQThDLFVBQVMzWSxDQUFULEVBQVk7QUFDeEQsY0FBSW02QixXQUFXZixFQUFFcDVCLEVBQUV6SCxNQUFKLEVBQVlnVyxZQUFaLENBQXlCLElBQXpCLEVBQStCLG1CQUEvQixDQUFmO0FBQUEsY0FDSTRrQyxRQUFRMVksTUFBTW9SLEtBQU4sQ0FBWTU5QixLQUFaLENBQWtCa3NCLFFBQWxCLElBQThCLENBQUMsQ0FEM0M7QUFBQSxjQUVJMlQsWUFBWXFGLFFBQVExWSxNQUFNb1IsS0FBZCxHQUFzQjFSLFNBQVMzdEIsUUFBVCxDQUFrQixJQUFsQixFQUF3QjJCLEdBQXhCLENBQTRCZ3NCLFFBQTVCLENBRnRDO0FBQUEsY0FHSTRULFlBSEo7QUFBQSxjQUlJQyxZQUpKOztBQU1BRixvQkFBVTcyQyxJQUFWLENBQWUsVUFBU0ksQ0FBVCxFQUFZO0FBQ3pCLGdCQUFJK2hDLEVBQUUsSUFBRixFQUFRN3NCLEVBQVIsQ0FBVzR0QixRQUFYLENBQUosRUFBMEI7QUFDeEI0VCw2QkFBZUQsVUFBVXIyQyxFQUFWLENBQWFKLElBQUUsQ0FBZixDQUFmO0FBQ0EyMkMsNkJBQWVGLFVBQVVyMkMsRUFBVixDQUFhSixJQUFFLENBQWYsQ0FBZjtBQUNBO0FBQ0Q7QUFDRixXQU5EOztBQVFBLGNBQUlvTCxjQUFjLFNBQWRBLFdBQWMsR0FBVztBQUMzQixnQkFBSSxDQUFDMDNCLFNBQVM1dEIsRUFBVCxDQUFZLGFBQVosQ0FBTCxFQUFpQztBQUMvQnloQywyQkFBYXhnQyxRQUFiLENBQXNCLFNBQXRCLEVBQWlDbVAsS0FBakM7QUFDQTNjLGdCQUFFOGEsY0FBRjtBQUNEO0FBQ0YsV0FMRDtBQUFBLGNBS0dzNEIsY0FBYyxTQUFkQSxXQUFjLEdBQVc7QUFDMUJyRix5QkFBYXZnQyxRQUFiLENBQXNCLFNBQXRCLEVBQWlDbVAsS0FBakM7QUFDQTNjLGNBQUU4YSxjQUFGO0FBQ0QsV0FSRDtBQUFBLGNBUUd1NEIsVUFBVSxTQUFWQSxPQUFVLEdBQVc7QUFDdEIsZ0JBQUkvUCxPQUFPbkosU0FBUzNzQixRQUFULENBQWtCLHdCQUFsQixDQUFYO0FBQ0EsZ0JBQUk4MUIsS0FBSy9zQyxNQUFULEVBQWlCO0FBQ2Zra0Msb0JBQU04VSxLQUFOLENBQVlqTSxJQUFaO0FBQ0FuSix1QkFBU3YyQixJQUFULENBQWMsY0FBZCxFQUE4QitZLEtBQTlCO0FBQ0EzYyxnQkFBRThhLGNBQUY7QUFDRCxhQUpELE1BSU87QUFBRTtBQUFTO0FBQ25CLFdBZkQ7QUFBQSxjQWVHdzRCLFdBQVcsU0FBWEEsUUFBVyxHQUFXO0FBQ3ZCO0FBQ0EsZ0JBQUl2eUIsUUFBUW9aLFNBQVNqM0IsTUFBVCxDQUFnQixJQUFoQixFQUFzQkEsTUFBdEIsQ0FBNkIsSUFBN0IsQ0FBWjtBQUNBNmQsa0JBQU12VCxRQUFOLENBQWUsU0FBZixFQUEwQm1QLEtBQTFCO0FBQ0E4ZCxrQkFBTTJWLEtBQU4sQ0FBWXJ2QixLQUFaO0FBQ0EvZ0IsY0FBRThhLGNBQUY7QUFDQTtBQUNELFdBdEJEO0FBdUJBLGNBQUl5a0IsWUFBWTtBQUNkL0osa0JBQU02ZCxPQURRO0FBRWR0eUIsbUJBQU8saUJBQVc7QUFDaEIwWixvQkFBTTJWLEtBQU4sQ0FBWTNWLE1BQU1OLFFBQWxCO0FBQ0FNLG9CQUFNK1QsVUFBTixDQUFpQjVxQyxJQUFqQixDQUFzQixTQUF0QixFQUFpQytZLEtBQWpDLEdBRmdCLENBRTBCO0FBQzFDM2MsZ0JBQUU4YSxjQUFGO0FBQ0QsYUFOYTtBQU9kOGtCLHFCQUFTLG1CQUFXO0FBQ2xCNS9CLGdCQUFFcWQsd0JBQUY7QUFDRDtBQVRhLFdBQWhCOztBQVlBLGNBQUk4MUIsS0FBSixFQUFXO0FBQ1QsZ0JBQUkxWSxNQUFNOFksV0FBTixFQUFKLEVBQXlCO0FBQUU7QUFDekIsa0JBQUloYSxXQUFXRyxHQUFYLEVBQUosRUFBc0I7QUFBRTtBQUN0Qk4sa0JBQUVwaEMsTUFBRixDQUFTdW5DLFNBQVQsRUFBb0I7QUFDbEIyTSx3QkFBTXpwQyxXQURZO0FBRWxCb3FDLHNCQUFJdUcsV0FGYztBQUdsQjFsQyx3QkFBTTRsQyxRQUhZO0FBSWxCMUcsNEJBQVV5RztBQUpRLGlCQUFwQjtBQU1ELGVBUEQsTUFPTztBQUFFO0FBQ1BqYSxrQkFBRXBoQyxNQUFGLENBQVN1bkMsU0FBVCxFQUFvQjtBQUNsQjJNLHdCQUFNenBDLFdBRFk7QUFFbEJvcUMsc0JBQUl1RyxXQUZjO0FBR2xCMWxDLHdCQUFNMmxDLE9BSFk7QUFJbEJ6Ryw0QkFBVTBHO0FBSlEsaUJBQXBCO0FBTUQ7QUFDRixhQWhCRCxNQWdCTztBQUFFO0FBQ1Asa0JBQUkvWixXQUFXRyxHQUFYLEVBQUosRUFBc0I7QUFBRTtBQUN0Qk4sa0JBQUVwaEMsTUFBRixDQUFTdW5DLFNBQVQsRUFBb0I7QUFDbEI3eEIsd0JBQU0wbEMsV0FEWTtBQUVsQnhHLDRCQUFVbnFDLFdBRlE7QUFHbEJ5cEMsd0JBQU1tSCxPQUhZO0FBSWxCeEcsc0JBQUl5RztBQUpjLGlCQUFwQjtBQU1ELGVBUEQsTUFPTztBQUFFO0FBQ1BsYSxrQkFBRXBoQyxNQUFGLENBQVN1bkMsU0FBVCxFQUFvQjtBQUNsQjd4Qix3QkFBTWpMLFdBRFk7QUFFbEJtcUMsNEJBQVV3RyxXQUZRO0FBR2xCbEgsd0JBQU1tSCxPQUhZO0FBSWxCeEcsc0JBQUl5RztBQUpjLGlCQUFwQjtBQU1EO0FBQ0Y7QUFDRixXQWxDRCxNQWtDTztBQUFFO0FBQ1AsZ0JBQUkvWixXQUFXRyxHQUFYLEVBQUosRUFBc0I7QUFBRTtBQUN0Qk4sZ0JBQUVwaEMsTUFBRixDQUFTdW5DLFNBQVQsRUFBb0I7QUFDbEI3eEIsc0JBQU00bEMsUUFEWTtBQUVsQjFHLDBCQUFVeUcsT0FGUTtBQUdsQm5ILHNCQUFNenBDLFdBSFk7QUFJbEJvcUMsb0JBQUl1RztBQUpjLGVBQXBCO0FBTUQsYUFQRCxNQU9PO0FBQUU7QUFDUGhhLGdCQUFFcGhDLE1BQUYsQ0FBU3VuQyxTQUFULEVBQW9CO0FBQ2xCN3hCLHNCQUFNMmxDLE9BRFk7QUFFbEJ6RywwQkFBVTBHLFFBRlE7QUFHbEJwSCxzQkFBTXpwQyxXQUhZO0FBSWxCb3FDLG9CQUFJdUc7QUFKYyxlQUFwQjtBQU1EO0FBQ0Y7QUFDRDdaLHFCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsY0FBakMsRUFBaUR1L0IsU0FBakQ7QUFFRCxTQXZHRDtBQXdHRDs7QUFFRDs7Ozs7O0FBblBXO0FBQUE7QUFBQSx3Q0F3UE87QUFDaEIsWUFBSWtRLFFBQVFyVyxFQUFFNWtDLFNBQVNxbkIsSUFBWCxDQUFaO0FBQUEsWUFDSTRlLFFBQVEsSUFEWjtBQUVBZ1YsY0FBTXI5QixHQUFOLENBQVUsa0RBQVYsRUFDTXVHLEVBRE4sQ0FDUyxrREFEVCxFQUM2RCxVQUFTM1ksQ0FBVCxFQUFZO0FBQ2xFLGNBQUlvc0MsUUFBUTNSLE1BQU1OLFFBQU4sQ0FBZXYyQixJQUFmLENBQW9CNUQsRUFBRXpILE1BQXRCLENBQVo7QUFDQSxjQUFJNnpDLE1BQU03MUMsTUFBVixFQUFrQjtBQUFFO0FBQVM7O0FBRTdCa2tDLGdCQUFNMlYsS0FBTjtBQUNBWCxnQkFBTXI5QixHQUFOLENBQVUsa0RBQVY7QUFDRCxTQVBOO0FBUUQ7O0FBRUQ7Ozs7Ozs7O0FBclFXO0FBQUE7QUFBQSw0QkE0UUxreEIsSUE1UUssRUE0UUM7QUFDVixZQUFJOTdCLE1BQU0sS0FBS3FrQyxLQUFMLENBQVc1OUIsS0FBWCxDQUFpQixLQUFLNDlCLEtBQUwsQ0FBV2hvQyxNQUFYLENBQWtCLFVBQVN4TSxDQUFULEVBQVlpZSxFQUFaLEVBQWdCO0FBQzNELGlCQUFPOGpCLEVBQUU5akIsRUFBRixFQUFNMVIsSUFBTixDQUFXMC9CLElBQVgsRUFBaUIvc0MsTUFBakIsR0FBMEIsQ0FBakM7QUFDRCxTQUYwQixDQUFqQixDQUFWO0FBR0EsWUFBSWk5QyxRQUFRbFEsS0FBS3BnQyxNQUFMLENBQVksK0JBQVosRUFBNkNzSixRQUE3QyxDQUFzRCwrQkFBdEQsQ0FBWjtBQUNBLGFBQUs0akMsS0FBTCxDQUFXb0QsS0FBWCxFQUFrQmhzQyxHQUFsQjtBQUNBODdCLGFBQUsvdEIsR0FBTCxDQUFTLFlBQVQsRUFBdUIsUUFBdkIsRUFBaUMwVyxRQUFqQyxDQUEwQyxvQkFBMUMsRUFDSy9vQixNQURMLENBQ1ksK0JBRFosRUFDNkMrb0IsUUFEN0MsQ0FDc0QsV0FEdEQ7QUFFQSxZQUFJMGUsUUFBUXBSLFdBQVc2RCxHQUFYLENBQWVDLGdCQUFmLENBQWdDaUcsSUFBaEMsRUFBc0MsSUFBdEMsRUFBNEMsSUFBNUMsQ0FBWjtBQUNBLFlBQUksQ0FBQ3FILEtBQUwsRUFBWTtBQUNWLGNBQUk4SSxXQUFXLEtBQUt4N0MsT0FBTCxDQUFhbzZDLFNBQWIsS0FBMkIsTUFBM0IsR0FBb0MsUUFBcEMsR0FBK0MsT0FBOUQ7QUFBQSxjQUNJcUIsWUFBWXBRLEtBQUtwZ0MsTUFBTCxDQUFZLDZCQUFaLENBRGhCO0FBRUF3d0Msb0JBQVVwbkIsV0FBVixXQUE4Qm1uQixRQUE5QixFQUEwQ3huQixRQUExQyxZQUE0RCxLQUFLaDBCLE9BQUwsQ0FBYW82QyxTQUF6RTtBQUNBMUgsa0JBQVFwUixXQUFXNkQsR0FBWCxDQUFlQyxnQkFBZixDQUFnQ2lHLElBQWhDLEVBQXNDLElBQXRDLEVBQTRDLElBQTVDLENBQVI7QUFDQSxjQUFJLENBQUNxSCxLQUFMLEVBQVk7QUFDVitJLHNCQUFVcG5CLFdBQVYsWUFBK0IsS0FBS3IwQixPQUFMLENBQWFvNkMsU0FBNUMsRUFBeURwbUIsUUFBekQsQ0FBa0UsYUFBbEU7QUFDRDtBQUNELGVBQUtxbUIsT0FBTCxHQUFlLElBQWY7QUFDRDtBQUNEaFAsYUFBSy90QixHQUFMLENBQVMsWUFBVCxFQUF1QixFQUF2QjtBQUNBLFlBQUksS0FBS3RkLE9BQUwsQ0FBYXUzQyxZQUFqQixFQUErQjtBQUFFLGVBQUt1QyxlQUFMO0FBQXlCO0FBQzFEOzs7O0FBSUEsYUFBSzVYLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0Isc0JBQXRCLEVBQThDLENBQUMwbUIsSUFBRCxDQUE5QztBQUNEOztBQUVEOzs7Ozs7OztBQXhTVztBQUFBO0FBQUEsNEJBK1NMckksS0EvU0ssRUErU0V6ekIsR0EvU0YsRUErU087QUFDaEIsWUFBSW1zQyxRQUFKO0FBQ0EsWUFBSTFZLFNBQVNBLE1BQU0xa0MsTUFBbkIsRUFBMkI7QUFDekJvOUMscUJBQVcxWSxLQUFYO0FBQ0QsU0FGRCxNQUVPLElBQUl6ekIsUUFBUTVPLFNBQVosRUFBdUI7QUFDNUIrNkMscUJBQVcsS0FBSzlILEtBQUwsQ0FBVzcrQixHQUFYLENBQWUsVUFBUzNWLENBQVQsRUFBWWllLEVBQVosRUFBZ0I7QUFDeEMsbUJBQU9qZSxNQUFNbVEsR0FBYjtBQUNELFdBRlUsQ0FBWDtBQUdELFNBSk0sTUFLRjtBQUNIbXNDLHFCQUFXLEtBQUt4WixRQUFoQjtBQUNEO0FBQ0QsWUFBSXlaLG1CQUFtQkQsU0FBU2puQixRQUFULENBQWtCLFdBQWxCLEtBQWtDaW5CLFNBQVMvdkMsSUFBVCxDQUFjLFlBQWQsRUFBNEJyTixNQUE1QixHQUFxQyxDQUE5Rjs7QUFFQSxZQUFJcTlDLGdCQUFKLEVBQXNCO0FBQ3BCRCxtQkFBUy92QyxJQUFULENBQWMsY0FBZCxFQUE4QnVLLEdBQTlCLENBQWtDd2xDLFFBQWxDLEVBQTRDdnVDLElBQTVDLENBQWlEO0FBQy9DLDZCQUFpQjtBQUQ4QixXQUFqRCxFQUVHa25CLFdBRkgsQ0FFZSxXQUZmOztBQUlBcW5CLG1CQUFTL3ZDLElBQVQsQ0FBYyx1QkFBZCxFQUF1QzBvQixXQUF2QyxDQUFtRCxvQkFBbkQ7O0FBRUEsY0FBSSxLQUFLZ21CLE9BQUwsSUFBZ0JxQixTQUFTL3ZDLElBQVQsQ0FBYyxhQUFkLEVBQTZCck4sTUFBakQsRUFBeUQ7QUFDdkQsZ0JBQUlrOUMsV0FBVyxLQUFLeDdDLE9BQUwsQ0FBYW82QyxTQUFiLEtBQTJCLE1BQTNCLEdBQW9DLE9BQXBDLEdBQThDLE1BQTdEO0FBQ0FzQixxQkFBUy92QyxJQUFULENBQWMsK0JBQWQsRUFBK0N1SyxHQUEvQyxDQUFtRHdsQyxRQUFuRCxFQUNTcm5CLFdBRFQsd0JBQzBDLEtBQUtyMEIsT0FBTCxDQUFhbzZDLFNBRHZELEVBRVNwbUIsUUFGVCxZQUUyQnduQixRQUYzQjtBQUdBLGlCQUFLbkIsT0FBTCxHQUFlLEtBQWY7QUFDRDtBQUNEOzs7O0FBSUEsZUFBS25ZLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0Isc0JBQXRCLEVBQThDLENBQUMrMkIsUUFBRCxDQUE5QztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBblZXO0FBQUE7QUFBQSxnQ0F1VkQ7QUFDUixhQUFLbkYsVUFBTCxDQUFnQnA4QixHQUFoQixDQUFvQixrQkFBcEIsRUFBd0M4WSxVQUF4QyxDQUFtRCxlQUFuRCxFQUNLb0IsV0FETCxDQUNpQiwrRUFEakI7QUFFQThNLFVBQUU1a0MsU0FBU3FuQixJQUFYLEVBQWlCekosR0FBakIsQ0FBcUIsa0JBQXJCO0FBQ0FtbkIsbUJBQVd1SixJQUFYLENBQWdCUyxJQUFoQixDQUFxQixLQUFLcEosUUFBMUIsRUFBb0MsVUFBcEM7QUFDQVosbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUE3VlU7O0FBQUE7QUFBQTs7QUFnV2I7Ozs7O0FBR0E2WCxlQUFhcEssUUFBYixHQUF3QjtBQUN0Qjs7Ozs7O0FBTUFtTCxrQkFBYyxLQVBRO0FBUXRCOzs7Ozs7QUFNQUMsZUFBVyxJQWRXO0FBZXRCOzs7Ozs7QUFNQXRCLGdCQUFZLEVBckJVO0FBc0J0Qjs7Ozs7O0FBTUFrQixlQUFXLEtBNUJXO0FBNkJ0Qjs7Ozs7OztBQU9BSyxpQkFBYSxHQXBDUztBQXFDdEI7Ozs7OztBQU1BYixlQUFXLE1BM0NXO0FBNEN0Qjs7Ozs7O0FBTUE3QyxrQkFBYyxJQWxEUTtBQW1EdEI7Ozs7OztBQU1BdUQsd0JBQW9CLElBekRFO0FBMER0Qjs7Ozs7O0FBTUFaLG1CQUFlLFVBaEVPO0FBaUV0Qjs7Ozs7O0FBTUFDLGdCQUFZLGFBdkVVO0FBd0V0Qjs7Ozs7O0FBTUFVLGlCQUFhO0FBOUVTLEdBQXhCOztBQWlGQTtBQUNBdlosYUFBV0ksTUFBWCxDQUFrQnNZLFlBQWxCLEVBQWdDLGNBQWhDO0FBRUMsQ0F2YkEsQ0F1YkN6OEMsTUF2YkQsQ0FBRDtBQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViOzs7Ozs7O0FBRmEsTUFTUHlhLFNBVE87QUFVWDs7Ozs7OztBQU9BLHVCQUFZclcsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE2QjtBQUFBOztBQUMzQixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFnQm1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWE2N0MsVUFBVWhNLFFBQXZCLEVBQWlDLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUFqQyxFQUF1RHhiLE9BQXZELENBQWhCOztBQUVBLFdBQUt1aUMsS0FBTDs7QUFFQWpCLGlCQUFXUSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFdBQWhDO0FBQ0Q7O0FBRUQ7Ozs7OztBQTFCVztBQUFBO0FBQUEsOEJBOEJIO0FBQ04sWUFBSStaLE9BQU8sS0FBSzNaLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGdCQUFuQixLQUF3QyxFQUFuRDtBQUNBLFlBQUkydUMsV0FBVyxLQUFLNVosUUFBTCxDQUFjdjJCLElBQWQsNkJBQTZDa3dDLElBQTdDLFFBQWY7O0FBRUEsYUFBS0MsUUFBTCxHQUFnQkEsU0FBU3g5QyxNQUFULEdBQWtCdzlDLFFBQWxCLEdBQTZCLEtBQUs1WixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQix3QkFBbkIsQ0FBN0M7QUFDQSxhQUFLdTJCLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGFBQW5CLEVBQW1DMHVDLFFBQVF2YSxXQUFXVyxXQUFYLENBQXVCLENBQXZCLEVBQTBCLElBQTFCLENBQTNDO0FBQ0gsYUFBS0MsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsYUFBbkIsRUFBbUMwdUMsUUFBUXZhLFdBQVdXLFdBQVgsQ0FBdUIsQ0FBdkIsRUFBMEIsSUFBMUIsQ0FBM0M7O0FBRUcsYUFBSzhaLFNBQUwsR0FBaUIsS0FBSzdaLFFBQUwsQ0FBY3YyQixJQUFkLENBQW1CLGtCQUFuQixFQUF1Q3JOLE1BQXZDLEdBQWdELENBQWpFO0FBQ0EsYUFBSzA5QyxRQUFMLEdBQWdCLEtBQUs5WixRQUFMLENBQWM1ckIsWUFBZCxDQUEyQi9aLFNBQVNxbkIsSUFBcEMsRUFBMEMsa0JBQTFDLEVBQThEdGxCLE1BQTlELEdBQXVFLENBQXZGO0FBQ0EsYUFBSzI5QyxJQUFMLEdBQVksS0FBWjtBQUNBLGFBQUt0RSxZQUFMLEdBQW9CO0FBQ2xCdUUsMkJBQWlCLEtBQUtDLFdBQUwsQ0FBaUIxYixJQUFqQixDQUFzQixJQUF0QixDQURDO0FBRWxCMmIsZ0NBQXNCLEtBQUtDLGdCQUFMLENBQXNCNWIsSUFBdEIsQ0FBMkIsSUFBM0I7QUFGSixTQUFwQjs7QUFLQSxZQUFJNmIsT0FBTyxLQUFLcGEsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsS0FBbkIsQ0FBWDtBQUNBLFlBQUk0d0MsUUFBSjtBQUNBLFlBQUcsS0FBS3Y4QyxPQUFMLENBQWF3OEMsVUFBaEIsRUFBMkI7QUFDekJELHFCQUFXLEtBQUtFLFFBQUwsRUFBWDtBQUNBdGIsWUFBRXprQyxNQUFGLEVBQVVna0IsRUFBVixDQUFhLHVCQUFiLEVBQXNDLEtBQUsrN0IsUUFBTCxDQUFjaGMsSUFBZCxDQUFtQixJQUFuQixDQUF0QztBQUNELFNBSEQsTUFHSztBQUNILGVBQUtxUCxPQUFMO0FBQ0Q7QUFDRCxZQUFJeU0sYUFBYTU3QyxTQUFiLElBQTBCNDdDLGFBQWEsS0FBeEMsSUFBa0RBLGFBQWE1N0MsU0FBbEUsRUFBNEU7QUFDMUUsY0FBRzI3QyxLQUFLaCtDLE1BQVIsRUFBZTtBQUNiZ2pDLHVCQUFXd0ssY0FBWCxDQUEwQndRLElBQTFCLEVBQWdDLEtBQUtJLE9BQUwsQ0FBYWpjLElBQWIsQ0FBa0IsSUFBbEIsQ0FBaEM7QUFDRCxXQUZELE1BRUs7QUFDSCxpQkFBS2ljLE9BQUw7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7O0FBL0RXO0FBQUE7QUFBQSxxQ0FtRUk7QUFDYixhQUFLVCxJQUFMLEdBQVksS0FBWjtBQUNBLGFBQUsvWixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQjtBQUNoQiwyQkFBaUIsS0FBS3c5QixZQUFMLENBQWtCeUUsb0JBRG5CO0FBRWhCLGlDQUF1QixLQUFLekUsWUFBTCxDQUFrQnVFLGVBRnpCO0FBR25CLGlDQUF1QixLQUFLdkUsWUFBTCxDQUFrQnVFO0FBSHRCLFNBQWxCO0FBS0Q7O0FBRUQ7Ozs7O0FBNUVXO0FBQUE7QUFBQSxrQ0FnRkNuMEMsQ0FoRkQsRUFnRkk7QUFDYixhQUFLMjBDLE9BQUw7QUFDRDs7QUFFRDs7Ozs7QUFwRlc7QUFBQTtBQUFBLHVDQXdGTTMwQyxDQXhGTixFQXdGUztBQUNsQixZQUFHQSxFQUFFekgsTUFBRixLQUFhLEtBQUs0aEMsUUFBTCxDQUFjLENBQWQsQ0FBaEIsRUFBaUM7QUFBRSxlQUFLd2EsT0FBTDtBQUFpQjtBQUNyRDs7QUFFRDs7Ozs7QUE1Rlc7QUFBQTtBQUFBLGdDQWdHRDtBQUNSLFlBQUlsYSxRQUFRLElBQVo7QUFDQSxhQUFLbWEsWUFBTDtBQUNBLFlBQUcsS0FBS1osU0FBUixFQUFrQjtBQUNoQixlQUFLN1osUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIsNEJBQWpCLEVBQStDLEtBQUtpM0IsWUFBTCxDQUFrQnlFLG9CQUFqRTtBQUNELFNBRkQsTUFFSztBQUNILGVBQUtsYSxRQUFMLENBQWN4aEIsRUFBZCxDQUFpQixxQkFBakIsRUFBd0MsS0FBS2kzQixZQUFMLENBQWtCdUUsZUFBMUQ7QUFDSCxlQUFLaGEsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIscUJBQWpCLEVBQXdDLEtBQUtpM0IsWUFBTCxDQUFrQnVFLGVBQTFEO0FBQ0U7QUFDRCxhQUFLRCxJQUFMLEdBQVksSUFBWjtBQUNEOztBQUVEOzs7OztBQTVHVztBQUFBO0FBQUEsaUNBZ0hBO0FBQ1QsWUFBSU0sV0FBVyxDQUFDamIsV0FBV3VDLFVBQVgsQ0FBc0J2dkIsRUFBdEIsQ0FBeUIsS0FBS3RVLE9BQUwsQ0FBYXc4QyxVQUF0QyxDQUFoQjtBQUNBLFlBQUdELFFBQUgsRUFBWTtBQUNWLGNBQUcsS0FBS04sSUFBUixFQUFhO0FBQ1gsaUJBQUtVLFlBQUw7QUFDQSxpQkFBS2IsUUFBTCxDQUFjeCtCLEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsTUFBNUI7QUFDRDtBQUNGLFNBTEQsTUFLSztBQUNILGNBQUcsQ0FBQyxLQUFLMitCLElBQVQsRUFBYztBQUNaLGlCQUFLbk0sT0FBTDtBQUNEO0FBQ0Y7QUFDRCxlQUFPeU0sUUFBUDtBQUNEOztBQUVEOzs7OztBQS9IVztBQUFBO0FBQUEsb0NBbUlHO0FBQ1o7QUFDRDs7QUFFRDs7Ozs7QUF2SVc7QUFBQTtBQUFBLGdDQTJJRDtBQUNSLFlBQUcsQ0FBQyxLQUFLdjhDLE9BQUwsQ0FBYTQ4QyxlQUFqQixFQUFpQztBQUMvQixjQUFHLEtBQUtDLFVBQUwsRUFBSCxFQUFxQjtBQUNuQixpQkFBS2YsUUFBTCxDQUFjeCtCLEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsTUFBNUI7QUFDQSxtQkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNELFlBQUksS0FBS3RkLE9BQUwsQ0FBYTg4QyxhQUFqQixFQUFnQztBQUM5QixlQUFLQyxlQUFMLENBQXFCLEtBQUtDLGdCQUFMLENBQXNCdmMsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBckI7QUFDRCxTQUZELE1BRUs7QUFDSCxlQUFLd2MsVUFBTCxDQUFnQixLQUFLQyxXQUFMLENBQWlCemMsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBaEI7QUFDRDtBQUNGOztBQUVEOzs7OztBQXpKVztBQUFBO0FBQUEsbUNBNkpFO0FBQ1gsWUFBSSxDQUFDLEtBQUtxYixRQUFMLENBQWMsQ0FBZCxDQUFELElBQXFCLENBQUMsS0FBS0EsUUFBTCxDQUFjLENBQWQsQ0FBMUIsRUFBNEM7QUFDMUMsaUJBQU8sSUFBUDtBQUNEO0FBQ0QsZUFBTyxLQUFLQSxRQUFMLENBQWMsQ0FBZCxFQUFpQjl1QixxQkFBakIsR0FBeUM1aEIsR0FBekMsS0FBaUQsS0FBSzB3QyxRQUFMLENBQWMsQ0FBZCxFQUFpQjl1QixxQkFBakIsR0FBeUM1aEIsR0FBakc7QUFDRDs7QUFFRDs7Ozs7O0FBcEtXO0FBQUE7QUFBQSxpQ0F5S0ErK0IsRUF6S0EsRUF5S0k7QUFDYixZQUFJZ1QsVUFBVSxFQUFkO0FBQ0EsYUFBSSxJQUFJLzlDLElBQUksQ0FBUixFQUFXTSxNQUFNLEtBQUtvOEMsUUFBTCxDQUFjeDlDLE1BQW5DLEVBQTJDYyxJQUFJTSxHQUEvQyxFQUFvRE4sR0FBcEQsRUFBd0Q7QUFDdEQsZUFBSzA4QyxRQUFMLENBQWMxOEMsQ0FBZCxFQUFpQjZlLEtBQWpCLENBQXVCZ1IsTUFBdkIsR0FBZ0MsTUFBaEM7QUFDQWt1QixrQkFBUXBnRCxJQUFSLENBQWEsS0FBSysrQyxRQUFMLENBQWMxOEMsQ0FBZCxFQUFpQm10QixZQUE5QjtBQUNEO0FBQ0Q0ZCxXQUFHZ1QsT0FBSDtBQUNEOztBQUVEOzs7Ozs7QUFsTFc7QUFBQTtBQUFBLHNDQXVMS2hULEVBdkxMLEVBdUxTO0FBQ2xCLFlBQUlpVCxrQkFBbUIsS0FBS3RCLFFBQUwsQ0FBY3g5QyxNQUFkLEdBQXVCLEtBQUt3OUMsUUFBTCxDQUFjdjhDLEtBQWQsR0FBc0I0L0IsTUFBdEIsR0FBK0IvekIsR0FBdEQsR0FBNEQsQ0FBbkY7QUFBQSxZQUNJOUMsU0FBUyxFQURiO0FBQUEsWUFFSSswQyxRQUFRLENBRlo7QUFHQTtBQUNBLzBDLGVBQU8rMEMsS0FBUCxJQUFnQixFQUFoQjtBQUNBLGFBQUksSUFBSWorQyxJQUFJLENBQVIsRUFBV00sTUFBTSxLQUFLbzhDLFFBQUwsQ0FBY3g5QyxNQUFuQyxFQUEyQ2MsSUFBSU0sR0FBL0MsRUFBb0ROLEdBQXBELEVBQXdEO0FBQ3RELGVBQUswOEMsUUFBTCxDQUFjMThDLENBQWQsRUFBaUI2ZSxLQUFqQixDQUF1QmdSLE1BQXZCLEdBQWdDLE1BQWhDO0FBQ0E7QUFDQSxjQUFJcXVCLGNBQWNuYyxFQUFFLEtBQUsyYSxRQUFMLENBQWMxOEMsQ0FBZCxDQUFGLEVBQW9CKy9CLE1BQXBCLEdBQTZCL3pCLEdBQS9DO0FBQ0EsY0FBSWt5QyxlQUFhRixlQUFqQixFQUFrQztBQUNoQ0M7QUFDQS8wQyxtQkFBTyswQyxLQUFQLElBQWdCLEVBQWhCO0FBQ0FELDhCQUFnQkUsV0FBaEI7QUFDRDtBQUNEaDFDLGlCQUFPKzBDLEtBQVAsRUFBY3RnRCxJQUFkLENBQW1CLENBQUMsS0FBSysrQyxRQUFMLENBQWMxOEMsQ0FBZCxDQUFELEVBQWtCLEtBQUswOEMsUUFBTCxDQUFjMThDLENBQWQsRUFBaUJtdEIsWUFBbkMsQ0FBbkI7QUFDRDs7QUFFRCxhQUFLLElBQUk1c0IsSUFBSSxDQUFSLEVBQVc0OUMsS0FBS2oxQyxPQUFPaEssTUFBNUIsRUFBb0NxQixJQUFJNDlDLEVBQXhDLEVBQTRDNTlDLEdBQTVDLEVBQWlEO0FBQy9DLGNBQUl3OUMsVUFBVWhjLEVBQUU3NEIsT0FBTzNJLENBQVAsQ0FBRixFQUFhVCxHQUFiLENBQWlCLFlBQVU7QUFBRSxtQkFBTyxLQUFLLENBQUwsQ0FBUDtBQUFpQixXQUE5QyxFQUFnRFQsR0FBaEQsRUFBZDtBQUNBLGNBQUlzdEIsTUFBY2xyQixLQUFLa3JCLEdBQUwsQ0FBUzFzQixLQUFULENBQWUsSUFBZixFQUFxQjg5QyxPQUFyQixDQUFsQjtBQUNBNzBDLGlCQUFPM0ksQ0FBUCxFQUFVNUMsSUFBVixDQUFlZ3ZCLEdBQWY7QUFDRDtBQUNEb2UsV0FBRzdoQyxNQUFIO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFqTlc7QUFBQTtBQUFBLGtDQXVOQzYwQyxPQXZORCxFQXVOVTtBQUNuQixZQUFJcHhCLE1BQU1sckIsS0FBS2tyQixHQUFMLENBQVMxc0IsS0FBVCxDQUFlLElBQWYsRUFBcUI4OUMsT0FBckIsQ0FBVjtBQUNBOzs7O0FBSUEsYUFBS2piLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IsMkJBQXRCOztBQUVBLGFBQUttM0IsUUFBTCxDQUFjeCtCLEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEJ5TyxHQUE1Qjs7QUFFQTs7OztBQUlDLGFBQUttVyxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDRCQUF0QjtBQUNGOztBQUVEOzs7Ozs7Ozs7QUF4T1c7QUFBQTtBQUFBLHVDQWdQTXJjLE1BaFBOLEVBZ1BjO0FBQ3ZCOzs7QUFHQSxhQUFLNDVCLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IsMkJBQXRCO0FBQ0EsYUFBSyxJQUFJdmxCLElBQUksQ0FBUixFQUFXTSxNQUFNNEksT0FBT2hLLE1BQTdCLEVBQXFDYyxJQUFJTSxHQUF6QyxFQUErQ04sR0FBL0MsRUFBb0Q7QUFDbEQsY0FBSW8rQyxnQkFBZ0JsMUMsT0FBT2xKLENBQVAsRUFBVWQsTUFBOUI7QUFBQSxjQUNJeXRCLE1BQU16akIsT0FBT2xKLENBQVAsRUFBVW8rQyxnQkFBZ0IsQ0FBMUIsQ0FEVjtBQUVBLGNBQUlBLGlCQUFlLENBQW5CLEVBQXNCO0FBQ3BCcmMsY0FBRTc0QixPQUFPbEosQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLENBQUYsRUFBbUJrZSxHQUFuQixDQUF1QixFQUFDLFVBQVMsTUFBVixFQUF2QjtBQUNBO0FBQ0Q7QUFDRDs7OztBQUlBLGVBQUs0a0IsUUFBTCxDQUFjdmQsT0FBZCxDQUFzQiw4QkFBdEI7QUFDQSxlQUFLLElBQUlobEIsSUFBSSxDQUFSLEVBQVc4OUMsT0FBUUQsZ0JBQWMsQ0FBdEMsRUFBMEM3OUMsSUFBSTg5QyxJQUE5QyxFQUFxRDk5QyxHQUFyRCxFQUEwRDtBQUN4RHdoQyxjQUFFNzRCLE9BQU9sSixDQUFQLEVBQVVPLENBQVYsRUFBYSxDQUFiLENBQUYsRUFBbUIyZCxHQUFuQixDQUF1QixFQUFDLFVBQVN5TyxHQUFWLEVBQXZCO0FBQ0Q7QUFDRDs7OztBQUlBLGVBQUttVyxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLCtCQUF0QjtBQUNEO0FBQ0Q7OztBQUdDLGFBQUt1ZCxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDRCQUF0QjtBQUNGOztBQUVEOzs7OztBQWhSVztBQUFBO0FBQUEsZ0NBb1JEO0FBQ1IsYUFBS2c0QixZQUFMO0FBQ0EsYUFBS2IsUUFBTCxDQUFjeCtCLEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsTUFBNUI7O0FBRUFna0IsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUF6UlU7O0FBQUE7QUFBQTs7QUE0UmI7Ozs7O0FBR0F5WixZQUFVaE0sUUFBVixHQUFxQjtBQUNuQjs7Ozs7O0FBTUFnTixxQkFBaUIsS0FQRTtBQVFuQjs7Ozs7O0FBTUFFLG1CQUFlLEtBZEk7QUFlbkI7Ozs7OztBQU1BTixnQkFBWTtBQXJCTyxHQUFyQjs7QUF3QkE7QUFDQWxiLGFBQVdJLE1BQVgsQ0FBa0JrYSxTQUFsQixFQUE2QixXQUE3QjtBQUVDLENBMVRBLENBMFRDcitDLE1BMVRELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7OztBQUZhLE1BU1B1YyxXQVRPO0FBVVg7Ozs7Ozs7QUFPQSx5QkFBWW5ZLE9BQVosRUFBcUJ2bEMsT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBS2tpQyxRQUFMLEdBQWdCcUQsT0FBaEI7QUFDQSxXQUFLdmxDLE9BQUwsR0FBZW1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWEyOUMsWUFBWTlOLFFBQXpCLEVBQW1DNXZDLE9BQW5DLENBQWY7QUFDQSxXQUFLMjlDLEtBQUwsR0FBYSxFQUFiO0FBQ0EsV0FBS0MsV0FBTCxHQUFtQixFQUFuQjs7QUFFQSxXQUFLcmIsS0FBTDtBQUNBLFdBQUt1TixPQUFMOztBQUVBeE8saUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsYUFBaEM7QUFDRDs7QUFFRDs7Ozs7OztBQTdCVztBQUFBO0FBQUEsOEJBa0NIO0FBQ04sYUFBSytiLGVBQUw7QUFDQSxhQUFLQyxjQUFMO0FBQ0EsYUFBS3BCLE9BQUw7QUFDRDs7QUFFRDs7Ozs7O0FBeENXO0FBQUE7QUFBQSxnQ0E2Q0Q7QUFBQTs7QUFDUnZiLFVBQUV6a0MsTUFBRixFQUFVZ2tCLEVBQVYsQ0FBYSx1QkFBYixFQUFzQzRnQixXQUFXbUMsSUFBWCxDQUFnQkMsUUFBaEIsQ0FBeUIsWUFBTTtBQUNuRSxpQkFBS2daLE9BQUw7QUFDRCxTQUZxQyxFQUVuQyxFQUZtQyxDQUF0QztBQUdEOztBQUVEOzs7Ozs7QUFuRFc7QUFBQTtBQUFBLGdDQXdERDtBQUNSLFlBQUlyMEMsS0FBSjs7QUFFQTtBQUNBLGFBQUssSUFBSWpKLENBQVQsSUFBYyxLQUFLdStDLEtBQW5CLEVBQTBCO0FBQ3hCLGNBQUcsS0FBS0EsS0FBTCxDQUFXdmdELGNBQVgsQ0FBMEJnQyxDQUExQixDQUFILEVBQWlDO0FBQy9CLGdCQUFJMitDLE9BQU8sS0FBS0osS0FBTCxDQUFXditDLENBQVgsQ0FBWDtBQUNBLGdCQUFJMUMsT0FBT3lzQyxVQUFQLENBQWtCNFUsS0FBSzdVLEtBQXZCLEVBQThCM2xDLE9BQWxDLEVBQTJDO0FBQ3pDOEUsc0JBQVEwMUMsSUFBUjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxZQUFJMTFDLEtBQUosRUFBVztBQUNULGVBQUt0SCxPQUFMLENBQWFzSCxNQUFNMjFDLElBQW5CO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7O0FBMUVXO0FBQUE7QUFBQSx3Q0ErRU87QUFDaEIsYUFBSyxJQUFJNStDLENBQVQsSUFBY2tpQyxXQUFXdUMsVUFBWCxDQUFzQjhFLE9BQXBDLEVBQTZDO0FBQzNDLGNBQUlySCxXQUFXdUMsVUFBWCxDQUFzQjhFLE9BQXRCLENBQThCdnJDLGNBQTlCLENBQTZDZ0MsQ0FBN0MsQ0FBSixFQUFxRDtBQUNuRCxnQkFBSThwQyxRQUFRNUgsV0FBV3VDLFVBQVgsQ0FBc0I4RSxPQUF0QixDQUE4QnZwQyxDQUE5QixDQUFaO0FBQ0FzK0Msd0JBQVlPLGVBQVosQ0FBNEIvVSxNQUFNanBDLElBQWxDLElBQTBDaXBDLE1BQU14bEMsS0FBaEQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7Ozs7O0FBeEZXO0FBQUE7QUFBQSxxQ0ErRkk2aEMsT0EvRkosRUErRmE7QUFDdEIsWUFBSTJZLFlBQVksRUFBaEI7QUFDQSxZQUFJUCxLQUFKOztBQUVBLFlBQUksS0FBSzM5QyxPQUFMLENBQWEyOUMsS0FBakIsRUFBd0I7QUFDdEJBLGtCQUFRLEtBQUszOUMsT0FBTCxDQUFhMjlDLEtBQXJCO0FBQ0QsU0FGRCxNQUdLO0FBQ0hBLGtCQUFRLEtBQUt6YixRQUFMLENBQWMxbUIsSUFBZCxDQUFtQixhQUFuQixDQUFSO0FBQ0Q7O0FBRURtaUMsZ0JBQVMsT0FBT0EsS0FBUCxLQUFpQixRQUFqQixHQUE0QkEsTUFBTXQxQyxLQUFOLENBQVksVUFBWixDQUE1QixHQUFzRHMxQyxLQUEvRDs7QUFFQSxhQUFLLElBQUl2K0MsQ0FBVCxJQUFjdStDLEtBQWQsRUFBcUI7QUFDbkIsY0FBR0EsTUFBTXZnRCxjQUFOLENBQXFCZ0MsQ0FBckIsQ0FBSCxFQUE0QjtBQUMxQixnQkFBSTIrQyxPQUFPSixNQUFNditDLENBQU4sRUFBU3ZDLEtBQVQsQ0FBZSxDQUFmLEVBQWtCLENBQUMsQ0FBbkIsRUFBc0JzSCxLQUF0QixDQUE0QixJQUE1QixDQUFYO0FBQ0EsZ0JBQUk2NUMsT0FBT0QsS0FBS2xoRCxLQUFMLENBQVcsQ0FBWCxFQUFjLENBQUMsQ0FBZixFQUFrQnVNLElBQWxCLENBQXVCLEVBQXZCLENBQVg7QUFDQSxnQkFBSTgvQixRQUFRNlUsS0FBS0EsS0FBS3ovQyxNQUFMLEdBQWMsQ0FBbkIsQ0FBWjs7QUFFQSxnQkFBSW8vQyxZQUFZTyxlQUFaLENBQTRCL1UsS0FBNUIsQ0FBSixFQUF3QztBQUN0Q0Esc0JBQVF3VSxZQUFZTyxlQUFaLENBQTRCL1UsS0FBNUIsQ0FBUjtBQUNEOztBQUVEZ1Ysc0JBQVVuaEQsSUFBVixDQUFlO0FBQ2JpaEQsb0JBQU1BLElBRE87QUFFYjlVLHFCQUFPQTtBQUZNLGFBQWY7QUFJRDtBQUNGOztBQUVELGFBQUt5VSxLQUFMLEdBQWFPLFNBQWI7QUFDRDs7QUFFRDs7Ozs7OztBQWhJVztBQUFBO0FBQUEsOEJBc0lIRixJQXRJRyxFQXNJRztBQUNaLFlBQUksS0FBS0osV0FBTCxLQUFxQkksSUFBekIsRUFBK0I7O0FBRS9CLFlBQUl4YixRQUFRLElBQVo7QUFBQSxZQUNJN2QsVUFBVSx5QkFEZDs7QUFHQTtBQUNBLFlBQUksS0FBS3VkLFFBQUwsQ0FBYyxDQUFkLEVBQWlCdC9CLFFBQWpCLEtBQThCLEtBQWxDLEVBQXlDO0FBQ3ZDLGVBQUtzL0IsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsS0FBbkIsRUFBMEI2d0MsSUFBMUIsRUFBZ0N0OUIsRUFBaEMsQ0FBbUMsTUFBbkMsRUFBMkMsWUFBVztBQUNwRDhoQixrQkFBTW9iLFdBQU4sR0FBb0JJLElBQXBCO0FBQ0QsV0FGRCxFQUdDcjVCLE9BSEQsQ0FHU0EsT0FIVDtBQUlEO0FBQ0Q7QUFOQSxhQU9LLElBQUlxNUIsS0FBSzMxQyxLQUFMLENBQVcseUNBQVgsQ0FBSixFQUEyRDtBQUM5RCxpQkFBSzY1QixRQUFMLENBQWM1a0IsR0FBZCxDQUFrQixFQUFFLG9CQUFvQixTQUFPMGdDLElBQVAsR0FBWSxHQUFsQyxFQUFsQixFQUNLcjVCLE9BREwsQ0FDYUEsT0FEYjtBQUVEO0FBQ0Q7QUFKSyxlQUtBO0FBQ0h3YyxnQkFBRTFpQyxHQUFGLENBQU11L0MsSUFBTixFQUFZLFVBQVM1bEIsUUFBVCxFQUFtQjtBQUM3Qm9LLHNCQUFNTixRQUFOLENBQWVsYixJQUFmLENBQW9Cb1IsUUFBcEIsRUFDTXpULE9BRE4sQ0FDY0EsT0FEZDtBQUVBd2Msa0JBQUUvSSxRQUFGLEVBQVl1SyxVQUFaO0FBQ0FILHNCQUFNb2IsV0FBTixHQUFvQkksSUFBcEI7QUFDRCxlQUxEO0FBTUQ7O0FBRUQ7Ozs7QUFJQTtBQUNEOztBQUVEOzs7OztBQXpLVztBQUFBO0FBQUEsZ0NBNktEO0FBQ1I7QUFDRDtBQS9LVTs7QUFBQTtBQUFBOztBQWtMYjs7Ozs7QUFHQU4sY0FBWTlOLFFBQVosR0FBdUI7QUFDckI7Ozs7OztBQU1BK04sV0FBTztBQVBjLEdBQXZCOztBQVVBRCxjQUFZTyxlQUFaLEdBQThCO0FBQzVCLGlCQUFhLHFDQURlO0FBRTVCLGdCQUFZLG9DQUZnQjtBQUc1QixjQUFVO0FBSGtCLEdBQTlCOztBQU1BO0FBQ0EzYyxhQUFXSSxNQUFYLENBQWtCZ2MsV0FBbEIsRUFBK0IsYUFBL0I7QUFFQyxDQXhNQSxDQXdNQ25nRCxNQXhNRCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7O0FBRmEsTUFPUGdkLFFBUE87QUFRWDs7Ozs7OztBQU9BLHNCQUFZNVksT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFnQm1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWFvK0MsU0FBU3ZPLFFBQXRCLEVBQWdDLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUFoQyxFQUFzRHhiLE9BQXRELENBQWhCOztBQUVBLFdBQUt1aUMsS0FBTDtBQUNBLFdBQUs2YixVQUFMOztBQUVBOWMsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsVUFBaEM7QUFDRDs7QUFFRDs7Ozs7O0FBekJXO0FBQUE7QUFBQSw4QkE2Qkg7QUFDTixZQUFJbDVCLEtBQUssS0FBS3M1QixRQUFMLENBQWMsQ0FBZCxFQUFpQnQ1QixFQUFqQixJQUF1QjA0QixXQUFXVyxXQUFYLENBQXVCLENBQXZCLEVBQTBCLFVBQTFCLENBQWhDO0FBQ0EsWUFBSU8sUUFBUSxJQUFaO0FBQ0EsYUFBSzZiLFFBQUwsR0FBZ0JsZCxFQUFFLHdCQUFGLENBQWhCO0FBQ0EsYUFBS21kLE1BQUwsR0FBYyxLQUFLcGMsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsR0FBbkIsQ0FBZDtBQUNBLGFBQUt1MkIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUI7QUFDakIseUJBQWV2RSxFQURFO0FBRWpCLHlCQUFlQSxFQUZFO0FBR2pCLGdCQUFNQTtBQUhXLFNBQW5CO0FBS0EsYUFBSzIxQyxPQUFMLEdBQWVwZCxHQUFmO0FBQ0EsYUFBSzRXLFNBQUwsR0FBaUJsa0IsU0FBU24zQixPQUFPc2pDLFdBQWhCLEVBQTZCLEVBQTdCLENBQWpCOztBQUVBLGFBQUs4UCxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQTdDVztBQUFBO0FBQUEsbUNBa0RFO0FBQ1gsWUFBSXROLFFBQVEsSUFBWjtBQUFBLFlBQ0k1ZSxPQUFPcm5CLFNBQVNxbkIsSUFEcEI7QUFBQSxZQUVJb0QsT0FBT3pxQixTQUFTdU8sZUFGcEI7O0FBSUEsYUFBSzB6QyxNQUFMLEdBQWMsRUFBZDtBQUNBLGFBQUtDLFNBQUwsR0FBaUI1OUMsS0FBS2dpQyxLQUFMLENBQVdoaUMsS0FBS2tyQixHQUFMLENBQVNydkIsT0FBT2dpRCxXQUFoQixFQUE2QjEzQixLQUFLMjNCLFlBQWxDLENBQVgsQ0FBakI7QUFDQSxhQUFLQyxTQUFMLEdBQWlCLzlDLEtBQUtnaUMsS0FBTCxDQUFXaGlDLEtBQUtrckIsR0FBTCxDQUFTbkksS0FBS2k3QixZQUFkLEVBQTRCajdCLEtBQUsySSxZQUFqQyxFQUErQ3ZGLEtBQUsyM0IsWUFBcEQsRUFBa0UzM0IsS0FBSzYzQixZQUF2RSxFQUFxRjczQixLQUFLdUYsWUFBMUYsQ0FBWCxDQUFqQjs7QUFFQSxhQUFLOHhCLFFBQUwsQ0FBY3IvQyxJQUFkLENBQW1CLFlBQVU7QUFDM0IsY0FBSTgvQyxPQUFPM2QsRUFBRSxJQUFGLENBQVg7QUFBQSxjQUNJNGQsS0FBS2wrQyxLQUFLZ2lDLEtBQUwsQ0FBV2ljLEtBQUszZixNQUFMLEdBQWMvekIsR0FBZCxHQUFvQm8zQixNQUFNeGlDLE9BQU4sQ0FBY2cvQyxTQUE3QyxDQURUO0FBRUFGLGVBQUtHLFdBQUwsR0FBbUJGLEVBQW5CO0FBQ0F2YyxnQkFBTWdjLE1BQU4sQ0FBYXpoRCxJQUFiLENBQWtCZ2lELEVBQWxCO0FBQ0QsU0FMRDtBQU1EOztBQUVEOzs7OztBQW5FVztBQUFBO0FBQUEsZ0NBdUVEO0FBQ1IsWUFBSXZjLFFBQVEsSUFBWjtBQUFBLFlBQ0lnVixRQUFRclcsRUFBRSxZQUFGLENBRFo7QUFBQSxZQUVJNVIsT0FBTztBQUNMckIsb0JBQVVzVSxNQUFNeGlDLE9BQU4sQ0FBY2k0QyxpQkFEbkI7QUFFTHBxQixrQkFBVTJVLE1BQU14aUMsT0FBTixDQUFjazRDO0FBRm5CLFNBRlg7QUFNQS9XLFVBQUV6a0MsTUFBRixFQUFVa2tCLEdBQVYsQ0FBYyxNQUFkLEVBQXNCLFlBQVU7QUFDOUIsY0FBRzRoQixNQUFNeGlDLE9BQU4sQ0FBY2svQyxXQUFqQixFQUE2QjtBQUMzQixnQkFBR252QyxTQUFTRCxJQUFaLEVBQWlCO0FBQ2YweUIsb0JBQU0yYyxXQUFOLENBQWtCcHZDLFNBQVNELElBQTNCO0FBQ0Q7QUFDRjtBQUNEMHlCLGdCQUFNNGIsVUFBTjtBQUNBNWIsZ0JBQU00YyxhQUFOO0FBQ0QsU0FSRDs7QUFVQSxhQUFLbGQsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUI7QUFDZixpQ0FBdUIsS0FBS3FpQixNQUFMLENBQVl0QyxJQUFaLENBQWlCLElBQWpCLENBRFI7QUFFZixpQ0FBdUIsS0FBSzJlLGFBQUwsQ0FBbUIzZSxJQUFuQixDQUF3QixJQUF4QjtBQUZSLFNBQWpCLEVBR0cvZixFQUhILENBR00sbUJBSE4sRUFHMkIsY0FIM0IsRUFHMkMsVUFBUzNZLENBQVQsRUFBWTtBQUNuREEsWUFBRThhLGNBQUY7QUFDQSxjQUFJdzhCLFVBQVksS0FBS3AyQyxZQUFMLENBQWtCLE1BQWxCLENBQWhCO0FBQ0F1NUIsZ0JBQU0yYyxXQUFOLENBQWtCRSxPQUFsQjtBQUNELFNBUEg7QUFRQWxlLFVBQUV6a0MsTUFBRixFQUFVZ2tCLEVBQVYsQ0FBYSxVQUFiLEVBQXlCLFVBQVMzWSxDQUFULEVBQVk7QUFDbkMsY0FBR3k2QixNQUFNeGlDLE9BQU4sQ0FBY2svQyxXQUFqQixFQUE4QjtBQUM1QjFjLGtCQUFNMmMsV0FBTixDQUFrQnppRCxPQUFPcVQsUUFBUCxDQUFnQkQsSUFBbEM7QUFDRDtBQUNGLFNBSkQ7QUFLRDs7QUFFRDs7Ozs7O0FBdkdXO0FBQUE7QUFBQSxrQ0E0R0N3dkMsR0E1R0QsRUE0R007QUFDZjtBQUNBLFlBQUksQ0FBQ25lLEVBQUVtZSxHQUFGLEVBQU9oaEQsTUFBWixFQUFvQjtBQUFDLGlCQUFPLEtBQVA7QUFBYztBQUNuQyxhQUFLaWhELGFBQUwsR0FBcUIsSUFBckI7QUFDQSxZQUFJL2MsUUFBUSxJQUFaO0FBQUEsWUFDSXVWLFlBQVlsM0MsS0FBS2dpQyxLQUFMLENBQVcxQixFQUFFbWUsR0FBRixFQUFPbmdCLE1BQVAsR0FBZ0IvekIsR0FBaEIsR0FBc0IsS0FBS3BMLE9BQUwsQ0FBYWcvQyxTQUFiLEdBQXlCLENBQS9DLEdBQW1ELEtBQUtoL0MsT0FBTCxDQUFhdy9DLFNBQTNFLENBRGhCOztBQUdBcmUsVUFBRSxZQUFGLEVBQWdCeGtCLElBQWhCLENBQXFCLElBQXJCLEVBQTJCMlUsT0FBM0IsQ0FDRSxFQUFFbk4sV0FBVzR6QixTQUFiLEVBREYsRUFFRSxLQUFLLzNDLE9BQUwsQ0FBYWk0QyxpQkFGZixFQUdFLEtBQUtqNEMsT0FBTCxDQUFhazRDLGVBSGYsRUFJRSxZQUFXO0FBQUMxVixnQkFBTStjLGFBQU4sR0FBc0IsS0FBdEIsQ0FBNkIvYyxNQUFNNGMsYUFBTjtBQUFzQixTQUpqRTtBQU1EOztBQUVEOzs7OztBQTNIVztBQUFBO0FBQUEsK0JBK0hGO0FBQ1AsYUFBS2hCLFVBQUw7QUFDQSxhQUFLZ0IsYUFBTDtBQUNEOztBQUVEOzs7Ozs7O0FBcElXO0FBQUE7QUFBQSxzQ0EwSUcsd0JBQTBCO0FBQ3RDLFlBQUcsS0FBS0csYUFBUixFQUF1QjtBQUFDO0FBQVE7QUFDaEMsWUFBSUUsU0FBUyxnQkFBaUI1ckIsU0FBU24zQixPQUFPc2pDLFdBQWhCLEVBQTZCLEVBQTdCLENBQTlCO0FBQUEsWUFDSTBmLE1BREo7O0FBR0EsWUFBR0QsU0FBUyxLQUFLaEIsU0FBZCxLQUE0QixLQUFLRyxTQUFwQyxFQUE4QztBQUFFYyxtQkFBUyxLQUFLbEIsTUFBTCxDQUFZbGdELE1BQVosR0FBcUIsQ0FBOUI7QUFBa0MsU0FBbEYsTUFDSyxJQUFHbWhELFNBQVMsS0FBS2pCLE1BQUwsQ0FBWSxDQUFaLENBQVosRUFBMkI7QUFBRWtCLG1CQUFTLytDLFNBQVQ7QUFBcUIsU0FBbEQsTUFDRDtBQUNGLGNBQUlnL0MsU0FBUyxLQUFLNUgsU0FBTCxHQUFpQjBILE1BQTlCO0FBQUEsY0FDSWpkLFFBQVEsSUFEWjtBQUFBLGNBRUlvZCxhQUFhLEtBQUtwQixNQUFMLENBQVk1eUMsTUFBWixDQUFtQixVQUFTMGlCLENBQVQsRUFBWWx2QixDQUFaLEVBQWM7QUFDNUMsbUJBQU91Z0QsU0FBU3J4QixJQUFJa1UsTUFBTXhpQyxPQUFOLENBQWN3L0MsU0FBbEIsSUFBK0JDLE1BQXhDLEdBQWlEbnhCLElBQUlrVSxNQUFNeGlDLE9BQU4sQ0FBY3cvQyxTQUFsQixHQUE4QmhkLE1BQU14aUMsT0FBTixDQUFjZy9DLFNBQTVDLElBQXlEUyxNQUFqSDtBQUNELFdBRlksQ0FGakI7QUFLQUMsbUJBQVNFLFdBQVd0aEQsTUFBWCxHQUFvQnNoRCxXQUFXdGhELE1BQVgsR0FBb0IsQ0FBeEMsR0FBNEMsQ0FBckQ7QUFDRDs7QUFFRCxhQUFLaWdELE9BQUwsQ0FBYWxxQixXQUFiLENBQXlCLEtBQUtyMEIsT0FBTCxDQUFhMnFDLFdBQXRDO0FBQ0EsYUFBSzRULE9BQUwsR0FBZSxLQUFLRCxNQUFMLENBQVkxeUMsTUFBWixDQUFtQixhQUFhLEtBQUt5eUMsUUFBTCxDQUFjNytDLEVBQWQsQ0FBaUJrZ0QsTUFBakIsRUFBeUJsa0MsSUFBekIsQ0FBOEIsaUJBQTlCLENBQWIsR0FBZ0UsSUFBbkYsRUFBeUZ3WSxRQUF6RixDQUFrRyxLQUFLaDBCLE9BQUwsQ0FBYTJxQyxXQUEvRyxDQUFmOztBQUVBLFlBQUcsS0FBSzNxQyxPQUFMLENBQWFrL0MsV0FBaEIsRUFBNEI7QUFDMUIsY0FBSXB2QyxPQUFPLEVBQVg7QUFDQSxjQUFHNHZDLFVBQVUvK0MsU0FBYixFQUF1QjtBQUNyQm1QLG1CQUFPLEtBQUt5dUMsT0FBTCxDQUFhLENBQWIsRUFBZ0J0MUMsWUFBaEIsQ0FBNkIsTUFBN0IsQ0FBUDtBQUNEO0FBQ0QsY0FBRzZHLFNBQVNwVCxPQUFPcVQsUUFBUCxDQUFnQkQsSUFBNUIsRUFBa0M7QUFDaEMsZ0JBQUdwVCxPQUFPbzRDLE9BQVAsQ0FBZUMsU0FBbEIsRUFBNEI7QUFDMUJyNEMscUJBQU9vNEMsT0FBUCxDQUFlQyxTQUFmLENBQXlCLElBQXpCLEVBQStCLElBQS9CLEVBQXFDamxDLElBQXJDO0FBQ0QsYUFGRCxNQUVLO0FBQ0hwVCxxQkFBT3FULFFBQVAsQ0FBZ0JELElBQWhCLEdBQXVCQSxJQUF2QjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxhQUFLaW9DLFNBQUwsR0FBaUIwSCxNQUFqQjtBQUNBOzs7O0FBSUEsYUFBS3ZkLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0Isb0JBQXRCLEVBQTRDLENBQUMsS0FBSzQ1QixPQUFOLENBQTVDO0FBQ0Q7O0FBRUQ7Ozs7O0FBbkxXO0FBQUE7QUFBQSxnQ0F1TEQ7QUFDUixhQUFLcmMsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsMEJBQWxCLEVBQ0t4TyxJQURMLE9BQ2MsS0FBSzNMLE9BQUwsQ0FBYTJxQyxXQUQzQixFQUMwQ3RXLFdBRDFDLENBQ3NELEtBQUtyMEIsT0FBTCxDQUFhMnFDLFdBRG5FOztBQUdBLFlBQUcsS0FBSzNxQyxPQUFMLENBQWFrL0MsV0FBaEIsRUFBNEI7QUFDMUIsY0FBSXB2QyxPQUFPLEtBQUt5dUMsT0FBTCxDQUFhLENBQWIsRUFBZ0J0MUMsWUFBaEIsQ0FBNkIsTUFBN0IsQ0FBWDtBQUNBdk0saUJBQU9xVCxRQUFQLENBQWdCRCxJQUFoQixDQUFxQi9PLE9BQXJCLENBQTZCK08sSUFBN0IsRUFBbUMsRUFBbkM7QUFDRDs7QUFFRHd4QixtQkFBV2EsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQWpNVTs7QUFBQTtBQUFBOztBQW9NYjs7Ozs7QUFHQWdjLFdBQVN2TyxRQUFULEdBQW9CO0FBQ2xCOzs7Ozs7QUFNQXFJLHVCQUFtQixHQVBEO0FBUWxCOzs7Ozs7O0FBT0FDLHFCQUFpQixRQWZDO0FBZ0JsQjs7Ozs7O0FBTUE4RyxlQUFXLEVBdEJPO0FBdUJsQjs7Ozs7O0FBTUFyVSxpQkFBYSxRQTdCSztBQThCbEI7Ozs7OztBQU1BdVUsaUJBQWEsS0FwQ0s7QUFxQ2xCOzs7Ozs7QUFNQU0sZUFBVztBQTNDTyxHQUFwQjs7QUE4Q0E7QUFDQWxlLGFBQVdJLE1BQVgsQ0FBa0J5YyxRQUFsQixFQUE0QixVQUE1QjtBQUVDLENBeFBBLENBd1BDNWdELE1BeFBELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7Ozs7O0FBRmEsTUFXUDBlLFNBWE87QUFZWDs7Ozs7OztBQU9BLHVCQUFZdGEsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFlbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYTgvQyxVQUFValEsUUFBdkIsRUFBaUMsS0FBSzFOLFFBQUwsQ0FBYzFtQixJQUFkLEVBQWpDLEVBQXVEeGIsT0FBdkQsQ0FBZjtBQUNBLFdBQUs4L0MsWUFBTCxHQUFvQjNlLEdBQXBCO0FBQ0EsV0FBSzRlLFNBQUwsR0FBaUI1ZSxHQUFqQjs7QUFFQSxXQUFLb0IsS0FBTDtBQUNBLFdBQUt1TixPQUFMOztBQUVBeE8saUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsV0FBaEM7QUFDQVIsaUJBQVd3RixRQUFYLENBQW9CNXJCLFFBQXBCLENBQTZCLFdBQTdCLEVBQTBDO0FBQ3hDLGtCQUFVO0FBRDhCLE9BQTFDO0FBSUQ7O0FBRUQ7Ozs7Ozs7QUFuQ1c7QUFBQTtBQUFBLDhCQXdDSDtBQUNOLFlBQUl0UyxLQUFLLEtBQUtzNUIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBVDs7QUFFQSxhQUFLKzBCLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGFBQW5CLEVBQWtDLE1BQWxDOztBQUVBLGFBQUsrMEIsUUFBTCxDQUFjbE8sUUFBZCxvQkFBd0MsS0FBS2gwQixPQUFMLENBQWFnZ0QsVUFBckQ7O0FBRUE7QUFDQSxhQUFLRCxTQUFMLEdBQWlCNWUsRUFBRTVrQyxRQUFGLEVBQ2RvUCxJQURjLENBQ1QsaUJBQWUvQyxFQUFmLEdBQWtCLG1CQUFsQixHQUFzQ0EsRUFBdEMsR0FBeUMsb0JBQXpDLEdBQThEQSxFQUE5RCxHQUFpRSxJQUR4RCxFQUVkdUUsSUFGYyxDQUVULGVBRlMsRUFFUSxPQUZSLEVBR2RBLElBSGMsQ0FHVCxlQUhTLEVBR1F2RSxFQUhSLENBQWpCOztBQUtBO0FBQ0EsWUFBSSxLQUFLNUksT0FBTCxDQUFhaWdELGNBQWIsS0FBZ0MsSUFBcEMsRUFBMEM7QUFDeEMsY0FBSUMsVUFBVTNqRCxTQUFTNkYsYUFBVCxDQUF1QixLQUF2QixDQUFkO0FBQ0EsY0FBSSs5QyxrQkFBa0JoZixFQUFFLEtBQUtlLFFBQVAsRUFBaUI1a0IsR0FBakIsQ0FBcUIsVUFBckIsTUFBcUMsT0FBckMsR0FBK0Msa0JBQS9DLEdBQW9FLHFCQUExRjtBQUNBNGlDLGtCQUFRaDNDLFlBQVIsQ0FBcUIsT0FBckIsRUFBOEIsMkJBQTJCaTNDLGVBQXpEO0FBQ0EsZUFBS0MsUUFBTCxHQUFnQmpmLEVBQUUrZSxPQUFGLENBQWhCO0FBQ0EsY0FBR0Msb0JBQW9CLGtCQUF2QixFQUEyQztBQUN6Q2hmLGNBQUUsTUFBRixFQUFVelosTUFBVixDQUFpQixLQUFLMDRCLFFBQXRCO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsaUJBQUtsZSxRQUFMLENBQWMzdEIsUUFBZCxDQUF1QiwyQkFBdkIsRUFBb0RtVCxNQUFwRCxDQUEyRCxLQUFLMDRCLFFBQWhFO0FBQ0Q7QUFDRjs7QUFFRCxhQUFLcGdELE9BQUwsQ0FBYXFnRCxVQUFiLEdBQTBCLEtBQUtyZ0QsT0FBTCxDQUFhcWdELFVBQWIsSUFBMkIsSUFBSTc1QyxNQUFKLENBQVcsS0FBS3hHLE9BQUwsQ0FBYXNnRCxXQUF4QixFQUFxQyxHQUFyQyxFQUEwQ3QzQyxJQUExQyxDQUErQyxLQUFLazVCLFFBQUwsQ0FBYyxDQUFkLEVBQWlCMzJCLFNBQWhFLENBQXJEOztBQUVBLFlBQUksS0FBS3ZMLE9BQUwsQ0FBYXFnRCxVQUFiLEtBQTRCLElBQWhDLEVBQXNDO0FBQ3BDLGVBQUtyZ0QsT0FBTCxDQUFhdWdELFFBQWIsR0FBd0IsS0FBS3ZnRCxPQUFMLENBQWF1Z0QsUUFBYixJQUF5QixLQUFLcmUsUUFBTCxDQUFjLENBQWQsRUFBaUIzMkIsU0FBakIsQ0FBMkJsRCxLQUEzQixDQUFpQyx1Q0FBakMsRUFBMEUsQ0FBMUUsRUFBNkVsRSxLQUE3RSxDQUFtRixHQUFuRixFQUF3RixDQUF4RixDQUFqRDtBQUNBLGVBQUtxOEMsYUFBTDtBQUNEO0FBQ0QsWUFBSSxDQUFDLEtBQUt4Z0QsT0FBTCxDQUFheWdELGNBQWQsS0FBaUMsSUFBckMsRUFBMkM7QUFDekMsZUFBS3pnRCxPQUFMLENBQWF5Z0QsY0FBYixHQUE4Qi8rQyxXQUFXaEYsT0FBTzBzQixnQkFBUCxDQUF3QitYLEVBQUUsbUJBQUYsRUFBdUIsQ0FBdkIsQ0FBeEIsRUFBbUR5SixrQkFBOUQsSUFBb0YsSUFBbEg7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUE3RVc7QUFBQTtBQUFBLGdDQWtGRDtBQUNSLGFBQUsxSSxRQUFMLENBQWMvbkIsR0FBZCxDQUFrQiwyQkFBbEIsRUFBK0N1RyxFQUEvQyxDQUFrRDtBQUNoRCw2QkFBbUIsS0FBSzZjLElBQUwsQ0FBVWtELElBQVYsQ0FBZSxJQUFmLENBRDZCO0FBRWhELDhCQUFvQixLQUFLM1gsS0FBTCxDQUFXMlgsSUFBWCxDQUFnQixJQUFoQixDQUY0QjtBQUdoRCwrQkFBcUIsS0FBSzlTLE1BQUwsQ0FBWThTLElBQVosQ0FBaUIsSUFBakIsQ0FIMkI7QUFJaEQsa0NBQXdCLEtBQUtpZ0IsZUFBTCxDQUFxQmpnQixJQUFyQixDQUEwQixJQUExQjtBQUp3QixTQUFsRDs7QUFPQSxZQUFJLEtBQUt6Z0MsT0FBTCxDQUFhdTNDLFlBQWIsS0FBOEIsSUFBbEMsRUFBd0M7QUFDdEMsY0FBSXJJLFVBQVUsS0FBS2x2QyxPQUFMLENBQWFpZ0QsY0FBYixHQUE4QixLQUFLRyxRQUFuQyxHQUE4Q2pmLEVBQUUsMkJBQUYsQ0FBNUQ7QUFDQStOLGtCQUFReHVCLEVBQVIsQ0FBVyxFQUFDLHNCQUFzQixLQUFLb0ksS0FBTCxDQUFXMlgsSUFBWCxDQUFnQixJQUFoQixDQUF2QixFQUFYO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUFoR1c7QUFBQTtBQUFBLHNDQW9HSztBQUNkLFlBQUkrQixRQUFRLElBQVo7O0FBRUFyQixVQUFFemtDLE1BQUYsRUFBVWdrQixFQUFWLENBQWEsdUJBQWIsRUFBc0MsWUFBVztBQUMvQyxjQUFJNGdCLFdBQVd1QyxVQUFYLENBQXNCb0YsT0FBdEIsQ0FBOEJ6RyxNQUFNeGlDLE9BQU4sQ0FBY3VnRCxRQUE1QyxDQUFKLEVBQTJEO0FBQ3pEL2Qsa0JBQU1tZSxNQUFOLENBQWEsSUFBYjtBQUNELFdBRkQsTUFFTztBQUNMbmUsa0JBQU1tZSxNQUFOLENBQWEsS0FBYjtBQUNEO0FBQ0YsU0FORCxFQU1HLy9CLEdBTkgsQ0FNTyxtQkFOUCxFQU00QixZQUFXO0FBQ3JDLGNBQUkwZ0IsV0FBV3VDLFVBQVgsQ0FBc0JvRixPQUF0QixDQUE4QnpHLE1BQU14aUMsT0FBTixDQUFjdWdELFFBQTVDLENBQUosRUFBMkQ7QUFDekQvZCxrQkFBTW1lLE1BQU4sQ0FBYSxJQUFiO0FBQ0Q7QUFDRixTQVZEO0FBV0Q7O0FBRUQ7Ozs7OztBQXBIVztBQUFBO0FBQUEsNkJBeUhKTixVQXpISSxFQXlIUTtBQUNqQixZQUFJTyxVQUFVLEtBQUsxZSxRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixjQUFuQixDQUFkO0FBQ0EsWUFBSTAwQyxVQUFKLEVBQWdCO0FBQ2QsZUFBS3YzQixLQUFMO0FBQ0EsZUFBS3UzQixVQUFMLEdBQWtCLElBQWxCO0FBQ0EsZUFBS25lLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGFBQW5CLEVBQWtDLE9BQWxDO0FBQ0EsZUFBSyswQixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixtQ0FBbEI7QUFDQSxjQUFJeW1DLFFBQVF0aUQsTUFBWixFQUFvQjtBQUFFc2lELG9CQUFRbHpCLElBQVI7QUFBaUI7QUFDeEMsU0FORCxNQU1PO0FBQ0wsZUFBSzJ5QixVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsZUFBS25lLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGFBQW5CLEVBQWtDLE1BQWxDO0FBQ0EsZUFBSyswQixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixtQ0FBbEIsRUFBdUR1RyxFQUF2RCxDQUEwRDtBQUN4RCwrQkFBbUIsS0FBSzZjLElBQUwsQ0FBVWtELElBQVYsQ0FBZSxJQUFmLENBRHFDO0FBRXhELGlDQUFxQixLQUFLOVMsTUFBTCxDQUFZOFMsSUFBWixDQUFpQixJQUFqQjtBQUZtQyxXQUExRDtBQUlBLGNBQUltZ0IsUUFBUXRpRCxNQUFaLEVBQW9CO0FBQ2xCc2lELG9CQUFRbjBCLElBQVI7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7Ozs7O0FBOUlXO0FBQUE7QUFBQSxxQ0FrSkkzTCxLQWxKSixFQWtKVztBQUNwQixlQUFPLEtBQVA7QUFDRDs7QUFFRDtBQUNBOztBQXZKVztBQUFBO0FBQUEsd0NBd0pPQSxLQXhKUCxFQXdKYztBQUN2QixZQUFJM2hCLE9BQU8sSUFBWCxDQUR1QixDQUNOOztBQUVoQjtBQUNELFlBQUlBLEtBQUswL0MsWUFBTCxLQUFzQjEvQyxLQUFLdy9DLFlBQS9CLEVBQTZDO0FBQzNDO0FBQ0EsY0FBSXgvQyxLQUFLZ2xCLFNBQUwsS0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEJobEIsaUJBQUtnbEIsU0FBTCxHQUFpQixDQUFqQjtBQUNEO0FBQ0Q7QUFDQSxjQUFJaGxCLEtBQUtnbEIsU0FBTCxLQUFtQmhsQixLQUFLMC9DLFlBQUwsR0FBb0IxL0MsS0FBS3cvQyxZQUFoRCxFQUE4RDtBQUM1RHgvQyxpQkFBS2dsQixTQUFMLEdBQWlCaGxCLEtBQUswL0MsWUFBTCxHQUFvQjEvQyxLQUFLdy9DLFlBQXpCLEdBQXdDLENBQXpEO0FBQ0Q7QUFDRjtBQUNEeC9DLGFBQUswaEQsT0FBTCxHQUFlMWhELEtBQUtnbEIsU0FBTCxHQUFpQixDQUFoQztBQUNBaGxCLGFBQUsyaEQsU0FBTCxHQUFpQjNoRCxLQUFLZ2xCLFNBQUwsR0FBa0JobEIsS0FBSzAvQyxZQUFMLEdBQW9CMS9DLEtBQUt3L0MsWUFBNUQ7QUFDQXgvQyxhQUFLNGhELEtBQUwsR0FBYWpnQyxNQUFNdUQsYUFBTixDQUFvQkosS0FBakM7QUFDRDtBQXpLVTtBQUFBO0FBQUEsNkNBMktZbkQsS0EzS1osRUEyS21CO0FBQzVCLFlBQUkzaEIsT0FBTyxJQUFYLENBRDRCLENBQ1g7QUFDakIsWUFBSXkxQyxLQUFLOXpCLE1BQU1tRCxLQUFOLEdBQWM5a0IsS0FBSzRoRCxLQUE1QjtBQUNBLFlBQUk5TSxPQUFPLENBQUNXLEVBQVo7QUFDQXoxQyxhQUFLNGhELEtBQUwsR0FBYWpnQyxNQUFNbUQsS0FBbkI7O0FBRUEsWUFBSTJ3QixNQUFNejFDLEtBQUswaEQsT0FBWixJQUF5QjVNLFFBQVE5MEMsS0FBSzJoRCxTQUF6QyxFQUFxRDtBQUNuRGhnQyxnQkFBTWdDLGVBQU47QUFDRCxTQUZELE1BRU87QUFDTGhDLGdCQUFNK0IsY0FBTjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7O0FBeExXO0FBQUE7QUFBQSwyQkErTE4vQixLQS9MTSxFQStMQzZELE9BL0xELEVBK0xVO0FBQ25CLFlBQUksS0FBS3VkLFFBQUwsQ0FBY3pOLFFBQWQsQ0FBdUIsU0FBdkIsS0FBcUMsS0FBSzRyQixVQUE5QyxFQUEwRDtBQUFFO0FBQVM7QUFDckUsWUFBSTdkLFFBQVEsSUFBWjs7QUFFQSxZQUFJN2QsT0FBSixFQUFhO0FBQ1gsZUFBS203QixZQUFMLEdBQW9CbjdCLE9BQXBCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLM2tCLE9BQUwsQ0FBYWdoRCxPQUFiLEtBQXlCLEtBQTdCLEVBQW9DO0FBQ2xDdGtELGlCQUFPMGpDLFFBQVAsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkI7QUFDRCxTQUZELE1BRU8sSUFBSSxLQUFLcGdDLE9BQUwsQ0FBYWdoRCxPQUFiLEtBQXlCLFFBQTdCLEVBQXVDO0FBQzVDdGtELGlCQUFPMGpDLFFBQVAsQ0FBZ0IsQ0FBaEIsRUFBa0I3akMsU0FBU3FuQixJQUFULENBQWNpN0IsWUFBaEM7QUFDRDs7QUFFRDs7OztBQUlBcmMsY0FBTU4sUUFBTixDQUFlbE8sUUFBZixDQUF3QixTQUF4Qjs7QUFFQSxhQUFLK3JCLFNBQUwsQ0FBZTV5QyxJQUFmLENBQW9CLGVBQXBCLEVBQXFDLE1BQXJDO0FBQ0EsYUFBSyswQixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixhQUFuQixFQUFrQyxPQUFsQyxFQUNLd1gsT0FETCxDQUNhLHFCQURiOztBQUdBO0FBQ0EsWUFBSSxLQUFLM2tCLE9BQUwsQ0FBYWloRCxhQUFiLEtBQStCLEtBQW5DLEVBQTBDO0FBQ3hDOWYsWUFBRSxNQUFGLEVBQVVuTixRQUFWLENBQW1CLG9CQUFuQixFQUF5Q3RULEVBQXpDLENBQTRDLFdBQTVDLEVBQXlELEtBQUt3Z0MsY0FBOUQ7QUFDQSxlQUFLaGYsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIsWUFBakIsRUFBK0IsS0FBS3lnQyxpQkFBcEM7QUFDQSxlQUFLamYsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIsV0FBakIsRUFBOEIsS0FBSzBnQyxzQkFBbkM7QUFDRDs7QUFFRCxZQUFJLEtBQUtwaEQsT0FBTCxDQUFhaWdELGNBQWIsS0FBZ0MsSUFBcEMsRUFBMEM7QUFDeEMsZUFBS0csUUFBTCxDQUFjcHNCLFFBQWQsQ0FBdUIsWUFBdkI7QUFDRDs7QUFFRCxZQUFJLEtBQUtoMEIsT0FBTCxDQUFhdTNDLFlBQWIsS0FBOEIsSUFBOUIsSUFBc0MsS0FBS3YzQyxPQUFMLENBQWFpZ0QsY0FBYixLQUFnQyxJQUExRSxFQUFnRjtBQUM5RSxlQUFLRyxRQUFMLENBQWNwc0IsUUFBZCxDQUF1QixhQUF2QjtBQUNEOztBQUVELFlBQUksS0FBS2gwQixPQUFMLENBQWE2NUMsU0FBYixLQUEyQixJQUEvQixFQUFxQztBQUNuQyxlQUFLM1gsUUFBTCxDQUFjdGhCLEdBQWQsQ0FBa0IwZ0IsV0FBV2lDLGFBQVgsQ0FBeUIsS0FBS3JCLFFBQTlCLENBQWxCLEVBQTJELFlBQVc7QUFDcEUsZ0JBQUltZixjQUFjN2UsTUFBTU4sUUFBTixDQUFldjJCLElBQWYsQ0FBb0Isa0JBQXBCLENBQWxCO0FBQ0EsZ0JBQUkwMUMsWUFBWS9pRCxNQUFoQixFQUF3QjtBQUNwQitpRCwwQkFBWTdoRCxFQUFaLENBQWUsQ0FBZixFQUFrQmtsQixLQUFsQjtBQUNILGFBRkQsTUFFTztBQUNIOGQsb0JBQU1OLFFBQU4sQ0FBZXYyQixJQUFmLENBQW9CLFdBQXBCLEVBQWlDbk0sRUFBakMsQ0FBb0MsQ0FBcEMsRUFBdUNrbEIsS0FBdkM7QUFDSDtBQUNGLFdBUEQ7QUFRRDs7QUFFRCxZQUFJLEtBQUsxa0IsT0FBTCxDQUFhK25DLFNBQWIsS0FBMkIsSUFBL0IsRUFBcUM7QUFDbkMsZUFBSzdGLFFBQUwsQ0FBYzN0QixRQUFkLENBQXVCLDJCQUF2QixFQUFvRHBILElBQXBELENBQXlELFVBQXpELEVBQXFFLElBQXJFO0FBQ0FtMEIscUJBQVd3RixRQUFYLENBQW9CaUIsU0FBcEIsQ0FBOEIsS0FBSzdGLFFBQW5DO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7OztBQXZQVztBQUFBO0FBQUEsNEJBNlBMaUksRUE3UEssRUE2UEQ7QUFDUixZQUFJLENBQUMsS0FBS2pJLFFBQUwsQ0FBY3pOLFFBQWQsQ0FBdUIsU0FBdkIsQ0FBRCxJQUFzQyxLQUFLNHJCLFVBQS9DLEVBQTJEO0FBQUU7QUFBUzs7QUFFdEUsWUFBSTdkLFFBQVEsSUFBWjs7QUFFQUEsY0FBTU4sUUFBTixDQUFlN04sV0FBZixDQUEyQixTQUEzQjs7QUFFQSxhQUFLNk4sUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsYUFBbkIsRUFBa0MsTUFBbEM7QUFDRTs7OztBQURGLFNBS0t3WCxPQUxMLENBS2EscUJBTGI7O0FBT0E7QUFDQSxZQUFJLEtBQUsza0IsT0FBTCxDQUFhaWhELGFBQWIsS0FBK0IsS0FBbkMsRUFBMEM7QUFDeEM5ZixZQUFFLE1BQUYsRUFBVTlNLFdBQVYsQ0FBc0Isb0JBQXRCLEVBQTRDbGEsR0FBNUMsQ0FBZ0QsV0FBaEQsRUFBNkQsS0FBSyttQyxjQUFsRTtBQUNBLGVBQUtoZixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixZQUFsQixFQUFnQyxLQUFLZ25DLGlCQUFyQztBQUNBLGVBQUtqZixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixXQUFsQixFQUErQixLQUFLaW5DLHNCQUFwQztBQUNEOztBQUVELFlBQUksS0FBS3BoRCxPQUFMLENBQWFpZ0QsY0FBYixLQUFnQyxJQUFwQyxFQUEwQztBQUN4QyxlQUFLRyxRQUFMLENBQWMvckIsV0FBZCxDQUEwQixZQUExQjtBQUNEOztBQUVELFlBQUksS0FBS3IwQixPQUFMLENBQWF1M0MsWUFBYixLQUE4QixJQUE5QixJQUFzQyxLQUFLdjNDLE9BQUwsQ0FBYWlnRCxjQUFiLEtBQWdDLElBQTFFLEVBQWdGO0FBQzlFLGVBQUtHLFFBQUwsQ0FBYy9yQixXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBRUQsYUFBSzByQixTQUFMLENBQWU1eUMsSUFBZixDQUFvQixlQUFwQixFQUFxQyxPQUFyQzs7QUFFQSxZQUFJLEtBQUtuTixPQUFMLENBQWErbkMsU0FBYixLQUEyQixJQUEvQixFQUFxQztBQUNuQyxlQUFLN0YsUUFBTCxDQUFjM3RCLFFBQWQsQ0FBdUIsMkJBQXZCLEVBQW9EMGUsVUFBcEQsQ0FBK0QsVUFBL0Q7QUFDQXFPLHFCQUFXd0YsUUFBWCxDQUFvQnFCLFlBQXBCLENBQWlDLEtBQUtqRyxRQUF0QztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7QUFsU1c7QUFBQTtBQUFBLDZCQXdTSnBoQixLQXhTSSxFQXdTRzZELE9BeFNILEVBd1NZO0FBQ3JCLFlBQUksS0FBS3VkLFFBQUwsQ0FBY3pOLFFBQWQsQ0FBdUIsU0FBdkIsQ0FBSixFQUF1QztBQUNyQyxlQUFLM0wsS0FBTCxDQUFXaEksS0FBWCxFQUFrQjZELE9BQWxCO0FBQ0QsU0FGRCxNQUdLO0FBQ0gsZUFBSzRZLElBQUwsQ0FBVXpjLEtBQVYsRUFBaUI2RCxPQUFqQjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7OztBQWpUVztBQUFBO0FBQUEsc0NBc1RLNWMsQ0F0VEwsRUFzVFE7QUFBQTs7QUFDakJ1NUIsbUJBQVd3RixRQUFYLENBQW9CTSxTQUFwQixDQUE4QnIvQixDQUE5QixFQUFpQyxXQUFqQyxFQUE4QztBQUM1QytnQixpQkFBTyxpQkFBTTtBQUNYLG1CQUFLQSxLQUFMO0FBQ0EsbUJBQUtnM0IsWUFBTCxDQUFrQnA3QixLQUFsQjtBQUNBLG1CQUFPLElBQVA7QUFDRCxXQUwyQztBQU01Q2lqQixtQkFBUyxtQkFBTTtBQUNiNS9CLGNBQUUrYSxlQUFGO0FBQ0EvYSxjQUFFOGEsY0FBRjtBQUNEO0FBVDJDLFNBQTlDO0FBV0Q7O0FBRUQ7Ozs7O0FBcFVXO0FBQUE7QUFBQSxnQ0F3VUQ7QUFDUixhQUFLaUcsS0FBTDtBQUNBLGFBQUtvWixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQiwyQkFBbEI7QUFDQSxhQUFLaW1DLFFBQUwsQ0FBY2ptQyxHQUFkLENBQWtCLGVBQWxCOztBQUVBbW5CLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBOVVVOztBQUFBO0FBQUE7O0FBaVZiMGQsWUFBVWpRLFFBQVYsR0FBcUI7QUFDbkI7Ozs7OztBQU1BMkgsa0JBQWMsSUFQSzs7QUFTbkI7Ozs7OztBQU1BMEksb0JBQWdCLElBZkc7O0FBaUJuQjs7Ozs7O0FBTUFnQixtQkFBZSxJQXZCSTs7QUF5Qm5COzs7Ozs7QUFNQVIsb0JBQWdCLENBL0JHOztBQWlDbkI7Ozs7OztBQU1BVCxnQkFBWSxNQXZDTzs7QUF5Q25COzs7Ozs7QUFNQWdCLGFBQVMsSUEvQ1U7O0FBaURuQjs7Ozs7O0FBTUFYLGdCQUFZLEtBdkRPOztBQXlEbkI7Ozs7OztBQU1BRSxjQUFVLElBL0RTOztBQWlFbkI7Ozs7OztBQU1BMUcsZUFBVyxJQXZFUTs7QUF5RW5COzs7Ozs7O0FBT0F5RyxpQkFBYSxhQWhGTTs7QUFrRm5COzs7Ozs7QUFNQXZZLGVBQVc7QUF4RlEsR0FBckI7O0FBMkZBO0FBQ0F6RyxhQUFXSSxNQUFYLENBQWtCbWUsU0FBbEIsRUFBNkIsV0FBN0I7QUFFQyxDQS9hQSxDQSthQ3RpRCxNQS9hRCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7OztBQUZhLE1BV1BtZ0IsS0FYTztBQVlYOzs7Ozs7QUFNQSxtQkFBWS9iLE9BQVosRUFBcUJ2bEMsT0FBckIsRUFBNkI7QUFBQTs7QUFDM0IsV0FBS2tpQyxRQUFMLEdBQWdCcUQsT0FBaEI7QUFDQSxXQUFLdmxDLE9BQUwsR0FBZW1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWF1aEQsTUFBTTFSLFFBQW5CLEVBQTZCLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUE3QixFQUFtRHhiLE9BQW5ELENBQWY7O0FBRUEsV0FBS3VpQyxLQUFMOztBQUVBakIsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsT0FBaEM7QUFDQVIsaUJBQVd3RixRQUFYLENBQW9CNXJCLFFBQXBCLENBQTZCLE9BQTdCLEVBQXNDO0FBQ3BDLGVBQU87QUFDTCx5QkFBZSxNQURWO0FBRUwsd0JBQWM7QUFGVCxTQUQ2QjtBQUtwQyxlQUFPO0FBQ0wsd0JBQWMsTUFEVDtBQUVMLHlCQUFlO0FBRlY7QUFMNkIsT0FBdEM7QUFVRDs7QUFFRDs7Ozs7OztBQXJDVztBQUFBO0FBQUEsOEJBMENIO0FBQ047QUFDQSxhQUFLcW1DLE1BQUw7O0FBRUEsYUFBS3JLLFFBQUwsR0FBZ0IsS0FBS2hWLFFBQUwsQ0FBY3YyQixJQUFkLE9BQXVCLEtBQUszTCxPQUFMLENBQWF3aEQsY0FBcEMsQ0FBaEI7QUFDQSxhQUFLQyxPQUFMLEdBQWUsS0FBS3ZmLFFBQUwsQ0FBY3YyQixJQUFkLE9BQXVCLEtBQUszTCxPQUFMLENBQWEwaEQsVUFBcEMsQ0FBZjs7QUFFQSxZQUFJQyxVQUFVLEtBQUt6ZixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixLQUFuQixDQUFkO0FBQUEsWUFDSWkyQyxhQUFhLEtBQUtILE9BQUwsQ0FBYTcxQyxNQUFiLENBQW9CLFlBQXBCLENBRGpCO0FBQUEsWUFFSWhELEtBQUssS0FBS3M1QixRQUFMLENBQWMsQ0FBZCxFQUFpQnQ1QixFQUFqQixJQUF1QjA0QixXQUFXVyxXQUFYLENBQXVCLENBQXZCLEVBQTBCLE9BQTFCLENBRmhDOztBQUlBLGFBQUtDLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CO0FBQ2pCLHlCQUFldkUsRUFERTtBQUVqQixnQkFBTUE7QUFGVyxTQUFuQjs7QUFLQSxZQUFJLENBQUNnNUMsV0FBV3RqRCxNQUFoQixFQUF3QjtBQUN0QixlQUFLbWpELE9BQUwsQ0FBYWppRCxFQUFiLENBQWdCLENBQWhCLEVBQW1CdzBCLFFBQW5CLENBQTRCLFdBQTVCO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUtoMEIsT0FBTCxDQUFhNmhELE1BQWxCLEVBQTBCO0FBQ3hCLGVBQUtKLE9BQUwsQ0FBYXp0QixRQUFiLENBQXNCLGFBQXRCO0FBQ0Q7O0FBRUQsWUFBSTJ0QixRQUFRcmpELE1BQVosRUFBb0I7QUFDbEJnakMscUJBQVd3SyxjQUFYLENBQTBCNlYsT0FBMUIsRUFBbUMsS0FBS0csZ0JBQUwsQ0FBc0JyaEIsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBbkM7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLcWhCLGdCQUFMLEdBREssQ0FDbUI7QUFDekI7O0FBRUQsWUFBSSxLQUFLOWhELE9BQUwsQ0FBYStoRCxPQUFqQixFQUEwQjtBQUN4QixlQUFLQyxZQUFMO0FBQ0Q7O0FBRUQsYUFBS2xTLE9BQUw7O0FBRUEsWUFBSSxLQUFLOXZDLE9BQUwsQ0FBYWlpRCxRQUFiLElBQXlCLEtBQUtSLE9BQUwsQ0FBYW5qRCxNQUFiLEdBQXNCLENBQW5ELEVBQXNEO0FBQ3BELGVBQUs0akQsT0FBTDtBQUNEOztBQUVELFlBQUksS0FBS2xpRCxPQUFMLENBQWFtaUQsVUFBakIsRUFBNkI7QUFBRTtBQUM3QixlQUFLakwsUUFBTCxDQUFjL3BDLElBQWQsQ0FBbUIsVUFBbkIsRUFBK0IsQ0FBL0I7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUF2Rlc7QUFBQTtBQUFBLHFDQTRGSTtBQUNiLGFBQUtpMUMsUUFBTCxHQUFnQixLQUFLbGdCLFFBQUwsQ0FBY3YyQixJQUFkLE9BQXVCLEtBQUszTCxPQUFMLENBQWFxaUQsWUFBcEMsRUFBb0QxMkMsSUFBcEQsQ0FBeUQsUUFBekQsQ0FBaEI7QUFDRDs7QUFFRDs7Ozs7QUFoR1c7QUFBQTtBQUFBLGdDQW9HRDtBQUNSLFlBQUk2MkIsUUFBUSxJQUFaO0FBQ0EsYUFBSzNSLEtBQUwsR0FBYSxJQUFJeVEsV0FBV2lLLEtBQWYsQ0FDWCxLQUFLckosUUFETSxFQUVYO0FBQ0VoVSxvQkFBVSxLQUFLbHVCLE9BQUwsQ0FBYXNpRCxVQUR6QjtBQUVFMVcsb0JBQVU7QUFGWixTQUZXLEVBTVgsWUFBVztBQUNUcEosZ0JBQU0rZixXQUFOLENBQWtCLElBQWxCO0FBQ0QsU0FSVSxDQUFiO0FBU0EsYUFBSzF4QixLQUFMLENBQVc1aEIsS0FBWDtBQUNEOztBQUVEOzs7Ozs7QUFsSFc7QUFBQTtBQUFBLHlDQXVIUTtBQUNqQixZQUFJdXpCLFFBQVEsSUFBWjtBQUNBLGFBQUtnZ0IsaUJBQUw7QUFDRDs7QUFFRDs7Ozs7OztBQTVIVztBQUFBO0FBQUEsd0NBa0lPclksRUFsSVAsRUFrSVc7QUFBQztBQUNyQixZQUFJcGUsTUFBTSxDQUFWO0FBQUEsWUFBYXhaLElBQWI7QUFBQSxZQUFtQnNtQyxVQUFVLENBQTdCO0FBQUEsWUFBZ0NyVyxRQUFRLElBQXhDOztBQUVBLGFBQUtpZixPQUFMLENBQWF6aUQsSUFBYixDQUFrQixZQUFXO0FBQzNCdVQsaUJBQU8sS0FBS3lhLHFCQUFMLEdBQTZCaUMsTUFBcEM7QUFDQWtTLFlBQUUsSUFBRixFQUFRaDBCLElBQVIsQ0FBYSxZQUFiLEVBQTJCMHJDLE9BQTNCOztBQUVBLGNBQUlyVyxNQUFNaWYsT0FBTixDQUFjNzFDLE1BQWQsQ0FBcUIsWUFBckIsRUFBbUMsQ0FBbkMsTUFBMEM0MkIsTUFBTWlmLE9BQU4sQ0FBY2ppRCxFQUFkLENBQWlCcTVDLE9BQWpCLEVBQTBCLENBQTFCLENBQTlDLEVBQTRFO0FBQUM7QUFDM0UxWCxjQUFFLElBQUYsRUFBUTdqQixHQUFSLENBQVksRUFBQyxZQUFZLFVBQWIsRUFBeUIsV0FBVyxNQUFwQyxFQUFaO0FBQ0Q7QUFDRHlPLGdCQUFNeFosT0FBT3daLEdBQVAsR0FBYXhaLElBQWIsR0FBb0J3WixHQUExQjtBQUNBOHNCO0FBQ0QsU0FURDs7QUFXQSxZQUFJQSxZQUFZLEtBQUs0SSxPQUFMLENBQWFuakQsTUFBN0IsRUFBcUM7QUFDbkMsZUFBSzQ0QyxRQUFMLENBQWM1NUIsR0FBZCxDQUFrQixFQUFDLFVBQVV5TyxHQUFYLEVBQWxCLEVBRG1DLENBQ0M7QUFDcEMsY0FBR29lLEVBQUgsRUFBTztBQUFDQSxlQUFHcGUsR0FBSDtBQUFTLFdBRmtCLENBRWpCO0FBQ25CO0FBQ0Y7O0FBRUQ7Ozs7OztBQXRKVztBQUFBO0FBQUEsc0NBMkpLa0QsTUEzSkwsRUEySmE7QUFDdEIsYUFBS3d5QixPQUFMLENBQWF6aUQsSUFBYixDQUFrQixZQUFXO0FBQzNCbWlDLFlBQUUsSUFBRixFQUFRN2pCLEdBQVIsQ0FBWSxZQUFaLEVBQTBCMlIsTUFBMUI7QUFDRCxTQUZEO0FBR0Q7O0FBRUQ7Ozs7OztBQWpLVztBQUFBO0FBQUEsZ0NBc0tEO0FBQ1IsWUFBSXVULFFBQVEsSUFBWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBS04sUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0Isc0JBQWxCLEVBQTBDdUcsRUFBMUMsQ0FBNkM7QUFDM0MsaUNBQXVCLEtBQUtvaEMsZ0JBQUwsQ0FBc0JyaEIsSUFBdEIsQ0FBMkIsSUFBM0I7QUFEb0IsU0FBN0M7QUFHQSxZQUFJLEtBQUtnaEIsT0FBTCxDQUFhbmpELE1BQWIsR0FBc0IsQ0FBMUIsRUFBNkI7O0FBRTNCLGNBQUksS0FBSzBCLE9BQUwsQ0FBYW10QyxLQUFqQixFQUF3QjtBQUN0QixpQkFBS3NVLE9BQUwsQ0FBYXRuQyxHQUFiLENBQWlCLHdDQUFqQixFQUNDdUcsRUFERCxDQUNJLG9CQURKLEVBQzBCLFVBQVMzWSxDQUFULEVBQVc7QUFDbkNBLGdCQUFFOGEsY0FBRjtBQUNBMmYsb0JBQU0rZixXQUFOLENBQWtCLElBQWxCO0FBQ0QsYUFKRCxFQUlHN2hDLEVBSkgsQ0FJTSxxQkFKTixFQUk2QixVQUFTM1ksQ0FBVCxFQUFXO0FBQ3RDQSxnQkFBRThhLGNBQUY7QUFDQTJmLG9CQUFNK2YsV0FBTixDQUFrQixLQUFsQjtBQUNELGFBUEQ7QUFRRDtBQUNEOztBQUVBLGNBQUksS0FBS3ZpRCxPQUFMLENBQWFpaUQsUUFBakIsRUFBMkI7QUFDekIsaUJBQUtSLE9BQUwsQ0FBYS9nQyxFQUFiLENBQWdCLGdCQUFoQixFQUFrQyxZQUFXO0FBQzNDOGhCLG9CQUFNTixRQUFOLENBQWUxbUIsSUFBZixDQUFvQixXQUFwQixFQUFpQ2duQixNQUFNTixRQUFOLENBQWUxbUIsSUFBZixDQUFvQixXQUFwQixJQUFtQyxLQUFuQyxHQUEyQyxJQUE1RTtBQUNBZ25CLG9CQUFNM1IsS0FBTixDQUFZMlIsTUFBTU4sUUFBTixDQUFlMW1CLElBQWYsQ0FBb0IsV0FBcEIsSUFBbUMsT0FBbkMsR0FBNkMsT0FBekQ7QUFDRCxhQUhEOztBQUtBLGdCQUFJLEtBQUt4YixPQUFMLENBQWF5aUQsWUFBakIsRUFBK0I7QUFDN0IsbUJBQUt2Z0IsUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIscUJBQWpCLEVBQXdDLFlBQVc7QUFDakQ4aEIsc0JBQU0zUixLQUFOLENBQVlnYixLQUFaO0FBQ0QsZUFGRCxFQUVHbnJCLEVBRkgsQ0FFTSxxQkFGTixFQUU2QixZQUFXO0FBQ3RDLG9CQUFJLENBQUM4aEIsTUFBTU4sUUFBTixDQUFlMW1CLElBQWYsQ0FBb0IsV0FBcEIsQ0FBTCxFQUF1QztBQUNyQ2duQix3QkFBTTNSLEtBQU4sQ0FBWTVoQixLQUFaO0FBQ0Q7QUFDRixlQU5EO0FBT0Q7QUFDRjs7QUFFRCxjQUFJLEtBQUtqUCxPQUFMLENBQWEwaUQsVUFBakIsRUFBNkI7QUFDM0IsZ0JBQUlDLFlBQVksS0FBS3pnQixRQUFMLENBQWN2MkIsSUFBZCxPQUF1QixLQUFLM0wsT0FBTCxDQUFhNGlELFNBQXBDLFdBQW1ELEtBQUs1aUQsT0FBTCxDQUFhNmlELFNBQWhFLENBQWhCO0FBQ0FGLHNCQUFVeDFDLElBQVYsQ0FBZSxVQUFmLEVBQTJCLENBQTNCO0FBQ0E7QUFEQSxhQUVDdVQsRUFGRCxDQUVJLGtDQUZKLEVBRXdDLFVBQVMzWSxDQUFULEVBQVc7QUFDeERBLGdCQUFFOGEsY0FBRjtBQUNPMmYsb0JBQU0rZixXQUFOLENBQWtCcGhCLEVBQUUsSUFBRixFQUFRMU0sUUFBUixDQUFpQitOLE1BQU14aUMsT0FBTixDQUFjNGlELFNBQS9CLENBQWxCO0FBQ0QsYUFMRDtBQU1EOztBQUVELGNBQUksS0FBSzVpRCxPQUFMLENBQWEraEQsT0FBakIsRUFBMEI7QUFDeEIsaUJBQUtLLFFBQUwsQ0FBYzFoQyxFQUFkLENBQWlCLGtDQUFqQixFQUFxRCxZQUFXO0FBQzlELGtCQUFJLGFBQWExWCxJQUFiLENBQWtCLEtBQUt1QyxTQUF2QixDQUFKLEVBQXVDO0FBQUUsdUJBQU8sS0FBUDtBQUFlLGVBRE0sQ0FDTjtBQUN4RCxrQkFBSWdFLE1BQU00eEIsRUFBRSxJQUFGLEVBQVEzbEIsSUFBUixDQUFhLE9BQWIsQ0FBVjtBQUFBLGtCQUNBa3NCLE1BQU1uNEIsTUFBTWl6QixNQUFNaWYsT0FBTixDQUFjNzFDLE1BQWQsQ0FBcUIsWUFBckIsRUFBbUM0UCxJQUFuQyxDQUF3QyxPQUF4QyxDQURaO0FBQUEsa0JBRUFzbkMsU0FBU3RnQixNQUFNaWYsT0FBTixDQUFjamlELEVBQWQsQ0FBaUIrUCxHQUFqQixDQUZUOztBQUlBaXpCLG9CQUFNK2YsV0FBTixDQUFrQjdhLEdBQWxCLEVBQXVCb2IsTUFBdkIsRUFBK0J2ekMsR0FBL0I7QUFDRCxhQVBEO0FBUUQ7O0FBRUQsY0FBSSxLQUFLdlAsT0FBTCxDQUFhbWlELFVBQWpCLEVBQTZCO0FBQzNCLGlCQUFLakwsUUFBTCxDQUFjaGhDLEdBQWQsQ0FBa0IsS0FBS2tzQyxRQUF2QixFQUFpQzFoQyxFQUFqQyxDQUFvQyxrQkFBcEMsRUFBd0QsVUFBUzNZLENBQVQsRUFBWTtBQUNsRTtBQUNBdTVCLHlCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsT0FBakMsRUFBMEM7QUFDeEMwTixzQkFBTSxnQkFBVztBQUNmK3NCLHdCQUFNK2YsV0FBTixDQUFrQixJQUFsQjtBQUNELGlCQUh1QztBQUl4QzVOLDBCQUFVLG9CQUFXO0FBQ25CblMsd0JBQU0rZixXQUFOLENBQWtCLEtBQWxCO0FBQ0QsaUJBTnVDO0FBT3hDNWEseUJBQVMsbUJBQVc7QUFBRTtBQUNwQixzQkFBSXhHLEVBQUVwNUIsRUFBRXpILE1BQUosRUFBWWdVLEVBQVosQ0FBZWt1QixNQUFNNGYsUUFBckIsQ0FBSixFQUFvQztBQUNsQzVmLDBCQUFNNGYsUUFBTixDQUFleDJDLE1BQWYsQ0FBc0IsWUFBdEIsRUFBb0M4WSxLQUFwQztBQUNEO0FBQ0Y7QUFYdUMsZUFBMUM7QUFhRCxhQWZEO0FBZ0JEO0FBQ0Y7QUFDRjs7QUFFRDs7OztBQTFQVztBQUFBO0FBQUEsK0JBNlBGO0FBQ1A7QUFDQSxZQUFJLE9BQU8sS0FBSys4QixPQUFaLElBQXVCLFdBQTNCLEVBQXdDO0FBQ3RDO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLQSxPQUFMLENBQWFuakQsTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUMzQjtBQUNBLGVBQUs0akMsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsV0FBbEIsRUFBK0J4TyxJQUEvQixDQUFvQyxHQUFwQyxFQUF5Q3dPLEdBQXpDLENBQTZDLFdBQTdDOztBQUVBO0FBQ0EsY0FBSSxLQUFLbmEsT0FBTCxDQUFhaWlELFFBQWpCLEVBQTJCO0FBQ3pCLGlCQUFLcHhCLEtBQUwsQ0FBVzhhLE9BQVg7QUFDRDs7QUFFRDtBQUNBLGVBQUs4VixPQUFMLENBQWF6aUQsSUFBYixDQUFrQixVQUFTcWUsRUFBVCxFQUFhO0FBQzdCOGpCLGNBQUU5akIsRUFBRixFQUFNZ1gsV0FBTixDQUFrQiwyQkFBbEIsRUFDR3BCLFVBREgsQ0FDYyxXQURkLEVBRUd2RixJQUZIO0FBR0QsV0FKRDs7QUFNQTtBQUNBLGVBQUsrekIsT0FBTCxDQUFhbGlELEtBQWIsR0FBcUJ5MEIsUUFBckIsQ0FBOEIsV0FBOUIsRUFBMkN2SCxJQUEzQzs7QUFFQTtBQUNBLGVBQUt5VixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLHNCQUF0QixFQUE4QyxDQUFDLEtBQUs4OEIsT0FBTCxDQUFhbGlELEtBQWIsRUFBRCxDQUE5Qzs7QUFFQTtBQUNBLGNBQUksS0FBS1MsT0FBTCxDQUFhK2hELE9BQWpCLEVBQTBCO0FBQ3hCLGlCQUFLZ0IsY0FBTCxDQUFvQixDQUFwQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDs7Ozs7Ozs7O0FBaFNXO0FBQUE7QUFBQSxrQ0F3U0NDLEtBeFNELEVBd1NRQyxXQXhTUixFQXdTcUIxekMsR0F4U3JCLEVBd1MwQjtBQUNuQyxZQUFJLENBQUMsS0FBS2t5QyxPQUFWLEVBQW1CO0FBQUM7QUFBUyxTQURNLENBQ0w7QUFDOUIsWUFBSXlCLFlBQVksS0FBS3pCLE9BQUwsQ0FBYTcxQyxNQUFiLENBQW9CLFlBQXBCLEVBQWtDcE0sRUFBbEMsQ0FBcUMsQ0FBckMsQ0FBaEI7O0FBRUEsWUFBSSxPQUFPd0osSUFBUCxDQUFZazZDLFVBQVUsQ0FBVixFQUFhMzNDLFNBQXpCLENBQUosRUFBeUM7QUFBRSxpQkFBTyxLQUFQO0FBQWUsU0FKdkIsQ0FJd0I7O0FBRTNELFlBQUk0M0MsY0FBYyxLQUFLMUIsT0FBTCxDQUFhbGlELEtBQWIsRUFBbEI7QUFBQSxZQUNBNmpELGFBQWEsS0FBSzNCLE9BQUwsQ0FBYWhpRCxJQUFiLEVBRGI7QUFBQSxZQUVBNGpELFFBQVFMLFFBQVEsT0FBUixHQUFrQixNQUYxQjtBQUFBLFlBR0FNLFNBQVNOLFFBQVEsTUFBUixHQUFpQixPQUgxQjtBQUFBLFlBSUF4Z0IsUUFBUSxJQUpSO0FBQUEsWUFLQStnQixTQUxBOztBQU9BLFlBQUksQ0FBQ04sV0FBTCxFQUFrQjtBQUFFO0FBQ2xCTSxzQkFBWVAsUUFBUTtBQUNuQixlQUFLaGpELE9BQUwsQ0FBYXdqRCxZQUFiLEdBQTRCTixVQUFVenRDLElBQVYsT0FBbUIsS0FBS3pWLE9BQUwsQ0FBYTBoRCxVQUFoQyxFQUE4Q3BqRCxNQUE5QyxHQUF1RDRrRCxVQUFVenRDLElBQVYsT0FBbUIsS0FBS3pWLE9BQUwsQ0FBYTBoRCxVQUFoQyxDQUF2RCxHQUF1R3lCLFdBQW5JLEdBQWlKRCxVQUFVenRDLElBQVYsT0FBbUIsS0FBS3pWLE9BQUwsQ0FBYTBoRCxVQUFoQyxDQUR0SSxHQUNvTDtBQUUvTCxlQUFLMWhELE9BQUwsQ0FBYXdqRCxZQUFiLEdBQTRCTixVQUFVeHRDLElBQVYsT0FBbUIsS0FBSzFWLE9BQUwsQ0FBYTBoRCxVQUFoQyxFQUE4Q3BqRCxNQUE5QyxHQUF1RDRrRCxVQUFVeHRDLElBQVYsT0FBbUIsS0FBSzFWLE9BQUwsQ0FBYTBoRCxVQUFoQyxDQUF2RCxHQUF1RzBCLFVBQW5JLEdBQWdKRixVQUFVeHRDLElBQVYsT0FBbUIsS0FBSzFWLE9BQUwsQ0FBYTBoRCxVQUFoQyxDQUhqSixDQURnQixDQUlnTDtBQUNqTSxTQUxELE1BS087QUFDTDZCLHNCQUFZTixXQUFaO0FBQ0Q7O0FBRUQsWUFBSU0sVUFBVWpsRCxNQUFkLEVBQXNCO0FBQ3BCOzs7O0FBSUEsZUFBSzRqQyxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDRCQUF0QixFQUFvRCxDQUFDdStCLFNBQUQsRUFBWUssU0FBWixDQUFwRDs7QUFFQSxjQUFJLEtBQUt2akQsT0FBTCxDQUFhK2hELE9BQWpCLEVBQTBCO0FBQ3hCeHlDLGtCQUFNQSxPQUFPLEtBQUtreUMsT0FBTCxDQUFhenJDLEtBQWIsQ0FBbUJ1dEMsU0FBbkIsQ0FBYixDQUR3QixDQUNvQjtBQUM1QyxpQkFBS1IsY0FBTCxDQUFvQnh6QyxHQUFwQjtBQUNEOztBQUVELGNBQUksS0FBS3ZQLE9BQUwsQ0FBYTZoRCxNQUFiLElBQXVCLENBQUMsS0FBSzNmLFFBQUwsQ0FBYzV0QixFQUFkLENBQWlCLFNBQWpCLENBQTVCLEVBQXlEO0FBQ3ZEZ3RCLHVCQUFXMkksTUFBWCxDQUFrQkMsU0FBbEIsQ0FDRXFaLFVBQVV2dkIsUUFBVixDQUFtQixXQUFuQixFQUFnQzFXLEdBQWhDLENBQW9DLEVBQUMsWUFBWSxVQUFiLEVBQXlCLE9BQU8sQ0FBaEMsRUFBcEMsQ0FERixFQUVFLEtBQUt0ZCxPQUFMLGdCQUEwQnFqRCxLQUExQixDQUZGLEVBR0UsWUFBVTtBQUNSRSx3QkFBVWptQyxHQUFWLENBQWMsRUFBQyxZQUFZLFVBQWIsRUFBeUIsV0FBVyxPQUFwQyxFQUFkLEVBQ0NuUSxJQURELENBQ00sV0FETixFQUNtQixRQURuQjtBQUVILGFBTkQ7O0FBUUFtMEIsdUJBQVcySSxNQUFYLENBQWtCRyxVQUFsQixDQUNFOFksVUFBVTd1QixXQUFWLENBQXNCLFdBQXRCLENBREYsRUFFRSxLQUFLcjBCLE9BQUwsZUFBeUJzakQsTUFBekIsQ0FGRixFQUdFLFlBQVU7QUFDUkosd0JBQVVqd0IsVUFBVixDQUFxQixXQUFyQjtBQUNBLGtCQUFHdVAsTUFBTXhpQyxPQUFOLENBQWNpaUQsUUFBZCxJQUEwQixDQUFDemYsTUFBTTNSLEtBQU4sQ0FBWTZhLFFBQTFDLEVBQW1EO0FBQ2pEbEosc0JBQU0zUixLQUFOLENBQVk4YSxPQUFaO0FBQ0Q7QUFDRDtBQUNELGFBVEg7QUFVRCxXQW5CRCxNQW1CTztBQUNMdVgsc0JBQVU3dUIsV0FBVixDQUFzQixpQkFBdEIsRUFBeUNwQixVQUF6QyxDQUFvRCxXQUFwRCxFQUFpRXZGLElBQWpFO0FBQ0E2MUIsc0JBQVV2dkIsUUFBVixDQUFtQixpQkFBbkIsRUFBc0M3bUIsSUFBdEMsQ0FBMkMsV0FBM0MsRUFBd0QsUUFBeEQsRUFBa0VzZixJQUFsRTtBQUNBLGdCQUFJLEtBQUt6c0IsT0FBTCxDQUFhaWlELFFBQWIsSUFBeUIsQ0FBQyxLQUFLcHhCLEtBQUwsQ0FBVzZhLFFBQXpDLEVBQW1EO0FBQ2pELG1CQUFLN2EsS0FBTCxDQUFXOGEsT0FBWDtBQUNEO0FBQ0Y7QUFDSDs7OztBQUlFLGVBQUt6SixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLHNCQUF0QixFQUE4QyxDQUFDNCtCLFNBQUQsQ0FBOUM7QUFDRDtBQUNGOztBQUVEOzs7Ozs7O0FBNVdXO0FBQUE7QUFBQSxxQ0FrWEloMEMsR0FsWEosRUFrWFM7QUFDbEIsWUFBSWswQyxhQUFhLEtBQUt2aEIsUUFBTCxDQUFjdjJCLElBQWQsT0FBdUIsS0FBSzNMLE9BQUwsQ0FBYXFpRCxZQUFwQyxFQUNoQjEyQyxJQURnQixDQUNYLFlBRFcsRUFDRzBvQixXQURILENBQ2UsV0FEZixFQUM0QnpQLElBRDVCLEVBQWpCO0FBQUEsWUFFQTgrQixPQUFPRCxXQUFXOTNDLElBQVgsQ0FBZ0IsV0FBaEIsRUFBNkI4YixNQUE3QixFQUZQO0FBQUEsWUFHQWs4QixhQUFhLEtBQUt2QixRQUFMLENBQWM1aUQsRUFBZCxDQUFpQitQLEdBQWpCLEVBQXNCeWtCLFFBQXRCLENBQStCLFdBQS9CLEVBQTRDdE0sTUFBNUMsQ0FBbURnOEIsSUFBbkQsQ0FIYjtBQUlEOztBQUVEOzs7OztBQXpYVztBQUFBO0FBQUEsZ0NBNlhEO0FBQ1IsYUFBS3hoQixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixXQUFsQixFQUErQnhPLElBQS9CLENBQW9DLEdBQXBDLEVBQXlDd08sR0FBekMsQ0FBNkMsV0FBN0MsRUFBMER2YSxHQUExRCxHQUFnRTh0QixJQUFoRTtBQUNBNFQsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUFoWVU7O0FBQUE7QUFBQTs7QUFtWWJtZixRQUFNMVIsUUFBTixHQUFpQjtBQUNmOzs7Ozs7QUFNQW1TLGFBQVMsSUFQTTtBQVFmOzs7Ozs7QUFNQVcsZ0JBQVksSUFkRztBQWVmOzs7Ozs7QUFNQWtCLHFCQUFpQixnQkFyQkY7QUFzQmY7Ozs7OztBQU1BQyxvQkFBZ0IsaUJBNUJEO0FBNkJmOzs7Ozs7O0FBT0FDLG9CQUFnQixlQXBDRDtBQXFDZjs7Ozs7O0FBTUFDLG1CQUFlLGdCQTNDQTtBQTRDZjs7Ozs7O0FBTUE5QixjQUFVLElBbERLO0FBbURmOzs7Ozs7QUFNQUssZ0JBQVksSUF6REc7QUEwRGY7Ozs7OztBQU1Ba0Isa0JBQWMsSUFoRUM7QUFpRWY7Ozs7OztBQU1BclcsV0FBTyxJQXZFUTtBQXdFZjs7Ozs7O0FBTUFzVixrQkFBYyxJQTlFQztBQStFZjs7Ozs7O0FBTUFOLGdCQUFZLElBckZHO0FBc0ZmOzs7Ozs7QUFNQVgsb0JBQWdCLGlCQTVGRDtBQTZGZjs7Ozs7O0FBTUFFLGdCQUFZLGFBbkdHO0FBb0dmOzs7Ozs7QUFNQVcsa0JBQWMsZUExR0M7QUEyR2Y7Ozs7OztBQU1BTyxlQUFXLFlBakhJO0FBa0hmOzs7Ozs7QUFNQUMsZUFBVyxnQkF4SEk7QUF5SGY7Ozs7OztBQU1BaEIsWUFBUTtBQS9ITyxHQUFqQjs7QUFrSUE7QUFDQXZnQixhQUFXSSxNQUFYLENBQWtCNGYsS0FBbEIsRUFBeUIsT0FBekI7QUFFQyxDQXhnQkEsQ0F3Z0JDL2pELE1BeGdCRCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7QUFGYSxNQVNQNmlCLGNBVE87QUFVWDs7Ozs7OztBQU9BLDRCQUFZemUsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JmLEVBQUVvRSxPQUFGLENBQWhCO0FBQ0EsV0FBS29ZLEtBQUwsR0FBYSxLQUFLemIsUUFBTCxDQUFjMW1CLElBQWQsQ0FBbUIsaUJBQW5CLENBQWI7QUFDQSxXQUFLeW9DLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxXQUFLQyxhQUFMLEdBQXFCLElBQXJCOztBQUVBLFdBQUszaEIsS0FBTDtBQUNBLFdBQUt1TixPQUFMOztBQUVBeE8saUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsZ0JBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUE3Qlc7QUFBQTtBQUFBLDhCQWtDSDtBQUNOO0FBQ0EsWUFBSSxPQUFPLEtBQUs2YixLQUFaLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDLGNBQUl3RyxZQUFZLEVBQWhCOztBQUVBO0FBQ0EsY0FBSXhHLFFBQVEsS0FBS0EsS0FBTCxDQUFXeDVDLEtBQVgsQ0FBaUIsR0FBakIsQ0FBWjs7QUFFQTtBQUNBLGVBQUssSUFBSS9FLElBQUksQ0FBYixFQUFnQkEsSUFBSXUrQyxNQUFNci9DLE1BQTFCLEVBQWtDYyxHQUFsQyxFQUF1QztBQUNyQyxnQkFBSTIrQyxPQUFPSixNQUFNditDLENBQU4sRUFBUytFLEtBQVQsQ0FBZSxHQUFmLENBQVg7QUFDQSxnQkFBSWlnRCxXQUFXckcsS0FBS3ovQyxNQUFMLEdBQWMsQ0FBZCxHQUFrQnkvQyxLQUFLLENBQUwsQ0FBbEIsR0FBNEIsT0FBM0M7QUFDQSxnQkFBSXNHLGFBQWF0RyxLQUFLei9DLE1BQUwsR0FBYyxDQUFkLEdBQWtCeS9DLEtBQUssQ0FBTCxDQUFsQixHQUE0QkEsS0FBSyxDQUFMLENBQTdDOztBQUVBLGdCQUFJdUcsWUFBWUQsVUFBWixNQUE0QixJQUFoQyxFQUFzQztBQUNwQ0Ysd0JBQVVDLFFBQVYsSUFBc0JFLFlBQVlELFVBQVosQ0FBdEI7QUFDRDtBQUNGOztBQUVELGVBQUsxRyxLQUFMLEdBQWF3RyxTQUFiO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDaGpCLEVBQUV0L0IsYUFBRixDQUFnQixLQUFLODdDLEtBQXJCLENBQUwsRUFBa0M7QUFDaEMsZUFBSzRHLGtCQUFMO0FBQ0Q7QUFDRDtBQUNBLGFBQUtyaUIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsYUFBbkIsRUFBbUMsS0FBSyswQixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixhQUFuQixLQUFxQ20wQixXQUFXVyxXQUFYLENBQXVCLENBQXZCLEVBQTBCLGlCQUExQixDQUF4RTtBQUNEOztBQUVEOzs7Ozs7QUEvRFc7QUFBQTtBQUFBLGdDQW9FRDtBQUNSLFlBQUlPLFFBQVEsSUFBWjs7QUFFQXJCLFVBQUV6a0MsTUFBRixFQUFVZ2tCLEVBQVYsQ0FBYSx1QkFBYixFQUFzQyxZQUFXO0FBQy9DOGhCLGdCQUFNK2hCLGtCQUFOO0FBQ0QsU0FGRDtBQUdBO0FBQ0E7QUFDQTtBQUNEOztBQUVEOzs7Ozs7QUEvRVc7QUFBQTtBQUFBLDJDQW9GVTtBQUNuQixZQUFJQyxTQUFKO0FBQUEsWUFBZWhpQixRQUFRLElBQXZCO0FBQ0E7QUFDQXJCLFVBQUVuaUMsSUFBRixDQUFPLEtBQUsyK0MsS0FBWixFQUFtQixVQUFTaDhDLEdBQVQsRUFBYztBQUMvQixjQUFJMi9CLFdBQVd1QyxVQUFYLENBQXNCb0YsT0FBdEIsQ0FBOEJ0bkMsR0FBOUIsQ0FBSixFQUF3QztBQUN0QzZpRCx3QkFBWTdpRCxHQUFaO0FBQ0Q7QUFDRixTQUpEOztBQU1BO0FBQ0EsWUFBSSxDQUFDNmlELFNBQUwsRUFBZ0I7O0FBRWhCO0FBQ0EsWUFBSSxLQUFLTixhQUFMLFlBQThCLEtBQUt2RyxLQUFMLENBQVc2RyxTQUFYLEVBQXNCOWlCLE1BQXhELEVBQWdFOztBQUVoRTtBQUNBUCxVQUFFbmlDLElBQUYsQ0FBT3NsRCxXQUFQLEVBQW9CLFVBQVMzaUQsR0FBVCxFQUFjK0IsS0FBZCxFQUFxQjtBQUN2QzgrQixnQkFBTU4sUUFBTixDQUFlN04sV0FBZixDQUEyQjN3QixNQUFNK2dELFFBQWpDO0FBQ0QsU0FGRDs7QUFJQTtBQUNBLGFBQUt2aUIsUUFBTCxDQUFjbE8sUUFBZCxDQUF1QixLQUFLMnBCLEtBQUwsQ0FBVzZHLFNBQVgsRUFBc0JDLFFBQTdDOztBQUVBO0FBQ0EsWUFBSSxLQUFLUCxhQUFULEVBQXdCLEtBQUtBLGFBQUwsQ0FBbUJRLE9BQW5CO0FBQ3hCLGFBQUtSLGFBQUwsR0FBcUIsSUFBSSxLQUFLdkcsS0FBTCxDQUFXNkcsU0FBWCxFQUFzQjlpQixNQUExQixDQUFpQyxLQUFLUSxRQUF0QyxFQUFnRCxFQUFoRCxDQUFyQjtBQUNEOztBQUVEOzs7OztBQWhIVztBQUFBO0FBQUEsZ0NBb0hEO0FBQ1IsYUFBS2dpQixhQUFMLENBQW1CUSxPQUFuQjtBQUNBdmpCLFVBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLG9CQUFkO0FBQ0FtbkIsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUF4SFU7O0FBQUE7QUFBQTs7QUEySGI2aEIsaUJBQWVwVSxRQUFmLEdBQTBCLEVBQTFCOztBQUVBO0FBQ0EsTUFBSTBVLGNBQWM7QUFDaEJLLGNBQVU7QUFDUkYsZ0JBQVUsVUFERjtBQUVSL2lCLGNBQVFKLFdBQVdDLFFBQVgsQ0FBb0IsZUFBcEIsS0FBd0M7QUFGeEMsS0FETTtBQUtqQnFqQixlQUFXO0FBQ1JILGdCQUFVLFdBREY7QUFFUi9pQixjQUFRSixXQUFXQyxRQUFYLENBQW9CLFdBQXBCLEtBQW9DO0FBRnBDLEtBTE07QUFTaEJzakIsZUFBVztBQUNUSixnQkFBVSxnQkFERDtBQUVUL2lCLGNBQVFKLFdBQVdDLFFBQVgsQ0FBb0IsZ0JBQXBCLEtBQXlDO0FBRnhDO0FBVEssR0FBbEI7O0FBZUE7QUFDQUQsYUFBV0ksTUFBWCxDQUFrQnNpQixjQUFsQixFQUFrQyxnQkFBbEM7QUFFQyxDQWhKQSxDQWdKQ3ptRCxNQWhKRCxDQUFEO0FDRkE7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7OztBQUZhLE1BUVAyakIsZ0JBUk87QUFTWDs7Ozs7OztBQU9BLDhCQUFZdmYsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JmLEVBQUVvRSxPQUFGLENBQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhK2tELGlCQUFpQmxWLFFBQTlCLEVBQXdDLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUF4QyxFQUE4RHhiLE9BQTlELENBQWY7O0FBRUEsV0FBS3VpQyxLQUFMO0FBQ0EsV0FBS3VOLE9BQUw7O0FBRUF4TyxpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxrQkFBaEM7QUFDRDs7QUFFRDs7Ozs7OztBQTFCVztBQUFBO0FBQUEsOEJBK0JIO0FBQ04sWUFBSWlqQixXQUFXLEtBQUs3aUIsUUFBTCxDQUFjMW1CLElBQWQsQ0FBbUIsbUJBQW5CLENBQWY7QUFDQSxZQUFJLENBQUN1cEMsUUFBTCxFQUFlO0FBQ2JuaUIsa0JBQVEzaEMsS0FBUixDQUFjLGtFQUFkO0FBQ0Q7O0FBRUQsYUFBSytqRCxXQUFMLEdBQW1CN2pCLFFBQU00akIsUUFBTixDQUFuQjtBQUNBLGFBQUtFLFFBQUwsR0FBZ0IsS0FBSy9pQixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixlQUFuQixFQUFvQ0MsTUFBcEMsQ0FBMkMsWUFBVztBQUNwRSxjQUFJdEwsU0FBUzZnQyxFQUFFLElBQUYsRUFBUTNsQixJQUFSLENBQWEsUUFBYixDQUFiO0FBQ0EsaUJBQVFsYixXQUFXeWtELFFBQVgsSUFBdUJ6a0QsV0FBVyxFQUExQztBQUNELFNBSGUsQ0FBaEI7QUFJQSxhQUFLTixPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhLEtBQUtDLE9BQWxCLEVBQTJCLEtBQUtnbEQsV0FBTCxDQUFpQnhwQyxJQUFqQixFQUEzQixDQUFmOztBQUVBO0FBQ0EsWUFBRyxLQUFLeGIsT0FBTCxDQUFhc3hCLE9BQWhCLEVBQXlCO0FBQ3ZCLGNBQUlybEIsUUFBUSxLQUFLak0sT0FBTCxDQUFhc3hCLE9BQWIsQ0FBcUJudEIsS0FBckIsQ0FBMkIsR0FBM0IsQ0FBWjs7QUFFQSxlQUFLK2dELFdBQUwsR0FBbUJqNUMsTUFBTSxDQUFOLENBQW5CO0FBQ0EsZUFBS2s1QyxZQUFMLEdBQW9CbDVDLE1BQU0sQ0FBTixLQUFZLElBQWhDO0FBQ0Q7O0FBRUQsYUFBS201QyxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7OztBQXZEVztBQUFBO0FBQUEsZ0NBNEREO0FBQ1IsWUFBSTVpQixRQUFRLElBQVo7O0FBRUEsYUFBSzZpQixnQkFBTCxHQUF3QixLQUFLRCxPQUFMLENBQWEza0IsSUFBYixDQUFrQixJQUFsQixDQUF4Qjs7QUFFQVUsVUFBRXprQyxNQUFGLEVBQVVna0IsRUFBVixDQUFhLHVCQUFiLEVBQXNDLEtBQUsya0MsZ0JBQTNDOztBQUVBLGFBQUtKLFFBQUwsQ0FBY3ZrQyxFQUFkLENBQWlCLDJCQUFqQixFQUE4QyxLQUFLNGtDLFVBQUwsQ0FBZ0I3a0IsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBOUM7QUFDRDs7QUFFRDs7Ozs7O0FBdEVXO0FBQUE7QUFBQSxnQ0EyRUQ7QUFDUjtBQUNBLFlBQUksQ0FBQ2EsV0FBV3VDLFVBQVgsQ0FBc0JvRixPQUF0QixDQUE4QixLQUFLanBDLE9BQUwsQ0FBYXVsRCxPQUEzQyxDQUFMLEVBQTBEO0FBQ3hELGVBQUtyakIsUUFBTCxDQUFjelYsSUFBZDtBQUNBLGVBQUt1NEIsV0FBTCxDQUFpQnQzQixJQUFqQjtBQUNEOztBQUVEO0FBTEEsYUFNSztBQUNILGlCQUFLd1UsUUFBTCxDQUFjeFUsSUFBZDtBQUNBLGlCQUFLczNCLFdBQUwsQ0FBaUJ2NEIsSUFBakI7QUFDRDtBQUNGOztBQUVEOzs7Ozs7QUF6Rlc7QUFBQTtBQUFBLG1DQThGRTtBQUFBOztBQUNYLFlBQUksQ0FBQzZVLFdBQVd1QyxVQUFYLENBQXNCb0YsT0FBdEIsQ0FBOEIsS0FBS2pwQyxPQUFMLENBQWF1bEQsT0FBM0MsQ0FBTCxFQUEwRDtBQUN4RDs7OztBQUlBLGNBQUcsS0FBS3ZsRCxPQUFMLENBQWFzeEIsT0FBaEIsRUFBeUI7QUFDdkIsZ0JBQUksS0FBSzB6QixXQUFMLENBQWlCMXdDLEVBQWpCLENBQW9CLFNBQXBCLENBQUosRUFBb0M7QUFDbENndEIseUJBQVcySSxNQUFYLENBQWtCQyxTQUFsQixDQUE0QixLQUFLOGEsV0FBakMsRUFBOEMsS0FBS0UsV0FBbkQsRUFBZ0UsWUFBTTtBQUNwRSx1QkFBS2hqQixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDZCQUF0QjtBQUNBLHVCQUFLcWdDLFdBQUwsQ0FBaUJyNUMsSUFBakIsQ0FBc0IsZUFBdEIsRUFBdUN1TyxjQUF2QyxDQUFzRCxxQkFBdEQ7QUFDRCxlQUhEO0FBSUQsYUFMRCxNQU1LO0FBQ0hvbkIseUJBQVcySSxNQUFYLENBQWtCRyxVQUFsQixDQUE2QixLQUFLNGEsV0FBbEMsRUFBK0MsS0FBS0csWUFBcEQsRUFBa0UsWUFBTTtBQUN0RSx1QkFBS2pqQixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDZCQUF0QjtBQUNELGVBRkQ7QUFHRDtBQUNGLFdBWkQsTUFhSztBQUNILGlCQUFLcWdDLFdBQUwsQ0FBaUJyM0IsTUFBakIsQ0FBd0IsQ0FBeEI7QUFDQSxpQkFBS3EzQixXQUFMLENBQWlCcjVDLElBQWpCLENBQXNCLGVBQXRCLEVBQXVDZ1osT0FBdkMsQ0FBK0MscUJBQS9DO0FBQ0EsaUJBQUt1ZCxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLDZCQUF0QjtBQUNEO0FBQ0Y7QUFDRjtBQXZIVTtBQUFBO0FBQUEsZ0NBeUhEO0FBQ1IsYUFBS3VkLFFBQUwsQ0FBYy9uQixHQUFkLENBQWtCLHNCQUFsQjtBQUNBLGFBQUs4cUMsUUFBTCxDQUFjOXFDLEdBQWQsQ0FBa0Isc0JBQWxCOztBQUVBZ25CLFVBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLHVCQUFkLEVBQXVDLEtBQUtrckMsZ0JBQTVDOztBQUVBL2pCLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBaElVOztBQUFBO0FBQUE7O0FBbUliMmlCLG1CQUFpQmxWLFFBQWpCLEdBQTRCO0FBQzFCOzs7Ozs7QUFNQTJWLGFBQVMsUUFQaUI7O0FBUzFCOzs7Ozs7QUFNQWowQixhQUFTO0FBZmlCLEdBQTVCOztBQWtCQTtBQUNBZ1EsYUFBV0ksTUFBWCxDQUFrQm9qQixnQkFBbEIsRUFBb0Msa0JBQXBDO0FBRUMsQ0F4SkEsQ0F3SkN2bkQsTUF4SkQsQ0FBRDtBQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViOzs7Ozs7Ozs7O0FBRmEsTUFZUHFrQixNQVpPO0FBYVg7Ozs7OztBQU1BLG9CQUFZamdCLE9BQVosRUFBcUJ2bEMsT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBS2tpQyxRQUFMLEdBQWdCcUQsT0FBaEI7QUFDQSxXQUFLdmxDLE9BQUwsR0FBZW1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWF5bEQsT0FBTzVWLFFBQXBCLEVBQThCLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUE5QixFQUFvRHhiLE9BQXBELENBQWY7QUFDQSxXQUFLdWlDLEtBQUw7O0FBRUFqQixpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxRQUFoQztBQUNBUixpQkFBV3dGLFFBQVgsQ0FBb0I1ckIsUUFBcEIsQ0FBNkIsUUFBN0IsRUFBdUM7QUFDckMsaUJBQVMsTUFENEI7QUFFckMsaUJBQVMsTUFGNEI7QUFHckMsa0JBQVU7QUFIMkIsT0FBdkM7QUFLRDs7QUFFRDs7Ozs7O0FBaENXO0FBQUE7QUFBQSw4QkFvQ0g7QUFDTixhQUFLdFMsRUFBTCxHQUFVLEtBQUtzNUIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsSUFBbkIsQ0FBVjtBQUNBLGFBQUt1b0MsUUFBTCxHQUFnQixLQUFoQjtBQUNBLGFBQUt0a0MsTUFBTCxHQUFjLEVBQUNxMEMsSUFBSW5rQixXQUFXdUMsVUFBWCxDQUFzQnRMLE9BQTNCLEVBQWQ7QUFDQSxhQUFLbXRCLFFBQUwsR0FBZ0JDLGFBQWhCOztBQUVBLGFBQUt2UixPQUFMLEdBQWVqVCxtQkFBaUIsS0FBS3Y0QixFQUF0QixTQUE4QnRLLE1BQTlCLEdBQXVDNmlDLG1CQUFpQixLQUFLdjRCLEVBQXRCLFFBQXZDLEdBQXVFdTRCLHFCQUFtQixLQUFLdjRCLEVBQXhCLFFBQXRGO0FBQ0EsYUFBS3dyQyxPQUFMLENBQWFqbkMsSUFBYixDQUFrQjtBQUNoQiwyQkFBaUIsS0FBS3ZFLEVBRE47QUFFaEIsMkJBQWlCLElBRkQ7QUFHaEIsc0JBQVk7QUFISSxTQUFsQjs7QUFNQSxZQUFJLEtBQUs1SSxPQUFMLENBQWE0bEQsVUFBYixJQUEyQixLQUFLMWpCLFFBQUwsQ0FBY3pOLFFBQWQsQ0FBdUIsTUFBdkIsQ0FBL0IsRUFBK0Q7QUFDN0QsZUFBS3owQixPQUFMLENBQWE0bEQsVUFBYixHQUEwQixJQUExQjtBQUNBLGVBQUs1bEQsT0FBTCxDQUFha2dELE9BQWIsR0FBdUIsS0FBdkI7QUFDRDtBQUNELFlBQUksS0FBS2xnRCxPQUFMLENBQWFrZ0QsT0FBYixJQUF3QixDQUFDLEtBQUtFLFFBQWxDLEVBQTRDO0FBQzFDLGVBQUtBLFFBQUwsR0FBZ0IsS0FBS3lGLFlBQUwsQ0FBa0IsS0FBS2o5QyxFQUF2QixDQUFoQjtBQUNEOztBQUVELGFBQUtzNUIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUI7QUFDZixrQkFBUSxRQURPO0FBRWYseUJBQWUsSUFGQTtBQUdmLDJCQUFpQixLQUFLdkUsRUFIUDtBQUlmLHlCQUFlLEtBQUtBO0FBSkwsU0FBbkI7O0FBT0EsWUFBRyxLQUFLdzNDLFFBQVIsRUFBa0I7QUFDaEIsZUFBS2xlLFFBQUwsQ0FBY3phLE1BQWQsR0FBdUJRLFFBQXZCLENBQWdDLEtBQUttNEIsUUFBckM7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLbGUsUUFBTCxDQUFjemEsTUFBZCxHQUF1QlEsUUFBdkIsQ0FBZ0NrWixFQUFFLEtBQUtuaEMsT0FBTCxDQUFhaW9CLFFBQWYsQ0FBaEM7QUFDQSxlQUFLaWEsUUFBTCxDQUFjbE8sUUFBZCxDQUF1QixpQkFBdkI7QUFDRDtBQUNELGFBQUs4YixPQUFMO0FBQ0EsWUFBSSxLQUFLOXZDLE9BQUwsQ0FBYXUwQyxRQUFiLElBQXlCNzNDLE9BQU9xVCxRQUFQLENBQWdCRCxJQUFoQixXQUErQixLQUFLbEgsRUFBakUsRUFBd0U7QUFDdEV1NEIsWUFBRXprQyxNQUFGLEVBQVVra0IsR0FBVixDQUFjLGdCQUFkLEVBQWdDLEtBQUsyYyxJQUFMLENBQVVrRCxJQUFWLENBQWUsSUFBZixDQUFoQztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBNUVXO0FBQUE7QUFBQSxxQ0FnRkk7QUFDYixlQUFPVSxFQUFFLGFBQUYsRUFDSm5OLFFBREksQ0FDSyxnQkFETCxFQUVKL0wsUUFGSSxDQUVLLEtBQUtqb0IsT0FBTCxDQUFhaW9CLFFBRmxCLENBQVA7QUFHRDs7QUFFRDs7Ozs7O0FBdEZXO0FBQUE7QUFBQSx3Q0EyRk87QUFDaEIsWUFBSWlDLFFBQVEsS0FBS2dZLFFBQUwsQ0FBYzRqQixVQUFkLEVBQVo7QUFDQSxZQUFJQSxhQUFhM2tCLEVBQUV6a0MsTUFBRixFQUFVd3RCLEtBQVYsRUFBakI7QUFDQSxZQUFJK0UsU0FBUyxLQUFLaVQsUUFBTCxDQUFjNmpCLFdBQWQsRUFBYjtBQUNBLFlBQUlBLGNBQWM1a0IsRUFBRXprQyxNQUFGLEVBQVV1eUIsTUFBVixFQUFsQjtBQUNBLFlBQUloQyxJQUFKLEVBQVU3aEIsR0FBVjtBQUNBLFlBQUksS0FBS3BMLE9BQUwsQ0FBYXdtQyxPQUFiLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DdlosaUJBQU80RyxTQUFTLENBQUNpeUIsYUFBYTU3QixLQUFkLElBQXVCLENBQWhDLEVBQW1DLEVBQW5DLENBQVA7QUFDRCxTQUZELE1BRU87QUFDTCtDLGlCQUFPNEcsU0FBUyxLQUFLN3pCLE9BQUwsQ0FBYXdtQyxPQUF0QixFQUErQixFQUEvQixDQUFQO0FBQ0Q7QUFDRCxZQUFJLEtBQUt4bUMsT0FBTCxDQUFhdW1DLE9BQWIsS0FBeUIsTUFBN0IsRUFBcUM7QUFDbkMsY0FBSXRYLFNBQVM4MkIsV0FBYixFQUEwQjtBQUN4QjM2QyxrQkFBTXlvQixTQUFTaHpCLEtBQUttMUMsR0FBTCxDQUFTLEdBQVQsRUFBYytQLGNBQWMsRUFBNUIsQ0FBVCxFQUEwQyxFQUExQyxDQUFOO0FBQ0QsV0FGRCxNQUVPO0FBQ0wzNkMsa0JBQU15b0IsU0FBUyxDQUFDa3lCLGNBQWM5MkIsTUFBZixJQUF5QixDQUFsQyxFQUFxQyxFQUFyQyxDQUFOO0FBQ0Q7QUFDRixTQU5ELE1BTU87QUFDTDdqQixnQkFBTXlvQixTQUFTLEtBQUs3ekIsT0FBTCxDQUFhdW1DLE9BQXRCLEVBQStCLEVBQS9CLENBQU47QUFDRDtBQUNELGFBQUtyRSxRQUFMLENBQWM1a0IsR0FBZCxDQUFrQixFQUFDbFMsS0FBS0EsTUFBTSxJQUFaLEVBQWxCO0FBQ0E7QUFDQTtBQUNBLFlBQUcsQ0FBQyxLQUFLZzFDLFFBQU4sSUFBbUIsS0FBS3BnRCxPQUFMLENBQWF3bUMsT0FBYixLQUF5QixNQUEvQyxFQUF3RDtBQUN0RCxlQUFLdEUsUUFBTCxDQUFjNWtCLEdBQWQsQ0FBa0IsRUFBQzJQLE1BQU1BLE9BQU8sSUFBZCxFQUFsQjtBQUNBLGVBQUtpVixRQUFMLENBQWM1a0IsR0FBZCxDQUFrQixFQUFDNFAsUUFBUSxLQUFULEVBQWxCO0FBQ0Q7QUFFRjs7QUFFRDs7Ozs7QUF6SFc7QUFBQTtBQUFBLGdDQTZIRDtBQUFBOztBQUNSLFlBQUlzVixRQUFRLElBQVo7O0FBRUEsYUFBS04sUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUI7QUFDZiw2QkFBbUIsS0FBSzZjLElBQUwsQ0FBVWtELElBQVYsQ0FBZSxJQUFmLENBREo7QUFFZiw4QkFBb0Isd0JBQUMzZixLQUFELEVBQVFvaEIsUUFBUixFQUFxQjtBQUN2QyxnQkFBS3BoQixNQUFNeGdCLE1BQU4sS0FBaUJraUMsTUFBTU4sUUFBTixDQUFlLENBQWYsQ0FBbEIsSUFDQ2YsRUFBRXJnQixNQUFNeGdCLE1BQVIsRUFBZ0IrVixPQUFoQixDQUF3QixpQkFBeEIsRUFBMkMsQ0FBM0MsTUFBa0Q2ckIsUUFEdkQsRUFDa0U7QUFBRTtBQUNsRSxxQkFBTyxPQUFLcFosS0FBTCxDQUFXenBCLEtBQVgsUUFBUDtBQUNEO0FBQ0YsV0FQYztBQVFmLCtCQUFxQixLQUFLc3VCLE1BQUwsQ0FBWThTLElBQVosQ0FBaUIsSUFBakIsQ0FSTjtBQVNmLGlDQUF1Qiw2QkFBVztBQUNoQytCLGtCQUFNd2pCLGVBQU47QUFDRDtBQVhjLFNBQWpCOztBQWNBLFlBQUksS0FBSzVSLE9BQUwsQ0FBYTkxQyxNQUFqQixFQUF5QjtBQUN2QixlQUFLODFDLE9BQUwsQ0FBYTF6QixFQUFiLENBQWdCLG1CQUFoQixFQUFxQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQy9DLGdCQUFJQSxFQUFFd2IsS0FBRixLQUFZLEVBQVosSUFBa0J4YixFQUFFd2IsS0FBRixLQUFZLEVBQWxDLEVBQXNDO0FBQ3BDeGIsZ0JBQUUrYSxlQUFGO0FBQ0EvYSxnQkFBRThhLGNBQUY7QUFDQTJmLG9CQUFNakYsSUFBTjtBQUNEO0FBQ0YsV0FORDtBQU9EOztBQUVELFlBQUksS0FBS3Y5QixPQUFMLENBQWF1M0MsWUFBYixJQUE2QixLQUFLdjNDLE9BQUwsQ0FBYWtnRCxPQUE5QyxFQUF1RDtBQUNyRCxlQUFLRSxRQUFMLENBQWNqbUMsR0FBZCxDQUFrQixZQUFsQixFQUFnQ3VHLEVBQWhDLENBQW1DLGlCQUFuQyxFQUFzRCxVQUFTM1ksQ0FBVCxFQUFZO0FBQ2hFLGdCQUFJQSxFQUFFekgsTUFBRixLQUFha2lDLE1BQU1OLFFBQU4sQ0FBZSxDQUFmLENBQWIsSUFDRmYsRUFBRWg4QixRQUFGLENBQVdxOUIsTUFBTU4sUUFBTixDQUFlLENBQWYsQ0FBWCxFQUE4Qm42QixFQUFFekgsTUFBaEMsQ0FERSxJQUVBLENBQUM2Z0MsRUFBRWg4QixRQUFGLENBQVc1SSxRQUFYLEVBQXFCd0wsRUFBRXpILE1BQXZCLENBRkwsRUFFcUM7QUFDL0I7QUFDTDtBQUNEa2lDLGtCQUFNMVosS0FBTjtBQUNELFdBUEQ7QUFRRDtBQUNELFlBQUksS0FBSzlvQixPQUFMLENBQWF1MEMsUUFBakIsRUFBMkI7QUFDekJwVCxZQUFFemtDLE1BQUYsRUFBVWdrQixFQUFWLHlCQUFtQyxLQUFLOVgsRUFBeEMsRUFBOEMsS0FBS3E5QyxZQUFMLENBQWtCeGxCLElBQWxCLENBQXVCLElBQXZCLENBQTlDO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7QUF2S1c7QUFBQTtBQUFBLG1DQTJLRTE0QixDQTNLRixFQTJLSztBQUNkLFlBQUdyTCxPQUFPcVQsUUFBUCxDQUFnQkQsSUFBaEIsS0FBMkIsTUFBTSxLQUFLbEgsRUFBdEMsSUFBNkMsQ0FBQyxLQUFLOHNDLFFBQXRELEVBQStEO0FBQUUsZUFBS25ZLElBQUw7QUFBYyxTQUEvRSxNQUNJO0FBQUUsZUFBS3pVLEtBQUw7QUFBZTtBQUN0Qjs7QUFHRDs7Ozs7OztBQWpMVztBQUFBO0FBQUEsNkJBdUxKO0FBQUE7O0FBQ0wsWUFBSSxLQUFLOW9CLE9BQUwsQ0FBYXUwQyxRQUFqQixFQUEyQjtBQUN6QixjQUFJemtDLGFBQVcsS0FBS2xILEVBQXBCOztBQUVBLGNBQUlsTSxPQUFPbzRDLE9BQVAsQ0FBZUMsU0FBbkIsRUFBOEI7QUFDNUJyNEMsbUJBQU9vNEMsT0FBUCxDQUFlQyxTQUFmLENBQXlCLElBQXpCLEVBQStCLElBQS9CLEVBQXFDamxDLElBQXJDO0FBQ0QsV0FGRCxNQUVPO0FBQ0xwVCxtQkFBT3FULFFBQVAsQ0FBZ0JELElBQWhCLEdBQXVCQSxJQUF2QjtBQUNEO0FBQ0Y7O0FBRUQsYUFBSzRsQyxRQUFMLEdBQWdCLElBQWhCOztBQUVBO0FBQ0EsYUFBS3hULFFBQUwsQ0FDSzVrQixHQURMLENBQ1MsRUFBRSxjQUFjLFFBQWhCLEVBRFQsRUFFS21QLElBRkwsR0FHS3RJLFNBSEwsQ0FHZSxDQUhmO0FBSUEsWUFBSSxLQUFLbmtCLE9BQUwsQ0FBYWtnRCxPQUFqQixFQUEwQjtBQUN4QixlQUFLRSxRQUFMLENBQWM5aUMsR0FBZCxDQUFrQixFQUFDLGNBQWMsUUFBZixFQUFsQixFQUE0Q21QLElBQTVDO0FBQ0Q7O0FBRUQsYUFBS3U1QixlQUFMOztBQUVBLGFBQUs5akIsUUFBTCxDQUNHeFUsSUFESCxHQUVHcFEsR0FGSCxDQUVPLEVBQUUsY0FBYyxFQUFoQixFQUZQOztBQUlBLFlBQUcsS0FBSzhpQyxRQUFSLEVBQWtCO0FBQ2hCLGVBQUtBLFFBQUwsQ0FBYzlpQyxHQUFkLENBQWtCLEVBQUMsY0FBYyxFQUFmLEVBQWxCLEVBQXNDb1EsSUFBdEM7QUFDQSxjQUFHLEtBQUt3VSxRQUFMLENBQWN6TixRQUFkLENBQXVCLE1BQXZCLENBQUgsRUFBbUM7QUFDakMsaUJBQUsyckIsUUFBTCxDQUFjcHNCLFFBQWQsQ0FBdUIsTUFBdkI7QUFDRCxXQUZELE1BRU8sSUFBSSxLQUFLa08sUUFBTCxDQUFjek4sUUFBZCxDQUF1QixNQUF2QixDQUFKLEVBQW9DO0FBQ3pDLGlCQUFLMnJCLFFBQUwsQ0FBY3BzQixRQUFkLENBQXVCLE1BQXZCO0FBQ0Q7QUFDRjs7QUFHRCxZQUFJLENBQUMsS0FBS2gwQixPQUFMLENBQWFrbUQsY0FBbEIsRUFBa0M7QUFDaEM7Ozs7O0FBS0EsZUFBS2hrQixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLG1CQUF0QixFQUEyQyxLQUFLL2IsRUFBaEQ7QUFDRDs7QUFFRCxZQUFJNDVCLFFBQVEsSUFBWjs7QUFFQSxpQkFBUzJqQixvQkFBVCxHQUFnQztBQUM5QixjQUFJM2pCLE1BQU1rakIsUUFBVixFQUFvQjtBQUNsQixnQkFBRyxDQUFDbGpCLE1BQU00akIsaUJBQVYsRUFBNkI7QUFDM0I1akIsb0JBQU00akIsaUJBQU4sR0FBMEIxcEQsT0FBT3NqQyxXQUFqQztBQUNEO0FBQ0RtQixjQUFFLFlBQUYsRUFBZ0JuTixRQUFoQixDQUF5QixnQkFBekI7QUFDRCxXQUxELE1BTUs7QUFDSG1OLGNBQUUsTUFBRixFQUFVbk4sUUFBVixDQUFtQixnQkFBbkI7QUFDRDtBQUNGO0FBQ0Q7QUFDQSxZQUFJLEtBQUtoMEIsT0FBTCxDQUFha2xELFdBQWpCLEVBQThCO0FBQUEsY0FDbkJtQixjQURtQixHQUM1QixTQUFTQSxjQUFULEdBQXlCO0FBQ3ZCN2pCLGtCQUFNTixRQUFOLENBQ0cvMEIsSUFESCxDQUNRO0FBQ0osNkJBQWUsS0FEWDtBQUVKLDBCQUFZLENBQUM7QUFGVCxhQURSLEVBS0d1WCxLQUxIO0FBTUF5aEM7QUFDQTdrQix1QkFBV3dGLFFBQVgsQ0FBb0JpQixTQUFwQixDQUE4QnZGLE1BQU1OLFFBQXBDO0FBQ0QsV0FWMkI7O0FBVzVCLGNBQUksS0FBS2xpQyxPQUFMLENBQWFrZ0QsT0FBakIsRUFBMEI7QUFDeEI1ZSx1QkFBVzJJLE1BQVgsQ0FBa0JDLFNBQWxCLENBQTRCLEtBQUtrVyxRQUFqQyxFQUEyQyxTQUEzQztBQUNEO0FBQ0Q5ZSxxQkFBVzJJLE1BQVgsQ0FBa0JDLFNBQWxCLENBQTRCLEtBQUtoSSxRQUFqQyxFQUEyQyxLQUFLbGlDLE9BQUwsQ0FBYWtsRCxXQUF4RCxFQUFxRSxZQUFNO0FBQ3pFLGdCQUFHLE9BQUtoakIsUUFBUixFQUFrQjtBQUFFO0FBQ2xCLHFCQUFLb2tCLGlCQUFMLEdBQXlCaGxCLFdBQVd3RixRQUFYLENBQW9CZSxhQUFwQixDQUFrQyxPQUFLM0YsUUFBdkMsQ0FBekI7QUFDQW1rQjtBQUNEO0FBQ0YsV0FMRDtBQU1EO0FBQ0Q7QUFyQkEsYUFzQks7QUFDSCxnQkFBSSxLQUFLcm1ELE9BQUwsQ0FBYWtnRCxPQUFqQixFQUEwQjtBQUN4QixtQkFBS0UsUUFBTCxDQUFjM3pCLElBQWQsQ0FBbUIsQ0FBbkI7QUFDRDtBQUNELGlCQUFLeVYsUUFBTCxDQUFjelYsSUFBZCxDQUFtQixLQUFLenNCLE9BQUwsQ0FBYXVtRCxTQUFoQztBQUNEOztBQUVEO0FBQ0EsYUFBS3JrQixRQUFMLENBQ0cvMEIsSUFESCxDQUNRO0FBQ0oseUJBQWUsS0FEWDtBQUVKLHNCQUFZLENBQUM7QUFGVCxTQURSLEVBS0d1WCxLQUxIO0FBTUE0YyxtQkFBV3dGLFFBQVgsQ0FBb0JpQixTQUFwQixDQUE4QixLQUFLN0YsUUFBbkM7O0FBRUE7Ozs7QUFJQSxhQUFLQSxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLGdCQUF0Qjs7QUFFQXdoQzs7QUFFQTNyQyxtQkFBVyxZQUFNO0FBQ2YsaUJBQUtnc0MsY0FBTDtBQUNELFNBRkQsRUFFRyxDQUZIO0FBR0Q7O0FBRUQ7Ozs7O0FBdlNXO0FBQUE7QUFBQSx1Q0EyU007QUFDZixZQUFJaGtCLFFBQVEsSUFBWjtBQUNBLFlBQUcsQ0FBQyxLQUFLTixRQUFULEVBQW1CO0FBQUU7QUFBUyxTQUZmLENBRWdCO0FBQy9CLGFBQUtva0IsaUJBQUwsR0FBeUJobEIsV0FBV3dGLFFBQVgsQ0FBb0JlLGFBQXBCLENBQWtDLEtBQUszRixRQUF2QyxDQUF6Qjs7QUFFQSxZQUFJLENBQUMsS0FBS2xpQyxPQUFMLENBQWFrZ0QsT0FBZCxJQUF5QixLQUFLbGdELE9BQUwsQ0FBYXUzQyxZQUF0QyxJQUFzRCxDQUFDLEtBQUt2M0MsT0FBTCxDQUFhNGxELFVBQXhFLEVBQW9GO0FBQ2xGemtCLFlBQUUsTUFBRixFQUFVemdCLEVBQVYsQ0FBYSxpQkFBYixFQUFnQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQzFDLGdCQUFJQSxFQUFFekgsTUFBRixLQUFha2lDLE1BQU1OLFFBQU4sQ0FBZSxDQUFmLENBQWIsSUFDRmYsRUFBRWg4QixRQUFGLENBQVdxOUIsTUFBTU4sUUFBTixDQUFlLENBQWYsQ0FBWCxFQUE4Qm42QixFQUFFekgsTUFBaEMsQ0FERSxJQUVBLENBQUM2Z0MsRUFBRWg4QixRQUFGLENBQVc1SSxRQUFYLEVBQXFCd0wsRUFBRXpILE1BQXZCLENBRkwsRUFFcUM7QUFBRTtBQUFTO0FBQ2hEa2lDLGtCQUFNMVosS0FBTjtBQUNELFdBTEQ7QUFNRDs7QUFFRCxZQUFJLEtBQUs5b0IsT0FBTCxDQUFheW1ELFVBQWpCLEVBQTZCO0FBQzNCdGxCLFlBQUV6a0MsTUFBRixFQUFVZ2tCLEVBQVYsQ0FBYSxtQkFBYixFQUFrQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQzVDdTVCLHVCQUFXd0YsUUFBWCxDQUFvQk0sU0FBcEIsQ0FBOEJyL0IsQ0FBOUIsRUFBaUMsUUFBakMsRUFBMkM7QUFDekMrZ0IscUJBQU8saUJBQVc7QUFDaEIsb0JBQUkwWixNQUFNeGlDLE9BQU4sQ0FBY3ltRCxVQUFsQixFQUE4QjtBQUM1QmprQix3QkFBTTFaLEtBQU47QUFDQTBaLHdCQUFNNFIsT0FBTixDQUFjMXZCLEtBQWQ7QUFDRDtBQUNGO0FBTndDLGFBQTNDO0FBUUQsV0FURDtBQVVEOztBQUVEO0FBQ0EsYUFBS3dkLFFBQUwsQ0FBY3hoQixFQUFkLENBQWlCLG1CQUFqQixFQUFzQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQ2hELGNBQUltbkMsVUFBVS9OLEVBQUUsSUFBRixDQUFkO0FBQ0E7QUFDQUcscUJBQVd3RixRQUFYLENBQW9CTSxTQUFwQixDQUE4QnIvQixDQUE5QixFQUFpQyxRQUFqQyxFQUEyQztBQUN6Q3cxQixrQkFBTSxnQkFBVztBQUNmLGtCQUFJaUYsTUFBTU4sUUFBTixDQUFldjJCLElBQWYsQ0FBb0IsUUFBcEIsRUFBOEIySSxFQUE5QixDQUFpQ2t1QixNQUFNTixRQUFOLENBQWV2MkIsSUFBZixDQUFvQixjQUFwQixDQUFqQyxDQUFKLEVBQTJFO0FBQ3pFNk8sMkJBQVcsWUFBVztBQUFFO0FBQ3RCZ29CLHdCQUFNNFIsT0FBTixDQUFjMXZCLEtBQWQ7QUFDRCxpQkFGRCxFQUVHLENBRkg7QUFHRCxlQUpELE1BSU8sSUFBSXdxQixRQUFRNTZCLEVBQVIsQ0FBV2t1QixNQUFNOGpCLGlCQUFqQixDQUFKLEVBQXlDO0FBQUU7QUFDaEQ5akIsc0JBQU1qRixJQUFOO0FBQ0Q7QUFDRixhQVR3QztBQVV6Q3pVLG1CQUFPLGlCQUFXO0FBQ2hCLGtCQUFJMFosTUFBTXhpQyxPQUFOLENBQWN5bUQsVUFBbEIsRUFBOEI7QUFDNUJqa0Isc0JBQU0xWixLQUFOO0FBQ0EwWixzQkFBTTRSLE9BQU4sQ0FBYzF2QixLQUFkO0FBQ0Q7QUFDRixhQWZ3QztBQWdCekNpakIscUJBQVMsaUJBQVM5a0IsY0FBVCxFQUF5QjtBQUNoQyxrQkFBSUEsY0FBSixFQUFvQjtBQUNsQjlhLGtCQUFFOGEsY0FBRjtBQUNEO0FBQ0Y7QUFwQndDLFdBQTNDO0FBc0JELFNBekJEO0FBMEJEOztBQUVEOzs7Ozs7QUFuV1c7QUFBQTtBQUFBLDhCQXdXSDtBQUNOLFlBQUksQ0FBQyxLQUFLNnlCLFFBQU4sSUFBa0IsQ0FBQyxLQUFLeFQsUUFBTCxDQUFjNXRCLEVBQWQsQ0FBaUIsVUFBakIsQ0FBdkIsRUFBcUQ7QUFDbkQsaUJBQU8sS0FBUDtBQUNEO0FBQ0QsWUFBSWt1QixRQUFRLElBQVo7O0FBRUE7QUFDQSxZQUFJLEtBQUt4aUMsT0FBTCxDQUFhbWxELFlBQWpCLEVBQStCO0FBQzdCLGNBQUksS0FBS25sRCxPQUFMLENBQWFrZ0QsT0FBakIsRUFBMEI7QUFDeEI1ZSx1QkFBVzJJLE1BQVgsQ0FBa0JHLFVBQWxCLENBQTZCLEtBQUtnVyxRQUFsQyxFQUE0QyxVQUE1QyxFQUF3RHNHLFFBQXhEO0FBQ0QsV0FGRCxNQUdLO0FBQ0hBO0FBQ0Q7O0FBRURwbEIscUJBQVcySSxNQUFYLENBQWtCRyxVQUFsQixDQUE2QixLQUFLbEksUUFBbEMsRUFBNEMsS0FBS2xpQyxPQUFMLENBQWFtbEQsWUFBekQ7QUFDRDtBQUNEO0FBVkEsYUFXSzs7QUFFSCxpQkFBS2pqQixRQUFMLENBQWN4VSxJQUFkLENBQW1CLEtBQUsxdEIsT0FBTCxDQUFhMm1ELFNBQWhDOztBQUVBLGdCQUFJLEtBQUszbUQsT0FBTCxDQUFha2dELE9BQWpCLEVBQTBCO0FBQ3hCLG1CQUFLRSxRQUFMLENBQWMxeUIsSUFBZCxDQUFtQixDQUFuQixFQUFzQmc1QixRQUF0QjtBQUNELGFBRkQsTUFHSztBQUNIQTtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQSxZQUFJLEtBQUsxbUQsT0FBTCxDQUFheW1ELFVBQWpCLEVBQTZCO0FBQzNCdGxCLFlBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLG1CQUFkO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUtuYSxPQUFMLENBQWFrZ0QsT0FBZCxJQUF5QixLQUFLbGdELE9BQUwsQ0FBYXUzQyxZQUExQyxFQUF3RDtBQUN0RHBXLFlBQUUsTUFBRixFQUFVaG5CLEdBQVYsQ0FBYyxpQkFBZDtBQUNEOztBQUVELGFBQUsrbkIsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsbUJBQWxCOztBQUVBLGlCQUFTdXNDLFFBQVQsR0FBb0I7QUFDbEIsY0FBSWxrQixNQUFNa2pCLFFBQVYsRUFBb0I7QUFDbEIsZ0JBQUl2a0IsRUFBRSxpQkFBRixFQUFxQjdpQyxNQUFyQixLQUFnQyxDQUFwQyxFQUF1QztBQUNyQzZpQyxnQkFBRSxZQUFGLEVBQWdCOU0sV0FBaEIsQ0FBNEIsZ0JBQTVCO0FBQ0Q7QUFDRCxnQkFBR21PLE1BQU00akIsaUJBQVQsRUFBNEI7QUFDMUJqbEIsZ0JBQUUsTUFBRixFQUFVaGQsU0FBVixDQUFvQnFlLE1BQU00akIsaUJBQTFCO0FBQ0E1akIsb0JBQU00akIsaUJBQU4sR0FBMEIsSUFBMUI7QUFDRDtBQUNGLFdBUkQsTUFTSztBQUNILGdCQUFJamxCLEVBQUUsaUJBQUYsRUFBcUI3aUMsTUFBckIsS0FBaUMsQ0FBckMsRUFBd0M7QUFDdEM2aUMsZ0JBQUUsTUFBRixFQUFVOU0sV0FBVixDQUFzQixnQkFBdEI7QUFDRDtBQUNGOztBQUdEaU4scUJBQVd3RixRQUFYLENBQW9CcUIsWUFBcEIsQ0FBaUMzRixNQUFNTixRQUF2Qzs7QUFFQU0sZ0JBQU1OLFFBQU4sQ0FBZS8wQixJQUFmLENBQW9CLGFBQXBCLEVBQW1DLElBQW5DOztBQUVBOzs7O0FBSUFxMUIsZ0JBQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIsa0JBQXZCO0FBQ0Q7O0FBRUQ7Ozs7QUFJQSxZQUFJLEtBQUsza0IsT0FBTCxDQUFhNG1ELFlBQWpCLEVBQStCO0FBQzdCLGVBQUsxa0IsUUFBTCxDQUFjbGIsSUFBZCxDQUFtQixLQUFLa2IsUUFBTCxDQUFjbGIsSUFBZCxFQUFuQjtBQUNEOztBQUVELGFBQUswdUIsUUFBTCxHQUFnQixLQUFoQjtBQUNDLFlBQUlsVCxNQUFNeGlDLE9BQU4sQ0FBY3UwQyxRQUFsQixFQUE0QjtBQUMxQixjQUFJNzNDLE9BQU9vNEMsT0FBUCxDQUFlRSxZQUFuQixFQUFpQztBQUMvQnQ0QyxtQkFBT280QyxPQUFQLENBQWVFLFlBQWYsQ0FBNEIsRUFBNUIsRUFBZ0N6NEMsU0FBU3NxRCxLQUF6QyxFQUFnRG5xRCxPQUFPcVQsUUFBUCxDQUFnQkcsSUFBaEIsQ0FBcUJuUCxPQUFyQixPQUFpQyxLQUFLNkgsRUFBdEMsRUFBNEMsRUFBNUMsQ0FBaEQ7QUFDRCxXQUZELE1BRU87QUFDTGxNLG1CQUFPcVQsUUFBUCxDQUFnQkQsSUFBaEIsR0FBdUIsRUFBdkI7QUFDRDtBQUNGO0FBQ0g7O0FBRUQ7Ozs7O0FBL2JXO0FBQUE7QUFBQSwrQkFtY0Y7QUFDUCxZQUFJLEtBQUs0bEMsUUFBVCxFQUFtQjtBQUNqQixlQUFLNXNCLEtBQUw7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLeVUsSUFBTDtBQUNEO0FBQ0Y7QUF6Y1U7QUFBQTs7O0FBMmNYOzs7O0FBM2NXLGdDQStjRDtBQUNSLFlBQUksS0FBS3Y5QixPQUFMLENBQWFrZ0QsT0FBakIsRUFBMEI7QUFDeEIsZUFBS2hlLFFBQUwsQ0FBY2phLFFBQWQsQ0FBdUJrWixFQUFFLEtBQUtuaEMsT0FBTCxDQUFhaW9CLFFBQWYsQ0FBdkIsRUFEd0IsQ0FDMEI7QUFDbEQsZUFBS200QixRQUFMLENBQWMxeUIsSUFBZCxHQUFxQnZULEdBQXJCLEdBQTJCekMsTUFBM0I7QUFDRDtBQUNELGFBQUt3cUIsUUFBTCxDQUFjeFUsSUFBZCxHQUFxQnZULEdBQXJCO0FBQ0EsYUFBS2k2QixPQUFMLENBQWFqNkIsR0FBYixDQUFpQixLQUFqQjtBQUNBZ25CLFVBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixpQkFBNEIsS0FBS3ZSLEVBQWpDOztBQUVBMDRCLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBemRVOztBQUFBO0FBQUE7O0FBNGRicWpCLFNBQU81VixRQUFQLEdBQWtCO0FBQ2hCOzs7Ozs7QUFNQXNWLGlCQUFhLEVBUEc7QUFRaEI7Ozs7OztBQU1BQyxrQkFBYyxFQWRFO0FBZWhCOzs7Ozs7QUFNQW9CLGVBQVcsQ0FyQks7QUFzQmhCOzs7Ozs7QUFNQUksZUFBVyxDQTVCSztBQTZCaEI7Ozs7OztBQU1BcFAsa0JBQWMsSUFuQ0U7QUFvQ2hCOzs7Ozs7QUFNQWtQLGdCQUFZLElBMUNJO0FBMkNoQjs7Ozs7O0FBTUFQLG9CQUFnQixLQWpEQTtBQWtEaEI7Ozs7OztBQU1BM2YsYUFBUyxNQXhETztBQXlEaEI7Ozs7OztBQU1BQyxhQUFTLE1BL0RPO0FBZ0VoQjs7Ozs7O0FBTUFvZixnQkFBWSxLQXRFSTtBQXVFaEI7Ozs7OztBQU1Ba0Isa0JBQWMsRUE3RUU7QUE4RWhCOzs7Ozs7QUFNQTVHLGFBQVMsSUFwRk87QUFxRmhCOzs7Ozs7QUFNQTBHLGtCQUFjLEtBM0ZFO0FBNEZoQjs7Ozs7O0FBTUFyUyxjQUFVLEtBbEdNO0FBbUdkOzs7Ozs7QUFNRnRzQixjQUFVOztBQXpHTSxHQUFsQjs7QUE2R0E7QUFDQXFaLGFBQVdJLE1BQVgsQ0FBa0I4akIsTUFBbEIsRUFBMEIsUUFBMUI7O0FBRUEsV0FBU3VCLFdBQVQsR0FBdUI7QUFDckIsV0FBTyxzQkFBcUIvOUMsSUFBckIsQ0FBMEJ0TSxPQUFPNG5DLFNBQVAsQ0FBaUJDLFNBQTNDO0FBQVA7QUFDRDs7QUFFRCxXQUFTeWlCLFlBQVQsR0FBd0I7QUFDdEIsV0FBTyxXQUFVaCtDLElBQVYsQ0FBZXRNLE9BQU80bkMsU0FBUCxDQUFpQkMsU0FBaEM7QUFBUDtBQUNEOztBQUVELFdBQVNvaEIsV0FBVCxHQUF1QjtBQUNyQixXQUFPb0IsaUJBQWlCQyxjQUF4QjtBQUNEO0FBRUEsQ0F4bEJBLENBd2xCQ3pwRCxNQXhsQkQsQ0FBRDtBQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViOzs7Ozs7Ozs7QUFGYSxNQVdQOGxCLE1BWE87QUFZWDs7Ozs7O0FBTUEsb0JBQVkxaEIsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFlbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYWtuRCxPQUFPclgsUUFBcEIsRUFBOEIsS0FBSzFOLFFBQUwsQ0FBYzFtQixJQUFkLEVBQTlCLEVBQW9EeGIsT0FBcEQsQ0FBZjs7QUFFQSxXQUFLdWlDLEtBQUw7O0FBRUFqQixpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxRQUFoQztBQUNBUixpQkFBV3dGLFFBQVgsQ0FBb0I1ckIsUUFBcEIsQ0FBNkIsUUFBN0IsRUFBdUM7QUFDckMsZUFBTztBQUNMLHlCQUFlLFVBRFY7QUFFTCxzQkFBWSxVQUZQO0FBR0wsd0JBQWMsVUFIVDtBQUlMLHdCQUFjLFVBSlQ7QUFLTCwrQkFBcUIsZUFMaEI7QUFNTCw0QkFBa0IsZUFOYjtBQU9MLDhCQUFvQixlQVBmO0FBUUwsOEJBQW9CO0FBUmYsU0FEOEI7QUFXckMsZUFBTztBQUNMLHdCQUFjLFVBRFQ7QUFFTCx5QkFBZSxVQUZWO0FBR0wsOEJBQW9CLGVBSGY7QUFJTCwrQkFBcUI7QUFKaEI7QUFYOEIsT0FBdkM7QUFrQkQ7O0FBRUQ7Ozs7Ozs7QUE3Q1c7QUFBQTtBQUFBLDhCQWtESDtBQUNOLGFBQUtnc0MsTUFBTCxHQUFjLEtBQUtobEIsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsT0FBbkIsQ0FBZDtBQUNBLGFBQUt3N0MsT0FBTCxHQUFlLEtBQUtqbEIsUUFBTCxDQUFjdjJCLElBQWQsQ0FBbUIsc0JBQW5CLENBQWY7O0FBRUEsYUFBS3k3QyxPQUFMLEdBQWUsS0FBS0QsT0FBTCxDQUFhM25ELEVBQWIsQ0FBZ0IsQ0FBaEIsQ0FBZjtBQUNBLGFBQUs2bkQsTUFBTCxHQUFjLEtBQUtILE1BQUwsQ0FBWTVvRCxNQUFaLEdBQXFCLEtBQUs0b0QsTUFBTCxDQUFZMW5ELEVBQVosQ0FBZSxDQUFmLENBQXJCLEdBQXlDMmhDLFFBQU0sS0FBS2ltQixPQUFMLENBQWFqNkMsSUFBYixDQUFrQixlQUFsQixDQUFOLENBQXZEO0FBQ0EsYUFBS202QyxLQUFMLEdBQWEsS0FBS3BsQixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixvQkFBbkIsRUFBeUMyUixHQUF6QyxDQUE2QyxLQUFLdGQsT0FBTCxDQUFhdW5ELFFBQWIsR0FBd0IsUUFBeEIsR0FBbUMsT0FBaEYsRUFBeUYsQ0FBekYsQ0FBYjs7QUFFQSxZQUFJQyxRQUFRLEtBQVo7QUFBQSxZQUNJaGxCLFFBQVEsSUFEWjtBQUVBLFlBQUksS0FBS3hpQyxPQUFMLENBQWFvUSxRQUFiLElBQXlCLEtBQUs4eEIsUUFBTCxDQUFjek4sUUFBZCxDQUF1QixLQUFLejBCLE9BQUwsQ0FBYXluRCxhQUFwQyxDQUE3QixFQUFpRjtBQUMvRSxlQUFLem5ELE9BQUwsQ0FBYW9RLFFBQWIsR0FBd0IsSUFBeEI7QUFDQSxlQUFLOHhCLFFBQUwsQ0FBY2xPLFFBQWQsQ0FBdUIsS0FBS2gwQixPQUFMLENBQWF5bkQsYUFBcEM7QUFDRDtBQUNELFlBQUksQ0FBQyxLQUFLUCxNQUFMLENBQVk1b0QsTUFBakIsRUFBeUI7QUFDdkIsZUFBSzRvRCxNQUFMLEdBQWMvbEIsSUFBSWpyQixHQUFKLENBQVEsS0FBS214QyxNQUFiLENBQWQ7QUFDQSxlQUFLcm5ELE9BQUwsQ0FBYTBuRCxPQUFiLEdBQXVCLElBQXZCO0FBQ0Q7O0FBRUQsYUFBS0MsWUFBTCxDQUFrQixDQUFsQjs7QUFFQSxZQUFJLEtBQUtSLE9BQUwsQ0FBYSxDQUFiLENBQUosRUFBcUI7QUFDbkIsZUFBS25uRCxPQUFMLENBQWE0bkQsV0FBYixHQUEyQixJQUEzQjtBQUNBLGVBQUtDLFFBQUwsR0FBZ0IsS0FBS1YsT0FBTCxDQUFhM25ELEVBQWIsQ0FBZ0IsQ0FBaEIsQ0FBaEI7QUFDQSxlQUFLc29ELE9BQUwsR0FBZSxLQUFLWixNQUFMLENBQVk1b0QsTUFBWixHQUFxQixDQUFyQixHQUF5QixLQUFLNG9ELE1BQUwsQ0FBWTFuRCxFQUFaLENBQWUsQ0FBZixDQUF6QixHQUE2QzJoQyxRQUFNLEtBQUswbUIsUUFBTCxDQUFjMTZDLElBQWQsQ0FBbUIsZUFBbkIsQ0FBTixDQUE1RDs7QUFFQSxjQUFJLENBQUMsS0FBSys1QyxNQUFMLENBQVksQ0FBWixDQUFMLEVBQXFCO0FBQ25CLGlCQUFLQSxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZaHhDLEdBQVosQ0FBZ0IsS0FBSzR4QyxPQUFyQixDQUFkO0FBQ0Q7QUFDRE4sa0JBQVEsSUFBUjs7QUFFQTtBQUNBLGVBQUtHLFlBQUwsQ0FBa0IsQ0FBbEI7QUFDRDs7QUFFRDtBQUNBLGFBQUtJLFVBQUw7O0FBRUEsYUFBS2pZLE9BQUw7QUFDRDtBQXpGVTtBQUFBO0FBQUEsbUNBMkZFO0FBQUE7O0FBQ1gsWUFBRyxLQUFLcVgsT0FBTCxDQUFhLENBQWIsQ0FBSCxFQUFvQjtBQUNsQixlQUFLYSxhQUFMLENBQW1CLEtBQUtaLE9BQXhCLEVBQWlDLEtBQUtGLE1BQUwsQ0FBWTFuRCxFQUFaLENBQWUsQ0FBZixFQUFrQjROLEdBQWxCLEVBQWpDLEVBQTBELElBQTFELEVBQWdFLFlBQU07QUFDcEUsbUJBQUs0NkMsYUFBTCxDQUFtQixPQUFLSCxRQUF4QixFQUFrQyxPQUFLWCxNQUFMLENBQVkxbkQsRUFBWixDQUFlLENBQWYsRUFBa0I0TixHQUFsQixFQUFsQyxFQUEyRCxJQUEzRDtBQUNELFdBRkQ7QUFHRCxTQUpELE1BSU87QUFDTCxlQUFLNDZDLGFBQUwsQ0FBbUIsS0FBS1osT0FBeEIsRUFBaUMsS0FBS0YsTUFBTCxDQUFZMW5ELEVBQVosQ0FBZSxDQUFmLEVBQWtCNE4sR0FBbEIsRUFBakMsRUFBMEQsSUFBMUQ7QUFDRDtBQUNGO0FBbkdVO0FBQUE7QUFBQSxnQ0FxR0Q7QUFDUixhQUFLMjZDLFVBQUw7QUFDRDtBQUNEOzs7Ozs7QUF4R1c7QUFBQTtBQUFBLGdDQTZHRHJrRCxLQTdHQyxFQTZHTTtBQUNmLFlBQUl1a0QsV0FBV2o2QixRQUFRdHFCLFFBQVEsS0FBSzFELE9BQUwsQ0FBYWlQLEtBQTdCLEVBQW9DLEtBQUtqUCxPQUFMLENBQWFKLEdBQWIsR0FBbUIsS0FBS0ksT0FBTCxDQUFhaVAsS0FBcEUsQ0FBZjs7QUFFQSxnQkFBTyxLQUFLalAsT0FBTCxDQUFha29ELHFCQUFwQjtBQUNBLGVBQUssS0FBTDtBQUNFRCx1QkFBVyxLQUFLRSxhQUFMLENBQW1CRixRQUFuQixDQUFYO0FBQ0E7QUFDRixlQUFLLEtBQUw7QUFDRUEsdUJBQVcsS0FBS0csYUFBTCxDQUFtQkgsUUFBbkIsQ0FBWDtBQUNBO0FBTkY7O0FBU0EsZUFBT0EsU0FBU0ksT0FBVCxDQUFpQixDQUFqQixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7OztBQTVIVztBQUFBO0FBQUEsNkJBaUlKSixRQWpJSSxFQWlJTTtBQUNmLGdCQUFPLEtBQUtqb0QsT0FBTCxDQUFha29ELHFCQUFwQjtBQUNBLGVBQUssS0FBTDtBQUNFRCx1QkFBVyxLQUFLRyxhQUFMLENBQW1CSCxRQUFuQixDQUFYO0FBQ0E7QUFDRixlQUFLLEtBQUw7QUFDRUEsdUJBQVcsS0FBS0UsYUFBTCxDQUFtQkYsUUFBbkIsQ0FBWDtBQUNBO0FBTkY7QUFRQSxZQUFJdmtELFFBQVEsQ0FBQyxLQUFLMUQsT0FBTCxDQUFhSixHQUFiLEdBQW1CLEtBQUtJLE9BQUwsQ0FBYWlQLEtBQWpDLElBQTBDZzVDLFFBQTFDLEdBQXFELEtBQUtqb0QsT0FBTCxDQUFhaVAsS0FBOUU7O0FBRUEsZUFBT3ZMLEtBQVA7QUFDRDs7QUFFRDs7Ozs7O0FBL0lXO0FBQUE7QUFBQSxvQ0FvSkdBLEtBcEpILEVBb0pVO0FBQ25CLGVBQU80a0QsUUFBUSxLQUFLdG9ELE9BQUwsQ0FBYXVvRCxhQUFyQixFQUFzQzdrRCxTQUFPLEtBQUsxRCxPQUFMLENBQWF1b0QsYUFBYixHQUEyQixDQUFsQyxDQUFELEdBQXVDLENBQTVFLENBQVA7QUFDRDs7QUFFRDs7Ozs7O0FBeEpXO0FBQUE7QUFBQSxvQ0E2Skc3a0QsS0E3SkgsRUE2SlU7QUFDbkIsZUFBTyxDQUFDN0MsS0FBS2lpQyxHQUFMLENBQVMsS0FBSzlpQyxPQUFMLENBQWF1b0QsYUFBdEIsRUFBcUM3a0QsS0FBckMsSUFBOEMsQ0FBL0MsS0FBcUQsS0FBSzFELE9BQUwsQ0FBYXVvRCxhQUFiLEdBQTZCLENBQWxGLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7QUFqS1c7QUFBQTtBQUFBLG9DQTJLR0MsS0EzS0gsRUEyS1V6NEMsUUEzS1YsRUEyS29CMDRDLFFBM0twQixFQTJLOEJ0ZSxFQTNLOUIsRUEyS2tDO0FBQzNDO0FBQ0EsWUFBSSxLQUFLakksUUFBTCxDQUFjek4sUUFBZCxDQUF1QixLQUFLejBCLE9BQUwsQ0FBYXluRCxhQUFwQyxDQUFKLEVBQXdEO0FBQ3REO0FBQ0Q7QUFDRDtBQUNBMTNDLG1CQUFXck8sV0FBV3FPLFFBQVgsQ0FBWCxDQU4yQyxDQU1YOztBQUVoQztBQUNBLFlBQUlBLFdBQVcsS0FBSy9QLE9BQUwsQ0FBYWlQLEtBQTVCLEVBQW1DO0FBQUVjLHFCQUFXLEtBQUsvUCxPQUFMLENBQWFpUCxLQUF4QjtBQUFnQyxTQUFyRSxNQUNLLElBQUljLFdBQVcsS0FBSy9QLE9BQUwsQ0FBYUosR0FBNUIsRUFBaUM7QUFBRW1RLHFCQUFXLEtBQUsvUCxPQUFMLENBQWFKLEdBQXhCO0FBQThCOztBQUV0RSxZQUFJNG5ELFFBQVEsS0FBS3huRCxPQUFMLENBQWE0bkQsV0FBekI7O0FBRUEsWUFBSUosS0FBSixFQUFXO0FBQUU7QUFDWCxjQUFJLEtBQUtMLE9BQUwsQ0FBYW54QyxLQUFiLENBQW1Cd3lDLEtBQW5CLE1BQThCLENBQWxDLEVBQXFDO0FBQ25DLGdCQUFJRSxRQUFRaG5ELFdBQVcsS0FBS21tRCxRQUFMLENBQWMxNkMsSUFBZCxDQUFtQixlQUFuQixDQUFYLENBQVo7QUFDQTRDLHVCQUFXQSxZQUFZMjRDLEtBQVosR0FBb0JBLFFBQVEsS0FBSzFvRCxPQUFMLENBQWFtdUIsSUFBekMsR0FBZ0RwZSxRQUEzRDtBQUNELFdBSEQsTUFHTztBQUNMLGdCQUFJNDRDLFFBQVFqbkQsV0FBVyxLQUFLMGxELE9BQUwsQ0FBYWo2QyxJQUFiLENBQWtCLGVBQWxCLENBQVgsQ0FBWjtBQUNBNEMsdUJBQVdBLFlBQVk0NEMsS0FBWixHQUFvQkEsUUFBUSxLQUFLM29ELE9BQUwsQ0FBYW11QixJQUF6QyxHQUFnRHBlLFFBQTNEO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBO0FBQ0EsWUFBSSxLQUFLL1AsT0FBTCxDQUFhdW5ELFFBQWIsSUFBeUIsQ0FBQ2tCLFFBQTlCLEVBQXdDO0FBQ3RDMTRDLHFCQUFXLEtBQUsvUCxPQUFMLENBQWFKLEdBQWIsR0FBbUJtUSxRQUE5QjtBQUNEOztBQUVELFlBQUl5eUIsUUFBUSxJQUFaO0FBQUEsWUFDSW9tQixPQUFPLEtBQUs1b0QsT0FBTCxDQUFhdW5ELFFBRHhCO0FBQUEsWUFFSXNCLE9BQU9ELE9BQU8sUUFBUCxHQUFrQixPQUY3QjtBQUFBLFlBR0lFLE9BQU9GLE9BQU8sS0FBUCxHQUFlLE1BSDFCO0FBQUEsWUFJSUcsWUFBWVAsTUFBTSxDQUFOLEVBQVN4N0IscUJBQVQsR0FBaUM2N0IsSUFBakMsQ0FKaEI7QUFBQSxZQUtJRyxVQUFVLEtBQUs5bUIsUUFBTCxDQUFjLENBQWQsRUFBaUJsVixxQkFBakIsR0FBeUM2N0IsSUFBekMsQ0FMZDs7QUFNSTtBQUNBWixtQkFBVyxLQUFLZ0IsU0FBTCxDQUFlbDVDLFFBQWYsQ0FQZjs7QUFRSTtBQUNBbTVDLG1CQUFXLENBQUNGLFVBQVVELFNBQVgsSUFBd0JkLFFBVHZDOztBQVVJO0FBQ0FrQixtQkFBVyxDQUFDbjdCLFFBQVFrN0IsUUFBUixFQUFrQkYsT0FBbEIsSUFBNkIsR0FBOUIsRUFBbUNYLE9BQW5DLENBQTJDLEtBQUtyb0QsT0FBTCxDQUFhb3BELE9BQXhELENBWGY7QUFZSTtBQUNBcjVDLG1CQUFXck8sV0FBV3FPLFNBQVNzNEMsT0FBVCxDQUFpQixLQUFLcm9ELE9BQUwsQ0FBYW9wRCxPQUE5QixDQUFYLENBQVg7QUFDQTtBQUNKLFlBQUk5ckMsTUFBTSxFQUFWOztBQUVBLGFBQUsrckMsVUFBTCxDQUFnQmIsS0FBaEIsRUFBdUJ6NEMsUUFBdkI7O0FBRUE7QUFDQSxZQUFJeTNDLEtBQUosRUFBVztBQUNULGNBQUk4QixhQUFhLEtBQUtuQyxPQUFMLENBQWFueEMsS0FBYixDQUFtQnd5QyxLQUFuQixNQUE4QixDQUEvQzs7QUFDSTtBQUNBZSxhQUZKOztBQUdJO0FBQ0FDLHNCQUFhLENBQUMsRUFBRXg3QixRQUFRKzZCLFNBQVIsRUFBbUJDLE9BQW5CLElBQThCLEdBQWhDLENBSmxCO0FBS0E7QUFDQSxjQUFJTSxVQUFKLEVBQWdCO0FBQ2Q7QUFDQWhzQyxnQkFBSXdyQyxJQUFKLElBQWVLLFFBQWY7QUFDQTtBQUNBSSxrQkFBTTduRCxXQUFXLEtBQUttbUQsUUFBTCxDQUFjLENBQWQsRUFBaUI1cEMsS0FBakIsQ0FBdUI2cUMsSUFBdkIsQ0FBWCxJQUEyQ0ssUUFBM0MsR0FBc0RLLFNBQTVEO0FBQ0E7QUFDQTtBQUNBLGdCQUFJcmYsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRUE7QUFBTyxhQVAvQixDQU8rQjtBQUM5QyxXQVJELE1BUU87QUFDTDtBQUNBLGdCQUFJc2YsWUFBWS9uRCxXQUFXLEtBQUswbEQsT0FBTCxDQUFhLENBQWIsRUFBZ0JucEMsS0FBaEIsQ0FBc0I2cUMsSUFBdEIsQ0FBWCxDQUFoQjtBQUNBO0FBQ0E7QUFDQVMsa0JBQU1KLFlBQVlsbUMsTUFBTXdtQyxTQUFOLElBQW1CLENBQUMsS0FBS3pwRCxPQUFMLENBQWEwcEQsWUFBYixHQUE0QixLQUFLMXBELE9BQUwsQ0FBYWlQLEtBQTFDLEtBQWtELENBQUMsS0FBS2pQLE9BQUwsQ0FBYUosR0FBYixHQUFpQixLQUFLSSxPQUFMLENBQWFpUCxLQUEvQixJQUFzQyxHQUF4RixDQUFuQixHQUFrSHc2QyxTQUE5SCxJQUEySUQsU0FBako7QUFDRDtBQUNEO0FBQ0Fsc0MsdUJBQVd1ckMsSUFBWCxJQUF3QlUsR0FBeEI7QUFDRDs7QUFFRCxhQUFLcm5CLFFBQUwsQ0FBY3RoQixHQUFkLENBQWtCLHFCQUFsQixFQUF5QyxZQUFXO0FBQ3BDOzs7O0FBSUE0aEIsZ0JBQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIsaUJBQXZCLEVBQTBDLENBQUM2akMsS0FBRCxDQUExQztBQUNILFNBTmI7O0FBUUE7QUFDQSxZQUFJbUIsV0FBVyxLQUFLem5CLFFBQUwsQ0FBYzFtQixJQUFkLENBQW1CLFVBQW5CLElBQWlDLE9BQUssRUFBdEMsR0FBMkMsS0FBS3hiLE9BQUwsQ0FBYTJwRCxRQUF2RTs7QUFFQXJvQixtQkFBVytJLElBQVgsQ0FBZ0JzZixRQUFoQixFQUEwQm5CLEtBQTFCLEVBQWlDLFlBQVc7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsY0FBSXZsQyxNQUFNa21DLFFBQU4sQ0FBSixFQUFxQjtBQUNuQlgsa0JBQU1sckMsR0FBTixDQUFVd3JDLElBQVYsRUFBbUJiLFdBQVcsR0FBOUI7QUFDRCxXQUZELE1BR0s7QUFDSE8sa0JBQU1sckMsR0FBTixDQUFVd3JDLElBQVYsRUFBbUJLLFFBQW5CO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDM21CLE1BQU14aUMsT0FBTixDQUFjNG5ELFdBQW5CLEVBQWdDO0FBQzlCO0FBQ0FwbEIsa0JBQU04a0IsS0FBTixDQUFZaHFDLEdBQVosQ0FBZ0J1ckMsSUFBaEIsRUFBeUJaLFdBQVcsR0FBcEM7QUFDRCxXQUhELE1BR087QUFDTDtBQUNBemxCLGtCQUFNOGtCLEtBQU4sQ0FBWWhxQyxHQUFaLENBQWdCQSxHQUFoQjtBQUNEO0FBQ0YsU0FsQkQ7O0FBcUJBOzs7O0FBSUFxVixxQkFBYTZQLE1BQU05UCxPQUFuQjtBQUNBOFAsY0FBTTlQLE9BQU4sR0FBZ0JsWSxXQUFXLFlBQVU7QUFDbkNnb0IsZ0JBQU1OLFFBQU4sQ0FBZXZkLE9BQWYsQ0FBdUIsbUJBQXZCLEVBQTRDLENBQUM2akMsS0FBRCxDQUE1QztBQUNELFNBRmUsRUFFYmhtQixNQUFNeGlDLE9BQU4sQ0FBYzRwRCxZQUZELENBQWhCO0FBR0Q7O0FBRUQ7Ozs7Ozs7QUFqU1c7QUFBQTtBQUFBLG1DQXVTRXI2QyxHQXZTRixFQXVTTztBQUNoQixZQUFJczZDLFVBQVd0NkMsUUFBUSxDQUFSLEdBQVksS0FBS3ZQLE9BQUwsQ0FBYTBwRCxZQUF6QixHQUF3QyxLQUFLMXBELE9BQUwsQ0FBYThwRCxVQUFwRTtBQUNBLFlBQUlsaEQsS0FBSyxLQUFLcytDLE1BQUwsQ0FBWTFuRCxFQUFaLENBQWUrUCxHQUFmLEVBQW9CcEMsSUFBcEIsQ0FBeUIsSUFBekIsS0FBa0NtMEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixRQUExQixDQUEzQztBQUNBLGFBQUtpbEIsTUFBTCxDQUFZMW5ELEVBQVosQ0FBZStQLEdBQWYsRUFBb0JwQyxJQUFwQixDQUF5QjtBQUN2QixnQkFBTXZFLEVBRGlCO0FBRXZCLGlCQUFPLEtBQUs1SSxPQUFMLENBQWFKLEdBRkc7QUFHdkIsaUJBQU8sS0FBS0ksT0FBTCxDQUFhaVAsS0FIRztBQUl2QixrQkFBUSxLQUFLalAsT0FBTCxDQUFhbXVCO0FBSkUsU0FBekI7QUFNQSxhQUFLKzRCLE1BQUwsQ0FBWTFuRCxFQUFaLENBQWUrUCxHQUFmLEVBQW9CbkMsR0FBcEIsQ0FBd0J5OEMsT0FBeEI7QUFDQSxhQUFLMUMsT0FBTCxDQUFhM25ELEVBQWIsQ0FBZ0IrUCxHQUFoQixFQUFxQnBDLElBQXJCLENBQTBCO0FBQ3hCLGtCQUFRLFFBRGdCO0FBRXhCLDJCQUFpQnZFLEVBRk87QUFHeEIsMkJBQWlCLEtBQUs1SSxPQUFMLENBQWFKLEdBSE47QUFJeEIsMkJBQWlCLEtBQUtJLE9BQUwsQ0FBYWlQLEtBSk47QUFLeEIsMkJBQWlCNDZDLE9BTE87QUFNeEIsOEJBQW9CLEtBQUs3cEQsT0FBTCxDQUFhdW5ELFFBQWIsR0FBd0IsVUFBeEIsR0FBcUMsWUFOakM7QUFPeEIsc0JBQVk7QUFQWSxTQUExQjtBQVNEOztBQUVEOzs7Ozs7OztBQTVUVztBQUFBO0FBQUEsaUNBbVVBSCxPQW5VQSxFQW1VU2g2QyxHQW5VVCxFQW1VYztBQUN2QixZQUFJbUMsTUFBTSxLQUFLdlAsT0FBTCxDQUFhNG5ELFdBQWIsR0FBMkIsS0FBS1QsT0FBTCxDQUFhbnhDLEtBQWIsQ0FBbUJveEMsT0FBbkIsQ0FBM0IsR0FBeUQsQ0FBbkU7QUFDQSxhQUFLRixNQUFMLENBQVkxbkQsRUFBWixDQUFlK1AsR0FBZixFQUFvQm5DLEdBQXBCLENBQXdCQSxHQUF4QjtBQUNBZzZDLGdCQUFRajZDLElBQVIsQ0FBYSxlQUFiLEVBQThCQyxHQUE5QjtBQUNEOztBQUVEOzs7Ozs7Ozs7Ozs7QUF6VVc7QUFBQTtBQUFBLG1DQW9WRXJGLENBcFZGLEVBb1ZLcS9DLE9BcFZMLEVBb1ZjaDZDLEdBcFZkLEVBb1ZtQjtBQUM1QixZQUFJMUosS0FBSixFQUFXcW1ELE1BQVg7QUFDQSxZQUFJLENBQUMzOEMsR0FBTCxFQUFVO0FBQUM7QUFDVHJGLFlBQUU4YSxjQUFGO0FBQ0EsY0FBSTJmLFFBQVEsSUFBWjtBQUFBLGNBQ0kra0IsV0FBVyxLQUFLdm5ELE9BQUwsQ0FBYXVuRCxRQUQ1QjtBQUFBLGNBRUlqc0IsUUFBUWlzQixXQUFXLFFBQVgsR0FBc0IsT0FGbEM7QUFBQSxjQUdJck8sWUFBWXFPLFdBQVcsS0FBWCxHQUFtQixNQUhuQztBQUFBLGNBSUl5QyxjQUFjekMsV0FBV3gvQyxFQUFFa2MsS0FBYixHQUFxQmxjLEVBQUU4YixLQUp6QztBQUFBLGNBS0lvbUMsZUFBZSxLQUFLN0MsT0FBTCxDQUFhLENBQWIsRUFBZ0JwNkIscUJBQWhCLEdBQXdDc08sS0FBeEMsSUFBaUQsQ0FMcEU7QUFBQSxjQU1JNHVCLFNBQVMsS0FBS2hvQixRQUFMLENBQWMsQ0FBZCxFQUFpQmxWLHFCQUFqQixHQUF5Q3NPLEtBQXpDLENBTmI7QUFBQSxjQU9JNnVCLGVBQWU1QyxXQUFXcG1CLEVBQUV6a0MsTUFBRixFQUFVeW5CLFNBQVYsRUFBWCxHQUFtQ2dkLEVBQUV6a0MsTUFBRixFQUFVcW5CLFVBQVYsRUFQdEQ7O0FBVUEsY0FBSXFtQyxhQUFhLEtBQUtsb0IsUUFBTCxDQUFjL0MsTUFBZCxHQUF1QitaLFNBQXZCLENBQWpCOztBQUVBO0FBQ0E7QUFDQSxjQUFJbnhDLEVBQUVtYyxPQUFGLEtBQWNuYyxFQUFFa2MsS0FBcEIsRUFBMkI7QUFBRStsQywwQkFBY0EsY0FBY0csWUFBNUI7QUFBMkM7QUFDeEUsY0FBSUUsZUFBZUwsY0FBY0ksVUFBakM7QUFDQSxjQUFJRSxLQUFKO0FBQ0EsY0FBSUQsZUFBZSxDQUFuQixFQUFzQjtBQUNwQkMsb0JBQVEsQ0FBUjtBQUNELFdBRkQsTUFFTyxJQUFJRCxlQUFlSCxNQUFuQixFQUEyQjtBQUNoQ0ksb0JBQVFKLE1BQVI7QUFDRCxXQUZNLE1BRUE7QUFDTEksb0JBQVFELFlBQVI7QUFDRDtBQUNELGNBQUlFLFlBQVl2OEIsUUFBUXM4QixLQUFSLEVBQWVKLE1BQWYsQ0FBaEI7O0FBRUF4bUQsa0JBQVEsS0FBSzhtRCxNQUFMLENBQVlELFNBQVosQ0FBUjs7QUFFQTtBQUNBLGNBQUlqcEIsV0FBV0csR0FBWCxNQUFvQixDQUFDLEtBQUt6aEMsT0FBTCxDQUFhdW5ELFFBQXRDLEVBQWdEO0FBQUM3akQsb0JBQVEsS0FBSzFELE9BQUwsQ0FBYUosR0FBYixHQUFtQjhELEtBQTNCO0FBQWtDOztBQUVuRkEsa0JBQVE4K0IsTUFBTWlvQixZQUFOLENBQW1CLElBQW5CLEVBQXlCL21ELEtBQXpCLENBQVI7QUFDQTtBQUNBcW1ELG1CQUFTLEtBQVQ7O0FBRUEsY0FBSSxDQUFDM0MsT0FBTCxFQUFjO0FBQUM7QUFDYixnQkFBSXNELGVBQWVDLFlBQVksS0FBS3ZELE9BQWpCLEVBQTBCbE8sU0FBMUIsRUFBcUNvUixLQUFyQyxFQUE0Q2h2QixLQUE1QyxDQUFuQjtBQUFBLGdCQUNJc3ZCLGVBQWVELFlBQVksS0FBSzlDLFFBQWpCLEVBQTJCM08sU0FBM0IsRUFBc0NvUixLQUF0QyxFQUE2Q2h2QixLQUE3QyxDQURuQjtBQUVJOHJCLHNCQUFVc0QsZ0JBQWdCRSxZQUFoQixHQUErQixLQUFLeEQsT0FBcEMsR0FBOEMsS0FBS1MsUUFBN0Q7QUFDTDtBQUVGLFNBM0NELE1BMkNPO0FBQUM7QUFDTm5rRCxrQkFBUSxLQUFLK21ELFlBQUwsQ0FBa0IsSUFBbEIsRUFBd0JyOUMsR0FBeEIsQ0FBUjtBQUNBMjhDLG1CQUFTLElBQVQ7QUFDRDs7QUFFRCxhQUFLL0IsYUFBTCxDQUFtQlosT0FBbkIsRUFBNEIxakQsS0FBNUIsRUFBbUNxbUQsTUFBbkM7QUFDRDs7QUFFRDs7Ozs7Ozs7QUF6WVc7QUFBQTtBQUFBLG1DQWdaRTNDLE9BaFpGLEVBZ1pXMWpELEtBaFpYLEVBZ1prQjtBQUMzQixZQUFJMEosR0FBSjtBQUFBLFlBQ0UrZ0IsT0FBTyxLQUFLbnVCLE9BQUwsQ0FBYW11QixJQUR0QjtBQUFBLFlBRUVwa0IsTUFBTXJJLFdBQVd5c0IsT0FBSyxDQUFoQixDQUZSO0FBQUEsWUFHRWxCLElBSEY7QUFBQSxZQUdRNDlCLFFBSFI7QUFBQSxZQUdrQkMsUUFIbEI7QUFJQSxZQUFJLENBQUMsQ0FBQzFELE9BQU4sRUFBZTtBQUNiaDZDLGdCQUFNMUwsV0FBVzBsRCxRQUFRajZDLElBQVIsQ0FBYSxlQUFiLENBQVgsQ0FBTjtBQUNELFNBRkQsTUFHSztBQUNIQyxnQkFBTTFKLEtBQU47QUFDRDtBQUNEdXBCLGVBQU83ZixNQUFNK2dCLElBQWI7QUFDQTA4QixtQkFBV3o5QyxNQUFNNmYsSUFBakI7QUFDQTY5QixtQkFBV0QsV0FBVzE4QixJQUF0QjtBQUNBLFlBQUlsQixTQUFTLENBQWIsRUFBZ0I7QUFDZCxpQkFBTzdmLEdBQVA7QUFDRDtBQUNEQSxjQUFNQSxPQUFPeTlDLFdBQVc5Z0QsR0FBbEIsR0FBd0IrZ0QsUUFBeEIsR0FBbUNELFFBQXpDO0FBQ0EsZUFBT3o5QyxHQUFQO0FBQ0Q7O0FBRUQ7Ozs7OztBQXJhVztBQUFBO0FBQUEsZ0NBMGFEO0FBQ1IsYUFBSzI5QyxnQkFBTCxDQUFzQixLQUFLM0QsT0FBM0I7QUFDQSxZQUFHLEtBQUtELE9BQUwsQ0FBYSxDQUFiLENBQUgsRUFBb0I7QUFDbEIsZUFBSzRELGdCQUFMLENBQXNCLEtBQUtsRCxRQUEzQjtBQUNEO0FBQ0Y7O0FBR0Q7Ozs7Ozs7QUFsYlc7QUFBQTtBQUFBLHVDQXdiTVQsT0F4Yk4sRUF3YmU7QUFDeEIsWUFBSTVrQixRQUFRLElBQVo7QUFBQSxZQUNJd29CLFNBREo7QUFBQSxZQUVJbjZCLEtBRko7O0FBSUUsYUFBS3EyQixNQUFMLENBQVkvc0MsR0FBWixDQUFnQixrQkFBaEIsRUFBb0N1RyxFQUFwQyxDQUF1QyxrQkFBdkMsRUFBMkQsVUFBUzNZLENBQVQsRUFBWTtBQUNyRSxjQUFJd0gsTUFBTWl6QixNQUFNMGtCLE1BQU4sQ0FBYWx4QyxLQUFiLENBQW1CbXJCLEVBQUUsSUFBRixDQUFuQixDQUFWO0FBQ0FxQixnQkFBTXlvQixZQUFOLENBQW1CbGpELENBQW5CLEVBQXNCeTZCLE1BQU0ya0IsT0FBTixDQUFjM25ELEVBQWQsQ0FBaUIrUCxHQUFqQixDQUF0QixFQUE2QzR4QixFQUFFLElBQUYsRUFBUS96QixHQUFSLEVBQTdDO0FBQ0QsU0FIRDs7QUFLQSxZQUFJLEtBQUtwTixPQUFMLENBQWFrckQsV0FBakIsRUFBOEI7QUFDNUIsZUFBS2hwQixRQUFMLENBQWMvbkIsR0FBZCxDQUFrQixpQkFBbEIsRUFBcUN1RyxFQUFyQyxDQUF3QyxpQkFBeEMsRUFBMkQsVUFBUzNZLENBQVQsRUFBWTtBQUNyRSxnQkFBSXk2QixNQUFNTixRQUFOLENBQWUxbUIsSUFBZixDQUFvQixVQUFwQixDQUFKLEVBQXFDO0FBQUUscUJBQU8sS0FBUDtBQUFlOztBQUV0RCxnQkFBSSxDQUFDMmxCLEVBQUVwNUIsRUFBRXpILE1BQUosRUFBWWdVLEVBQVosQ0FBZSxzQkFBZixDQUFMLEVBQTZDO0FBQzNDLGtCQUFJa3VCLE1BQU14aUMsT0FBTixDQUFjNG5ELFdBQWxCLEVBQStCO0FBQzdCcGxCLHNCQUFNeW9CLFlBQU4sQ0FBbUJsakQsQ0FBbkI7QUFDRCxlQUZELE1BRU87QUFDTHk2QixzQkFBTXlvQixZQUFOLENBQW1CbGpELENBQW5CLEVBQXNCeTZCLE1BQU00a0IsT0FBNUI7QUFDRDtBQUNGO0FBQ0YsV0FWRDtBQVdEOztBQUVILFlBQUksS0FBS3BuRCxPQUFMLENBQWFtckQsU0FBakIsRUFBNEI7QUFDMUIsZUFBS2hFLE9BQUwsQ0FBYS9aLFFBQWI7O0FBRUEsY0FBSW9LLFFBQVFyVyxFQUFFLE1BQUYsQ0FBWjtBQUNBaW1CLGtCQUNHanRDLEdBREgsQ0FDTyxxQkFEUCxFQUVHdUcsRUFGSCxDQUVNLHFCQUZOLEVBRTZCLFVBQVMzWSxDQUFULEVBQVk7QUFDckNxL0Msb0JBQVFwekIsUUFBUixDQUFpQixhQUFqQjtBQUNBd08sa0JBQU04a0IsS0FBTixDQUFZdHpCLFFBQVosQ0FBcUIsYUFBckIsRUFGcUMsQ0FFRDtBQUNwQ3dPLGtCQUFNTixRQUFOLENBQWUxbUIsSUFBZixDQUFvQixVQUFwQixFQUFnQyxJQUFoQzs7QUFFQXd2Qyx3QkFBWTdwQixFQUFFcDVCLEVBQUUyYSxhQUFKLENBQVo7O0FBRUE4MEIsa0JBQU05MkIsRUFBTixDQUFTLHFCQUFULEVBQWdDLFVBQVMzWSxDQUFULEVBQVk7QUFDMUNBLGdCQUFFOGEsY0FBRjtBQUNBMmYsb0JBQU15b0IsWUFBTixDQUFtQmxqRCxDQUFuQixFQUFzQmlqRCxTQUF0QjtBQUVELGFBSkQsRUFJR3RxQyxFQUpILENBSU0sbUJBSk4sRUFJMkIsVUFBUzNZLENBQVQsRUFBWTtBQUNyQ3k2QixvQkFBTXlvQixZQUFOLENBQW1CbGpELENBQW5CLEVBQXNCaWpELFNBQXRCOztBQUVBNUQsc0JBQVEveUIsV0FBUixDQUFvQixhQUFwQjtBQUNBbU8sb0JBQU04a0IsS0FBTixDQUFZanpCLFdBQVosQ0FBd0IsYUFBeEI7QUFDQW1PLG9CQUFNTixRQUFOLENBQWUxbUIsSUFBZixDQUFvQixVQUFwQixFQUFnQyxLQUFoQzs7QUFFQWc4QixvQkFBTXI5QixHQUFOLENBQVUsdUNBQVY7QUFDRCxhQVpEO0FBYUgsV0F0QkQ7QUF1QkE7QUF2QkEsV0F3QkN1RyxFQXhCRCxDQXdCSSwyQ0F4QkosRUF3QmlELFVBQVMzWSxDQUFULEVBQVk7QUFDM0RBLGNBQUU4YSxjQUFGO0FBQ0QsV0ExQkQ7QUEyQkQ7O0FBRUR1a0MsZ0JBQVFqdEMsR0FBUixDQUFZLG1CQUFaLEVBQWlDdUcsRUFBakMsQ0FBb0MsbUJBQXBDLEVBQXlELFVBQVMzWSxDQUFULEVBQVk7QUFDbkUsY0FBSXFqRCxXQUFXanFCLEVBQUUsSUFBRixDQUFmO0FBQUEsY0FDSTV4QixNQUFNaXpCLE1BQU14aUMsT0FBTixDQUFjNG5ELFdBQWQsR0FBNEJwbEIsTUFBTTJrQixPQUFOLENBQWNueEMsS0FBZCxDQUFvQm8xQyxRQUFwQixDQUE1QixHQUE0RCxDQUR0RTtBQUFBLGNBRUlDLFdBQVczcEQsV0FBVzhnQyxNQUFNMGtCLE1BQU4sQ0FBYTFuRCxFQUFiLENBQWdCK1AsR0FBaEIsRUFBcUJuQyxHQUFyQixFQUFYLENBRmY7QUFBQSxjQUdJaytDLFFBSEo7O0FBS0E7QUFDQWhxQixxQkFBV3dGLFFBQVgsQ0FBb0JNLFNBQXBCLENBQThCci9CLENBQTlCLEVBQWlDLFFBQWpDLEVBQTJDO0FBQ3pDd2pELHNCQUFVLG9CQUFXO0FBQ25CRCx5QkFBV0QsV0FBVzdvQixNQUFNeGlDLE9BQU4sQ0FBY211QixJQUFwQztBQUNELGFBSHdDO0FBSXpDcTlCLHNCQUFVLG9CQUFXO0FBQ25CRix5QkFBV0QsV0FBVzdvQixNQUFNeGlDLE9BQU4sQ0FBY211QixJQUFwQztBQUNELGFBTndDO0FBT3pDczlCLDJCQUFlLHlCQUFXO0FBQ3hCSCx5QkFBV0QsV0FBVzdvQixNQUFNeGlDLE9BQU4sQ0FBY211QixJQUFkLEdBQXFCLEVBQTNDO0FBQ0QsYUFUd0M7QUFVekN1OUIsMkJBQWUseUJBQVc7QUFDeEJKLHlCQUFXRCxXQUFXN29CLE1BQU14aUMsT0FBTixDQUFjbXVCLElBQWQsR0FBcUIsRUFBM0M7QUFDRCxhQVp3QztBQWF6Q3daLHFCQUFTLG1CQUFXO0FBQUU7QUFDcEI1L0IsZ0JBQUU4YSxjQUFGO0FBQ0EyZixvQkFBTXdsQixhQUFOLENBQW9Cb0QsUUFBcEIsRUFBOEJFLFFBQTlCLEVBQXdDLElBQXhDO0FBQ0Q7QUFoQndDLFdBQTNDO0FBa0JBOzs7O0FBSUQsU0E3QkQ7QUE4QkQ7O0FBRUQ7Ozs7QUFqaEJXO0FBQUE7QUFBQSxnQ0FvaEJEO0FBQ1IsYUFBS25FLE9BQUwsQ0FBYWh0QyxHQUFiLENBQWlCLFlBQWpCO0FBQ0EsYUFBSytzQyxNQUFMLENBQVkvc0MsR0FBWixDQUFnQixZQUFoQjtBQUNBLGFBQUsrbkIsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsWUFBbEI7O0FBRUF3WSxxQkFBYSxLQUFLRCxPQUFsQjs7QUFFQTRPLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBNWhCVTs7QUFBQTtBQUFBOztBQStoQmI4a0IsU0FBT3JYLFFBQVAsR0FBa0I7QUFDaEI7Ozs7OztBQU1BM2dDLFdBQU8sQ0FQUztBQVFoQjs7Ozs7O0FBTUFyUCxTQUFLLEdBZFc7QUFlaEI7Ozs7OztBQU1BdXVCLFVBQU0sQ0FyQlU7QUFzQmhCOzs7Ozs7QUFNQXU3QixrQkFBYyxDQTVCRTtBQTZCaEI7Ozs7OztBQU1BSSxnQkFBWSxHQW5DSTtBQW9DaEI7Ozs7OztBQU1BcEMsYUFBUyxLQTFDTztBQTJDaEI7Ozs7OztBQU1Bd0QsaUJBQWEsSUFqREc7QUFrRGhCOzs7Ozs7QUFNQTNELGNBQVUsS0F4RE07QUF5RGhCOzs7Ozs7QUFNQTRELGVBQVcsSUEvREs7QUFnRWhCOzs7Ozs7QUFNQS82QyxjQUFVLEtBdEVNO0FBdUVoQjs7Ozs7O0FBTUF3M0MsaUJBQWEsS0E3RUc7QUE4RWhCOzs7QUFHQTtBQUNBOzs7Ozs7QUFNQXdCLGFBQVMsQ0F4Rk87QUF5RmhCOzs7QUFHQTtBQUNBOzs7Ozs7QUFNQU8sY0FBVSxHQW5HTSxFQW1HRjtBQUNkOzs7Ozs7QUFNQWxDLG1CQUFlLFVBMUdDO0FBMkdoQjs7Ozs7O0FBTUFrRSxvQkFBZ0IsS0FqSEE7QUFrSGhCOzs7Ozs7QUFNQS9CLGtCQUFjLEdBeEhFO0FBeUhoQjs7Ozs7O0FBTUFyQixtQkFBZSxDQS9IQztBQWdJaEI7Ozs7OztBQU1BTCwyQkFBdUI7QUF0SVAsR0FBbEI7O0FBeUlBLFdBQVNsNkIsT0FBVCxDQUFpQjQ5QixJQUFqQixFQUF1Qmx0RCxHQUF2QixFQUE0QjtBQUMxQixXQUFRa3RELE9BQU9sdEQsR0FBZjtBQUNEO0FBQ0QsV0FBU2lzRCxXQUFULENBQXFCdkQsT0FBckIsRUFBOEJwNUMsR0FBOUIsRUFBbUM2OUMsUUFBbkMsRUFBNkN2d0IsS0FBN0MsRUFBb0Q7QUFDbEQsV0FBT3o2QixLQUFLb3NDLEdBQUwsQ0FBVW1hLFFBQVFoOEIsUUFBUixHQUFtQnBkLEdBQW5CLElBQTJCbzVDLFFBQVE5ckIsS0FBUixNQUFtQixDQUEvQyxHQUFxRHV3QixRQUE5RCxDQUFQO0FBQ0Q7QUFDRCxXQUFTdkQsT0FBVCxDQUFpQi8yQyxJQUFqQixFQUF1QjdOLEtBQXZCLEVBQThCO0FBQzVCLFdBQU83QyxLQUFLaXJELEdBQUwsQ0FBU3BvRCxLQUFULElBQWdCN0MsS0FBS2lyRCxHQUFMLENBQVN2NkMsSUFBVCxDQUF2QjtBQUNEOztBQUVEO0FBQ0ErdkIsYUFBV0ksTUFBWCxDQUFrQnVsQixNQUFsQixFQUEwQixRQUExQjtBQUVDLENBcnJCQSxDQXFyQkMxcEQsTUFyckJELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7OztBQUZhLE1BU1A0cUIsTUFUTztBQVVYOzs7Ozs7QUFNQSxvQkFBWXhtQixPQUFaLEVBQXFCdmxDLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFdBQUtraUMsUUFBTCxHQUFnQnFELE9BQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWVtaEMsRUFBRXBoQyxNQUFGLENBQVMsRUFBVCxFQUFhZ3NELE9BQU9uYyxRQUFwQixFQUE4QixLQUFLMU4sUUFBTCxDQUFjMW1CLElBQWQsRUFBOUIsRUFBb0R4YixPQUFwRCxDQUFmOztBQUVBLFdBQUt1aUMsS0FBTDs7QUFFQWpCLGlCQUFXUSxjQUFYLENBQTBCLElBQTFCLEVBQWdDLFFBQWhDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUF6Qlc7QUFBQTtBQUFBLDhCQThCSDtBQUNOLFlBQUk0VyxVQUFVLEtBQUt4VyxRQUFMLENBQWNqM0IsTUFBZCxDQUFxQix5QkFBckIsQ0FBZDtBQUFBLFlBQ0lyQyxLQUFLLEtBQUtzNUIsUUFBTCxDQUFjLENBQWQsRUFBaUJ0NUIsRUFBakIsSUFBdUIwNEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixRQUExQixDQURoQztBQUFBLFlBRUlPLFFBQVEsSUFGWjs7QUFJQSxZQUFJLENBQUNrVyxRQUFRcDZDLE1BQWIsRUFBcUI7QUFDbkIsZUFBSzB0RCxVQUFMLEdBQWtCLElBQWxCO0FBQ0Q7QUFDRCxhQUFLQyxVQUFMLEdBQWtCdlQsUUFBUXA2QyxNQUFSLEdBQWlCbzZDLE9BQWpCLEdBQTJCdlgsRUFBRSxLQUFLbmhDLE9BQUwsQ0FBYTJwQixTQUFmLEVBQTBCd1MsU0FBMUIsQ0FBb0MsS0FBSytGLFFBQXpDLENBQTdDO0FBQ0EsYUFBSytwQixVQUFMLENBQWdCajRCLFFBQWhCLENBQXlCLEtBQUtoMEIsT0FBTCxDQUFhd2hELGNBQXRDOztBQUVBLGFBQUt0ZixRQUFMLENBQWNsTyxRQUFkLENBQXVCLEtBQUtoMEIsT0FBTCxDQUFha3NELFdBQXBDLEVBQWlELytDLElBQWpELENBQXNELEVBQUUsZUFBZXZFLEVBQWpCLEVBQXFCLGVBQWVBLEVBQXBDLEVBQXREO0FBQ0EsWUFBSSxLQUFLNUksT0FBTCxDQUFhc21DLE1BQWIsS0FBd0IsRUFBNUIsRUFBZ0M7QUFDNUJuRixZQUFFLE1BQU1xQixNQUFNeGlDLE9BQU4sQ0FBY3NtQyxNQUF0QixFQUE4Qm41QixJQUE5QixDQUFtQyxFQUFFLGVBQWV2RSxFQUFqQixFQUFuQztBQUNIOztBQUVELGFBQUt1akQsV0FBTCxHQUFtQixLQUFLbnNELE9BQUwsQ0FBYW9zRCxVQUFoQztBQUNBLGFBQUtDLE9BQUwsR0FBZSxLQUFmO0FBQ0FsckIsVUFBRXprQyxNQUFGLEVBQVVra0IsR0FBVixDQUFjLGdCQUFkLEVBQWdDLFlBQVU7QUFDeEM7QUFDQTRoQixnQkFBTThwQixlQUFOLEdBQXdCOXBCLE1BQU1OLFFBQU4sQ0FBZTVrQixHQUFmLENBQW1CLFNBQW5CLEtBQWlDLE1BQWpDLEdBQTBDLENBQTFDLEdBQThDa2xCLE1BQU1OLFFBQU4sQ0FBZSxDQUFmLEVBQWtCbFYscUJBQWxCLEdBQTBDaUMsTUFBaEg7QUFDQXVULGdCQUFNeXBCLFVBQU4sQ0FBaUIzdUMsR0FBakIsQ0FBcUIsUUFBckIsRUFBK0JrbEIsTUFBTThwQixlQUFyQztBQUNBOXBCLGdCQUFNK3BCLFVBQU4sR0FBbUIvcEIsTUFBTThwQixlQUF6QjtBQUNBLGNBQUc5cEIsTUFBTXhpQyxPQUFOLENBQWNzbUMsTUFBZCxLQUF5QixFQUE1QixFQUErQjtBQUM3QjlELGtCQUFNNFIsT0FBTixHQUFnQmpULEVBQUUsTUFBTXFCLE1BQU14aUMsT0FBTixDQUFjc21DLE1BQXRCLENBQWhCO0FBQ0QsV0FGRCxNQUVLO0FBQ0g5RCxrQkFBTWdxQixZQUFOO0FBQ0Q7O0FBRURocUIsZ0JBQU1pcUIsU0FBTixDQUFnQixZQUFVO0FBQ3hCLGdCQUFJQyxTQUFTaHdELE9BQU9zakMsV0FBcEI7QUFDQXdDLGtCQUFNbXFCLEtBQU4sQ0FBWSxLQUFaLEVBQW1CRCxNQUFuQjtBQUNBO0FBQ0EsZ0JBQUksQ0FBQ2xxQixNQUFNNnBCLE9BQVgsRUFBb0I7QUFDbEI3cEIsb0JBQU1vcUIsYUFBTixDQUFxQkYsVUFBVWxxQixNQUFNcXFCLFFBQWpCLEdBQTZCLEtBQTdCLEdBQXFDLElBQXpEO0FBQ0Q7QUFDRixXQVBEO0FBUUFycUIsZ0JBQU1zTixPQUFOLENBQWNsbkMsR0FBR3pFLEtBQUgsQ0FBUyxHQUFULEVBQWN3UyxPQUFkLEdBQXdCdk4sSUFBeEIsQ0FBNkIsR0FBN0IsQ0FBZDtBQUNELFNBcEJEO0FBcUJEOztBQUVEOzs7Ozs7QUF2RVc7QUFBQTtBQUFBLHFDQTRFSTtBQUNiLFlBQUlnQyxNQUFNLEtBQUtwTCxPQUFMLENBQWE4c0QsU0FBYixJQUEwQixFQUExQixHQUErQixDQUEvQixHQUFtQyxLQUFLOXNELE9BQUwsQ0FBYThzRCxTQUExRDtBQUFBLFlBQ0lDLE1BQU0sS0FBSy9zRCxPQUFMLENBQWFndEQsU0FBYixJQUF5QixFQUF6QixHQUE4Qnp3RCxTQUFTdU8sZUFBVCxDQUF5Qit6QyxZQUF2RCxHQUFzRSxLQUFLNytDLE9BQUwsQ0FBYWd0RCxTQUQ3RjtBQUFBLFlBRUlDLE1BQU0sQ0FBQzdoRCxHQUFELEVBQU0yaEQsR0FBTixDQUZWO0FBQUEsWUFHSUcsU0FBUyxFQUhiO0FBSUEsYUFBSyxJQUFJOXRELElBQUksQ0FBUixFQUFXTSxNQUFNdXRELElBQUkzdUQsTUFBMUIsRUFBa0NjLElBQUlNLEdBQUosSUFBV3V0RCxJQUFJN3RELENBQUosQ0FBN0MsRUFBcURBLEdBQXJELEVBQTBEO0FBQ3hELGNBQUkyL0MsRUFBSjtBQUNBLGNBQUksT0FBT2tPLElBQUk3dEQsQ0FBSixDQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzlCMi9DLGlCQUFLa08sSUFBSTd0RCxDQUFKLENBQUw7QUFDRCxXQUZELE1BRU87QUFDTCxnQkFBSSt0RCxRQUFRRixJQUFJN3RELENBQUosRUFBTytFLEtBQVAsQ0FBYSxHQUFiLENBQVo7QUFBQSxnQkFDSW1pQyxTQUFTbkYsUUFBTWdzQixNQUFNLENBQU4sQ0FBTixDQURiOztBQUdBcE8saUJBQUt6WSxPQUFPbkgsTUFBUCxHQUFnQi96QixHQUFyQjtBQUNBLGdCQUFJK2hELE1BQU0sQ0FBTixLQUFZQSxNQUFNLENBQU4sRUFBU3RxRCxXQUFULE9BQTJCLFFBQTNDLEVBQXFEO0FBQ25EazhDLG9CQUFNelksT0FBTyxDQUFQLEVBQVV0WixxQkFBVixHQUFrQ2lDLE1BQXhDO0FBQ0Q7QUFDRjtBQUNEaStCLGlCQUFPOXRELENBQVAsSUFBWTIvQyxFQUFaO0FBQ0Q7O0FBR0QsYUFBS1AsTUFBTCxHQUFjME8sTUFBZDtBQUNBO0FBQ0Q7O0FBRUQ7Ozs7OztBQXRHVztBQUFBO0FBQUEsOEJBMkdIdGtELEVBM0dHLEVBMkdDO0FBQ1YsWUFBSTQ1QixRQUFRLElBQVo7QUFBQSxZQUNJZ00saUJBQWlCLEtBQUtBLGNBQUwsa0JBQW1DNWxDLEVBRHhEO0FBRUEsWUFBSSxLQUFLcXpDLElBQVQsRUFBZTtBQUFFO0FBQVM7QUFDMUIsWUFBSSxLQUFLbVIsUUFBVCxFQUFtQjtBQUNqQixlQUFLblIsSUFBTCxHQUFZLElBQVo7QUFDQTlhLFlBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjcTBCLGNBQWQsRUFDVTl0QixFQURWLENBQ2E4dEIsY0FEYixFQUM2QixVQUFTem1DLENBQVQsRUFBWTtBQUM5QixnQkFBSXk2QixNQUFNMnBCLFdBQU4sS0FBc0IsQ0FBMUIsRUFBNkI7QUFDM0IzcEIsb0JBQU0ycEIsV0FBTixHQUFvQjNwQixNQUFNeGlDLE9BQU4sQ0FBY29zRCxVQUFsQztBQUNBNXBCLG9CQUFNaXFCLFNBQU4sQ0FBZ0IsWUFBVztBQUN6QmpxQixzQkFBTW1xQixLQUFOLENBQVksS0FBWixFQUFtQmp3RCxPQUFPc2pDLFdBQTFCO0FBQ0QsZUFGRDtBQUdELGFBTEQsTUFLTztBQUNMd0Msb0JBQU0ycEIsV0FBTjtBQUNBM3BCLG9CQUFNbXFCLEtBQU4sQ0FBWSxLQUFaLEVBQW1CandELE9BQU9zakMsV0FBMUI7QUFDRDtBQUNILFdBWFQ7QUFZRDs7QUFFRCxhQUFLa0MsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IscUJBQWxCLEVBQ2N1RyxFQURkLENBQ2lCLHFCQURqQixFQUN3QyxVQUFTM1ksQ0FBVCxFQUFZc1YsRUFBWixFQUFnQjtBQUN4Q21sQixnQkFBTTZxQixjQUFOLENBQXFCemtELEVBQXJCO0FBQ2YsU0FIRDs7QUFLQSxhQUFLczVCLFFBQUwsQ0FBY3hoQixFQUFkLENBQWlCLHFCQUFqQixFQUF3QyxVQUFVM1ksQ0FBVixFQUFhc1YsRUFBYixFQUFpQjtBQUNyRG1sQixnQkFBTTZxQixjQUFOLENBQXFCemtELEVBQXJCO0FBQ0gsU0FGRDs7QUFJQSxZQUFHLEtBQUt3ckMsT0FBUixFQUFpQjtBQUNmLGVBQUtBLE9BQUwsQ0FBYTF6QixFQUFiLENBQWdCLHFCQUFoQixFQUF1QyxVQUFVM1ksQ0FBVixFQUFhc1YsRUFBYixFQUFpQjtBQUNwRG1sQixrQkFBTTZxQixjQUFOLENBQXFCemtELEVBQXJCO0FBQ0gsV0FGRDtBQUdEO0FBQ0Y7O0FBRUQ7Ozs7OztBQS9JVztBQUFBO0FBQUEscUNBb0pJQSxFQXBKSixFQW9KUTtBQUNkLFlBQUk0NUIsUUFBUSxJQUFaO0FBQUEsWUFDQ2dNLGlCQUFpQixLQUFLQSxjQUFMLGtCQUFtQzVsQyxFQURyRDs7QUFHQTQ1QixjQUFNaXFCLFNBQU4sQ0FBZ0IsWUFBVztBQUMzQmpxQixnQkFBTW1xQixLQUFOLENBQVksS0FBWjtBQUNBLGNBQUlucUIsTUFBTTRxQixRQUFWLEVBQW9CO0FBQ2xCLGdCQUFJLENBQUM1cUIsTUFBTXlaLElBQVgsRUFBaUI7QUFDZnpaLG9CQUFNc04sT0FBTixDQUFjbG5DLEVBQWQ7QUFDRDtBQUNGLFdBSkQsTUFJTyxJQUFJNDVCLE1BQU15WixJQUFWLEVBQWdCO0FBQ3JCelosa0JBQU04cUIsZUFBTixDQUFzQjllLGNBQXRCO0FBQ0Q7QUFDRixTQVRDO0FBVUo7O0FBRUQ7Ozs7OztBQXBLVztBQUFBO0FBQUEsc0NBeUtLQSxjQXpLTCxFQXlLcUI7QUFDOUIsYUFBS3lOLElBQUwsR0FBWSxLQUFaO0FBQ0E5YSxVQUFFemtDLE1BQUYsRUFBVXlkLEdBQVYsQ0FBY3EwQixjQUFkOztBQUVBOzs7OztBQUtDLGFBQUt0TSxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLGlCQUF0QjtBQUNGOztBQUVEOzs7Ozs7O0FBckxXO0FBQUE7QUFBQSw0QkEyTEw0b0MsVUEzTEssRUEyTE9iLE1BM0xQLEVBMkxlO0FBQ3hCLFlBQUlhLFVBQUosRUFBZ0I7QUFBRSxlQUFLZCxTQUFMO0FBQW1COztBQUVyQyxZQUFJLENBQUMsS0FBS1csUUFBVixFQUFvQjtBQUNsQixjQUFJLEtBQUtmLE9BQVQsRUFBa0I7QUFDaEIsaUJBQUtPLGFBQUwsQ0FBbUIsSUFBbkI7QUFDRDtBQUNELGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxZQUFJLENBQUNGLE1BQUwsRUFBYTtBQUFFQSxtQkFBU2h3RCxPQUFPc2pDLFdBQWhCO0FBQThCOztBQUU3QyxZQUFJMHNCLFVBQVUsS0FBS0csUUFBbkIsRUFBNkI7QUFDM0IsY0FBSUgsVUFBVSxLQUFLYyxXQUFuQixFQUFnQztBQUM5QixnQkFBSSxDQUFDLEtBQUtuQixPQUFWLEVBQW1CO0FBQ2pCLG1CQUFLb0IsVUFBTDtBQUNEO0FBQ0YsV0FKRCxNQUlPO0FBQ0wsZ0JBQUksS0FBS3BCLE9BQVQsRUFBa0I7QUFDaEIsbUJBQUtPLGFBQUwsQ0FBbUIsS0FBbkI7QUFDRDtBQUNGO0FBQ0YsU0FWRCxNQVVPO0FBQ0wsY0FBSSxLQUFLUCxPQUFULEVBQWtCO0FBQ2hCLGlCQUFLTyxhQUFMLENBQW1CLElBQW5CO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7Ozs7OztBQXhOVztBQUFBO0FBQUEsbUNBK05FO0FBQ1gsWUFBSXBxQixRQUFRLElBQVo7QUFBQSxZQUNJa3JCLFVBQVUsS0FBSzF0RCxPQUFMLENBQWEwdEQsT0FEM0I7QUFBQSxZQUVJQyxPQUFPRCxZQUFZLEtBQVosR0FBb0IsV0FBcEIsR0FBa0MsY0FGN0M7QUFBQSxZQUdJRSxhQUFhRixZQUFZLEtBQVosR0FBb0IsUUFBcEIsR0FBK0IsS0FIaEQ7QUFBQSxZQUlJcHdDLE1BQU0sRUFKVjs7QUFNQUEsWUFBSXF3QyxJQUFKLElBQWUsS0FBSzN0RCxPQUFMLENBQWEydEQsSUFBYixDQUFmO0FBQ0Fyd0MsWUFBSW93QyxPQUFKLElBQWUsQ0FBZjtBQUNBcHdDLFlBQUlzd0MsVUFBSixJQUFrQixNQUFsQjtBQUNBLGFBQUt2QixPQUFMLEdBQWUsSUFBZjtBQUNBLGFBQUtucUIsUUFBTCxDQUFjN04sV0FBZCx3QkFBK0N1NUIsVUFBL0MsRUFDYzU1QixRQURkLHFCQUN5QzA1QixPQUR6QyxFQUVjcHdDLEdBRmQsQ0FFa0JBLEdBRmxCO0FBR2E7Ozs7O0FBSGIsU0FRY3FILE9BUmQsd0JBUTJDK29DLE9BUjNDO0FBU0EsYUFBS3hyQixRQUFMLENBQWN4aEIsRUFBZCxDQUFpQixpRkFBakIsRUFBb0csWUFBVztBQUM3RzhoQixnQkFBTWlxQixTQUFOO0FBQ0QsU0FGRDtBQUdEOztBQUVEOzs7Ozs7Ozs7QUF4UFc7QUFBQTtBQUFBLG9DQWdRR29CLEtBaFFILEVBZ1FVO0FBQ25CLFlBQUlILFVBQVUsS0FBSzF0RCxPQUFMLENBQWEwdEQsT0FBM0I7QUFBQSxZQUNJSSxhQUFhSixZQUFZLEtBRDdCO0FBQUEsWUFFSXB3QyxNQUFNLEVBRlY7QUFBQSxZQUdJeXdDLFdBQVcsQ0FBQyxLQUFLdlAsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWSxDQUFaLElBQWlCLEtBQUtBLE1BQUwsQ0FBWSxDQUFaLENBQS9CLEdBQWdELEtBQUt3UCxZQUF0RCxJQUFzRSxLQUFLekIsVUFIMUY7QUFBQSxZQUlJb0IsT0FBT0csYUFBYSxXQUFiLEdBQTJCLGNBSnRDO0FBQUEsWUFLSUYsYUFBYUUsYUFBYSxRQUFiLEdBQXdCLEtBTHpDO0FBQUEsWUFNSUcsY0FBY0osUUFBUSxLQUFSLEdBQWdCLFFBTmxDOztBQVFBdndDLFlBQUlxd0MsSUFBSixJQUFZLENBQVo7O0FBRUFyd0MsWUFBSSxRQUFKLElBQWdCLE1BQWhCO0FBQ0EsWUFBR3V3QyxLQUFILEVBQVU7QUFDUnZ3QyxjQUFJLEtBQUosSUFBYSxDQUFiO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLGNBQUksS0FBSixJQUFheXdDLFFBQWI7QUFDRDs7QUFFRCxhQUFLMUIsT0FBTCxHQUFlLEtBQWY7QUFDQSxhQUFLbnFCLFFBQUwsQ0FBYzdOLFdBQWQscUJBQTRDcTVCLE9BQTVDLEVBQ2MxNUIsUUFEZCx3QkFDNENpNkIsV0FENUMsRUFFYzN3QyxHQUZkLENBRWtCQSxHQUZsQjtBQUdhOzs7OztBQUhiLFNBUWNxSCxPQVJkLDRCQVErQ3NwQyxXQVIvQztBQVNEOztBQUVEOzs7Ozs7O0FBOVJXO0FBQUE7QUFBQSxnQ0FvU0Q5akIsRUFwU0MsRUFvU0c7QUFDWixhQUFLaWpCLFFBQUwsR0FBZ0I5ckIsV0FBV3VDLFVBQVgsQ0FBc0J2dkIsRUFBdEIsQ0FBeUIsS0FBS3RVLE9BQUwsQ0FBYWt1RCxRQUF0QyxDQUFoQjtBQUNBLFlBQUksQ0FBQyxLQUFLZCxRQUFWLEVBQW9CO0FBQ2xCLGNBQUlqakIsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRUE7QUFBTztBQUM5QztBQUNELFlBQUkzSCxRQUFRLElBQVo7QUFBQSxZQUNJMnJCLGVBQWUsS0FBS2xDLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBbUJqL0IscUJBQW5CLEdBQTJDOUMsS0FEOUQ7QUFBQSxZQUVJa2tDLE9BQU8xeEQsT0FBTzBzQixnQkFBUCxDQUF3QixLQUFLNmlDLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FBeEIsQ0FGWDtBQUFBLFlBR0lvQyxRQUFReDZCLFNBQVN1NkIsS0FBSyxjQUFMLENBQVQsRUFBK0IsRUFBL0IsQ0FIWjtBQUFBLFlBSUlFLFFBQVF6NkIsU0FBU3U2QixLQUFLLGVBQUwsQ0FBVCxFQUFnQyxFQUFoQyxDQUpaOztBQU1BLFlBQUksS0FBS2hhLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhOTFDLE1BQWpDLEVBQXlDO0FBQ3ZDLGVBQUswdkQsWUFBTCxHQUFvQixLQUFLNVosT0FBTCxDQUFhLENBQWIsRUFBZ0JwbkIscUJBQWhCLEdBQXdDaUMsTUFBNUQ7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLdTlCLFlBQUw7QUFDRDs7QUFFRCxhQUFLdHFCLFFBQUwsQ0FBYzVrQixHQUFkLENBQWtCO0FBQ2hCLHVCQUFnQjZ3QyxlQUFlRSxLQUFmLEdBQXVCQyxLQUF2QztBQURnQixTQUFsQjs7QUFJQSxZQUFJQyxxQkFBcUIsS0FBS3JzQixRQUFMLENBQWMsQ0FBZCxFQUFpQmxWLHFCQUFqQixHQUF5Q2lDLE1BQXpDLElBQW1ELEtBQUtxOUIsZUFBakY7QUFDQSxZQUFJLEtBQUtwcUIsUUFBTCxDQUFjNWtCLEdBQWQsQ0FBa0IsU0FBbEIsS0FBZ0MsTUFBcEMsRUFBNEM7QUFDMUNpeEMsK0JBQXFCLENBQXJCO0FBQ0Q7QUFDRCxhQUFLakMsZUFBTCxHQUF1QmlDLGtCQUF2QjtBQUNBLGFBQUt0QyxVQUFMLENBQWdCM3VDLEdBQWhCLENBQW9CO0FBQ2xCMlIsa0JBQVFzL0I7QUFEVSxTQUFwQjtBQUdBLGFBQUtoQyxVQUFMLEdBQWtCZ0Msa0JBQWxCOztBQUVBLFlBQUksQ0FBQyxLQUFLbEMsT0FBVixFQUFtQjtBQUNqQixjQUFJLEtBQUtucUIsUUFBTCxDQUFjek4sUUFBZCxDQUF1QixjQUF2QixDQUFKLEVBQTRDO0FBQzFDLGdCQUFJczVCLFdBQVcsQ0FBQyxLQUFLdlAsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWSxDQUFaLElBQWlCLEtBQUt5TixVQUFMLENBQWdCOXNCLE1BQWhCLEdBQXlCL3pCLEdBQXhELEdBQThELEtBQUs0aUQsWUFBcEUsSUFBb0YsS0FBS3pCLFVBQXhHO0FBQ0EsaUJBQUtycUIsUUFBTCxDQUFjNWtCLEdBQWQsQ0FBa0IsS0FBbEIsRUFBeUJ5d0MsUUFBekI7QUFDRDtBQUNGOztBQUVELGFBQUtTLGVBQUwsQ0FBcUJELGtCQUFyQixFQUF5QyxZQUFXO0FBQ2xELGNBQUlwa0IsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRUE7QUFBTztBQUM5QyxTQUZEO0FBR0Q7O0FBRUQ7Ozs7Ozs7QUEvVVc7QUFBQTtBQUFBLHNDQXFWS29pQixVQXJWTCxFQXFWaUJwaUIsRUFyVmpCLEVBcVZxQjtBQUM5QixZQUFJLENBQUMsS0FBS2lqQixRQUFWLEVBQW9CO0FBQ2xCLGNBQUlqakIsTUFBTSxPQUFPQSxFQUFQLEtBQWMsVUFBeEIsRUFBb0M7QUFBRUE7QUFBTyxXQUE3QyxNQUNLO0FBQUUsbUJBQU8sS0FBUDtBQUFlO0FBQ3ZCO0FBQ0QsWUFBSXNrQixPQUFPQyxPQUFPLEtBQUsxdUQsT0FBTCxDQUFhMnVELFNBQXBCLENBQVg7QUFBQSxZQUNJQyxPQUFPRixPQUFPLEtBQUsxdUQsT0FBTCxDQUFhNnVELFlBQXBCLENBRFg7QUFBQSxZQUVJaEMsV0FBVyxLQUFLck8sTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWSxDQUFaLENBQWQsR0FBK0IsS0FBS3BLLE9BQUwsQ0FBYWpWLE1BQWIsR0FBc0IvekIsR0FGcEU7QUFBQSxZQUdJb2lELGNBQWMsS0FBS2hQLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVksQ0FBWixDQUFkLEdBQStCcU8sV0FBVyxLQUFLbUIsWUFIakU7O0FBSUk7QUFDQTtBQUNBdlAsb0JBQVkvaEQsT0FBT2dpRCxXQU52Qjs7QUFRQSxZQUFJLEtBQUsxK0MsT0FBTCxDQUFhMHRELE9BQWIsS0FBeUIsS0FBN0IsRUFBb0M7QUFDbENiLHNCQUFZNEIsSUFBWjtBQUNBakIseUJBQWdCakIsYUFBYWtDLElBQTdCO0FBQ0QsU0FIRCxNQUdPLElBQUksS0FBS3p1RCxPQUFMLENBQWEwdEQsT0FBYixLQUF5QixRQUE3QixFQUF1QztBQUM1Q2Isc0JBQWFwTyxhQUFhOE4sYUFBYXFDLElBQTFCLENBQWI7QUFDQXBCLHlCQUFnQi9PLFlBQVltUSxJQUE1QjtBQUNELFNBSE0sTUFHQTtBQUNMO0FBQ0Q7O0FBRUQsYUFBSy9CLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsYUFBS1csV0FBTCxHQUFtQkEsV0FBbkI7O0FBRUEsWUFBSXJqQixNQUFNLE9BQU9BLEVBQVAsS0FBYyxVQUF4QixFQUFvQztBQUFFQTtBQUFPO0FBQzlDOztBQUVEOzs7Ozs7O0FBbFhXO0FBQUE7QUFBQSxnQ0F3WEQ7QUFDUixhQUFLeWlCLGFBQUwsQ0FBbUIsSUFBbkI7O0FBRUEsYUFBSzFxQixRQUFMLENBQWM3TixXQUFkLENBQTZCLEtBQUtyMEIsT0FBTCxDQUFha3NELFdBQTFDLDZCQUNjNXVDLEdBRGQsQ0FDa0I7QUFDSDJSLGtCQUFRLEVBREw7QUFFSDdqQixlQUFLLEVBRkY7QUFHSHU2QixrQkFBUSxFQUhMO0FBSUgsdUJBQWE7QUFKVixTQURsQixFQU9jeHJCLEdBUGQsQ0FPa0IscUJBUGxCLEVBUWNBLEdBUmQsQ0FRa0IscUJBUmxCO0FBU0EsWUFBSSxLQUFLaTZCLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhOTFDLE1BQWpDLEVBQXlDO0FBQ3ZDLGVBQUs4MUMsT0FBTCxDQUFhajZCLEdBQWIsQ0FBaUIsa0JBQWpCO0FBQ0Q7QUFDRGduQixVQUFFemtDLE1BQUYsRUFBVXlkLEdBQVYsQ0FBYyxLQUFLcTBCLGNBQW5COztBQUVBLFlBQUksS0FBS3dkLFVBQVQsRUFBcUI7QUFDbkIsZUFBSzlwQixRQUFMLENBQWM5RixNQUFkO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsZUFBSzZ2QixVQUFMLENBQWdCNTNCLFdBQWhCLENBQTRCLEtBQUtyMEIsT0FBTCxDQUFhd2hELGNBQXpDLEVBQ2dCbGtDLEdBRGhCLENBQ29CO0FBQ0gyUixvQkFBUTtBQURMLFdBRHBCO0FBSUQ7QUFDRHFTLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBbFpVOztBQUFBO0FBQUE7O0FBcVpiNHBCLFNBQU9uYyxRQUFQLEdBQWtCO0FBQ2hCOzs7Ozs7QUFNQWptQixlQUFXLG1DQVBLO0FBUWhCOzs7Ozs7QUFNQStqQyxhQUFTLEtBZE87QUFlaEI7Ozs7OztBQU1BcG5CLFlBQVEsRUFyQlE7QUFzQmhCOzs7Ozs7QUFNQXdtQixlQUFXLEVBNUJLO0FBNkJoQjs7Ozs7O0FBTUFFLGVBQVcsRUFuQ0s7QUFvQ2hCOzs7Ozs7QUFNQTJCLGVBQVcsQ0ExQ0s7QUEyQ2hCOzs7Ozs7QUFNQUUsa0JBQWMsQ0FqREU7QUFrRGhCOzs7Ozs7QUFNQVgsY0FBVSxRQXhETTtBQXlEaEI7Ozs7OztBQU1BaEMsaUJBQWEsUUEvREc7QUFnRWhCOzs7Ozs7QUFNQTFLLG9CQUFnQixrQkF0RUE7QUF1RWhCOzs7Ozs7QUFNQTRLLGdCQUFZLENBQUM7QUE3RUcsR0FBbEI7O0FBZ0ZBOzs7O0FBSUEsV0FBU3NDLE1BQVQsQ0FBZ0JJLEVBQWhCLEVBQW9CO0FBQ2xCLFdBQU9qN0IsU0FBU24zQixPQUFPMHNCLGdCQUFQLENBQXdCN3NCLFNBQVNxbkIsSUFBakMsRUFBdUMsSUFBdkMsRUFBNkNtckMsUUFBdEQsRUFBZ0UsRUFBaEUsSUFBc0VELEVBQTdFO0FBQ0Q7O0FBRUQ7QUFDQXh0QixhQUFXSSxNQUFYLENBQWtCcXFCLE1BQWxCLEVBQTBCLFFBQTFCO0FBRUMsQ0FoZkEsQ0FnZkN4dUQsTUFoZkQsQ0FBRDtBQ0ZBOzs7Ozs7OztBQUVBLENBQUMsVUFBUzRqQyxDQUFULEVBQVk7O0FBRWI7Ozs7Ozs7QUFGYSxNQVNQNnRCLElBVE87QUFVWDs7Ozs7OztBQU9BLGtCQUFZenBCLE9BQVosRUFBcUJ2bEMsT0FBckIsRUFBOEI7QUFBQTs7QUFDNUIsV0FBS2tpQyxRQUFMLEdBQWdCcUQsT0FBaEI7QUFDQSxXQUFLdmxDLE9BQUwsR0FBZW1oQyxFQUFFcGhDLE1BQUYsQ0FBUyxFQUFULEVBQWFpdkQsS0FBS3BmLFFBQWxCLEVBQTRCLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUE1QixFQUFrRHhiLE9BQWxELENBQWY7O0FBRUEsV0FBS3VpQyxLQUFMO0FBQ0FqQixpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyxNQUFoQztBQUNBUixpQkFBV3dGLFFBQVgsQ0FBb0I1ckIsUUFBcEIsQ0FBNkIsTUFBN0IsRUFBcUM7QUFDbkMsaUJBQVMsTUFEMEI7QUFFbkMsaUJBQVMsTUFGMEI7QUFHbkMsdUJBQWUsTUFIb0I7QUFJbkMsb0JBQVksVUFKdUI7QUFLbkMsc0JBQWMsTUFMcUI7QUFNbkMsc0JBQWM7QUFDZDtBQUNBO0FBUm1DLE9BQXJDO0FBVUQ7O0FBRUQ7Ozs7OztBQW5DVztBQUFBO0FBQUEsOEJBdUNIO0FBQUE7O0FBQ04sWUFBSXNuQixRQUFRLElBQVo7O0FBRUEsYUFBS04sUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsRUFBQyxRQUFRLFNBQVQsRUFBbkI7QUFDQSxhQUFLOGhELFVBQUwsR0FBa0IsS0FBSy9zQixRQUFMLENBQWN2MkIsSUFBZCxPQUF1QixLQUFLM0wsT0FBTCxDQUFha3ZELFNBQXBDLENBQWxCO0FBQ0EsYUFBSzFhLFdBQUwsR0FBbUJyVCwyQkFBeUIsS0FBS2UsUUFBTCxDQUFjLENBQWQsRUFBaUJ0NUIsRUFBMUMsUUFBbkI7O0FBRUEsYUFBS3FtRCxVQUFMLENBQWdCandELElBQWhCLENBQXFCLFlBQVU7QUFDN0IsY0FBSWdrQyxRQUFRN0IsRUFBRSxJQUFGLENBQVo7QUFBQSxjQUNJZ1QsUUFBUW5SLE1BQU1yM0IsSUFBTixDQUFXLEdBQVgsQ0FEWjtBQUFBLGNBRUkrcEMsV0FBVzFTLE1BQU12TyxRQUFOLE1BQWtCK04sTUFBTXhpQyxPQUFOLENBQWNtdkQsZUFBaEMsQ0FGZjtBQUFBLGNBR0lyL0MsT0FBT3FrQyxNQUFNLENBQU4sRUFBU3JrQyxJQUFULENBQWNqVCxLQUFkLENBQW9CLENBQXBCLENBSFg7QUFBQSxjQUlJaTNDLFNBQVNLLE1BQU0sQ0FBTixFQUFTdnJDLEVBQVQsR0FBY3VyQyxNQUFNLENBQU4sRUFBU3ZyQyxFQUF2QixHQUErQmtILElBQS9CLFdBSmI7QUFBQSxjQUtJMGtDLGNBQWNyVCxRQUFNcnhCLElBQU4sQ0FMbEI7O0FBT0FrekIsZ0JBQU03MUIsSUFBTixDQUFXLEVBQUMsUUFBUSxjQUFULEVBQVg7O0FBRUFnbkMsZ0JBQU1obkMsSUFBTixDQUFXO0FBQ1Qsb0JBQVEsS0FEQztBQUVULDZCQUFpQjJDLElBRlI7QUFHVCw2QkFBaUI0bEMsUUFIUjtBQUlULGtCQUFNNUI7QUFKRyxXQUFYOztBQU9BVSxzQkFBWXJuQyxJQUFaLENBQWlCO0FBQ2Ysb0JBQVEsVUFETztBQUVmLDJCQUFlLENBQUN1b0MsUUFGRDtBQUdmLCtCQUFtQjVCO0FBSEosV0FBakI7O0FBTUEsY0FBRzRCLFlBQVlsVCxNQUFNeGlDLE9BQU4sQ0FBYzY1QyxTQUE3QixFQUF1QztBQUNyQzFZLGNBQUV6a0MsTUFBRixFQUFVOG5CLElBQVYsQ0FBZSxZQUFXO0FBQ3hCMmMsZ0JBQUUsWUFBRixFQUFnQjdQLE9BQWhCLENBQXdCLEVBQUVuTixXQUFXNmUsTUFBTTdELE1BQU4sR0FBZS96QixHQUE1QixFQUF4QixFQUEyRG8zQixNQUFNeGlDLE9BQU4sQ0FBY3MwQyxtQkFBekUsRUFBOEYsWUFBTTtBQUNsR0gsc0JBQU16dkIsS0FBTjtBQUNELGVBRkQ7QUFHRCxhQUpEO0FBS0Q7QUFDRixTQTlCRDtBQStCQSxZQUFHLEtBQUsxa0IsT0FBTCxDQUFhb3ZELFdBQWhCLEVBQTZCO0FBQzNCLGNBQUl6TixVQUFVLEtBQUtuTixXQUFMLENBQWlCN29DLElBQWpCLENBQXNCLEtBQXRCLENBQWQ7O0FBRUEsY0FBSWcyQyxRQUFRcmpELE1BQVosRUFBb0I7QUFDbEJnakMsdUJBQVd3SyxjQUFYLENBQTBCNlYsT0FBMUIsRUFBbUMsS0FBSzBOLFVBQUwsQ0FBZ0I1dUIsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBbkM7QUFDRCxXQUZELE1BRU87QUFDTCxpQkFBSzR1QixVQUFMO0FBQ0Q7QUFDRjs7QUFFQTtBQUNELGFBQUtuYixjQUFMLEdBQXNCLFlBQU07QUFDMUIsY0FBSTVOLFNBQVM1cEMsT0FBT3FULFFBQVAsQ0FBZ0JELElBQTdCO0FBQ0E7QUFDQSxjQUFHdzJCLE9BQU9ob0MsTUFBVixFQUFrQjtBQUNoQixnQkFBSTYxQyxRQUFRLE9BQUtqUyxRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixhQUFXMjZCLE1BQVgsR0FBa0IsSUFBckMsQ0FBWjtBQUNBLGdCQUFJNk4sTUFBTTcxQyxNQUFWLEVBQWtCO0FBQ2hCLHFCQUFLZ3hELFNBQUwsQ0FBZW51QixFQUFFbUYsTUFBRixDQUFmLEVBQTBCLElBQTFCOztBQUVBO0FBQ0Esa0JBQUksT0FBS3RtQyxPQUFMLENBQWFxMEMsY0FBakIsRUFBaUM7QUFDL0Isb0JBQUlsVixTQUFTLE9BQUsrQyxRQUFMLENBQWMvQyxNQUFkLEVBQWI7QUFDQWdDLGtCQUFFLFlBQUYsRUFBZ0I3UCxPQUFoQixDQUF3QixFQUFFbk4sV0FBV2diLE9BQU8vekIsR0FBcEIsRUFBeEIsRUFBbUQsT0FBS3BMLE9BQUwsQ0FBYXMwQyxtQkFBaEU7QUFDRDs7QUFFRDs7OztBQUlDLHFCQUFLcFMsUUFBTCxDQUFjdmQsT0FBZCxDQUFzQixrQkFBdEIsRUFBMEMsQ0FBQ3d2QixLQUFELEVBQVFoVCxFQUFFbUYsTUFBRixDQUFSLENBQTFDO0FBQ0Q7QUFDRjtBQUNGLFNBckJGOztBQXVCQTtBQUNBLFlBQUksS0FBS3RtQyxPQUFMLENBQWF1MEMsUUFBakIsRUFBMkI7QUFDekIsZUFBS0wsY0FBTDtBQUNEOztBQUVELGFBQUtwRSxPQUFMO0FBQ0Q7O0FBRUQ7Ozs7O0FBdkhXO0FBQUE7QUFBQSxnQ0EySEQ7QUFDUixhQUFLeWYsY0FBTDtBQUNBLGFBQUtDLGdCQUFMO0FBQ0EsYUFBS0MsbUJBQUwsR0FBMkIsSUFBM0I7O0FBRUEsWUFBSSxLQUFLenZELE9BQUwsQ0FBYW92RCxXQUFqQixFQUE4QjtBQUM1QixlQUFLSyxtQkFBTCxHQUEyQixLQUFLSixVQUFMLENBQWdCNXVCLElBQWhCLENBQXFCLElBQXJCLENBQTNCOztBQUVBVSxZQUFFemtDLE1BQUYsRUFBVWdrQixFQUFWLENBQWEsdUJBQWIsRUFBc0MsS0FBSyt1QyxtQkFBM0M7QUFDRDs7QUFFRCxZQUFHLEtBQUt6dkQsT0FBTCxDQUFhdTBDLFFBQWhCLEVBQTBCO0FBQ3hCcFQsWUFBRXprQyxNQUFGLEVBQVVna0IsRUFBVixDQUFhLFVBQWIsRUFBeUIsS0FBS3d6QixjQUE5QjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBM0lXO0FBQUE7QUFBQSx5Q0ErSVE7QUFDakIsWUFBSTFSLFFBQVEsSUFBWjs7QUFFQSxhQUFLTixRQUFMLENBQ0cvbkIsR0FESCxDQUNPLGVBRFAsRUFFR3VHLEVBRkgsQ0FFTSxlQUZOLFFBRTJCLEtBQUsxZ0IsT0FBTCxDQUFha3ZELFNBRnhDLEVBRXFELFVBQVNubkQsQ0FBVCxFQUFXO0FBQzVEQSxZQUFFOGEsY0FBRjtBQUNBOWEsWUFBRSthLGVBQUY7QUFDQTBmLGdCQUFNa3RCLGdCQUFOLENBQXVCdnVCLEVBQUUsSUFBRixDQUF2QjtBQUNELFNBTkg7QUFPRDs7QUFFRDs7Ozs7QUEzSlc7QUFBQTtBQUFBLHVDQStKTTtBQUNmLFlBQUlxQixRQUFRLElBQVo7O0FBRUEsYUFBS3lzQixVQUFMLENBQWdCOTBDLEdBQWhCLENBQW9CLGlCQUFwQixFQUF1Q3VHLEVBQXZDLENBQTBDLGlCQUExQyxFQUE2RCxVQUFTM1ksQ0FBVCxFQUFXO0FBQ3RFLGNBQUlBLEVBQUV3YixLQUFGLEtBQVksQ0FBaEIsRUFBbUI7O0FBR25CLGNBQUkyZSxXQUFXZixFQUFFLElBQUYsQ0FBZjtBQUFBLGNBQ0UwVSxZQUFZM1QsU0FBU2ozQixNQUFULENBQWdCLElBQWhCLEVBQXNCc0ssUUFBdEIsQ0FBK0IsSUFBL0IsQ0FEZDtBQUFBLGNBRUV1Z0MsWUFGRjtBQUFBLGNBR0VDLFlBSEY7O0FBS0FGLG9CQUFVNzJDLElBQVYsQ0FBZSxVQUFTSSxDQUFULEVBQVk7QUFDekIsZ0JBQUkraEMsRUFBRSxJQUFGLEVBQVE3c0IsRUFBUixDQUFXNHRCLFFBQVgsQ0FBSixFQUEwQjtBQUN4QixrQkFBSU0sTUFBTXhpQyxPQUFOLENBQWMydkQsVUFBbEIsRUFBOEI7QUFDNUI3WiwrQkFBZTEyQyxNQUFNLENBQU4sR0FBVXkyQyxVQUFVcDJDLElBQVYsRUFBVixHQUE2Qm8yQyxVQUFVcjJDLEVBQVYsQ0FBYUosSUFBRSxDQUFmLENBQTVDO0FBQ0EyMkMsK0JBQWUzMkMsTUFBTXkyQyxVQUFVdjNDLE1BQVYsR0FBa0IsQ0FBeEIsR0FBNEJ1M0MsVUFBVXQyQyxLQUFWLEVBQTVCLEdBQWdEczJDLFVBQVVyMkMsRUFBVixDQUFhSixJQUFFLENBQWYsQ0FBL0Q7QUFDRCxlQUhELE1BR087QUFDTDAyQywrQkFBZUQsVUFBVXIyQyxFQUFWLENBQWFxQixLQUFLa3JCLEdBQUwsQ0FBUyxDQUFULEVBQVkzc0IsSUFBRSxDQUFkLENBQWIsQ0FBZjtBQUNBMjJDLCtCQUFlRixVQUFVcjJDLEVBQVYsQ0FBYXFCLEtBQUttMUMsR0FBTCxDQUFTNTJDLElBQUUsQ0FBWCxFQUFjeTJDLFVBQVV2M0MsTUFBVixHQUFpQixDQUEvQixDQUFiLENBQWY7QUFDRDtBQUNEO0FBQ0Q7QUFDRixXQVhEOztBQWFBO0FBQ0FnakMscUJBQVd3RixRQUFYLENBQW9CTSxTQUFwQixDQUE4QnIvQixDQUE5QixFQUFpQyxNQUFqQyxFQUF5QztBQUN2Q3cxQixrQkFBTSxnQkFBVztBQUNmMkUsdUJBQVN2MkIsSUFBVCxDQUFjLGNBQWQsRUFBOEIrWSxLQUE5QjtBQUNBOGQsb0JBQU1rdEIsZ0JBQU4sQ0FBdUJ4dEIsUUFBdkI7QUFDRCxhQUpzQztBQUt2Q3lTLHNCQUFVLG9CQUFXO0FBQ25CbUIsMkJBQWFucUMsSUFBYixDQUFrQixjQUFsQixFQUFrQytZLEtBQWxDO0FBQ0E4ZCxvQkFBTWt0QixnQkFBTixDQUF1QjVaLFlBQXZCO0FBQ0QsYUFSc0M7QUFTdkNyZ0Msa0JBQU0sZ0JBQVc7QUFDZnNnQywyQkFBYXBxQyxJQUFiLENBQWtCLGNBQWxCLEVBQWtDK1ksS0FBbEM7QUFDQThkLG9CQUFNa3RCLGdCQUFOLENBQXVCM1osWUFBdkI7QUFDRCxhQVpzQztBQWF2Q3BPLHFCQUFTLG1CQUFXO0FBQ2xCNS9CLGdCQUFFK2EsZUFBRjtBQUNBL2EsZ0JBQUU4YSxjQUFGO0FBQ0Q7QUFoQnNDLFdBQXpDO0FBa0JELFNBekNEO0FBMENEOztBQUVEOzs7Ozs7OztBQTlNVztBQUFBO0FBQUEsdUNBcU5NcXNCLE9Bck5OLEVBcU5lMGdCLGNBck5mLEVBcU4rQjs7QUFFeEM7OztBQUdBLFlBQUkxZ0IsUUFBUXphLFFBQVIsTUFBb0IsS0FBS3owQixPQUFMLENBQWFtdkQsZUFBakMsQ0FBSixFQUF5RDtBQUNyRCxjQUFHLEtBQUtudkQsT0FBTCxDQUFhNnZELGNBQWhCLEVBQWdDO0FBQzVCLGlCQUFLQyxZQUFMLENBQWtCNWdCLE9BQWxCOztBQUVEOzs7O0FBSUMsaUJBQUtoTixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLGtCQUF0QixFQUEwQyxDQUFDdXFCLE9BQUQsQ0FBMUM7QUFDSDtBQUNEO0FBQ0g7O0FBRUQsWUFBSTZnQixVQUFVLEtBQUs3dEIsUUFBTCxDQUNSdjJCLElBRFEsT0FDQyxLQUFLM0wsT0FBTCxDQUFha3ZELFNBRGQsU0FDMkIsS0FBS2x2RCxPQUFMLENBQWFtdkQsZUFEeEMsQ0FBZDtBQUFBLFlBRU1hLFdBQVc5Z0IsUUFBUXZqQyxJQUFSLENBQWEsY0FBYixDQUZqQjtBQUFBLFlBR01tRSxPQUFPa2dELFNBQVMsQ0FBVCxFQUFZbGdELElBSHpCO0FBQUEsWUFJTW1nRCxpQkFBaUIsS0FBS3piLFdBQUwsQ0FBaUI3b0MsSUFBakIsQ0FBc0JtRSxJQUF0QixDQUp2Qjs7QUFNQTtBQUNBLGFBQUtnZ0QsWUFBTCxDQUFrQkMsT0FBbEI7O0FBRUE7QUFDQSxhQUFLRyxRQUFMLENBQWNoaEIsT0FBZDs7QUFFQTtBQUNBLFlBQUksS0FBS2x2QyxPQUFMLENBQWF1MEMsUUFBYixJQUF5QixDQUFDcWIsY0FBOUIsRUFBOEM7QUFDNUMsY0FBSXRwQixTQUFTNEksUUFBUXZqQyxJQUFSLENBQWEsR0FBYixFQUFrQndCLElBQWxCLENBQXVCLE1BQXZCLENBQWI7O0FBRUEsY0FBSSxLQUFLbk4sT0FBTCxDQUFhNjBDLGFBQWpCLEVBQWdDO0FBQzlCQyxvQkFBUUMsU0FBUixDQUFrQixFQUFsQixFQUFzQixFQUF0QixFQUEwQnpPLE1BQTFCO0FBQ0QsV0FGRCxNQUVPO0FBQ0x3TyxvQkFBUUUsWUFBUixDQUFxQixFQUFyQixFQUF5QixFQUF6QixFQUE2QjFPLE1BQTdCO0FBQ0Q7QUFDRjs7QUFFRDs7OztBQUlBLGFBQUtwRSxRQUFMLENBQWN2ZCxPQUFkLENBQXNCLGdCQUF0QixFQUF3QyxDQUFDdXFCLE9BQUQsRUFBVStnQixjQUFWLENBQXhDOztBQUVBO0FBQ0FBLHVCQUFldGtELElBQWYsQ0FBb0IsZUFBcEIsRUFBcUNnWixPQUFyQyxDQUE2QyxxQkFBN0M7QUFDRDs7QUFFRDs7Ozs7O0FBeFFXO0FBQUE7QUFBQSwrQkE2UUZ1cUIsT0E3UUUsRUE2UU87QUFDZCxZQUFJOGdCLFdBQVc5Z0IsUUFBUXZqQyxJQUFSLENBQWEsY0FBYixDQUFmO0FBQUEsWUFDSW1FLE9BQU9rZ0QsU0FBUyxDQUFULEVBQVlsZ0QsSUFEdkI7QUFBQSxZQUVJbWdELGlCQUFpQixLQUFLemIsV0FBTCxDQUFpQjdvQyxJQUFqQixDQUFzQm1FLElBQXRCLENBRnJCOztBQUlBby9CLGdCQUFRbGIsUUFBUixNQUFvQixLQUFLaDBCLE9BQUwsQ0FBYW12RCxlQUFqQzs7QUFFQWEsaUJBQVM3aUQsSUFBVCxDQUFjLEVBQUMsaUJBQWlCLE1BQWxCLEVBQWQ7O0FBRUE4aUQsdUJBQ0dqOEIsUUFESCxNQUNlLEtBQUtoMEIsT0FBTCxDQUFhbXdELGdCQUQ1QixFQUVHaGpELElBRkgsQ0FFUSxFQUFDLGVBQWUsT0FBaEIsRUFGUjtBQUdIOztBQUVEOzs7Ozs7QUEzUlc7QUFBQTtBQUFBLG1DQWdTRStoQyxPQWhTRixFQWdTVztBQUNwQixZQUFJa2hCLGlCQUFpQmxoQixRQUNsQjdhLFdBRGtCLE1BQ0gsS0FBS3IwQixPQUFMLENBQWFtdkQsZUFEVixFQUVsQnhqRCxJQUZrQixDQUViLGNBRmEsRUFHbEJ3QixJQUhrQixDQUdiLEVBQUUsaUJBQWlCLE9BQW5CLEVBSGEsQ0FBckI7O0FBS0FnMEIsZ0JBQU1pdkIsZUFBZWpqRCxJQUFmLENBQW9CLGVBQXBCLENBQU4sRUFDR2tuQixXQURILE1BQ2tCLEtBQUtyMEIsT0FBTCxDQUFhbXdELGdCQUQvQixFQUVHaGpELElBRkgsQ0FFUSxFQUFFLGVBQWUsTUFBakIsRUFGUjtBQUdEOztBQUVEOzs7Ozs7O0FBM1NXO0FBQUE7QUFBQSxnQ0FpVERoTyxJQWpUQyxFQWlUS3l3RCxjQWpUTCxFQWlUcUI7QUFDOUIsWUFBSVMsS0FBSjs7QUFFQSxZQUFJLFFBQU9seEQsSUFBUCx5Q0FBT0EsSUFBUCxPQUFnQixRQUFwQixFQUE4QjtBQUM1Qmt4RCxrQkFBUWx4RCxLQUFLLENBQUwsRUFBUXlKLEVBQWhCO0FBQ0QsU0FGRCxNQUVPO0FBQ0x5bkQsa0JBQVFseEQsSUFBUjtBQUNEOztBQUVELFlBQUlreEQsTUFBTXJ6RCxPQUFOLENBQWMsR0FBZCxJQUFxQixDQUF6QixFQUE0QjtBQUMxQnF6RCx3QkFBWUEsS0FBWjtBQUNEOztBQUVELFlBQUluaEIsVUFBVSxLQUFLK2YsVUFBTCxDQUFnQnRqRCxJQUFoQixjQUFnQzBrRCxLQUFoQyxTQUEyQ3BsRCxNQUEzQyxPQUFzRCxLQUFLakwsT0FBTCxDQUFha3ZELFNBQW5FLENBQWQ7O0FBRUEsYUFBS1EsZ0JBQUwsQ0FBc0J4Z0IsT0FBdEIsRUFBK0IwZ0IsY0FBL0I7QUFDRDtBQWpVVTtBQUFBOztBQWtVWDs7Ozs7Ozs7QUFsVVcsbUNBMFVFO0FBQ1gsWUFBSTdqQyxNQUFNLENBQVY7QUFBQSxZQUNJeVcsUUFBUSxJQURaLENBRFcsQ0FFTzs7QUFFbEIsYUFBS2dTLFdBQUwsQ0FDRzdvQyxJQURILE9BQ1ksS0FBSzNMLE9BQUwsQ0FBYXN3RCxVQUR6QixFQUVHaHpDLEdBRkgsQ0FFTyxRQUZQLEVBRWlCLEVBRmpCLEVBR0d0ZSxJQUhILENBR1EsWUFBVzs7QUFFZixjQUFJdXhELFFBQVFwdkIsRUFBRSxJQUFGLENBQVo7QUFBQSxjQUNJdVUsV0FBVzZhLE1BQU05N0IsUUFBTixNQUFrQitOLE1BQU14aUMsT0FBTixDQUFjbXdELGdCQUFoQyxDQURmLENBRmUsQ0FHcUQ7O0FBRXBFLGNBQUksQ0FBQ3phLFFBQUwsRUFBZTtBQUNiNmEsa0JBQU1qekMsR0FBTixDQUFVLEVBQUMsY0FBYyxRQUFmLEVBQXlCLFdBQVcsT0FBcEMsRUFBVjtBQUNEOztBQUVELGNBQUkvSyxPQUFPLEtBQUt5YSxxQkFBTCxHQUE2QmlDLE1BQXhDOztBQUVBLGNBQUksQ0FBQ3ltQixRQUFMLEVBQWU7QUFDYjZhLGtCQUFNanpDLEdBQU4sQ0FBVTtBQUNSLDRCQUFjLEVBRE47QUFFUix5QkFBVztBQUZILGFBQVY7QUFJRDs7QUFFRHlPLGdCQUFNeFosT0FBT3daLEdBQVAsR0FBYXhaLElBQWIsR0FBb0J3WixHQUExQjtBQUNELFNBdEJILEVBdUJHek8sR0F2QkgsQ0F1Qk8sUUF2QlAsRUF1Qm9CeU8sR0F2QnBCO0FBd0JEOztBQUVEOzs7OztBQXhXVztBQUFBO0FBQUEsZ0NBNFdEO0FBQ1IsYUFBS21XLFFBQUwsQ0FDR3YyQixJQURILE9BQ1ksS0FBSzNMLE9BQUwsQ0FBYWt2RCxTQUR6QixFQUVHLzBDLEdBRkgsQ0FFTyxVQUZQLEVBRW1CdVQsSUFGbkIsR0FFMEI5dEIsR0FGMUIsR0FHRytMLElBSEgsT0FHWSxLQUFLM0wsT0FBTCxDQUFhc3dELFVBSHpCLEVBSUc1aUMsSUFKSDs7QUFNQSxZQUFJLEtBQUsxdEIsT0FBTCxDQUFhb3ZELFdBQWpCLEVBQThCO0FBQzVCLGNBQUksS0FBS0ssbUJBQUwsSUFBNEIsSUFBaEMsRUFBc0M7QUFDbkN0dUIsY0FBRXprQyxNQUFGLEVBQVV5ZCxHQUFWLENBQWMsdUJBQWQsRUFBdUMsS0FBS3MxQyxtQkFBNUM7QUFDRjtBQUNGOztBQUVELFlBQUksS0FBS3p2RCxPQUFMLENBQWF1MEMsUUFBakIsRUFBMkI7QUFDekJwVCxZQUFFemtDLE1BQUYsRUFBVXlkLEdBQVYsQ0FBYyxVQUFkLEVBQTBCLEtBQUsrNUIsY0FBL0I7QUFDRDs7QUFFRDVTLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBOVhVOztBQUFBO0FBQUE7O0FBaVliNnNCLE9BQUtwZixRQUFMLEdBQWdCO0FBQ2Q7Ozs7OztBQU1BMkUsY0FBVSxLQVBJOztBQVNkOzs7Ozs7QUFNQUYsb0JBQWdCLEtBZkY7O0FBaUJkOzs7Ozs7QUFNQUMseUJBQXFCLEdBdkJQOztBQXlCZDs7Ozs7O0FBTUFPLG1CQUFlLEtBL0JEOztBQWlDZDs7Ozs7OztBQU9BZ0YsZUFBVyxLQXhDRzs7QUEwQ2Q7Ozs7OztBQU1BOFYsZ0JBQVksSUFoREU7O0FBa0RkOzs7Ozs7QUFNQVAsaUJBQWEsS0F4REM7O0FBMERkOzs7Ozs7QUFNQVMsb0JBQWdCLEtBaEVGOztBQWtFZDs7Ozs7O0FBTUFYLGVBQVcsWUF4RUc7O0FBMEVkOzs7Ozs7QUFNQUMscUJBQWlCLFdBaEZIOztBQWtGZDs7Ozs7O0FBTUFtQixnQkFBWSxZQXhGRTs7QUEwRmQ7Ozs7OztBQU1BSCxzQkFBa0I7QUFoR0osR0FBaEI7O0FBbUdBO0FBQ0E3dUIsYUFBV0ksTUFBWCxDQUFrQnN0QixJQUFsQixFQUF3QixNQUF4QjtBQUVDLENBdmVBLENBdWVDenhELE1BdmVELENBQUQ7QUNGQTs7Ozs7O0FBRUEsQ0FBQyxVQUFTNGpDLENBQVQsRUFBWTs7QUFFYjs7Ozs7OztBQUZhLE1BU1BxdkIsT0FUTztBQVVYOzs7Ozs7O0FBT0EscUJBQVlqckIsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFlbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYXl3RCxRQUFRNWdCLFFBQXJCLEVBQStCckssUUFBUS9wQixJQUFSLEVBQS9CLEVBQStDeGIsT0FBL0MsQ0FBZjtBQUNBLFdBQUt1TCxTQUFMLEdBQWlCLEVBQWpCOztBQUVBLFdBQUtnM0IsS0FBTDtBQUNBLFdBQUt1TixPQUFMOztBQUVBeE8saUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsU0FBaEM7QUFDRDs7QUFFRDs7Ozs7OztBQTVCVztBQUFBO0FBQUEsOEJBaUNIO0FBQ04sWUFBSTcxQixLQUFKO0FBQ0E7QUFDQSxZQUFJLEtBQUtqTSxPQUFMLENBQWFzeEIsT0FBakIsRUFBMEI7QUFDeEJybEIsa0JBQVEsS0FBS2pNLE9BQUwsQ0FBYXN4QixPQUFiLENBQXFCbnRCLEtBQXJCLENBQTJCLEdBQTNCLENBQVI7O0FBRUEsZUFBSytnRCxXQUFMLEdBQW1CajVDLE1BQU0sQ0FBTixDQUFuQjtBQUNBLGVBQUtrNUMsWUFBTCxHQUFvQmw1QyxNQUFNLENBQU4sS0FBWSxJQUFoQztBQUNEO0FBQ0Q7QUFOQSxhQU9LO0FBQ0hBLG9CQUFRLEtBQUtpMkIsUUFBTCxDQUFjMW1CLElBQWQsQ0FBbUIsU0FBbkIsQ0FBUjtBQUNBO0FBQ0EsaUJBQUtqUSxTQUFMLEdBQWlCVSxNQUFNLENBQU4sTUFBYSxHQUFiLEdBQW1CQSxNQUFNcFAsS0FBTixDQUFZLENBQVosQ0FBbkIsR0FBb0NvUCxLQUFyRDtBQUNEOztBQUVEO0FBQ0EsWUFBSXJELEtBQUssS0FBS3M1QixRQUFMLENBQWMsQ0FBZCxFQUFpQnQ1QixFQUExQjtBQUNBdTRCLDJCQUFpQnY0QixFQUFqQix5QkFBdUNBLEVBQXZDLDBCQUE4REEsRUFBOUQsU0FDR3VFLElBREgsQ0FDUSxlQURSLEVBQ3lCdkUsRUFEekI7QUFFQTtBQUNBLGFBQUtzNUIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsZUFBbkIsRUFBb0MsS0FBSyswQixRQUFMLENBQWM1dEIsRUFBZCxDQUFpQixTQUFqQixJQUE4QixLQUE5QixHQUFzQyxJQUExRTtBQUNEOztBQUVEOzs7Ozs7QUF6RFc7QUFBQTtBQUFBLGdDQThERDtBQUNSLGFBQUs0dEIsUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsbUJBQWxCLEVBQXVDdUcsRUFBdkMsQ0FBMEMsbUJBQTFDLEVBQStELEtBQUtpTixNQUFMLENBQVk4UyxJQUFaLENBQWlCLElBQWpCLENBQS9EO0FBQ0Q7O0FBRUQ7Ozs7Ozs7QUFsRVc7QUFBQTtBQUFBLCtCQXdFRjtBQUNQLGFBQU0sS0FBS3pnQyxPQUFMLENBQWFzeEIsT0FBYixHQUF1QixnQkFBdkIsR0FBMEMsY0FBaEQ7QUFDRDtBQTFFVTtBQUFBO0FBQUEscUNBNEVJO0FBQ2IsYUFBSzRRLFFBQUwsQ0FBYzVOLFdBQWQsQ0FBMEIsS0FBSy9vQixTQUEvQjs7QUFFQSxZQUFJMHdDLE9BQU8sS0FBSy9aLFFBQUwsQ0FBY3pOLFFBQWQsQ0FBdUIsS0FBS2xwQixTQUE1QixDQUFYO0FBQ0EsWUFBSTB3QyxJQUFKLEVBQVU7QUFDUjs7OztBQUlBLGVBQUsvWixRQUFMLENBQWN2ZCxPQUFkLENBQXNCLGVBQXRCO0FBQ0QsU0FORCxNQU9LO0FBQ0g7Ozs7QUFJQSxlQUFLdWQsUUFBTCxDQUFjdmQsT0FBZCxDQUFzQixnQkFBdEI7QUFDRDs7QUFFRCxhQUFLOHJDLFdBQUwsQ0FBaUJ4VSxJQUFqQjtBQUNBLGFBQUsvWixRQUFMLENBQWN2MkIsSUFBZCxDQUFtQixlQUFuQixFQUFvQ2daLE9BQXBDLENBQTRDLHFCQUE1QztBQUNEO0FBakdVO0FBQUE7QUFBQSx1Q0FtR007QUFDZixZQUFJNmQsUUFBUSxJQUFaOztBQUVBLFlBQUksS0FBS04sUUFBTCxDQUFjNXRCLEVBQWQsQ0FBaUIsU0FBakIsQ0FBSixFQUFpQztBQUMvQmd0QixxQkFBVzJJLE1BQVgsQ0FBa0JDLFNBQWxCLENBQTRCLEtBQUtoSSxRQUFqQyxFQUEyQyxLQUFLZ2pCLFdBQWhELEVBQTZELFlBQVc7QUFDdEUxaUIsa0JBQU1pdUIsV0FBTixDQUFrQixJQUFsQjtBQUNBLGlCQUFLOXJDLE9BQUwsQ0FBYSxlQUFiO0FBQ0EsaUJBQUtoWixJQUFMLENBQVUsZUFBVixFQUEyQmdaLE9BQTNCLENBQW1DLHFCQUFuQztBQUNELFdBSkQ7QUFLRCxTQU5ELE1BT0s7QUFDSDJjLHFCQUFXMkksTUFBWCxDQUFrQkcsVUFBbEIsQ0FBNkIsS0FBS2xJLFFBQWxDLEVBQTRDLEtBQUtpakIsWUFBakQsRUFBK0QsWUFBVztBQUN4RTNpQixrQkFBTWl1QixXQUFOLENBQWtCLEtBQWxCO0FBQ0EsaUJBQUs5ckMsT0FBTCxDQUFhLGdCQUFiO0FBQ0EsaUJBQUtoWixJQUFMLENBQVUsZUFBVixFQUEyQmdaLE9BQTNCLENBQW1DLHFCQUFuQztBQUNELFdBSkQ7QUFLRDtBQUNGO0FBcEhVO0FBQUE7QUFBQSxrQ0FzSENzM0IsSUF0SEQsRUFzSE87QUFDaEIsYUFBSy9aLFFBQUwsQ0FBYy8wQixJQUFkLENBQW1CLGVBQW5CLEVBQW9DOHVDLE9BQU8sSUFBUCxHQUFjLEtBQWxEO0FBQ0Q7O0FBRUQ7Ozs7O0FBMUhXO0FBQUE7QUFBQSxnQ0E4SEQ7QUFDUixhQUFLL1osUUFBTCxDQUFjL25CLEdBQWQsQ0FBa0IsYUFBbEI7QUFDQW1uQixtQkFBV2EsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDtBQWpJVTs7QUFBQTtBQUFBOztBQW9JYnF1QixVQUFRNWdCLFFBQVIsR0FBbUI7QUFDakI7Ozs7OztBQU1BdGUsYUFBUztBQVBRLEdBQW5COztBQVVBO0FBQ0FnUSxhQUFXSSxNQUFYLENBQWtCOHVCLE9BQWxCLEVBQTJCLFNBQTNCO0FBRUMsQ0FqSkEsQ0FpSkNqekQsTUFqSkQsQ0FBRDtBQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViOzs7Ozs7OztBQUZhLE1BVVB1dkIsT0FWTztBQVdYOzs7Ozs7O0FBT0EscUJBQVluckIsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JxRCxPQUFoQjtBQUNBLFdBQUt2bEMsT0FBTCxHQUFlbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYTJ3RCxRQUFROWdCLFFBQXJCLEVBQStCLEtBQUsxTixRQUFMLENBQWMxbUIsSUFBZCxFQUEvQixFQUFxRHhiLE9BQXJELENBQWY7O0FBRUEsV0FBSzAxQyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsV0FBS2liLE9BQUwsR0FBZSxLQUFmO0FBQ0EsV0FBS3B1QixLQUFMOztBQUVBakIsaUJBQVdRLGNBQVgsQ0FBMEIsSUFBMUIsRUFBZ0MsU0FBaEM7QUFDRDs7QUFFRDs7Ozs7O0FBN0JXO0FBQUE7QUFBQSw4QkFpQ0g7QUFDTixZQUFJOHVCLFNBQVMsS0FBSzF1QixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixrQkFBbkIsS0FBMENtMEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixTQUExQixDQUF2RDs7QUFFQSxhQUFLamlDLE9BQUwsQ0FBYTI0QyxhQUFiLEdBQTZCLEtBQUszNEMsT0FBTCxDQUFhMjRDLGFBQWIsSUFBOEIsS0FBS2tZLGlCQUFMLENBQXVCLEtBQUszdUIsUUFBNUIsQ0FBM0Q7QUFDQSxhQUFLbGlDLE9BQUwsQ0FBYTh3RCxPQUFiLEdBQXVCLEtBQUs5d0QsT0FBTCxDQUFhOHdELE9BQWIsSUFBd0IsS0FBSzV1QixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixPQUFuQixDQUEvQztBQUNBLGFBQUs0akQsUUFBTCxHQUFnQixLQUFLL3dELE9BQUwsQ0FBYSt3RCxRQUFiLEdBQXdCNXZCLEVBQUUsS0FBS25oQyxPQUFMLENBQWErd0QsUUFBZixDQUF4QixHQUFtRCxLQUFLQyxjQUFMLENBQW9CSixNQUFwQixDQUFuRTs7QUFFQSxZQUFJLEtBQUs1d0QsT0FBTCxDQUFhaXhELFNBQWpCLEVBQTRCO0FBQzFCLGVBQUtGLFFBQUwsQ0FBYzlvQyxRQUFkLENBQXVCMXJCLFNBQVNxbkIsSUFBaEMsRUFDR29ELElBREgsQ0FDUSxLQUFLaG5CLE9BQUwsQ0FBYTh3RCxPQURyQixFQUVHcGpDLElBRkg7QUFHRCxTQUpELE1BSU87QUFDTCxlQUFLcWpDLFFBQUwsQ0FBYzlvQyxRQUFkLENBQXVCMXJCLFNBQVNxbkIsSUFBaEMsRUFDR3ZoQixJQURILENBQ1EsS0FBS3JDLE9BQUwsQ0FBYTh3RCxPQURyQixFQUVHcGpDLElBRkg7QUFHRDs7QUFFRCxhQUFLd1UsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUI7QUFDakIsbUJBQVMsRUFEUTtBQUVqQiw4QkFBb0J5akQsTUFGSDtBQUdqQiwyQkFBaUJBLE1BSEE7QUFJakIseUJBQWVBLE1BSkU7QUFLakIseUJBQWVBO0FBTEUsU0FBbkIsRUFNRzU4QixRQU5ILENBTVksS0FBS2gwQixPQUFMLENBQWFreEQsWUFOekI7O0FBUUE7QUFDQSxhQUFLcFksYUFBTCxHQUFxQixFQUFyQjtBQUNBLGFBQUtELE9BQUwsR0FBZSxDQUFmO0FBQ0EsYUFBS0ksWUFBTCxHQUFvQixLQUFwQjs7QUFFQSxhQUFLbkosT0FBTDtBQUNEOztBQUVEOzs7OztBQWxFVztBQUFBO0FBQUEsd0NBc0VPdkssT0F0RVAsRUFzRWdCO0FBQ3pCLFlBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQUUsaUJBQU8sRUFBUDtBQUFZO0FBQzVCO0FBQ0EsWUFBSW5hLFdBQVdtYSxRQUFRLENBQVIsRUFBV2g2QixTQUFYLENBQXFCbEQsS0FBckIsQ0FBMkIsdUJBQTNCLENBQWY7QUFDSStpQixtQkFBV0EsV0FBV0EsU0FBUyxDQUFULENBQVgsR0FBeUIsRUFBcEM7QUFDSixlQUFPQSxRQUFQO0FBQ0Q7QUE1RVU7QUFBQTs7QUE2RVg7Ozs7QUE3RVcscUNBaUZJeGlCLEVBakZKLEVBaUZRO0FBQ2pCLFlBQUl1b0Qsa0JBQWtCLENBQUksS0FBS254RCxPQUFMLENBQWFveEQsWUFBakIsU0FBaUMsS0FBS3B4RCxPQUFMLENBQWEyNEMsYUFBOUMsU0FBK0QsS0FBSzM0QyxPQUFMLENBQWFteEQsZUFBNUUsRUFBK0ZodkQsSUFBL0YsRUFBdEI7QUFDQSxZQUFJa3ZELFlBQWFsd0IsRUFBRSxhQUFGLEVBQWlCbk4sUUFBakIsQ0FBMEJtOUIsZUFBMUIsRUFBMkNoa0QsSUFBM0MsQ0FBZ0Q7QUFDL0Qsa0JBQVEsU0FEdUQ7QUFFL0QseUJBQWUsSUFGZ0Q7QUFHL0QsNEJBQWtCLEtBSDZDO0FBSS9ELDJCQUFpQixLQUo4QztBQUsvRCxnQkFBTXZFO0FBTHlELFNBQWhELENBQWpCO0FBT0EsZUFBT3lvRCxTQUFQO0FBQ0Q7O0FBRUQ7Ozs7OztBQTdGVztBQUFBO0FBQUEsa0NBa0dDam1DLFFBbEdELEVBa0dXO0FBQ3BCLGFBQUswdEIsYUFBTCxDQUFtQi83QyxJQUFuQixDQUF3QnF1QixXQUFXQSxRQUFYLEdBQXNCLFFBQTlDOztBQUVBO0FBQ0EsWUFBSSxDQUFDQSxRQUFELElBQWMsS0FBSzB0QixhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLEtBQTNCLElBQW9DLENBQXRELEVBQTBEO0FBQ3hELGVBQUsrekQsUUFBTCxDQUFjLzhCLFFBQWQsQ0FBdUIsS0FBdkI7QUFDRCxTQUZELE1BRU8sSUFBSTVJLGFBQWEsS0FBYixJQUF1QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBbEUsRUFBc0U7QUFDM0UsZUFBSyt6RCxRQUFMLENBQWMxOEIsV0FBZCxDQUEwQmpKLFFBQTFCO0FBQ0QsU0FGTSxNQUVBLElBQUlBLGFBQWEsTUFBYixJQUF3QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsT0FBM0IsSUFBc0MsQ0FBbEUsRUFBc0U7QUFDM0UsZUFBSyt6RCxRQUFMLENBQWMxOEIsV0FBZCxDQUEwQmpKLFFBQTFCLEVBQ0s0SSxRQURMLENBQ2MsT0FEZDtBQUVELFNBSE0sTUFHQSxJQUFJNUksYUFBYSxPQUFiLElBQXlCLEtBQUswdEIsYUFBTCxDQUFtQjk3QyxPQUFuQixDQUEyQixNQUEzQixJQUFxQyxDQUFsRSxFQUFzRTtBQUMzRSxlQUFLK3pELFFBQUwsQ0FBYzE4QixXQUFkLENBQTBCakosUUFBMUIsRUFDSzRJLFFBREwsQ0FDYyxNQURkO0FBRUQ7O0FBRUQ7QUFMTyxhQU1GLElBQUksQ0FBQzVJLFFBQUQsSUFBYyxLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsS0FBM0IsSUFBb0MsQ0FBQyxDQUFuRCxJQUEwRCxLQUFLODdDLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBbkcsRUFBdUc7QUFDMUcsaUJBQUsrekQsUUFBTCxDQUFjLzhCLFFBQWQsQ0FBdUIsTUFBdkI7QUFDRCxXQUZJLE1BRUUsSUFBSTVJLGFBQWEsS0FBYixJQUF1QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBQyxDQUEvRCxJQUFzRSxLQUFLODdDLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsTUFBM0IsSUFBcUMsQ0FBL0csRUFBbUg7QUFDeEgsaUJBQUsrekQsUUFBTCxDQUFjMThCLFdBQWQsQ0FBMEJqSixRQUExQixFQUNLNEksUUFETCxDQUNjLE1BRGQ7QUFFRCxXQUhNLE1BR0EsSUFBSTVJLGFBQWEsTUFBYixJQUF3QixLQUFLMHRCLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsT0FBM0IsSUFBc0MsQ0FBQyxDQUEvRCxJQUFzRSxLQUFLODdDLGFBQUwsQ0FBbUI5N0MsT0FBbkIsQ0FBMkIsUUFBM0IsSUFBdUMsQ0FBakgsRUFBcUg7QUFDMUgsaUJBQUsrekQsUUFBTCxDQUFjMThCLFdBQWQsQ0FBMEJqSixRQUExQjtBQUNELFdBRk0sTUFFQSxJQUFJQSxhQUFhLE9BQWIsSUFBeUIsS0FBSzB0QixhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLE1BQTNCLElBQXFDLENBQUMsQ0FBL0QsSUFBc0UsS0FBSzg3QyxhQUFMLENBQW1COTdDLE9BQW5CLENBQTJCLFFBQTNCLElBQXVDLENBQWpILEVBQXFIO0FBQzFILGlCQUFLK3pELFFBQUwsQ0FBYzE4QixXQUFkLENBQTBCakosUUFBMUI7QUFDRDtBQUNEO0FBSE8sZUFJRjtBQUNILG1CQUFLMmxDLFFBQUwsQ0FBYzE4QixXQUFkLENBQTBCakosUUFBMUI7QUFDRDtBQUNELGFBQUs2dEIsWUFBTCxHQUFvQixJQUFwQjtBQUNBLGFBQUtKLE9BQUw7QUFDRDs7QUFFRDs7Ozs7O0FBcklXO0FBQUE7QUFBQSxxQ0EwSUk7QUFDYixZQUFJenRCLFdBQVcsS0FBS3lsQyxpQkFBTCxDQUF1QixLQUFLRSxRQUE1QixDQUFmO0FBQUEsWUFDSU8sV0FBV2h3QixXQUFXNkQsR0FBWCxDQUFlRSxhQUFmLENBQTZCLEtBQUswckIsUUFBbEMsQ0FEZjtBQUFBLFlBRUlwcUIsY0FBY3JGLFdBQVc2RCxHQUFYLENBQWVFLGFBQWYsQ0FBNkIsS0FBS25ELFFBQWxDLENBRmxCO0FBQUEsWUFHSWdYLFlBQWE5dEIsYUFBYSxNQUFiLEdBQXNCLE1BQXRCLEdBQWlDQSxhQUFhLE9BQWQsR0FBeUIsTUFBekIsR0FBa0MsS0FIbkY7QUFBQSxZQUlJa1EsUUFBUzRkLGNBQWMsS0FBZixHQUF3QixRQUF4QixHQUFtQyxPQUovQztBQUFBLFlBS0kvWixTQUFVN0QsVUFBVSxRQUFYLEdBQXVCLEtBQUt0N0IsT0FBTCxDQUFhdW1DLE9BQXBDLEdBQThDLEtBQUt2bUMsT0FBTCxDQUFhd21DLE9BTHhFO0FBQUEsWUFNSWhFLFFBQVEsSUFOWjs7QUFRQSxZQUFLOHVCLFNBQVNwbkMsS0FBVCxJQUFrQm9uQyxTQUFTeHJCLFVBQVQsQ0FBb0I1YixLQUF2QyxJQUFrRCxDQUFDLEtBQUsydUIsT0FBTixJQUFpQixDQUFDdlgsV0FBVzZELEdBQVgsQ0FBZUMsZ0JBQWYsQ0FBZ0MsS0FBSzJyQixRQUFyQyxDQUF4RSxFQUF5SDtBQUN2SCxlQUFLQSxRQUFMLENBQWM1eEIsTUFBZCxDQUFxQm1DLFdBQVc2RCxHQUFYLENBQWVHLFVBQWYsQ0FBMEIsS0FBS3lyQixRQUEvQixFQUF5QyxLQUFLN3VCLFFBQTlDLEVBQXdELGVBQXhELEVBQXlFLEtBQUtsaUMsT0FBTCxDQUFhdW1DLE9BQXRGLEVBQStGLEtBQUt2bUMsT0FBTCxDQUFhd21DLE9BQTVHLEVBQXFILElBQXJILENBQXJCLEVBQWlKbHBCLEdBQWpKLENBQXFKO0FBQ3JKO0FBQ0UscUJBQVNxcEIsWUFBWWIsVUFBWixDQUF1QjViLEtBQXZCLEdBQWdDLEtBQUtscUIsT0FBTCxDQUFhd21DLE9BQWIsR0FBdUIsQ0FGbUY7QUFHbkosc0JBQVU7QUFIeUksV0FBcko7QUFLQSxpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsYUFBS3VxQixRQUFMLENBQWM1eEIsTUFBZCxDQUFxQm1DLFdBQVc2RCxHQUFYLENBQWVHLFVBQWYsQ0FBMEIsS0FBS3lyQixRQUEvQixFQUF5QyxLQUFLN3VCLFFBQTlDLEVBQXVELGFBQWE5VyxZQUFZLFFBQXpCLENBQXZELEVBQTJGLEtBQUtwckIsT0FBTCxDQUFhdW1DLE9BQXhHLEVBQWlILEtBQUt2bUMsT0FBTCxDQUFhd21DLE9BQTlILENBQXJCOztBQUVBLGVBQU0sQ0FBQ2xGLFdBQVc2RCxHQUFYLENBQWVDLGdCQUFmLENBQWdDLEtBQUsyckIsUUFBckMsQ0FBRCxJQUFtRCxLQUFLbFksT0FBOUQsRUFBdUU7QUFDckUsZUFBS1MsV0FBTCxDQUFpQmx1QixRQUFqQjtBQUNBLGVBQUttdUIsWUFBTDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7QUFwS1c7QUFBQTtBQUFBLDZCQTBLSjtBQUNMLFlBQUksS0FBS3Y1QyxPQUFMLENBQWF1eEQsTUFBYixLQUF3QixLQUF4QixJQUFpQyxDQUFDandCLFdBQVd1QyxVQUFYLENBQXNCdnZCLEVBQXRCLENBQXlCLEtBQUt0VSxPQUFMLENBQWF1eEQsTUFBdEMsQ0FBdEMsRUFBcUY7QUFDbkY7QUFDQSxpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBSS91QixRQUFRLElBQVo7QUFDQSxhQUFLdXVCLFFBQUwsQ0FBY3p6QyxHQUFkLENBQWtCLFlBQWxCLEVBQWdDLFFBQWhDLEVBQTBDbVAsSUFBMUM7QUFDQSxhQUFLOHNCLFlBQUw7O0FBRUE7Ozs7QUFJQSxhQUFLclgsUUFBTCxDQUFjdmQsT0FBZCxDQUFzQixvQkFBdEIsRUFBNEMsS0FBS29zQyxRQUFMLENBQWM1akQsSUFBZCxDQUFtQixJQUFuQixDQUE1Qzs7QUFHQSxhQUFLNGpELFFBQUwsQ0FBYzVqRCxJQUFkLENBQW1CO0FBQ2pCLDRCQUFrQixJQUREO0FBRWpCLHlCQUFlO0FBRkUsU0FBbkI7QUFJQXExQixjQUFNa1QsUUFBTixHQUFpQixJQUFqQjtBQUNBO0FBQ0EsYUFBS3FiLFFBQUwsQ0FBY3AwQyxJQUFkLEdBQXFCK1EsSUFBckIsR0FBNEJwUSxHQUE1QixDQUFnQyxZQUFoQyxFQUE4QyxFQUE5QyxFQUFrRDBVLE1BQWxELENBQXlELEtBQUtoeUIsT0FBTCxDQUFhd3hELGNBQXRFLEVBQXNGLFlBQVc7QUFDL0Y7QUFDRCxTQUZEO0FBR0E7Ozs7QUFJQSxhQUFLdHZCLFFBQUwsQ0FBY3ZkLE9BQWQsQ0FBc0IsaUJBQXRCO0FBQ0Q7O0FBRUQ7Ozs7OztBQTNNVztBQUFBO0FBQUEsNkJBZ05KO0FBQ0w7QUFDQSxZQUFJNmQsUUFBUSxJQUFaO0FBQ0EsYUFBS3V1QixRQUFMLENBQWNwMEMsSUFBZCxHQUFxQnhQLElBQXJCLENBQTBCO0FBQ3hCLHlCQUFlLElBRFM7QUFFeEIsNEJBQWtCO0FBRk0sU0FBMUIsRUFHRzhrQixPQUhILENBR1csS0FBS2p5QixPQUFMLENBQWF5eEQsZUFIeEIsRUFHeUMsWUFBVztBQUNsRGp2QixnQkFBTWtULFFBQU4sR0FBaUIsS0FBakI7QUFDQWxULGdCQUFNbXVCLE9BQU4sR0FBZ0IsS0FBaEI7QUFDQSxjQUFJbnVCLE1BQU15VyxZQUFWLEVBQXdCO0FBQ3RCelcsa0JBQU11dUIsUUFBTixDQUNNMThCLFdBRE4sQ0FDa0JtTyxNQUFNcXVCLGlCQUFOLENBQXdCcnVCLE1BQU11dUIsUUFBOUIsQ0FEbEIsRUFFTS84QixRQUZOLENBRWV3TyxNQUFNeGlDLE9BQU4sQ0FBYzI0QyxhQUY3Qjs7QUFJRG5XLGtCQUFNc1csYUFBTixHQUFzQixFQUF0QjtBQUNBdFcsa0JBQU1xVyxPQUFOLEdBQWdCLENBQWhCO0FBQ0FyVyxrQkFBTXlXLFlBQU4sR0FBcUIsS0FBckI7QUFDQTtBQUNGLFNBZkQ7QUFnQkE7Ozs7QUFJQSxhQUFLL1csUUFBTCxDQUFjdmQsT0FBZCxDQUFzQixpQkFBdEI7QUFDRDs7QUFFRDs7Ozs7O0FBMU9XO0FBQUE7QUFBQSxnQ0ErT0Q7QUFDUixZQUFJNmQsUUFBUSxJQUFaO0FBQ0EsWUFBSTZ1QixZQUFZLEtBQUtOLFFBQXJCO0FBQ0EsWUFBSVcsVUFBVSxLQUFkOztBQUVBLFlBQUksQ0FBQyxLQUFLMXhELE9BQUwsQ0FBYSs2QyxZQUFsQixFQUFnQzs7QUFFOUIsZUFBSzdZLFFBQUwsQ0FDQ3hoQixFQURELENBQ0ksdUJBREosRUFDNkIsVUFBUzNZLENBQVQsRUFBWTtBQUN2QyxnQkFBSSxDQUFDeTZCLE1BQU1rVCxRQUFYLEVBQXFCO0FBQ25CbFQsb0JBQU05UCxPQUFOLEdBQWdCbFksV0FBVyxZQUFXO0FBQ3BDZ29CLHNCQUFNL1YsSUFBTjtBQUNELGVBRmUsRUFFYitWLE1BQU14aUMsT0FBTixDQUFjMDVDLFVBRkQsQ0FBaEI7QUFHRDtBQUNGLFdBUEQsRUFRQ2g1QixFQVJELENBUUksdUJBUkosRUFRNkIsVUFBUzNZLENBQVQsRUFBWTtBQUN2QzRxQix5QkFBYTZQLE1BQU05UCxPQUFuQjtBQUNBLGdCQUFJLENBQUNnL0IsT0FBRCxJQUFhbHZCLE1BQU1tdUIsT0FBTixJQUFpQixDQUFDbnVCLE1BQU14aUMsT0FBTixDQUFjNDZDLFNBQWpELEVBQTZEO0FBQzNEcFksb0JBQU05VSxJQUFOO0FBQ0Q7QUFDRixXQWJEO0FBY0Q7O0FBRUQsWUFBSSxLQUFLMXRCLE9BQUwsQ0FBYTQ2QyxTQUFqQixFQUE0QjtBQUMxQixlQUFLMVksUUFBTCxDQUFjeGhCLEVBQWQsQ0FBaUIsc0JBQWpCLEVBQXlDLFVBQVMzWSxDQUFULEVBQVk7QUFDbkRBLGNBQUVxZCx3QkFBRjtBQUNBLGdCQUFJb2QsTUFBTW11QixPQUFWLEVBQW1CO0FBQ2pCO0FBQ0E7QUFDRCxhQUhELE1BR087QUFDTG51QixvQkFBTW11QixPQUFOLEdBQWdCLElBQWhCO0FBQ0Esa0JBQUksQ0FBQ251QixNQUFNeGlDLE9BQU4sQ0FBYys2QyxZQUFkLElBQThCLENBQUN2WSxNQUFNTixRQUFOLENBQWUvMEIsSUFBZixDQUFvQixVQUFwQixDQUFoQyxLQUFvRSxDQUFDcTFCLE1BQU1rVCxRQUEvRSxFQUF5RjtBQUN2RmxULHNCQUFNL1YsSUFBTjtBQUNEO0FBQ0Y7QUFDRixXQVhEO0FBWUQsU0FiRCxNQWFPO0FBQ0wsZUFBS3lWLFFBQUwsQ0FBY3hoQixFQUFkLENBQWlCLHNCQUFqQixFQUF5QyxVQUFTM1ksQ0FBVCxFQUFZO0FBQ25EQSxjQUFFcWQsd0JBQUY7QUFDQW9kLGtCQUFNbXVCLE9BQU4sR0FBZ0IsSUFBaEI7QUFDRCxXQUhEO0FBSUQ7O0FBRUQsWUFBSSxDQUFDLEtBQUszd0QsT0FBTCxDQUFhMnhELGVBQWxCLEVBQW1DO0FBQ2pDLGVBQUt6dkIsUUFBTCxDQUNDeGhCLEVBREQsQ0FDSSxvQ0FESixFQUMwQyxVQUFTM1ksQ0FBVCxFQUFZO0FBQ3BEeTZCLGtCQUFNa1QsUUFBTixHQUFpQmxULE1BQU05VSxJQUFOLEVBQWpCLEdBQWdDOFUsTUFBTS9WLElBQU4sRUFBaEM7QUFDRCxXQUhEO0FBSUQ7O0FBRUQsYUFBS3lWLFFBQUwsQ0FBY3hoQixFQUFkLENBQWlCO0FBQ2Y7QUFDQTtBQUNBLDhCQUFvQixLQUFLZ04sSUFBTCxDQUFVK1MsSUFBVixDQUFlLElBQWY7QUFITCxTQUFqQjs7QUFNQSxhQUFLeUIsUUFBTCxDQUNHeGhCLEVBREgsQ0FDTSxrQkFETixFQUMwQixVQUFTM1ksQ0FBVCxFQUFZO0FBQ2xDMnBELG9CQUFVLElBQVY7QUFDQSxjQUFJbHZCLE1BQU1tdUIsT0FBVixFQUFtQjtBQUNqQjtBQUNBO0FBQ0EsZ0JBQUcsQ0FBQ251QixNQUFNeGlDLE9BQU4sQ0FBYzQ2QyxTQUFsQixFQUE2QjtBQUFFOFcsd0JBQVUsS0FBVjtBQUFrQjtBQUNqRCxtQkFBTyxLQUFQO0FBQ0QsV0FMRCxNQUtPO0FBQ0xsdkIsa0JBQU0vVixJQUFOO0FBQ0Q7QUFDRixTQVhILEVBYUcvTCxFQWJILENBYU0scUJBYk4sRUFhNkIsVUFBUzNZLENBQVQsRUFBWTtBQUNyQzJwRCxvQkFBVSxLQUFWO0FBQ0FsdkIsZ0JBQU1tdUIsT0FBTixHQUFnQixLQUFoQjtBQUNBbnVCLGdCQUFNOVUsSUFBTjtBQUNELFNBakJILEVBbUJHaE4sRUFuQkgsQ0FtQk0scUJBbkJOLEVBbUI2QixZQUFXO0FBQ3BDLGNBQUk4aEIsTUFBTWtULFFBQVYsRUFBb0I7QUFDbEJsVCxrQkFBTStXLFlBQU47QUFDRDtBQUNGLFNBdkJIO0FBd0JEOztBQUVEOzs7OztBQWpVVztBQUFBO0FBQUEsK0JBcVVGO0FBQ1AsWUFBSSxLQUFLN0QsUUFBVCxFQUFtQjtBQUNqQixlQUFLaG9CLElBQUw7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFLakIsSUFBTDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBN1VXO0FBQUE7QUFBQSxnQ0FpVkQ7QUFDUixhQUFLeVYsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsT0FBbkIsRUFBNEIsS0FBSzRqRCxRQUFMLENBQWMxdUQsSUFBZCxFQUE1QixFQUNjOFgsR0FEZCxDQUNrQix5QkFEbEIsRUFFY2thLFdBRmQsQ0FFMEIsd0JBRjFCLEVBR2NwQixVQUhkLENBR3lCLHNHQUh6Qjs7QUFLQSxhQUFLODlCLFFBQUwsQ0FBY3I1QyxNQUFkOztBQUVBNHBCLG1CQUFXYSxnQkFBWCxDQUE0QixJQUE1QjtBQUNEO0FBMVZVOztBQUFBO0FBQUE7O0FBNlZidXVCLFVBQVE5Z0IsUUFBUixHQUFtQjtBQUNqQitoQixxQkFBaUIsS0FEQTtBQUVqQjs7Ozs7O0FBTUFqWSxnQkFBWSxHQVJLO0FBU2pCOzs7Ozs7QUFNQThYLG9CQUFnQixHQWZDO0FBZ0JqQjs7Ozs7O0FBTUFDLHFCQUFpQixHQXRCQTtBQXVCakI7Ozs7OztBQU1BMVcsa0JBQWMsS0E3Qkc7QUE4QmpCOzs7Ozs7QUFNQW9XLHFCQUFpQixFQXBDQTtBQXFDakI7Ozs7OztBQU1BQyxrQkFBYyxTQTNDRztBQTRDakI7Ozs7OztBQU1BRixrQkFBYyxTQWxERztBQW1EakI7Ozs7OztBQU1BSyxZQUFRLE9BekRTO0FBMERqQjs7Ozs7O0FBTUFSLGNBQVUsRUFoRU87QUFpRWpCOzs7Ozs7QUFNQUQsYUFBUyxFQXZFUTtBQXdFakJjLG9CQUFnQixlQXhFQztBQXlFakI7Ozs7OztBQU1BaFgsZUFBVyxJQS9FTTtBQWdGakI7Ozs7OztBQU1BakMsbUJBQWUsRUF0RkU7QUF1RmpCOzs7Ozs7QUFNQXBTLGFBQVMsRUE3RlE7QUE4RmpCOzs7Ozs7QUFNQUMsYUFBUyxFQXBHUTtBQXFHZjs7Ozs7OztBQU9GeXFCLGVBQVc7QUE1R00sR0FBbkI7O0FBK0dBOzs7O0FBSUE7QUFDQTN2QixhQUFXSSxNQUFYLENBQWtCZ3ZCLE9BQWxCLEVBQTJCLFNBQTNCO0FBRUMsQ0FuZEEsQ0FtZENuekQsTUFuZEQsQ0FBRDtBQ0ZBOzs7Ozs7QUFFQSxDQUFDLFVBQVM0akMsQ0FBVCxFQUFZOztBQUViOzs7Ozs7Ozs7O0FBRmEsTUFZUDB3Qix1QkFaTztBQWFYOzs7Ozs7O0FBT0EscUNBQVl0c0IsT0FBWixFQUFxQnZsQyxPQUFyQixFQUE4QjtBQUFBOztBQUM1QixXQUFLa2lDLFFBQUwsR0FBZ0JmLEVBQUVvRSxPQUFGLENBQWhCO0FBQ0EsV0FBS3ZsQyxPQUFMLEdBQWdCbWhDLEVBQUVwaEMsTUFBRixDQUFTLEVBQVQsRUFBYSxLQUFLbWlDLFFBQUwsQ0FBYzFtQixJQUFkLEVBQWIsRUFBbUN4YixPQUFuQyxDQUFoQjtBQUNBLFdBQUsyOUMsS0FBTCxHQUFhLEtBQUt6YixRQUFMLENBQWMxbUIsSUFBZCxDQUFtQiwyQkFBbkIsQ0FBYjtBQUNBLFdBQUt5b0MsU0FBTCxHQUFpQixJQUFqQjtBQUNBLFdBQUtDLGFBQUwsR0FBcUIsSUFBckI7QUFDQSxVQUFJLENBQUMsS0FBS2hpQixRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixJQUFuQixDQUFMLEVBQStCO0FBQzdCLGFBQUsrMEIsUUFBTCxDQUFjLzBCLElBQWQsQ0FBbUIsSUFBbkIsRUFBd0JtMEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQix5QkFBMUIsQ0FBeEI7QUFDRDs7QUFFRCxXQUFLTSxLQUFMO0FBQ0EsV0FBS3VOLE9BQUw7O0FBRUF4TyxpQkFBV1EsY0FBWCxDQUEwQixJQUExQixFQUFnQyx5QkFBaEM7QUFDRDs7QUFFRDs7Ozs7OztBQXBDVztBQUFBO0FBQUEsOEJBeUNIO0FBQ047QUFDQSxZQUFJLE9BQU8sS0FBSzZiLEtBQVosS0FBc0IsUUFBMUIsRUFBb0M7QUFDbEMsY0FBSXdHLFlBQVksRUFBaEI7O0FBRUE7QUFDQSxjQUFJeEcsUUFBUSxLQUFLQSxLQUFMLENBQVd4NUMsS0FBWCxDQUFpQixHQUFqQixDQUFaOztBQUVBO0FBQ0EsZUFBSyxJQUFJL0UsSUFBSSxDQUFiLEVBQWdCQSxJQUFJdStDLE1BQU1yL0MsTUFBMUIsRUFBa0NjLEdBQWxDLEVBQXVDO0FBQ3JDLGdCQUFJMitDLE9BQU9KLE1BQU12K0MsQ0FBTixFQUFTK0UsS0FBVCxDQUFlLEdBQWYsQ0FBWDtBQUNBLGdCQUFJaWdELFdBQVdyRyxLQUFLei9DLE1BQUwsR0FBYyxDQUFkLEdBQWtCeS9DLEtBQUssQ0FBTCxDQUFsQixHQUE0QixPQUEzQztBQUNBLGdCQUFJc0csYUFBYXRHLEtBQUt6L0MsTUFBTCxHQUFjLENBQWQsR0FBa0J5L0MsS0FBSyxDQUFMLENBQWxCLEdBQTRCQSxLQUFLLENBQUwsQ0FBN0M7O0FBRUEsZ0JBQUl1RyxZQUFZRCxVQUFaLE1BQTRCLElBQWhDLEVBQXNDO0FBQ3BDRix3QkFBVUMsUUFBVixJQUFzQkUsWUFBWUQsVUFBWixDQUF0QjtBQUNEO0FBQ0Y7O0FBRUQsZUFBSzFHLEtBQUwsR0FBYXdHLFNBQWI7QUFDRDs7QUFFRCxhQUFLMk4sY0FBTDs7QUFFQSxZQUFJLENBQUMzd0IsRUFBRXQvQixhQUFGLENBQWdCLEtBQUs4N0MsS0FBckIsQ0FBTCxFQUFrQztBQUNoQyxlQUFLNEcsa0JBQUw7QUFDRDtBQUNGO0FBcEVVO0FBQUE7QUFBQSx1Q0FzRU07QUFDZjtBQUNBLFlBQUkvaEIsUUFBUSxJQUFaO0FBQ0FBLGNBQU11dkIsVUFBTixHQUFtQixFQUFuQjtBQUNBLGFBQUssSUFBSXB3RCxHQUFULElBQWdCMmlELFdBQWhCLEVBQTZCO0FBQzNCLGNBQUlBLFlBQVlsbkQsY0FBWixDQUEyQnVFLEdBQTNCLENBQUosRUFBcUM7QUFDbkMsZ0JBQUlQLE1BQU1rakQsWUFBWTNpRCxHQUFaLENBQVY7QUFDQSxnQkFBSTtBQUNGLGtCQUFJcXdELGNBQWM3d0IsRUFBRSxXQUFGLENBQWxCO0FBQ0Esa0JBQUk4d0IsWUFBWSxJQUFJN3dELElBQUlzZ0MsTUFBUixDQUFlc3dCLFdBQWYsRUFBMkJ4dkIsTUFBTXhpQyxPQUFqQyxDQUFoQjtBQUNBLG1CQUFLLElBQUlreUQsTUFBVCxJQUFtQkQsVUFBVWp5RCxPQUE3QixFQUFzQztBQUNwQyxvQkFBSWl5RCxVQUFVanlELE9BQVYsQ0FBa0I1QyxjQUFsQixDQUFpQzgwRCxNQUFqQyxLQUE0Q0EsV0FBVyxVQUEzRCxFQUF1RTtBQUNyRSxzQkFBSUMsU0FBU0YsVUFBVWp5RCxPQUFWLENBQWtCa3lELE1BQWxCLENBQWI7QUFDQTF2Qix3QkFBTXV2QixVQUFOLENBQWlCRyxNQUFqQixJQUEyQkMsTUFBM0I7QUFDRDtBQUNGO0FBQ0RGLHdCQUFVdk4sT0FBVjtBQUNELGFBVkQsQ0FXQSxPQUFNMzhDLENBQU4sRUFBUyxDQUNSO0FBQ0Y7QUFDRjtBQUNGOztBQUVEOzs7Ozs7QUE5Rlc7QUFBQTtBQUFBLGdDQW1HRDtBQUNSLFlBQUl5NkIsUUFBUSxJQUFaOztBQUVBckIsVUFBRXprQyxNQUFGLEVBQVVna0IsRUFBVixDQUFhLHVCQUFiLEVBQXNDLFlBQVc7QUFDL0M4aEIsZ0JBQU0raEIsa0JBQU47QUFDRCxTQUZEO0FBR0Q7O0FBRUQ7Ozs7OztBQTNHVztBQUFBO0FBQUEsMkNBZ0hVO0FBQ25CLFlBQUlDLFNBQUo7QUFBQSxZQUFlaGlCLFFBQVEsSUFBdkI7QUFDQTtBQUNBckIsVUFBRW5pQyxJQUFGLENBQU8sS0FBSzIrQyxLQUFaLEVBQW1CLFVBQVNoOEMsR0FBVCxFQUFjO0FBQy9CLGNBQUkyL0IsV0FBV3VDLFVBQVgsQ0FBc0JvRixPQUF0QixDQUE4QnRuQyxHQUE5QixDQUFKLEVBQXdDO0FBQ3RDNmlELHdCQUFZN2lELEdBQVo7QUFDRDtBQUNGLFNBSkQ7O0FBTUE7QUFDQSxZQUFJLENBQUM2aUQsU0FBTCxFQUFnQjs7QUFFaEI7QUFDQSxZQUFJLEtBQUtOLGFBQUwsWUFBOEIsS0FBS3ZHLEtBQUwsQ0FBVzZHLFNBQVgsRUFBc0I5aUIsTUFBeEQsRUFBZ0U7O0FBRWhFO0FBQ0FQLFVBQUVuaUMsSUFBRixDQUFPc2xELFdBQVAsRUFBb0IsVUFBUzNpRCxHQUFULEVBQWMrQixLQUFkLEVBQXFCO0FBQ3ZDOCtCLGdCQUFNTixRQUFOLENBQWU3TixXQUFmLENBQTJCM3dCLE1BQU0rZ0QsUUFBakM7QUFDRCxTQUZEOztBQUlBO0FBQ0EsYUFBS3ZpQixRQUFMLENBQWNsTyxRQUFkLENBQXVCLEtBQUsycEIsS0FBTCxDQUFXNkcsU0FBWCxFQUFzQkMsUUFBN0M7O0FBRUE7QUFDQSxZQUFJLEtBQUtQLGFBQVQsRUFBd0I7QUFDdEI7QUFDQSxjQUFJLENBQUMsS0FBS0EsYUFBTCxDQUFtQmhpQixRQUFuQixDQUE0QjFtQixJQUE1QixDQUFpQyxVQUFqQyxDQUFELElBQWlELEtBQUs0MkMsV0FBMUQsRUFBdUUsS0FBS2xPLGFBQUwsQ0FBbUJoaUIsUUFBbkIsQ0FBNEIxbUIsSUFBNUIsQ0FBaUMsVUFBakMsRUFBNEMsS0FBSzQyQyxXQUFqRDtBQUN2RSxlQUFLbE8sYUFBTCxDQUFtQlEsT0FBbkI7QUFDRDtBQUNELGFBQUsyTixhQUFMLENBQW1CLEtBQUsxVSxLQUFMLENBQVc2RyxTQUFYLEVBQXNCQyxRQUF6QztBQUNBLGFBQUtQLGFBQUwsR0FBcUIsSUFBSSxLQUFLdkcsS0FBTCxDQUFXNkcsU0FBWCxFQUFzQjlpQixNQUExQixDQUFpQyxLQUFLUSxRQUF0QyxFQUFnRCxFQUFoRCxDQUFyQjtBQUNBLGFBQUtrd0IsV0FBTCxHQUFtQixLQUFLbE8sYUFBTCxDQUFtQmhpQixRQUFuQixDQUE0QjFtQixJQUE1QixDQUFpQyxVQUFqQyxDQUFuQjtBQUVEO0FBakpVO0FBQUE7QUFBQSxvQ0FtSkc4MkMsS0FuSkgsRUFtSlM7QUFDbEIsWUFBSTl2QixRQUFRLElBQVo7QUFBQSxZQUFrQit2QixhQUFhLFdBQS9CO0FBQ0EsWUFBSUMsVUFBVXJ4QixFQUFFLHdCQUFzQixLQUFLZSxRQUFMLENBQWMvMEIsSUFBZCxDQUFtQixJQUFuQixDQUF0QixHQUErQyxHQUFqRCxDQUFkO0FBQ0EsWUFBSXFsRCxRQUFRbDBELE1BQVosRUFBb0JpMEQsYUFBYSxNQUFiO0FBQ3BCLFlBQUlBLGVBQWVELEtBQW5CLEVBQTBCO0FBQ3hCO0FBQ0Q7O0FBRUQsWUFBSUcsWUFBWWp3QixNQUFNdXZCLFVBQU4sQ0FBaUI3QyxTQUFqQixHQUEyQjFzQixNQUFNdXZCLFVBQU4sQ0FBaUI3QyxTQUE1QyxHQUFzRCxZQUF0RTtBQUNBLFlBQUl3RCxZQUFZbHdCLE1BQU11dkIsVUFBTixDQUFpQnpCLFVBQWpCLEdBQTRCOXRCLE1BQU11dkIsVUFBTixDQUFpQnpCLFVBQTdDLEdBQXdELFlBQXhFOztBQUVBLGFBQUtwdUIsUUFBTCxDQUFjalAsVUFBZCxDQUF5QixNQUF6QjtBQUNBLFlBQUkwL0IsV0FBVyxLQUFLendCLFFBQUwsQ0FBYzNzQixRQUFkLENBQXVCLE1BQUlrOUMsU0FBSixHQUFjLHdCQUFyQyxFQUErRHArQixXQUEvRCxDQUEyRW8rQixTQUEzRSxFQUFzRnArQixXQUF0RixDQUFrRyxnQkFBbEcsRUFBb0hwQixVQUFwSCxDQUErSCxxQkFBL0gsQ0FBZjtBQUNBLFlBQUkyL0IsWUFBWUQsU0FBU3A5QyxRQUFULENBQWtCLEdBQWxCLEVBQXVCOGUsV0FBdkIsQ0FBbUMsaUJBQW5DLENBQWhCOztBQUVBLFlBQUlrK0IsZUFBZSxNQUFuQixFQUEyQjtBQUN6QkMsb0JBQVVBLFFBQVFqOUMsUUFBUixDQUFpQixNQUFJbTlDLFNBQXJCLEVBQWdDcitCLFdBQWhDLENBQTRDcStCLFNBQTVDLEVBQXVEei9CLFVBQXZELENBQWtFLE1BQWxFLEVBQTBFQSxVQUExRSxDQUFxRixhQUFyRixFQUFvR0EsVUFBcEcsQ0FBK0csaUJBQS9HLENBQVY7QUFDQXUvQixrQkFBUWo5QyxRQUFSLENBQWlCLEdBQWpCLEVBQXNCMGQsVUFBdEIsQ0FBaUMsTUFBakMsRUFBeUNBLFVBQXpDLENBQW9ELGVBQXBELEVBQXFFQSxVQUFyRSxDQUFnRixlQUFoRjtBQUNELFNBSEQsTUFHSztBQUNIdS9CLG9CQUFVRyxTQUFTcDlDLFFBQVQsQ0FBa0Isb0JBQWxCLEVBQXdDOGUsV0FBeEMsQ0FBb0QsbUJBQXBELENBQVY7QUFDRDs7QUFFRG0rQixnQkFBUWwxQyxHQUFSLENBQVksRUFBQ3FMLFNBQVEsRUFBVCxFQUFZMEMsWUFBVyxFQUF2QixFQUFaO0FBQ0FzbkMsaUJBQVNyMUMsR0FBVCxDQUFhLEVBQUNxTCxTQUFRLEVBQVQsRUFBWTBDLFlBQVcsRUFBdkIsRUFBYjtBQUNBLFlBQUlpbkMsVUFBVSxXQUFkLEVBQTJCO0FBQ3pCRSxrQkFBUXh6RCxJQUFSLENBQWEsVUFBUzJDLEdBQVQsRUFBYStCLEtBQWIsRUFBbUI7QUFDOUJ5OUIsY0FBRXo5QixLQUFGLEVBQVN1a0IsUUFBVCxDQUFrQjBxQyxTQUFTbDBELEdBQVQsQ0FBYWtELEdBQWIsQ0FBbEIsRUFBcUNxeUIsUUFBckMsQ0FBOEMsbUJBQTlDLEVBQW1FN21CLElBQW5FLENBQXdFLGtCQUF4RSxFQUEyRixFQUEzRixFQUErRmtuQixXQUEvRixDQUEyRyxXQUEzRyxFQUF3SC9XLEdBQXhILENBQTRILEVBQUMyUixRQUFPLEVBQVIsRUFBNUg7QUFDQWtTLGNBQUUsd0JBQXNCcUIsTUFBTU4sUUFBTixDQUFlLzBCLElBQWYsQ0FBb0IsSUFBcEIsQ0FBdEIsR0FBZ0QsR0FBbEQsRUFBdUQyYSxLQUF2RCxDQUE2RCwrQkFBNkIwYSxNQUFNTixRQUFOLENBQWUvMEIsSUFBZixDQUFvQixJQUFwQixDQUE3QixHQUF1RCxVQUFwSCxFQUFnSXVLLE1BQWhJO0FBQ0FpN0MscUJBQVMzK0IsUUFBVCxDQUFrQixnQkFBbEIsRUFBb0M3bUIsSUFBcEMsQ0FBeUMscUJBQXpDLEVBQStELEVBQS9EO0FBQ0F5bEQsc0JBQVU1K0IsUUFBVixDQUFtQixpQkFBbkI7QUFDRCxXQUxEO0FBTUQsU0FQRCxNQU9NLElBQUlzK0IsVUFBVSxNQUFkLEVBQXFCO0FBQ3pCLGNBQUlPLGVBQWUxeEIsRUFBRSx3QkFBc0JxQixNQUFNTixRQUFOLENBQWUvMEIsSUFBZixDQUFvQixJQUFwQixDQUF0QixHQUFnRCxHQUFsRCxDQUFuQjtBQUNBLGNBQUkybEQsZUFBZTN4QixFQUFFLHVCQUFxQnFCLE1BQU1OLFFBQU4sQ0FBZS8wQixJQUFmLENBQW9CLElBQXBCLENBQXZCLENBQW5CO0FBQ0EsY0FBSTJsRCxhQUFheDBELE1BQWpCLEVBQXlCO0FBQ3ZCdTBELDJCQUFlMXhCLEVBQUUsa0NBQUYsRUFBc0NoWixXQUF0QyxDQUFrRDJxQyxZQUFsRCxFQUFnRTNsRCxJQUFoRSxDQUFxRSxtQkFBckUsRUFBeUZxMUIsTUFBTU4sUUFBTixDQUFlLzBCLElBQWYsQ0FBb0IsSUFBcEIsQ0FBekYsQ0FBZjtBQUNBMmxELHlCQUFhcDdDLE1BQWI7QUFDRCxXQUhELE1BR0s7QUFDSG03QywyQkFBZTF4QixFQUFFLGtDQUFGLEVBQXNDaFosV0FBdEMsQ0FBa0RxYSxNQUFNTixRQUF4RCxFQUFrRS8wQixJQUFsRSxDQUF1RSxtQkFBdkUsRUFBMkZxMUIsTUFBTU4sUUFBTixDQUFlLzBCLElBQWYsQ0FBb0IsSUFBcEIsQ0FBM0YsQ0FBZjtBQUNEO0FBQ0RxbEQsa0JBQVF4ekQsSUFBUixDQUFhLFVBQVMyQyxHQUFULEVBQWErQixLQUFiLEVBQW1CO0FBQzlCLGdCQUFJcXZELFlBQVk1eEIsRUFBRXo5QixLQUFGLEVBQVN1a0IsUUFBVCxDQUFrQjRxQyxZQUFsQixFQUFnQzcrQixRQUFoQyxDQUF5QzArQixTQUF6QyxDQUFoQjtBQUNBLGdCQUFJNWlELE9BQU84aUQsVUFBVW4wRCxHQUFWLENBQWNrRCxHQUFkLEVBQW1CbU8sSUFBbkIsQ0FBd0JqVCxLQUF4QixDQUE4QixDQUE5QixDQUFYO0FBQ0EsZ0JBQUkrTCxLQUFLdTRCLEVBQUV6OUIsS0FBRixFQUFTeUosSUFBVCxDQUFjLElBQWQsS0FBdUJtMEIsV0FBV1csV0FBWCxDQUF1QixDQUF2QixFQUEwQixXQUExQixDQUFoQztBQUNBLGdCQUFJbnlCLFNBQVNsSCxFQUFiLEVBQWlCO0FBQ2Ysa0JBQUlrSCxTQUFTLEVBQWIsRUFBaUI7QUFDZnF4QixrQkFBRXo5QixLQUFGLEVBQVN5SixJQUFULENBQWMsSUFBZCxFQUFtQjJDLElBQW5CO0FBQ0QsZUFGRCxNQUVLO0FBQ0hBLHVCQUFPbEgsRUFBUDtBQUNBdTRCLGtCQUFFejlCLEtBQUYsRUFBU3lKLElBQVQsQ0FBYyxJQUFkLEVBQW1CMkMsSUFBbkI7QUFDQXF4QixrQkFBRXl4QixVQUFVbjBELEdBQVYsQ0FBY2tELEdBQWQsQ0FBRixFQUFzQndMLElBQXRCLENBQTJCLE1BQTNCLEVBQWtDZzBCLEVBQUV5eEIsVUFBVW4wRCxHQUFWLENBQWNrRCxHQUFkLENBQUYsRUFBc0J3TCxJQUF0QixDQUEyQixNQUEzQixFQUFtQ3BNLE9BQW5DLENBQTJDLEdBQTNDLEVBQStDLEVBQS9DLElBQW1ELEdBQW5ELEdBQXVEK08sSUFBekY7QUFDRDtBQUNGO0FBQ0QsZ0JBQUk0bEMsV0FBV3ZVLEVBQUV3eEIsU0FBU2wwRCxHQUFULENBQWFrRCxHQUFiLENBQUYsRUFBcUI4eUIsUUFBckIsQ0FBOEIsV0FBOUIsQ0FBZjtBQUNBLGdCQUFJaWhCLFFBQUosRUFBYztBQUNacWQsd0JBQVUvK0IsUUFBVixDQUFtQixXQUFuQjtBQUNEO0FBQ0YsV0FqQkQ7QUFrQkEyK0IsbUJBQVMzK0IsUUFBVCxDQUFrQnkrQixTQUFsQjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7O0FBak5XO0FBQUE7QUFBQSxnQ0FxTkQ7QUFDUixZQUFJLEtBQUt2TyxhQUFULEVBQXdCLEtBQUtBLGFBQUwsQ0FBbUJRLE9BQW5CO0FBQ3hCdmpCLFVBQUV6a0MsTUFBRixFQUFVeWQsR0FBVixDQUFjLDZCQUFkO0FBQ0FtbkIsbUJBQVdhLGdCQUFYLENBQTRCLElBQTVCO0FBQ0Q7QUF6TlU7O0FBQUE7QUFBQTs7QUE0TmIwdkIsMEJBQXdCamlCLFFBQXhCLEdBQW1DLEVBQW5DOztBQUVBO0FBQ0EsTUFBSTBVLGNBQWM7QUFDaEIwTyxVQUFNO0FBQ0p2TyxnQkFBVSxNQUROO0FBRUovaUIsY0FBUUosV0FBV0MsUUFBWCxDQUFvQnl4QixJQUFwQixJQUE0QjtBQUZoQyxLQURVO0FBS2hCbk8sZUFBVztBQUNUSixnQkFBVSxXQUREO0FBRVQvaUIsY0FBUUosV0FBV0MsUUFBWCxDQUFvQnNqQixTQUFwQixJQUFpQztBQUZoQztBQUxLLEdBQWxCOztBQVdBO0FBQ0F2akIsYUFBV0ksTUFBWCxDQUFrQm13Qix1QkFBbEIsRUFBMkMseUJBQTNDO0FBRUMsQ0E3T0EsQ0E2T0N0MEQsTUE3T0QsQ0FBRDtBQ0ZBNGpDLEVBQUU1a0MsUUFBRixFQUFZb21DLFVBQVoiLCJmaWxlIjoiYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjIuNFxuICogaHR0cDovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE2LTA1LTIwVDE3OjIzWlxuICovXG5cbihmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrXG4vLyBDYW4ndCBiZSBpbiBzdHJpY3QgbW9kZSwgc2V2ZXJhbCBsaWJzIGluY2x1ZGluZyBBU1AuTkVUIHRyYWNlXG4vLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWZcbi8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCBcInVzZSBzdHJpY3RcIiBjYWxsIGNoYWlucy4gKCMxMzMzNSlcbi8vXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgY29uY2F0ID0gYXJyLmNvbmNhdDtcblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMi4yLjRcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLFxuXG5cdC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xuXHRybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW1xcZGEtel0pL2dpLFxuXG5cdC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcblx0ZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHtcblx0XHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yXG5cdHNlbGVjdG9yOiBcIlwiLFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblx0XHRyZXR1cm4gbnVtICE9IG51bGwgP1xuXG5cdFx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0XHQoIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF0gKSA6XG5cblx0XHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRcdHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cdFx0cmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICkge1xuXHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6IFtdO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJmdW5jdGlvblwiO1xuXHR9LFxuXG5cdGlzQXJyYXk6IEFycmF5LmlzQXJyYXksXG5cblx0aXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fSxcblxuXHRpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAobnVsbHx0cnVlfGZhbHNlfFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdC8vIGFkZGluZyAxIGNvcnJlY3RzIGxvc3Mgb2YgcHJlY2lzaW9uIGZyb20gcGFyc2VGbG9hdCAoIzE1MTAwKVxuXHRcdHZhciByZWFsU3RyaW5nT2JqID0gb2JqICYmIG9iai50b1N0cmluZygpO1xuXHRcdHJldHVybiAhalF1ZXJ5LmlzQXJyYXkoIG9iaiApICYmICggcmVhbFN0cmluZ09iaiAtIHBhcnNlRmxvYXQoIHJlYWxTdHJpbmdPYmogKSArIDEgKSA+PSAwO1xuXHR9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIGtleTtcblxuXHRcdC8vIE5vdCBwbGFpbiBvYmplY3RzOlxuXHRcdC8vIC0gQW55IG9iamVjdCBvciB2YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0NsYXNzXV0gcHJvcGVydHkgaXMgbm90IFwiW29iamVjdCBPYmplY3RdXCJcblx0XHQvLyAtIERPTSBub2Rlc1xuXHRcdC8vIC0gd2luZG93XG5cdFx0aWYgKCBqUXVlcnkudHlwZSggb2JqICkgIT09IFwib2JqZWN0XCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRcdGlmICggb2JqLmNvbnN0cnVjdG9yICYmXG5cdFx0XHRcdCFoYXNPd24uY2FsbCggb2JqLCBcImNvbnN0cnVjdG9yXCIgKSAmJlxuXHRcdFx0XHQhaGFzT3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwge30sIFwiaXNQcm90b3R5cGVPZlwiICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsXG5cdFx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd25cblx0XHRmb3IgKCBrZXkgaW4gb2JqICkge31cblxuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTtcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHR0eXBlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMCwgaU9TPDYgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHRcdHR5cGVvZiBvYmo7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHRcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUgKSB7XG5cdFx0dmFyIHNjcmlwdCxcblx0XHRcdGluZGlyZWN0ID0gZXZhbDtcblxuXHRcdGNvZGUgPSBqUXVlcnkudHJpbSggY29kZSApO1xuXG5cdFx0aWYgKCBjb2RlICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkLCBwcm9sb2d1ZSBwb3NpdGlvblxuXHRcdFx0Ly8gc3RyaWN0IG1vZGUgcHJhZ21hLCBleGVjdXRlIGNvZGUgYnkgaW5qZWN0aW5nIGFcblx0XHRcdC8vIHNjcmlwdCB0YWcgaW50byB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpZiAoIGNvZGUuaW5kZXhPZiggXCJ1c2Ugc3RyaWN0XCIgKSA9PT0gMSApIHtcblx0XHRcdFx0c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXHRcdFx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGF2b2lkIHRoZSBET00gbm9kZSBjcmVhdGlvbiwgaW5zZXJ0aW9uXG5cdFx0XHRcdC8vIGFuZCByZW1vdmFsIGJ5IHVzaW5nIGFuIGluZGlyZWN0IGdsb2JhbCBldmFsXG5cblx0XHRcdFx0aW5kaXJlY3QoIGNvZGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuXHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3Milcblx0Y2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkge1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xuXHR9LFxuXG5cdG5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xXG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuXHQvLyBhcmd1bWVudHMuXG5cdHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdFx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRcdGNvbnRleHQgPSBmbjtcblx0XHRcdGZuID0gdG1wO1xuXHRcdH1cblxuXHRcdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdFx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0XHRpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0XHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdFx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHRcdH07XG5cblx0XHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0XHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRcdHJldHVybiBwcm94eTtcblx0fSxcblxuXHRub3c6IERhdGUubm93LFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbi8vIEpTSGludCB3b3VsZCBlcnJvciBvbiB0aGlzIGNvZGUgZHVlIHRvIHRoZSBTeW1ib2wgbm90IGJlaW5nIGRlZmluZWQgaW4gRVM1LlxuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmpzaGludHJjIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8ganVzdCBkaXNhYmxlIEpTSGludCBmb3IgdGhlc2Vcbi8vIHRocmVlIGxpbmVzLlxuLyoganNoaW50IGlnbm9yZTogc3RhcnQgKi9cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cbi8qIGpzaGludCBpZ25vcmU6IGVuZCAqL1xuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogaU9TIDguMiAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblxuXHRpZiAoIHR5cGUgPT09IFwiZnVuY3Rpb25cIiB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4yLjFcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTUtMTAtMTdcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHNcblx0TUFYX05FR0FUSVZFID0gMSA8PCAzMSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFxcXHgwMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cblx0cmF0dHJpYnV0ZVF1b3RlcyA9IG5ldyBSZWdFeHAoIFwiPVwiICsgd2hpdGVzcGFjZSArIFwiKihbXlxcXFxdJ1xcXCJdKj8pXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIiwgXCJnXCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXHRyZXNjYXBlID0gLyd8XFxcXC9nLFxuXG5cdC8vIENTUyBlc2NhcGVzIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98KFwiICsgd2hpdGVzcGFjZSArIFwiKXwuKVwiLCBcImlnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdFx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI0XG5cdFx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdFx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xuXHRcdFx0ZXNjYXBlZCA6XG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdC8vIEJNUCBjb2RlcG9pbnRcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBuaWRzZWxlY3QsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblxuXHRcdGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdH1cblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IWNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3RvcjtcblxuXHRcdFx0XHQvLyBxU0EgbG9va3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnRcblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3VuZCB0ZWNobmlxdWVcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0aWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApKSApIHtcblx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByZXNjYXBlLCBcIlxcXFwkJlwiICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsIChuaWQgPSBleHBhbmRvKSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdG5pZHNlbGVjdCA9IHJpZGVudGlmaWVyLnRlc3QoIG5pZCApID8gXCIjXCIgKyBuaWQgOiBcIltpZD0nXCIgKyBuaWQgKyBcIiddXCI7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBuaWRzZWxlY3QgKyBcIiBcIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBuZXdTZWxlY3RvciApIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGRpdiApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZGl2LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7XG5cdFx0fVxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdCggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLVxuXHRcdFx0KCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHQvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0XG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblx0cmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gXCJIVE1MXCIgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgcGFyZW50LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCAocGFyZW50ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHBhcmVudC50b3AgIT09IHBhcmVudCApIHtcblx0XHQvLyBTdXBwb3J0OiBJRSAxMVxuXHRcdGlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0cGFyZW50LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZGl2LmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZGl2LmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gSUQgZmluZCBhbmQgZmlsdGVyXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gbSA/IFsgbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU3VwcG9ydDogSUU2Lzdcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0ZGVsZXRlIEV4cHIuZmluZFtcIklEXCJdO1xuXG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRkaXYucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgXCJkaXZcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGRpdiwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHQvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWRcblx0ZXhwciA9IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgXCI9JyQxJ11cIiApO1xuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhY29tcGlsZXJDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXHRcdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoIChub2RlID0gZWxlbVtpKytdKSApIHtcblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsyXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFszXSA9IFwiIFwiICsgbWF0Y2hbM10gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFszXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbXCJDSElMRFwiXS50ZXN0KCBtYXRjaFswXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbM10gKSB7XG5cdFx0XHRcdG1hdGNoWzJdID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApKSAmJlxuXHRcdFx0XHRjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiICk7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFswXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCBcIlwiKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlO1xuXHRcdH0sXG5cblx0XHRcImRpc2FibGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAobm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbXCJlbXB0eVwiXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9KSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9KSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbXCJudGhcIl0gPSBFeHByLnBzZXVkb3NbXCJlcVwiXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgZGlyID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGRpciBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0c3VwcG9ydC5nZXRCeUlkICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHRcdFx0RXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYxICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpID09PSBcIiNcIiA7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRkaXYuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRkaXYuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRyZXR1cm4gZGl2LmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpID09IG51bGw7XG59KSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9KTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG52YXIgcnNpbmdsZVRhZyA9ICggL148KFtcXHctXSspXFxzKlxcLz8+KD86PFxcL1xcMT58KSQvICk7XG5cblxuXG52YXIgcmlzU2ltcGxlID0gL14uW146I1xcW1xcLixdKiQvO1xuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXG5cdH1cblxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXG5cdH1cblxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0aWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG5cdFx0fVxuXG5cdFx0cXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cyApO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0fSApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxID9cblx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW10gOlxuXHRcdGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0XHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHQvLyBOZWVkZWQgYmVjYXVzZSAkKCBzZWxlY3RvciwgY29udGV4dCApIGJlY29tZXMgJCggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yIClcblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0ICk7XG5cdFx0cmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IgKyBcIiBcIiArIHNlbGVjdG9yIDogc2VsZWN0b3I7XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKikpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQmxhY2tiZXJyeSA0LjZcblx0XHRcdFx0XHQvLyBnRUJJRCByZXR1cm5zIG5vZGVzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKCM2OTYzKVxuXHRcdFx0XHRcdGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuY29udGV4dCA9IGRvY3VtZW50O1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXMuY29udGV4dCA9IHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yO1xuXHRcdFx0dGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDpcblx0XHRcdFx0MDtcblxuXHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCBwb3MgP1xuXHRcdFx0XHRcdHBvcy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3R3aGl0ZSA9ICggL1xcUysvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiBqUXVlcnkudHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCBcInJlamVjdGVkXCIgXSxcblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzID09PSBwcm9taXNlID8gbmV3RGVmZXIucHJvbWlzZSgpIDogdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07XG5cblx0XHRcdC8vIHByb21pc2VbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHQvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdXG5cdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblxuXHRcdFx0XHQvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrXG5cdFx0XHRcdH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBwcm9taXNlIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cdFx0XHRsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCxcblxuXHRcdFx0Ly8gdGhlIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8XG5cdFx0XHRcdCggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZC5cblx0XHRcdC8vIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LlxuXHRcdFx0ZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzXG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0Y29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0dmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCB2YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkge1xuXHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY29udGV4dHMsIHZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cblx0XHRcdHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7XG5cblx0XHQvLyBBZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkXG5cdFx0aWYgKCBsZW5ndGggPiAxICkge1xuXHRcdFx0cHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0cHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKClcblx0XHRcdFx0XHRcdC5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApXG5cdFx0XHRcdFx0XHQuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKVxuXHRcdFx0XHRcdFx0LmZhaWwoIGRlZmVycmVkLnJlamVjdCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC0tcmVtYWluaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UncmUgbm90IHdhaXRpbmcgb24gYW55dGhpbmcsIHJlc29sdmUgdGhlIG1hc3RlclxuXHRcdGlmICggIXJlbWFpbmluZyApIHtcblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0O1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0Ly8gQWRkIHRoZSBjYWxsYmFja1xuXHRqUXVlcnkucmVhZHkucHJvbWlzZSgpLmRvbmUoIGZuICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50XG5cdGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7XG5cdFx0aWYgKCBob2xkICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXG5cdFx0Ly8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzXG5cdFx0aWYgKCBqUXVlcnkuZm4udHJpZ2dlckhhbmRsZXIgKSB7XG5cdFx0XHRqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlckhhbmRsZXIoIFwicmVhZHlcIiApO1xuXHRcdFx0alF1ZXJ5KCBkb2N1bWVudCApLm9mZiggXCJyZWFkeVwiICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8qKlxuICogVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbiAqL1xuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG5qUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cdGlmICggIXJlYWR5TGlzdCApIHtcblxuXHRcdHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5cdFx0Ly8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcblx0XHQvLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cblx0XHQvLyBTdXBwb3J0OiBJRTktMTAgb25seVxuXHRcdC8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuXHRcdGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdFx0XHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHRcdFx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0XHRcdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApO1xufTtcblxuLy8gS2ljayBvZmYgdGhlIERPTSByZWFkeSBjaGVjayBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90XG5qUXVlcnkucmVhZHkucHJvbWlzZSgpO1xuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY2hhaW5hYmxlID9cblx0XHRlbGVtcyA6XG5cblx0XHQvLyBHZXRzXG5cdFx0YnVsayA/XG5cdFx0XHRmbi5jYWxsKCBlbGVtcyApIDpcblx0XHRcdGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHQvKiBqc2hpbnQgLVcwMTggKi9cblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdHJlZ2lzdGVyOiBmdW5jdGlvbiggb3duZXIsIGluaXRpYWwgKSB7XG5cdFx0dmFyIHZhbHVlID0gaW5pdGlhbCB8fCB7fTtcblxuXHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlIHByb3BlcnR5XG5cdFx0Ly8gY29uZmlndXJhYmlsaXR5IG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHQvLyBkZWxldGVkIHdpdGggdGhlIGRlbGV0ZSBvcGVyYXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdHJldHVybiBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdH0sXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdGlmICggIWFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgZGF0YSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBwcm9wIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBrZXkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIHN0b3JlZDtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0c3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblxuXHRcdFx0cmV0dXJuIHN0b3JlZCAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c3RvcmVkIDogdGhpcy5nZXQoIG93bmVyLCBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSwgbmFtZSwgY2FtZWwsXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dGhpcy5yZWdpc3Rlciggb3duZXIgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBcIm5hbWVcIiBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdoZW4gZGF0YSBpcyBpbml0aWFsbHkgY3JlYXRlZCwgdmlhIChcImtleVwiLCBcInZhbFwiKSBzaWduYXR1cmUsXG5cdFx0XHRcdC8vIGtleXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLlxuXHRcdFx0XHQvLyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBfaG93XyBhIGtleSB3YXMgYWRkZWQsIHJlbW92ZVxuXHRcdFx0XHQvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2XG5cdFx0XHRcdC8vIFRoaXMgd2lsbCBvbmx5IHBlbmFsaXplIHRoZSBhcnJheSBhcmd1bWVudCBwYXRoLlxuXHRcdFx0XHRuYW1lID0ga2V5LmNvbmNhdCgga2V5Lm1hcCggalF1ZXJ5LmNhbWVsQ2FzZSApICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYW1lbCA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIFRyeSB0aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uXG5cdFx0XHRcdGlmICgga2V5IGluIGNhY2hlICkge1xuXHRcdFx0XHRcdG5hbWUgPSBbIGtleSwgY2FtZWwgXTtcblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRcdG5hbWUgPSBjYW1lbDtcblx0XHRcdFx0XHRuYW1lID0gbmFtZSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0XHRbIG5hbWUgXSA6ICggbmFtZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIG5hbWVbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NStcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3XG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZGF0YSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDpcblx0XHRcdFx0XHRkYXRhID09PSBcImZhbHNlXCIgPyBmYWxzZSA6XG5cdFx0XHRcdFx0ZGF0YSA9PT0gXCJudWxsXCIgPyBudWxsIDpcblxuXHRcdFx0XHRcdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdFx0XHRcdFx0K2RhdGEgKyBcIlwiID09PSBkYXRhID8gK2RhdGEgOlxuXHRcdFx0XHRcdHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOlxuXHRcdFx0XHRcdGRhdGE7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMStcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhLCBjYW1lbEtleTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gd2l0aCB0aGUga2V5IGFzLWlzXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApIHx8XG5cblx0XHRcdFx0XHQvLyBUcnkgdG8gZmluZCBkYXNoZWQga2V5IGlmIGl0IGV4aXN0cyAoZ2gtMjc3OSlcblx0XHRcdFx0XHQvLyBUaGlzIGlzIGZvciAyLjIueCBvbmx5XG5cdFx0XHRcdFx0ZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCkgKTtcblxuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyB3aXRoIHRoZSBrZXkgY2FtZWxpemVkXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGNhbWVsS2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGNhbWVsS2V5LCB1bmRlZmluZWQgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHRjYW1lbEtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBGaXJzdCwgYXR0ZW1wdCB0byBzdG9yZSBhIGNvcHkgb3IgcmVmZXJlbmNlIG9mIGFueVxuXHRcdFx0XHQvLyBkYXRhIHRoYXQgbWlnaHQndmUgYmVlbiBzdG9yZSB3aXRoIGEgY2FtZWxDYXNlZCBrZXkuXG5cdFx0XHRcdHZhciBkYXRhID0gZGF0YVVzZXIuZ2V0KCB0aGlzLCBjYW1lbEtleSApO1xuXG5cdFx0XHRcdC8vIEZvciBIVE1MNSBkYXRhLSogYXR0cmlidXRlIGludGVyb3AsIHdlIGhhdmUgdG9cblx0XHRcdFx0Ly8gc3RvcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1lbENhc2UgZm9ybS5cblx0XHRcdFx0Ly8gVGhpcyBtaWdodCBub3QgYXBwbHkgdG8gYWxsIHByb3BlcnRpZXMuLi4qXG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywgY2FtZWxLZXksIHZhbHVlICk7XG5cblx0XHRcdFx0Ly8gKi4uLiBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgX2FjdHVhbGx5X1xuXHRcdFx0XHQvLyBoYXZlIGRhc2hlcywgd2UgbmVlZCB0byBhbHNvIHN0b3JlIGEgY29weSBvZiB0aGF0XG5cdFx0XHRcdC8vIHVuY2hhbmdlZCBwcm9wZXJ0eS5cblx0XHRcdFx0aWYgKCBrZXkuaW5kZXhPZiggXCItXCIgKSA+IC0xICYmIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBpc0hpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHQhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCxcblx0XHRzY2FsZSA9IDEsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gdHdlZW4uY3VyKCk7IH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7IH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdGRvIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyouXG5cdFx0XHQvLyBVc2Ugc3RyaW5nIGZvciBkb3VibGluZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvd1xuXHRcdFx0c2NhbGUgPSBzY2FsZSB8fCBcIi41XCI7XG5cblx0XHRcdC8vIEFkanVzdCBhbmQgYXBwbHlcblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKVxuXHRcdC8vIEJyZWFrIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2guXG5cdFx0fSB3aGlsZSAoXG5cdFx0XHRzY2FsZSAhPT0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCApICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFtcXHc6LV0rKS8gKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUU5XG5cdG9wdGlvbjogWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdLFxuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxuLy8gU3VwcG9ydDogSUU5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiID9cblx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApIDpcblx0XHRcdHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgP1xuXHRcdFx0XHRjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApIDpcblx0XHRcdFtdO1xuXG5cdHJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/XG5cdFx0alF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICkgOlxuXHRcdHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRhaW5zLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDJcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MlxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggY29udGFpbnMgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMC00LjMsIFNhZmFyaTw9NS4xXG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBTYWZhcmk8PTUuMSwgQW5kcm9pZDw0LjJcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUU5XG4vLyBTZWUgIzEzMzkzIGZvciBtb3JlIGluZm9cbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cylcblx0XHRpZiAoICFlbGVtRGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaixcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvciAyKSBoYXZlIG5hbWVzcGFjZShzKVxuXHRcdFx0XHQvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgbWF0Y2hlcywgc2VsLCBoYW5kbGVPYmosXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gU3VwcG9ydCAoYXQgbGVhc3QpOiBDaHJvbWUsIElFOVxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAoIzEzMTgwKVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDw9NDIrXG5cdFx0Ly8gQXZvaWQgbm9uLWxlZnQtY2xpY2sgaW4gRkYgYnV0IGRvbid0IGJsb2NrIElFIHJhZGlvIGV2ZW50cyAoIzM4NjEsIGdoLTIzNDMpXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlwZSAmJlxuXHRcdFx0KCBldmVudC50eXBlICE9PSBcImNsaWNrXCIgfHwgaXNOYU4oIGV2ZW50LmJ1dHRvbiApIHx8IGV2ZW50LmJ1dHRvbiA8IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAoIGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSBcImNsaWNrXCIgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVzID0gW107XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZXMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHQvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudFxuXHRwcm9wczogKCBcImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRldGFpbCBldmVudFBoYXNlIFwiICtcblx0XHRcIm1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2hcIiApLnNwbGl0KCBcIiBcIiApLFxuXG5cdGZpeEhvb2tzOiB7fSxcblxuXHRrZXlIb29rczoge1xuXHRcdHByb3BzOiBcImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGVcIi5zcGxpdCggXCIgXCIgKSxcblx0XHRmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7XG5cblx0XHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xuXHRcdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICkge1xuXHRcdFx0XHRldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5jaGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cdH0sXG5cblx0bW91c2VIb29rczoge1xuXHRcdHByb3BzOiAoIFwiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBcIiArXG5cdFx0XHRcInNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnRcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRcdGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcblx0XHRcdHZhciBldmVudERvYywgZG9jLCBib2R5LFxuXHRcdFx0XHRidXR0b24gPSBvcmlnaW5hbC5idXR0b247XG5cblx0XHRcdC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGVcblx0XHRcdGlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7XG5cdFx0XHRcdGV2ZW50RG9jID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG5cdFx0XHRcdGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdFx0Ym9keSA9IGV2ZW50RG9jLmJvZHk7XG5cblx0XHRcdFx0ZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRYICtcblx0XHRcdFx0XHQoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLVxuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTtcblx0XHRcdFx0ZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICtcblx0XHRcdFx0XHQoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLVxuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDAgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdFx0Ly8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXRcblx0XHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRldmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHtcblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6ZSBzb21lIHByb3BlcnRpZXNcblx0XHR2YXIgaSwgcHJvcCwgY29weSxcblx0XHRcdHR5cGUgPSBldmVudC50eXBlLFxuXHRcdFx0b3JpZ2luYWxFdmVudCA9IGV2ZW50LFxuXHRcdFx0Zml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTtcblxuXHRcdGlmICggIWZpeEhvb2sgKSB7XG5cdFx0XHR0aGlzLmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID1cblx0XHRcdFx0cm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDpcblx0XHRcdFx0cmtleUV2ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMua2V5SG9va3MgOlxuXHRcdFx0XHR7fTtcblx0XHR9XG5cdFx0Y29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wcztcblxuXHRcdGV2ZW50ID0gbmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXG5cdFx0aSA9IGNvcHkubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0cHJvcCA9IGNvcHlbIGkgXTtcblx0XHRcdGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQ29yZG92YSAyLjUgKFdlYktpdCkgKCMxMzI1NSlcblx0XHQvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNuJ3Rcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBkb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHRpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaXhIb29rLmZpbHRlciA/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGZvY3VzOiB7XG5cblx0XHRcdC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNpblwiXG5cdFx0fSxcblx0XHRibHVyOiB7XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHtcblx0XHRcdFx0XHR0aGlzLmJsdXIoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNvdXRcIlxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1xcdzotXSspW14+XSopXFwvPi9naSxcblxuXHQvLyBTdXBwb3J0OiBJRSAxMC0xMSwgRWRnZSAxMDI0MCtcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cnNjcmlwdFR5cGVNYXNrZWQgPSAvXnRydWVcXC8oLiopLyxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBNYW5pcHVsYXRpbmcgdGFibGVzIHJlcXVpcmVzIGEgdGJvZHlcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRqUXVlcnkubm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgP1xuXG5cdFx0ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJ0Ym9keVwiIClbIDAgXSB8fFxuXHRcdFx0ZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGJvZHlcIiApICkgOlxuXHRcdGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdHZhciBtYXRjaCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApO1xuXG5cdGlmICggbWF0Y2ggKSB7XG5cdFx0ZWxlbS50eXBlID0gbWF0Y2hbIDEgXTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7XG5cdFx0cGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkZWxldGUgcGRhdGFDdXIuaGFuZGxlO1xuXHRcdFx0cGRhdGFDdXIuZXZlbnRzID0ge307XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCBpc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MlxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIG5vZGUub3duZXJEb2N1bWVudCwgbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gS2VlcCBkb21NYW5pcCBleHBvc2VkIHVudGlsIDMuMCAoZ2gtMjIyNSlcblx0ZG9tTWFuaXA6IGRvbU1hbmlwLFxuXG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFF0V2ViS2l0XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzXG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcblxuXG52YXIgaWZyYW1lLFxuXHRlbGVtZGlzcGxheSA9IHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3hcblx0XHQvLyBXZSBoYXZlIHRvIHByZS1kZWZpbmUgdGhlc2UgdmFsdWVzIGZvciBGRiAoIzEwMjI3KVxuXHRcdEhUTUw6IFwiYmxvY2tcIixcblx0XHRCT0RZOiBcImJsb2NrXCJcblx0fTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3RcbiAqL1xuXG4vLyBDYWxsZWQgb25seSBmcm9tIHdpdGhpbiBkZWZhdWx0RGlzcGxheVxuZnVuY3Rpb24gYWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkge1xuXHR2YXIgZWxlbSA9IGpRdWVyeSggZG9jLmNyZWF0ZUVsZW1lbnQoIG5hbWUgKSApLmFwcGVuZFRvKCBkb2MuYm9keSApLFxuXG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW1bIDAgXSwgXCJkaXNwbGF5XCIgKTtcblxuXHQvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVudCxcblx0Ly8gc28gdXNlIFwiZGV0YWNoXCIgbWV0aG9kIGFzIGZhc3Qgd2F5IHRvIGdldCByaWQgb2YgdGhlIGVsZW1lbnRcblx0ZWxlbS5kZXRhY2goKTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1lXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHtcblx0dmFyIGRvYyA9IGRvY3VtZW50LFxuXHRcdGRpc3BsYXkgPSBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTtcblxuXHRpZiAoICFkaXNwbGF5ICkge1xuXHRcdGRpc3BsYXkgPSBhY3R1YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7XG5cblx0XHQvLyBJZiB0aGUgc2ltcGxlIHdheSBmYWlscywgcmVhZCBmcm9tIGluc2lkZSBhbiBpZnJhbWVcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiIHx8ICFkaXNwbGF5ICkge1xuXG5cdFx0XHQvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBpZnJhbWUgaWYgcG9zc2libGVcblx0XHRcdGlmcmFtZSA9ICggaWZyYW1lIHx8IGpRdWVyeSggXCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+XCIgKSApXG5cdFx0XHRcdC5hcHBlbmRUbyggZG9jLmRvY3VtZW50RWxlbWVudCApO1xuXG5cdFx0XHQvLyBBbHdheXMgd3JpdGUgYSBuZXcgSFRNTCBza2VsZXRvbiBzbyBXZWJraXQgYW5kIEZpcmVmb3ggZG9uJ3QgY2hva2Ugb24gcmV1c2Vcblx0XHRcdGRvYyA9IGlmcmFtZVsgMCBdLmNvbnRlbnREb2N1bWVudDtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUVcblx0XHRcdGRvYy53cml0ZSgpO1xuXHRcdFx0ZG9jLmNsb3NlKCk7XG5cblx0XHRcdGRpc3BsYXkgPSBhY3R1YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7XG5cdFx0XHRpZnJhbWUuZGV0YWNoKCk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5XG5cdFx0ZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXHR9XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG52YXIgcm1hcmdpbiA9ICggL15tYXJnaW4vICk7XG5cbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7XCIgK1xuXHRcdFwicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlXCI7XG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyOSwgQW5kcm9pZCAyLjNcblx0XHRcdC8vIFZlbmRvci1wcmVmaXggYm94LXNpemluZ1xuXHRcdFx0XCItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCIgK1xuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcInRvcDoxJTt3aWR0aDo1MCVcIjtcblx0XHRkaXYuaW5uZXJIVE1MID0gXCJcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSBcIjJweFwiO1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09IFwiNHB4XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gXCI1MCVcIjtcblx0XHRwaXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09IFwiNHB4XCI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXHR9XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBUaGlzIHRlc3QgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGJ1dCB3ZSBzdGlsbCBkbyBtZW1vaXppbmdcblx0XHRcdC8vIHNpbmNlIHdlIGNhbiB1c2UgdGhlIGJveFNpemluZ1JlbGlhYmxlIHByZS1jb21wdXRpbmcuXG5cdFx0XHQvLyBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHdhcyBhbHJlYWR5IHBlcmZvcm1lZCwgdGhvdWdoLlxuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxNYXJnaW5SaWdodDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuM1xuXHRcdFx0Ly8gV2UncmUgY2hlY2tpbmcgZm9yIGJveFNpemluZ1JlbGlhYmxlVmFsIGhlcmUgaW5zdGVhZCBvZiBwaXhlbE1hcmdpblJpZ2h0VmFsXG5cdFx0XHQvLyBzaW5jZSB0aGF0IGNvbXByZXNzZXMgYmV0dGVyIGFuZCB0aGV5J3JlIGNvbXB1dGVkIHRvZ2V0aGVyIGFueXdheS5cblx0XHRcdGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwaXhlbE1hcmdpblJpZ2h0VmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IG9ubHksIEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gMzdcblx0XHRcdGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcblx0XHRcdC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHlcblx0XHRcdC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gKCMzMzMzKVxuXHRcdFx0Ly8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0XG5cdFx0XHQvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuXG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHRtYXJnaW5EaXYgPSBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHQvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nXG5cdFx0XHRtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuXHRcdFx0XHQvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmdcblx0XHRcdFx0XCItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtcIiArXG5cdFx0XHRcdFwiZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjBcIjtcblx0XHRcdG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9IFwiMFwiO1xuXHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gXCIxcHhcIjtcblx0XHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHRcdHJldCA9ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2ICkubWFyZ2luUmlnaHQgKTtcblxuXHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblx0XHRcdGRpdi5yZW1vdmVDaGlsZCggbWFyZ2luRGl2ICk7XG5cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXHRyZXQgPSBjb21wdXRlZCA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdIDogdW5kZWZpbmVkO1xuXG5cdC8vIFN1cHBvcnQ6IE9wZXJhIDEyLjF4IG9ubHlcblx0Ly8gRmFsbCBiYWNrIHRvIHN0eWxlIGV2ZW4gd2l0aG91dCBjb21wdXRlZFxuXHQvLyBjb21wdXRlZCBpcyB1bmRlZmluZWQgZm9yIGVsZW1zIG9uIGRvY3VtZW50IGZyYWdtZW50c1xuXHRpZiAoICggcmV0ID09PSBcIlwiIHx8IHJldCA9PT0gdW5kZWZpbmVkICkgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7XG5cdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRTlcblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgKCMxMjUzNylcblx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbE1hcmdpblJpZ2h0KCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9LFxuXG5cdGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk9cIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGU7XG5cbi8vIFJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkXG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHtcblx0dmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApID9cblxuXHRcdC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvblxuXHRcdDQgOlxuXG5cdFx0Ly8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllc1xuXHRcdG5hbWUgPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXG5cdFx0dmFsID0gMDtcblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0XG5cdFx0aWYgKCBleHRyYSA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnRcblx0XHRcdGlmICggZXh0cmEgPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHR2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHR2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZ1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWVcblx0dmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLFxuXHRcdHZhbCA9IG5hbWUgPT09IFwid2lkdGhcIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCxcblx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0Ly8gU29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkXG5cdC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTI4NVxuXHQvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2Njhcblx0aWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHtcblxuXHRcdC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeVxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0aWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkge1xuXHRcdFx0dmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uXG5cdFx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzXG5cdFx0Ly8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZVxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJlxuXHRcdFx0KCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTtcblxuXHRcdC8vIE5vcm1hbGl6ZSBcIlwiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmFcblx0XHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXHR9XG5cblx0Ly8gVXNlIHRoZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXNcblx0cmV0dXJuICggdmFsICtcblx0XHRhdWdtZW50V2lkdGhPckhlaWdodChcblx0XHRcdGVsZW0sXG5cdFx0XHRuYW1lLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlc1xuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSwgaGlkZGVuLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKTtcblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpc1xuXHRcdFx0Ly8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdFxuXHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25lXG5cdFx0XHQvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpc1xuXHRcdFx0Ly8gZm9yIHN1Y2ggYW4gZWxlbWVudFxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuYWNjZXNzKFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XCJvbGRkaXNwbGF5XCIsXG5cdFx0XHRcdFx0ZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRoaWRkZW4gPSBpc0hpZGRlbiggZWxlbSApO1xuXG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiIHx8ICFoaWRkZW4gKSB7XG5cdFx0XHRcdGRhdGFQcml2LnNldChcblx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFwib2xkZGlzcGxheVwiLFxuXHRcdFx0XHRcdGhpZGRlbiA/IGRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3Bcblx0Ly8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmICggIXNob3cgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8IFwiXCIgOiBcIm5vbmVcIjtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7XG5cdFx0XCJmbG9hdFwiOiBcImNzc0Zsb2F0XCJcblx0fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHRuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8XG5cdFx0XHQoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHxcblx0XHRcdCggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTtcblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXHRcdFx0XHRcdGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xuXHRcdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0gKSxcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSAmJiBhdWdtZW50V2lkdGhPckhlaWdodChcblx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gU3VwcG9ydDogQW5kcm9pZCAyLjNcbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiBzd2FwKCBlbGVtLCB7IFwiZGlzcGxheVwiOiBcImlubGluZS1ibG9ja1wiIH0sXG5cdFx0XHRcdGN1ckNTUywgWyBlbGVtLCBcIm1hcmdpblJpZ2h0XCIgXSApO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIHR3ZWVuLmVsZW0uc3R5bGVbIGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0gbnVsbCB8fFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUU5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgdGltZXJJZCxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0LyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLCBkaXNwbGF5LCBjaGVja0Rpc3BsYXksXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBIYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzXG5cdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiaGVpZ2h0XCIgaW4gcHJvcHMgfHwgXCJ3aWR0aFwiIGluIHByb3BzICkgKSB7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFrcyBvdXRcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3Rcblx0XHQvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmRcblx0XHQvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZVxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGhcblx0XHQvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkXG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cblx0XHQvLyBUZXN0IGRlZmF1bHQgZGlzcGxheSBpZiBkaXNwbGF5IGlzIGN1cnJlbnRseSBcIm5vbmVcIlxuXHRcdGNoZWNrRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID9cblx0XHRcdGRhdGFQcml2LmdldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKSB8fCBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheTtcblxuXHRcdGlmICggY2hlY2tEaXNwbGF5ID09PSBcImlubGluZVwiICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gc2hvdy9oaWRlIHBhc3Ncblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy5leGVjKCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBkYXRhU2hvdyBsZWZ0IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlkZSBvciBzaG93XG5cdFx0XHRcdC8vIGFuZCB3ZSBhcmUgZ29pbmcgdG8gcHJvY2VlZCB3aXRoIHNob3csIHdlIHNob3VsZCBwcmV0ZW5kIHRvIGJlIGhpZGRlblxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblxuXHRcdC8vIEFueSBub24tZnggdmFsdWUgc3RvcHMgdXMgZnJvbSByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWVcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlzcGxheSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRpZiAoICFqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHt9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVuYWJsZXMgLnN0b3AoKS50b2dnbGUoKSB0byBcInJldmVyc2VcIlxuXHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHR9XG5cdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRqUXVlcnkoIGVsZW0gKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeSggZWxlbSApLmhpZGUoKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwcm9wO1xuXG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0dHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblxuXHRcdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDtcblx0XHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdFx0dHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7XG5cdFx0XHRcdFx0dHdlZW4uc3RhcnQgPSBwcm9wID09PSBcIndpZHRoXCIgfHwgcHJvcCA9PT0gXCJoZWlnaHRcIiA/IDEgOiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdC8vIElmIHRoaXMgaXMgYSBub29wIGxpa2UgLmhpZGUoKS5oaWRlKCksIHJlc3RvcmUgYW4gb3ZlcndyaXR0ZW4gZGlzcGxheSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCAoIGRpc3BsYXkgPT09IFwibm9uZVwiID8gZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA6IGRpc3BsYXkgKSA9PT0gXCJpbmxpbmVcIiApIHtcblx0XHRzdHlsZS5kaXNwbGF5ID0gZGlzcGxheTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0alF1ZXJ5LnByb3h5KCByZXN1bHQuc3RvcCwgcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0Ly8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0cmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0alF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gXCJudW1iZXJcIiA/XG5cdFx0b3B0LmR1cmF0aW9uIDogb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgP1xuXHRcdFx0alF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0galF1ZXJ5Lm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0aWYgKCB0aW1lcigpICkge1xuXHRcdGpRdWVyeS5meC5zdGFydCgpO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS50aW1lcnMucG9wKCk7XG5cdH1cbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggIXRpbWVySWQgKSB7XG5cdFx0dGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHR9XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHR3aW5kb3cuY2xlYXJJbnRlcnZhbCggdGltZXJJZCApO1xuXG5cdHRpbWVySWQgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBpT1M8PTUuMSwgQW5kcm9pZDw9NC4yK1xuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUU8PTExK1xuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8PTIuM1xuXHQvLyBPcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJsZWRcblx0c2VsZWN0LmRpc2FibGVkID0gdHJ1ZTtcblx0c3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUU8PTExK1xuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZVxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRqUXVlcnkubm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsIHByb3BOYW1lLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXG5cdFx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgKCMxMDg3MClcblx0XHRcdFx0aWYgKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0XHRcdC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlXG5cdFx0XHRcdFx0ZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGU7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIG5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRyZXR1cm4gdGFiaW5kZXggP1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKSA6XG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/XG5cdFx0XHRcdFx0XHRcdDAgOlxuXHRcdFx0XHRcdFx0XHQtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG52YXIgcmNsYXNzID0gL1tcXHRcXHJcXG5cXGZdL2c7XG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlICkge1xuXHRcdFx0Y2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIFwiIFwiICsgY3VyVmFsdWUgKyBcIiBcIiApLnJlcGxhY2UoIHJjbGFzcywgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBqUXVlcnkudHJpbSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlICkge1xuXHRcdFx0Y2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggXCIgXCIgKyBjdXJWYWx1ZSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBnZXRDbGFzcyggZWxlbSApICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZyxcblx0cnNwYWNlcyA9IC9bXFx4MjBcXHRcXHJcXG5cXGZdKy9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiID9cblxuXHRcdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0XHRyZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApIDpcblxuXHRcdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRcdHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwLTExK1xuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0alF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKS5yZXBsYWNlKCByc3BhY2VzLCBcIiBcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIgfHwgaW5kZXggPCAwLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aCxcblx0XHRcdFx0XHRpID0gaW5kZXggPCAwID9cblx0XHRcdFx0XHRcdG1heCA6XG5cdFx0XHRcdFx0XHRvbmUgPyBpbmRleCA6IDA7XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCggc3VwcG9ydC5vcHREaXNhYmxlZCA/XG5cdFx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09PSBudWxsICkgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvO1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSwgU2FmYXJpXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IGpRdWVyeS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG4vLyBXb3JrYXJvdW5kIGZhaWx1cmUgdG8gc3RyaW5nLWNhc3QgbnVsbCBpbnB1dFxualF1ZXJ5LnBhcnNlSlNPTiA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSArIFwiXCIgKTtcbn07XG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWw7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRTlcblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHR4bWwgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJ0cyA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IGpRdWVyeS5wYXJzZUpTT04sXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIFRoZSBqcVhIUiBzdGF0ZVxuXHRcdFx0c3RhdGUgPSAwLFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0dmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKS5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuYWRkO1xuXHRcdGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lO1xuXHRcdGpxWEhSLmVycm9yID0ganFYSFIuZmFpbDtcblxuXHRcdC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKVxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKS5yZXBsYWNlKCByaGFzaCwgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOC0xMStcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gaWYgdXJsIGlzIG1hbGZvcm1lZCwgZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTgtMTErXG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIHN0YXRlID09PSAyICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybDtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSAoIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGEgKTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgP1xuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhICdfJyBwYXJhbWV0ZXIsIHNldCBpdHMgdmFsdWVcblx0XHRcdFx0XHRjYWNoZVVSTC5yZXBsYWNlKCBydHMsIFwiJDFfPVwiICsgbm9uY2UrKyApIDpcblxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSBhZGQgb25lIHRvIHRoZSBlbmRcblx0XHRcdFx0XHRjYWNoZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyBub25jZSsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Zm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkge1xuXHRcdFx0anFYSFJbIGkgXSggc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHN0YXRlID0gMTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lXG5cdFx0XHRcdGlmICggc3RhdGUgPCAyICkge1xuXHRcdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cblx0XHRcdFx0Ly8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIENhbGxlZCBvbmNlXG5cdFx0XHRpZiAoIHN0YXRlID09PSAyICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXRlIGlzIFwiZG9uZVwiIG5vd1xuXHRcdFx0c3RhdGUgPSAyO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblx0XHRcInRocm93c1wiOiB0cnVlXG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImJvZHlcIiApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0XHR9XG5cdFx0fSApLmVuZCgpO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHQvLyBTdXBwb3J0OiBPcGVyYSA8PSAxMi4xMlxuXHQvLyBPcGVyYSByZXBvcnRzIG9mZnNldFdpZHRocyBhbmQgb2Zmc2V0SGVpZ2h0cyBsZXNzIHRoYW4gemVybyBvbiBzb21lIGVsZW1lbnRzXG5cdC8vIFVzZSBPUiBpbnN0ZWFkIG9mIEFORCBhcyB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZSBpZiBlaXRoZXIgaXMgdHJ1ZVxuXHQvLyBTZWUgdGlja2V0cyAjMTA0MDYgYW5kICMxMzEzMlxuXHRyZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA+IDAgfHwgZWxlbS5vZmZzZXRIZWlnaHQgPiAwIHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwO1xufTtcblxuXG5cblxudmFyIHIyMCA9IC8lMjAvZyxcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZVxuXHRcdFx0dmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7XG5cdFx0fTtcblxuXHQvLyBTZXQgdHJhZGl0aW9uYWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLlxuXHRpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0dHJhZGl0aW9uYWwgPSBqUXVlcnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9IClcblx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdHJldHVybiB2YWwgPT0gbnVsbCA/XG5cdFx0XHRcdG51bGwgOlxuXHRcdFx0XHRqUXVlcnkuaXNBcnJheSggdmFsICkgP1xuXHRcdFx0XHRcdGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHR7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUU5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFOVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApLnByb3AoIHtcblx0XHRcdFx0XHRjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsXG5cdFx0XHRcdFx0c3JjOiBzLnVybFxuXHRcdFx0XHR9ICkub24oXG5cdFx0XHRcdFx0XCJsb2FkIGVycm9yXCIsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHR2YXIgcGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICksXG5cdFx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZFxudmFyIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQ7XG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdGlmICggdHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIiAmJiBfbG9hZCApIHtcblx0XHRyZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG5cblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0galF1ZXJ5LnRyaW0oIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG4vKipcbiAqIEdldHMgYSB3aW5kb3cgZnJvbSBhbiBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0Vmlldztcbn1cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIGRvY0VsZW0sIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRib3ggPSB7IHRvcDogMCwgbGVmdDogMCB9LFxuXHRcdFx0ZG9jID0gZWxlbSAmJiBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRpZiAoICFkb2MgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHQvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGVcblx0XHRpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHtcblx0XHRcdHJldHVybiBib3g7XG5cdFx0fVxuXG5cdFx0Ym94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBnZXRXaW5kb3coIGRvYyApO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IGJveC50b3AgKyB3aW4ucGFnZVlPZmZzZXQgLSBkb2NFbGVtLmNsaWVudFRvcCxcblx0XHRcdGxlZnQ6IGJveC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0XG5cdFx0fTtcblx0fSxcblxuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gRml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHdpbmRvdyAocGFyZW50T2Zmc2V0ID0ge3RvcDowLCBsZWZ0OiAwfSxcblx0XHQvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpO1xuXG5cdFx0XHQvLyBHZXQgY29ycmVjdCBvZmZzZXRzXG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXHRcdFx0aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJodG1sXCIgKSApIHtcblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnNcblx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblx0XHRcdHZhciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTtcblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpPDctOCssIENocm9tZTwzNy00NCtcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIyOTI4MFxuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZVxuXHRcdFx0XHRcdC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjpcblx0XHRcdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzc2NFxuXHRcdFx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXHRzaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5sZW5ndGg7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmFuZFNlbGYgPSBqUXVlcnkuZm4uYWRkQmFjaztcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoICFub0dsb2JhbCApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5yZXR1cm4galF1ZXJ5O1xufSkpO1xuIiwiLyoqXG4gKiB3aGF0LWlucHV0IC0gQSBnbG9iYWwgdXRpbGl0eSBmb3IgdHJhY2tpbmcgdGhlIGN1cnJlbnQgaW5wdXQgbWV0aG9kIChtb3VzZSwga2V5Ym9hcmQgb3IgdG91Y2gpLlxuICogQHZlcnNpb24gdjQuMC42XG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGVuMXNldmVuL3doYXQtaW5wdXRcbiAqIEBsaWNlbnNlIE1JVFxuICovXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIndoYXRJbnB1dFwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ3aGF0SW5wdXRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wid2hhdElucHV0XCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuXG5cdCAgLypcblx0ICAgIC0tLS0tLS0tLS0tLS0tLVxuXHQgICAgVmFyaWFibGVzXG5cdCAgICAtLS0tLS0tLS0tLS0tLS1cblx0ICAqL1xuXG5cdCAgLy8gY2FjaGUgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG5cdCAgdmFyIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblx0ICAvLyBsYXN0IHVzZWQgaW5wdXQgdHlwZVxuXHQgIHZhciBjdXJyZW50SW5wdXQgPSAnaW5pdGlhbCc7XG5cblx0ICAvLyBsYXN0IHVzZWQgaW5wdXQgaW50ZW50XG5cdCAgdmFyIGN1cnJlbnRJbnRlbnQgPSBudWxsO1xuXG5cdCAgLy8gZm9ybSBpbnB1dCB0eXBlc1xuXHQgIHZhciBmb3JtSW5wdXRzID0gW1xuXHQgICAgJ2lucHV0Jyxcblx0ICAgICdzZWxlY3QnLFxuXHQgICAgJ3RleHRhcmVhJ1xuXHQgIF07XG5cblx0ICAvLyBsaXN0IG9mIG1vZGlmaWVyIGtleXMgY29tbW9ubHkgdXNlZCB3aXRoIHRoZSBtb3VzZSBhbmRcblx0ICAvLyBjYW4gYmUgc2FmZWx5IGlnbm9yZWQgdG8gcHJldmVudCBmYWxzZSBrZXlib2FyZCBkZXRlY3Rpb25cblx0ICB2YXIgaWdub3JlTWFwID0gW1xuXHQgICAgMTYsIC8vIHNoaWZ0XG5cdCAgICAxNywgLy8gY29udHJvbFxuXHQgICAgMTgsIC8vIGFsdFxuXHQgICAgOTEsIC8vIFdpbmRvd3Mga2V5IC8gbGVmdCBBcHBsZSBjbWRcblx0ICAgIDkzICAvLyBXaW5kb3dzIG1lbnUgLyByaWdodCBBcHBsZSBjbWRcblx0ICBdO1xuXG5cdCAgLy8gbWFwcGluZyBvZiBldmVudHMgdG8gaW5wdXQgdHlwZXNcblx0ICB2YXIgaW5wdXRNYXAgPSB7XG5cdCAgICAna2V5dXAnOiAna2V5Ym9hcmQnLFxuXHQgICAgJ21vdXNlZG93bic6ICdtb3VzZScsXG5cdCAgICAnbW91c2Vtb3ZlJzogJ21vdXNlJyxcblx0ICAgICdNU1BvaW50ZXJEb3duJzogJ3BvaW50ZXInLFxuXHQgICAgJ01TUG9pbnRlck1vdmUnOiAncG9pbnRlcicsXG5cdCAgICAncG9pbnRlcmRvd24nOiAncG9pbnRlcicsXG5cdCAgICAncG9pbnRlcm1vdmUnOiAncG9pbnRlcicsXG5cdCAgICAndG91Y2hzdGFydCc6ICd0b3VjaCdcblx0ICB9O1xuXG5cdCAgLy8gYXJyYXkgb2YgYWxsIHVzZWQgaW5wdXQgdHlwZXNcblx0ICB2YXIgaW5wdXRUeXBlcyA9IFtdO1xuXG5cdCAgLy8gYm9vbGVhbjogdHJ1ZSBpZiB0b3VjaCBidWZmZXIgdGltZXIgaXMgcnVubmluZ1xuXHQgIHZhciBpc0J1ZmZlcmluZyA9IGZhbHNlO1xuXG5cdCAgLy8gbWFwIG9mIElFIDEwIHBvaW50ZXIgZXZlbnRzXG5cdCAgdmFyIHBvaW50ZXJNYXAgPSB7XG5cdCAgICAyOiAndG91Y2gnLFxuXHQgICAgMzogJ3RvdWNoJywgLy8gdHJlYXQgcGVuIGxpa2UgdG91Y2hcblx0ICAgIDQ6ICdtb3VzZSdcblx0ICB9O1xuXG5cdCAgLy8gdG91Y2ggYnVmZmVyIHRpbWVyXG5cdCAgdmFyIHRvdWNoVGltZXIgPSBudWxsO1xuXG5cblx0ICAvKlxuXHQgICAgLS0tLS0tLS0tLS0tLS0tXG5cdCAgICBTZXQgdXBcblx0ICAgIC0tLS0tLS0tLS0tLS0tLVxuXHQgICovXG5cblx0ICB2YXIgc2V0VXAgPSBmdW5jdGlvbigpIHtcblxuXHQgICAgLy8gYWRkIGNvcnJlY3QgbW91c2Ugd2hlZWwgZXZlbnQgbWFwcGluZyB0byBgaW5wdXRNYXBgXG5cdCAgICBpbnB1dE1hcFtkZXRlY3RXaGVlbCgpXSA9ICdtb3VzZSc7XG5cblx0ICAgIGFkZExpc3RlbmVycygpO1xuXHQgICAgc2V0SW5wdXQoKTtcblx0ICB9O1xuXG5cblx0ICAvKlxuXHQgICAgLS0tLS0tLS0tLS0tLS0tXG5cdCAgICBFdmVudHNcblx0ICAgIC0tLS0tLS0tLS0tLS0tLVxuXHQgICovXG5cblx0ICB2YXIgYWRkTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG5cblx0ICAgIC8vIGBwb2ludGVybW92ZWAsIGBNU1BvaW50ZXJNb3ZlYCwgYG1vdXNlbW92ZWAgYW5kIG1vdXNlIHdoZWVsIGV2ZW50IGJpbmRpbmdcblx0ICAgIC8vIGNhbiBvbmx5IGRlbW9uc3RyYXRlIHBvdGVudGlhbCwgYnV0IG5vdCBhY3R1YWwsIGludGVyYWN0aW9uXG5cdCAgICAvLyBhbmQgYXJlIHRyZWF0ZWQgc2VwYXJhdGVseVxuXG5cdCAgICAvLyBwb2ludGVyIGV2ZW50cyAobW91c2UsIHBlbiwgdG91Y2gpXG5cdCAgICBpZiAod2luZG93LlBvaW50ZXJFdmVudCkge1xuXHQgICAgICBkb2NFbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdXBkYXRlSW5wdXQpO1xuXHQgICAgICBkb2NFbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgc2V0SW50ZW50KTtcblx0ICAgIH0gZWxzZSBpZiAod2luZG93Lk1TUG9pbnRlckV2ZW50KSB7XG5cdCAgICAgIGRvY0VsZW0uYWRkRXZlbnRMaXN0ZW5lcignTVNQb2ludGVyRG93bicsIHVwZGF0ZUlucHV0KTtcblx0ICAgICAgZG9jRWxlbS5hZGRFdmVudExpc3RlbmVyKCdNU1BvaW50ZXJNb3ZlJywgc2V0SW50ZW50KTtcblx0ICAgIH0gZWxzZSB7XG5cblx0ICAgICAgLy8gbW91c2UgZXZlbnRzXG5cdCAgICAgIGRvY0VsZW0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdXBkYXRlSW5wdXQpO1xuXHQgICAgICBkb2NFbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHNldEludGVudCk7XG5cblx0ICAgICAgLy8gdG91Y2ggZXZlbnRzXG5cdCAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHtcblx0ICAgICAgICBkb2NFbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0b3VjaEJ1ZmZlcik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgLy8gbW91c2Ugd2hlZWxcblx0ICAgIGRvY0VsZW0uYWRkRXZlbnRMaXN0ZW5lcihkZXRlY3RXaGVlbCgpLCBzZXRJbnRlbnQpO1xuXG5cdCAgICAvLyBrZXlib2FyZCBldmVudHNcblx0ICAgIGRvY0VsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHVwZGF0ZUlucHV0KTtcblx0ICAgIGRvY0VsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB1cGRhdGVJbnB1dCk7XG5cdCAgfTtcblxuXHQgIC8vIGNoZWNrcyBjb25kaXRpb25zIGJlZm9yZSB1cGRhdGluZyBuZXcgaW5wdXRcblx0ICB2YXIgdXBkYXRlSW5wdXQgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdCAgICAvLyBvbmx5IGV4ZWN1dGUgaWYgdGhlIHRvdWNoIGJ1ZmZlciB0aW1lciBpc24ndCBydW5uaW5nXG5cdCAgICBpZiAoIWlzQnVmZmVyaW5nKSB7XG5cdCAgICAgIHZhciBldmVudEtleSA9IGV2ZW50LndoaWNoO1xuXHQgICAgICB2YXIgdmFsdWUgPSBpbnB1dE1hcFtldmVudC50eXBlXTtcblx0ICAgICAgaWYgKHZhbHVlID09PSAncG9pbnRlcicpIHZhbHVlID0gcG9pbnRlclR5cGUoZXZlbnQpO1xuXG5cdCAgICAgIGlmIChcblx0ICAgICAgICBjdXJyZW50SW5wdXQgIT09IHZhbHVlIHx8XG5cdCAgICAgICAgY3VycmVudEludGVudCAhPT0gdmFsdWVcblx0ICAgICAgKSB7XG5cblx0ICAgICAgICB2YXIgYWN0aXZlRWxlbSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdCAgICAgICAgdmFyIGFjdGl2ZUlucHV0ID0gKFxuXHQgICAgICAgICAgYWN0aXZlRWxlbSAmJlxuXHQgICAgICAgICAgYWN0aXZlRWxlbS5ub2RlTmFtZSAmJlxuXHQgICAgICAgICAgZm9ybUlucHV0cy5pbmRleE9mKGFjdGl2ZUVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPT09IC0xXG5cdCAgICAgICAgKSA/IHRydWUgOiBmYWxzZTtcblxuXHQgICAgICAgIGlmIChcblx0ICAgICAgICAgIHZhbHVlID09PSAndG91Y2gnIHx8XG5cblx0ICAgICAgICAgIC8vIGlnbm9yZSBtb3VzZSBtb2RpZmllciBrZXlzXG5cdCAgICAgICAgICAodmFsdWUgPT09ICdtb3VzZScgJiYgaWdub3JlTWFwLmluZGV4T2YoZXZlbnRLZXkpID09PSAtMSkgfHxcblxuXHQgICAgICAgICAgLy8gZG9uJ3Qgc3dpdGNoIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgYSBmb3JtIGlucHV0XG5cdCAgICAgICAgICAodmFsdWUgPT09ICdrZXlib2FyZCcgJiYgYWN0aXZlSW5wdXQpXG5cdCAgICAgICAgKSB7XG5cblx0ICAgICAgICAgIC8vIHNldCB0aGUgY3VycmVudCBhbmQgY2F0Y2gtYWxsIHZhcmlhYmxlXG5cdCAgICAgICAgICBjdXJyZW50SW5wdXQgPSBjdXJyZW50SW50ZW50ID0gdmFsdWU7XG5cblx0ICAgICAgICAgIHNldElucHV0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIC8vIHVwZGF0ZXMgdGhlIGRvYyBhbmQgYGlucHV0VHlwZXNgIGFycmF5IHdpdGggbmV3IGlucHV0XG5cdCAgdmFyIHNldElucHV0ID0gZnVuY3Rpb24oKSB7XG5cdCAgICBkb2NFbGVtLnNldEF0dHJpYnV0ZSgnZGF0YS13aGF0aW5wdXQnLCBjdXJyZW50SW5wdXQpO1xuXHQgICAgZG9jRWxlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtd2hhdGludGVudCcsIGN1cnJlbnRJbnB1dCk7XG5cblx0ICAgIGlmIChpbnB1dFR5cGVzLmluZGV4T2YoY3VycmVudElucHV0KSA9PT0gLTEpIHtcblx0ICAgICAgaW5wdXRUeXBlcy5wdXNoKGN1cnJlbnRJbnB1dCk7XG5cdCAgICAgIGRvY0VsZW0uY2xhc3NOYW1lICs9ICcgd2hhdGlucHV0LXR5cGVzLScgKyBjdXJyZW50SW5wdXQ7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIC8vIHVwZGF0ZXMgaW5wdXQgaW50ZW50IGZvciBgbW91c2Vtb3ZlYCBhbmQgYHBvaW50ZXJtb3ZlYFxuXHQgIHZhciBzZXRJbnRlbnQgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdCAgICAvLyBvbmx5IGV4ZWN1dGUgaWYgdGhlIHRvdWNoIGJ1ZmZlciB0aW1lciBpc24ndCBydW5uaW5nXG5cdCAgICBpZiAoIWlzQnVmZmVyaW5nKSB7XG5cdCAgICAgIHZhciB2YWx1ZSA9IGlucHV0TWFwW2V2ZW50LnR5cGVdO1xuXHQgICAgICBpZiAodmFsdWUgPT09ICdwb2ludGVyJykgdmFsdWUgPSBwb2ludGVyVHlwZShldmVudCk7XG5cblx0ICAgICAgaWYgKGN1cnJlbnRJbnRlbnQgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgY3VycmVudEludGVudCA9IHZhbHVlO1xuXG5cdCAgICAgICAgZG9jRWxlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtd2hhdGludGVudCcsIGN1cnJlbnRJbnRlbnQpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIC8vIGJ1ZmZlcnMgdG91Y2ggZXZlbnRzIGJlY2F1c2UgdGhleSBmcmVxdWVudGx5IGFsc28gZmlyZSBtb3VzZSBldmVudHNcblx0ICB2YXIgdG91Y2hCdWZmZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG5cdCAgICAvLyBjbGVhciB0aGUgdGltZXIgaWYgaXQgaGFwcGVucyB0byBiZSBydW5uaW5nXG5cdCAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRvdWNoVGltZXIpO1xuXG5cdCAgICAvLyBzZXQgdGhlIGN1cnJlbnQgaW5wdXRcblx0ICAgIHVwZGF0ZUlucHV0KGV2ZW50KTtcblxuXHQgICAgLy8gc2V0IHRoZSBpc0J1ZmZlcmluZyB0byBgdHJ1ZWBcblx0ICAgIGlzQnVmZmVyaW5nID0gdHJ1ZTtcblxuXHQgICAgLy8gcnVuIHRoZSB0aW1lclxuXHQgICAgdG91Y2hUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXG5cdCAgICAgIC8vIGlmIHRoZSB0aW1lciBydW5zIG91dCwgc2V0IGlzQnVmZmVyaW5nIGJhY2sgdG8gYGZhbHNlYFxuXHQgICAgICBpc0J1ZmZlcmluZyA9IGZhbHNlO1xuXHQgICAgfSwgMjAwKTtcblx0ICB9O1xuXG5cblx0ICAvKlxuXHQgICAgLS0tLS0tLS0tLS0tLS0tXG5cdCAgICBVdGlsaXRpZXNcblx0ICAgIC0tLS0tLS0tLS0tLS0tLVxuXHQgICovXG5cblx0ICB2YXIgcG9pbnRlclR5cGUgPSBmdW5jdGlvbihldmVudCkge1xuXHQgICBpZiAodHlwZW9mIGV2ZW50LnBvaW50ZXJUeXBlID09PSAnbnVtYmVyJykge1xuXHQgICAgICByZXR1cm4gcG9pbnRlck1hcFtldmVudC5wb2ludGVyVHlwZV07XG5cdCAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiAoZXZlbnQucG9pbnRlclR5cGUgPT09ICdwZW4nKSA/ICd0b3VjaCcgOiBldmVudC5wb2ludGVyVHlwZTsgLy8gdHJlYXQgcGVuIGxpa2UgdG91Y2hcblx0ICAgfVxuXHQgIH07XG5cblx0ICAvLyBkZXRlY3QgdmVyc2lvbiBvZiBtb3VzZSB3aGVlbCBldmVudCB0byB1c2Vcblx0ICAvLyB2aWEgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3doZWVsXG5cdCAgdmFyIGRldGVjdFdoZWVsID0gZnVuY3Rpb24oKSB7XG5cdCAgICByZXR1cm4gJ29ud2hlZWwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpID9cblx0ICAgICAgJ3doZWVsJyA6IC8vIE1vZGVybiBicm93c2VycyBzdXBwb3J0IFwid2hlZWxcIlxuXG5cdCAgICAgIGRvY3VtZW50Lm9ubW91c2V3aGVlbCAhPT0gdW5kZWZpbmVkID9cblx0ICAgICAgICAnbW91c2V3aGVlbCcgOiAvLyBXZWJraXQgYW5kIElFIHN1cHBvcnQgYXQgbGVhc3QgXCJtb3VzZXdoZWVsXCJcblx0ICAgICAgICAnRE9NTW91c2VTY3JvbGwnOyAvLyBsZXQncyBhc3N1bWUgdGhhdCByZW1haW5pbmcgYnJvd3NlcnMgYXJlIG9sZGVyIEZpcmVmb3hcblx0ICB9O1xuXG5cblx0ICAvKlxuXHQgICAgLS0tLS0tLS0tLS0tLS0tXG5cdCAgICBJbml0XG5cblx0ICAgIGRvbid0IHN0YXJ0IHNjcmlwdCB1bmxlc3MgYnJvd3NlciBjdXRzIHRoZSBtdXN0YXJkXG5cdCAgICAoYWxzbyBwYXNzZXMgaWYgcG9seWZpbGxzIGFyZSB1c2VkKVxuXHQgICAgLS0tLS0tLS0tLS0tLS0tXG5cdCAgKi9cblxuXHQgIGlmIChcblx0ICAgICdhZGRFdmVudExpc3RlbmVyJyBpbiB3aW5kb3cgJiZcblx0ICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mXG5cdCAgKSB7XG5cdCAgICBzZXRVcCgpO1xuXHQgIH1cblxuXG5cdCAgLypcblx0ICAgIC0tLS0tLS0tLS0tLS0tLVxuXHQgICAgQVBJXG5cdCAgICAtLS0tLS0tLS0tLS0tLS1cblx0ICAqL1xuXG5cdCAgcmV0dXJuIHtcblxuXHQgICAgLy8gcmV0dXJucyBzdHJpbmc6IHRoZSBjdXJyZW50IGlucHV0IHR5cGVcblx0ICAgIC8vIG9wdDogJ2xvb3NlJ3wnc3RyaWN0J1xuXHQgICAgLy8gJ3N0cmljdCcgKGRlZmF1bHQpOiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBgZGF0YS13aGF0aW5wdXRgIGF0dHJpYnV0ZVxuXHQgICAgLy8gJ2xvb3NlJzogaW5jbHVkZXMgYGRhdGEtd2hhdGludGVudGAgdmFsdWUgaWYgaXQncyBtb3JlIGN1cnJlbnQgdGhhbiBgZGF0YS13aGF0aW5wdXRgXG5cdCAgICBhc2s6IGZ1bmN0aW9uKG9wdCkgeyByZXR1cm4gKG9wdCA9PT0gJ2xvb3NlJykgPyBjdXJyZW50SW50ZW50IDogY3VycmVudElucHV0OyB9LFxuXG5cdCAgICAvLyByZXR1cm5zIGFycmF5OiBhbGwgdGhlIGRldGVjdGVkIGlucHV0IHR5cGVzXG5cdCAgICB0eXBlczogZnVuY3Rpb24oKSB7IHJldHVybiBpbnB1dFR5cGVzOyB9XG5cblx0ICB9O1xuXG5cdH0oKSk7XG5cblxuLyoqKi8gfVxuLyoqKioqKi8gXSlcbn0pO1xuOyIsIiFmdW5jdGlvbigkKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgRk9VTkRBVElPTl9WRVJTSU9OID0gJzYuMy4xJztcblxuLy8gR2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4vLyBUaGlzIGlzIGF0dGFjaGVkIHRvIHRoZSB3aW5kb3csIG9yIHVzZWQgYXMgYSBtb2R1bGUgZm9yIEFNRC9Ccm93c2VyaWZ5XG52YXIgRm91bmRhdGlvbiA9IHtcbiAgdmVyc2lvbjogRk9VTkRBVElPTl9WRVJTSU9OLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgaW5pdGlhbGl6ZWQgcGx1Z2lucy5cbiAgICovXG4gIF9wbHVnaW5zOiB7fSxcblxuICAvKipcbiAgICogU3RvcmVzIGdlbmVyYXRlZCB1bmlxdWUgaWRzIGZvciBwbHVnaW4gaW5zdGFuY2VzXG4gICAqL1xuICBfdXVpZHM6IFtdLFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBmb3IgUlRMIHN1cHBvcnRcbiAgICovXG4gIHJ0bDogZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gJCgnaHRtbCcpLmF0dHIoJ2RpcicpID09PSAncnRsJztcbiAgfSxcbiAgLyoqXG4gICAqIERlZmluZXMgYSBGb3VuZGF0aW9uIHBsdWdpbiwgYWRkaW5nIGl0IHRvIHRoZSBgRm91bmRhdGlvbmAgbmFtZXNwYWNlIGFuZCB0aGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluaXRpYWxpemUgd2hlbiByZWZsb3dpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW4gLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHBsdWdpbjogZnVuY3Rpb24ocGx1Z2luLCBuYW1lKSB7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBhZGRpbmcgdG8gZ2xvYmFsIEZvdW5kYXRpb24gb2JqZWN0XG4gICAgLy8gRXhhbXBsZXM6IEZvdW5kYXRpb24uUmV2ZWFsLCBGb3VuZGF0aW9uLk9mZkNhbnZhc1xuICAgIHZhciBjbGFzc05hbWUgPSAobmFtZSB8fCBmdW5jdGlvbk5hbWUocGx1Z2luKSk7XG4gICAgLy8gT2JqZWN0IGtleSB0byB1c2Ugd2hlbiBzdG9yaW5nIHRoZSBwbHVnaW4sIGFsc28gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aWZ5aW5nIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcGx1Z2luXG4gICAgLy8gRXhhbXBsZXM6IGRhdGEtcmV2ZWFsLCBkYXRhLW9mZi1jYW52YXNcbiAgICB2YXIgYXR0ck5hbWUgID0gaHlwaGVuYXRlKGNsYXNzTmFtZSk7XG5cbiAgICAvLyBBZGQgdG8gdGhlIEZvdW5kYXRpb24gb2JqZWN0IGFuZCB0aGUgcGx1Z2lucyBsaXN0IChmb3IgcmVmbG93aW5nKVxuICAgIHRoaXMuX3BsdWdpbnNbYXR0ck5hbWVdID0gdGhpc1tjbGFzc05hbWVdID0gcGx1Z2luO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFBvcHVsYXRlcyB0aGUgX3V1aWRzIGFycmF5IHdpdGggcG9pbnRlcnMgdG8gZWFjaCBpbmRpdmlkdWFsIHBsdWdpbiBpbnN0YW5jZS5cbiAgICogQWRkcyB0aGUgYHpmUGx1Z2luYCBkYXRhLWF0dHJpYnV0ZSB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZWQgcGx1Z2lucyB0byBhbGxvdyB1c2Ugb2YgJChzZWxlY3RvcikuZm91bmRhdGlvbihtZXRob2QpIGNhbGxzLlxuICAgKiBBbHNvIGZpcmVzIHRoZSBpbml0aWFsaXphdGlvbiBldmVudCBmb3IgZWFjaCBwbHVnaW4sIGNvbnNvbGlkYXRpbmcgcmVwZXRpdGl2ZSBjb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIC0gYW4gaW5zdGFuY2Ugb2YgYSBwbHVnaW4sIHVzdWFsbHkgYHRoaXNgIGluIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiwgcGFzc2VkIGFzIGEgY2FtZWxDYXNlZCBzdHJpbmcuXG4gICAqIEBmaXJlcyBQbHVnaW4jaW5pdFxuICAgKi9cbiAgcmVnaXN0ZXJQbHVnaW46IGZ1bmN0aW9uKHBsdWdpbiwgbmFtZSl7XG4gICAgdmFyIHBsdWdpbk5hbWUgPSBuYW1lID8gaHlwaGVuYXRlKG5hbWUpIDogZnVuY3Rpb25OYW1lKHBsdWdpbi5jb25zdHJ1Y3RvcikudG9Mb3dlckNhc2UoKTtcbiAgICBwbHVnaW4udXVpZCA9IHRoaXMuR2V0WW9EaWdpdHMoNiwgcGx1Z2luTmFtZSk7XG5cbiAgICBpZighcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApKXsgcGx1Z2luLiRlbGVtZW50LmF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWAsIHBsdWdpbi51dWlkKTsgfVxuICAgIGlmKCFwbHVnaW4uJGVsZW1lbnQuZGF0YSgnemZQbHVnaW4nKSl7IHBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsIHBsdWdpbik7IH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGluaXRpYWxpemVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jaW5pdFxuICAgICAgICAgICAqL1xuICAgIHBsdWdpbi4kZWxlbWVudC50cmlnZ2VyKGBpbml0LnpmLiR7cGx1Z2luTmFtZX1gKTtcblxuICAgIHRoaXMuX3V1aWRzLnB1c2gocGx1Z2luLnV1aWQpO1xuXG4gICAgcmV0dXJuO1xuICB9LFxuICAvKipcbiAgICogQGZ1bmN0aW9uXG4gICAqIFJlbW92ZXMgdGhlIHBsdWdpbnMgdXVpZCBmcm9tIHRoZSBfdXVpZHMgYXJyYXkuXG4gICAqIFJlbW92ZXMgdGhlIHpmUGx1Z2luIGRhdGEgYXR0cmlidXRlLCBhcyB3ZWxsIGFzIHRoZSBkYXRhLXBsdWdpbi1uYW1lIGF0dHJpYnV0ZS5cbiAgICogQWxzbyBmaXJlcyB0aGUgZGVzdHJveWVkIGV2ZW50IGZvciB0aGUgcGx1Z2luLCBjb25zb2xpZGF0aW5nIHJlcGV0aXRpdmUgY29kZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbiAtIGFuIGluc3RhbmNlIG9mIGEgcGx1Z2luLCB1c3VhbGx5IGB0aGlzYCBpbiBjb250ZXh0LlxuICAgKiBAZmlyZXMgUGx1Z2luI2Rlc3Ryb3llZFxuICAgKi9cbiAgdW5yZWdpc3RlclBsdWdpbjogZnVuY3Rpb24ocGx1Z2luKXtcbiAgICB2YXIgcGx1Z2luTmFtZSA9IGh5cGhlbmF0ZShmdW5jdGlvbk5hbWUocGx1Z2luLiRlbGVtZW50LmRhdGEoJ3pmUGx1Z2luJykuY29uc3RydWN0b3IpKTtcblxuICAgIHRoaXMuX3V1aWRzLnNwbGljZSh0aGlzLl91dWlkcy5pbmRleE9mKHBsdWdpbi51dWlkKSwgMSk7XG4gICAgcGx1Z2luLiRlbGVtZW50LnJlbW92ZUF0dHIoYGRhdGEtJHtwbHVnaW5OYW1lfWApLnJlbW92ZURhdGEoJ3pmUGx1Z2luJylcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwbHVnaW4gaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgICAgICAqIEBldmVudCBQbHVnaW4jZGVzdHJveWVkXG4gICAgICAgICAgICovXG4gICAgICAgICAgLnRyaWdnZXIoYGRlc3Ryb3llZC56Zi4ke3BsdWdpbk5hbWV9YCk7XG4gICAgZm9yKHZhciBwcm9wIGluIHBsdWdpbil7XG4gICAgICBwbHVnaW5bcHJvcF0gPSBudWxsOy8vY2xlYW4gdXAgc2NyaXB0IHRvIHByZXAgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQ2F1c2VzIG9uZSBvciBtb3JlIGFjdGl2ZSBwbHVnaW5zIHRvIHJlLWluaXRpYWxpemUsIHJlc2V0dGluZyBldmVudCBsaXN0ZW5lcnMsIHJlY2FsY3VsYXRpbmcgcG9zaXRpb25zLCBldGMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5zIC0gb3B0aW9uYWwgc3RyaW5nIG9mIGFuIGluZGl2aWR1YWwgcGx1Z2luIGtleSwgYXR0YWluZWQgYnkgY2FsbGluZyBgJChlbGVtZW50KS5kYXRhKCdwbHVnaW5OYW1lJylgLCBvciBzdHJpbmcgb2YgYSBwbHVnaW4gY2xhc3MgaS5lLiBgJ2Ryb3Bkb3duJ2BcbiAgICogQGRlZmF1bHQgSWYgbm8gYXJndW1lbnQgaXMgcGFzc2VkLCByZWZsb3cgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGx1Z2lucy5cbiAgICovXG4gICByZUluaXQ6IGZ1bmN0aW9uKHBsdWdpbnMpe1xuICAgICB2YXIgaXNKUSA9IHBsdWdpbnMgaW5zdGFuY2VvZiAkO1xuICAgICB0cnl7XG4gICAgICAgaWYoaXNKUSl7XG4gICAgICAgICBwbHVnaW5zLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgJCh0aGlzKS5kYXRhKCd6ZlBsdWdpbicpLl9pbml0KCk7XG4gICAgICAgICB9KTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHBsdWdpbnMsXG4gICAgICAgICBfdGhpcyA9IHRoaXMsXG4gICAgICAgICBmbnMgPSB7XG4gICAgICAgICAgICdvYmplY3QnOiBmdW5jdGlvbihwbGdzKXtcbiAgICAgICAgICAgICBwbGdzLmZvckVhY2goZnVuY3Rpb24ocCl7XG4gICAgICAgICAgICAgICBwID0gaHlwaGVuYXRlKHApO1xuICAgICAgICAgICAgICAgJCgnW2RhdGEtJysgcCArJ10nKS5mb3VuZGF0aW9uKCdfaW5pdCcpO1xuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICB9LFxuICAgICAgICAgICAnc3RyaW5nJzogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICBwbHVnaW5zID0gaHlwaGVuYXRlKHBsdWdpbnMpO1xuICAgICAgICAgICAgICQoJ1tkYXRhLScrIHBsdWdpbnMgKyddJykuZm91bmRhdGlvbignX2luaXQnKTtcbiAgICAgICAgICAgfSxcbiAgICAgICAgICAgJ3VuZGVmaW5lZCc6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgdGhpc1snb2JqZWN0J10oT2JqZWN0LmtleXMoX3RoaXMuX3BsdWdpbnMpKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfTtcbiAgICAgICAgIGZuc1t0eXBlXShwbHVnaW5zKTtcbiAgICAgICB9XG4gICAgIH1jYXRjaChlcnIpe1xuICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgfWZpbmFsbHl7XG4gICAgICAgcmV0dXJuIHBsdWdpbnM7XG4gICAgIH1cbiAgIH0sXG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSByYW5kb20gYmFzZS0zNiB1aWQgd2l0aCBuYW1lc3BhY2luZ1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCAtIG51bWJlciBvZiByYW5kb20gYmFzZS0zNiBkaWdpdHMgZGVzaXJlZC4gSW5jcmVhc2UgZm9yIG1vcmUgcmFuZG9tIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgLSBuYW1lIG9mIHBsdWdpbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW4gdWlkLCBvcHRpb25hbC5cbiAgICogQGRlZmF1bHQge1N0cmluZ30gJycgLSBpZiBubyBwbHVnaW4gbmFtZSBpcyBwcm92aWRlZCwgbm90aGluZyBpcyBhcHBlbmRlZCB0byB0aGUgdWlkLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSAtIHVuaXF1ZSBpZFxuICAgKi9cbiAgR2V0WW9EaWdpdHM6IGZ1bmN0aW9uKGxlbmd0aCwgbmFtZXNwYWNlKXtcbiAgICBsZW5ndGggPSBsZW5ndGggfHwgNjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoTWF0aC5wb3coMzYsIGxlbmd0aCArIDEpIC0gTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDM2LCBsZW5ndGgpKSkudG9TdHJpbmcoMzYpLnNsaWNlKDEpICsgKG5hbWVzcGFjZSA/IGAtJHtuYW1lc3BhY2V9YCA6ICcnKTtcbiAgfSxcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgcGx1Z2lucyBvbiBhbnkgZWxlbWVudHMgd2l0aGluIGBlbGVtYCAoYW5kIGBlbGVtYCBpdHNlbGYpIHRoYXQgYXJlbid0IGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtIC0galF1ZXJ5IG9iamVjdCBjb250YWluaW5nIHRoZSBlbGVtZW50IHRvIGNoZWNrIGluc2lkZS4gQWxzbyBjaGVja3MgdGhlIGVsZW1lbnQgaXRzZWxmLCB1bmxlc3MgaXQncyB0aGUgYGRvY3VtZW50YCBvYmplY3QuXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwbHVnaW5zIC0gQSBsaXN0IG9mIHBsdWdpbnMgdG8gaW5pdGlhbGl6ZS4gTGVhdmUgdGhpcyBvdXQgdG8gaW5pdGlhbGl6ZSBldmVyeXRoaW5nLlxuICAgKi9cbiAgcmVmbG93OiBmdW5jdGlvbihlbGVtLCBwbHVnaW5zKSB7XG5cbiAgICAvLyBJZiBwbHVnaW5zIGlzIHVuZGVmaW5lZCwganVzdCBncmFiIGV2ZXJ5dGhpbmdcbiAgICBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwbHVnaW5zID0gT2JqZWN0LmtleXModGhpcy5fcGx1Z2lucyk7XG4gICAgfVxuICAgIC8vIElmIHBsdWdpbnMgaXMgYSBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBvbmUgaXRlbVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwbHVnaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgcGx1Z2lucyA9IFtwbHVnaW5zXTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGx1Z2luXG4gICAgJC5lYWNoKHBsdWdpbnMsIGZ1bmN0aW9uKGksIG5hbWUpIHtcbiAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwbHVnaW5cbiAgICAgIHZhciBwbHVnaW4gPSBfdGhpcy5fcGx1Z2luc1tuYW1lXTtcblxuICAgICAgLy8gTG9jYWxpemUgdGhlIHNlYXJjaCB0byBhbGwgZWxlbWVudHMgaW5zaWRlIGVsZW0sIGFzIHdlbGwgYXMgZWxlbSBpdHNlbGYsIHVubGVzcyBlbGVtID09PSBkb2N1bWVudFxuICAgICAgdmFyICRlbGVtID0gJChlbGVtKS5maW5kKCdbZGF0YS0nK25hbWUrJ10nKS5hZGRCYWNrKCdbZGF0YS0nK25hbWUrJ10nKTtcblxuICAgICAgLy8gRm9yIGVhY2ggcGx1Z2luIGZvdW5kLCBpbml0aWFsaXplIGl0XG4gICAgICAkZWxlbS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgLy8gRG9uJ3QgZG91YmxlLWRpcCBvbiBwbHVnaW5zXG4gICAgICAgIGlmICgkZWwuZGF0YSgnemZQbHVnaW4nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlRyaWVkIHRvIGluaXRpYWxpemUgXCIrbmFtZStcIiBvbiBhbiBlbGVtZW50IHRoYXQgYWxyZWFkeSBoYXMgYSBGb3VuZGF0aW9uIHBsdWdpbi5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoJGVsLmF0dHIoJ2RhdGEtb3B0aW9ucycpKXtcbiAgICAgICAgICB2YXIgdGhpbmcgPSAkZWwuYXR0cignZGF0YS1vcHRpb25zJykuc3BsaXQoJzsnKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGkpe1xuICAgICAgICAgICAgdmFyIG9wdCA9IGUuc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oZWwpeyByZXR1cm4gZWwudHJpbSgpOyB9KTtcbiAgICAgICAgICAgIGlmKG9wdFswXSkgb3B0c1tvcHRbMF1dID0gcGFyc2VWYWx1ZShvcHRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAkZWwuZGF0YSgnemZQbHVnaW4nLCBuZXcgcGx1Z2luKCQodGhpcyksIG9wdHMpKTtcbiAgICAgICAgfWNhdGNoKGVyKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyKTtcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Rm5OYW1lOiBmdW5jdGlvbk5hbWUsXG4gIHRyYW5zaXRpb25lbmQ6IGZ1bmN0aW9uKCRlbGVtKXtcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSB7XG4gICAgICAndHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICAgJ01velRyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAnT1RyYW5zaXRpb24nOiAnb3RyYW5zaXRpb25lbmQnXG4gICAgfTtcbiAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICBlbmQ7XG5cbiAgICBmb3IgKHZhciB0IGluIHRyYW5zaXRpb25zKXtcbiAgICAgIGlmICh0eXBlb2YgZWxlbS5zdHlsZVt0XSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICBlbmQgPSB0cmFuc2l0aW9uc1t0XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZW5kKXtcbiAgICAgIHJldHVybiBlbmQ7XG4gICAgfWVsc2V7XG4gICAgICBlbmQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICRlbGVtLnRyaWdnZXJIYW5kbGVyKCd0cmFuc2l0aW9uZW5kJywgWyRlbGVtXSk7XG4gICAgICB9LCAxKTtcbiAgICAgIHJldHVybiAndHJhbnNpdGlvbmVuZCc7XG4gICAgfVxuICB9XG59O1xuXG5Gb3VuZGF0aW9uLnV0aWwgPSB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgYXBwbHlpbmcgYSBkZWJvdW5jZSBlZmZlY3QgdG8gYSBmdW5jdGlvbiBjYWxsLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCBlbmQgb2YgdGltZW91dC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbGF5IC0gVGltZSBpbiBtcyB0byBkZWxheSB0aGUgY2FsbCBvZiBgZnVuY2AuXG4gICAqIEByZXR1cm5zIGZ1bmN0aW9uXG4gICAqL1xuICB0aHJvdHRsZTogZnVuY3Rpb24gKGZ1bmMsIGRlbGF5KSB7XG4gICAgdmFyIHRpbWVyID0gbnVsbDtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICAgIGlmICh0aW1lciA9PT0gbnVsbCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxuLy8gVE9ETzogY29uc2lkZXIgbm90IG1ha2luZyB0aGlzIGEgalF1ZXJ5IGZ1bmN0aW9uXG4vLyBUT0RPOiBuZWVkIHdheSB0byByZWZsb3cgdnMuIHJlLWluaXRpYWxpemVcbi8qKlxuICogVGhlIEZvdW5kYXRpb24galF1ZXJ5IG1ldGhvZC5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBtZXRob2QgLSBBbiBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgY3VycmVudCBqUXVlcnkgb2JqZWN0LlxuICovXG52YXIgZm91bmRhdGlvbiA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBtZXRob2QsXG4gICAgICAkbWV0YSA9ICQoJ21ldGEuZm91bmRhdGlvbi1tcScpLFxuICAgICAgJG5vSlMgPSAkKCcubm8tanMnKTtcblxuICBpZighJG1ldGEubGVuZ3RoKXtcbiAgICAkKCc8bWV0YSBjbGFzcz1cImZvdW5kYXRpb24tbXFcIj4nKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcbiAgfVxuICBpZigkbm9KUy5sZW5ndGgpe1xuICAgICRub0pTLnJlbW92ZUNsYXNzKCduby1qcycpO1xuICB9XG5cbiAgaWYodHlwZSA9PT0gJ3VuZGVmaW5lZCcpey8vbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgRm91bmRhdGlvbiBvYmplY3QsIG9yIGFuIGluZGl2aWR1YWwgcGx1Z2luLlxuICAgIEZvdW5kYXRpb24uTWVkaWFRdWVyeS5faW5pdCgpO1xuICAgIEZvdW5kYXRpb24ucmVmbG93KHRoaXMpO1xuICB9ZWxzZSBpZih0eXBlID09PSAnc3RyaW5nJyl7Ly9hbiBpbmRpdmlkdWFsIG1ldGhvZCB0byBpbnZva2Ugb24gYSBwbHVnaW4gb3IgZ3JvdXAgb2YgcGx1Z2luc1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsvL2NvbGxlY3QgYWxsIHRoZSBhcmd1bWVudHMsIGlmIG5lY2Vzc2FyeVxuICAgIHZhciBwbHVnQ2xhc3MgPSB0aGlzLmRhdGEoJ3pmUGx1Z2luJyk7Ly9kZXRlcm1pbmUgdGhlIGNsYXNzIG9mIHBsdWdpblxuXG4gICAgaWYocGx1Z0NsYXNzICE9PSB1bmRlZmluZWQgJiYgcGx1Z0NsYXNzW21ldGhvZF0gIT09IHVuZGVmaW5lZCl7Ly9tYWtlIHN1cmUgYm90aCB0aGUgY2xhc3MgYW5kIG1ldGhvZCBleGlzdFxuICAgICAgaWYodGhpcy5sZW5ndGggPT09IDEpey8vaWYgdGhlcmUncyBvbmx5IG9uZSwgY2FsbCBpdCBkaXJlY3RseS5cbiAgICAgICAgICBwbHVnQ2xhc3NbbWV0aG9kXS5hcHBseShwbHVnQ2xhc3MsIGFyZ3MpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpLCBlbCl7Ly9vdGhlcndpc2UgbG9vcCB0aHJvdWdoIHRoZSBqUXVlcnkgY29sbGVjdGlvbiBhbmQgaW52b2tlIHRoZSBtZXRob2Qgb24gZWFjaFxuICAgICAgICAgIHBsdWdDbGFzc1ttZXRob2RdLmFwcGx5KCQoZWwpLmRhdGEoJ3pmUGx1Z2luJyksIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9ZWxzZXsvL2Vycm9yIGZvciBubyBjbGFzcyBvciBubyBtZXRob2RcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcIldlJ3JlIHNvcnJ5LCAnXCIgKyBtZXRob2QgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBtZXRob2QgZm9yIFwiICsgKHBsdWdDbGFzcyA/IGZ1bmN0aW9uTmFtZShwbHVnQ2xhc3MpIDogJ3RoaXMgZWxlbWVudCcpICsgJy4nKTtcbiAgICB9XG4gIH1lbHNley8vZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnQgdHlwZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdlJ3JlIHNvcnJ5LCAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlci4gWW91IG11c3QgdXNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWV0aG9kIHlvdSB3aXNoIHRvIGludm9rZS5gKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbndpbmRvdy5Gb3VuZGF0aW9uID0gRm91bmRhdGlvbjtcbiQuZm4uZm91bmRhdGlvbiA9IGZvdW5kYXRpb247XG5cbi8vIFBvbHlmaWxsIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbigpIHtcbiAgaWYgKCFEYXRlLm5vdyB8fCAhd2luZG93LkRhdGUubm93KVxuICAgIHdpbmRvdy5EYXRlLm5vdyA9IERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTtcblxuICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK2kpIHtcbiAgICAgIHZhciB2cCA9IHZlbmRvcnNbaV07XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZwKydSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9ICh3aW5kb3dbdnArJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvd1t2cCsnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10pO1xuICB9XG4gIGlmICgvaVAoYWR8aG9uZXxvZCkuKk9TIDYvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB2YXIgbmV4dFRpbWUgPSBNYXRoLm1heChsYXN0VGltZSArIDE2LCBub3cpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sobGFzdFRpbWUgPSBuZXh0VGltZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaW1lIC0gbm93KTtcbiAgICB9O1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNsZWFyVGltZW91dDtcbiAgfVxuICAvKipcbiAgICogUG9seWZpbGwgZm9yIHBlcmZvcm1hbmNlLm5vdywgcmVxdWlyZWQgYnkgckFGXG4gICAqL1xuICBpZighd2luZG93LnBlcmZvcm1hbmNlIHx8ICF3aW5kb3cucGVyZm9ybWFuY2Uubm93KXtcbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgPSB7XG4gICAgICBzdGFydDogRGF0ZS5ub3coKSxcbiAgICAgIG5vdzogZnVuY3Rpb24oKXsgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0OyB9XG4gICAgfTtcbiAgfVxufSkoKTtcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcbiAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gY2xvc2VzdCB0aGluZyBwb3NzaWJsZSB0byB0aGUgRUNNQVNjcmlwdCA1XG4gICAgICAvLyBpbnRlcm5hbCBJc0NhbGxhYmxlIGZ1bmN0aW9uXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgIH1cblxuICAgIHZhciBhQXJncyAgID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgZlRvQmluZCA9IHRoaXMsXG4gICAgICAgIGZOT1AgICAgPSBmdW5jdGlvbigpIHt9LFxuICAgICAgICBmQm91bmQgID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGZUb0JpbmQuYXBwbHkodGhpcyBpbnN0YW5jZW9mIGZOT1BcbiAgICAgICAgICAgICAgICAgPyB0aGlzXG4gICAgICAgICAgICAgICAgIDogb1RoaXMsXG4gICAgICAgICAgICAgICAgIGFBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICAgIH07XG5cbiAgICBpZiAodGhpcy5wcm90b3R5cGUpIHtcbiAgICAgIC8vIG5hdGl2ZSBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhIHByb3RvdHlwZVxuICAgICAgZk5PUC5wcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcbiAgICB9XG4gICAgZkJvdW5kLnByb3RvdHlwZSA9IG5ldyBmTk9QKCk7XG5cbiAgICByZXR1cm4gZkJvdW5kO1xuICB9O1xufVxuLy8gUG9seWZpbGwgdG8gZ2V0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gSUU5XG5mdW5jdGlvbiBmdW5jdGlvbk5hbWUoZm4pIHtcbiAgaWYgKEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZnVuY05hbWVSZWdleCA9IC9mdW5jdGlvblxccyhbXihdezEsfSlcXCgvO1xuICAgIHZhciByZXN1bHRzID0gKGZ1bmNOYW1lUmVnZXgpLmV4ZWMoKGZuKS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAxKSA/IHJlc3VsdHNbMV0udHJpbSgpIDogXCJcIjtcbiAgfVxuICBlbHNlIGlmIChmbi5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmbi5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmbi5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZShzdHIpe1xuICBpZiAoJ3RydWUnID09PSBzdHIpIHJldHVybiB0cnVlO1xuICBlbHNlIGlmICgnZmFsc2UnID09PSBzdHIpIHJldHVybiBmYWxzZTtcbiAgZWxzZSBpZiAoIWlzTmFOKHN0ciAqIDEpKSByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICByZXR1cm4gc3RyO1xufVxuLy8gQ29udmVydCBQYXNjYWxDYXNlIHRvIGtlYmFiLWNhc2Vcbi8vIFRoYW5rIHlvdTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvODk1NTU4MFxuZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG59XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuRm91bmRhdGlvbi5Cb3ggPSB7XG4gIEltTm90VG91Y2hpbmdZb3U6IEltTm90VG91Y2hpbmdZb3UsXG4gIEdldERpbWVuc2lvbnM6IEdldERpbWVuc2lvbnMsXG4gIEdldE9mZnNldHM6IEdldE9mZnNldHNcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0aGUgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50IHRvIGEgY29udGFpbmVyIGFuZCBkZXRlcm1pbmVzIGNvbGxpc2lvbiBldmVudHMgd2l0aCBjb250YWluZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB0ZXN0IGZvciBjb2xsaXNpb25zLlxuICogQHBhcmFtIHtqUXVlcnl9IHBhcmVudCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGFzIGJvdW5kaW5nIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbHJPbmx5IC0gc2V0IHRvIHRydWUgdG8gY2hlY2sgbGVmdCBhbmQgcmlnaHQgdmFsdWVzIG9ubHkuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRiT25seSAtIHNldCB0byB0cnVlIHRvIGNoZWNrIHRvcCBhbmQgYm90dG9tIHZhbHVlcyBvbmx5LlxuICogQGRlZmF1bHQgaWYgbm8gcGFyZW50IG9iamVjdCBwYXNzZWQsIGRldGVjdHMgY29sbGlzaW9ucyB3aXRoIGB3aW5kb3dgLlxuICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBjb2xsaXNpb24gZnJlZSwgZmFsc2UgaWYgYSBjb2xsaXNpb24gaW4gYW55IGRpcmVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gSW1Ob3RUb3VjaGluZ1lvdShlbGVtZW50LCBwYXJlbnQsIGxyT25seSwgdGJPbmx5KSB7XG4gIHZhciBlbGVEaW1zID0gR2V0RGltZW5zaW9ucyhlbGVtZW50KSxcbiAgICAgIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodDtcblxuICBpZiAocGFyZW50KSB7XG4gICAgdmFyIHBhckRpbXMgPSBHZXREaW1lbnNpb25zKHBhcmVudCk7XG5cbiAgICBib3R0b20gPSAoZWxlRGltcy5vZmZzZXQudG9wICsgZWxlRGltcy5oZWlnaHQgPD0gcGFyRGltcy5oZWlnaHQgKyBwYXJEaW1zLm9mZnNldC50b3ApO1xuICAgIHRvcCAgICA9IChlbGVEaW1zLm9mZnNldC50b3AgPj0gcGFyRGltcy5vZmZzZXQudG9wKTtcbiAgICBsZWZ0ICAgPSAoZWxlRGltcy5vZmZzZXQubGVmdCA+PSBwYXJEaW1zLm9mZnNldC5sZWZ0KTtcbiAgICByaWdodCAgPSAoZWxlRGltcy5vZmZzZXQubGVmdCArIGVsZURpbXMud2lkdGggPD0gcGFyRGltcy53aWR0aCArIHBhckRpbXMub2Zmc2V0LmxlZnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIGJvdHRvbSA9IChlbGVEaW1zLm9mZnNldC50b3AgKyBlbGVEaW1zLmhlaWdodCA8PSBlbGVEaW1zLndpbmRvd0RpbXMuaGVpZ2h0ICsgZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIHRvcCAgICA9IChlbGVEaW1zLm9mZnNldC50b3AgPj0gZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3ApO1xuICAgIGxlZnQgICA9IChlbGVEaW1zLm9mZnNldC5sZWZ0ID49IGVsZURpbXMud2luZG93RGltcy5vZmZzZXQubGVmdCk7XG4gICAgcmlnaHQgID0gKGVsZURpbXMub2Zmc2V0LmxlZnQgKyBlbGVEaW1zLndpZHRoIDw9IGVsZURpbXMud2luZG93RGltcy53aWR0aCk7XG4gIH1cblxuICB2YXIgYWxsRGlycyA9IFtib3R0b20sIHRvcCwgbGVmdCwgcmlnaHRdO1xuXG4gIGlmIChsck9ubHkpIHtcbiAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgPT09IHRydWU7XG4gIH1cblxuICBpZiAodGJPbmx5KSB7XG4gICAgcmV0dXJuIHRvcCA9PT0gYm90dG9tID09PSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGFsbERpcnMuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xufTtcblxuLyoqXG4gKiBVc2VzIG5hdGl2ZSBtZXRob2RzIHRvIHJldHVybiBhbiBvYmplY3Qgb2YgZGltZW5zaW9uIHZhbHVlcy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnkgfHwgSFRNTH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3Qgb3IgRE9NIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGdldCB0aGUgZGltZW5zaW9ucy4gQ2FuIGJlIGFueSBlbGVtZW50IG90aGVyIHRoYXQgZG9jdW1lbnQgb3Igd2luZG93LlxuICogQHJldHVybnMge09iamVjdH0gLSBuZXN0ZWQgb2JqZWN0IG9mIGludGVnZXIgcGl4ZWwgdmFsdWVzXG4gKiBUT0RPIC0gaWYgZWxlbWVudCBpcyB3aW5kb3csIHJldHVybiBvbmx5IHRob3NlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gR2V0RGltZW5zaW9ucyhlbGVtLCB0ZXN0KXtcbiAgZWxlbSA9IGVsZW0ubGVuZ3RoID8gZWxlbVswXSA6IGVsZW07XG5cbiAgaWYgKGVsZW0gPT09IHdpbmRvdyB8fCBlbGVtID09PSBkb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkknbSBzb3JyeSwgRGF2ZS4gSSdtIGFmcmFpZCBJIGNhbid0IGRvIHRoYXQuXCIpO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgcGFyUmVjdCA9IGVsZW0ucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpblJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgd2luWSA9IHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgIHdpblggPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIG9mZnNldDoge1xuICAgICAgdG9wOiByZWN0LnRvcCArIHdpblksXG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW5YXG4gICAgfSxcbiAgICBwYXJlbnREaW1zOiB7XG4gICAgICB3aWR0aDogcGFyUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogcGFyUmVjdC5oZWlnaHQsXG4gICAgICBvZmZzZXQ6IHtcbiAgICAgICAgdG9wOiBwYXJSZWN0LnRvcCArIHdpblksXG4gICAgICAgIGxlZnQ6IHBhclJlY3QubGVmdCArIHdpblhcbiAgICAgIH1cbiAgICB9LFxuICAgIHdpbmRvd0RpbXM6IHtcbiAgICAgIHdpZHRoOiB3aW5SZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB3aW5SZWN0LmhlaWdodCxcbiAgICAgIG9mZnNldDoge1xuICAgICAgICB0b3A6IHdpblksXG4gICAgICAgIGxlZnQ6IHdpblhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBvZiB0b3AgYW5kIGxlZnQgaW50ZWdlciBwaXhlbCB2YWx1ZXMgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGVsZW1lbnRzLFxuICogc3VjaCBhczogVG9vbHRpcCwgUmV2ZWFsLCBhbmQgRHJvcGRvd25cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IGZvciB0aGUgZWxlbWVudCBiZWluZyBwb3NpdGlvbmVkLlxuICogQHBhcmFtIHtqUXVlcnl9IGFuY2hvciAtIGpRdWVyeSBvYmplY3QgZm9yIHRoZSBlbGVtZW50J3MgYW5jaG9yIHBvaW50LlxuICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIC0gYSBzdHJpbmcgcmVsYXRpbmcgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQsIHJlbGF0aXZlIHRvIGl0J3MgYW5jaG9yXG4gKiBAcGFyYW0ge051bWJlcn0gdk9mZnNldCAtIGludGVnZXIgcGl4ZWwgdmFsdWUgb2YgZGVzaXJlZCB2ZXJ0aWNhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtOdW1iZXJ9IGhPZmZzZXQgLSBpbnRlZ2VyIHBpeGVsIHZhbHVlIG9mIGRlc2lyZWQgaG9yaXpvbnRhbCBzZXBhcmF0aW9uIGJldHdlZW4gYW5jaG9yIGFuZCBlbGVtZW50LlxuICogQHBhcmFtIHtCb29sZWFufSBpc092ZXJmbG93IC0gaWYgYSBjb2xsaXNpb24gZXZlbnQgaXMgZGV0ZWN0ZWQsIHNldHMgdG8gdHJ1ZSB0byBkZWZhdWx0IHRoZSBlbGVtZW50IHRvIGZ1bGwgd2lkdGggLSBhbnkgZGVzaXJlZCBvZmZzZXQuXG4gKiBUT0RPIGFsdGVyL3Jld3JpdGUgdG8gd29yayB3aXRoIGBlbWAgdmFsdWVzIGFzIHdlbGwvaW5zdGVhZCBvZiBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gR2V0T2Zmc2V0cyhlbGVtZW50LCBhbmNob3IsIHBvc2l0aW9uLCB2T2Zmc2V0LCBoT2Zmc2V0LCBpc092ZXJmbG93KSB7XG4gIHZhciAkZWxlRGltcyA9IEdldERpbWVuc2lvbnMoZWxlbWVudCksXG4gICAgICAkYW5jaG9yRGltcyA9IGFuY2hvciA/IEdldERpbWVuc2lvbnMoYW5jaG9yKSA6IG51bGw7XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoRm91bmRhdGlvbi5ydGwoKSA/ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gJGVsZURpbXMud2lkdGggKyAkYW5jaG9yRGltcy53aWR0aCA6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0KSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRhbmNob3JEaW1zLm9mZnNldC5sZWZ0IC0gKCRlbGVEaW1zLndpZHRoICsgaE9mZnNldCksXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAkYW5jaG9yRGltcy53aWR0aCArIGhPZmZzZXQsXG4gICAgICAgIHRvcDogJGFuY2hvckRpbXMub2Zmc2V0LnRvcFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIHRvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyAoJGFuY2hvckRpbXMud2lkdGggLyAyKSkgLSAoJGVsZURpbXMud2lkdGggLyAyKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wIC0gKCRlbGVEaW1zLmhlaWdodCArIHZPZmZzZXQpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXIgYm90dG9tJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGlzT3ZlcmZsb3cgPyBoT2Zmc2V0IDogKCgkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICgkYW5jaG9yRGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpKSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyIGxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAoJGVsZURpbXMud2lkdGggKyBoT2Zmc2V0KSxcbiAgICAgICAgdG9wOiAoJGFuY2hvckRpbXMub2Zmc2V0LnRvcCArICgkYW5jaG9yRGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlciByaWdodCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICRhbmNob3JEaW1zLndpZHRoICsgaE9mZnNldCArIDEsXG4gICAgICAgIHRvcDogKCRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAoJGFuY2hvckRpbXMuaGVpZ2h0IC8gMikpIC0gKCRlbGVEaW1zLmhlaWdodCAvIDIpXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdDogKCRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQgKyAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAvIDIpKSAtICgkZWxlRGltcy53aWR0aCAvIDIpLFxuICAgICAgICB0b3A6ICgkZWxlRGltcy53aW5kb3dEaW1zLm9mZnNldC50b3AgKyAoJGVsZURpbXMud2luZG93RGltcy5oZWlnaHQgLyAyKSkgLSAoJGVsZURpbXMuaGVpZ2h0IC8gMilcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JldmVhbCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAoJGVsZURpbXMud2luZG93RGltcy53aWR0aCAtICRlbGVEaW1zLndpZHRoKSAvIDIsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wICsgdk9mZnNldFxuICAgICAgfVxuICAgIGNhc2UgJ3JldmVhbCBmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6ICRlbGVEaW1zLndpbmRvd0RpbXMub2Zmc2V0LmxlZnQsXG4gICAgICAgIHRvcDogJGVsZURpbXMud2luZG93RGltcy5vZmZzZXQudG9wXG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0IGJvdHRvbSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0IGJvdHRvbSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiAkYW5jaG9yRGltcy5vZmZzZXQubGVmdCArICRhbmNob3JEaW1zLndpZHRoICsgaE9mZnNldCAtICRlbGVEaW1zLndpZHRoLFxuICAgICAgICB0b3A6ICRhbmNob3JEaW1zLm9mZnNldC50b3AgKyAkYW5jaG9yRGltcy5oZWlnaHQgKyB2T2Zmc2V0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IChGb3VuZGF0aW9uLnJ0bCgpID8gJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgLSAkZWxlRGltcy53aWR0aCArICRhbmNob3JEaW1zLndpZHRoIDogJGFuY2hvckRpbXMub2Zmc2V0LmxlZnQgKyBoT2Zmc2V0KSxcbiAgICAgICAgdG9wOiAkYW5jaG9yRGltcy5vZmZzZXQudG9wICsgJGFuY2hvckRpbXMuaGVpZ2h0ICsgdk9mZnNldFxuICAgICAgfVxuICB9XG59XG5cbn0oalF1ZXJ5KTtcbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogVGhpcyB1dGlsIHdhcyBjcmVhdGVkIGJ5IE1hcml1cyBPbGJlcnR6ICpcbiAqIFBsZWFzZSB0aGFuayBNYXJpdXMgb24gR2l0SHViIC9vd2xiZXJ0eiAqXG4gKiBvciB0aGUgd2ViIGh0dHA6Ly93d3cubWFyaXVzb2xiZXJ0ei5kZS8gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuY29uc3Qga2V5Q29kZXMgPSB7XG4gIDk6ICdUQUInLFxuICAxMzogJ0VOVEVSJyxcbiAgMjc6ICdFU0NBUEUnLFxuICAzMjogJ1NQQUNFJyxcbiAgMzc6ICdBUlJPV19MRUZUJyxcbiAgMzg6ICdBUlJPV19VUCcsXG4gIDM5OiAnQVJST1dfUklHSFQnLFxuICA0MDogJ0FSUk9XX0RPV04nXG59XG5cbnZhciBjb21tYW5kcyA9IHt9XG5cbnZhciBLZXlib2FyZCA9IHtcbiAga2V5czogZ2V0S2V5Q29kZXMoa2V5Q29kZXMpLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIChrZXlib2FyZCkgZXZlbnQgYW5kIHJldHVybnMgYSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIGl0cyBrZXlcbiAgICogQ2FuIGJlIHVzZWQgbGlrZSBGb3VuZGF0aW9uLnBhcnNlS2V5KGV2ZW50KSA9PT0gRm91bmRhdGlvbi5rZXlzLlNQQUNFXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gdGhlIGV2ZW50IGdlbmVyYXRlZCBieSB0aGUgZXZlbnQgaGFuZGxlclxuICAgKiBAcmV0dXJuIFN0cmluZyBrZXkgLSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBrZXkgcHJlc3NlZFxuICAgKi9cbiAgcGFyc2VLZXkoZXZlbnQpIHtcbiAgICB2YXIga2V5ID0ga2V5Q29kZXNbZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZV0gfHwgU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCkudG9VcHBlckNhc2UoKTtcblxuICAgIC8vIFJlbW92ZSB1bi1wcmludGFibGUgY2hhcmFjdGVycywgZS5nLiBmb3IgYGZyb21DaGFyQ29kZWAgY2FsbHMgZm9yIENUUkwgb25seSBldmVudHNcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxXKy8sICcnKTtcblxuICAgIGlmIChldmVudC5zaGlmdEtleSkga2V5ID0gYFNISUZUXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIGtleSA9IGBDVFJMXyR7a2V5fWA7XG4gICAgaWYgKGV2ZW50LmFsdEtleSkga2V5ID0gYEFMVF8ke2tleX1gO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHVuZGVyc2NvcmUsIGluIGNhc2Ugb25seSBtb2RpZmllcnMgd2VyZSB1c2VkIChlLmcuIG9ubHkgYENUUkxfQUxUYClcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXyQvLCAnJyk7XG5cbiAgICByZXR1cm4ga2V5O1xuICB9LFxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBnaXZlbiAoa2V5Ym9hcmQpIGV2ZW50XG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gdGhlIGV2ZW50IGdlbmVyYXRlZCBieSB0aGUgZXZlbnQgaGFuZGxlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcG9uZW50IC0gRm91bmRhdGlvbiBjb21wb25lbnQncyBuYW1lLCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHBhcmFtIHtPYmplY3RzfSBmdW5jdGlvbnMgLSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSB0byBiZSBleGVjdXRlZFxuICAgKi9cbiAgaGFuZGxlS2V5KGV2ZW50LCBjb21wb25lbnQsIGZ1bmN0aW9ucykge1xuICAgIHZhciBjb21tYW5kTGlzdCA9IGNvbW1hbmRzW2NvbXBvbmVudF0sXG4gICAgICBrZXlDb2RlID0gdGhpcy5wYXJzZUtleShldmVudCksXG4gICAgICBjbWRzLFxuICAgICAgY29tbWFuZCxcbiAgICAgIGZuO1xuXG4gICAgaWYgKCFjb21tYW5kTGlzdCkgcmV0dXJuIGNvbnNvbGUud2FybignQ29tcG9uZW50IG5vdCBkZWZpbmVkIScpO1xuXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kTGlzdC5sdHIgPT09ICd1bmRlZmluZWQnKSB7IC8vIHRoaXMgY29tcG9uZW50IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsdHIgYW5kIHJ0bFxuICAgICAgICBjbWRzID0gY29tbWFuZExpc3Q7IC8vIHVzZSBwbGFpbiBsaXN0XG4gICAgfSBlbHNlIHsgLy8gbWVyZ2UgbHRyIGFuZCBydGw6IGlmIGRvY3VtZW50IGlzIHJ0bCwgcnRsIG92ZXJ3cml0ZXMgbHRyIGFuZCB2aWNlIHZlcnNhXG4gICAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCgpKSBjbWRzID0gJC5leHRlbmQoe30sIGNvbW1hbmRMaXN0Lmx0ciwgY29tbWFuZExpc3QucnRsKTtcblxuICAgICAgICBlbHNlIGNtZHMgPSAkLmV4dGVuZCh7fSwgY29tbWFuZExpc3QucnRsLCBjb21tYW5kTGlzdC5sdHIpO1xuICAgIH1cbiAgICBjb21tYW5kID0gY21kc1trZXlDb2RlXTtcblxuICAgIGZuID0gZnVuY3Rpb25zW2NvbW1hbmRdO1xuICAgIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBmdW5jdGlvbiAgaWYgZXhpc3RzXG4gICAgICB2YXIgcmV0dXJuVmFsdWUgPSBmbi5hcHBseSgpO1xuICAgICAgaWYgKGZ1bmN0aW9ucy5oYW5kbGVkIHx8IHR5cGVvZiBmdW5jdGlvbnMuaGFuZGxlZCA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGZ1bmN0aW9uIHdoZW4gZXZlbnQgd2FzIGhhbmRsZWRcbiAgICAgICAgICBmdW5jdGlvbnMuaGFuZGxlZChyZXR1cm5WYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdW5jdGlvbnMudW5oYW5kbGVkIHx8IHR5cGVvZiBmdW5jdGlvbnMudW5oYW5kbGVkID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgZnVuY3Rpb24gd2hlbiBldmVudCB3YXMgbm90IGhhbmRsZWRcbiAgICAgICAgICBmdW5jdGlvbnMudW5oYW5kbGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiB0aGUgZ2l2ZW4gYCRlbGVtZW50YFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIHNlYXJjaCB3aXRoaW5cbiAgICogQHJldHVybiB7alF1ZXJ5fSAkZm9jdXNhYmxlIC0gYWxsIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoaW4gYCRlbGVtZW50YFxuICAgKi9cbiAgZmluZEZvY3VzYWJsZSgkZWxlbWVudCkge1xuICAgIGlmKCEkZWxlbWVudCkge3JldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiAkZWxlbWVudC5maW5kKCdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCAqW3RhYmluZGV4XSwgKltjb250ZW50ZWRpdGFibGVdJykuZmlsdGVyKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCEkKHRoaXMpLmlzKCc6dmlzaWJsZScpIHx8ICQodGhpcykuYXR0cigndGFiaW5kZXgnKSA8IDApIHsgcmV0dXJuIGZhbHNlOyB9IC8vb25seSBoYXZlIHZpc2libGUgZWxlbWVudHMgYW5kIHRob3NlIHRoYXQgaGF2ZSBhIHRhYmluZGV4IGdyZWF0ZXIgb3IgZXF1YWwgMFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCBuYW1lIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVudCAtIEZvdW5kYXRpb24gY29tcG9uZW50LCBlLmcuIFNsaWRlciBvciBSZXZlYWxcbiAgICogQHJldHVybiBTdHJpbmcgY29tcG9uZW50TmFtZVxuICAgKi9cblxuICByZWdpc3Rlcihjb21wb25lbnROYW1lLCBjbWRzKSB7XG4gICAgY29tbWFuZHNbY29tcG9uZW50TmFtZV0gPSBjbWRzO1xuICB9LCAgXG5cbiAgLyoqXG4gICAqIFRyYXBzIHRoZSBmb2N1cyBpbiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICogQHBhcmFtICB7alF1ZXJ5fSAkZWxlbWVudCAgalF1ZXJ5IG9iamVjdCB0byB0cmFwIHRoZSBmb3VjcyBpbnRvLlxuICAgKi9cbiAgdHJhcEZvY3VzKCRlbGVtZW50KSB7XG4gICAgdmFyICRmb2N1c2FibGUgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUoJGVsZW1lbnQpLFxuICAgICAgICAkZmlyc3RGb2N1c2FibGUgPSAkZm9jdXNhYmxlLmVxKDApLFxuICAgICAgICAkbGFzdEZvY3VzYWJsZSA9ICRmb2N1c2FibGUuZXEoLTEpO1xuXG4gICAgJGVsZW1lbnQub24oJ2tleWRvd24uemYudHJhcGZvY3VzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09ICRsYXN0Rm9jdXNhYmxlWzBdICYmIEZvdW5kYXRpb24uS2V5Ym9hcmQucGFyc2VLZXkoZXZlbnQpID09PSAnVEFCJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZmlyc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gJGZpcnN0Rm9jdXNhYmxlWzBdICYmIEZvdW5kYXRpb24uS2V5Ym9hcmQucGFyc2VLZXkoZXZlbnQpID09PSAnU0hJRlRfVEFCJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkbGFzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIHRyYXBwZWQgZm9jdXMgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICogQHBhcmFtICB7alF1ZXJ5fSAkZWxlbWVudCAgalF1ZXJ5IG9iamVjdCB0byByZWxlYXNlIHRoZSBmb2N1cyBmb3IuXG4gICAqL1xuICByZWxlYXNlRm9jdXMoJGVsZW1lbnQpIHtcbiAgICAkZWxlbWVudC5vZmYoJ2tleWRvd24uemYudHJhcGZvY3VzJyk7XG4gIH1cbn1cblxuLypcbiAqIENvbnN0YW50cyBmb3IgZWFzaWVyIGNvbXBhcmluZy5cbiAqIENhbiBiZSB1c2VkIGxpa2UgRm91bmRhdGlvbi5wYXJzZUtleShldmVudCkgPT09IEZvdW5kYXRpb24ua2V5cy5TUEFDRVxuICovXG5mdW5jdGlvbiBnZXRLZXlDb2RlcyhrY3MpIHtcbiAgdmFyIGsgPSB7fTtcbiAgZm9yICh2YXIga2MgaW4ga2NzKSBrW2tjc1trY11dID0ga2NzW2tjXTtcbiAgcmV0dXJuIGs7XG59XG5cbkZvdW5kYXRpb24uS2V5Ym9hcmQgPSBLZXlib2FyZDtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vLyBEZWZhdWx0IHNldCBvZiBtZWRpYSBxdWVyaWVzXG5jb25zdCBkZWZhdWx0UXVlcmllcyA9IHtcbiAgJ2RlZmF1bHQnIDogJ29ubHkgc2NyZWVuJyxcbiAgbGFuZHNjYXBlIDogJ29ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICBwb3J0cmFpdCA6ICdvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICByZXRpbmEgOiAnb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCcgK1xuICAgICdvbmx5IHNjcmVlbiBhbmQgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksJyArXG4gICAgJ29ubHkgc2NyZWVuIGFuZCAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwnICtcbiAgICAnb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpJ1xufTtcblxudmFyIE1lZGlhUXVlcnkgPSB7XG4gIHF1ZXJpZXM6IFtdLFxuXG4gIGN1cnJlbnQ6ICcnLFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgbWVkaWEgcXVlcnkgaGVscGVyLCBieSBleHRyYWN0aW5nIHRoZSBicmVha3BvaW50IGxpc3QgZnJvbSB0aGUgQ1NTIGFuZCBhY3RpdmF0aW5nIHRoZSBicmVha3BvaW50IHdhdGNoZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBleHRyYWN0ZWRTdHlsZXMgPSAkKCcuZm91bmRhdGlvbi1tcScpLmNzcygnZm9udC1mYW1pbHknKTtcbiAgICB2YXIgbmFtZWRRdWVyaWVzO1xuXG4gICAgbmFtZWRRdWVyaWVzID0gcGFyc2VTdHlsZVRvT2JqZWN0KGV4dHJhY3RlZFN0eWxlcyk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gbmFtZWRRdWVyaWVzKSB7XG4gICAgICBpZihuYW1lZFF1ZXJpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBzZWxmLnF1ZXJpZXMucHVzaCh7XG4gICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgIHZhbHVlOiBgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR7bmFtZWRRdWVyaWVzW2tleV19KWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5fZ2V0Q3VycmVudFNpemUoKTtcblxuICAgIHRoaXMuX3dhdGNoZXIoKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzY3JlZW4gaXMgYXQgbGVhc3QgYXMgd2lkZSBhcyBhIGJyZWFrcG9pbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2l6ZSAtIE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGJyZWFrcG9pbnQgbWF0Y2hlcywgYGZhbHNlYCBpZiBpdCdzIHNtYWxsZXIuXG4gICAqL1xuICBhdExlYXN0KHNpemUpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmdldChzaXplKTtcblxuICAgIGlmIChxdWVyeSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzY3JlZW4gbWF0Y2hlcyB0byBhIGJyZWFrcG9pbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2l6ZSAtIE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgdG8gY2hlY2ssIGVpdGhlciAnc21hbGwgb25seScgb3IgJ3NtYWxsJy4gT21pdHRpbmcgJ29ubHknIGZhbGxzIGJhY2sgdG8gdXNpbmcgYXRMZWFzdCgpIG1ldGhvZC5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYnJlYWtwb2ludCBtYXRjaGVzLCBgZmFsc2VgIGlmIGl0IGRvZXMgbm90LlxuICAgKi9cbiAgaXMoc2l6ZSkge1xuICAgIHNpemUgPSBzaXplLnRyaW0oKS5zcGxpdCgnICcpO1xuICAgIGlmKHNpemUubGVuZ3RoID4gMSAmJiBzaXplWzFdID09PSAnb25seScpIHtcbiAgICAgIGlmKHNpemVbMF0gPT09IHRoaXMuX2dldEN1cnJlbnRTaXplKCkpIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hdExlYXN0KHNpemVbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lZGlhIHF1ZXJ5IG9mIGEgYnJlYWtwb2ludC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gTmFtZSBvZiB0aGUgYnJlYWtwb2ludCB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gLSBUaGUgbWVkaWEgcXVlcnkgb2YgdGhlIGJyZWFrcG9pbnQsIG9yIGBudWxsYCBpZiB0aGUgYnJlYWtwb2ludCBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0KHNpemUpIHtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMucXVlcmllcykge1xuICAgICAgaWYodGhpcy5xdWVyaWVzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcbiAgICAgICAgaWYgKHNpemUgPT09IHF1ZXJ5Lm5hbWUpIHJldHVybiBxdWVyeS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBicmVha3BvaW50IG5hbWUgYnkgdGVzdGluZyBldmVyeSBicmVha3BvaW50IGFuZCByZXR1cm5pbmcgdGhlIGxhc3Qgb25lIHRvIG1hdGNoICh0aGUgYmlnZ2VzdCBvbmUpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1N0cmluZ30gTmFtZSBvZiB0aGUgY3VycmVudCBicmVha3BvaW50LlxuICAgKi9cbiAgX2dldEN1cnJlbnRTaXplKCkge1xuICAgIHZhciBtYXRjaGVkO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcmllc1tpXTtcblxuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5LnZhbHVlKS5tYXRjaGVzKSB7XG4gICAgICAgIG1hdGNoZWQgPSBxdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1hdGNoZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZC5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgYnJlYWtwb2ludCB3YXRjaGVyLCB3aGljaCBmaXJlcyBhbiBldmVudCBvbiB0aGUgd2luZG93IHdoZW5ldmVyIHRoZSBicmVha3BvaW50IGNoYW5nZXMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3dhdGNoZXIoKSB7XG4gICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuemYubWVkaWFxdWVyeScsICgpID0+IHtcbiAgICAgIHZhciBuZXdTaXplID0gdGhpcy5fZ2V0Q3VycmVudFNpemUoKSwgY3VycmVudFNpemUgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChuZXdTaXplICE9PSBjdXJyZW50U2l6ZSkge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIGN1cnJlbnQgbWVkaWEgcXVlcnlcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3U2l6ZTtcblxuICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIG1lZGlhIHF1ZXJ5IGNoYW5nZSBvbiB0aGUgd2luZG93XG4gICAgICAgICQod2luZG93KS50cmlnZ2VyKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBbbmV3U2l6ZSwgY3VycmVudFNpemVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuRm91bmRhdGlvbi5NZWRpYVF1ZXJ5ID0gTWVkaWFRdWVyeTtcblxuLy8gbWF0Y2hNZWRpYSgpIHBvbHlmaWxsIC0gVGVzdCBhIENTUyBtZWRpYSB0eXBlL3F1ZXJ5IGluIEpTLlxuLy8gQXV0aG9ycyAmIGNvcHlyaWdodCAoYykgMjAxMjogU2NvdHQgSmVobCwgUGF1bCBJcmlzaCwgTmljaG9sYXMgWmFrYXMsIERhdmlkIEtuaWdodC4gRHVhbCBNSVQvQlNEIGxpY2Vuc2VcbndpbmRvdy5tYXRjaE1lZGlhIHx8ICh3aW5kb3cubWF0Y2hNZWRpYSA9IGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBtYXRjaE1lZGl1bSBhcGkgc3VjaCBhcyBJRSA5IGFuZCB3ZWJraXRcbiAgdmFyIHN0eWxlTWVkaWEgPSAod2luZG93LnN0eWxlTWVkaWEgfHwgd2luZG93Lm1lZGlhKTtcblxuICAvLyBGb3IgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IG1hdGNoTWVkaXVtXG4gIGlmICghc3R5bGVNZWRpYSkge1xuICAgIHZhciBzdHlsZSAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSxcbiAgICBzY3JpcHQgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXSxcbiAgICBpbmZvICAgICAgICA9IG51bGw7XG5cbiAgICBzdHlsZS50eXBlICA9ICd0ZXh0L2Nzcyc7XG4gICAgc3R5bGUuaWQgICAgPSAnbWF0Y2htZWRpYWpzLXRlc3QnO1xuXG4gICAgc2NyaXB0ICYmIHNjcmlwdC5wYXJlbnROb2RlICYmIHNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdHlsZSwgc2NyaXB0KTtcblxuICAgIC8vICdzdHlsZS5jdXJyZW50U3R5bGUnIGlzIHVzZWQgYnkgSUUgPD0gOCBhbmQgJ3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlJyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgaW5mbyA9ICgnZ2V0Q29tcHV0ZWRTdHlsZScgaW4gd2luZG93KSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdHlsZSwgbnVsbCkgfHwgc3R5bGUuY3VycmVudFN0eWxlO1xuXG4gICAgc3R5bGVNZWRpYSA9IHtcbiAgICAgIG1hdGNoTWVkaXVtKG1lZGlhKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gYEBtZWRpYSAke21lZGlhfXsgI21hdGNobWVkaWFqcy10ZXN0IHsgd2lkdGg6IDFweDsgfSB9YDtcblxuICAgICAgICAvLyAnc3R5bGUuc3R5bGVTaGVldCcgaXMgdXNlZCBieSBJRSA8PSA4IGFuZCAnc3R5bGUudGV4dENvbnRlbnQnIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlc3QgaWYgbWVkaWEgcXVlcnkgaXMgdHJ1ZSBvciBmYWxzZVxuICAgICAgICByZXR1cm4gaW5mby53aWR0aCA9PT0gJzFweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG1lZGlhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXM6IHN0eWxlTWVkaWEubWF0Y2hNZWRpdW0obWVkaWEgfHwgJ2FsbCcpLFxuICAgICAgbWVkaWE6IG1lZGlhIHx8ICdhbGwnXG4gICAgfTtcbiAgfVxufSgpKTtcblxuLy8gVGhhbmsgeW91OiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZ1xuZnVuY3Rpb24gcGFyc2VTdHlsZVRvT2JqZWN0KHN0cikge1xuICB2YXIgc3R5bGVPYmplY3QgPSB7fTtcblxuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3R5bGVPYmplY3Q7XG4gIH1cblxuICBzdHIgPSBzdHIudHJpbSgpLnNsaWNlKDEsIC0xKTsgLy8gYnJvd3NlcnMgcmUtcXVvdGUgc3RyaW5nIHN0eWxlIHZhbHVlc1xuXG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0eWxlT2JqZWN0O1xuICB9XG5cbiAgc3R5bGVPYmplY3QgPSBzdHIuc3BsaXQoJyYnKS5yZWR1Y2UoZnVuY3Rpb24ocmV0LCBwYXJhbSkge1xuICAgIHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG4gICAgdmFyIGtleSA9IHBhcnRzWzBdO1xuICAgIHZhciB2YWwgPSBwYXJ0c1sxXTtcbiAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcblxuICAgIC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG4gICAgLy8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuICAgIHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG4gICAgaWYgKCFyZXQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0W2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJldFtrZXldKSkge1xuICAgICAgcmV0W2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IFtyZXRba2V5XSwgdmFsXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSwge30pO1xuXG4gIHJldHVybiBzdHlsZU9iamVjdDtcbn1cblxuRm91bmRhdGlvbi5NZWRpYVF1ZXJ5ID0gTWVkaWFRdWVyeTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIE1vdGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubW90aW9uXG4gKi9cblxuY29uc3QgaW5pdENsYXNzZXMgICA9IFsnbXVpLWVudGVyJywgJ211aS1sZWF2ZSddO1xuY29uc3QgYWN0aXZlQ2xhc3NlcyA9IFsnbXVpLWVudGVyLWFjdGl2ZScsICdtdWktbGVhdmUtYWN0aXZlJ107XG5cbmNvbnN0IE1vdGlvbiA9IHtcbiAgYW5pbWF0ZUluOiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZSh0cnVlLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKTtcbiAgfSxcblxuICBhbmltYXRlT3V0OiBmdW5jdGlvbihlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gICAgYW5pbWF0ZShmYWxzZSwgZWxlbWVudCwgYW5pbWF0aW9uLCBjYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW92ZShkdXJhdGlvbiwgZWxlbSwgZm4pe1xuICB2YXIgYW5pbSwgcHJvZywgc3RhcnQgPSBudWxsO1xuICAvLyBjb25zb2xlLmxvZygnY2FsbGVkJyk7XG5cbiAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgZm4uYXBwbHkoZWxlbSk7XG4gICAgZWxlbS50cmlnZ2VyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKS50cmlnZ2VySGFuZGxlcignZmluaXNoZWQuemYuYW5pbWF0ZScsIFtlbGVtXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZSh0cyl7XG4gICAgaWYoIXN0YXJ0KSBzdGFydCA9IHRzO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0YXJ0LCB0cyk7XG4gICAgcHJvZyA9IHRzIC0gc3RhcnQ7XG4gICAgZm4uYXBwbHkoZWxlbSk7XG5cbiAgICBpZihwcm9nIDwgZHVyYXRpb24peyBhbmltID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtb3ZlLCBlbGVtKTsgfVxuICAgIGVsc2V7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbSk7XG4gICAgICBlbGVtLnRyaWdnZXIoJ2ZpbmlzaGVkLnpmLmFuaW1hdGUnLCBbZWxlbV0pLnRyaWdnZXJIYW5kbGVyKCdmaW5pc2hlZC56Zi5hbmltYXRlJywgW2VsZW1dKTtcbiAgICB9XG4gIH1cbiAgYW5pbSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobW92ZSk7XG59XG5cbi8qKlxuICogQW5pbWF0ZXMgYW4gZWxlbWVudCBpbiBvciBvdXQgdXNpbmcgYSBDU1MgdHJhbnNpdGlvbiBjbGFzcy5cbiAqIEBmdW5jdGlvblxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbiAtIERlZmluZXMgaWYgdGhlIGFuaW1hdGlvbiBpcyBpbiBvciBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvciBIVE1MIG9iamVjdCB0byBhbmltYXRlLlxuICogQHBhcmFtIHtTdHJpbmd9IGFuaW1hdGlvbiAtIENTUyBjbGFzcyB0byB1c2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIENhbGxiYWNrIHRvIHJ1biB3aGVuIGFuaW1hdGlvbiBpcyBmaW5pc2hlZC5cbiAqL1xuZnVuY3Rpb24gYW5pbWF0ZShpc0luLCBlbGVtZW50LCBhbmltYXRpb24sIGNiKSB7XG4gIGVsZW1lbnQgPSAkKGVsZW1lbnQpLmVxKDApO1xuXG4gIGlmICghZWxlbWVudC5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgaW5pdENsYXNzID0gaXNJbiA/IGluaXRDbGFzc2VzWzBdIDogaW5pdENsYXNzZXNbMV07XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzSW4gPyBhY3RpdmVDbGFzc2VzWzBdIDogYWN0aXZlQ2xhc3Nlc1sxXTtcblxuICAvLyBTZXQgdXAgdGhlIGFuaW1hdGlvblxuICByZXNldCgpO1xuXG4gIGVsZW1lbnRcbiAgICAuYWRkQ2xhc3MoYW5pbWF0aW9uKVxuICAgIC5jc3MoJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgZWxlbWVudC5hZGRDbGFzcyhpbml0Q2xhc3MpO1xuICAgIGlmIChpc0luKSBlbGVtZW50LnNob3coKTtcbiAgfSk7XG5cbiAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGg7XG4gICAgZWxlbWVudFxuICAgICAgLmNzcygndHJhbnNpdGlvbicsICcnKVxuICAgICAgLmFkZENsYXNzKGFjdGl2ZUNsYXNzKTtcbiAgfSk7XG5cbiAgLy8gQ2xlYW4gdXAgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGZpbmlzaGVzXG4gIGVsZW1lbnQub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZChlbGVtZW50KSwgZmluaXNoKTtcblxuICAvLyBIaWRlcyB0aGUgZWxlbWVudCAoZm9yIG91dCBhbmltYXRpb25zKSwgcmVzZXRzIHRoZSBlbGVtZW50LCBhbmQgcnVucyBhIGNhbGxiYWNrXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBpZiAoIWlzSW4pIGVsZW1lbnQuaGlkZSgpO1xuICAgIHJlc2V0KCk7XG4gICAgaWYgKGNiKSBjYi5hcHBseShlbGVtZW50KTtcbiAgfVxuXG4gIC8vIFJlc2V0cyB0cmFuc2l0aW9ucyBhbmQgcmVtb3ZlcyBtb3Rpb24tc3BlY2lmaWMgY2xhc3Nlc1xuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBlbGVtZW50WzBdLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcyhgJHtpbml0Q2xhc3N9ICR7YWN0aXZlQ2xhc3N9ICR7YW5pbWF0aW9ufWApO1xuICB9XG59XG5cbkZvdW5kYXRpb24uTW92ZSA9IE1vdmU7XG5Gb3VuZGF0aW9uLk1vdGlvbiA9IE1vdGlvbjtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG5jb25zdCBOZXN0ID0ge1xuICBGZWF0aGVyKG1lbnUsIHR5cGUgPSAnemYnKSB7XG4gICAgbWVudS5hdHRyKCdyb2xlJywgJ21lbnViYXInKTtcblxuICAgIHZhciBpdGVtcyA9IG1lbnUuZmluZCgnbGknKS5hdHRyKHsncm9sZSc6ICdtZW51aXRlbSd9KSxcbiAgICAgICAgc3ViTWVudUNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudWAsXG4gICAgICAgIHN1Ykl0ZW1DbGFzcyA9IGAke3N1Yk1lbnVDbGFzc30taXRlbWAsXG4gICAgICAgIGhhc1N1YkNsYXNzID0gYGlzLSR7dHlwZX0tc3VibWVudS1wYXJlbnRgO1xuXG4gICAgaXRlbXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciAkaXRlbSA9ICQodGhpcyksXG4gICAgICAgICAgJHN1YiA9ICRpdGVtLmNoaWxkcmVuKCd1bCcpO1xuXG4gICAgICBpZiAoJHN1Yi5sZW5ndGgpIHtcbiAgICAgICAgJGl0ZW1cbiAgICAgICAgICAuYWRkQ2xhc3MoaGFzU3ViQ2xhc3MpXG4gICAgICAgICAgLmF0dHIoe1xuICAgICAgICAgICAgJ2FyaWEtaGFzcG9wdXAnOiB0cnVlLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAkaXRlbS5jaGlsZHJlbignYTpmaXJzdCcpLnRleHQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIE5vdGU6ICBEcmlsbGRvd25zIGJlaGF2ZSBkaWZmZXJlbnRseSBpbiBob3cgdGhleSBoaWRlLCBhbmQgc28gbmVlZFxuICAgICAgICAgIC8vIGFkZGl0aW9uYWwgYXR0cmlidXRlcy4gIFdlIHNob3VsZCBsb29rIGlmIHRoaXMgcG9zc2libHkgb3Zlci1nZW5lcmFsaXplZFxuICAgICAgICAgIC8vIHV0aWxpdHkgKE5lc3QpIGlzIGFwcHJvcHJpYXRlIHdoZW4gd2UgcmV3b3JrIG1lbnVzIGluIDYuNFxuICAgICAgICAgIGlmKHR5cGUgPT09ICdkcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAkaXRlbS5hdHRyKHsnYXJpYS1leHBhbmRlZCc6IGZhbHNlfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICRzdWJcbiAgICAgICAgICAuYWRkQ2xhc3MoYHN1Ym1lbnUgJHtzdWJNZW51Q2xhc3N9YClcbiAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAnZGF0YS1zdWJtZW51JzogJycsXG4gICAgICAgICAgICAncm9sZSc6ICdtZW51J1xuICAgICAgICAgIH0pO1xuICAgICAgICBpZih0eXBlID09PSAnZHJpbGxkb3duJykge1xuICAgICAgICAgICRzdWIuYXR0cih7J2FyaWEtaGlkZGVuJzogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkaXRlbS5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKSB7XG4gICAgICAgICRpdGVtLmFkZENsYXNzKGBpcy1zdWJtZW51LWl0ZW0gJHtzdWJJdGVtQ2xhc3N9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm47XG4gIH0sXG5cbiAgQnVybihtZW51LCB0eXBlKSB7XG4gICAgdmFyIC8vaXRlbXMgPSBtZW51LmZpbmQoJ2xpJyksXG4gICAgICAgIHN1Yk1lbnVDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnVgLFxuICAgICAgICBzdWJJdGVtQ2xhc3MgPSBgJHtzdWJNZW51Q2xhc3N9LWl0ZW1gLFxuICAgICAgICBoYXNTdWJDbGFzcyA9IGBpcy0ke3R5cGV9LXN1Ym1lbnUtcGFyZW50YDtcblxuICAgIG1lbnVcbiAgICAgIC5maW5kKCc+bGksIC5tZW51LCAubWVudSA+IGxpJylcbiAgICAgIC5yZW1vdmVDbGFzcyhgJHtzdWJNZW51Q2xhc3N9ICR7c3ViSXRlbUNsYXNzfSAke2hhc1N1YkNsYXNzfSBpcy1zdWJtZW51LWl0ZW0gc3VibWVudSBpcy1hY3RpdmVgKVxuICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3VibWVudScpLmNzcygnZGlzcGxheScsICcnKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCAgICAgIG1lbnUuZmluZCgnLicgKyBzdWJNZW51Q2xhc3MgKyAnLCAuJyArIHN1Ykl0ZW1DbGFzcyArICcsIC5oYXMtc3VibWVudSwgLmlzLXN1Ym1lbnUtaXRlbSwgLnN1Ym1lbnUsIFtkYXRhLXN1Ym1lbnVdJylcbiAgICAvLyAgICAgICAgICAgLnJlbW92ZUNsYXNzKHN1Yk1lbnVDbGFzcyArICcgJyArIHN1Ykl0ZW1DbGFzcyArICcgaGFzLXN1Ym1lbnUgaXMtc3VibWVudS1pdGVtIHN1Ym1lbnUnKVxuICAgIC8vICAgICAgICAgICAucmVtb3ZlQXR0cignZGF0YS1zdWJtZW51JykpO1xuICAgIC8vIGl0ZW1zLmVhY2goZnVuY3Rpb24oKXtcbiAgICAvLyAgIHZhciAkaXRlbSA9ICQodGhpcyksXG4gICAgLy8gICAgICAgJHN1YiA9ICRpdGVtLmNoaWxkcmVuKCd1bCcpO1xuICAgIC8vICAgaWYoJGl0ZW0ucGFyZW50KCdbZGF0YS1zdWJtZW51XScpLmxlbmd0aCl7XG4gICAgLy8gICAgICRpdGVtLnJlbW92ZUNsYXNzKCdpcy1zdWJtZW51LWl0ZW0gJyArIHN1Ykl0ZW1DbGFzcyk7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZigkc3ViLmxlbmd0aCl7XG4gICAgLy8gICAgICRpdGVtLnJlbW92ZUNsYXNzKCdoYXMtc3VibWVudScpO1xuICAgIC8vICAgICAkc3ViLnJlbW92ZUNsYXNzKCdzdWJtZW51ICcgKyBzdWJNZW51Q2xhc3MpLnJlbW92ZUF0dHIoJ2RhdGEtc3VibWVudScpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICB9XG59XG5cbkZvdW5kYXRpb24uTmVzdCA9IE5lc3Q7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuZnVuY3Rpb24gVGltZXIoZWxlbSwgb3B0aW9ucywgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgIGR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiwvL29wdGlvbnMgaXMgYW4gb2JqZWN0IGZvciBlYXNpbHkgYWRkaW5nIGZlYXR1cmVzIGxhdGVyLlxuICAgICAgbmFtZVNwYWNlID0gT2JqZWN0LmtleXMoZWxlbS5kYXRhKCkpWzBdIHx8ICd0aW1lcicsXG4gICAgICByZW1haW4gPSAtMSxcbiAgICAgIHN0YXJ0LFxuICAgICAgdGltZXI7XG5cbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuXG4gIHRoaXMucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHJlbWFpbiA9IC0xO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAvLyBpZighZWxlbS5kYXRhKCdwYXVzZWQnKSl7IHJldHVybiBmYWxzZTsgfS8vbWF5YmUgaW1wbGVtZW50IHRoaXMgc2FuaXR5IGNoZWNrIGlmIHVzZWQgZm9yIG90aGVyIHRoaW5ncy5cbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHJlbWFpbiA9IHJlbWFpbiA8PSAwID8gZHVyYXRpb24gOiByZW1haW47XG4gICAgZWxlbS5kYXRhKCdwYXVzZWQnLCBmYWxzZSk7XG4gICAgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgaWYob3B0aW9ucy5pbmZpbml0ZSl7XG4gICAgICAgIF90aGlzLnJlc3RhcnQoKTsvL3JlcnVuIHRoZSB0aW1lci5cbiAgICAgIH1cbiAgICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICAgIH0sIHJlbWFpbik7XG4gICAgZWxlbS50cmlnZ2VyKGB0aW1lcnN0YXJ0LnpmLiR7bmFtZVNwYWNlfWApO1xuICB9XG5cbiAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgIC8vaWYoZWxlbS5kYXRhKCdwYXVzZWQnKSl7IHJldHVybiBmYWxzZTsgfS8vbWF5YmUgaW1wbGVtZW50IHRoaXMgc2FuaXR5IGNoZWNrIGlmIHVzZWQgZm9yIG90aGVyIHRoaW5ncy5cbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIGVsZW0uZGF0YSgncGF1c2VkJywgdHJ1ZSk7XG4gICAgdmFyIGVuZCA9IERhdGUubm93KCk7XG4gICAgcmVtYWluID0gcmVtYWluIC0gKGVuZCAtIHN0YXJ0KTtcbiAgICBlbGVtLnRyaWdnZXIoYHRpbWVycGF1c2VkLnpmLiR7bmFtZVNwYWNlfWApO1xuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gaW1hZ2VzIGFyZSBmdWxseSBsb2FkZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gaW1hZ2VzIC0gSW1hZ2UocykgdG8gY2hlY2sgaWYgbG9hZGVkLlxuICogQHBhcmFtIHtGdW5jfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIG9uSW1hZ2VzTG9hZGVkKGltYWdlcywgY2FsbGJhY2spe1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICB1bmxvYWRlZCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgaWYgKHVubG9hZGVkID09PSAwKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIGltYWdlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIGxvYWRlZFxuICAgIGlmICh0aGlzLmNvbXBsZXRlIHx8ICh0aGlzLnJlYWR5U3RhdGUgPT09IDQpIHx8ICh0aGlzLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpKSB7XG4gICAgICBzaW5nbGVJbWFnZUxvYWRlZCgpO1xuICAgIH1cbiAgICAvLyBGb3JjZSBsb2FkIHRoZSBpbWFnZVxuICAgIGVsc2Uge1xuICAgICAgLy8gZml4IGZvciBJRS4gU2VlIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvanF1ZXJ5L2ZpeGluZy1sb2FkLWluLWllLWZvci1jYWNoZWQtaW1hZ2VzL1xuICAgICAgdmFyIHNyYyA9ICQodGhpcykuYXR0cignc3JjJyk7XG4gICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsIHNyYyArIChzcmMuaW5kZXhPZignPycpID49IDAgPyAnJicgOiAnPycpICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSk7XG4gICAgICAkKHRoaXMpLm9uZSgnbG9hZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzaW5nbGVJbWFnZUxvYWRlZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBzaW5nbGVJbWFnZUxvYWRlZCgpIHtcbiAgICB1bmxvYWRlZC0tO1xuICAgIGlmICh1bmxvYWRlZCA9PT0gMCkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cbn1cblxuRm91bmRhdGlvbi5UaW1lciA9IFRpbWVyO1xuRm91bmRhdGlvbi5vbkltYWdlc0xvYWRlZCA9IG9uSW1hZ2VzTG9hZGVkO1xuXG59KGpRdWVyeSk7XG4iLCIvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyoqV29yayBpbnNwaXJlZCBieSBtdWx0aXBsZSBqcXVlcnkgc3dpcGUgcGx1Z2lucyoqXG4vLyoqRG9uZSBieSBZb2hhaSBBcmFyYXQgKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4oZnVuY3Rpb24oJCkge1xuXG4gICQuc3BvdFN3aXBlID0ge1xuICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgZW5hYmxlZDogJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIHByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgICBtb3ZlVGhyZXNob2xkOiA3NSxcbiAgICB0aW1lVGhyZXNob2xkOiAyMDBcbiAgfTtcblxuICB2YXIgICBzdGFydFBvc1gsXG4gICAgICAgIHN0YXJ0UG9zWSxcbiAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICBlbGFwc2VkVGltZSxcbiAgICAgICAgaXNNb3ZpbmcgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgIC8vICBhbGVydCh0aGlzKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgaXNNb3ZpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICBpZiAoJC5zcG90U3dpcGUucHJldmVudERlZmF1bHQpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XG4gICAgaWYoaXNNb3ZpbmcpIHtcbiAgICAgIHZhciB4ID0gZS50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgdmFyIHkgPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB2YXIgZHggPSBzdGFydFBvc1ggLSB4O1xuICAgICAgdmFyIGR5ID0gc3RhcnRQb3NZIC0geTtcbiAgICAgIHZhciBkaXI7XG4gICAgICBlbGFwc2VkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lO1xuICAgICAgaWYoTWF0aC5hYnMoZHgpID49ICQuc3BvdFN3aXBlLm1vdmVUaHJlc2hvbGQgJiYgZWxhcHNlZFRpbWUgPD0gJC5zcG90U3dpcGUudGltZVRocmVzaG9sZCkge1xuICAgICAgICBkaXIgPSBkeCA+IDAgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSBpZihNYXRoLmFicyhkeSkgPj0gJC5zcG90U3dpcGUubW92ZVRocmVzaG9sZCAmJiBlbGFwc2VkVGltZSA8PSAkLnNwb3RTd2lwZS50aW1lVGhyZXNob2xkKSB7XG4gICAgICAvLyAgIGRpciA9IGR5ID4gMCA/ICdkb3duJyA6ICd1cCc7XG4gICAgICAvLyB9XG4gICAgICBpZihkaXIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvblRvdWNoRW5kLmNhbGwodGhpcyk7XG4gICAgICAgICQodGhpcykudHJpZ2dlcignc3dpcGUnLCBkaXIpLnRyaWdnZXIoYHN3aXBlJHtkaXJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGUpIHtcbiAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICBzdGFydFBvc1ggPSBlLnRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICBzdGFydFBvc1kgPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICBpc01vdmluZyA9IHRydWU7XG4gICAgICBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgJiYgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZWFyZG93bigpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICB9XG5cbiAgJC5ldmVudC5zcGVjaWFsLnN3aXBlID0geyBzZXR1cDogaW5pdCB9O1xuXG4gICQuZWFjaChbJ2xlZnQnLCAndXAnLCAnZG93bicsICdyaWdodCddLCBmdW5jdGlvbiAoKSB7XG4gICAgJC5ldmVudC5zcGVjaWFsW2Bzd2lwZSR7dGhpc31gXSA9IHsgc2V0dXA6IGZ1bmN0aW9uKCl7XG4gICAgICAkKHRoaXMpLm9uKCdzd2lwZScsICQubm9vcCk7XG4gICAgfSB9O1xuICB9KTtcbn0pKGpRdWVyeSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogTWV0aG9kIGZvciBhZGRpbmcgcHN1ZWRvIGRyYWcgZXZlbnRzIHRvIGVsZW1lbnRzICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4hZnVuY3Rpb24oJCl7XG4gICQuZm4uYWRkVG91Y2ggPSBmdW5jdGlvbigpe1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbihpLGVsKXtcbiAgICAgICQoZWwpLmJpbmQoJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJyxmdW5jdGlvbigpe1xuICAgICAgICAvL3dlIHBhc3MgdGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdCBiZWNhdXNlIHRoZSBqUXVlcnkgZXZlbnRcbiAgICAgICAgLy9vYmplY3QgaXMgbm9ybWFsaXplZCB0byB3M2Mgc3BlY3MgYW5kIGRvZXMgbm90IHByb3ZpZGUgdGhlIFRvdWNoTGlzdFxuICAgICAgICBoYW5kbGVUb3VjaChldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHZhciBoYW5kbGVUb3VjaCA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgICAgZmlyc3QgPSB0b3VjaGVzWzBdLFxuICAgICAgICAgIGV2ZW50VHlwZXMgPSB7XG4gICAgICAgICAgICB0b3VjaHN0YXJ0OiAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgIHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG4gICAgICAgICAgICB0b3VjaGVuZDogJ21vdXNldXAnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlID0gZXZlbnRUeXBlc1tldmVudC50eXBlXSxcbiAgICAgICAgICBzaW11bGF0ZWRFdmVudFxuICAgICAgICA7XG5cbiAgICAgIGlmKCdNb3VzZUV2ZW50JyBpbiB3aW5kb3cgJiYgdHlwZW9mIHdpbmRvdy5Nb3VzZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50ID0gbmV3IHdpbmRvdy5Nb3VzZUV2ZW50KHR5cGUsIHtcbiAgICAgICAgICAnYnViYmxlcyc6IHRydWUsXG4gICAgICAgICAgJ2NhbmNlbGFibGUnOiB0cnVlLFxuICAgICAgICAgICdzY3JlZW5YJzogZmlyc3Quc2NyZWVuWCxcbiAgICAgICAgICAnc2NyZWVuWSc6IGZpcnN0LnNjcmVlblksXG4gICAgICAgICAgJ2NsaWVudFgnOiBmaXJzdC5jbGllbnRYLFxuICAgICAgICAgICdjbGllbnRZJzogZmlyc3QuY2xpZW50WVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpbXVsYXRlZEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQnKTtcbiAgICAgICAgc2ltdWxhdGVkRXZlbnQuaW5pdE1vdXNlRXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLCBmaXJzdC5zY3JlZW5YLCBmaXJzdC5zY3JlZW5ZLCBmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMC8qbGVmdCovLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGZpcnN0LnRhcmdldC5kaXNwYXRjaEV2ZW50KHNpbXVsYXRlZEV2ZW50KTtcbiAgICB9O1xuICB9O1xufShqUXVlcnkpO1xuXG5cbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8qKkZyb20gdGhlIGpRdWVyeSBNb2JpbGUgTGlicmFyeSoqXG4vLyoqbmVlZCB0byByZWNyZWF0ZSBmdW5jdGlvbmFsaXR5Kipcbi8vKiphbmQgdHJ5IHRvIGltcHJvdmUgaWYgcG9zc2libGUqKlxuLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbi8qIFJlbW92aW5nIHRoZSBqUXVlcnkgZnVuY3Rpb24gKioqKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbihmdW5jdGlvbiggJCwgd2luZG93LCB1bmRlZmluZWQgKSB7XG5cblx0dmFyICRkb2N1bWVudCA9ICQoIGRvY3VtZW50ICksXG5cdFx0Ly8gc3VwcG9ydFRvdWNoID0gJC5tb2JpbGUuc3VwcG9ydC50b3VjaCxcblx0XHR0b3VjaFN0YXJ0RXZlbnQgPSAndG91Y2hzdGFydCcvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2hzdGFydFwiIDogXCJtb3VzZWRvd25cIixcblx0XHR0b3VjaFN0b3BFdmVudCA9ICd0b3VjaGVuZCcvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2hlbmRcIiA6IFwibW91c2V1cFwiLFxuXHRcdHRvdWNoTW92ZUV2ZW50ID0gJ3RvdWNobW92ZScvL3N1cHBvcnRUb3VjaCA/IFwidG91Y2htb3ZlXCIgOiBcIm1vdXNlbW92ZVwiO1xuXG5cdC8vIHNldHVwIG5ldyBldmVudCBzaG9ydGN1dHNcblx0JC5lYWNoKCAoIFwidG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgXCIgK1xuXHRcdFwic3dpcGUgc3dpcGVsZWZ0IHN3aXBlcmlnaHRcIiApLnNwbGl0KCBcIiBcIiApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblxuXHRcdCQuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdHJldHVybiBmbiA/IHRoaXMuYmluZCggbmFtZSwgZm4gKSA6IHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cblx0XHQvLyBqUXVlcnkgPCAxLjhcblx0XHRpZiAoICQuYXR0ckZuICkge1xuXHRcdFx0JC5hdHRyRm5bIG5hbWUgXSA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblxuXHRmdW5jdGlvbiB0cmlnZ2VyQ3VzdG9tRXZlbnQoIG9iaiwgZXZlbnRUeXBlLCBldmVudCwgYnViYmxlICkge1xuXHRcdHZhciBvcmlnaW5hbFR5cGUgPSBldmVudC50eXBlO1xuXHRcdGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XG5cdFx0aWYgKCBidWJibGUgKSB7XG5cdFx0XHQkLmV2ZW50LnRyaWdnZXIoIGV2ZW50LCB1bmRlZmluZWQsIG9iaiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkLmV2ZW50LmRpc3BhdGNoLmNhbGwoIG9iaiwgZXZlbnQgKTtcblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IG9yaWdpbmFsVHlwZTtcblx0fVxuXG5cdC8vIGFsc28gaGFuZGxlcyB0YXBob2xkXG5cblx0Ly8gQWxzbyBoYW5kbGVzIHN3aXBlbGVmdCwgc3dpcGVyaWdodFxuXHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUgPSB7XG5cblx0XHQvLyBNb3JlIHRoYW4gdGhpcyBob3Jpem9udGFsIGRpc3BsYWNlbWVudCwgYW5kIHdlIHdpbGwgc3VwcHJlc3Mgc2Nyb2xsaW5nLlxuXHRcdHNjcm9sbFN1cHJlc3Npb25UaHJlc2hvbGQ6IDMwLFxuXG5cdFx0Ly8gTW9yZSB0aW1lIHRoYW4gdGhpcywgYW5kIGl0IGlzbid0IGEgc3dpcGUuXG5cdFx0ZHVyYXRpb25UaHJlc2hvbGQ6IDEwMDAsXG5cblx0XHQvLyBTd2lwZSBob3Jpem9udGFsIGRpc3BsYWNlbWVudCBtdXN0IGJlIG1vcmUgdGhhbiB0aGlzLlxuXHRcdGhvcml6b250YWxEaXN0YW5jZVRocmVzaG9sZDogd2luZG93LmRldmljZVBpeGVsUmF0aW8gPj0gMiA/IDE1IDogMzAsXG5cblx0XHQvLyBTd2lwZSB2ZXJ0aWNhbCBkaXNwbGFjZW1lbnQgbXVzdCBiZSBsZXNzIHRoYW4gdGhpcy5cblx0XHR2ZXJ0aWNhbERpc3RhbmNlVGhyZXNob2xkOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyID8gMTUgOiAzMCxcblxuXHRcdGdldExvY2F0aW9uOiBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdFx0dmFyIHdpblBhZ2VYID0gd2luZG93LnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHR3aW5QYWdlWSA9IHdpbmRvdy5wYWdlWU9mZnNldCxcblx0XHRcdFx0eCA9IGV2ZW50LmNsaWVudFgsXG5cdFx0XHRcdHkgPSBldmVudC5jbGllbnRZO1xuXG5cdFx0XHRpZiAoIGV2ZW50LnBhZ2VZID09PSAwICYmIE1hdGguZmxvb3IoIHkgKSA+IE1hdGguZmxvb3IoIGV2ZW50LnBhZ2VZICkgfHxcblx0XHRcdFx0ZXZlbnQucGFnZVggPT09IDAgJiYgTWF0aC5mbG9vciggeCApID4gTWF0aC5mbG9vciggZXZlbnQucGFnZVggKSApIHtcblxuXHRcdFx0XHQvLyBpT1M0IGNsaWVudFgvY2xpZW50WSBoYXZlIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW5cblx0XHRcdFx0Ly8gaW4gcGFnZVgvcGFnZVkuIFdoaWxlIHBhZ2VYL3BhZ2UvIGhhdmUgdGhlIHZhbHVlIDBcblx0XHRcdFx0eCA9IHggLSB3aW5QYWdlWDtcblx0XHRcdFx0eSA9IHkgLSB3aW5QYWdlWTtcblx0XHRcdH0gZWxzZSBpZiAoIHkgPCAoIGV2ZW50LnBhZ2VZIC0gd2luUGFnZVkpIHx8IHggPCAoIGV2ZW50LnBhZ2VYIC0gd2luUGFnZVggKSApIHtcblxuXHRcdFx0XHQvLyBTb21lIEFuZHJvaWQgYnJvd3NlcnMgaGF2ZSB0b3RhbGx5IGJvZ3VzIHZhbHVlcyBmb3IgY2xpZW50WC9ZXG5cdFx0XHRcdC8vIHdoZW4gc2Nyb2xsaW5nL3pvb21pbmcgYSBwYWdlLiBEZXRlY3RhYmxlIHNpbmNlIGNsaWVudFgvY2xpZW50WVxuXHRcdFx0XHQvLyBzaG91bGQgbmV2ZXIgYmUgc21hbGxlciB0aGFuIHBhZ2VYL3BhZ2VZIG1pbnVzIHBhZ2Ugc2Nyb2xsXG5cdFx0XHRcdHggPSBldmVudC5wYWdlWCAtIHdpblBhZ2VYO1xuXHRcdFx0XHR5ID0gZXZlbnQucGFnZVkgLSB3aW5QYWdlWTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogeCxcblx0XHRcdFx0eTogeVxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBkYXRhID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzID9cblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbIDAgXSA6IGV2ZW50LFxuXHRcdFx0XHRsb2NhdGlvbiA9ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5nZXRMb2NhdGlvbiggZGF0YSApO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHRpbWU6ICggbmV3IERhdGUoKSApLmdldFRpbWUoKSxcblx0XHRcdFx0XHRcdGNvb3JkczogWyBsb2NhdGlvbi54LCBsb2NhdGlvbi55IF0sXG5cdFx0XHRcdFx0XHRvcmlnaW46ICQoIGV2ZW50LnRhcmdldCApXG5cdFx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0c3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIGRhdGEgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgP1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1sgMCBdIDogZXZlbnQsXG5cdFx0XHRcdGxvY2F0aW9uID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLmdldExvY2F0aW9uKCBkYXRhICk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dGltZTogKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpLFxuXHRcdFx0XHRcdFx0Y29vcmRzOiBbIGxvY2F0aW9uLngsIGxvY2F0aW9uLnkgXVxuXHRcdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdGhhbmRsZVN3aXBlOiBmdW5jdGlvbiggc3RhcnQsIHN0b3AsIHRoaXNPYmplY3QsIG9yaWdUYXJnZXQgKSB7XG5cdFx0XHRpZiAoIHN0b3AudGltZSAtIHN0YXJ0LnRpbWUgPCAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZHVyYXRpb25UaHJlc2hvbGQgJiZcblx0XHRcdFx0TWF0aC5hYnMoIHN0YXJ0LmNvb3Jkc1sgMCBdIC0gc3RvcC5jb29yZHNbIDAgXSApID4gJC5ldmVudC5zcGVjaWFsLnN3aXBlLmhvcml6b250YWxEaXN0YW5jZVRocmVzaG9sZCAmJlxuXHRcdFx0XHRNYXRoLmFicyggc3RhcnQuY29vcmRzWyAxIF0gLSBzdG9wLmNvb3Jkc1sgMSBdICkgPCAkLmV2ZW50LnNwZWNpYWwuc3dpcGUudmVydGljYWxEaXN0YW5jZVRocmVzaG9sZCApIHtcblx0XHRcdFx0dmFyIGRpcmVjdGlvbiA9IHN0YXJ0LmNvb3Jkc1swXSA+IHN0b3AuY29vcmRzWyAwIF0gPyBcInN3aXBlbGVmdFwiIDogXCJzd2lwZXJpZ2h0XCI7XG5cblx0XHRcdFx0dHJpZ2dlckN1c3RvbUV2ZW50KCB0aGlzT2JqZWN0LCBcInN3aXBlXCIsICQuRXZlbnQoIFwic3dpcGVcIiwgeyB0YXJnZXQ6IG9yaWdUYXJnZXQsIHN3aXBlc3RhcnQ6IHN0YXJ0LCBzd2lwZXN0b3A6IHN0b3AgfSksIHRydWUgKTtcblx0XHRcdFx0dHJpZ2dlckN1c3RvbUV2ZW50KCB0aGlzT2JqZWN0LCBkaXJlY3Rpb24sJC5FdmVudCggZGlyZWN0aW9uLCB7IHRhcmdldDogb3JpZ1RhcmdldCwgc3dpcGVzdGFydDogc3RhcnQsIHN3aXBlc3RvcDogc3RvcCB9ICksIHRydWUgKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9LFxuXG5cdFx0Ly8gVGhpcyBzZXJ2ZXMgYXMgYSBmbGFnIHRvIGVuc3VyZSB0aGF0IGF0IG1vc3Qgb25lIHN3aXBlIGV2ZW50IGV2ZW50IGlzXG5cdFx0Ly8gaW4gd29yayBhdCBhbnkgZ2l2ZW4gdGltZVxuXHRcdGV2ZW50SW5Qcm9ncmVzczogZmFsc2UsXG5cblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZXZlbnRzLFxuXHRcdFx0XHR0aGlzT2JqZWN0ID0gdGhpcyxcblx0XHRcdFx0JHRoaXMgPSAkKCB0aGlzT2JqZWN0ICksXG5cdFx0XHRcdGNvbnRleHQgPSB7fTtcblxuXHRcdFx0Ly8gUmV0cmlldmUgdGhlIGV2ZW50cyBkYXRhIGZvciB0aGlzIGVsZW1lbnQgYW5kIGFkZCB0aGUgc3dpcGUgY29udGV4dFxuXHRcdFx0ZXZlbnRzID0gJC5kYXRhKCB0aGlzLCBcIm1vYmlsZS1ldmVudHNcIiApO1xuXHRcdFx0aWYgKCAhZXZlbnRzICkge1xuXHRcdFx0XHRldmVudHMgPSB7IGxlbmd0aDogMCB9O1xuXHRcdFx0XHQkLmRhdGEoIHRoaXMsIFwibW9iaWxlLWV2ZW50c1wiLCBldmVudHMgKTtcblx0XHRcdH1cblx0XHRcdGV2ZW50cy5sZW5ndGgrKztcblx0XHRcdGV2ZW50cy5zd2lwZSA9IGNvbnRleHQ7XG5cblx0XHRcdGNvbnRleHQuc3RhcnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gQmFpbCBpZiB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb24gYSBzd2lwZSBldmVudFxuXHRcdFx0XHRpZiAoICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgPSB0cnVlO1xuXG5cdFx0XHRcdHZhciBzdG9wLFxuXHRcdFx0XHRcdHN0YXJ0ID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLnN0YXJ0KCBldmVudCApLFxuXHRcdFx0XHRcdG9yaWdUYXJnZXQgPSBldmVudC50YXJnZXQsXG5cdFx0XHRcdFx0ZW1pdHRlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGNvbnRleHQubW92ZSA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0XHRpZiAoICFzdGFydCB8fCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdG9wID0gJC5ldmVudC5zcGVjaWFsLnN3aXBlLnN0b3AoIGV2ZW50ICk7XG5cdFx0XHRcdFx0aWYgKCAhZW1pdHRlZCApIHtcblx0XHRcdFx0XHRcdGVtaXR0ZWQgPSAkLmV2ZW50LnNwZWNpYWwuc3dpcGUuaGFuZGxlU3dpcGUoIHN0YXJ0LCBzdG9wLCB0aGlzT2JqZWN0LCBvcmlnVGFyZ2V0ICk7XG5cdFx0XHRcdFx0XHRpZiAoIGVtaXR0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzZXQgdGhlIGNvbnRleHQgdG8gbWFrZSB3YXkgZm9yIHRoZSBuZXh0IHN3aXBlIGV2ZW50XG5cdFx0XHRcdFx0XHRcdCQuZXZlbnQuc3BlY2lhbC5zd2lwZS5ldmVudEluUHJvZ3Jlc3MgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gcHJldmVudCBzY3JvbGxpbmdcblx0XHRcdFx0XHRpZiAoIE1hdGguYWJzKCBzdGFydC5jb29yZHNbIDAgXSAtIHN0b3AuY29vcmRzWyAwIF0gKSA+ICQuZXZlbnQuc3BlY2lhbC5zd2lwZS5zY3JvbGxTdXByZXNzaW9uVGhyZXNob2xkICkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29udGV4dC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRlbWl0dGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzZXQgdGhlIGNvbnRleHQgdG8gbWFrZSB3YXkgZm9yIHRoZSBuZXh0IHN3aXBlIGV2ZW50XG5cdFx0XHRcdFx0XHQkLmV2ZW50LnNwZWNpYWwuc3dpcGUuZXZlbnRJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHQkZG9jdW1lbnQub2ZmKCB0b3VjaE1vdmVFdmVudCwgY29udGV4dC5tb3ZlICk7XG5cdFx0XHRcdFx0XHRjb250ZXh0Lm1vdmUgPSBudWxsO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdCRkb2N1bWVudC5vbiggdG91Y2hNb3ZlRXZlbnQsIGNvbnRleHQubW92ZSApXG5cdFx0XHRcdFx0Lm9uZSggdG91Y2hTdG9wRXZlbnQsIGNvbnRleHQuc3RvcCApO1xuXHRcdFx0fTtcblx0XHRcdCR0aGlzLm9uKCB0b3VjaFN0YXJ0RXZlbnQsIGNvbnRleHQuc3RhcnQgKTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGV2ZW50cywgY29udGV4dDtcblxuXHRcdFx0ZXZlbnRzID0gJC5kYXRhKCB0aGlzLCBcIm1vYmlsZS1ldmVudHNcIiApO1xuXHRcdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBldmVudHMuc3dpcGU7XG5cdFx0XHRcdGRlbGV0ZSBldmVudHMuc3dpcGU7XG5cdFx0XHRcdGV2ZW50cy5sZW5ndGgtLTtcblx0XHRcdFx0aWYgKCBldmVudHMubGVuZ3RoID09PSAwICkge1xuXHRcdFx0XHRcdCQucmVtb3ZlRGF0YSggdGhpcywgXCJtb2JpbGUtZXZlbnRzXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGNvbnRleHQgKSB7XG5cdFx0XHRcdGlmICggY29udGV4dC5zdGFydCApIHtcblx0XHRcdFx0XHQkKCB0aGlzICkub2ZmKCB0b3VjaFN0YXJ0RXZlbnQsIGNvbnRleHQuc3RhcnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGNvbnRleHQubW92ZSApIHtcblx0XHRcdFx0XHQkZG9jdW1lbnQub2ZmKCB0b3VjaE1vdmVFdmVudCwgY29udGV4dC5tb3ZlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBjb250ZXh0LnN0b3AgKSB7XG5cdFx0XHRcdFx0JGRvY3VtZW50Lm9mZiggdG91Y2hTdG9wRXZlbnQsIGNvbnRleHQuc3RvcCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHQkLmVhY2goe1xuXHRcdHN3aXBlbGVmdDogXCJzd2lwZS5sZWZ0XCIsXG5cdFx0c3dpcGVyaWdodDogXCJzd2lwZS5yaWdodFwiXG5cdH0sIGZ1bmN0aW9uKCBldmVudCwgc291cmNlRXZlbnQgKSB7XG5cblx0XHQkLmV2ZW50LnNwZWNpYWxbIGV2ZW50IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5iaW5kKCBzb3VyY2VFdmVudCwgJC5ub29wICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkudW5iaW5kKCBzb3VyY2VFdmVudCApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0pO1xufSkoIGpRdWVyeSwgdGhpcyApO1xuKi9cbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuY29uc3QgTXV0YXRpb25PYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwcmVmaXhlcyA9IFsnV2ViS2l0JywgJ01veicsICdPJywgJ01zJywgJyddO1xuICBmb3IgKHZhciBpPTA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChgJHtwcmVmaXhlc1tpXX1NdXRhdGlvbk9ic2VydmVyYCBpbiB3aW5kb3cpIHtcbiAgICAgIHJldHVybiB3aW5kb3dbYCR7cHJlZml4ZXNbaV19TXV0YXRpb25PYnNlcnZlcmBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KCkpO1xuXG5jb25zdCB0cmlnZ2VycyA9IChlbCwgdHlwZSkgPT4ge1xuICBlbC5kYXRhKHR5cGUpLnNwbGl0KCcgJykuZm9yRWFjaChpZCA9PiB7XG4gICAgJChgIyR7aWR9YClbIHR5cGUgPT09ICdjbG9zZScgPyAndHJpZ2dlcicgOiAndHJpZ2dlckhhbmRsZXInXShgJHt0eXBlfS56Zi50cmlnZ2VyYCwgW2VsXSk7XG4gIH0pO1xufTtcbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtb3Blbl0gd2lsbCByZXZlYWwgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4kKGRvY3VtZW50KS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS1vcGVuXScsIGZ1bmN0aW9uKCkge1xuICB0cmlnZ2VycygkKHRoaXMpLCAnb3BlbicpO1xufSk7XG5cbi8vIEVsZW1lbnRzIHdpdGggW2RhdGEtY2xvc2VdIHdpbGwgY2xvc2UgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4vLyBJZiB1c2VkIHdpdGhvdXQgYSB2YWx1ZSBvbiBbZGF0YS1jbG9zZV0sIHRoZSBldmVudCB3aWxsIGJ1YmJsZSwgYWxsb3dpbmcgaXQgdG8gY2xvc2UgYSBwYXJlbnQgY29tcG9uZW50LlxuJChkb2N1bWVudCkub24oJ2NsaWNrLnpmLnRyaWdnZXInLCAnW2RhdGEtY2xvc2VdJywgZnVuY3Rpb24oKSB7XG4gIGxldCBpZCA9ICQodGhpcykuZGF0YSgnY2xvc2UnKTtcbiAgaWYgKGlkKSB7XG4gICAgdHJpZ2dlcnMoJCh0aGlzKSwgJ2Nsb3NlJyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgJCh0aGlzKS50cmlnZ2VyKCdjbG9zZS56Zi50cmlnZ2VyJyk7XG4gIH1cbn0pO1xuXG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLXRvZ2dsZV0gd2lsbCB0b2dnbGUgYSBwbHVnaW4gdGhhdCBzdXBwb3J0cyBpdCB3aGVuIGNsaWNrZWQuXG4kKGRvY3VtZW50KS5vbignY2xpY2suemYudHJpZ2dlcicsICdbZGF0YS10b2dnbGVdJywgZnVuY3Rpb24oKSB7XG4gIGxldCBpZCA9ICQodGhpcykuZGF0YSgndG9nZ2xlJyk7XG4gIGlmIChpZCkge1xuICAgIHRyaWdnZXJzKCQodGhpcyksICd0b2dnbGUnKTtcbiAgfSBlbHNlIHtcbiAgICAkKHRoaXMpLnRyaWdnZXIoJ3RvZ2dsZS56Zi50cmlnZ2VyJyk7XG4gIH1cbn0pO1xuXG4vLyBFbGVtZW50cyB3aXRoIFtkYXRhLWNsb3NhYmxlXSB3aWxsIHJlc3BvbmQgdG8gY2xvc2UuemYudHJpZ2dlciBldmVudHMuXG4kKGRvY3VtZW50KS5vbignY2xvc2UuemYudHJpZ2dlcicsICdbZGF0YS1jbG9zYWJsZV0nLCBmdW5jdGlvbihlKXtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgbGV0IGFuaW1hdGlvbiA9ICQodGhpcykuZGF0YSgnY2xvc2FibGUnKTtcblxuICBpZihhbmltYXRpb24gIT09ICcnKXtcbiAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KCQodGhpcyksIGFuaW1hdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLnRyaWdnZXIoJ2Nsb3NlZC56ZicpO1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAkKHRoaXMpLmZhZGVPdXQoKS50cmlnZ2VyKCdjbG9zZWQuemYnKTtcbiAgfVxufSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdmb2N1cy56Zi50cmlnZ2VyIGJsdXIuemYudHJpZ2dlcicsICdbZGF0YS10b2dnbGUtZm9jdXNdJywgZnVuY3Rpb24oKSB7XG4gIGxldCBpZCA9ICQodGhpcykuZGF0YSgndG9nZ2xlLWZvY3VzJyk7XG4gICQoYCMke2lkfWApLnRyaWdnZXJIYW5kbGVyKCd0b2dnbGUuemYudHJpZ2dlcicsIFskKHRoaXMpXSk7XG59KTtcblxuLyoqXG4qIEZpcmVzIG9uY2UgYWZ0ZXIgYWxsIG90aGVyIHNjcmlwdHMgaGF2ZSBsb2FkZWRcbiogQGZ1bmN0aW9uXG4qIEBwcml2YXRlXG4qL1xuJCh3aW5kb3cpLm9uKCdsb2FkJywgKCkgPT4ge1xuICBjaGVja0xpc3RlbmVycygpO1xufSk7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXJzKCkge1xuICBldmVudHNMaXN0ZW5lcigpO1xuICByZXNpemVMaXN0ZW5lcigpO1xuICBzY3JvbGxMaXN0ZW5lcigpO1xuICBjbG9zZW1lTGlzdGVuZXIoKTtcbn1cblxuLy8qKioqKioqKiBvbmx5IGZpcmVzIHRoaXMgZnVuY3Rpb24gb25jZSBvbiBsb2FkLCBpZiB0aGVyZSdzIHNvbWV0aGluZyB0byB3YXRjaCAqKioqKioqKlxuZnVuY3Rpb24gY2xvc2VtZUxpc3RlbmVyKHBsdWdpbk5hbWUpIHtcbiAgdmFyIHlldGlCb3hlcyA9ICQoJ1tkYXRhLXlldGktYm94XScpLFxuICAgICAgcGx1Z05hbWVzID0gWydkcm9wZG93bicsICd0b29sdGlwJywgJ3JldmVhbCddO1xuXG4gIGlmKHBsdWdpbk5hbWUpe1xuICAgIGlmKHR5cGVvZiBwbHVnaW5OYW1lID09PSAnc3RyaW5nJyl7XG4gICAgICBwbHVnTmFtZXMucHVzaChwbHVnaW5OYW1lKTtcbiAgICB9ZWxzZSBpZih0eXBlb2YgcGx1Z2luTmFtZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBsdWdpbk5hbWVbMF0gPT09ICdzdHJpbmcnKXtcbiAgICAgIHBsdWdOYW1lcy5jb25jYXQocGx1Z2luTmFtZSk7XG4gICAgfWVsc2V7XG4gICAgICBjb25zb2xlLmVycm9yKCdQbHVnaW4gbmFtZXMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICB9XG4gIGlmKHlldGlCb3hlcy5sZW5ndGgpe1xuICAgIGxldCBsaXN0ZW5lcnMgPSBwbHVnTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICByZXR1cm4gYGNsb3NlbWUuemYuJHtuYW1lfWA7XG4gICAgfSkuam9pbignICcpO1xuXG4gICAgJCh3aW5kb3cpLm9mZihsaXN0ZW5lcnMpLm9uKGxpc3RlbmVycywgZnVuY3Rpb24oZSwgcGx1Z2luSWQpe1xuICAgICAgbGV0IHBsdWdpbiA9IGUubmFtZXNwYWNlLnNwbGl0KCcuJylbMF07XG4gICAgICBsZXQgcGx1Z2lucyA9ICQoYFtkYXRhLSR7cGx1Z2lufV1gKS5ub3QoYFtkYXRhLXlldGktYm94PVwiJHtwbHVnaW5JZH1cIl1gKTtcblxuICAgICAgcGx1Z2lucy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCBfdGhpcyA9ICQodGhpcyk7XG5cbiAgICAgICAgX3RoaXMudHJpZ2dlckhhbmRsZXIoJ2Nsb3NlLnpmLnRyaWdnZXInLCBbX3RoaXNdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZUxpc3RlbmVyKGRlYm91bmNlKXtcbiAgbGV0IHRpbWVyLFxuICAgICAgJG5vZGVzID0gJCgnW2RhdGEtcmVzaXplXScpO1xuICBpZigkbm9kZXMubGVuZ3RoKXtcbiAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuemYudHJpZ2dlcicpXG4gICAgLm9uKCdyZXNpemUuemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICh0aW1lcikgeyBjbGVhclRpbWVvdXQodGltZXIpOyB9XG5cbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuXG4gICAgICAgIGlmKCFNdXRhdGlvbk9ic2VydmVyKXsvL2ZhbGxiYWNrIGZvciBJRSA5XG4gICAgICAgICAgJG5vZGVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQodGhpcykudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL3RyaWdnZXIgYWxsIGxpc3RlbmluZyBlbGVtZW50cyBhbmQgc2lnbmFsIGEgcmVzaXplIGV2ZW50XG4gICAgICAgICRub2Rlcy5hdHRyKCdkYXRhLWV2ZW50cycsIFwicmVzaXplXCIpO1xuICAgICAgfSwgZGVib3VuY2UgfHwgMTApOy8vZGVmYXVsdCB0aW1lIHRvIGVtaXQgcmVzaXplIGV2ZW50XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsTGlzdGVuZXIoZGVib3VuY2Upe1xuICBsZXQgdGltZXIsXG4gICAgICAkbm9kZXMgPSAkKCdbZGF0YS1zY3JvbGxdJyk7XG4gIGlmKCRub2Rlcy5sZW5ndGgpe1xuICAgICQod2luZG93KS5vZmYoJ3Njcm9sbC56Zi50cmlnZ2VyJylcbiAgICAub24oJ3Njcm9sbC56Zi50cmlnZ2VyJywgZnVuY3Rpb24oZSl7XG4gICAgICBpZih0aW1lcil7IGNsZWFyVGltZW91dCh0aW1lcik7IH1cblxuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgaWYoIU11dGF0aW9uT2JzZXJ2ZXIpey8vZmFsbGJhY2sgZm9yIElFIDlcbiAgICAgICAgICAkbm9kZXMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VySGFuZGxlcignc2Nyb2xsbWUuemYudHJpZ2dlcicpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vdHJpZ2dlciBhbGwgbGlzdGVuaW5nIGVsZW1lbnRzIGFuZCBzaWduYWwgYSBzY3JvbGwgZXZlbnRcbiAgICAgICAgJG5vZGVzLmF0dHIoJ2RhdGEtZXZlbnRzJywgXCJzY3JvbGxcIik7XG4gICAgICB9LCBkZWJvdW5jZSB8fCAxMCk7Ly9kZWZhdWx0IHRpbWUgdG8gZW1pdCBzY3JvbGwgZXZlbnRcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudHNMaXN0ZW5lcigpIHtcbiAgaWYoIU11dGF0aW9uT2JzZXJ2ZXIpeyByZXR1cm4gZmFsc2U7IH1cbiAgbGV0IG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcmVzaXplXSwgW2RhdGEtc2Nyb2xsXSwgW2RhdGEtbXV0YXRlXScpO1xuXG4gIC8vZWxlbWVudCBjYWxsYmFja1xuICB2YXIgbGlzdGVuaW5nRWxlbWVudHNNdXRhdGlvbiA9IGZ1bmN0aW9uIChtdXRhdGlvblJlY29yZHNMaXN0KSB7XG4gICAgICB2YXIgJHRhcmdldCA9ICQobXV0YXRpb25SZWNvcmRzTGlzdFswXS50YXJnZXQpO1xuXG5cdCAgLy90cmlnZ2VyIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZWxlbWVudCBkZXBlbmRpbmcgb24gdHlwZVxuICAgICAgc3dpdGNoIChtdXRhdGlvblJlY29yZHNMaXN0WzBdLnR5cGUpIHtcblxuICAgICAgICBjYXNlIFwiYXR0cmlidXRlc1wiOlxuICAgICAgICAgIGlmICgkdGFyZ2V0LmF0dHIoXCJkYXRhLWV2ZW50c1wiKSA9PT0gXCJzY3JvbGxcIiAmJiBtdXRhdGlvblJlY29yZHNMaXN0WzBdLmF0dHJpYnV0ZU5hbWUgPT09IFwiZGF0YS1ldmVudHNcIikge1xuXHRcdCAgXHQkdGFyZ2V0LnRyaWdnZXJIYW5kbGVyKCdzY3JvbGxtZS56Zi50cmlnZ2VyJywgWyR0YXJnZXQsIHdpbmRvdy5wYWdlWU9mZnNldF0pO1xuXHRcdCAgfVxuXHRcdCAgaWYgKCR0YXJnZXQuYXR0cihcImRhdGEtZXZlbnRzXCIpID09PSBcInJlc2l6ZVwiICYmIG11dGF0aW9uUmVjb3Jkc0xpc3RbMF0uYXR0cmlidXRlTmFtZSA9PT0gXCJkYXRhLWV2ZW50c1wiKSB7XG5cdFx0ICBcdCR0YXJnZXQudHJpZ2dlckhhbmRsZXIoJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBbJHRhcmdldF0pO1xuXHRcdCAgIH1cblx0XHQgIGlmIChtdXRhdGlvblJlY29yZHNMaXN0WzBdLmF0dHJpYnV0ZU5hbWUgPT09IFwic3R5bGVcIikge1xuXHRcdFx0ICAkdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1tdXRhdGVdXCIpLmF0dHIoXCJkYXRhLWV2ZW50c1wiLFwibXV0YXRlXCIpO1xuXHRcdFx0ICAkdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1tdXRhdGVdXCIpLnRyaWdnZXJIYW5kbGVyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgWyR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIildKTtcblx0XHQgIH1cblx0XHQgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjaGlsZExpc3RcIjpcblx0XHQgICR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIikuYXR0cihcImRhdGEtZXZlbnRzXCIsXCJtdXRhdGVcIik7XG5cdFx0ICAkdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1tdXRhdGVdXCIpLnRyaWdnZXJIYW5kbGVyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgWyR0YXJnZXQuY2xvc2VzdChcIltkYXRhLW11dGF0ZV1cIildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy9ub3RoaW5nXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcbiAgICAgIC8vZm9yIGVhY2ggZWxlbWVudCB0aGF0IG5lZWRzIHRvIGxpc3RlbiBmb3IgcmVzaXppbmcsIHNjcm9sbGluZywgb3IgbXV0YXRpb24gYWRkIGEgc2luZ2xlIG9ic2VydmVyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBub2Rlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGxpc3RlbmluZ0VsZW1lbnRzTXV0YXRpb24pO1xuICAgICAgICBlbGVtZW50T2JzZXJ2ZXIub2JzZXJ2ZShub2Rlc1tpXSwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IGZhbHNlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRhdGEtZXZlbnRzXCIsIFwic3R5bGVcIl0gfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBbUEhdXG4vLyBGb3VuZGF0aW9uLkNoZWNrV2F0Y2hlcnMgPSBjaGVja1dhdGNoZXJzO1xuRm91bmRhdGlvbi5JSGVhcllvdSA9IGNoZWNrTGlzdGVuZXJzO1xuLy8gRm91bmRhdGlvbi5JU2VlWW91ID0gc2Nyb2xsTGlzdGVuZXI7XG4vLyBGb3VuZGF0aW9uLklGZWVsWW91ID0gY2xvc2VtZUxpc3RlbmVyO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogQWJpZGUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFiaWRlXG4gKi9cblxuY2xhc3MgQWJpZGUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBBYmlkZS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBBYmlkZSNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgQWJpZGUuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0FiaWRlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFiaWRlIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBBYmlkZSBmdW5jdGlvbmluZyBvbiBsb2FkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kaW5wdXRzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBBYmlkZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy5hYmlkZScpXG4gICAgICAub24oJ3Jlc2V0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgfSlcbiAgICAgIC5vbignc3VibWl0LnpmLmFiaWRlJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uID09PSAnZmllbGRDaGFuZ2UnKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignY2hhbmdlLnpmLmFiaWRlJylcbiAgICAgICAgLm9uKCdjaGFuZ2UuemYuYWJpZGUnLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgkKGUudGFyZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGl2ZVZhbGlkYXRlKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignaW5wdXQuemYuYWJpZGUnKVxuICAgICAgICAub24oJ2lucHV0LnpmLmFiaWRlJywgKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXQoJChlLnRhcmdldCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbGlkYXRlT25CbHVyKSB7XG4gICAgICB0aGlzLiRpbnB1dHNcbiAgICAgICAgLm9mZignYmx1ci56Zi5hYmlkZScpXG4gICAgICAgIC5vbignYmx1ci56Zi5hYmlkZScsIChlKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCQoZS50YXJnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIEFiaWRlIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IGEgZm9ybSBlbGVtZW50IGhhcyB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIGFuZCBpZiBpdCdzIGNoZWNrZWQgb3Igbm90XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBjaGVjayBmb3IgcmVxdWlyZWQgYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBCb29sZWFuIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgYXR0cmlidXRlIGlzIGNoZWNrZWQgb3IgZW1wdHlcbiAgICovXG4gIHJlcXVpcmVkQ2hlY2soJGVsKSB7XG4gICAgaWYgKCEkZWwuYXR0cigncmVxdWlyZWQnKSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgaXNHb29kID0gdHJ1ZTtcblxuICAgIHN3aXRjaCAoJGVsWzBdLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgaXNHb29kID0gJGVsWzBdLmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6XG4gICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOlxuICAgICAgICB2YXIgb3B0ID0gJGVsLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xuICAgICAgICBpZiAoIW9wdC5sZW5ndGggfHwgIW9wdC52YWwoKSkgaXNHb29kID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZighJGVsLnZhbCgpIHx8ICEkZWwudmFsKCkubGVuZ3RoKSBpc0dvb2QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNHb29kO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldDpcbiAgICogLSBCYXNlZCBvbiAkZWwsIHRoZSBmaXJzdCBlbGVtZW50KHMpIGNvcnJlc3BvbmRpbmcgdG8gYGZvcm1FcnJvclNlbGVjdG9yYCBpbiB0aGlzIG9yZGVyOlxuICAgKiAgIDEuIFRoZSBlbGVtZW50J3MgZGlyZWN0IHNpYmxpbmcoJ3MpLlxuICAgKiAgIDIuIFRoZSBlbGVtZW50J3MgcGFyZW50J3MgY2hpbGRyZW4uXG4gICAqIC0gRWxlbWVudChzKSB3aXRoIHRoZSBhdHRyaWJ1dGUgYFtkYXRhLWZvcm0tZXJyb3ItZm9yXWAgc2V0IHdpdGggdGhlIGVsZW1lbnQncyBpZC5cbiAgICpcbiAgICogVGhpcyBhbGxvd3MgZm9yIG11bHRpcGxlIGZvcm0gZXJyb3JzIHBlciBpbnB1dCwgdGhvdWdoIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBmb3JtIGVycm9ycyB3aWxsIGJlIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IG9iamVjdCB0byB1c2UgYXMgcmVmZXJlbmNlIHRvIGZpbmQgdGhlIGZvcm0gZXJyb3Igc2VsZWN0b3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IGpRdWVyeSBvYmplY3Qgd2l0aCB0aGUgc2VsZWN0b3IuXG4gICAqL1xuICBmaW5kRm9ybUVycm9yKCRlbCkge1xuICAgIHZhciBpZCA9ICRlbFswXS5pZDtcbiAgICB2YXIgJGVycm9yID0gJGVsLnNpYmxpbmdzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JTZWxlY3Rvcik7XG5cbiAgICBpZiAoISRlcnJvci5sZW5ndGgpIHtcbiAgICAgICRlcnJvciA9ICRlbC5wYXJlbnQoKS5maW5kKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JTZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgJGVycm9yID0gJGVycm9yLmFkZCh0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWZvcm0tZXJyb3ItZm9yPVwiJHtpZH1cIl1gKSk7XG5cbiAgICByZXR1cm4gJGVycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGlzIG9yZGVyOlxuICAgKiAyLiBUaGUgPGxhYmVsPiB3aXRoIHRoZSBhdHRyaWJ1dGUgYFtmb3I9XCJzb21lSW5wdXRJZFwiXWBcbiAgICogMy4gVGhlIGAuY2xvc2VzdCgpYCA8bGFiZWw+XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWwgLSBqUXVlcnkgb2JqZWN0IHRvIGNoZWNrIGZvciByZXF1aXJlZCBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCBhdHRyaWJ1dGUgaXMgY2hlY2tlZCBvciBlbXB0eVxuICAgKi9cbiAgZmluZExhYmVsKCRlbCkge1xuICAgIHZhciBpZCA9ICRlbFswXS5pZDtcbiAgICB2YXIgJGxhYmVsID0gdGhpcy4kZWxlbWVudC5maW5kKGBsYWJlbFtmb3I9XCIke2lkfVwiXWApO1xuXG4gICAgaWYgKCEkbGFiZWwubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJGVsLmNsb3Nlc3QoJ2xhYmVsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRsYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNldCBvZiBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9mIHJhZGlvIGVscyBpbiB0aGlzIG9yZGVyXG4gICAqIDIuIFRoZSA8bGFiZWw+IHdpdGggdGhlIGF0dHJpYnV0ZSBgW2Zvcj1cInNvbWVJbnB1dElkXCJdYFxuICAgKiAzLiBUaGUgYC5jbG9zZXN0KClgIDxsYWJlbD5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gY2hlY2sgZm9yIHJlcXVpcmVkIGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IGF0dHJpYnV0ZSBpcyBjaGVja2VkIG9yIGVtcHR5XG4gICAqL1xuICBmaW5kUmFkaW9MYWJlbHMoJGVscykge1xuICAgIHZhciBsYWJlbHMgPSAkZWxzLm1hcCgoaSwgZWwpID0+IHtcbiAgICAgIHZhciBpZCA9IGVsLmlkO1xuICAgICAgdmFyICRsYWJlbCA9IHRoaXMuJGVsZW1lbnQuZmluZChgbGFiZWxbZm9yPVwiJHtpZH1cIl1gKTtcblxuICAgICAgaWYgKCEkbGFiZWwubGVuZ3RoKSB7XG4gICAgICAgICRsYWJlbCA9ICQoZWwpLmNsb3Nlc3QoJ2xhYmVsJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJGxhYmVsWzBdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICQobGFiZWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBDU1MgZXJyb3IgY2xhc3MgYXMgc3BlY2lmaWVkIGJ5IHRoZSBBYmlkZSBzZXR0aW5ncyB0byB0aGUgbGFiZWwsIGlucHV0LCBhbmQgdGhlIGZvcm1cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gYWRkIHRoZSBjbGFzcyB0b1xuICAgKi9cbiAgYWRkRXJyb3JDbGFzc2VzKCRlbCkge1xuICAgIHZhciAkbGFiZWwgPSB0aGlzLmZpbmRMYWJlbCgkZWwpO1xuICAgIHZhciAkZm9ybUVycm9yID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbCk7XG5cbiAgICBpZiAoJGxhYmVsLmxlbmd0aCkge1xuICAgICAgJGxhYmVsLmFkZENsYXNzKHRoaXMub3B0aW9ucy5sYWJlbEVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkZm9ybUVycm9yLmxlbmd0aCkge1xuICAgICAgJGZvcm1FcnJvci5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZm9ybUVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRFcnJvckNsYXNzKS5hdHRyKCdkYXRhLWludmFsaWQnLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIENTUyBlcnJvciBjbGFzc2VzIGV0YyBmcm9tIGFuIGVudGlyZSByYWRpbyBidXR0b24gZ3JvdXBcbiAgICogQHBhcmFtIHtTdHJpbmd9IGdyb3VwTmFtZSAtIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG4gICAqXG4gICAqL1xuXG4gIHJlbW92ZVJhZGlvRXJyb3JDbGFzc2VzKGdyb3VwTmFtZSkge1xuICAgIHZhciAkZWxzID0gdGhpcy4kZWxlbWVudC5maW5kKGA6cmFkaW9bbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xuICAgIHZhciAkbGFiZWxzID0gdGhpcy5maW5kUmFkaW9MYWJlbHMoJGVscyk7XG4gICAgdmFyICRmb3JtRXJyb3JzID0gdGhpcy5maW5kRm9ybUVycm9yKCRlbHMpO1xuXG4gICAgaWYgKCRsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAkbGFiZWxzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sYWJlbEVycm9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkZm9ybUVycm9ycy5sZW5ndGgpIHtcbiAgICAgICRmb3JtRXJyb3JzLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVscy5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRFcnJvckNsYXNzKS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgQ1NTIGVycm9yIGNsYXNzIGFzIHNwZWNpZmllZCBieSB0aGUgQWJpZGUgc2V0dGluZ3MgZnJvbSB0aGUgbGFiZWwsIGlucHV0LCBhbmQgdGhlIGZvcm1cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gcmVtb3ZlIHRoZSBjbGFzcyBmcm9tXG4gICAqL1xuICByZW1vdmVFcnJvckNsYXNzZXMoJGVsKSB7XG4gICAgLy8gcmFkaW9zIG5lZWQgdG8gY2xlYXIgYWxsIG9mIHRoZSBlbHNcbiAgICBpZigkZWxbMF0udHlwZSA9PSAncmFkaW8nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVSYWRpb0Vycm9yQ2xhc3NlcygkZWwuYXR0cignbmFtZScpKTtcbiAgICB9XG5cbiAgICB2YXIgJGxhYmVsID0gdGhpcy5maW5kTGFiZWwoJGVsKTtcbiAgICB2YXIgJGZvcm1FcnJvciA9IHRoaXMuZmluZEZvcm1FcnJvcigkZWwpO1xuXG4gICAgaWYgKCRsYWJlbC5sZW5ndGgpIHtcbiAgICAgICRsYWJlbC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubGFiZWxFcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAoJGZvcm1FcnJvci5sZW5ndGgpIHtcbiAgICAgICRmb3JtRXJyb3IucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmZvcm1FcnJvckNsYXNzKTtcbiAgICB9XG5cbiAgICAkZWwucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmlucHV0RXJyb3JDbGFzcykucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJyk7XG4gIH1cblxuICAvKipcbiAgICogR29lcyB0aHJvdWdoIGEgZm9ybSB0byBmaW5kIGlucHV0cyBhbmQgcHJvY2VlZHMgdG8gdmFsaWRhdGUgdGhlbSBpbiB3YXlzIHNwZWNpZmljIHRvIHRoZWlyIHR5cGUuIFxuICAgKiBJZ25vcmVzIGlucHV0cyB3aXRoIGRhdGEtYWJpZGUtaWdub3JlLCB0eXBlPVwiaGlkZGVuXCIgb3IgZGlzYWJsZWQgYXR0cmlidXRlcyBzZXRcbiAgICogQGZpcmVzIEFiaWRlI2ludmFsaWRcbiAgICogQGZpcmVzIEFiaWRlI3ZhbGlkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byB2YWxpZGF0ZSwgc2hvdWxkIGJlIGFuIEhUTUwgaW5wdXRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGdvb2RUb0dvIC0gSWYgdGhlIGlucHV0IGlzIHZhbGlkIG9yIG5vdC5cbiAgICovXG4gIHZhbGlkYXRlSW5wdXQoJGVsKSB7XG4gICAgdmFyIGNsZWFyUmVxdWlyZSA9IHRoaXMucmVxdWlyZWRDaGVjaygkZWwpLFxuICAgICAgICB2YWxpZGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgY3VzdG9tVmFsaWRhdG9yID0gdHJ1ZSxcbiAgICAgICAgdmFsaWRhdG9yID0gJGVsLmF0dHIoJ2RhdGEtdmFsaWRhdG9yJyksXG4gICAgICAgIGVxdWFsVG8gPSB0cnVlO1xuXG4gICAgLy8gZG9uJ3QgdmFsaWRhdGUgaWdub3JlZCBpbnB1dHMgb3IgaGlkZGVuIGlucHV0cyBvciBkaXNhYmxlZCBpbnB1dHNcbiAgICBpZiAoJGVsLmlzKCdbZGF0YS1hYmlkZS1pZ25vcmVdJykgfHwgJGVsLmlzKCdbdHlwZT1cImhpZGRlblwiXScpIHx8ICRlbC5pcygnW2Rpc2FibGVkXScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKCRlbFswXS50eXBlKSB7XG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIHZhbGlkYXRlZCA9IHRoaXMudmFsaWRhdGVSYWRpbygkZWwuYXR0cignbmFtZScpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGNhc2UgJ3NlbGVjdC1vbmUnOlxuICAgICAgY2FzZSAnc2VsZWN0LW11bHRpcGxlJzpcbiAgICAgICAgdmFsaWRhdGVkID0gY2xlYXJSZXF1aXJlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFsaWRhdGVkID0gdGhpcy52YWxpZGF0ZVRleHQoJGVsKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjdXN0b21WYWxpZGF0b3IgPSB0aGlzLm1hdGNoVmFsaWRhdGlvbigkZWwsIHZhbGlkYXRvciwgJGVsLmF0dHIoJ3JlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIGlmICgkZWwuYXR0cignZGF0YS1lcXVhbHRvJykpIHtcbiAgICAgIGVxdWFsVG8gPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9ycy5lcXVhbFRvKCRlbCk7XG4gICAgfVxuXG5cbiAgICB2YXIgZ29vZFRvR28gPSBbY2xlYXJSZXF1aXJlLCB2YWxpZGF0ZWQsIGN1c3RvbVZhbGlkYXRvciwgZXF1YWxUb10uaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICAgIHZhciBtZXNzYWdlID0gKGdvb2RUb0dvID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJykgKyAnLnpmLmFiaWRlJztcblxuICAgIGlmIChnb29kVG9Hbykge1xuICAgICAgLy8gUmUtdmFsaWRhdGUgaW5wdXRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lIHdpdGggZXF1YWx0b1xuICAgICAgY29uc3QgZGVwZW5kZW50RWxlbWVudHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWVxdWFsdG89XCIkeyRlbC5hdHRyKCdpZCcpfVwiXWApO1xuICAgICAgaWYgKGRlcGVuZGVudEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICBkZXBlbmRlbnRFbGVtZW50cy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpKSB7XG4gICAgICAgICAgICBfdGhpcy52YWxpZGF0ZUlucHV0KCQodGhpcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1tnb29kVG9HbyA/ICdyZW1vdmVFcnJvckNsYXNzZXMnIDogJ2FkZEVycm9yQ2xhc3NlcyddKCRlbCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBpbnB1dCBpcyBkb25lIGNoZWNraW5nIGZvciB2YWxpZGF0aW9uLiBFdmVudCB0cmlnZ2VyIGlzIGVpdGhlciBgdmFsaWQuemYuYWJpZGVgIG9yIGBpbnZhbGlkLnpmLmFiaWRlYFxuICAgICAqIFRyaWdnZXIgaW5jbHVkZXMgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBpbnB1dC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjdmFsaWRcbiAgICAgKiBAZXZlbnQgQWJpZGUjaW52YWxpZFxuICAgICAqL1xuICAgICRlbC50cmlnZ2VyKG1lc3NhZ2UsIFskZWxdKTtcblxuICAgIHJldHVybiBnb29kVG9HbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHb2VzIHRocm91Z2ggYSBmb3JtIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludmFsaWQgaW5wdXRzLCBpdCB3aWxsIGRpc3BsYXkgdGhlIGZvcm0gZXJyb3IgZWxlbWVudFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gbm9FcnJvciAtIHRydWUgaWYgbm8gZXJyb3JzIHdlcmUgZGV0ZWN0ZWQuLi5cbiAgICogQGZpcmVzIEFiaWRlI2Zvcm12YWxpZFxuICAgKiBAZmlyZXMgQWJpZGUjZm9ybWludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlRm9ybSgpIHtcbiAgICB2YXIgYWNjID0gW107XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGlucHV0cy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgYWNjLnB1c2goX3RoaXMudmFsaWRhdGVJbnB1dCgkKHRoaXMpKSk7XG4gICAgfSk7XG5cbiAgICB2YXIgbm9FcnJvciA9IGFjYy5pbmRleE9mKGZhbHNlKSA9PT0gLTE7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWFiaWRlLWVycm9yXScpLmNzcygnZGlzcGxheScsIChub0Vycm9yID8gJ25vbmUnIDogJ2Jsb2NrJykpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZm9ybSBpcyBmaW5pc2hlZCB2YWxpZGF0aW5nLiBFdmVudCB0cmlnZ2VyIGlzIGVpdGhlciBgZm9ybXZhbGlkLnpmLmFiaWRlYCBvciBgZm9ybWludmFsaWQuemYuYWJpZGVgLlxuICAgICAqIFRyaWdnZXIgaW5jbHVkZXMgdGhlIGVsZW1lbnQgb2YgdGhlIGZvcm0uXG4gICAgICogQGV2ZW50IEFiaWRlI2Zvcm12YWxpZFxuICAgICAqIEBldmVudCBBYmlkZSNmb3JtaW52YWxpZFxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigobm9FcnJvciA/ICdmb3JtdmFsaWQnIDogJ2Zvcm1pbnZhbGlkJykgKyAnLnpmLmFiaWRlJywgW3RoaXMuJGVsZW1lbnRdKTtcblxuICAgIHJldHVybiBub0Vycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBhIG5vdCBhIHRleHQgaW5wdXQgaXMgdmFsaWQgYmFzZWQgb24gdGhlIHBhdHRlcm4gc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUuIElmIG5vIG1hdGNoaW5nIHBhdHRlcm4gaXMgZm91bmQsIHJldHVybnMgdHJ1ZS5cbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbCAtIGpRdWVyeSBvYmplY3QgdG8gdmFsaWRhdGUsIHNob3VsZCBiZSBhIHRleHQgaW5wdXQgSFRNTCBlbGVtZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIC0gc3RyaW5nIHZhbHVlIG9mIG9uZSBvZiB0aGUgUmVnRXggcGF0dGVybnMgaW4gQWJpZGUub3B0aW9ucy5wYXR0ZXJuc1xuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gQm9vbGVhbiB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCB2YWx1ZSBtYXRjaGVzIHRoZSBwYXR0ZXJuIHNwZWNpZmllZFxuICAgKi9cbiAgdmFsaWRhdGVUZXh0KCRlbCwgcGF0dGVybikge1xuICAgIC8vIEEgcGF0dGVybiBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgYmUgaW5mZXJlZCBmcm9tIHRoZSBpbnB1dCdzIFwicGF0dGVyblwiIGF0dHJpYnV0ZSwgb3IgaXQncyBcInR5cGVcIiBhdHRyaWJ1dGVcbiAgICBwYXR0ZXJuID0gKHBhdHRlcm4gfHwgJGVsLmF0dHIoJ3BhdHRlcm4nKSB8fCAkZWwuYXR0cigndHlwZScpKTtcbiAgICB2YXIgaW5wdXRUZXh0ID0gJGVsLnZhbCgpO1xuICAgIHZhciB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKGlucHV0VGV4dC5sZW5ndGgpIHtcbiAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBpcyBpbiBBYmlkZSdzIGxpc3Qgb2YgcGF0dGVybnMsIHRoZW4gdGVzdCB0aGF0IHJlZ2V4cFxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXR0ZXJucy5oYXNPd25Qcm9wZXJ0eShwYXR0ZXJuKSkge1xuICAgICAgICB2YWxpZCA9IHRoaXMub3B0aW9ucy5wYXR0ZXJuc1twYXR0ZXJuXS50ZXN0KGlucHV0VGV4dCk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgcGF0dGVybiBuYW1lIGlzbid0IGFsc28gdGhlIHR5cGUgYXR0cmlidXRlIG9mIHRoZSBmaWVsZCwgdGhlbiB0ZXN0IGl0IGFzIGEgcmVnZXhwXG4gICAgICBlbHNlIGlmIChwYXR0ZXJuICE9PSAkZWwuYXR0cigndHlwZScpKSB7XG4gICAgICAgIHZhbGlkID0gbmV3IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KGlucHV0VGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBbiBlbXB0eSBmaWVsZCBpcyB2YWxpZCBpZiBpdCdzIG5vdCByZXF1aXJlZFxuICAgIGVsc2UgaWYgKCEkZWwucHJvcCgncmVxdWlyZWQnKSkge1xuICAgICAgdmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIGEgbm90IGEgcmFkaW8gaW5wdXQgaXMgdmFsaWQgYmFzZWQgb24gd2hldGhlciBvciBub3QgaXQgaXMgcmVxdWlyZWQgYW5kIHNlbGVjdGVkLiBBbHRob3VnaCB0aGUgZnVuY3Rpb24gdGFyZ2V0cyBhIHNpbmdsZSBgPGlucHV0PmAsIGl0IHZhbGlkYXRlcyBieSBjaGVja2luZyB0aGUgYHJlcXVpcmVkYCBhbmQgYGNoZWNrZWRgIHByb3BlcnRpZXMgb2YgYWxsIHJhZGlvIGJ1dHRvbnMgaW4gaXRzIGdyb3VwLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZ3JvdXBOYW1lIC0gQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSByYWRpbyBidXR0b24gZ3JvdXBcbiAgICogQHJldHVybnMge0Jvb2xlYW59IEJvb2xlYW4gdmFsdWUgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCBhdCBsZWFzdCBvbmUgcmFkaW8gaW5wdXQgaGFzIGJlZW4gc2VsZWN0ZWQgKGlmIGl0J3MgcmVxdWlyZWQpXG4gICAqL1xuICB2YWxpZGF0ZVJhZGlvKGdyb3VwTmFtZSkge1xuICAgIC8vIElmIGF0IGxlYXN0IG9uZSByYWRpbyBpbiB0aGUgZ3JvdXAgaGFzIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgdGhlIGdyb3VwIGlzIGNvbnNpZGVyZWQgcmVxdWlyZWRcbiAgICAvLyBQZXIgVzNDIHNwZWMsIGFsbCByYWRpbyBidXR0b25zIGluIGEgZ3JvdXAgc2hvdWxkIGhhdmUgYHJlcXVpcmVkYCwgYnV0IHdlJ3JlIGJlaW5nIG5pY2VcbiAgICB2YXIgJGdyb3VwID0gdGhpcy4kZWxlbWVudC5maW5kKGA6cmFkaW9bbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xuICAgIHZhciB2YWxpZCA9IGZhbHNlLCByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLy8gRm9yIHRoZSBncm91cCB0byBiZSByZXF1aXJlZCwgYXQgbGVhc3Qgb25lIHJhZGlvIG5lZWRzIHRvIGJlIHJlcXVpcmVkXG4gICAgJGdyb3VwLmVhY2goKGksIGUpID0+IHtcbiAgICAgIGlmICgkKGUpLmF0dHIoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgcmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmKCFyZXF1aXJlZCkgdmFsaWQ9dHJ1ZTtcblxuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIC8vIEZvciB0aGUgZ3JvdXAgdG8gYmUgdmFsaWQsIGF0IGxlYXN0IG9uZSByYWRpbyBuZWVkcyB0byBiZSBjaGVja2VkXG4gICAgICAkZ3JvdXAuZWFjaCgoaSwgZSkgPT4ge1xuICAgICAgICBpZiAoJChlKS5wcm9wKCdjaGVja2VkJykpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHNlbGVjdGVkIGlucHV0IHBhc3NlcyBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBNdWx0aXBsZSB2YWxpZGF0aW9ucyBjYW4gYmUgdXNlZCwgaWYgcGFzc2VkIHRvIHRoZSBlbGVtZW50IHdpdGggYGRhdGEtdmFsaWRhdG9yPVwiZm9vIGJhciBiYXpcImAgaW4gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsIC0galF1ZXJ5IGlucHV0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxpZGF0b3JzIC0gYSBzdHJpbmcgb2YgZnVuY3Rpb24gbmFtZXMgbWF0Y2hpbmcgZnVuY3Rpb25zIGluIHRoZSBBYmlkZS5vcHRpb25zLnZhbGlkYXRvcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVkIC0gc2VsZiBleHBsYW5hdG9yeT9cbiAgICogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiB2YWxpZGF0aW9ucyBwYXNzZWQuXG4gICAqL1xuICBtYXRjaFZhbGlkYXRpb24oJGVsLCB2YWxpZGF0b3JzLCByZXF1aXJlZCkge1xuICAgIHJlcXVpcmVkID0gcmVxdWlyZWQgPyB0cnVlIDogZmFsc2U7XG5cbiAgICB2YXIgY2xlYXIgPSB2YWxpZGF0b3JzLnNwbGl0KCcgJykubWFwKCh2KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRvcnNbdl0oJGVsLCByZXF1aXJlZCwgJGVsLnBhcmVudCgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYXIuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBmb3JtIGlucHV0cyBhbmQgc3R5bGVzXG4gICAqIEBmaXJlcyBBYmlkZSNmb3JtcmVzZXRcbiAgICovXG4gIHJlc2V0Rm9ybSgpIHtcbiAgICB2YXIgJGZvcm0gPSB0aGlzLiRlbGVtZW50LFxuICAgICAgICBvcHRzID0gdGhpcy5vcHRpb25zO1xuXG4gICAgJChgLiR7b3B0cy5sYWJlbEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmxhYmVsRXJyb3JDbGFzcyk7XG4gICAgJChgLiR7b3B0cy5pbnB1dEVycm9yQ2xhc3N9YCwgJGZvcm0pLm5vdCgnc21hbGwnKS5yZW1vdmVDbGFzcyhvcHRzLmlucHV0RXJyb3JDbGFzcyk7XG4gICAgJChgJHtvcHRzLmZvcm1FcnJvclNlbGVjdG9yfS4ke29wdHMuZm9ybUVycm9yQ2xhc3N9YCkucmVtb3ZlQ2xhc3Mob3B0cy5mb3JtRXJyb3JDbGFzcyk7XG4gICAgJGZvcm0uZmluZCgnW2RhdGEtYWJpZGUtZXJyb3JdJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAkKCc6aW5wdXQnLCAkZm9ybSkubm90KCc6YnV0dG9uLCA6c3VibWl0LCA6cmVzZXQsIDpoaWRkZW4sIDpyYWRpbywgOmNoZWNrYm94LCBbZGF0YS1hYmlkZS1pZ25vcmVdJykudmFsKCcnKS5yZW1vdmVBdHRyKCdkYXRhLWludmFsaWQnKTtcbiAgICAkKCc6aW5wdXQ6cmFkaW8nLCAkZm9ybSkubm90KCdbZGF0YS1hYmlkZS1pZ25vcmVdJykucHJvcCgnY2hlY2tlZCcsZmFsc2UpLnJlbW92ZUF0dHIoJ2RhdGEtaW52YWxpZCcpO1xuICAgICQoJzppbnB1dDpjaGVja2JveCcsICRmb3JtKS5ub3QoJ1tkYXRhLWFiaWRlLWlnbm9yZV0nKS5wcm9wKCdjaGVja2VkJyxmYWxzZSkucmVtb3ZlQXR0cignZGF0YS1pbnZhbGlkJyk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiByZXNldC5cbiAgICAgKiBAZXZlbnQgQWJpZGUjZm9ybXJlc2V0XG4gICAgICovXG4gICAgJGZvcm0udHJpZ2dlcignZm9ybXJlc2V0LnpmLmFiaWRlJywgWyRmb3JtXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgQWJpZGUuXG4gICAqIFJlbW92ZXMgZXJyb3Igc3R5bGVzIGFuZCBjbGFzc2VzIGZyb20gZWxlbWVudHMsIHdpdGhvdXQgcmVzZXR0aW5nIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub2ZmKCcuYWJpZGUnKVxuICAgICAgLmZpbmQoJ1tkYXRhLWFiaWRlLWVycm9yXScpXG4gICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgdGhpcy4kaW5wdXRzXG4gICAgICAub2ZmKCcuYWJpZGUnKVxuICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLnJlbW92ZUVycm9yQ2xhc3NlcygkKHRoaXMpKTtcbiAgICAgIH0pO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkFiaWRlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZXZlbnQgdG8gdmFsaWRhdGUgaW5wdXRzLiBDaGVja2JveGVzIGFuZCByYWRpb3MgdmFsaWRhdGUgaW1tZWRpYXRlbHkuXG4gICAqIFJlbW92ZSBvciBjaGFuZ2UgdGhpcyB2YWx1ZSBmb3IgbWFudWFsIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUgez9zdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdmaWVsZENoYW5nZSdcbiAgICovXG4gIHZhbGlkYXRlT246ICdmaWVsZENoYW5nZScsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXQgbGFiZWxzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpcy1pbnZhbGlkLWxhYmVsJ1xuICAgKi9cbiAgbGFiZWxFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1sYWJlbCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHRvIGJlIGFwcGxpZWQgdG8gaW5wdXRzIG9uIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpcy1pbnZhbGlkLWlucHV0J1xuICAgKi9cbiAgaW5wdXRFcnJvckNsYXNzOiAnaXMtaW52YWxpZC1pbnB1dCcsXG5cbiAgLyoqXG4gICAqIENsYXNzIHNlbGVjdG9yIHRvIHVzZSB0byB0YXJnZXQgRm9ybSBFcnJvcnMgZm9yIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnLmZvcm0tZXJyb3InXG4gICAqL1xuICBmb3JtRXJyb3JTZWxlY3RvcjogJy5mb3JtLWVycm9yJyxcblxuICAvKipcbiAgICogQ2xhc3MgYWRkZWQgdG8gRm9ybSBFcnJvcnMgb24gZmFpbGVkIHZhbGlkYXRpb24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lzLXZpc2libGUnXG4gICAqL1xuICBmb3JtRXJyb3JDbGFzczogJ2lzLXZpc2libGUnLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byB2YWxpZGF0ZSB0ZXh0IGlucHV0cyBvbiBhbnkgdmFsdWUgY2hhbmdlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbGl2ZVZhbGlkYXRlOiBmYWxzZSxcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gdmFsaWRhdGUgaW5wdXRzIG9uIGJsdXIuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2YWxpZGF0ZU9uQmx1cjogZmFsc2UsXG5cbiAgcGF0dGVybnM6IHtcbiAgICBhbHBoYSA6IC9eW2EtekEtWl0rJC8sXG4gICAgYWxwaGFfbnVtZXJpYyA6IC9eW2EtekEtWjAtOV0rJC8sXG4gICAgaW50ZWdlciA6IC9eWy0rXT9cXGQrJC8sXG4gICAgbnVtYmVyIDogL15bLStdP1xcZCooPzpbXFwuXFwsXVxcZCspPyQvLFxuXG4gICAgLy8gYW1leCwgdmlzYSwgZGluZXJzXG4gICAgY2FyZCA6IC9eKD86NFswLTldezEyfSg/OlswLTldezN9KT98NVsxLTVdWzAtOV17MTR9fDYoPzowMTF8NVswLTldWzAtOV0pWzAtOV17MTJ9fDNbNDddWzAtOV17MTN9fDMoPzowWzAtNV18WzY4XVswLTldKVswLTldezExfXwoPzoyMTMxfDE4MDB8MzVcXGR7M30pXFxkezExfSkkLyxcbiAgICBjdnYgOiAvXihbMC05XSl7Myw0fSQvLFxuXG4gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc3RhdGVzLW9mLXRoZS10eXBlLWF0dHJpYnV0ZS5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzXG4gICAgZW1haWwgOiAvXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSskLyxcblxuICAgIHVybCA6IC9eKGh0dHBzP3xmdHB8ZmlsZXxzc2gpOlxcL1xcLygoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6KSpAKT8oKChcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpfCgoKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16QS1aXXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16QS1aXXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2EtekEtWl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2EtekEtWl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8pKDpcXGQqKT8pKFxcLygoKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkrKFxcLygoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSopKik/KT8oXFw/KCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxbXFx1RTAwMC1cXHVGOEZGXXxcXC98XFw/KSopPyhcXCMoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFxcL3xcXD8pKik/JC8sXG4gICAgLy8gYWJjLmRlXG4gICAgZG9tYWluIDogL14oW2EtekEtWjAtOV0oW2EtekEtWjAtOVxcLV17MCw2MX1bYS16QS1aMC05XSk/XFwuKStbYS16QS1aXXsyLDh9JC8sXG5cbiAgICBkYXRldGltZSA6IC9eKFswLTJdWzAtOV17M30pXFwtKFswLTFdWzAtOV0pXFwtKFswLTNdWzAtOV0pVChbMC01XVswLTldKVxcOihbMC01XVswLTldKVxcOihbMC01XVswLTldKShafChbXFwtXFwrXShbMC0xXVswLTldKVxcOjAwKSkkLyxcbiAgICAvLyBZWVlZLU1NLUREXG4gICAgZGF0ZSA6IC8oPzoxOXwyMClbMC05XXsyfS0oPzooPzowWzEtOV18MVswLTJdKS0oPzowWzEtOV18MVswLTldfDJbMC05XSl8KD86KD8hMDIpKD86MFsxLTldfDFbMC0yXSktKD86MzApKXwoPzooPzowWzEzNTc4XXwxWzAyXSktMzEpKSQvLFxuICAgIC8vIEhIOk1NOlNTXG4gICAgdGltZSA6IC9eKDBbMC05XXwxWzAtOV18MlswLTNdKSg6WzAtNV1bMC05XSl7Mn0kLyxcbiAgICBkYXRlSVNPIDogL15cXGR7NH1bXFwvXFwtXVxcZHsxLDJ9W1xcL1xcLV1cXGR7MSwyfSQvLFxuICAgIC8vIE1NL0REL1lZWVlcbiAgICBtb250aF9kYXlfeWVhciA6IC9eKDBbMS05XXwxWzAxMl0pWy0gXFwvLl0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlbLSBcXC8uXVxcZHs0fSQvLFxuICAgIC8vIEREL01NL1lZWVlcbiAgICBkYXlfbW9udGhfeWVhciA6IC9eKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMFsxLTldfDFbMDEyXSlbLSBcXC8uXVxcZHs0fSQvLFxuXG4gICAgLy8gI0ZGRiBvciAjRkZGRkZGXG4gICAgY29sb3IgOiAvXiM/KFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSQvXG4gIH0sXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZhbGlkYXRpb24gZnVuY3Rpb25zIHRvIGJlIHVzZWQuIGBlcXVhbFRvYCBiZWluZyB0aGUgb25seSBkZWZhdWx0IGluY2x1ZGVkIGZ1bmN0aW9uLlxuICAgKiBGdW5jdGlvbnMgc2hvdWxkIHJldHVybiBvbmx5IGEgYm9vbGVhbiBpZiB0aGUgaW5wdXQgaXMgdmFsaWQgb3Igbm90LiBGdW5jdGlvbnMgYXJlIGdpdmVuIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOlxuICAgKiBlbCA6IFRoZSBqUXVlcnkgZWxlbWVudCB0byB2YWxpZGF0ZS5cbiAgICogcmVxdWlyZWQgOiBCb29sZWFuIHZhbHVlIG9mIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgYmUgcHJlc2VudCBvciBub3QuXG4gICAqIHBhcmVudCA6IFRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBpbnB1dC5cbiAgICogQG9wdGlvblxuICAgKi9cbiAgdmFsaWRhdG9yczoge1xuICAgIGVxdWFsVG86IGZ1bmN0aW9uIChlbCwgcmVxdWlyZWQsIHBhcmVudCkge1xuICAgICAgcmV0dXJuICQoYCMke2VsLmF0dHIoJ2RhdGEtZXF1YWx0bycpfWApLnZhbCgpID09PSBlbC52YWwoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKEFiaWRlLCAnQWJpZGUnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIEFjY29yZGlvbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uYWNjb3JkaW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLmtleWJvYXJkXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICovXG5cbmNsYXNzIEFjY29yZGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFjY29yZGlvbi5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIGFjY29yZGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBhIHBsYWluIG9iamVjdCB3aXRoIHNldHRpbmdzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFjY29yZGlvbi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnQWNjb3JkaW9uJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignQWNjb3JkaW9uJywge1xuICAgICAgJ0VOVEVSJzogJ3RvZ2dsZScsXG4gICAgICAnU1BBQ0UnOiAndG9nZ2xlJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ25leHQnLFxuICAgICAgJ0FSUk9XX1VQJzogJ3ByZXZpb3VzJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhY2NvcmRpb24gYnkgYW5pbWF0aW5nIHRoZSBwcmVzZXQgYWN0aXZlIHBhbmUocykuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIHRoaXMuJHRhYnMgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCdbZGF0YS1hY2NvcmRpb24taXRlbV0nKTtcblxuICAgIHRoaXMuJHRhYnMuZWFjaChmdW5jdGlvbihpZHgsIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCksXG4gICAgICAgICAgJGNvbnRlbnQgPSAkZWwuY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpLFxuICAgICAgICAgIGlkID0gJGNvbnRlbnRbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnYWNjb3JkaW9uJyksXG4gICAgICAgICAgbGlua0lkID0gZWwuaWQgfHwgYCR7aWR9LWxhYmVsYDtcblxuICAgICAgJGVsLmZpbmQoJ2E6Zmlyc3QnKS5hdHRyKHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpZCxcbiAgICAgICAgJ3JvbGUnOiAndGFiJyxcbiAgICAgICAgJ2lkJzogbGlua0lkLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGZhbHNlLFxuICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgJGNvbnRlbnQuYXR0cih7J3JvbGUnOiAndGFicGFuZWwnLCAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkLCAnYXJpYS1oaWRkZW4nOiB0cnVlLCAnaWQnOiBpZH0pO1xuICAgIH0pO1xuICAgIHZhciAkaW5pdEFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjdGl2ZScpLmNoaWxkcmVuKCdbZGF0YS10YWItY29udGVudF0nKTtcbiAgICB0aGlzLmZpcnN0VGltZUluaXQgPSB0cnVlO1xuICAgIGlmKCRpbml0QWN0aXZlLmxlbmd0aCl7XG4gICAgICB0aGlzLmRvd24oJGluaXRBY3RpdmUsIHRoaXMuZmlyc3RUaW1lSW5pdCk7XG4gICAgICB0aGlzLmZpcnN0VGltZUluaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGVja0RlZXBMaW5rID0gKCkgPT4ge1xuICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgLy9uZWVkIGEgaGFzaCBhbmQgYSByZWxldmFudCBhbmNob3IgaW4gdGhpcyB0YWJzZXRcbiAgICAgIGlmKGFuY2hvci5sZW5ndGgpIHtcbiAgICAgICAgdmFyICRsaW5rID0gdGhpcy4kZWxlbWVudC5maW5kKCdbaHJlZiQ9XCInK2FuY2hvcisnXCJdJyksXG4gICAgICAgICRhbmNob3IgPSAkKGFuY2hvcik7XG5cbiAgICAgICAgaWYgKCRsaW5rLmxlbmd0aCAmJiAkYW5jaG9yKSB7XG4gICAgICAgICAgaWYgKCEkbGluay5wYXJlbnQoJ1tkYXRhLWFjY29yZGlvbi1pdGVtXScpLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSkge1xuICAgICAgICAgICAgdGhpcy5kb3duKCRhbmNob3IsIHRoaXMuZmlyc3RUaW1lSW5pdCk7XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUluaXQgPSBmYWxzZTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy9yb2xsIHVwIGEgbGl0dGxlIHRvIHNob3cgdGhlIHRpdGxlc1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2UpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAkKHdpbmRvdykubG9hZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IF90aGlzLiRlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogb2Zmc2V0LnRvcCB9LCBfdGhpcy5vcHRpb25zLmRlZXBMaW5rU211ZGdlRGVsYXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHpwbHVnaW4gaGFzIGRlZXBsaW5rZWQgYXQgcGFnZWxvYWRcbiAgICAgICAgICAgICogQGV2ZW50IEFjY29yZGlvbiNkZWVwbGlua1xuICAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2RlZXBsaW5rLnpmLmFjY29yZGlvbicsIFskbGluaywgJGFuY2hvcl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy91c2UgYnJvd3NlciB0byBvcGVuIGEgdGFiLCBpZiBpdCBleGlzdHMgaW4gdGhpcyB0YWJzZXRcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICB0aGlzLl9jaGVja0RlZXBMaW5rKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSBhY2NvcmRpb24uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiR0YWJzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpO1xuICAgICAgdmFyICR0YWJDb250ZW50ID0gJGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpO1xuICAgICAgaWYgKCR0YWJDb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAkZWxlbS5jaGlsZHJlbignYScpLm9mZignY2xpY2suemYuYWNjb3JkaW9uIGtleWRvd24uemYuYWNjb3JkaW9uJylcbiAgICAgICAgICAgICAgIC5vbignY2xpY2suemYuYWNjb3JkaW9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy50b2dnbGUoJHRhYkNvbnRlbnQpO1xuICAgICAgICB9KS5vbigna2V5ZG93bi56Zi5hY2NvcmRpb24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnQWNjb3JkaW9uJywge1xuICAgICAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3RoaXMudG9nZ2xlKCR0YWJDb250ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyICRhID0gJGVsZW0ubmV4dCgpLmZpbmQoJ2EnKS5mb2N1cygpO1xuICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMubXVsdGlFeHBhbmQpIHtcbiAgICAgICAgICAgICAgICAkYS50cmlnZ2VyKCdjbGljay56Zi5hY2NvcmRpb24nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgJGEgPSAkZWxlbS5wcmV2KCkuZmluZCgnYScpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5tdWx0aUV4cGFuZCkge1xuICAgICAgICAgICAgICAgICRhLnRyaWdnZXIoJ2NsaWNrLnpmLmFjY29yZGlvbicpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZih0aGlzLm9wdGlvbnMuZGVlcExpbmspIHtcbiAgICAgICQod2luZG93KS5vbigncG9wc3RhdGUnLCB0aGlzLl9jaGVja0RlZXBMaW5rKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc2VsZWN0ZWQgY29udGVudCBwYW5lJ3Mgb3Blbi9jbG9zZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBwYW5lIHRvIHRvZ2dsZSAoYC5hY2NvcmRpb24tY29udGVudGApLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHRvZ2dsZSgkdGFyZ2V0KSB7XG4gICAgaWYoJHRhcmdldC5wYXJlbnQoKS5oYXNDbGFzcygnaXMtYWN0aXZlJykpIHtcbiAgICAgIHRoaXMudXAoJHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG93bigkdGFyZ2V0KTtcbiAgICB9XG4gICAgLy9laXRoZXIgcmVwbGFjZSBvciB1cGRhdGUgYnJvd3NlciBoaXN0b3J5XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgdmFyIGFuY2hvciA9ICR0YXJnZXQucHJldignYScpLmF0dHIoJ2hyZWYnKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGRhdGVIaXN0b3J5KSB7XG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgYW5jaG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgYW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGFjY29yZGlvbiB0YWIgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gQWNjb3JkaW9uIHBhbmUgdG8gb3BlbiAoYC5hY2NvcmRpb24tY29udGVudGApLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpcnN0VGltZSAtIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHJlZmxvdyBzaG91bGQgaGFwcGVuLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rvd25cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkb3duKCR0YXJnZXQsIGZpcnN0VGltZSkge1xuICAgICR0YXJnZXRcbiAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsIGZhbHNlKVxuICAgICAgLnBhcmVudCgnW2RhdGEtdGFiLWNvbnRlbnRdJylcbiAgICAgIC5hZGRCYWNrKClcbiAgICAgIC5wYXJlbnQoKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5tdWx0aUV4cGFuZCAmJiAhZmlyc3RUaW1lKSB7XG4gICAgICB2YXIgJGN1cnJlbnRBY3RpdmUgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCcuaXMtYWN0aXZlJykuY2hpbGRyZW4oJ1tkYXRhLXRhYi1jb250ZW50XScpO1xuICAgICAgaWYgKCRjdXJyZW50QWN0aXZlLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVwKCRjdXJyZW50QWN0aXZlLm5vdCgkdGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHRhcmdldC5zbGlkZURvd24odGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgd2hlbiB0aGUgdGFiIGlzIGRvbmUgb3BlbmluZy5cbiAgICAgICAqIEBldmVudCBBY2NvcmRpb24jZG93blxuICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uJywgWyR0YXJnZXRdKTtcbiAgICB9KTtcblxuICAgICQoYCMkeyR0YXJnZXQuYXR0cignYXJpYS1sYWJlbGxlZGJ5Jyl9YCkuYXR0cih7XG4gICAgICAnYXJpYS1leHBhbmRlZCc6IHRydWUsXG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHRhYiBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBBY2NvcmRpb24gdGFiIHRvIGNsb3NlIChgLmFjY29yZGlvbi1jb250ZW50YCkuXG4gICAqIEBmaXJlcyBBY2NvcmRpb24jdXBcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB1cCgkdGFyZ2V0KSB7XG4gICAgdmFyICRhdW50cyA9ICR0YXJnZXQucGFyZW50KCkuc2libGluZ3MoKSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYoKCF0aGlzLm9wdGlvbnMuYWxsb3dBbGxDbG9zZWQgJiYgISRhdW50cy5oYXNDbGFzcygnaXMtYWN0aXZlJykpIHx8ICEkdGFyZ2V0LnBhcmVudCgpLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvdW5kYXRpb24uTW92ZSh0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgJHRhcmdldCwgZnVuY3Rpb24oKXtcbiAgICAgICR0YXJnZXQuc2xpZGVVcChfdGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHRhYiBpcyBkb25lIGNvbGxhcHNpbmcgdXAuXG4gICAgICAgICAqIEBldmVudCBBY2NvcmRpb24jdXBcbiAgICAgICAgICovXG4gICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3VwLnpmLmFjY29yZGlvbicsIFskdGFyZ2V0XSk7XG4gICAgICB9KTtcbiAgICAvLyB9KTtcblxuICAgICR0YXJnZXQuYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgICAgICAgICAucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgJChgIyR7JHRhcmdldC5hdHRyKCdhcmlhLWxhYmVsbGVkYnknKX1gKS5hdHRyKHtcbiAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZSxcbiAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBmYWxzZVxuICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgYW4gYWNjb3JkaW9uLlxuICAgKiBAZmlyZXMgQWNjb3JkaW9uI2Rlc3Ryb3llZFxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS10YWItY29udGVudF0nKS5zdG9wKHRydWUpLnNsaWRlVXAoMCkuY3NzKCdkaXNwbGF5JywgJycpO1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnYScpLm9mZignLnpmLmFjY29yZGlvbicpO1xuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgJCh3aW5kb3cpLm9mZigncG9wc3RhdGUnLCB0aGlzLl9jaGVja0RlZXBMaW5rKTtcbiAgICB9XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuQWNjb3JkaW9uLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQW1vdW50IG9mIHRpbWUgdG8gYW5pbWF0ZSB0aGUgb3BlbmluZyBvZiBhbiBhY2NvcmRpb24gcGFuZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAyNTBcbiAgICovXG4gIHNsaWRlU3BlZWQ6IDI1MCxcbiAgLyoqXG4gICAqIEFsbG93IHRoZSBhY2NvcmRpb24gdG8gaGF2ZSBtdWx0aXBsZSBvcGVuIHBhbmVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlFeHBhbmQ6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3cgdGhlIGFjY29yZGlvbiB0byBjbG9zZSBhbGwgcGFuZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhbGxvd0FsbENsb3NlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHdpbmRvdyB0byBzY3JvbGwgdG8gY29udGVudCBvZiBwYW5lIHNwZWNpZmllZCBieSBoYXNoIGFuY2hvclxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcExpbms6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIGRlZXAgbGluayBzY3JvbGwgdG8gbWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIGFjY29yZGlvbiBwYW5lbCBpcyB2aXNpYmxlXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWVwTGlua1NtdWRnZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEFuaW1hdGlvbiB0aW1lIChtcykgZm9yIHRoZSBkZWVwIGxpbmsgYWRqdXN0bWVudFxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgZGVlcExpbmtTbXVkZ2VEZWxheTogMzAwLFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBvcGVuIGFjY29yZGlvblxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXBkYXRlSGlzdG9yeTogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihBY2NvcmRpb24sICdBY2NvcmRpb24nKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIEFjY29yZGlvbk1lbnUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmFjY29yZGlvbk1lbnVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm5lc3RcbiAqL1xuXG5jbGFzcyBBY2NvcmRpb25NZW51IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgQWNjb3JkaW9uTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYW4gYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQWNjb3JkaW9uTWVudS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgRm91bmRhdGlvbi5OZXN0LkZlYXRoZXIodGhpcy4kZWxlbWVudCwgJ2FjY29yZGlvbicpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnQWNjb3JkaW9uTWVudScpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0FjY29yZGlvbk1lbnUnLCB7XG4gICAgICAnRU5URVInOiAndG9nZ2xlJyxcbiAgICAgICdTUEFDRSc6ICd0b2dnbGUnLFxuICAgICAgJ0FSUk9XX1JJR0hUJzogJ29wZW4nLFxuICAgICAgJ0FSUk9XX1VQJzogJ3VwJyxcbiAgICAgICdBUlJPV19ET1dOJzogJ2Rvd24nLFxuICAgICAgJ0FSUk9XX0xFRlQnOiAnY2xvc2UnLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZUFsbCdcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGFjY29yZGlvbiBtZW51IGJ5IGhpZGluZyBhbGwgbmVzdGVkIG1lbnVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1zdWJtZW51XScpLm5vdCgnLmlzLWFjdGl2ZScpLnNsaWRlVXAoMCk7Ly8uZmluZCgnYScpLmNzcygncGFkZGluZy1sZWZ0JywgJzFyZW0nKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ3JvbGUnOiAnbWVudScsXG4gICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiB0aGlzLm9wdGlvbnMubXVsdGlPcGVuXG4gICAgfSk7XG5cbiAgICB0aGlzLiRtZW51TGlua3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQnKTtcbiAgICB0aGlzLiRtZW51TGlua3MuZWFjaChmdW5jdGlvbigpe1xuICAgICAgdmFyIGxpbmtJZCA9IHRoaXMuaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnYWNjLW1lbnUtbGluaycpLFxuICAgICAgICAgICRlbGVtID0gJCh0aGlzKSxcbiAgICAgICAgICAkc3ViID0gJGVsZW0uY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJyksXG4gICAgICAgICAgc3ViSWQgPSAkc3ViWzBdLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2FjYy1tZW51JyksXG4gICAgICAgICAgaXNBY3RpdmUgPSAkc3ViLmhhc0NsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICAgICRlbGVtLmF0dHIoe1xuICAgICAgICAnYXJpYS1jb250cm9scyc6IHN1YklkLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGlzQWN0aXZlLFxuICAgICAgICAncm9sZSc6ICdtZW51aXRlbScsXG4gICAgICAgICdpZCc6IGxpbmtJZFxuICAgICAgfSk7XG4gICAgICAkc3ViLmF0dHIoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiAhaXNBY3RpdmUsXG4gICAgICAgICdyb2xlJzogJ21lbnUnLFxuICAgICAgICAnaWQnOiBzdWJJZFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIGluaXRQYW5lcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjdGl2ZScpO1xuICAgIGlmKGluaXRQYW5lcy5sZW5ndGgpe1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGluaXRQYW5lcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgIF90aGlzLmRvd24oJCh0aGlzKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSBtZW51LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJHN1Ym1lbnUgPSAkKHRoaXMpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuXG4gICAgICBpZiAoJHN1Ym1lbnUubGVuZ3RoKSB7XG4gICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2EnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKS5vbignY2xpY2suemYuYWNjb3JkaW9uTWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBfdGhpcy50b2dnbGUoJHN1Ym1lbnUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5vbigna2V5ZG93bi56Zi5hY2NvcmRpb25tZW51JywgZnVuY3Rpb24oZSl7XG4gICAgICB2YXIgJGVsZW1lbnQgPSAkKHRoaXMpLFxuICAgICAgICAgICRlbGVtZW50cyA9ICRlbGVtZW50LnBhcmVudCgndWwnKS5jaGlsZHJlbignbGknKSxcbiAgICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICAgJG5leHRFbGVtZW50LFxuICAgICAgICAgICR0YXJnZXQgPSAkZWxlbWVudC5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKTtcblxuICAgICAgJGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoJCh0aGlzKS5pcygkZWxlbWVudCkpIHtcbiAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5tYXgoMCwgaS0xKSkuZmluZCgnYScpLmZpcnN0KCk7XG4gICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnRzLmVxKE1hdGgubWluKGkrMSwgJGVsZW1lbnRzLmxlbmd0aC0xKSkuZmluZCgnYScpLmZpcnN0KCk7XG5cbiAgICAgICAgICBpZiAoJCh0aGlzKS5jaGlsZHJlbignW2RhdGEtc3VibWVudV06dmlzaWJsZScpLmxlbmd0aCkgeyAvLyBoYXMgb3BlbiBzdWIgbWVudVxuICAgICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnQuZmluZCgnbGk6Zmlyc3QtY2hpbGQnKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCQodGhpcykuaXMoJzpmaXJzdC1jaGlsZCcpKSB7IC8vIGlzIGZpcnN0IGVsZW1lbnQgb2Ygc3ViIG1lbnVcbiAgICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50LnBhcmVudHMoJ2xpJykuZmlyc3QoKS5maW5kKCdhJykuZmlyc3QoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRwcmV2RWxlbWVudC5wYXJlbnRzKCdsaScpLmZpcnN0KCkuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdOnZpc2libGUnKS5sZW5ndGgpIHsgLy8gaWYgcHJldmlvdXMgZWxlbWVudCBoYXMgb3BlbiBzdWIgbWVudVxuICAgICAgICAgICAgJHByZXZFbGVtZW50ID0gJHByZXZFbGVtZW50LnBhcmVudHMoJ2xpJykuZmluZCgnbGk6bGFzdC1jaGlsZCcpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJCh0aGlzKS5pcygnOmxhc3QtY2hpbGQnKSkgeyAvLyBpcyBsYXN0IGVsZW1lbnQgb2Ygc3ViIG1lbnVcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9ICRlbGVtZW50LnBhcmVudHMoJ2xpJykuZmlyc3QoKS5uZXh0KCdsaScpLmZpbmQoJ2EnKS5maXJzdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQuaGFuZGxlS2V5KGUsICdBY2NvcmRpb25NZW51Jywge1xuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgICAgICBfdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgICAgICAgICAgJHRhcmdldC5maW5kKCdsaScpLmZpcnN0KCkuZmluZCgnYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5sZW5ndGggJiYgISR0YXJnZXQuaXMoJzpoaWRkZW4nKSkgeyAvLyBjbG9zZSBhY3RpdmUgc3ViIG9mIHRoaXMgaXRlbVxuICAgICAgICAgICAgX3RoaXMudXAoJHRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgkZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKSB7IC8vIGNsb3NlIGN1cnJlbnRseSBvcGVuIHN1YlxuICAgICAgICAgICAgX3RoaXMudXAoJGVsZW1lbnQucGFyZW50KCdbZGF0YS1zdWJtZW51XScpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudHMoJ2xpJykuZmlyc3QoKS5maW5kKCdhJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkb3duOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJGVsZW1lbnQuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykubGVuZ3RoKSB7XG4gICAgICAgICAgICBfdGhpcy50b2dnbGUoJGVsZW1lbnQuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2VBbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLmhpZGVBbGwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24ocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7Ly8uYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYWxsIHBhbmVzIG9mIHRoZSBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGhpZGVBbGwoKSB7XG4gICAgdGhpcy51cCh0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFsbCBwYW5lcyBvZiB0aGUgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBzaG93QWxsKCkge1xuICAgIHRoaXMuZG93bih0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIG9wZW4vY2xvc2Ugc3RhdGUgb2YgYSBzdWJtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSB0aGUgc3VibWVudSB0byB0b2dnbGVcbiAgICovXG4gIHRvZ2dsZSgkdGFyZ2V0KXtcbiAgICBpZighJHRhcmdldC5pcygnOmFuaW1hdGVkJykpIHtcbiAgICAgIGlmICghJHRhcmdldC5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgIHRoaXMudXAoJHRhcmdldCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kb3duKCR0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgc3ViLW1lbnUgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gU3ViLW1lbnUgdG8gb3Blbi5cbiAgICogQGZpcmVzIEFjY29yZGlvbk1lbnUjZG93blxuICAgKi9cbiAgZG93bigkdGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmKCF0aGlzLm9wdGlvbnMubXVsdGlPcGVuKSB7XG4gICAgICB0aGlzLnVwKHRoaXMuJGVsZW1lbnQuZmluZCgnLmlzLWFjdGl2ZScpLm5vdCgkdGFyZ2V0LnBhcmVudHNVbnRpbCh0aGlzLiRlbGVtZW50KS5hZGQoJHRhcmdldCkpKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0LmFkZENsYXNzKCdpcy1hY3RpdmUnKS5hdHRyKHsnYXJpYS1oaWRkZW4nOiBmYWxzZX0pXG4gICAgICAucGFyZW50KCcuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50JykuYXR0cih7J2FyaWEtZXhwYW5kZWQnOiB0cnVlfSk7XG5cbiAgICAgIC8vRm91bmRhdGlvbi5Nb3ZlKHRoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCAkdGFyZ2V0LCBmdW5jdGlvbigpIHtcbiAgICAgICAgJHRhcmdldC5zbGlkZURvd24oX3RoaXMub3B0aW9ucy5zbGlkZVNwZWVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgbWVudSBpcyBkb25lIG9wZW5pbmcuXG4gICAgICAgICAgICogQGV2ZW50IEFjY29yZGlvbk1lbnUjZG93blxuICAgICAgICAgICAqL1xuICAgICAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Rvd24uemYuYWNjb3JkaW9uTWVudScsIFskdGFyZ2V0XSk7XG4gICAgICAgIH0pO1xuICAgICAgLy99KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHN1Yi1tZW51IGRlZmluZWQgYnkgYCR0YXJnZXRgLiBBbGwgc3ViLW1lbnVzIGluc2lkZSB0aGUgdGFyZ2V0IHdpbGwgYmUgY2xvc2VkIGFzIHdlbGwuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gU3ViLW1lbnUgdG8gY2xvc2UuXG4gICAqIEBmaXJlcyBBY2NvcmRpb25NZW51I3VwXG4gICAqL1xuICB1cCgkdGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAvL0ZvdW5kYXRpb24uTW92ZSh0aGlzLm9wdGlvbnMuc2xpZGVTcGVlZCwgJHRhcmdldCwgZnVuY3Rpb24oKXtcbiAgICAgICR0YXJnZXQuc2xpZGVVcChfdGhpcy5vcHRpb25zLnNsaWRlU3BlZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgZG9uZSBjb2xsYXBzaW5nIHVwLlxuICAgICAgICAgKiBAZXZlbnQgQWNjb3JkaW9uTWVudSN1cFxuICAgICAgICAgKi9cbiAgICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcigndXAuemYuYWNjb3JkaW9uTWVudScsIFskdGFyZ2V0XSk7XG4gICAgICB9KTtcbiAgICAvL30pO1xuXG4gICAgdmFyICRtZW51cyA9ICR0YXJnZXQuZmluZCgnW2RhdGEtc3VibWVudV0nKS5zbGlkZVVwKDApLmFkZEJhY2soKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgJG1lbnVzLnBhcmVudCgnLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCcpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgYWNjb3JkaW9uIG1lbnUuXG4gICAqIEBmaXJlcyBBY2NvcmRpb25NZW51I2Rlc3Ryb3llZFxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykuc2xpZGVEb3duKDApLmNzcygnZGlzcGxheScsICcnKTtcbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5vZmYoJ2NsaWNrLnpmLmFjY29yZGlvbk1lbnUnKTtcblxuICAgIEZvdW5kYXRpb24uTmVzdC5CdXJuKHRoaXMuJGVsZW1lbnQsICdhY2NvcmRpb24nKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuQWNjb3JkaW9uTWVudS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGFuaW1hdGUgdGhlIG9wZW5pbmcgb2YgYSBzdWJtZW51IGluIG1zLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDI1MFxuICAgKi9cbiAgc2xpZGVTcGVlZDogMjUwLFxuICAvKipcbiAgICogQWxsb3cgdGhlIG1lbnUgdG8gaGF2ZSBtdWx0aXBsZSBvcGVuIHBhbmVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBtdWx0aU9wZW46IHRydWVcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihBY2NvcmRpb25NZW51LCAnQWNjb3JkaW9uTWVudScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogRHJpbGxkb3duIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5kcmlsbGRvd25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm5lc3RcbiAqL1xuXG5jbGFzcyBEcmlsbGRvd24ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIGRyaWxsZG93biBtZW51LlxuICAgKiBAY2xhc3NcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhbiBhY2NvcmRpb24gbWVudS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBEcmlsbGRvd24uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIEZvdW5kYXRpb24uTmVzdC5GZWF0aGVyKHRoaXMuJGVsZW1lbnQsICdkcmlsbGRvd24nKTtcblxuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0RyaWxsZG93bicpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ0RyaWxsZG93bicsIHtcbiAgICAgICdFTlRFUic6ICdvcGVuJyxcbiAgICAgICdTUEFDRSc6ICdvcGVuJyxcbiAgICAgICdBUlJPV19SSUdIVCc6ICduZXh0JyxcbiAgICAgICdBUlJPV19VUCc6ICd1cCcsXG4gICAgICAnQVJST1dfRE9XTic6ICdkb3duJyxcbiAgICAgICdBUlJPV19MRUZUJzogJ3ByZXZpb3VzJyxcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnLFxuICAgICAgJ1RBQic6ICdkb3duJyxcbiAgICAgICdTSElGVF9UQUInOiAndXAnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRyaWxsZG93biBieSBjcmVhdGluZyBqUXVlcnkgY29sbGVjdGlvbnMgb2YgZWxlbWVudHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQnKS5jaGlsZHJlbignYScpO1xuICAgIHRoaXMuJHN1Ym1lbnVzID0gdGhpcy4kc3VibWVudUFuY2hvcnMucGFyZW50KCdsaScpLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpO1xuICAgIHRoaXMuJG1lbnVJdGVtcyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGknKS5ub3QoJy5qcy1kcmlsbGRvd24tYmFjaycpLmF0dHIoJ3JvbGUnLCAnbWVudWl0ZW0nKS5maW5kKCdhJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhLW11dGF0ZScsICh0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtZHJpbGxkb3duJykgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnZHJpbGxkb3duJykpKTtcblxuICAgIHRoaXMuX3ByZXBhcmVNZW51KCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJFdmVudHMoKTtcblxuICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZXMgZHJpbGxkb3duIG1lbnUgYnkgc2V0dGluZyBhdHRyaWJ1dGVzIHRvIGxpbmtzIGFuZCBlbGVtZW50c1xuICAgKiBzZXRzIGEgbWluIGhlaWdodCB0byBwcmV2ZW50IGNvbnRlbnQganVtcGluZ1xuICAgKiB3cmFwcyB0aGUgZWxlbWVudCBpZiBub3QgYWxyZWFkeSB3cmFwcGVkXG4gICAqIEBwcml2YXRlXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX3ByZXBhcmVNZW51KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy8gaWYoIXRoaXMub3B0aW9ucy5ob2xkT3Blbil7XG4gICAgLy8gICB0aGlzLl9tZW51TGlua0V2ZW50cygpO1xuICAgIC8vIH1cbiAgICB0aGlzLiRzdWJtZW51QW5jaG9ycy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGxpbmsgPSAkKHRoaXMpO1xuICAgICAgdmFyICRzdWIgPSAkbGluay5wYXJlbnQoKTtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMucGFyZW50TGluayl7XG4gICAgICAgICRsaW5rLmNsb25lKCkucHJlcGVuZFRvKCRzdWIuY2hpbGRyZW4oJ1tkYXRhLXN1Ym1lbnVdJykpLndyYXAoJzxsaSBjbGFzcz1cImlzLXN1Ym1lbnUtcGFyZW50LWl0ZW0gaXMtc3VibWVudS1pdGVtIGlzLWRyaWxsZG93bi1zdWJtZW51LWl0ZW1cIiByb2xlPVwibWVudS1pdGVtXCI+PC9saT4nKTtcbiAgICAgIH1cbiAgICAgICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicsICRsaW5rLmF0dHIoJ2hyZWYnKSkucmVtb3ZlQXR0cignaHJlZicpLmF0dHIoJ3RhYmluZGV4JywgMCk7XG4gICAgICAkbGluay5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKVxuICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgICAndGFiaW5kZXgnOiAwLFxuICAgICAgICAgICAgJ3JvbGUnOiAnbWVudSdcbiAgICAgICAgICB9KTtcbiAgICAgIF90aGlzLl9ldmVudHMoJGxpbmspO1xuICAgIH0pO1xuICAgIHRoaXMuJHN1Ym1lbnVzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciAkbWVudSA9ICQodGhpcyksXG4gICAgICAgICAgJGJhY2sgPSAkbWVudS5maW5kKCcuanMtZHJpbGxkb3duLWJhY2snKTtcbiAgICAgIGlmKCEkYmFjay5sZW5ndGgpe1xuICAgICAgICBzd2l0Y2ggKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvblBvc2l0aW9uKSB7XG4gICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgICAgJG1lbnUuYXBwZW5kKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgICAkbWVudS5wcmVwZW5kKF90aGlzLm9wdGlvbnMuYmFja0J1dHRvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlVuc3VwcG9ydGVkIGJhY2tCdXR0b25Qb3NpdGlvbiB2YWx1ZSAnXCIgKyBfdGhpcy5vcHRpb25zLmJhY2tCdXR0b25Qb3NpdGlvbiArIFwiJ1wiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMuX2JhY2soJG1lbnUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc3VibWVudXMuYWRkQ2xhc3MoJ2ludmlzaWJsZScpO1xuICAgIGlmKCF0aGlzLm9wdGlvbnMuYXV0b0hlaWdodCkge1xuICAgICAgdGhpcy4kc3VibWVudXMuYWRkQ2xhc3MoJ2RyaWxsZG93bi1zdWJtZW51LWNvdmVyLXByZXZpb3VzJyk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGEgd3JhcHBlciBvbiBlbGVtZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgaWYoIXRoaXMuJGVsZW1lbnQucGFyZW50KCkuaGFzQ2xhc3MoJ2lzLWRyaWxsZG93bicpKXtcbiAgICAgIHRoaXMuJHdyYXBwZXIgPSAkKHRoaXMub3B0aW9ucy53cmFwcGVyKS5hZGRDbGFzcygnaXMtZHJpbGxkb3duJyk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuYW5pbWF0ZUhlaWdodCkgdGhpcy4kd3JhcHBlci5hZGRDbGFzcygnYW5pbWF0ZS1oZWlnaHQnKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQud3JhcCh0aGlzLiR3cmFwcGVyKTtcbiAgICB9XG4gICAgLy8gc2V0IHdyYXBwZXJcbiAgICB0aGlzLiR3cmFwcGVyID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoKTtcbiAgICB0aGlzLiR3cmFwcGVyLmNzcyh0aGlzLl9nZXRNYXhEaW1zKCkpO1xuICB9XG5cbiAgX3Jlc2l6ZSgpIHtcbiAgICB0aGlzLiR3cmFwcGVyLmNzcyh7J21heC13aWR0aCc6ICdub25lJywgJ21pbi1oZWlnaHQnOiAnbm9uZSd9KTtcbiAgICAvLyBfZ2V0TWF4RGltcyBoYXMgc2lkZSBlZmZlY3RzIChib28pIGJ1dCBjYWxsaW5nIGl0IHNob3VsZCB1cGRhdGUgYWxsIG90aGVyIG5lY2Vzc2FyeSBoZWlnaHRzICYgd2lkdGhzXG4gICAgdGhpcy4kd3JhcHBlci5jc3ModGhpcy5fZ2V0TWF4RGltcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIHRvIGVsZW1lbnRzIGluIHRoZSBtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gdGhlIGN1cnJlbnQgbWVudSBpdGVtIHRvIGFkZCBoYW5kbGVycyB0by5cbiAgICovXG4gIF9ldmVudHMoJGVsZW0pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJGVsZW0ub2ZmKCdjbGljay56Zi5kcmlsbGRvd24nKVxuICAgIC5vbignY2xpY2suemYuZHJpbGxkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICBpZigkKGUudGFyZ2V0KS5wYXJlbnRzVW50aWwoJ3VsJywgJ2xpJykuaGFzQ2xhc3MoJ2lzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCcpKXtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZihlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkKXtcbiAgICAgIC8vICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gfVxuICAgICAgX3RoaXMuX3Nob3coJGVsZW0ucGFyZW50KCdsaScpKTtcblxuICAgICAgaWYoX3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2spe1xuICAgICAgICB2YXIgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAgICRib2R5Lm9mZignLnpmLmRyaWxsZG93bicpLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IF90aGlzLiRlbGVtZW50WzBdIHx8ICQuY29udGFpbnMoX3RoaXMuJGVsZW1lbnRbMF0sIGUudGFyZ2V0KSkgeyByZXR1cm47IH1cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuX2hpZGVBbGwoKTtcbiAgICAgICAgICAkYm9keS5vZmYoJy56Zi5kcmlsbGRvd24nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cdCAgdGhpcy4kZWxlbWVudC5vbignbXV0YXRlbWUuemYudHJpZ2dlcicsIHRoaXMuX3Jlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBtZW51IGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZ2lzdGVyRXZlbnRzKCkge1xuICAgIGlmKHRoaXMub3B0aW9ucy5zY3JvbGxUb3Ape1xuICAgICAgdGhpcy5fYmluZEhhbmRsZXIgPSB0aGlzLl9zY3JvbGxUb3AuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ29wZW4uemYuZHJpbGxkb3duIGhpZGUuemYuZHJpbGxkb3duIGNsb3NlZC56Zi5kcmlsbGRvd24nLHRoaXMuX2JpbmRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIFRvcCBvZiBFbGVtZW50IG9yIGRhdGEtc2Nyb2xsLXRvcC1lbGVtZW50XG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI3Njcm9sbG1lXG4gICAqL1xuICBfc2Nyb2xsVG9wKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyICRzY3JvbGxUb3BFbGVtZW50ID0gX3RoaXMub3B0aW9ucy5zY3JvbGxUb3BFbGVtZW50IT0nJz8kKF90aGlzLm9wdGlvbnMuc2Nyb2xsVG9wRWxlbWVudCk6X3RoaXMuJGVsZW1lbnQsXG4gICAgICAgIHNjcm9sbFBvcyA9IHBhcnNlSW50KCRzY3JvbGxUb3BFbGVtZW50Lm9mZnNldCgpLnRvcCtfdGhpcy5vcHRpb25zLnNjcm9sbFRvcE9mZnNldCk7XG4gICAgJCgnaHRtbCwgYm9keScpLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7IHNjcm9sbFRvcDogc2Nyb2xsUG9zIH0sIF90aGlzLm9wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb24sIF90aGlzLm9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nLGZ1bmN0aW9uKCl7XG4gICAgICAvKipcbiAgICAgICAgKiBGaXJlcyBhZnRlciB0aGUgbWVudSBoYXMgc2Nyb2xsZWRcbiAgICAgICAgKiBAZXZlbnQgRHJpbGxkb3duI3Njcm9sbG1lXG4gICAgICAgICovXG4gICAgICBpZih0aGlzPT09JCgnaHRtbCcpWzBdKV90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Njcm9sbG1lLnpmLmRyaWxsZG93bicpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMga2V5ZG93biBldmVudCBsaXN0ZW5lciB0byBgbGlgJ3MgaW4gdGhlIG1lbnUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfa2V5Ym9hcmRFdmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJG1lbnVJdGVtcy5hZGQodGhpcy4kZWxlbWVudC5maW5kKCcuanMtZHJpbGxkb3duLWJhY2sgPiBhLCAuaXMtc3VibWVudS1wYXJlbnQtaXRlbSA+IGEnKSkub24oJ2tleWRvd24uemYuZHJpbGxkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICB2YXIgJGVsZW1lbnQgPSAkKHRoaXMpLFxuICAgICAgICAgICRlbGVtZW50cyA9ICRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykuY2hpbGRyZW4oJ2xpJykuY2hpbGRyZW4oJ2EnKSxcbiAgICAgICAgICAkcHJldkVsZW1lbnQsXG4gICAgICAgICAgJG5leHRFbGVtZW50O1xuXG4gICAgICAkZWxlbWVudHMuZWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmlzKCRlbGVtZW50KSkge1xuICAgICAgICAgICRwcmV2RWxlbWVudCA9ICRlbGVtZW50cy5lcShNYXRoLm1heCgwLCBpLTEpKTtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5taW4oaSsxLCAkZWxlbWVudHMubGVuZ3RoLTEpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnRHJpbGxkb3duJywge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoJGVsZW1lbnQuaXMoX3RoaXMuJHN1Ym1lbnVBbmNob3JzKSkge1xuICAgICAgICAgICAgX3RoaXMuX3Nob3coJGVsZW1lbnQucGFyZW50KCdsaScpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLmZpbmQoJ3VsIGxpIGEnKS5maWx0ZXIoX3RoaXMuJG1lbnVJdGVtcykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpKTtcbiAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW1lbnQpLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJykuY2hpbGRyZW4oJ2EnKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIC8vIERvbid0IHRhcCBmb2N1cyBvbiBmaXJzdCBlbGVtZW50IGluIHJvb3QgdWxcbiAgICAgICAgICByZXR1cm4gISRlbGVtZW50LmlzKF90aGlzLiRlbGVtZW50LmZpbmQoJz4gbGk6Zmlyc3QtY2hpbGQgPiBhJykpO1xuICAgICAgICB9LFxuICAgICAgICBkb3duOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAvLyBEb24ndCB0YXAgZm9jdXMgb24gbGFzdCBlbGVtZW50IGluIHJvb3QgdWxcbiAgICAgICAgICByZXR1cm4gISRlbGVtZW50LmlzKF90aGlzLiRlbGVtZW50LmZpbmQoJz4gbGk6bGFzdC1jaGlsZCA+IGEnKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBEb24ndCBjbG9zZSBvbiBlbGVtZW50IGluIHJvb3QgdWxcbiAgICAgICAgICBpZiAoISRlbGVtZW50LmlzKF90aGlzLiRlbGVtZW50LmZpbmQoJz4gbGkgPiBhJykpKSB7XG4gICAgICAgICAgICBfdGhpcy5faGlkZSgkZWxlbWVudC5wYXJlbnQoKS5wYXJlbnQoKSk7XG4gICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoKS5wYXJlbnQoKS5zaWJsaW5ncygnYScpLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoISRlbGVtZW50LmlzKF90aGlzLiRtZW51SXRlbXMpKSB7IC8vIG5vdCBtZW51IGl0ZW0gbWVhbnMgYmFjayBidXR0b25cbiAgICAgICAgICAgIF90aGlzLl9oaWRlKCRlbGVtZW50LnBhcmVudCgnbGknKS5wYXJlbnQoJ3VsJykpO1xuICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLnBhcmVudCgndWwnKS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoJ2xpJykucGFyZW50KCd1bCcpLnBhcmVudCgnbGknKS5jaGlsZHJlbignYScpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJGVsZW1lbnQuaXMoX3RoaXMuJHN1Ym1lbnVBbmNob3JzKSkge1xuICAgICAgICAgICAgX3RoaXMuX3Nob3coJGVsZW1lbnQucGFyZW50KCdsaScpKTtcbiAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgnbGknKS5vbmUoRm91bmRhdGlvbi50cmFuc2l0aW9uZW5kKCRlbGVtZW50KSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCdsaScpLmZpbmQoJ3VsIGxpIGEnKS5maWx0ZXIoX3RoaXMuJG1lbnVJdGVtcykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pOyAvLyBlbmQga2V5Ym9hcmRBY2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYWxsIG9wZW4gZWxlbWVudHMsIGFuZCByZXR1cm5zIHRvIHJvb3QgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBEcmlsbGRvd24jY2xvc2VkXG4gICAqL1xuICBfaGlkZUFsbCgpIHtcbiAgICB2YXIgJGVsZW0gPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pcy1kcmlsbGRvd24tc3VibWVudS5pcy1hY3RpdmUnKS5hZGRDbGFzcygnaXMtY2xvc2luZycpO1xuICAgIGlmKHRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB0aGlzLiR3cmFwcGVyLmNzcyh7aGVpZ2h0OiRlbGVtLnBhcmVudCgpLmNsb3Nlc3QoJ3VsJykuZGF0YSgnY2FsY0hlaWdodCcpfSk7XG4gICAgJGVsZW0ub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCgkZWxlbSksIGZ1bmN0aW9uKGUpe1xuICAgICAgJGVsZW0ucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1jbG9zaW5nJyk7XG4gICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBtZW51IGlzIGZ1bGx5IGNsb3NlZC5cbiAgICAgICAgICogQGV2ZW50IERyaWxsZG93biNjbG9zZWRcbiAgICAgICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZWQuemYuZHJpbGxkb3duJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBsaXN0ZW5lciBmb3IgZWFjaCBgYmFja2AgYnV0dG9uLCBhbmQgY2xvc2VzIG9wZW4gbWVudXMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJpbGxkb3duI2JhY2tcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbGVtIC0gdGhlIGN1cnJlbnQgc3ViLW1lbnUgdG8gYWRkIGBiYWNrYCBldmVudC5cbiAgICovXG4gIF9iYWNrKCRlbGVtKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAkZWxlbS5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpO1xuICAgICRlbGVtLmNoaWxkcmVuKCcuanMtZHJpbGxkb3duLWJhY2snKVxuICAgICAgLm9uKCdjbGljay56Zi5kcmlsbGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ21vdXNldXAgb24gYmFjaycpO1xuICAgICAgICBfdGhpcy5faGlkZSgkZWxlbSk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwYXJlbnQgc3VibWVudSwgY2FsbCBzaG93XG4gICAgICAgIGxldCBwYXJlbnRTdWJNZW51ID0gJGVsZW0ucGFyZW50KCdsaScpLnBhcmVudCgndWwnKS5wYXJlbnQoJ2xpJyk7XG4gICAgICAgIGlmIChwYXJlbnRTdWJNZW51Lmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzLl9zaG93KHBhcmVudFN1Yk1lbnUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIHRvIG1lbnUgaXRlbXMgdy9vIHN1Ym1lbnVzIHRvIGNsb3NlIG9wZW4gbWVudXMgb24gY2xpY2suXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21lbnVMaW5rRXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy4kbWVudUl0ZW1zLm5vdCgnLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCcpXG4gICAgICAgIC5vZmYoJ2NsaWNrLnpmLmRyaWxsZG93bicpXG4gICAgICAgIC5vbignY2xpY2suemYuZHJpbGxkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgLy8gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBfdGhpcy5faGlkZUFsbCgpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBzdWJtZW51LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyaWxsZG93biNvcGVuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbSAtIHRoZSBjdXJyZW50IGVsZW1lbnQgd2l0aCBhIHN1Ym1lbnUgdG8gb3BlbiwgaS5lLiB0aGUgYGxpYCB0YWcuXG4gICAqL1xuICBfc2hvdygkZWxlbSkge1xuICAgIGlmKHRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB0aGlzLiR3cmFwcGVyLmNzcyh7aGVpZ2h0OiRlbGVtLmNoaWxkcmVuKCdbZGF0YS1zdWJtZW51XScpLmRhdGEoJ2NhbGNIZWlnaHQnKX0pO1xuICAgICRlbGVtLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICAkZWxlbS5jaGlsZHJlbignW2RhdGEtc3VibWVudV0nKS5hZGRDbGFzcygnaXMtYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2ludmlzaWJsZScpLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHN1Ym1lbnUgaGFzIG9wZW5lZC5cbiAgICAgKiBAZXZlbnQgRHJpbGxkb3duI29wZW5cbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29wZW4uemYuZHJpbGxkb3duJywgWyRlbGVtXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhpZGVzIGEgc3VibWVudVxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIERyaWxsZG93biNoaWRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbSAtIHRoZSBjdXJyZW50IHN1Yi1tZW51IHRvIGhpZGUsIGkuZS4gdGhlIGB1bGAgdGFnLlxuICAgKi9cbiAgX2hpZGUoJGVsZW0pIHtcbiAgICBpZih0aGlzLm9wdGlvbnMuYXV0b0hlaWdodCkgdGhpcy4kd3JhcHBlci5jc3Moe2hlaWdodDokZWxlbS5wYXJlbnQoKS5jbG9zZXN0KCd1bCcpLmRhdGEoJ2NhbGNIZWlnaHQnKX0pO1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgJGVsZW0ucGFyZW50KCdsaScpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgJGVsZW0uYXR0cignYXJpYS1oaWRkZW4nLCB0cnVlKS5hZGRDbGFzcygnaXMtY2xvc2luZycpXG4gICAgJGVsZW0uYWRkQ2xhc3MoJ2lzLWNsb3NpbmcnKVxuICAgICAgICAgLm9uZShGb3VuZGF0aW9uLnRyYW5zaXRpb25lbmQoJGVsZW0pLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAkZWxlbS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWNsb3NpbmcnKTtcbiAgICAgICAgICAgJGVsZW0uYmx1cigpLmFkZENsYXNzKCdpbnZpc2libGUnKTtcbiAgICAgICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHN1Ym1lbnUgaGFzIGNsb3NlZC5cbiAgICAgKiBAZXZlbnQgRHJpbGxkb3duI2hpZGVcbiAgICAgKi9cbiAgICAkZWxlbS50cmlnZ2VyKCdoaWRlLnpmLmRyaWxsZG93bicsIFskZWxlbV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIG5lc3RlZCBtZW51cyB0byBjYWxjdWxhdGUgdGhlIG1pbi1oZWlnaHQsIGFuZCBtYXgtd2lkdGggZm9yIHRoZSBtZW51LlxuICAgKiBQcmV2ZW50cyBjb250ZW50IGp1bXBpbmcuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE1heERpbXMoKSB7XG4gICAgdmFyICBtYXhIZWlnaHQgPSAwLCByZXN1bHQgPSB7fSwgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuJHN1Ym1lbnVzLmFkZCh0aGlzLiRlbGVtZW50KS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgbnVtT2ZFbGVtcyA9ICQodGhpcykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xuICAgICAgdmFyIGhlaWdodCA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcykuaGVpZ2h0O1xuICAgICAgbWF4SGVpZ2h0ID0gaGVpZ2h0ID4gbWF4SGVpZ2h0ID8gaGVpZ2h0IDogbWF4SGVpZ2h0O1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICQodGhpcykuZGF0YSgnY2FsY0hlaWdodCcsaGVpZ2h0KTtcbiAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdpcy1kcmlsbGRvd24tc3VibWVudScpKSByZXN1bHRbJ2hlaWdodCddID0gaGVpZ2h0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYoIXRoaXMub3B0aW9ucy5hdXRvSGVpZ2h0KSByZXN1bHRbJ21pbi1oZWlnaHQnXSA9IGAke21heEhlaWdodH1weGA7XG5cbiAgICByZXN1bHRbJ21heC13aWR0aCddID0gYCR7dGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBEcmlsbGRvd24gTWVudVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYodGhpcy5vcHRpb25zLnNjcm9sbFRvcCkgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5kcmlsbGRvd24nLHRoaXMuX2JpbmRIYW5kbGVyKTtcbiAgICB0aGlzLl9oaWRlQWxsKCk7XG5cdCAgdGhpcy4kZWxlbWVudC5vZmYoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgICBGb3VuZGF0aW9uLk5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnZHJpbGxkb3duJyk7XG4gICAgdGhpcy4kZWxlbWVudC51bndyYXAoKVxuICAgICAgICAgICAgICAgICAuZmluZCgnLmpzLWRyaWxsZG93bi1iYWNrLCAuaXMtc3VibWVudS1wYXJlbnQtaXRlbScpLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgIC5lbmQoKS5maW5kKCcuaXMtYWN0aXZlLCAuaXMtY2xvc2luZywgLmlzLWRyaWxsZG93bi1zdWJtZW51JykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZSBpcy1jbG9zaW5nIGlzLWRyaWxsZG93bi1zdWJtZW51JylcbiAgICAgICAgICAgICAgICAgLmVuZCgpLmZpbmQoJ1tkYXRhLXN1Ym1lbnVdJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gdGFiaW5kZXggcm9sZScpO1xuICAgIHRoaXMuJHN1Ym1lbnVBbmNob3JzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAkKHRoaXMpLm9mZignLnpmLmRyaWxsZG93bicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc3VibWVudXMucmVtb3ZlQ2xhc3MoJ2RyaWxsZG93bi1zdWJtZW51LWNvdmVyLXByZXZpb3VzJyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGxpbmsgPSAkKHRoaXMpO1xuICAgICAgJGxpbmsucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIGlmKCRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKXtcbiAgICAgICAgJGxpbmsuYXR0cignaHJlZicsICRsaW5rLmRhdGEoJ3NhdmVkSHJlZicpKS5yZW1vdmVEYXRhKCdzYXZlZEhyZWYnKTtcbiAgICAgIH1lbHNleyByZXR1cm47IH1cbiAgICB9KTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH07XG59XG5cbkRyaWxsZG93bi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIE1hcmt1cCB1c2VkIGZvciBKUyBnZW5lcmF0ZWQgYmFjayBidXR0b24uIFByZXBlbmRlZCAgb3IgYXBwZW5kZWQgKHNlZSBiYWNrQnV0dG9uUG9zaXRpb24pIHRvIHN1Ym1lbnUgbGlzdHMgYW5kIGRlbGV0ZWQgb24gYGRlc3Ryb3lgIG1ldGhvZCwgJ2pzLWRyaWxsZG93bi1iYWNrJyBjbGFzcyByZXF1aXJlZC4gUmVtb3ZlIHRoZSBiYWNrc2xhc2ggKGBcXGApIGlmIGNvcHkgYW5kIHBhc3RpbmcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJzxsaSBjbGFzcz1cImpzLWRyaWxsZG93bi1iYWNrXCI+PGEgdGFiaW5kZXg9XCIwXCI+QmFjazwvYT48L2xpPidcbiAgICovXG4gIGJhY2tCdXR0b246ICc8bGkgY2xhc3M9XCJqcy1kcmlsbGRvd24tYmFja1wiPjxhIHRhYmluZGV4PVwiMFwiPkJhY2s8L2E+PC9saT4nLFxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIGJhY2sgYnV0dG9uIGVpdGhlciBhdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiBkcmlsbGRvd24gc3VibWVudXMuIENhbiBiZSBgJ2xlZnQnYCBvciBgJ2JvdHRvbSdgLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHRvcFxuICAgKi9cbiAgYmFja0J1dHRvblBvc2l0aW9uOiAndG9wJyxcbiAgLyoqXG4gICAqIE1hcmt1cCB1c2VkIHRvIHdyYXAgZHJpbGxkb3duIG1lbnUuIFVzZSBhIGNsYXNzIG5hbWUgZm9yIGluZGVwZW5kZW50IHN0eWxpbmc7IHRoZSBKUyBhcHBsaWVkIGNsYXNzOiBgaXMtZHJpbGxkb3duYCBpcyByZXF1aXJlZC4gUmVtb3ZlIHRoZSBiYWNrc2xhc2ggKGBcXGApIGlmIGNvcHkgYW5kIHBhc3RpbmcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJzxkaXY+PC9kaXY+J1xuICAgKi9cbiAgd3JhcHBlcjogJzxkaXY+PC9kaXY+JyxcbiAgLyoqXG4gICAqIEFkZHMgdGhlIHBhcmVudCBsaW5rIHRvIHRoZSBzdWJtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyZW50TGluazogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgbWVudSB0byByZXR1cm4gdG8gcm9vdCBsaXN0IG9uIGJvZHkgY2xpY2suXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3cgdGhlIG1lbnUgdG8gYXV0byBhZGp1c3QgaGVpZ2h0LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0hlaWdodDogZmFsc2UsXG4gIC8qKlxuICAgKiBBbmltYXRlIHRoZSBhdXRvIGFkanVzdCBoZWlnaHQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhbmltYXRlSGVpZ2h0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBtZW51IGFmdGVyIG9wZW5pbmcgYSBzdWJtZW51IG9yIG5hdmlnYXRpbmcgYmFjayB1c2luZyB0aGUgbWVudSBiYWNrIGJ1dHRvblxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2Nyb2xsVG9wOiBmYWxzZSxcbiAgLyoqXG4gICAqIFN0cmluZyBqcXVlcnkgc2VsZWN0b3IgKGZvciBleGFtcGxlICdib2R5Jykgb2YgZWxlbWVudCB0byB0YWtlIG9mZnNldCgpLnRvcCBmcm9tLCBpZiBlbXB0eSBzdHJpbmcgdGhlIGRyaWxsZG93biBtZW51IG9mZnNldCgpLnRvcCBpcyB0YWtlblxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBzY3JvbGxUb3BFbGVtZW50OiAnJyxcbiAgLyoqXG4gICAqIFNjcm9sbFRvcCBvZmZzZXRcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzY3JvbGxUb3BPZmZzZXQ6IDAsXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWF0aW9uIGR1cmF0aW9uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgNTAwXG4gICAqL1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hdGlvbiBlYXNpbmcuIENhbiBiZSBgJ3N3aW5nJ2Agb3IgYCdsaW5lYXInYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2FuaW1hdGV8SlF1ZXJ5IGFuaW1hdGV9XG4gICAqIEBkZWZhdWx0ICdzd2luZydcbiAgICovXG4gIGFuaW1hdGlvbkVhc2luZzogJ3N3aW5nJ1xuICAvLyBob2xkT3BlbjogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihEcmlsbGRvd24sICdEcmlsbGRvd24nKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIERyb3Bkb3duIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5kcm9wZG93blxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5ib3hcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqL1xuXG5jbGFzcyBEcm9wZG93biB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgZHJvcGRvd24uXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGEgZHJvcGRvd24uXG4gICAqICAgICAgICBPYmplY3Qgc2hvdWxkIGJlIG9mIHRoZSBkcm9wZG93biBwYW5lbCwgcmF0aGVyIHRoYW4gaXRzIGFuY2hvci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBEcm9wZG93bi5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ0Ryb3Bkb3duJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignRHJvcGRvd24nLCB7XG4gICAgICAnRU5URVInOiAnb3BlbicsXG4gICAgICAnU1BBQ0UnOiAnb3BlbicsXG4gICAgICAnRVNDQVBFJzogJ2Nsb3NlJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gYnkgc2V0dGluZy9jaGVja2luZyBvcHRpb25zIGFuZCBhdHRyaWJ1dGVzLCBhZGRpbmcgaGVscGVyIHZhcmlhYmxlcywgYW5kIHNhdmluZyB0aGUgYW5jaG9yLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciAkaWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJyk7XG5cbiAgICB0aGlzLiRhbmNob3IgPSAkKGBbZGF0YS10b2dnbGU9XCIkeyRpZH1cIl1gKS5sZW5ndGggPyAkKGBbZGF0YS10b2dnbGU9XCIkeyRpZH1cIl1gKSA6ICQoYFtkYXRhLW9wZW49XCIkeyRpZH1cIl1gKTtcbiAgICB0aGlzLiRhbmNob3IuYXR0cih7XG4gICAgICAnYXJpYS1jb250cm9scyc6ICRpZCxcbiAgICAgICdkYXRhLWlzLWZvY3VzJzogZmFsc2UsXG4gICAgICAnZGF0YS15ZXRpLWJveCc6ICRpZCxcbiAgICAgICdhcmlhLWhhc3BvcHVwJzogdHJ1ZSxcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogZmFsc2VcblxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLnBhcmVudENsYXNzKXtcbiAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuJGVsZW1lbnQucGFyZW50cygnLicgKyB0aGlzLm9wdGlvbnMucGFyZW50Q2xhc3MpO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy4kcGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLnBvc2l0aW9uQ2xhc3MgPSB0aGlzLmdldFBvc2l0aW9uQ2xhc3MoKTtcbiAgICB0aGlzLmNvdW50ZXIgPSA0O1xuICAgIHRoaXMudXNlZFBvc2l0aW9ucyA9IFtdO1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG4gICAgICAnZGF0YS15ZXRpLWJveCc6ICRpZCxcbiAgICAgICdkYXRhLXJlc2l6ZSc6ICRpZCxcbiAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLiRhbmNob3JbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnZGQtYW5jaG9yJylcbiAgICB9KTtcbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGN1cnJlbnQgb3JpZW50YXRpb24gb2YgZHJvcGRvd24gcGFuZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHBvc2l0aW9uIC0gc3RyaW5nIHZhbHVlIG9mIGEgcG9zaXRpb24gY2xhc3MuXG4gICAqL1xuICBnZXRQb3NpdGlvbkNsYXNzKCkge1xuICAgIHZhciB2ZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy4kZWxlbWVudFswXS5jbGFzc05hbWUubWF0Y2goLyh0b3B8bGVmdHxyaWdodHxib3R0b20pL2cpO1xuICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gdmVydGljYWxQb3NpdGlvbiA/IHZlcnRpY2FsUG9zaXRpb25bMF0gOiAnJztcbiAgICB2YXIgaG9yaXpvbnRhbFBvc2l0aW9uID0gL2Zsb2F0LShcXFMrKS8uZXhlYyh0aGlzLiRhbmNob3JbMF0uY2xhc3NOYW1lKTtcbiAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uID8gaG9yaXpvbnRhbFBvc2l0aW9uWzFdIDogJyc7XG4gICAgdmFyIHBvc2l0aW9uID0gaG9yaXpvbnRhbFBvc2l0aW9uID8gaG9yaXpvbnRhbFBvc2l0aW9uICsgJyAnICsgdmVydGljYWxQb3NpdGlvbiA6IHZlcnRpY2FsUG9zaXRpb247XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyB0aGUgZHJvcGRvd24gcGFuZXMgb3JpZW50YXRpb24gYnkgYWRkaW5nL3JlbW92aW5nIHBvc2l0aW9uaW5nIGNsYXNzZXMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcG9zaXRpb24gLSBwb3NpdGlvbiBjbGFzcyB0byByZW1vdmUuXG4gICAqL1xuICBfcmVwb3NpdGlvbihwb3NpdGlvbikge1xuICAgIHRoaXMudXNlZFBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uID8gcG9zaXRpb24gOiAnYm90dG9tJyk7XG4gICAgLy9kZWZhdWx0LCB0cnkgc3dpdGNoaW5nIHRvIG9wcG9zaXRlIHNpZGVcbiAgICBpZighcG9zaXRpb24gJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3RvcCcpO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAndG9wJyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpIDwgMCkpe1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygncmlnaHQnKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pXG4gICAgICAgICAgLmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfVxuXG4gICAgLy9pZiBkZWZhdWx0IGNoYW5nZSBkaWRuJ3Qgd29yaywgdHJ5IGJvdHRvbSBvciBsZWZ0IGZpcnN0XG4gICAgZWxzZSBpZighcG9zaXRpb24gJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2xlZnQnKTtcbiAgICB9ZWxzZSBpZihwb3NpdGlvbiA9PT0gJ3RvcCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pXG4gICAgICAgICAgLmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfWVsc2UgaWYocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKXtcbiAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocG9zaXRpb24pO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uID09PSAncmlnaHQnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSl7XG4gICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9XG4gICAgLy9pZiBub3RoaW5nIGNsZWFyZWQsIHNldCB0byBib3R0b21cbiAgICBlbHNle1xuICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ZXItLTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBhbmQgb3JpZW50YXRpb24gb2YgdGhlIGRyb3Bkb3duIHBhbmUsIGNoZWNrcyBmb3IgY29sbGlzaW9ucy5cbiAgICogUmVjdXJzaXZlbHkgY2FsbHMgaXRzZWxmIGlmIGEgY29sbGlzaW9uIGlzIGRldGVjdGVkLCB3aXRoIGEgbmV3IHBvc2l0aW9uIGNsYXNzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQb3NpdGlvbigpIHtcbiAgICBpZih0aGlzLiRhbmNob3IuYXR0cignYXJpYS1leHBhbmRlZCcpID09PSAnZmFsc2UnKXsgcmV0dXJuIGZhbHNlOyB9XG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkNsYXNzKCksXG4gICAgICAgICRlbGVEaW1zID0gRm91bmRhdGlvbi5Cb3guR2V0RGltZW5zaW9ucyh0aGlzLiRlbGVtZW50KSxcbiAgICAgICAgJGFuY2hvckRpbXMgPSBGb3VuZGF0aW9uLkJveC5HZXREaW1lbnNpb25zKHRoaXMuJGFuY2hvciksXG4gICAgICAgIF90aGlzID0gdGhpcyxcbiAgICAgICAgZGlyZWN0aW9uID0gKHBvc2l0aW9uID09PSAnbGVmdCcgPyAnbGVmdCcgOiAoKHBvc2l0aW9uID09PSAncmlnaHQnKSA/ICdsZWZ0JyA6ICd0b3AnKSksXG4gICAgICAgIHBhcmFtID0gKGRpcmVjdGlvbiA9PT0gJ3RvcCcpID8gJ2hlaWdodCcgOiAnd2lkdGgnLFxuICAgICAgICBvZmZzZXQgPSAocGFyYW0gPT09ICdoZWlnaHQnKSA/IHRoaXMub3B0aW9ucy52T2Zmc2V0IDogdGhpcy5vcHRpb25zLmhPZmZzZXQ7XG5cbiAgICBpZigoJGVsZURpbXMud2lkdGggPj0gJGVsZURpbXMud2luZG93RGltcy53aWR0aCkgfHwgKCF0aGlzLmNvdW50ZXIgJiYgIUZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UodGhpcy4kZWxlbWVudCwgdGhpcy4kcGFyZW50KSkpe1xuICAgICAgdmFyIG5ld1dpZHRoID0gJGVsZURpbXMud2luZG93RGltcy53aWR0aCxcbiAgICAgICAgICBwYXJlbnRIT2Zmc2V0ID0gMDtcbiAgICAgIGlmKHRoaXMuJHBhcmVudCl7XG4gICAgICAgIHZhciAkcGFyZW50RGltcyA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcy4kcGFyZW50KSxcbiAgICAgICAgICAgIHBhcmVudEhPZmZzZXQgPSAkcGFyZW50RGltcy5vZmZzZXQubGVmdDtcbiAgICAgICAgaWYgKCRwYXJlbnREaW1zLndpZHRoIDwgbmV3V2lkdGgpe1xuICAgICAgICAgIG5ld1dpZHRoID0gJHBhcmVudERpbXMud2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4kZWxlbWVudC5vZmZzZXQoRm91bmRhdGlvbi5Cb3guR2V0T2Zmc2V0cyh0aGlzLiRlbGVtZW50LCB0aGlzLiRhbmNob3IsICdjZW50ZXIgYm90dG9tJywgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0ICsgcGFyZW50SE9mZnNldCwgdHJ1ZSkpLmNzcyh7XG4gICAgICAgICd3aWR0aCc6IG5ld1dpZHRoIC0gKHRoaXMub3B0aW9ucy5oT2Zmc2V0ICogMiksXG4gICAgICAgICdoZWlnaHQnOiAnYXV0bydcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbGFzc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQub2Zmc2V0KEZvdW5kYXRpb24uQm94LkdldE9mZnNldHModGhpcy4kZWxlbWVudCwgdGhpcy4kYW5jaG9yLCBwb3NpdGlvbiwgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0KSk7XG5cbiAgICB3aGlsZSghRm91bmRhdGlvbi5Cb3guSW1Ob3RUb3VjaGluZ1lvdSh0aGlzLiRlbGVtZW50LCB0aGlzLiRwYXJlbnQsIHRydWUpICYmIHRoaXMuY291bnRlcil7XG4gICAgICB0aGlzLl9yZXBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBlbGVtZW50IHV0aWxpemluZyB0aGUgdHJpZ2dlcnMgdXRpbGl0eSBsaWJyYXJ5LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgICdvcGVuLnpmLnRyaWdnZXInOiB0aGlzLm9wZW4uYmluZCh0aGlzKSxcbiAgICAgICdjbG9zZS56Zi50cmlnZ2VyJzogdGhpcy5jbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgJ3RvZ2dsZS56Zi50cmlnZ2VyJzogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5fc2V0UG9zaXRpb24uYmluZCh0aGlzKVxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLmhvdmVyKXtcbiAgICAgIHRoaXMuJGFuY2hvci5vZmYoJ21vdXNlZW50ZXIuemYuZHJvcGRvd24gbW91c2VsZWF2ZS56Zi5kcm9wZG93bicpXG4gICAgICAub24oJ21vdXNlZW50ZXIuemYuZHJvcGRvd24nLCBmdW5jdGlvbigpe1xuICAgICAgICB2YXIgYm9keURhdGEgPSAkKCdib2R5JykuZGF0YSgpO1xuICAgICAgICBpZih0eXBlb2YoYm9keURhdGEud2hhdGlucHV0KSA9PT0gJ3VuZGVmaW5lZCcgfHwgYm9keURhdGEud2hhdGlucHV0ID09PSAnbW91c2UnKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICBfdGhpcy4kYW5jaG9yLmRhdGEoJ2hvdmVyJywgdHJ1ZSk7XG4gICAgICAgICAgfSwgX3RoaXMub3B0aW9ucy5ob3ZlckRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYuZHJvcGRvd24nLCBmdW5jdGlvbigpe1xuICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICBfdGhpcy4kYW5jaG9yLmRhdGEoJ2hvdmVyJywgZmFsc2UpO1xuICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpO1xuICAgICAgfSk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuaG92ZXJQYW5lKXtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ21vdXNlZW50ZXIuemYuZHJvcGRvd24gbW91c2VsZWF2ZS56Zi5kcm9wZG93bicpXG4gICAgICAgICAgICAub24oJ21vdXNlZW50ZXIuemYuZHJvcGRvd24nLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICAgICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5kcm9wZG93bicsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIF90aGlzLiRhbmNob3IuZGF0YSgnaG92ZXInLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuaG92ZXJEZWxheSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy4kYW5jaG9yLmFkZCh0aGlzLiRlbGVtZW50KS5vbigna2V5ZG93bi56Zi5kcm9wZG93bicsIGZ1bmN0aW9uKGUpIHtcblxuICAgICAgdmFyICR0YXJnZXQgPSAkKHRoaXMpLFxuICAgICAgICB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUoX3RoaXMuJGVsZW1lbnQpO1xuXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnRHJvcGRvd24nLCB7XG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICgkdGFyZ2V0LmlzKF90aGlzLiRhbmNob3IpKSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICBfdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcsIC0xKS5mb2N1cygpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgX3RoaXMuJGFuY2hvci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGJvZHkgdG8gY2xvc2UgYW55IGRyb3Bkb3ducyBvbiBhIGNsaWNrLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCb2R5SGFuZGxlcigpIHtcbiAgICAgdmFyICRib2R5ID0gJChkb2N1bWVudC5ib2R5KS5ub3QodGhpcy4kZWxlbWVudCksXG4gICAgICAgICBfdGhpcyA9IHRoaXM7XG4gICAgICRib2R5Lm9mZignY2xpY2suemYuZHJvcGRvd24nKVxuICAgICAgICAgIC5vbignY2xpY2suemYuZHJvcGRvd24nLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgIGlmKF90aGlzLiRhbmNob3IuaXMoZS50YXJnZXQpIHx8IF90aGlzLiRhbmNob3IuZmluZChlLnRhcmdldCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKF90aGlzLiRlbGVtZW50LmZpbmQoZS50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgJGJvZHkub2ZmKCdjbGljay56Zi5kcm9wZG93bicpO1xuICAgICAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBkcm9wZG93biBwYW5lLCBhbmQgZmlyZXMgYSBidWJibGluZyBldmVudCB0byBjbG9zZSBvdGhlciBkcm9wZG93bnMuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJvcGRvd24jY2xvc2VtZVxuICAgKiBAZmlyZXMgRHJvcGRvd24jc2hvd1xuICAgKi9cbiAgb3BlbigpIHtcbiAgICAvLyB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHRvIGNsb3NlIG90aGVyIG9wZW4gZHJvcGRvd25zLCB0eXBpY2FsbHkgd2hlbiBkcm9wZG93biBpcyBvcGVuaW5nXG4gICAgICogQGV2ZW50IERyb3Bkb3duI2Nsb3NlbWVcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlbWUuemYuZHJvcGRvd24nLCB0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJykpO1xuICAgIHRoaXMuJGFuY2hvci5hZGRDbGFzcygnaG92ZXInKVxuICAgICAgICAuYXR0cih7J2FyaWEtZXhwYW5kZWQnOiB0cnVlfSk7XG4gICAgLy8gdGhpcy4kZWxlbWVudC8qLnNob3coKSovO1xuICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnaXMtb3BlbicpXG4gICAgICAgIC5hdHRyKHsnYXJpYS1oaWRkZW4nOiBmYWxzZX0pO1xuXG4gICAgaWYodGhpcy5vcHRpb25zLmF1dG9Gb2N1cyl7XG4gICAgICB2YXIgJGZvY3VzYWJsZSA9IEZvdW5kYXRpb24uS2V5Ym9hcmQuZmluZEZvY3VzYWJsZSh0aGlzLiRlbGVtZW50KTtcbiAgICAgIGlmKCRmb2N1c2FibGUubGVuZ3RoKXtcbiAgICAgICAgJGZvY3VzYWJsZS5lcSgwKS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2speyB0aGlzLl9hZGRCb2R5SGFuZGxlcigpOyB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRyYXBGb2N1cykge1xuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC50cmFwRm9jdXModGhpcy4kZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb25jZSB0aGUgZHJvcGRvd24gaXMgdmlzaWJsZS5cbiAgICAgKiBAZXZlbnQgRHJvcGRvd24jc2hvd1xuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2hvdy56Zi5kcm9wZG93bicsIFt0aGlzLiRlbGVtZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvcGVuIGRyb3Bkb3duIHBhbmUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAZmlyZXMgRHJvcGRvd24jaGlkZVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4nKVxuICAgICAgICAuYXR0cih7J2FyaWEtaGlkZGVuJzogdHJ1ZX0pO1xuXG4gICAgdGhpcy4kYW5jaG9yLnJlbW92ZUNsYXNzKCdob3ZlcicpXG4gICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuXG4gICAgaWYodGhpcy5jbGFzc0NoYW5nZWQpe1xuICAgICAgdmFyIGN1clBvc2l0aW9uQ2xhc3MgPSB0aGlzLmdldFBvc2l0aW9uQ2xhc3MoKTtcbiAgICAgIGlmKGN1clBvc2l0aW9uQ2xhc3Mpe1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGN1clBvc2l0aW9uQ2xhc3MpO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcylcbiAgICAgICAgICAvKi5oaWRlKCkqLy5jc3Moe2hlaWdodDogJycsIHdpZHRoOiAnJ30pO1xuICAgICAgdGhpcy5jbGFzc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY291bnRlciA9IDQ7XG4gICAgICB0aGlzLnVzZWRQb3NpdGlvbnMubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmlyZXMgb25jZSB0aGUgZHJvcGRvd24gaXMgbm8gbG9uZ2VyIHZpc2libGUuXG4gICAgICogQGV2ZW50IERyb3Bkb3duI2hpZGVcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2hpZGUuemYuZHJvcGRvd24nLCBbdGhpcy4kZWxlbWVudF0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy50cmFwRm9jdXMpIHtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVsZWFzZUZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBkcm9wZG93biBwYW5lJ3MgdmlzaWJpbGl0eS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaXMtb3BlbicpKXtcbiAgICAgIGlmKHRoaXMuJGFuY2hvci5kYXRhKCdob3ZlcicpKSByZXR1cm47XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGRyb3Bkb3duLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyJykuaGlkZSgpO1xuICAgIHRoaXMuJGFuY2hvci5vZmYoJy56Zi5kcm9wZG93bicpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbkRyb3Bkb3duLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQ2xhc3MgdGhhdCBkZXNpZ25hdGVzIGJvdW5kaW5nIGNvbnRhaW5lciBvZiBEcm9wZG93biAoZGVmYXVsdDogd2luZG93KVxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHs/c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBwYXJlbnRDbGFzczogbnVsbCxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDI1MFxuICAgKi9cbiAgaG92ZXJEZWxheTogMjUwLFxuICAvKipcbiAgICogQWxsb3cgc3VibWVudXMgdG8gb3BlbiBvbiBob3ZlciBldmVudHNcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhvdmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIERvbid0IGNsb3NlIGRyb3Bkb3duIHdoZW4gaG92ZXJpbmcgb3ZlciBkcm9wZG93biBwYW5lXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBob3ZlclBhbmU6IGZhbHNlLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSBkcm9wZG93biBwYW5lIGFuZCB0aGUgdHJpZ2dlcmluZyBlbGVtZW50IG9uIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgdk9mZnNldDogMSxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgZHJvcGRvd24gcGFuZSBhbmQgdGhlIHRyaWdnZXJpbmcgZWxlbWVudCBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGhPZmZzZXQ6IDEsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIGFkanVzdCBvcGVuIHBvc2l0aW9uLiBKUyB3aWxsIHRlc3QgYW5kIGZpbGwgdGhpcyBpbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgcG9zaXRpb25DbGFzczogJycsXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgcGx1Z2luIHRvIHRyYXAgZm9jdXMgdG8gdGhlIGRyb3Bkb3duIHBhbmUgaWYgb3BlbmVkIHdpdGgga2V5Ym9hcmQgY29tbWFuZHMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFwRm9jdXM6IGZhbHNlLFxuICAvKipcbiAgICogQWxsb3cgdGhlIHBsdWdpbiB0byBzZXQgZm9jdXMgdG8gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IHdpdGhpbiB0aGUgcGFuZSwgcmVnYXJkbGVzcyBvZiBtZXRob2Qgb2Ygb3BlbmluZy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBjbGljayBvbiB0aGUgYm9keSB0byBjbG9zZSB0aGUgZHJvcGRvd24uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IGZhbHNlXG59XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihEcm9wZG93biwgJ0Ryb3Bkb3duJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBEcm9wZG93bk1lbnUgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmRyb3Bkb3duLW1lbnVcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuYm94XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm5lc3RcbiAqL1xuXG5jbGFzcyBEcm9wZG93bk1lbnUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBEcm9wZG93bk1lbnUuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgRHJvcGRvd25NZW51I2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIG1ha2UgaW50byBhIGRyb3Bkb3duIG1lbnUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgRHJvcGRvd25NZW51LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICBGb3VuZGF0aW9uLk5lc3QuRmVhdGhlcih0aGlzLiRlbGVtZW50LCAnZHJvcGRvd24nKTtcbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdEcm9wZG93bk1lbnUnKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlZ2lzdGVyKCdEcm9wZG93bk1lbnUnLCB7XG4gICAgICAnRU5URVInOiAnb3BlbicsXG4gICAgICAnU1BBQ0UnOiAnb3BlbicsXG4gICAgICAnQVJST1dfUklHSFQnOiAnbmV4dCcsXG4gICAgICAnQVJST1dfVVAnOiAndXAnLFxuICAgICAgJ0FSUk9XX0RPV04nOiAnZG93bicsXG4gICAgICAnQVJST1dfTEVGVCc6ICdwcmV2aW91cycsXG4gICAgICAnRVNDQVBFJzogJ2Nsb3NlJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4sIGFuZCBjYWxscyBfcHJlcGFyZU1lbnVcbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgc3VicyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKTtcbiAgICB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKS5jaGlsZHJlbignLmlzLWRyb3Bkb3duLXN1Ym1lbnUnKS5hZGRDbGFzcygnZmlyc3Qtc3ViJyk7XG5cbiAgICB0aGlzLiRtZW51SXRlbXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tyb2xlPVwibWVudWl0ZW1cIl0nKTtcbiAgICB0aGlzLiR0YWJzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignW3JvbGU9XCJtZW51aXRlbVwiXScpO1xuICAgIHRoaXMuJHRhYnMuZmluZCgndWwuaXMtZHJvcGRvd24tc3VibWVudScpLmFkZENsYXNzKHRoaXMub3B0aW9ucy52ZXJ0aWNhbENsYXNzKTtcblxuICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5yaWdodENsYXNzKSB8fCB0aGlzLm9wdGlvbnMuYWxpZ25tZW50ID09PSAncmlnaHQnIHx8IEZvdW5kYXRpb24ucnRsKCkgfHwgdGhpcy4kZWxlbWVudC5wYXJlbnRzKCcudG9wLWJhci1yaWdodCcpLmlzKCcqJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5hbGlnbm1lbnQgPSAncmlnaHQnO1xuICAgICAgc3Vicy5hZGRDbGFzcygnb3BlbnMtbGVmdCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJzLmFkZENsYXNzKCdvcGVucy1yaWdodCcpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfTtcblxuICBfaXNWZXJ0aWNhbCgpIHtcbiAgICByZXR1cm4gdGhpcy4kdGFicy5jc3MoJ2Rpc3BsYXknKSA9PT0gJ2Jsb2NrJztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byBlbGVtZW50cyB3aXRoaW4gdGhlIG1lbnVcbiAgICogQHByaXZhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGhhc1RvdWNoID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICh0eXBlb2Ygd2luZG93Lm9udG91Y2hzdGFydCAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICBwYXJDbGFzcyA9ICdpcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCc7XG5cbiAgICAvLyB1c2VkIGZvciBvbkNsaWNrIGFuZCBpbiB0aGUga2V5Ym9hcmQgaGFuZGxlcnNcbiAgICB2YXIgaGFuZGxlQ2xpY2tGbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciAkZWxlbSA9ICQoZS50YXJnZXQpLnBhcmVudHNVbnRpbCgndWwnLCBgLiR7cGFyQ2xhc3N9YCksXG4gICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpLFxuICAgICAgICAgIGhhc0NsaWNrZWQgPSAkZWxlbS5hdHRyKCdkYXRhLWlzLWNsaWNrJykgPT09ICd0cnVlJyxcbiAgICAgICAgICAkc3ViID0gJGVsZW0uY2hpbGRyZW4oJy5pcy1kcm9wZG93bi1zdWJtZW51Jyk7XG5cbiAgICAgIGlmIChoYXNTdWIpIHtcbiAgICAgICAgaWYgKGhhc0NsaWNrZWQpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrIHx8ICghX3RoaXMub3B0aW9ucy5jbGlja09wZW4gJiYgIWhhc1RvdWNoKSB8fCAoX3RoaXMub3B0aW9ucy5mb3JjZUZvbGxvdyAmJiBoYXNUb3VjaCkpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgX3RoaXMuX2hpZGUoJGVsZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBfdGhpcy5fc2hvdygkc3ViKTtcbiAgICAgICAgICAkZWxlbS5hZGQoJGVsZW0ucGFyZW50c1VudGlsKF90aGlzLiRlbGVtZW50LCBgLiR7cGFyQ2xhc3N9YCkpLmF0dHIoJ2RhdGEtaXMtY2xpY2snLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrT3BlbiB8fCBoYXNUb3VjaCkge1xuICAgICAgdGhpcy4kbWVudUl0ZW1zLm9uKCdjbGljay56Zi5kcm9wZG93bm1lbnUgdG91Y2hzdGFydC56Zi5kcm9wZG93bm1lbnUnLCBoYW5kbGVDbGlja0ZuKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgTGVhZiBlbGVtZW50IENsaWNrc1xuICAgIGlmKF90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrSW5zaWRlKXtcbiAgICAgIHRoaXMuJG1lbnVJdGVtcy5vbignY2xpY2suemYuZHJvcGRvd25tZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpO1xuICAgICAgICBpZighaGFzU3ViKXtcbiAgICAgICAgICBfdGhpcy5faGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlSG92ZXIpIHtcbiAgICAgIHRoaXMuJG1lbnVJdGVtcy5vbignbW91c2VlbnRlci56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciAkZWxlbSA9ICQodGhpcyksXG4gICAgICAgICAgICBoYXNTdWIgPSAkZWxlbS5oYXNDbGFzcyhwYXJDbGFzcyk7XG5cbiAgICAgICAgaWYgKGhhc1N1Yikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCgkZWxlbS5kYXRhKCdfZGVsYXknKSk7XG4gICAgICAgICAgJGVsZW0uZGF0YSgnX2RlbGF5Jywgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF90aGlzLl9zaG93KCRlbGVtLmNoaWxkcmVuKCcuaXMtZHJvcGRvd24tc3VibWVudScpKTtcbiAgICAgICAgICB9LCBfdGhpcy5vcHRpb25zLmhvdmVyRGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgfSkub24oJ21vdXNlbGVhdmUuemYuZHJvcGRvd25tZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICAgaGFzU3ViID0gJGVsZW0uaGFzQ2xhc3MocGFyQ2xhc3MpO1xuICAgICAgICBpZiAoaGFzU3ViICYmIF90aGlzLm9wdGlvbnMuYXV0b2Nsb3NlKSB7XG4gICAgICAgICAgaWYgKCRlbGVtLmF0dHIoJ2RhdGEtaXMtY2xpY2snKSA9PT0gJ3RydWUnICYmIF90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KCRlbGVtLmRhdGEoJ19kZWxheScpKTtcbiAgICAgICAgICAkZWxlbS5kYXRhKCdfZGVsYXknLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMuX2hpZGUoJGVsZW0pO1xuICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuY2xvc2luZ1RpbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuJG1lbnVJdGVtcy5vbigna2V5ZG93bi56Zi5kcm9wZG93bm1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgJGVsZW1lbnQgPSAkKGUudGFyZ2V0KS5wYXJlbnRzVW50aWwoJ3VsJywgJ1tyb2xlPVwibWVudWl0ZW1cIl0nKSxcbiAgICAgICAgICBpc1RhYiA9IF90aGlzLiR0YWJzLmluZGV4KCRlbGVtZW50KSA+IC0xLFxuICAgICAgICAgICRlbGVtZW50cyA9IGlzVGFiID8gX3RoaXMuJHRhYnMgOiAkZWxlbWVudC5zaWJsaW5ncygnbGknKS5hZGQoJGVsZW1lbnQpLFxuICAgICAgICAgICRwcmV2RWxlbWVudCxcbiAgICAgICAgICAkbmV4dEVsZW1lbnQ7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgJHByZXZFbGVtZW50ID0gJGVsZW1lbnRzLmVxKGktMSk7XG4gICAgICAgICAgJG5leHRFbGVtZW50ID0gJGVsZW1lbnRzLmVxKGkrMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIG5leHRTaWJsaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghJGVsZW1lbnQuaXMoJzpsYXN0LWNoaWxkJykpIHtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQuY2hpbGRyZW4oJ2E6Zmlyc3QnKS5mb2N1cygpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgcHJldlNpYmxpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgJHByZXZFbGVtZW50LmNoaWxkcmVuKCdhOmZpcnN0JykuZm9jdXMoKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSwgb3BlblN1YiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHN1YiA9ICRlbGVtZW50LmNoaWxkcmVuKCd1bC5pcy1kcm9wZG93bi1zdWJtZW51Jyk7XG4gICAgICAgIGlmICgkc3ViLmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzLl9zaG93KCRzdWIpO1xuICAgICAgICAgICRlbGVtZW50LmZpbmQoJ2xpID4gYTpmaXJzdCcpLmZvY3VzKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgeyByZXR1cm47IH1cbiAgICAgIH0sIGNsb3NlU3ViID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaWYgKCRlbGVtZW50LmlzKCc6Zmlyc3QtY2hpbGQnKSkge1xuICAgICAgICB2YXIgY2xvc2UgPSAkZWxlbWVudC5wYXJlbnQoJ3VsJykucGFyZW50KCdsaScpO1xuICAgICAgICBjbG9zZS5jaGlsZHJlbignYTpmaXJzdCcpLmZvY3VzKCk7XG4gICAgICAgIF90aGlzLl9oaWRlKGNsb3NlKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvL31cbiAgICAgIH07XG4gICAgICB2YXIgZnVuY3Rpb25zID0ge1xuICAgICAgICBvcGVuOiBvcGVuU3ViLFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuX2hpZGUoX3RoaXMuJGVsZW1lbnQpO1xuICAgICAgICAgIF90aGlzLiRtZW51SXRlbXMuZmluZCgnYTpmaXJzdCcpLmZvY3VzKCk7IC8vIGZvY3VzIHRvIGZpcnN0IGVsZW1lbnRcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChpc1RhYikge1xuICAgICAgICBpZiAoX3RoaXMuX2lzVmVydGljYWwoKSkgeyAvLyB2ZXJ0aWNhbCBtZW51XG4gICAgICAgICAgaWYgKEZvdW5kYXRpb24ucnRsKCkpIHsgLy8gcmlnaHQgYWxpZ25lZFxuICAgICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICAgIGRvd246IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICB1cDogcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgIG5leHQ6IGNsb3NlU3ViLFxuICAgICAgICAgICAgICBwcmV2aW91czogb3BlblN1YlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHsgLy8gbGVmdCBhbGlnbmVkXG4gICAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgICAgZG93bjogbmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgIHVwOiBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgbmV4dDogb3BlblN1YixcbiAgICAgICAgICAgICAgcHJldmlvdXM6IGNsb3NlU3ViXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIGhvcml6b250YWwgbWVudVxuICAgICAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCgpKSB7IC8vIHJpZ2h0IGFsaWduZWRcbiAgICAgICAgICAgICQuZXh0ZW5kKGZ1bmN0aW9ucywge1xuICAgICAgICAgICAgICBuZXh0OiBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgcHJldmlvdXM6IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICBkb3duOiBvcGVuU3ViLFxuICAgICAgICAgICAgICB1cDogY2xvc2VTdWJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIGxlZnQgYWxpZ25lZFxuICAgICAgICAgICAgJC5leHRlbmQoZnVuY3Rpb25zLCB7XG4gICAgICAgICAgICAgIG5leHQ6IG5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICBwcmV2aW91czogcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgIGRvd246IG9wZW5TdWIsXG4gICAgICAgICAgICAgIHVwOiBjbG9zZVN1YlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyAvLyBub3QgdGFicyAtPiBvbmUgc3ViXG4gICAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCgpKSB7IC8vIHJpZ2h0IGFsaWduZWRcbiAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgIG5leHQ6IGNsb3NlU3ViLFxuICAgICAgICAgICAgcHJldmlvdXM6IG9wZW5TdWIsXG4gICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHVwOiBwcmV2U2libGluZ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgeyAvLyBsZWZ0IGFsaWduZWRcbiAgICAgICAgICAkLmV4dGVuZChmdW5jdGlvbnMsIHtcbiAgICAgICAgICAgIG5leHQ6IG9wZW5TdWIsXG4gICAgICAgICAgICBwcmV2aW91czogY2xvc2VTdWIsXG4gICAgICAgICAgICBkb3duOiBuZXh0U2libGluZyxcbiAgICAgICAgICAgIHVwOiBwcmV2U2libGluZ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnRHJvcGRvd25NZW51JywgZnVuY3Rpb25zKTtcblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgaGFuZGxlciB0byB0aGUgYm9keSB0byBjbG9zZSBhbnkgZHJvcGRvd25zIG9uIGEgY2xpY2suXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvZHlIYW5kbGVyKCkge1xuICAgIHZhciAkYm9keSA9ICQoZG9jdW1lbnQuYm9keSksXG4gICAgICAgIF90aGlzID0gdGhpcztcbiAgICAkYm9keS5vZmYoJ21vdXNldXAuemYuZHJvcGRvd25tZW51IHRvdWNoZW5kLnpmLmRyb3Bkb3dubWVudScpXG4gICAgICAgICAub24oJ21vdXNldXAuemYuZHJvcGRvd25tZW51IHRvdWNoZW5kLnpmLmRyb3Bkb3dubWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgdmFyICRsaW5rID0gX3RoaXMuJGVsZW1lbnQuZmluZChlLnRhcmdldCk7XG4gICAgICAgICAgIGlmICgkbGluay5sZW5ndGgpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAgX3RoaXMuX2hpZGUoKTtcbiAgICAgICAgICAgJGJvZHkub2ZmKCdtb3VzZXVwLnpmLmRyb3Bkb3dubWVudSB0b3VjaGVuZC56Zi5kcm9wZG93bm1lbnUnKTtcbiAgICAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZHJvcGRvd24gcGFuZSwgYW5kIGNoZWNrcyBmb3IgY29sbGlzaW9ucyBmaXJzdC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICRzdWIgLSB1bCBlbGVtZW50IHRoYXQgaXMgYSBzdWJtZW51IHRvIHNob3dcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBmaXJlcyBEcm9wZG93bk1lbnUjc2hvd1xuICAgKi9cbiAgX3Nob3coJHN1Yikge1xuICAgIHZhciBpZHggPSB0aGlzLiR0YWJzLmluZGV4KHRoaXMuJHRhYnMuZmlsdGVyKGZ1bmN0aW9uKGksIGVsKSB7XG4gICAgICByZXR1cm4gJChlbCkuZmluZCgkc3ViKS5sZW5ndGggPiAwO1xuICAgIH0pKTtcbiAgICB2YXIgJHNpYnMgPSAkc3ViLnBhcmVudCgnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKS5zaWJsaW5ncygnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKTtcbiAgICB0aGlzLl9oaWRlKCRzaWJzLCBpZHgpO1xuICAgICRzdWIuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpLmFkZENsYXNzKCdqcy1kcm9wZG93bi1hY3RpdmUnKVxuICAgICAgICAucGFyZW50KCdsaS5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCcpLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICB2YXIgY2xlYXIgPSBGb3VuZGF0aW9uLkJveC5JbU5vdFRvdWNoaW5nWW91KCRzdWIsIG51bGwsIHRydWUpO1xuICAgIGlmICghY2xlYXIpIHtcbiAgICAgIHZhciBvbGRDbGFzcyA9IHRoaXMub3B0aW9ucy5hbGlnbm1lbnQgPT09ICdsZWZ0JyA/ICctcmlnaHQnIDogJy1sZWZ0JyxcbiAgICAgICAgICAkcGFyZW50TGkgPSAkc3ViLnBhcmVudCgnLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50Jyk7XG4gICAgICAkcGFyZW50TGkucmVtb3ZlQ2xhc3MoYG9wZW5zJHtvbGRDbGFzc31gKS5hZGRDbGFzcyhgb3BlbnMtJHt0aGlzLm9wdGlvbnMuYWxpZ25tZW50fWApO1xuICAgICAgY2xlYXIgPSBGb3VuZGF0aW9uLkJveC5JbU5vdFRvdWNoaW5nWW91KCRzdWIsIG51bGwsIHRydWUpO1xuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICAkcGFyZW50TGkucmVtb3ZlQ2xhc3MoYG9wZW5zLSR7dGhpcy5vcHRpb25zLmFsaWdubWVudH1gKS5hZGRDbGFzcygnb3BlbnMtaW5uZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgICRzdWIuY3NzKCd2aXNpYmlsaXR5JywgJycpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7IHRoaXMuX2FkZEJvZHlIYW5kbGVyKCk7IH1cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBuZXcgZHJvcGRvd24gcGFuZSBpcyB2aXNpYmxlLlxuICAgICAqIEBldmVudCBEcm9wZG93bk1lbnUjc2hvd1xuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2hvdy56Zi5kcm9wZG93bm1lbnUnLCBbJHN1Yl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIGEgc2luZ2xlLCBjdXJyZW50bHkgb3BlbiBkcm9wZG93biBwYW5lLCBpZiBwYXNzZWQgYSBwYXJhbWV0ZXIsIG90aGVyd2lzZSwgaGlkZXMgZXZlcnl0aGluZy5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxlbSAtIGVsZW1lbnQgd2l0aCBhIHN1Ym1lbnUgdG8gaGlkZVxuICAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gaW5kZXggb2YgdGhlICR0YWJzIGNvbGxlY3Rpb24gdG8gaGlkZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hpZGUoJGVsZW0sIGlkeCkge1xuICAgIHZhciAkdG9DbG9zZTtcbiAgICBpZiAoJGVsZW0gJiYgJGVsZW0ubGVuZ3RoKSB7XG4gICAgICAkdG9DbG9zZSA9ICRlbGVtO1xuICAgIH0gZWxzZSBpZiAoaWR4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICR0b0Nsb3NlID0gdGhpcy4kdGFicy5ub3QoZnVuY3Rpb24oaSwgZWwpIHtcbiAgICAgICAgcmV0dXJuIGkgPT09IGlkeDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICR0b0Nsb3NlID0gdGhpcy4kZWxlbWVudDtcbiAgICB9XG4gICAgdmFyIHNvbWV0aGluZ1RvQ2xvc2UgPSAkdG9DbG9zZS5oYXNDbGFzcygnaXMtYWN0aXZlJykgfHwgJHRvQ2xvc2UuZmluZCgnLmlzLWFjdGl2ZScpLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoc29tZXRoaW5nVG9DbG9zZSkge1xuICAgICAgJHRvQ2xvc2UuZmluZCgnbGkuaXMtYWN0aXZlJykuYWRkKCR0b0Nsb3NlKS5hdHRyKHtcbiAgICAgICAgJ2RhdGEtaXMtY2xpY2snOiBmYWxzZVxuICAgICAgfSkucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuXG4gICAgICAkdG9DbG9zZS5maW5kKCd1bC5qcy1kcm9wZG93bi1hY3RpdmUnKS5yZW1vdmVDbGFzcygnanMtZHJvcGRvd24tYWN0aXZlJyk7XG5cbiAgICAgIGlmICh0aGlzLmNoYW5nZWQgfHwgJHRvQ2xvc2UuZmluZCgnb3BlbnMtaW5uZXInKS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG9sZENsYXNzID0gdGhpcy5vcHRpb25zLmFsaWdubWVudCA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgJHRvQ2xvc2UuZmluZCgnbGkuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQnKS5hZGQoJHRvQ2xvc2UpXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKGBvcGVucy1pbm5lciBvcGVucy0ke3RoaXMub3B0aW9ucy5hbGlnbm1lbnR9YClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYG9wZW5zLSR7b2xkQ2xhc3N9YCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSBvcGVuIG1lbnVzIGFyZSBjbG9zZWQuXG4gICAgICAgKiBAZXZlbnQgRHJvcGRvd25NZW51I2hpZGVcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdoaWRlLnpmLmRyb3Bkb3dubWVudScsIFskdG9DbG9zZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kbWVudUl0ZW1zLm9mZignLnpmLmRyb3Bkb3dubWVudScpLnJlbW92ZUF0dHIoJ2RhdGEtaXMtY2xpY2snKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2lzLXJpZ2h0LWFycm93IGlzLWxlZnQtYXJyb3cgaXMtZG93bi1hcnJvdyBvcGVucy1yaWdodCBvcGVucy1sZWZ0IG9wZW5zLWlubmVyJyk7XG4gICAgJChkb2N1bWVudC5ib2R5KS5vZmYoJy56Zi5kcm9wZG93bm1lbnUnKTtcbiAgICBGb3VuZGF0aW9uLk5lc3QuQnVybih0aGlzLiRlbGVtZW50LCAnZHJvcGRvd24nKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNldHRpbmdzIGZvciBwbHVnaW5cbiAqL1xuRHJvcGRvd25NZW51LmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogRGlzYWxsb3dzIGhvdmVyIGV2ZW50cyBmcm9tIG9wZW5pbmcgc3VibWVudXNcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVIb3ZlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvdyBhIHN1Ym1lbnUgdG8gYXV0b21hdGljYWxseSBjbG9zZSBvbiBhIG1vdXNlbGVhdmUgZXZlbnQsIGlmIG5vdCBjbGlja2VkIG9wZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9jbG9zZTogdHJ1ZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IG9wZW5pbmcgYSBzdWJtZW51IG9uIGhvdmVyIGV2ZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICBob3ZlckRlbGF5OiA1MCxcbiAgLyoqXG4gICAqIEFsbG93IGEgc3VibWVudSB0byBvcGVuL3JlbWFpbiBvcGVuIG9uIHBhcmVudCBjbGljayBldmVudC4gQWxsb3dzIGN1cnNvciB0byBtb3ZlIGF3YXkgZnJvbSBtZW51LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xpY2tPcGVuOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IGNsb3NpbmcgYSBzdWJtZW51IG9uIGEgbW91c2VsZWF2ZSBldmVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICovXG5cbiAgY2xvc2luZ1RpbWU6IDUwMCxcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHdoYXQgZGlyZWN0aW9uIHRoZSBzdWJtZW51cyBzaG91bGQgb3Blbi4gSGFuZGxlZCBieSBKUy4gQ2FuIGJlIGAnbGVmdCdgIG9yIGAncmlnaHQnYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICovXG4gIGFsaWdubWVudDogJ2xlZnQnLFxuICAvKipcbiAgICogQWxsb3cgY2xpY2tzIG9uIHRoZSBib2R5IHRvIGNsb3NlIGFueSBvcGVuIHN1Ym1lbnVzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gIC8qKlxuICAgKiBBbGxvdyBjbGlja3Mgb24gbGVhZiBhbmNob3IgbGlua3MgdG8gY2xvc2UgYW55IG9wZW4gc3VibWVudXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGNsb3NlT25DbGlja0luc2lkZTogdHJ1ZSxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdmVydGljYWwgb3JpZW50ZWQgbWVudXMsIEZvdW5kYXRpb24gZGVmYXVsdCBpcyBgdmVydGljYWxgLiBVcGRhdGUgdGhpcyBpZiB1c2luZyB5b3VyIG93biBjbGFzcy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAndmVydGljYWwnXG4gICAqL1xuICB2ZXJ0aWNhbENsYXNzOiAndmVydGljYWwnLFxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byByaWdodC1zaWRlIG9yaWVudGVkIG1lbnVzLCBGb3VuZGF0aW9uIGRlZmF1bHQgaXMgYGFsaWduLXJpZ2h0YC4gVXBkYXRlIHRoaXMgaWYgdXNpbmcgeW91ciBvd24gY2xhc3MuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2FsaWduLXJpZ2h0J1xuICAgKi9cbiAgcmlnaHRDbGFzczogJ2FsaWduLXJpZ2h0JyxcbiAgLyoqXG4gICAqIEJvb2xlYW4gdG8gZm9yY2Ugb3ZlcmlkZSB0aGUgY2xpY2tpbmcgb2YgbGlua3MgdG8gcGVyZm9ybSBkZWZhdWx0IGFjdGlvbiwgb24gc2Vjb25kIHRvdWNoIGV2ZW50IGZvciBtb2JpbGUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGZvcmNlRm9sbG93OiB0cnVlXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oRHJvcGRvd25NZW51LCAnRHJvcGRvd25NZW51Jyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBFcXVhbGl6ZXIgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmVxdWFsaXplclxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRpbWVyQW5kSW1hZ2VMb2FkZXIgaWYgZXF1YWxpemVyIGNvbnRhaW5zIGltYWdlc1xuICovXG5cbmNsYXNzIEVxdWFsaXplciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEVxdWFsaXplci5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjaW5pdFxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYWRkIHRoZSB0cmlnZ2VyIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKXtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgID0gJC5leHRlbmQoe30sIEVxdWFsaXplci5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnRXF1YWxpemVyJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEVxdWFsaXplciBwbHVnaW4gYW5kIGNhbGxzIGZ1bmN0aW9ucyB0byBnZXQgZXF1YWxpemVyIGZ1bmN0aW9uaW5nIG9uIGxvYWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgZXFJZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1lcXVhbGl6ZXInKSB8fCAnJztcbiAgICB2YXIgJHdhdGNoZWQgPSB0aGlzLiRlbGVtZW50LmZpbmQoYFtkYXRhLWVxdWFsaXplci13YXRjaD1cIiR7ZXFJZH1cIl1gKTtcblxuICAgIHRoaXMuJHdhdGNoZWQgPSAkd2F0Y2hlZC5sZW5ndGggPyAkd2F0Y2hlZCA6IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtZXF1YWxpemVyLXdhdGNoXScpO1xuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1yZXNpemUnLCAoZXFJZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdlcScpKSk7XG5cdHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1tdXRhdGUnLCAoZXFJZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdlcScpKSk7XG5cbiAgICB0aGlzLmhhc05lc3RlZCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtZXF1YWxpemVyXScpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5pc05lc3RlZCA9IHRoaXMuJGVsZW1lbnQucGFyZW50c1VudGlsKGRvY3VtZW50LmJvZHksICdbZGF0YS1lcXVhbGl6ZXJdJykubGVuZ3RoID4gMDtcbiAgICB0aGlzLmlzT24gPSBmYWxzZTtcbiAgICB0aGlzLl9iaW5kSGFuZGxlciA9IHtcbiAgICAgIG9uUmVzaXplTWVCb3VuZDogdGhpcy5fb25SZXNpemVNZS5iaW5kKHRoaXMpLFxuICAgICAgb25Qb3N0RXF1YWxpemVkQm91bmQ6IHRoaXMuX29uUG9zdEVxdWFsaXplZC5iaW5kKHRoaXMpXG4gICAgfTtcblxuICAgIHZhciBpbWdzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbWcnKTtcbiAgICB2YXIgdG9vU21hbGw7XG4gICAgaWYodGhpcy5vcHRpb25zLmVxdWFsaXplT24pe1xuICAgICAgdG9vU21hbGwgPSB0aGlzLl9jaGVja01RKCk7XG4gICAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIHRoaXMuX2NoZWNrTVEuYmluZCh0aGlzKSk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLl9ldmVudHMoKTtcbiAgICB9XG4gICAgaWYoKHRvb1NtYWxsICE9PSB1bmRlZmluZWQgJiYgdG9vU21hbGwgPT09IGZhbHNlKSB8fCB0b29TbWFsbCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgIGlmKGltZ3MubGVuZ3RoKXtcbiAgICAgICAgRm91bmRhdGlvbi5vbkltYWdlc0xvYWRlZChpbWdzLCB0aGlzLl9yZWZsb3cuYmluZCh0aGlzKSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5fcmVmbG93KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGlmIHRoZSBicmVha3BvaW50IGlzIHRvbyBzbWFsbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXVzZUV2ZW50cygpIHtcbiAgICB0aGlzLmlzT24gPSBmYWxzZTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZih7XG4gICAgICAnLnpmLmVxdWFsaXplcic6IHRoaXMuX2JpbmRIYW5kbGVyLm9uUG9zdEVxdWFsaXplZEJvdW5kLFxuICAgICAgJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInOiB0aGlzLl9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmQsXG5cdCAgJ211dGF0ZW1lLnpmLnRyaWdnZXInOiB0aGlzLl9iaW5kSGFuZGxlci5vblJlc2l6ZU1lQm91bmRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB0byBoYW5kbGUgJGVsZW1lbnRzIHJlc2l6ZW1lLnpmLnRyaWdnZXIsIHdpdGggYm91bmQgdGhpcyBvbiBfYmluZEhhbmRsZXIub25SZXNpemVNZUJvdW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25SZXNpemVNZShlKSB7XG4gICAgdGhpcy5fcmVmbG93KCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdG8gaGFuZGxlICRlbGVtZW50cyBwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplciwgd2l0aCBib3VuZCB0aGlzIG9uIF9iaW5kSGFuZGxlci5vblBvc3RFcXVhbGl6ZWRCb3VuZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUG9zdEVxdWFsaXplZChlKSB7XG4gICAgaWYoZS50YXJnZXQgIT09IHRoaXMuJGVsZW1lbnRbMF0peyB0aGlzLl9yZWZsb3coKTsgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgRXF1YWxpemVyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuX3BhdXNlRXZlbnRzKCk7XG4gICAgaWYodGhpcy5oYXNOZXN0ZWQpe1xuICAgICAgdGhpcy4kZWxlbWVudC5vbigncG9zdGVxdWFsaXplZC56Zi5lcXVhbGl6ZXInLCB0aGlzLl9iaW5kSGFuZGxlci5vblBvc3RFcXVhbGl6ZWRCb3VuZCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdyZXNpemVtZS56Zi50cmlnZ2VyJywgdGhpcy5fYmluZEhhbmRsZXIub25SZXNpemVNZUJvdW5kKTtcblx0ICB0aGlzLiRlbGVtZW50Lm9uKCdtdXRhdGVtZS56Zi50cmlnZ2VyJywgdGhpcy5fYmluZEhhbmRsZXIub25SZXNpemVNZUJvdW5kKTtcbiAgICB9XG4gICAgdGhpcy5pc09uID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCB0byB0aGUgbWluaW11bSByZXF1aXJlZCBzaXplLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrTVEoKSB7XG4gICAgdmFyIHRvb1NtYWxsID0gIUZvdW5kYXRpb24uTWVkaWFRdWVyeS5pcyh0aGlzLm9wdGlvbnMuZXF1YWxpemVPbik7XG4gICAgaWYodG9vU21hbGwpe1xuICAgICAgaWYodGhpcy5pc09uKXtcbiAgICAgICAgdGhpcy5fcGF1c2VFdmVudHMoKTtcbiAgICAgICAgdGhpcy4kd2F0Y2hlZC5jc3MoJ2hlaWdodCcsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZighdGhpcy5pc09uKXtcbiAgICAgICAgdGhpcy5fZXZlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b29TbWFsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG5vb3AgdmVyc2lvbiBmb3IgdGhlIHBsdWdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2tpbGxzd2l0Y2goKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIEVxdWFsaXplciB1cG9uIERPTSBjaGFuZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZWZsb3coKSB7XG4gICAgaWYoIXRoaXMub3B0aW9ucy5lcXVhbGl6ZU9uU3RhY2spe1xuICAgICAgaWYodGhpcy5faXNTdGFja2VkKCkpe1xuICAgICAgICB0aGlzLiR3YXRjaGVkLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmVxdWFsaXplQnlSb3cpIHtcbiAgICAgIHRoaXMuZ2V0SGVpZ2h0c0J5Um93KHRoaXMuYXBwbHlIZWlnaHRCeVJvdy5iaW5kKHRoaXMpKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuZ2V0SGVpZ2h0cyh0aGlzLmFwcGx5SGVpZ2h0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBkZXRlcm1pbmVzIGlmIHRoZSBmaXJzdCAyIGVsZW1lbnRzIGFyZSAqTk9UKiBzdGFja2VkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzU3RhY2tlZCgpIHtcbiAgICBpZiAoIXRoaXMuJHdhdGNoZWRbMF0gfHwgIXRoaXMuJHdhdGNoZWRbMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4kd2F0Y2hlZFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgIT09IHRoaXMuJHdhdGNoZWRbMV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBvdXRlciBoZWlnaHRzIG9mIGNoaWxkcmVuIGNvbnRhaW5lZCB3aXRoaW4gYW4gRXF1YWxpemVyIHBhcmVudCBhbmQgcmV0dXJucyB0aGVtIGluIGFuIGFycmF5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gQSBub24tb3B0aW9uYWwgY2FsbGJhY2sgdG8gcmV0dXJuIHRoZSBoZWlnaHRzIGFycmF5IHRvLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGhlaWdodHMgLSBBbiBhcnJheSBvZiBoZWlnaHRzIG9mIGNoaWxkcmVuIHdpdGhpbiBFcXVhbGl6ZXIgY29udGFpbmVyXG4gICAqL1xuICBnZXRIZWlnaHRzKGNiKSB7XG4gICAgdmFyIGhlaWdodHMgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgaGVpZ2h0cy5wdXNoKHRoaXMuJHdhdGNoZWRbaV0ub2Zmc2V0SGVpZ2h0KTtcbiAgICB9XG4gICAgY2IoaGVpZ2h0cyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG91dGVyIGhlaWdodHMgb2YgY2hpbGRyZW4gY29udGFpbmVkIHdpdGhpbiBhbiBFcXVhbGl6ZXIgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYW4gYXJyYXlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBBIG5vbi1vcHRpb25hbCBjYWxsYmFjayB0byByZXR1cm4gdGhlIGhlaWdodHMgYXJyYXkgdG8uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gZ3JvdXBzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lciBncm91cGVkIGJ5IHJvdyB3aXRoIGVsZW1lbnQsaGVpZ2h0IGFuZCBtYXggYXMgbGFzdCBjaGlsZFxuICAgKi9cbiAgZ2V0SGVpZ2h0c0J5Um93KGNiKSB7XG4gICAgdmFyIGxhc3RFbFRvcE9mZnNldCA9ICh0aGlzLiR3YXRjaGVkLmxlbmd0aCA/IHRoaXMuJHdhdGNoZWQuZmlyc3QoKS5vZmZzZXQoKS50b3AgOiAwKSxcbiAgICAgICAgZ3JvdXBzID0gW10sXG4gICAgICAgIGdyb3VwID0gMDtcbiAgICAvL2dyb3VwIGJ5IFJvd1xuICAgIGdyb3Vwc1tncm91cF0gPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSB0aGlzLiR3YXRjaGVkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgIHRoaXMuJHdhdGNoZWRbaV0uc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgLy9tYXliZSBjb3VsZCB1c2UgdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRUb3BcbiAgICAgIHZhciBlbE9mZnNldFRvcCA9ICQodGhpcy4kd2F0Y2hlZFtpXSkub2Zmc2V0KCkudG9wO1xuICAgICAgaWYgKGVsT2Zmc2V0VG9wIT1sYXN0RWxUb3BPZmZzZXQpIHtcbiAgICAgICAgZ3JvdXArKztcbiAgICAgICAgZ3JvdXBzW2dyb3VwXSA9IFtdO1xuICAgICAgICBsYXN0RWxUb3BPZmZzZXQ9ZWxPZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBncm91cHNbZ3JvdXBdLnB1c2goW3RoaXMuJHdhdGNoZWRbaV0sdGhpcy4kd2F0Y2hlZFtpXS5vZmZzZXRIZWlnaHRdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMCwgbG4gPSBncm91cHMubGVuZ3RoOyBqIDwgbG47IGorKykge1xuICAgICAgdmFyIGhlaWdodHMgPSAkKGdyb3Vwc1tqXSkubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzWzFdOyB9KS5nZXQoKTtcbiAgICAgIHZhciBtYXggICAgICAgICA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGhlaWdodHMpO1xuICAgICAgZ3JvdXBzW2pdLnB1c2gobWF4KTtcbiAgICB9XG4gICAgY2IoZ3JvdXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IG9mIGVhY2ggY2hpbGQgaW4gYW4gRXF1YWxpemVyIHBhcmVudCB0byBtYXRjaCB0aGUgdGFsbGVzdFxuICAgKiBAcGFyYW0ge2FycmF5fSBoZWlnaHRzIC0gQW4gYXJyYXkgb2YgaGVpZ2h0cyBvZiBjaGlsZHJlbiB3aXRoaW4gRXF1YWxpemVyIGNvbnRhaW5lclxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3ByZWVxdWFsaXplZFxuICAgKiBAZmlyZXMgRXF1YWxpemVyI3Bvc3RlcXVhbGl6ZWRcbiAgICovXG4gIGFwcGx5SGVpZ2h0KGhlaWdodHMpIHtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgaGVpZ2h0cyk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBoZWlnaHRzIGFyZSBhcHBsaWVkXG4gICAgICogQGV2ZW50IEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcblxuICAgIHRoaXMuJHdhdGNoZWQuY3NzKCdoZWlnaHQnLCBtYXgpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBoYXZlIGJlZW4gYXBwbGllZFxuICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgICAqL1xuICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWQuemYuZXF1YWxpemVyJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgQ1NTIGhlaWdodCBwcm9wZXJ0eSBvZiBlYWNoIGNoaWxkIGluIGFuIEVxdWFsaXplciBwYXJlbnQgdG8gbWF0Y2ggdGhlIHRhbGxlc3QgYnkgcm93XG4gICAqIEBwYXJhbSB7YXJyYXl9IGdyb3VwcyAtIEFuIGFycmF5IG9mIGhlaWdodHMgb2YgY2hpbGRyZW4gd2l0aGluIEVxdWFsaXplciBjb250YWluZXIgZ3JvdXBlZCBieSByb3cgd2l0aCBlbGVtZW50LGhlaWdodCBhbmQgbWF4IGFzIGxhc3QgY2hpbGRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRcbiAgICogQGZpcmVzIEVxdWFsaXplciNwcmVlcXVhbGl6ZWRyb3dcbiAgICogQGZpcmVzIEVxdWFsaXplciNwb3N0ZXF1YWxpemVkcm93XG4gICAqIEBmaXJlcyBFcXVhbGl6ZXIjcG9zdGVxdWFsaXplZFxuICAgKi9cbiAgYXBwbHlIZWlnaHRCeVJvdyhncm91cHMpIHtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZC56Zi5lcXVhbGl6ZXInKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGxlbiA7IGkrKykge1xuICAgICAgdmFyIGdyb3Vwc0lMZW5ndGggPSBncm91cHNbaV0ubGVuZ3RoLFxuICAgICAgICAgIG1heCA9IGdyb3Vwc1tpXVtncm91cHNJTGVuZ3RoIC0gMV07XG4gICAgICBpZiAoZ3JvdXBzSUxlbmd0aDw9Mikge1xuICAgICAgICAkKGdyb3Vwc1tpXVswXVswXSkuY3NzKHsnaGVpZ2h0JzonYXV0byd9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIGhlaWdodHMgcGVyIHJvdyBhcmUgYXBwbGllZFxuICAgICAgICAqIEBldmVudCBFcXVhbGl6ZXIjcHJlZXF1YWxpemVkcm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3ByZWVxdWFsaXplZHJvdy56Zi5lcXVhbGl6ZXInKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBsZW5KID0gKGdyb3Vwc0lMZW5ndGgtMSk7IGogPCBsZW5KIDsgaisrKSB7XG4gICAgICAgICQoZ3JvdXBzW2ldW2pdWzBdKS5jc3MoeydoZWlnaHQnOm1heH0pO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgICogRmlyZXMgd2hlbiB0aGUgaGVpZ2h0cyBwZXIgcm93IGhhdmUgYmVlbiBhcHBsaWVkXG4gICAgICAgICogQGV2ZW50IEVxdWFsaXplciNwb3N0ZXF1YWxpemVkcm93XG4gICAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Bvc3RlcXVhbGl6ZWRyb3cuemYuZXF1YWxpemVyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGhlaWdodHMgaGF2ZSBiZWVuIGFwcGxpZWRcbiAgICAgKi9cbiAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdwb3N0ZXF1YWxpemVkLnpmLmVxdWFsaXplcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIEVxdWFsaXplci5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3BhdXNlRXZlbnRzKCk7XG4gICAgdGhpcy4kd2F0Y2hlZC5jc3MoJ2hlaWdodCcsICdhdXRvJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNldHRpbmdzIGZvciBwbHVnaW5cbiAqL1xuRXF1YWxpemVyLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogRW5hYmxlIGhlaWdodCBlcXVhbGl6YXRpb24gd2hlbiBzdGFja2VkIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVxdWFsaXplT25TdGFjazogZmFsc2UsXG4gIC8qKlxuICAgKiBFbmFibGUgaGVpZ2h0IGVxdWFsaXphdGlvbiByb3cgYnkgcm93LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXF1YWxpemVCeVJvdzogZmFsc2UsXG4gIC8qKlxuICAgKiBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgc2l6ZSB0aGUgcGx1Z2luIHNob3VsZCBlcXVhbGl6ZSBoZWlnaHRzIG9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBlcXVhbGl6ZU9uOiAnJ1xufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKEVxdWFsaXplciwgJ0VxdWFsaXplcicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogSW50ZXJjaGFuZ2UgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLmludGVyY2hhbmdlXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlclxuICovXG5cbmNsYXNzIEludGVyY2hhbmdlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgSW50ZXJjaGFuZ2UuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgSW50ZXJjaGFuZ2UjaW5pdFxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYWRkIHRoZSB0cmlnZ2VyIHRvLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEludGVyY2hhbmdlLmRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgdGhpcy5jdXJyZW50UGF0aCA9ICcnO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnSW50ZXJjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgSW50ZXJjaGFuZ2UgcGx1Z2luIGFuZCBjYWxscyBmdW5jdGlvbnMgdG8gZ2V0IGludGVyY2hhbmdlIGZ1bmN0aW9uaW5nIG9uIGxvYWQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5fYWRkQnJlYWtwb2ludHMoKTtcbiAgICB0aGlzLl9nZW5lcmF0ZVJ1bGVzKCk7XG4gICAgdGhpcy5fcmVmbG93KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciBJbnRlcmNoYW5nZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgICQod2luZG93KS5vbigncmVzaXplLnpmLmludGVyY2hhbmdlJywgRm91bmRhdGlvbi51dGlsLnRocm90dGxlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZmxvdygpO1xuICAgIH0sIDUwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byB1cGRhdGUgSW50ZXJjaGFuZ2UgdXBvbiBET00gY2hhbmdlXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlZmxvdygpIHtcbiAgICB2YXIgbWF0Y2g7XG5cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBydWxlLCBidXQgb25seSBzYXZlIHRoZSBsYXN0IG1hdGNoXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLnJ1bGVzKSB7XG4gICAgICBpZih0aGlzLnJ1bGVzLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIHZhciBydWxlID0gdGhpcy5ydWxlc1tpXTtcbiAgICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKHJ1bGUucXVlcnkpLm1hdGNoZXMpIHtcbiAgICAgICAgICBtYXRjaCA9IHJ1bGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHRoaXMucmVwbGFjZShtYXRjaC5wYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgRm91bmRhdGlvbiBicmVha3BvaW50cyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVMgb2JqZWN0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRCcmVha3BvaW50cygpIHtcbiAgICBmb3IgKHZhciBpIGluIEZvdW5kYXRpb24uTWVkaWFRdWVyeS5xdWVyaWVzKSB7XG4gICAgICBpZiAoRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LnF1ZXJpZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LnF1ZXJpZXNbaV07XG4gICAgICAgIEludGVyY2hhbmdlLlNQRUNJQUxfUVVFUklFU1txdWVyeS5uYW1lXSA9IHF1ZXJ5LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIEludGVyY2hhbmdlIGVsZW1lbnQgZm9yIHRoZSBwcm92aWRlZCBtZWRpYSBxdWVyeSArIGNvbnRlbnQgcGFpcmluZ3NcbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0aGF0IGlzIGFuIEludGVyY2hhbmdlIGluc3RhbmNlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gc2NlbmFyaW9zIC0gQXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgJ21xJyBhbmQgJ3BhdGgnIGtleXMgd2l0aCBjb3JyZXNwb25kaW5nIGtleXNcbiAgICovXG4gIF9nZW5lcmF0ZVJ1bGVzKGVsZW1lbnQpIHtcbiAgICB2YXIgcnVsZXNMaXN0ID0gW107XG4gICAgdmFyIHJ1bGVzO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ydWxlcykge1xuICAgICAgcnVsZXMgPSB0aGlzLm9wdGlvbnMucnVsZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcnVsZXMgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ2ludGVyY2hhbmdlJyk7XG4gICAgfVxuICAgIFxuICAgIHJ1bGVzID0gIHR5cGVvZiBydWxlcyA9PT0gJ3N0cmluZycgPyBydWxlcy5tYXRjaCgvXFxbLio/XFxdL2cpIDogcnVsZXM7XG5cbiAgICBmb3IgKHZhciBpIGluIHJ1bGVzKSB7XG4gICAgICBpZihydWxlcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldLnNsaWNlKDEsIC0xKS5zcGxpdCgnLCAnKTtcbiAgICAgICAgdmFyIHBhdGggPSBydWxlLnNsaWNlKDAsIC0xKS5qb2luKCcnKTtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gcnVsZVtydWxlLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVNbcXVlcnldKSB7XG4gICAgICAgICAgcXVlcnkgPSBJbnRlcmNoYW5nZS5TUEVDSUFMX1FVRVJJRVNbcXVlcnldO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXNMaXN0LnB1c2goe1xuICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0xpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBgc3JjYCBwcm9wZXJ0eSBvZiBhbiBpbWFnZSwgb3IgY2hhbmdlIHRoZSBIVE1MIG9mIGEgY29udGFpbmVyLCB0byB0aGUgc3BlY2lmaWVkIHBhdGguXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGltYWdlIG9yIEhUTUwgcGFydGlhbC5cbiAgICogQGZpcmVzIEludGVyY2hhbmdlI3JlcGxhY2VkXG4gICAqL1xuICByZXBsYWNlKHBhdGgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aCA9PT0gcGF0aCkgcmV0dXJuO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgdHJpZ2dlciA9ICdyZXBsYWNlZC56Zi5pbnRlcmNoYW5nZSc7XG5cbiAgICAvLyBSZXBsYWNpbmcgaW1hZ2VzXG4gICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0ubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3NyYycsIHBhdGgpLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLmN1cnJlbnRQYXRoID0gcGF0aDtcbiAgICAgIH0pXG4gICAgICAudHJpZ2dlcih0cmlnZ2VyKTtcbiAgICB9XG4gICAgLy8gUmVwbGFjaW5nIGJhY2tncm91bmQgaW1hZ2VzXG4gICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuKGdpZnxqcGd8anBlZ3xwbmd8c3ZnfHRpZmYpKFs/I10uKik/L2kpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7ICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnK3BhdGgrJyknIH0pXG4gICAgICAgICAgLnRyaWdnZXIodHJpZ2dlcik7XG4gICAgfVxuICAgIC8vIFJlcGxhY2luZyBIVE1MXG4gICAgZWxzZSB7XG4gICAgICAkLmdldChwYXRoLCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICBfdGhpcy4kZWxlbWVudC5odG1sKHJlc3BvbnNlKVxuICAgICAgICAgICAgIC50cmlnZ2VyKHRyaWdnZXIpO1xuICAgICAgICAkKHJlc3BvbnNlKS5mb3VuZGF0aW9uKCk7XG4gICAgICAgIF90aGlzLmN1cnJlbnRQYXRoID0gcGF0aDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gY29udGVudCBpbiBhbiBJbnRlcmNoYW5nZSBlbGVtZW50IGlzIGRvbmUgYmVpbmcgbG9hZGVkLlxuICAgICAqIEBldmVudCBJbnRlcmNoYW5nZSNyZXBsYWNlZFxuICAgICAqL1xuICAgIC8vIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncmVwbGFjZWQuemYuaW50ZXJjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyBhbiBpbnN0YW5jZSBvZiBpbnRlcmNoYW5nZS5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIC8vVE9ETyB0aGlzLlxuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzZXR0aW5ncyBmb3IgcGx1Z2luXG4gKi9cbkludGVyY2hhbmdlLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogUnVsZXMgdG8gYmUgYXBwbGllZCB0byBJbnRlcmNoYW5nZSBlbGVtZW50cy4gU2V0IHdpdGggdGhlIGBkYXRhLWludGVyY2hhbmdlYCBhcnJheSBub3RhdGlvbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7P2FycmF5fVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBydWxlczogbnVsbFxufTtcblxuSW50ZXJjaGFuZ2UuU1BFQ0lBTF9RVUVSSUVTID0ge1xuICAnbGFuZHNjYXBlJzogJ3NjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJyxcbiAgJ3BvcnRyYWl0JzogJ3NjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hJzogJ29ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgb25seSBzY3JlZW4gYW5kIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCBvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksIG9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDE5MmRwaSksIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDJkcHB4KSdcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihJbnRlcmNoYW5nZSwgJ0ludGVyY2hhbmdlJyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBNYWdlbGxhbiBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24ubWFnZWxsYW5cbiAqL1xuXG5jbGFzcyBNYWdlbGxhbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIE1hZ2VsbGFuLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIE1hZ2VsbGFuI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGFkZCB0aGUgdHJpZ2dlciB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgTWFnZWxsYW4uZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLmNhbGNQb2ludHMoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ01hZ2VsbGFuJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1hZ2VsbGFuIHBsdWdpbiBhbmQgY2FsbHMgZnVuY3Rpb25zIHRvIGdldCBlcXVhbGl6ZXIgZnVuY3Rpb25pbmcgb24gbG9hZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnRbMF0uaWQgfHwgRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAnbWFnZWxsYW4nKTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuJHRhcmdldHMgPSAkKCdbZGF0YS1tYWdlbGxhbi10YXJnZXRdJyk7XG4gICAgdGhpcy4kbGlua3MgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2EnKTtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ2RhdGEtcmVzaXplJzogaWQsXG4gICAgICAnZGF0YS1zY3JvbGwnOiBpZCxcbiAgICAgICdpZCc6IGlkXG4gICAgfSk7XG4gICAgdGhpcy4kYWN0aXZlID0gJCgpO1xuICAgIHRoaXMuc2Nyb2xsUG9zID0gcGFyc2VJbnQod2luZG93LnBhZ2VZT2Zmc2V0LCAxMCk7XG5cbiAgICB0aGlzLl9ldmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGFuIGFycmF5IG9mIHBpeGVsIHZhbHVlcyB0aGF0IGFyZSB0aGUgZGVtYXJjYXRpb24gbGluZXMgYmV0d2VlbiBsb2NhdGlvbnMgb24gdGhlIHBhZ2UuXG4gICAqIENhbiBiZSBpbnZva2VkIGlmIG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgb3IgdGhlIHNpemUgb2YgYSBsb2NhdGlvbiBjaGFuZ2VzLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGNhbGNQb2ludHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgYm9keSA9IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuICAgIHRoaXMud2luSGVpZ2h0ID0gTWF0aC5yb3VuZChNYXRoLm1heCh3aW5kb3cuaW5uZXJIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0KSk7XG4gICAgdGhpcy5kb2NIZWlnaHQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5Lm9mZnNldEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLm9mZnNldEhlaWdodCkpO1xuXG4gICAgdGhpcy4kdGFyZ2V0cy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJHRhciA9ICQodGhpcyksXG4gICAgICAgICAgcHQgPSBNYXRoLnJvdW5kKCR0YXIub2Zmc2V0KCkudG9wIC0gX3RoaXMub3B0aW9ucy50aHJlc2hvbGQpO1xuICAgICAgJHRhci50YXJnZXRQb2ludCA9IHB0O1xuICAgICAgX3RoaXMucG9pbnRzLnB1c2gocHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgTWFnZWxsYW4uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgICRib2R5ID0gJCgnaHRtbCwgYm9keScpLFxuICAgICAgICBvcHRzID0ge1xuICAgICAgICAgIGR1cmF0aW9uOiBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogICBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbkVhc2luZ1xuICAgICAgICB9O1xuICAgICQod2luZG93KS5vbmUoJ2xvYWQnLCBmdW5jdGlvbigpe1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICAgIGlmKGxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgIF90aGlzLnNjcm9sbFRvTG9jKGxvY2F0aW9uLmhhc2gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5jYWxjUG9pbnRzKCk7XG4gICAgICBfdGhpcy5fdXBkYXRlQWN0aXZlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgICdyZXNpemVtZS56Zi50cmlnZ2VyJzogdGhpcy5yZWZsb3cuYmluZCh0aGlzKSxcbiAgICAgICdzY3JvbGxtZS56Zi50cmlnZ2VyJzogdGhpcy5fdXBkYXRlQWN0aXZlLmJpbmQodGhpcylcbiAgICB9KS5vbignY2xpY2suemYubWFnZWxsYW4nLCAnYVtocmVmXj1cIiNcIl0nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIGFycml2YWwgICA9IHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgIF90aGlzLnNjcm9sbFRvTG9jKGFycml2YWwpO1xuICAgICAgfSk7XG4gICAgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmKF90aGlzLm9wdGlvbnMuZGVlcExpbmtpbmcpIHtcbiAgICAgICAgX3RoaXMuc2Nyb2xsVG9Mb2Mod2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIHNjcm9sbCB0byBhIGdpdmVuIGxvY2F0aW9uIG9uIHRoZSBwYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jIC0gYSBwcm9wZXJseSBmb3JtYXR0ZWQgalF1ZXJ5IGlkIHNlbGVjdG9yLiBFeGFtcGxlOiAnI2ZvbydcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBzY3JvbGxUb0xvYyhsb2MpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIHRhcmdldCBkb2VzIG5vdCBleGlzdCB0byBwcmV2ZW50IGVycm9yc1xuICAgIGlmICghJChsb2MpLmxlbmd0aCkge3JldHVybiBmYWxzZTt9XG4gICAgdGhpcy5faW5UcmFuc2l0aW9uID0gdHJ1ZTtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBzY3JvbGxQb3MgPSBNYXRoLnJvdW5kKCQobG9jKS5vZmZzZXQoKS50b3AgLSB0aGlzLm9wdGlvbnMudGhyZXNob2xkIC8gMiAtIHRoaXMub3B0aW9ucy5iYXJPZmZzZXQpO1xuXG4gICAgJCgnaHRtbCwgYm9keScpLnN0b3AodHJ1ZSkuYW5pbWF0ZShcbiAgICAgIHsgc2Nyb2xsVG9wOiBzY3JvbGxQb3MgfSxcbiAgICAgIHRoaXMub3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgIHRoaXMub3B0aW9ucy5hbmltYXRpb25FYXNpbmcsXG4gICAgICBmdW5jdGlvbigpIHtfdGhpcy5faW5UcmFuc2l0aW9uID0gZmFsc2U7IF90aGlzLl91cGRhdGVBY3RpdmUoKX1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gdXBkYXRlIE1hZ2VsbGFuIHVwb24gRE9NIGNoYW5nZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIHJlZmxvdygpIHtcbiAgICB0aGlzLmNhbGNQb2ludHMoKTtcbiAgICB0aGlzLl91cGRhdGVBY3RpdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIGFjdGl2ZSBsb2NhdGlvbiBsaW5rLCBhbmQgdXBkYXRlcyB0aGUgdXJsIGhhc2ggZm9yIHRoZSBwYWdlLCBpZiBkZWVwTGlua2luZyBlbmFibGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIE1hZ2VsbGFuI3VwZGF0ZVxuICAgKi9cbiAgX3VwZGF0ZUFjdGl2ZSgvKmV2dCwgZWxlbSwgc2Nyb2xsUG9zKi8pIHtcbiAgICBpZih0aGlzLl9pblRyYW5zaXRpb24pIHtyZXR1cm47fVxuICAgIHZhciB3aW5Qb3MgPSAvKnNjcm9sbFBvcyB8fCovIHBhcnNlSW50KHdpbmRvdy5wYWdlWU9mZnNldCwgMTApLFxuICAgICAgICBjdXJJZHg7XG5cbiAgICBpZih3aW5Qb3MgKyB0aGlzLndpbkhlaWdodCA9PT0gdGhpcy5kb2NIZWlnaHQpeyBjdXJJZHggPSB0aGlzLnBvaW50cy5sZW5ndGggLSAxOyB9XG4gICAgZWxzZSBpZih3aW5Qb3MgPCB0aGlzLnBvaW50c1swXSl7IGN1cklkeCA9IHVuZGVmaW5lZDsgfVxuICAgIGVsc2V7XG4gICAgICB2YXIgaXNEb3duID0gdGhpcy5zY3JvbGxQb3MgPCB3aW5Qb3MsXG4gICAgICAgICAgX3RoaXMgPSB0aGlzLFxuICAgICAgICAgIGN1clZpc2libGUgPSB0aGlzLnBvaW50cy5maWx0ZXIoZnVuY3Rpb24ocCwgaSl7XG4gICAgICAgICAgICByZXR1cm4gaXNEb3duID8gcCAtIF90aGlzLm9wdGlvbnMuYmFyT2Zmc2V0IDw9IHdpblBvcyA6IHAgLSBfdGhpcy5vcHRpb25zLmJhck9mZnNldCAtIF90aGlzLm9wdGlvbnMudGhyZXNob2xkIDw9IHdpblBvcztcbiAgICAgICAgICB9KTtcbiAgICAgIGN1cklkeCA9IGN1clZpc2libGUubGVuZ3RoID8gY3VyVmlzaWJsZS5sZW5ndGggLSAxIDogMDtcbiAgICB9XG5cbiAgICB0aGlzLiRhY3RpdmUucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcbiAgICB0aGlzLiRhY3RpdmUgPSB0aGlzLiRsaW5rcy5maWx0ZXIoJ1tocmVmPVwiIycgKyB0aGlzLiR0YXJnZXRzLmVxKGN1cklkeCkuZGF0YSgnbWFnZWxsYW4tdGFyZ2V0JykgKyAnXCJdJykuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICB2YXIgaGFzaCA9IFwiXCI7XG4gICAgICBpZihjdXJJZHggIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgaGFzaCA9IHRoaXMuJGFjdGl2ZVswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIH1cbiAgICAgIGlmKGhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG4gICAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGhhc2gpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGhhc2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNjcm9sbFBvcyA9IHdpblBvcztcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIG1hZ2VsbGFuIGlzIGZpbmlzaGVkIHVwZGF0aW5nIHRvIHRoZSBuZXcgYWN0aXZlIGVsZW1lbnQuXG4gICAgICogQGV2ZW50IE1hZ2VsbGFuI3VwZGF0ZVxuICAgICAqL1xuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndXBkYXRlLnpmLm1hZ2VsbGFuJywgW3RoaXMuJGFjdGl2ZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIE1hZ2VsbGFuIGFuZCByZXNldHMgdGhlIHVybCBvZiB0aGUgd2luZG93LlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5tYWdlbGxhbicpXG4gICAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3N9YCkucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcblxuICAgIGlmKHRoaXMub3B0aW9ucy5kZWVwTGlua2luZyl7XG4gICAgICB2YXIgaGFzaCA9IHRoaXMuJGFjdGl2ZVswXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoaGFzaCwgJycpO1xuICAgIH1cblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIHBsdWdpblxuICovXG5NYWdlbGxhbi5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lLCBpbiBtcywgdGhlIGFuaW1hdGVkIHNjcm9sbGluZyBzaG91bGQgdGFrZSBiZXR3ZWVuIGxvY2F0aW9ucy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICovXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8qKlxuICAgKiBBbmltYXRpb24gc3R5bGUgdG8gdXNlIHdoZW4gc2Nyb2xsaW5nIGJldHdlZW4gbG9jYXRpb25zLiBDYW4gYmUgYCdzd2luZydgIG9yIGAnbGluZWFyJ2AuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2xpbmVhcidcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hbmltYXRlfEpxdWVyeSBhbmltYXRlfVxuICAgKi9cbiAgYW5pbWF0aW9uRWFzaW5nOiAnbGluZWFyJyxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgdG8gdXNlIGFzIGEgbWFya2VyIGZvciBsb2NhdGlvbiBjaGFuZ2VzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICB0aHJlc2hvbGQ6IDUwLFxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYWN0aXZlIGxvY2F0aW9ucyBsaW5rIG9uIHRoZSBtYWdlbGxhbiBjb250YWluZXIuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2FjdGl2ZSdcbiAgICovXG4gIGFjdGl2ZUNsYXNzOiAnYWN0aXZlJyxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgc2NyaXB0IHRvIG1hbmlwdWxhdGUgdGhlIHVybCBvZiB0aGUgY3VycmVudCBwYWdlLCBhbmQgaWYgc3VwcG9ydGVkLCBhbHRlciB0aGUgaGlzdG9yeS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXBMaW5raW5nOiBmYWxzZSxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgdG8gb2Zmc2V0IHRoZSBzY3JvbGwgb2YgdGhlIHBhZ2Ugb24gaXRlbSBjbGljayBpZiB1c2luZyBhIHN0aWNreSBuYXYgYmFyLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGJhck9mZnNldDogMFxufVxuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oTWFnZWxsYW4sICdNYWdlbGxhbicpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogT2ZmQ2FudmFzIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5vZmZjYW52YXNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubWVkaWFRdWVyeVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqL1xuXG5jbGFzcyBPZmZDYW52YXMge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBvZmYtY2FudmFzIHdyYXBwZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2luaXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGluaXRpYWxpemUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgT2ZmQ2FudmFzLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy4kbGFzdFRyaWdnZXIgPSAkKCk7XG4gICAgdGhpcy4kdHJpZ2dlcnMgPSAkKCk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdPZmZDYW52YXMnKVxuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ09mZkNhbnZhcycsIHtcbiAgICAgICdFU0NBUEUnOiAnY2xvc2UnXG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgb2ZmLWNhbnZhcyB3cmFwcGVyIGJ5IGFkZGluZyB0aGUgZXhpdCBvdmVybGF5IChpZiBuZWVkZWQpLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBpZCA9IHRoaXMuJGVsZW1lbnQuYXR0cignaWQnKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhgaXMtdHJhbnNpdGlvbi0ke3RoaXMub3B0aW9ucy50cmFuc2l0aW9ufWApO1xuXG4gICAgLy8gRmluZCB0cmlnZ2VycyB0aGF0IGFmZmVjdCB0aGlzIGVsZW1lbnQgYW5kIGFkZCBhcmlhLWV4cGFuZGVkIHRvIHRoZW1cbiAgICB0aGlzLiR0cmlnZ2VycyA9ICQoZG9jdW1lbnQpXG4gICAgICAuZmluZCgnW2RhdGEtb3Blbj1cIicraWQrJ1wiXSwgW2RhdGEtY2xvc2U9XCInK2lkKydcIl0sIFtkYXRhLXRvZ2dsZT1cIicraWQrJ1wiXScpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgICAuYXR0cignYXJpYS1jb250cm9scycsIGlkKTtcblxuICAgIC8vIEFkZCBhbiBvdmVybGF5IG92ZXIgdGhlIGNvbnRlbnQgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50T3ZlcmxheSA9PT0gdHJ1ZSkge1xuICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHZhciBvdmVybGF5UG9zaXRpb24gPSAkKHRoaXMuJGVsZW1lbnQpLmNzcyhcInBvc2l0aW9uXCIpID09PSAnZml4ZWQnID8gJ2lzLW92ZXJsYXktZml4ZWQnIDogJ2lzLW92ZXJsYXktYWJzb2x1dGUnO1xuICAgICAgb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2pzLW9mZi1jYW52YXMtb3ZlcmxheSAnICsgb3ZlcmxheVBvc2l0aW9uKTtcbiAgICAgIHRoaXMuJG92ZXJsYXkgPSAkKG92ZXJsYXkpO1xuICAgICAgaWYob3ZlcmxheVBvc2l0aW9uID09PSAnaXMtb3ZlcmxheS1maXhlZCcpIHtcbiAgICAgICAgJCgnYm9keScpLmFwcGVuZCh0aGlzLiRvdmVybGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuc2libGluZ3MoJ1tkYXRhLW9mZi1jYW52YXMtY29udGVudF0nKS5hcHBlbmQodGhpcy4kb3ZlcmxheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmlzUmV2ZWFsZWQgPSB0aGlzLm9wdGlvbnMuaXNSZXZlYWxlZCB8fCBuZXcgUmVnRXhwKHRoaXMub3B0aW9ucy5yZXZlYWxDbGFzcywgJ2cnKS50ZXN0KHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXZlYWxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnJldmVhbE9uID0gdGhpcy5vcHRpb25zLnJldmVhbE9uIHx8IHRoaXMuJGVsZW1lbnRbMF0uY2xhc3NOYW1lLm1hdGNoKC8ocmV2ZWFsLWZvci1tZWRpdW18cmV2ZWFsLWZvci1sYXJnZSkvZylbMF0uc3BsaXQoJy0nKVsyXTtcbiAgICAgIHRoaXMuX3NldE1RQ2hlY2tlcigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFuc2l0aW9uVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zLnRyYW5zaXRpb25UaW1lID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSgkKCdbZGF0YS1vZmYtY2FudmFzXScpWzBdKS50cmFuc2l0aW9uRHVyYXRpb24pICogMTAwMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyB0byB0aGUgb2ZmLWNhbnZhcyB3cmFwcGVyIGFuZCB0aGUgZXhpdCBvdmVybGF5LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi50cmlnZ2VyIC56Zi5vZmZjYW52YXMnKS5vbih7XG4gICAgICAnb3Blbi56Zi50cmlnZ2VyJzogdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuY2xvc2UuYmluZCh0aGlzKSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAna2V5ZG93bi56Zi5vZmZjYW52YXMnOiB0aGlzLl9oYW5kbGVLZXlib2FyZC5iaW5kKHRoaXMpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljayA9PT0gdHJ1ZSkge1xuICAgICAgdmFyICR0YXJnZXQgPSB0aGlzLm9wdGlvbnMuY29udGVudE92ZXJsYXkgPyB0aGlzLiRvdmVybGF5IDogJCgnW2RhdGEtb2ZmLWNhbnZhcy1jb250ZW50XScpO1xuICAgICAgJHRhcmdldC5vbih7J2NsaWNrLnpmLm9mZmNhbnZhcyc6IHRoaXMuY2xvc2UuYmluZCh0aGlzKX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGV2ZW50IGxpc3RlbmVyIGZvciBlbGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIGF0IGNlcnRhaW4gYnJlYWtwb2ludHMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TVFDaGVja2VyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KF90aGlzLm9wdGlvbnMucmV2ZWFsT24pKSB7XG4gICAgICAgIF90aGlzLnJldmVhbCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnJldmVhbChmYWxzZSk7XG4gICAgICB9XG4gICAgfSkub25lKCdsb2FkLnpmLm9mZmNhbnZhcycsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KF90aGlzLm9wdGlvbnMucmV2ZWFsT24pKSB7XG4gICAgICAgIF90aGlzLnJldmVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXZlYWxpbmcvaGlkaW5nIHRoZSBvZmYtY2FudmFzIGF0IGJyZWFrcG9pbnRzLCBub3QgdGhlIHNhbWUgYXMgb3Blbi5cbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1JldmVhbGVkIC0gdHJ1ZSBpZiBlbGVtZW50IHNob3VsZCBiZSByZXZlYWxlZC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICByZXZlYWwoaXNSZXZlYWxlZCkge1xuICAgIHZhciAkY2xvc2VyID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS1jbG9zZV0nKTtcbiAgICBpZiAoaXNSZXZlYWxlZCkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgdGhpcy5pc1JldmVhbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdvcGVuLnpmLnRyaWdnZXIgdG9nZ2xlLnpmLnRyaWdnZXInKTtcbiAgICAgIGlmICgkY2xvc2VyLmxlbmd0aCkgeyAkY2xvc2VyLmhpZGUoKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUmV2ZWFsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ29wZW4uemYudHJpZ2dlciB0b2dnbGUuemYudHJpZ2dlcicpLm9uKHtcbiAgICAgICAgJ29wZW4uemYudHJpZ2dlcic6IHRoaXMub3Blbi5iaW5kKHRoaXMpLFxuICAgICAgICAndG9nZ2xlLnpmLnRyaWdnZXInOiB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpXG4gICAgICB9KTtcbiAgICAgIGlmICgkY2xvc2VyLmxlbmd0aCkge1xuICAgICAgICAkY2xvc2VyLnNob3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgc2Nyb2xsaW5nIG9mIHRoZSBib2R5IHdoZW4gb2ZmY2FudmFzIGlzIG9wZW4gb24gbW9iaWxlIFNhZmFyaSBhbmQgb3RoZXIgdHJvdWJsZXNvbWUgYnJvd3NlcnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RvcFNjcm9sbGluZyhldmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRha2VuIGFuZCBhZGFwdGVkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNjg4OTQ0Ny9wcmV2ZW50LWZ1bGwtcGFnZS1zY3JvbGxpbmctaW9zXG4gIC8vIE9ubHkgcmVhbGx5IHdvcmtzIGZvciB5LCBub3Qgc3VyZSBob3cgdG8gZXh0ZW5kIHRvIHggb3IgaWYgd2UgbmVlZCB0by5cbiAgX3JlY29yZFNjcm9sbGFibGUoZXZlbnQpIHtcbiAgICBsZXQgZWxlbSA9IHRoaXM7IC8vIGNhbGxlZCBmcm9tIGV2ZW50IGhhbmRsZXIgY29udGV4dCB3aXRoIHRoaXMgYXMgZWxlbVxuXG4gICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHNjcm9sbGFibGUgKGNvbnRlbnQgb3ZlcmZsb3dzKSwgdGhlbi4uLlxuICAgIGlmIChlbGVtLnNjcm9sbEhlaWdodCAhPT0gZWxlbS5jbGllbnRIZWlnaHQpIHtcbiAgICAgIC8vIElmIHdlJ3JlIGF0IHRoZSB0b3AsIHNjcm9sbCBkb3duIG9uZSBwaXhlbCB0byBhbGxvdyBzY3JvbGxpbmcgdXBcbiAgICAgIGlmIChlbGVtLnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICBlbGVtLnNjcm9sbFRvcCA9IDE7XG4gICAgICB9XG4gICAgICAvLyBJZiB3ZSdyZSBhdCB0aGUgYm90dG9tLCBzY3JvbGwgdXAgb25lIHBpeGVsIHRvIGFsbG93IHNjcm9sbGluZyBkb3duXG4gICAgICBpZiAoZWxlbS5zY3JvbGxUb3AgPT09IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodCAtIGVsZW0uY2xpZW50SGVpZ2h0IC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbS5hbGxvd1VwID0gZWxlbS5zY3JvbGxUb3AgPiAwO1xuICAgIGVsZW0uYWxsb3dEb3duID0gZWxlbS5zY3JvbGxUb3AgPCAoZWxlbS5zY3JvbGxIZWlnaHQgLSBlbGVtLmNsaWVudEhlaWdodCk7XG4gICAgZWxlbS5sYXN0WSA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQucGFnZVk7XG4gIH1cblxuICBfc3RvcFNjcm9sbFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gICAgbGV0IGVsZW0gPSB0aGlzOyAvLyBjYWxsZWQgZnJvbSBldmVudCBoYW5kbGVyIGNvbnRleHQgd2l0aCB0aGlzIGFzIGVsZW1cbiAgICBsZXQgdXAgPSBldmVudC5wYWdlWSA8IGVsZW0ubGFzdFk7XG4gICAgbGV0IGRvd24gPSAhdXA7XG4gICAgZWxlbS5sYXN0WSA9IGV2ZW50LnBhZ2VZO1xuXG4gICAgaWYoKHVwICYmIGVsZW0uYWxsb3dVcCkgfHwgKGRvd24gJiYgZWxlbS5hbGxvd0Rvd24pKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSBsaXN0ZW5lci5cbiAgICogQHBhcmFtIHtqUXVlcnl9IHRyaWdnZXIgLSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBvZmYtY2FudmFzIHRvIG9wZW4uXG4gICAqIEBmaXJlcyBPZmZDYW52YXMjb3BlbmVkXG4gICAqL1xuICBvcGVuKGV2ZW50LCB0cmlnZ2VyKSB7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQpIHsgcmV0dXJuOyB9XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICB0aGlzLiRsYXN0VHJpZ2dlciA9IHRyaWdnZXI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZVRvID09PSAndG9wJykge1xuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmZvcmNlVG8gPT09ICdib3R0b20nKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCxkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgb2ZmLWNhbnZhcyBtZW51IG9wZW5zLlxuICAgICAqIEBldmVudCBPZmZDYW52YXMjb3BlbmVkXG4gICAgICovXG4gICAgX3RoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2lzLW9wZW4nKVxuXG4gICAgdGhpcy4kdHJpZ2dlcnMuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpXG4gICAgICAgIC50cmlnZ2VyKCdvcGVuZWQuemYub2ZmY2FudmFzJyk7XG5cbiAgICAvLyBJZiBgY29udGVudFNjcm9sbGAgaXMgc2V0IHRvIGZhbHNlLCBhZGQgY2xhc3MgYW5kIGRpc2FibGUgc2Nyb2xsaW5nIG9uIHRvdWNoIGRldmljZXMuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50U2Nyb2xsID09PSBmYWxzZSkge1xuICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdpcy1vZmYtY2FudmFzLW9wZW4nKS5vbigndG91Y2htb3ZlJywgdGhpcy5fc3RvcFNjcm9sbGluZyk7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0JywgdGhpcy5fcmVjb3JkU2Nyb2xsYWJsZSk7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCd0b3VjaG1vdmUnLCB0aGlzLl9zdG9wU2Nyb2xsUHJvcGFnYXRpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGVudE92ZXJsYXkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuYWRkQ2xhc3MoJ2lzLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljayA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuY29udGVudE92ZXJsYXkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuJG92ZXJsYXkuYWRkQ2xhc3MoJ2lzLWNsb3NhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvRm9jdXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub25lKEZvdW5kYXRpb24udHJhbnNpdGlvbmVuZCh0aGlzLiRlbGVtZW50KSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjYW52YXNGb2N1cyA9IF90aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWF1dG9mb2N1c10nKTtcbiAgICAgICAgaWYgKGNhbnZhc0ZvY3VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FudmFzRm9jdXMuZXEoMCkuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLiRlbGVtZW50LmZpbmQoJ2EsIGJ1dHRvbicpLmVxKDApLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNpYmxpbmdzKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQudHJhcEZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9mZi1jYW52YXMgbWVudS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gb3B0aW9uYWwgY2IgdG8gZmlyZSBhZnRlciBjbG9zdXJlLlxuICAgKiBAZmlyZXMgT2ZmQ2FudmFzI2Nsb3NlZFxuICAgKi9cbiAgY2xvc2UoY2IpIHtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSB8fCB0aGlzLmlzUmV2ZWFsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2lzLW9wZW4nKTtcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG9mZi1jYW52YXMgbWVudSBvcGVucy5cbiAgICAgICAqIEBldmVudCBPZmZDYW52YXMjY2xvc2VkXG4gICAgICAgKi9cbiAgICAgICAgLnRyaWdnZXIoJ2Nsb3NlZC56Zi5vZmZjYW52YXMnKTtcblxuICAgIC8vIElmIGBjb250ZW50U2Nyb2xsYCBpcyBzZXQgdG8gZmFsc2UsIHJlbW92ZSBjbGFzcyBhbmQgcmUtZW5hYmxlIHNjcm9sbGluZyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGVudFNjcm9sbCA9PT0gZmFsc2UpIHtcbiAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnaXMtb2ZmLWNhbnZhcy1vcGVuJykub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9zdG9wU2Nyb2xsaW5nKTtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCd0b3VjaHN0YXJ0JywgdGhpcy5fcmVjb3JkU2Nyb2xsYWJsZSk7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZigndG91Y2htb3ZlJywgdGhpcy5fc3RvcFNjcm9sbFByb3BhZ2F0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmNvbnRlbnRPdmVybGF5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRvdmVybGF5LnJlbW92ZUNsYXNzKCdpcy1jbG9zYWJsZScpO1xuICAgIH1cblxuICAgIHRoaXMuJHRyaWdnZXJzLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudHJhcEZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNpYmxpbmdzKCdbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdJykucmVtb3ZlQXR0cigndGFiaW5kZXgnKTtcbiAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVsZWFzZUZvY3VzKHRoaXMuJGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvZmYtY2FudmFzIG1lbnUgb3BlbiBvciBjbG9zZWQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgLSBFdmVudCBvYmplY3QgcGFzc2VkIGZyb20gbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSB0cmlnZ2VyIC0gZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgb2ZmLWNhbnZhcyB0byBvcGVuLlxuICAgKi9cbiAgdG9nZ2xlKGV2ZW50LCB0cmlnZ2VyKSB7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2lzLW9wZW4nKSkge1xuICAgICAgdGhpcy5jbG9zZShldmVudCwgdHJpZ2dlcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKGV2ZW50LCB0cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBrZXlib2FyZCBpbnB1dCB3aGVuIGRldGVjdGVkLiBXaGVuIHRoZSBlc2NhcGUga2V5IGlzIHByZXNzZWQsIHRoZSBvZmYtY2FudmFzIG1lbnUgY2xvc2VzLCBhbmQgZm9jdXMgaXMgcmVzdG9yZWQgdG8gdGhlIGVsZW1lbnQgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUtleWJvYXJkKGUpIHtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnT2ZmQ2FudmFzJywge1xuICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLiRsYXN0VHJpZ2dlci5mb2N1cygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVkOiAoKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgb2ZmY2FudmFzIHBsdWdpbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRyaWdnZXIgLnpmLm9mZmNhbnZhcycpO1xuICAgIHRoaXMuJG92ZXJsYXkub2ZmKCcuemYub2ZmY2FudmFzJyk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuT2ZmQ2FudmFzLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgb3V0c2lkZSBvZiB0aGUgbWVudSB0byBjbG9zZSBpdC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIG92ZXJsYXkgb24gdG9wIG9mIGBbZGF0YS1vZmYtY2FudmFzLWNvbnRlbnRdYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY29udGVudE92ZXJsYXk6IHRydWUsXG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIHNjcm9sbGluZyBvZiB0aGUgbWFpbiBjb250ZW50IHdoZW4gYW4gb2ZmIGNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjb250ZW50U2Nyb2xsOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSBpbiBtcyB0aGUgb3BlbiBhbmQgY2xvc2UgdHJhbnNpdGlvbiByZXF1aXJlcy4gSWYgbm9uZSBzZWxlY3RlZCwgcHVsbHMgZnJvbSBib2R5IHN0eWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRyYW5zaXRpb25UaW1lOiAwLFxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRyYW5zaXRpb24gZm9yIHRoZSBvZmZjYW52YXMgbWVudS4gT3B0aW9ucyBhcmUgJ3B1c2gnLCAnZGV0YWNoZWQnIG9yICdzbGlkZScuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgcHVzaFxuICAgKi9cbiAgdHJhbnNpdGlvbjogJ3B1c2gnLFxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgcGFnZSB0byBzY3JvbGwgdG8gdG9wIG9yIGJvdHRvbSBvbiBvcGVuLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHs/c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBmb3JjZVRvOiBudWxsLFxuXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgb2ZmY2FudmFzIHRvIHJlbWFpbiBvcGVuIGZvciBjZXJ0YWluIGJyZWFrcG9pbnRzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXNSZXZlYWxlZDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEJyZWFrcG9pbnQgYXQgd2hpY2ggdG8gcmV2ZWFsLiBKUyB3aWxsIHVzZSBhIFJlZ0V4cCB0byB0YXJnZXQgc3RhbmRhcmQgY2xhc3NlcywgaWYgY2hhbmdpbmcgY2xhc3NuYW1lcywgcGFzcyB5b3VyIGNsYXNzIHdpdGggdGhlIGByZXZlYWxDbGFzc2Agb3B0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHs/c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICByZXZlYWxPbjogbnVsbCxcblxuICAvKipcbiAgICogRm9yY2UgZm9jdXMgdG8gdGhlIG9mZmNhbnZhcyBvbiBvcGVuLiBJZiB0cnVlLCB3aWxsIGZvY3VzIHRoZSBvcGVuaW5nIHRyaWdnZXIgb24gY2xvc2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9Gb2N1czogdHJ1ZSxcblxuICAvKipcbiAgICogQ2xhc3MgdXNlZCB0byBmb3JjZSBhbiBvZmZjYW52YXMgdG8gcmVtYWluIG9wZW4uIEZvdW5kYXRpb24gZGVmYXVsdHMgZm9yIHRoaXMgYXJlIGByZXZlYWwtZm9yLWxhcmdlYCAmIGByZXZlYWwtZm9yLW1lZGl1bWAuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgcmV2ZWFsLWZvci1cbiAgICogQHRvZG8gaW1wcm92ZSB0aGUgcmVnZXggdGVzdGluZyBmb3IgdGhpcy5cbiAgICovXG4gIHJldmVhbENsYXNzOiAncmV2ZWFsLWZvci0nLFxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBvcHRpb25hbCBmb2N1cyB0cmFwcGluZyB3aGVuIG9wZW5pbmcgYW4gb2ZmY2FudmFzLiBTZXRzIHRhYmluZGV4IG9mIFtkYXRhLW9mZi1jYW52YXMtY29udGVudF0gdG8gLTEgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmFwRm9jdXM6IGZhbHNlXG59XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihPZmZDYW52YXMsICdPZmZDYW52YXMnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIE9yYml0IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5vcmJpdFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tb3Rpb25cbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlclxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50b3VjaFxuICovXG5cbmNsYXNzIE9yYml0IHtcbiAgLyoqXG4gICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBvcmJpdCBjYXJvdXNlbC5cbiAgKiBAY2xhc3NcbiAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGFuIE9yYml0IENhcm91c2VsLlxuICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucyl7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIE9yYml0LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdPcmJpdCcpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ09yYml0Jywge1xuICAgICAgJ2x0cic6IHtcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ25leHQnLFxuICAgICAgICAnQVJST1dfTEVGVCc6ICdwcmV2aW91cydcbiAgICAgIH0sXG4gICAgICAncnRsJzoge1xuICAgICAgICAnQVJST1dfTEVGVCc6ICduZXh0JyxcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ3ByZXZpb3VzJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiBieSBjcmVhdGluZyBqUXVlcnkgY29sbGVjdGlvbnMsIHNldHRpbmcgYXR0cmlidXRlcywgYW5kIHN0YXJ0aW5nIHRoZSBhbmltYXRpb24uXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX2luaXQoKSB7XG4gICAgLy8gQFRPRE86IGNvbnNpZGVyIGRpc2N1c3Npb24gb24gUFIgIzkyNzggYWJvdXQgRE9NIHBvbGx1dGlvbiBieSBjaGFuZ2VTbGlkZVxuICAgIHRoaXMuX3Jlc2V0KCk7XG5cbiAgICB0aGlzLiR3cmFwcGVyID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuY29udGFpbmVyQ2xhc3N9YCk7XG4gICAgdGhpcy4kc2xpZGVzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKTtcblxuICAgIHZhciAkaW1hZ2VzID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbWcnKSxcbiAgICAgICAgaW5pdEFjdGl2ZSA9IHRoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKSxcbiAgICAgICAgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ29yYml0Jyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoe1xuICAgICAgJ2RhdGEtcmVzaXplJzogaWQsXG4gICAgICAnaWQnOiBpZFxuICAgIH0pO1xuXG4gICAgaWYgKCFpbml0QWN0aXZlLmxlbmd0aCkge1xuICAgICAgdGhpcy4kc2xpZGVzLmVxKDApLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy51c2VNVUkpIHtcbiAgICAgIHRoaXMuJHNsaWRlcy5hZGRDbGFzcygnbm8tbW90aW9udWknKTtcbiAgICB9XG5cbiAgICBpZiAoJGltYWdlcy5sZW5ndGgpIHtcbiAgICAgIEZvdW5kYXRpb24ub25JbWFnZXNMb2FkZWQoJGltYWdlcywgdGhpcy5fcHJlcGFyZUZvck9yYml0LmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVwYXJlRm9yT3JiaXQoKTsvL2hlaGVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmJ1bGxldHMpIHtcbiAgICAgIHRoaXMuX2xvYWRCdWxsZXRzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9QbGF5ICYmIHRoaXMuJHNsaWRlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmdlb1N5bmMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmFjY2Vzc2libGUpIHsgLy8gYWxsb3cgd3JhcHBlciB0byBiZSBmb2N1c2FibGUgdG8gZW5hYmxlIGFycm93IG5hdmlnYXRpb25cbiAgICAgIHRoaXMuJHdyYXBwZXIuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgKiBDcmVhdGVzIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb2YgYnVsbGV0cywgaWYgdGhleSBhcmUgYmVpbmcgdXNlZC5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfbG9hZEJ1bGxldHMoKSB7XG4gICAgdGhpcy4kYnVsbGV0cyA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLmJveE9mQnVsbGV0c31gKS5maW5kKCdidXR0b24nKTtcbiAgfVxuXG4gIC8qKlxuICAqIFNldHMgYSBgdGltZXJgIG9iamVjdCBvbiB0aGUgb3JiaXQsIGFuZCBzdGFydHMgdGhlIGNvdW50ZXIgZm9yIHRoZSBuZXh0IHNsaWRlLlxuICAqIEBmdW5jdGlvblxuICAqL1xuICBnZW9TeW5jKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy50aW1lciA9IG5ldyBGb3VuZGF0aW9uLlRpbWVyKFxuICAgICAgdGhpcy4kZWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy50aW1lckRlbGF5LFxuICAgICAgICBpbmZpbml0ZTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB0aGlzLnRpbWVyLnN0YXJ0KCk7XG4gIH1cblxuICAvKipcbiAgKiBTZXRzIHdyYXBwZXIgYW5kIHNsaWRlIGhlaWdodHMgZm9yIHRoZSBvcmJpdC5cbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBfcHJlcGFyZUZvck9yYml0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy5fc2V0V3JhcHBlckhlaWdodCgpO1xuICB9XG5cbiAgLyoqXG4gICogQ2FsdWxhdGVzIHRoZSBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgY29sbGVjdGlvbiwgYW5kIHVzZXMgdGhlIHRhbGxlc3Qgb25lIGZvciB0aGUgd3JhcHBlciBoZWlnaHQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlyZSB3aGVuIGNvbXBsZXRlLlxuICAqL1xuICBfc2V0V3JhcHBlckhlaWdodChjYikgey8vcmV3cml0ZSB0aGlzIHRvIGBmb3JgIGxvb3BcbiAgICB2YXIgbWF4ID0gMCwgdGVtcCwgY291bnRlciA9IDAsIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdGVtcCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLXNsaWRlJywgY291bnRlcik7XG5cbiAgICAgIGlmIChfdGhpcy4kc2xpZGVzLmZpbHRlcignLmlzLWFjdGl2ZScpWzBdICE9PSBfdGhpcy4kc2xpZGVzLmVxKGNvdW50ZXIpWzBdKSB7Ly9pZiBub3QgdGhlIGFjdGl2ZSBzbGlkZSwgc2V0IGNzcyBwb3NpdGlvbiBhbmQgZGlzcGxheSBwcm9wZXJ0eVxuICAgICAgICAkKHRoaXMpLmNzcyh7J3Bvc2l0aW9uJzogJ3JlbGF0aXZlJywgJ2Rpc3BsYXknOiAnbm9uZSd9KTtcbiAgICAgIH1cbiAgICAgIG1heCA9IHRlbXAgPiBtYXggPyB0ZW1wIDogbWF4O1xuICAgICAgY291bnRlcisrO1xuICAgIH0pO1xuXG4gICAgaWYgKGNvdW50ZXIgPT09IHRoaXMuJHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJHdyYXBwZXIuY3NzKHsnaGVpZ2h0JzogbWF4fSk7IC8vb25seSBjaGFuZ2UgdGhlIHdyYXBwZXIgaGVpZ2h0IHByb3BlcnR5IG9uY2UuXG4gICAgICBpZihjYikge2NiKG1heCk7fSAvL2ZpcmUgY2FsbGJhY2sgd2l0aCBtYXggaGVpZ2h0IGRpbWVuc2lvbi5cbiAgICB9XG4gIH1cblxuICAvKipcbiAgKiBTZXRzIHRoZSBtYXgtaGVpZ2h0IG9mIGVhY2ggc2xpZGUuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKi9cbiAgX3NldFNsaWRlSGVpZ2h0KGhlaWdodCkge1xuICAgIHRoaXMuJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgJCh0aGlzKS5jc3MoJ21heC1oZWlnaHQnLCBoZWlnaHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSBlbGVtZW50LlxuICAqIEBmdW5jdGlvblxuICAqIEBwcml2YXRlXG4gICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgLy8qKk5vdyB1c2luZyBjdXN0b20gZXZlbnQgLSB0aGFua3MgdG86KipcbiAgICAvLyoqICAgICAgWW9oYWkgQXJhcmF0IG9mIFRvcm9udG8gICAgICAqKlxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgLy9cbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnJlc2l6ZW1lLnpmLnRyaWdnZXInKS5vbih7XG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IHRoaXMuX3ByZXBhcmVGb3JPcmJpdC5iaW5kKHRoaXMpXG4gICAgfSlcbiAgICBpZiAodGhpcy4kc2xpZGVzLmxlbmd0aCA+IDEpIHtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zd2lwZSkge1xuICAgICAgICB0aGlzLiRzbGlkZXMub2ZmKCdzd2lwZWxlZnQuemYub3JiaXQgc3dpcGVyaWdodC56Zi5vcmJpdCcpXG4gICAgICAgIC5vbignc3dpcGVsZWZ0LnpmLm9yYml0JywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKHRydWUpO1xuICAgICAgICB9KS5vbignc3dpcGVyaWdodC56Zi5vcmJpdCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZShmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSkge1xuICAgICAgICB0aGlzLiRzbGlkZXMub24oJ2NsaWNrLnpmLm9yYml0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJywgX3RoaXMuJGVsZW1lbnQuZGF0YSgnY2xpY2tlZE9uJykgPyBmYWxzZSA6IHRydWUpO1xuICAgICAgICAgIF90aGlzLnRpbWVyW190aGlzLiRlbGVtZW50LmRhdGEoJ2NsaWNrZWRPbicpID8gJ3BhdXNlJyA6ICdzdGFydCddKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgdGhpcy4kZWxlbWVudC5vbignbW91c2VlbnRlci56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMudGltZXIucGF1c2UoKTtcbiAgICAgICAgICB9KS5vbignbW91c2VsZWF2ZS56Zi5vcmJpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy4kZWxlbWVudC5kYXRhKCdjbGlja2VkT24nKSkge1xuICAgICAgICAgICAgICBfdGhpcy50aW1lci5zdGFydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubmF2QnV0dG9ucykge1xuICAgICAgICB2YXIgJGNvbnRyb2xzID0gdGhpcy4kZWxlbWVudC5maW5kKGAuJHt0aGlzLm9wdGlvbnMubmV4dENsYXNzfSwgLiR7dGhpcy5vcHRpb25zLnByZXZDbGFzc31gKTtcbiAgICAgICAgJGNvbnRyb2xzLmF0dHIoJ3RhYmluZGV4JywgMClcbiAgICAgICAgLy9hbHNvIG5lZWQgdG8gaGFuZGxlIGVudGVyL3JldHVybiBhbmQgc3BhY2ViYXIga2V5IHByZXNzZXNcbiAgICAgICAgLm9uKCdjbGljay56Zi5vcmJpdCB0b3VjaGVuZC56Zi5vcmJpdCcsIGZ1bmN0aW9uKGUpe1xuXHQgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZSgkKHRoaXMpLmhhc0NsYXNzKF90aGlzLm9wdGlvbnMubmV4dENsYXNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmJ1bGxldHMpIHtcbiAgICAgICAgdGhpcy4kYnVsbGV0cy5vbignY2xpY2suemYub3JiaXQgdG91Y2hlbmQuemYub3JiaXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoL2lzLWFjdGl2ZS9nLnRlc3QodGhpcy5jbGFzc05hbWUpKSB7IHJldHVybiBmYWxzZTsgfS8vaWYgdGhpcyBpcyBhY3RpdmUsIGtpY2sgb3V0IG9mIGZ1bmN0aW9uLlxuICAgICAgICAgIHZhciBpZHggPSAkKHRoaXMpLmRhdGEoJ3NsaWRlJyksXG4gICAgICAgICAgbHRyID0gaWR4ID4gX3RoaXMuJHNsaWRlcy5maWx0ZXIoJy5pcy1hY3RpdmUnKS5kYXRhKCdzbGlkZScpLFxuICAgICAgICAgICRzbGlkZSA9IF90aGlzLiRzbGlkZXMuZXEoaWR4KTtcblxuICAgICAgICAgIF90aGlzLmNoYW5nZVNsaWRlKGx0ciwgJHNsaWRlLCBpZHgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hY2Nlc3NpYmxlKSB7XG4gICAgICAgIHRoaXMuJHdyYXBwZXIuYWRkKHRoaXMuJGJ1bGxldHMpLm9uKCdrZXlkb3duLnpmLm9yYml0JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIC8vIGhhbmRsZSBrZXlib2FyZCBldmVudCB3aXRoIGtleWJvYXJkIHV0aWxcbiAgICAgICAgICBGb3VuZGF0aW9uLktleWJvYXJkLmhhbmRsZUtleShlLCAnT3JiaXQnLCB7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3RoaXMuY2hhbmdlU2xpZGUodHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBfdGhpcy5jaGFuZ2VTbGlkZShmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7IC8vIGlmIGJ1bGxldCBpcyBmb2N1c2VkLCBtYWtlIHN1cmUgZm9jdXMgbW92ZXNcbiAgICAgICAgICAgICAgaWYgKCQoZS50YXJnZXQpLmlzKF90aGlzLiRidWxsZXRzKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLiRidWxsZXRzLmZpbHRlcignLmlzLWFjdGl2ZScpLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBPcmJpdCBzbyBpdCBjYW4gYmUgcmVpbml0aWFsaXplZFxuICAgKi9cbiAgX3Jlc2V0KCkge1xuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZXJlIGFyZSBubyBzbGlkZXMgKGZpcnN0IHJ1bilcbiAgICBpZiAodHlwZW9mIHRoaXMuJHNsaWRlcyA9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRzbGlkZXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gUmVtb3ZlIG9sZCBldmVudHNcbiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYub3JiaXQnKS5maW5kKCcqJykub2ZmKCcuemYub3JiaXQnKVxuXG4gICAgICAvLyBSZXN0YXJ0IHRpbWVyIGlmIGF1dG9QbGF5IGlzIGVuYWJsZWRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1BsYXkpIHtcbiAgICAgICAgdGhpcy50aW1lci5yZXN0YXJ0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2V0IGFsbCBzbGlkZGVzXG4gICAgICB0aGlzLiRzbGlkZXMuZWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAkKGVsKS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlIGlzLWFjdGl2ZSBpcy1pbicpXG4gICAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtbGl2ZScpXG4gICAgICAgICAgLmhpZGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG93IHRoZSBmaXJzdCBzbGlkZVxuICAgICAgdGhpcy4kc2xpZGVzLmZpcnN0KCkuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpLnNob3coKTtcblxuICAgICAgLy8gVHJpZ2dlcnMgd2hlbiB0aGUgc2xpZGUgaGFzIGZpbmlzaGVkIGFuaW1hdGluZ1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdzbGlkZWNoYW5nZS56Zi5vcmJpdCcsIFt0aGlzLiRzbGlkZXMuZmlyc3QoKV0pO1xuXG4gICAgICAvLyBTZWxlY3QgZmlyc3QgYnVsbGV0IGlmIGJ1bGxldHMgYXJlIHByZXNlbnRcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgICB0aGlzLl91cGRhdGVCdWxsZXRzKDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgc2xpZGUgdG8gYSBuZXcgb25lLlxuICAqIEBmdW5jdGlvblxuICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNMVFIgLSBmbGFnIGlmIHRoZSBzbGlkZSBzaG91bGQgbW92ZSBsZWZ0IHRvIHJpZ2h0LlxuICAqIEBwYXJhbSB7alF1ZXJ5fSBjaG9zZW5TbGlkZSAtIHRoZSBqUXVlcnkgZWxlbWVudCBvZiB0aGUgc2xpZGUgdG8gc2hvdyBuZXh0LCBpZiBvbmUgaXMgc2VsZWN0ZWQuXG4gICogQHBhcmFtIHtOdW1iZXJ9IGlkeCAtIHRoZSBpbmRleCBvZiB0aGUgbmV3IHNsaWRlIGluIGl0cyBjb2xsZWN0aW9uLCBpZiBvbmUgY2hvc2VuLlxuICAqIEBmaXJlcyBPcmJpdCNzbGlkZWNoYW5nZVxuICAqL1xuICBjaGFuZ2VTbGlkZShpc0xUUiwgY2hvc2VuU2xpZGUsIGlkeCkge1xuICAgIGlmICghdGhpcy4kc2xpZGVzKSB7cmV0dXJuOyB9IC8vIERvbid0IGZyZWFrIG91dCBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGNsZWFudXBcbiAgICB2YXIgJGN1clNsaWRlID0gdGhpcy4kc2xpZGVzLmZpbHRlcignLmlzLWFjdGl2ZScpLmVxKDApO1xuXG4gICAgaWYgKC9tdWkvZy50ZXN0KCRjdXJTbGlkZVswXS5jbGFzc05hbWUpKSB7IHJldHVybiBmYWxzZTsgfSAvL2lmIHRoZSBzbGlkZSBpcyBjdXJyZW50bHkgYW5pbWF0aW5nLCBraWNrIG91dCBvZiB0aGUgZnVuY3Rpb25cblxuICAgIHZhciAkZmlyc3RTbGlkZSA9IHRoaXMuJHNsaWRlcy5maXJzdCgpLFxuICAgICRsYXN0U2xpZGUgPSB0aGlzLiRzbGlkZXMubGFzdCgpLFxuICAgIGRpckluID0gaXNMVFIgPyAnUmlnaHQnIDogJ0xlZnQnLFxuICAgIGRpck91dCA9IGlzTFRSID8gJ0xlZnQnIDogJ1JpZ2h0JyxcbiAgICBfdGhpcyA9IHRoaXMsXG4gICAgJG5ld1NsaWRlO1xuXG4gICAgaWYgKCFjaG9zZW5TbGlkZSkgeyAvL21vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgd2lsbCBiZSBhdXRvIHBsYXllZCBvciBjbGlja2VkIGZyb20gdGhlIG5hdkJ1dHRvbnMuXG4gICAgICAkbmV3U2xpZGUgPSBpc0xUUiA/IC8vaWYgd3JhcHBpbmcgZW5hYmxlZCwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgYG5leHRgIG9yIGBwcmV2YCBzaWJsaW5nLCBpZiBub3QsIHNlbGVjdCB0aGUgZmlyc3Qgb3IgbGFzdCBzbGlkZSB0byBmaWxsIGluLiBpZiB3cmFwcGluZyBub3QgZW5hYmxlZCwgYXR0ZW1wdCB0byBzZWxlY3QgYG5leHRgIG9yIGBwcmV2YCwgaWYgdGhlcmUncyBub3RoaW5nIHRoZXJlLCB0aGUgZnVuY3Rpb24gd2lsbCBraWNrIG91dCBvbiBuZXh0IHN0ZXAuIENSQVpZIE5FU1RFRCBURVJOQVJJRVMhISEhIVxuICAgICAgKHRoaXMub3B0aW9ucy5pbmZpbml0ZVdyYXAgPyAkY3VyU2xpZGUubmV4dChgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkubGVuZ3RoID8gJGN1clNsaWRlLm5leHQoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApIDogJGZpcnN0U2xpZGUgOiAkY3VyU2xpZGUubmV4dChgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkpLy9waWNrIG5leHQgc2xpZGUgaWYgbW92aW5nIGxlZnQgdG8gcmlnaHRcbiAgICAgIDpcbiAgICAgICh0aGlzLm9wdGlvbnMuaW5maW5pdGVXcmFwID8gJGN1clNsaWRlLnByZXYoYC4ke3RoaXMub3B0aW9ucy5zbGlkZUNsYXNzfWApLmxlbmd0aCA/ICRjdXJTbGlkZS5wcmV2KGAuJHt0aGlzLm9wdGlvbnMuc2xpZGVDbGFzc31gKSA6ICRsYXN0U2xpZGUgOiAkY3VyU2xpZGUucHJldihgLiR7dGhpcy5vcHRpb25zLnNsaWRlQ2xhc3N9YCkpOy8vcGljayBwcmV2IHNsaWRlIGlmIG1vdmluZyByaWdodCB0byBsZWZ0XG4gICAgfSBlbHNlIHtcbiAgICAgICRuZXdTbGlkZSA9IGNob3NlblNsaWRlO1xuICAgIH1cblxuICAgIGlmICgkbmV3U2xpZGUubGVuZ3RoKSB7XG4gICAgICAvKipcbiAgICAgICogVHJpZ2dlcnMgYmVmb3JlIHRoZSBuZXh0IHNsaWRlIHN0YXJ0cyBhbmltYXRpbmcgaW4gYW5kIG9ubHkgaWYgYSBuZXh0IHNsaWRlIGhhcyBiZWVuIGZvdW5kLlxuICAgICAgKiBAZXZlbnQgT3JiaXQjYmVmb3Jlc2xpZGVjaGFuZ2VcbiAgICAgICovXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2JlZm9yZXNsaWRlY2hhbmdlLnpmLm9yYml0JywgWyRjdXJTbGlkZSwgJG5ld1NsaWRlXSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0cykge1xuICAgICAgICBpZHggPSBpZHggfHwgdGhpcy4kc2xpZGVzLmluZGV4KCRuZXdTbGlkZSk7IC8vZ3JhYiBpbmRleCB0byB1cGRhdGUgYnVsbGV0c1xuICAgICAgICB0aGlzLl91cGRhdGVCdWxsZXRzKGlkeCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXNlTVVJICYmICF0aGlzLiRlbGVtZW50LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZUluKFxuICAgICAgICAgICRuZXdTbGlkZS5hZGRDbGFzcygnaXMtYWN0aXZlJykuY3NzKHsncG9zaXRpb24nOiAnYWJzb2x1dGUnLCAndG9wJzogMH0pLFxuICAgICAgICAgIHRoaXMub3B0aW9uc1tgYW5pbUluRnJvbSR7ZGlySW59YF0sXG4gICAgICAgICAgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICRuZXdTbGlkZS5jc3Moeydwb3NpdGlvbic6ICdyZWxhdGl2ZScsICdkaXNwbGF5JzogJ2Jsb2NrJ30pXG4gICAgICAgICAgICAuYXR0cignYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlT3V0KFxuICAgICAgICAgICRjdXJTbGlkZS5yZW1vdmVDbGFzcygnaXMtYWN0aXZlJyksXG4gICAgICAgICAgdGhpcy5vcHRpb25zW2BhbmltT3V0VG8ke2Rpck91dH1gXSxcbiAgICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJGN1clNsaWRlLnJlbW92ZUF0dHIoJ2FyaWEtbGl2ZScpO1xuICAgICAgICAgICAgaWYoX3RoaXMub3B0aW9ucy5hdXRvUGxheSAmJiAhX3RoaXMudGltZXIuaXNQYXVzZWQpe1xuICAgICAgICAgICAgICBfdGhpcy50aW1lci5yZXN0YXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2RvIHN0dWZmP1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGN1clNsaWRlLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUgaXMtaW4nKS5yZW1vdmVBdHRyKCdhcmlhLWxpdmUnKS5oaWRlKCk7XG4gICAgICAgICRuZXdTbGlkZS5hZGRDbGFzcygnaXMtYWN0aXZlIGlzLWluJykuYXR0cignYXJpYS1saXZlJywgJ3BvbGl0ZScpLnNob3coKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUGxheSAmJiAhdGhpcy50aW1lci5pc1BhdXNlZCkge1xuICAgICAgICAgIHRoaXMudGltZXIucmVzdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgLyoqXG4gICAgKiBUcmlnZ2VycyB3aGVuIHRoZSBzbGlkZSBoYXMgZmluaXNoZWQgYW5pbWF0aW5nIGluLlxuICAgICogQGV2ZW50IE9yYml0I3NsaWRlY2hhbmdlXG4gICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignc2xpZGVjaGFuZ2UuemYub3JiaXQnLCBbJG5ld1NsaWRlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogVXBkYXRlcyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBidWxsZXRzLCBpZiBkaXNwbGF5ZWQuXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHNsaWRlLlxuICAqL1xuICBfdXBkYXRlQnVsbGV0cyhpZHgpIHtcbiAgICB2YXIgJG9sZEJ1bGxldCA9IHRoaXMuJGVsZW1lbnQuZmluZChgLiR7dGhpcy5vcHRpb25zLmJveE9mQnVsbGV0c31gKVxuICAgIC5maW5kKCcuaXMtYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpLmJsdXIoKSxcbiAgICBzcGFuID0gJG9sZEJ1bGxldC5maW5kKCdzcGFuOmxhc3QnKS5kZXRhY2goKSxcbiAgICAkbmV3QnVsbGV0ID0gdGhpcy4kYnVsbGV0cy5lcShpZHgpLmFkZENsYXNzKCdpcy1hY3RpdmUnKS5hcHBlbmQoc3Bhbik7XG4gIH1cblxuICAvKipcbiAgKiBEZXN0cm95cyB0aGUgY2Fyb3VzZWwgYW5kIGhpZGVzIHRoZSBlbGVtZW50LlxuICAqIEBmdW5jdGlvblxuICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYub3JiaXQnKS5maW5kKCcqJykub2ZmKCcuemYub3JiaXQnKS5lbmQoKS5oaWRlKCk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cbk9yYml0LmRlZmF1bHRzID0ge1xuICAvKipcbiAgKiBUZWxscyB0aGUgSlMgdG8gbG9vayBmb3IgYW5kIGxvYWRCdWxsZXRzLlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICogQGRlZmF1bHQgdHJ1ZVxuICAqL1xuICBidWxsZXRzOiB0cnVlLFxuICAvKipcbiAgKiBUZWxscyB0aGUgSlMgdG8gYXBwbHkgZXZlbnQgbGlzdGVuZXJzIHRvIG5hdiBidXR0b25zXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIG5hdkJ1dHRvbnM6IHRydWUsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ3NsaWRlLWluLXJpZ2h0J1xuICAqL1xuICBhbmltSW5Gcm9tUmlnaHQ6ICdzbGlkZS1pbi1yaWdodCcsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ3NsaWRlLW91dC1yaWdodCdcbiAgKi9cbiAgYW5pbU91dFRvUmlnaHQ6ICdzbGlkZS1vdXQtcmlnaHQnLFxuICAvKipcbiAgKiBtb3Rpb24tdWkgYW5pbWF0aW9uIGNsYXNzIHRvIGFwcGx5XG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdzbGlkZS1pbi1sZWZ0J1xuICAqXG4gICovXG4gIGFuaW1JbkZyb21MZWZ0OiAnc2xpZGUtaW4tbGVmdCcsXG4gIC8qKlxuICAqIG1vdGlvbi11aSBhbmltYXRpb24gY2xhc3MgdG8gYXBwbHlcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ3NsaWRlLW91dC1sZWZ0J1xuICAqL1xuICBhbmltT3V0VG9MZWZ0OiAnc2xpZGUtb3V0LWxlZnQnLFxuICAvKipcbiAgKiBBbGxvd3MgT3JiaXQgdG8gYXV0b21hdGljYWxseSBhbmltYXRlIG9uIHBhZ2UgbG9hZC5cbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAqIEBkZWZhdWx0IHRydWVcbiAgKi9cbiAgYXV0b1BsYXk6IHRydWUsXG4gIC8qKlxuICAqIEFtb3VudCBvZiB0aW1lLCBpbiBtcywgYmV0d2VlbiBzbGlkZSB0cmFuc2l0aW9uc1xuICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgKiBAZGVmYXVsdCA1MDAwXG4gICovXG4gIHRpbWVyRGVsYXk6IDUwMDAsXG4gIC8qKlxuICAqIEFsbG93cyBPcmJpdCB0byBpbmZpbml0ZWx5IGxvb3AgdGhyb3VnaCB0aGUgc2xpZGVzXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIGluZmluaXRlV3JhcDogdHJ1ZSxcbiAgLyoqXG4gICogQWxsb3dzIHRoZSBPcmJpdCBzbGlkZXMgdG8gYmluZCB0byBzd2lwZSBldmVudHMgZm9yIG1vYmlsZSwgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCB1dGlsIGxpYnJhcnlcbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAqIEBkZWZhdWx0IHRydWVcbiAgKi9cbiAgc3dpcGU6IHRydWUsXG4gIC8qKlxuICAqIEFsbG93cyB0aGUgdGltaW5nIGZ1bmN0aW9uIHRvIHBhdXNlIGFuaW1hdGlvbiBvbiBob3Zlci5cbiAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAqIEBkZWZhdWx0IHRydWVcbiAgKi9cbiAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAvKipcbiAgKiBBbGxvd3MgT3JiaXQgdG8gYmluZCBrZXlib2FyZCBldmVudHMgdG8gdGhlIHNsaWRlciwgdG8gYW5pbWF0ZSBmcmFtZXMgd2l0aCBhcnJvdyBrZXlzXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIGFjY2Vzc2libGU6IHRydWUsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lciBvZiBPcmJpdFxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnb3JiaXQtY29udGFpbmVyJ1xuICAqL1xuICBjb250YWluZXJDbGFzczogJ29yYml0LWNvbnRhaW5lcicsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCBzbGlkZXMuXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdvcmJpdC1zbGlkZSdcbiAgKi9cbiAgc2xpZGVDbGFzczogJ29yYml0LXNsaWRlJyxcbiAgLyoqXG4gICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYnVsbGV0IGNvbnRhaW5lci4gWW91J3JlIHdlbGNvbWUuXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdvcmJpdC1idWxsZXRzJ1xuICAqL1xuICBib3hPZkJ1bGxldHM6ICdvcmJpdC1idWxsZXRzJyxcbiAgLyoqXG4gICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYG5leHRgIG5hdmlnYXRpb24gYnV0dG9uLlxuICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgKiBAZGVmYXVsdCAnb3JiaXQtbmV4dCdcbiAgKi9cbiAgbmV4dENsYXNzOiAnb3JiaXQtbmV4dCcsXG4gIC8qKlxuICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIGBwcmV2aW91c2AgbmF2aWdhdGlvbiBidXR0b24uXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAqIEBkZWZhdWx0ICdvcmJpdC1wcmV2aW91cydcbiAgKi9cbiAgcHJldkNsYXNzOiAnb3JiaXQtcHJldmlvdXMnLFxuICAvKipcbiAgKiBCb29sZWFuIHRvIGZsYWcgdGhlIGpzIHRvIHVzZSBtb3Rpb24gdWkgY2xhc3NlcyBvciBub3QuIERlZmF1bHQgdG8gdHJ1ZSBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuXG4gICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgKiBAZGVmYXVsdCB0cnVlXG4gICovXG4gIHVzZU1VSTogdHJ1ZVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKE9yYml0LCAnT3JiaXQnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFJlc3BvbnNpdmVNZW51IG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlTWVudVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKi9cblxuY2xhc3MgUmVzcG9uc2l2ZU1lbnUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIHJlc3BvbnNpdmUgbWVudS5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBSZXNwb25zaXZlTWVudSNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gYSBkcm9wZG93biBtZW51LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE92ZXJyaWRlcyB0byB0aGUgZGVmYXVsdCBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgdGhpcy5ydWxlcyA9IHRoaXMuJGVsZW1lbnQuZGF0YSgncmVzcG9uc2l2ZS1tZW51Jyk7XG4gICAgdGhpcy5jdXJyZW50TXEgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFBsdWdpbiA9IG51bGw7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdSZXNwb25zaXZlTWVudScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBNZW51IGJ5IHBhcnNpbmcgdGhlIGNsYXNzZXMgZnJvbSB0aGUgJ2RhdGEtUmVzcG9uc2l2ZU1lbnUnIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICAvLyBUaGUgZmlyc3QgdGltZSBhbiBJbnRlcmNoYW5nZSBwbHVnaW4gaXMgaW5pdGlhbGl6ZWQsIHRoaXMucnVsZXMgaXMgY29udmVydGVkIGZyb20gYSBzdHJpbmcgb2YgXCJjbGFzc2VzXCIgdG8gYW4gb2JqZWN0IG9mIHJ1bGVzXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJ1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IHJ1bGVzVHJlZSA9IHt9O1xuXG4gICAgICAvLyBQYXJzZSBydWxlcyBmcm9tIFwiY2xhc3Nlc1wiIHB1bGxlZCBmcm9tIGRhdGEgYXR0cmlidXRlXG4gICAgICBsZXQgcnVsZXMgPSB0aGlzLnJ1bGVzLnNwbGl0KCcgJyk7XG5cbiAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeSBydWxlIGZvdW5kXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBydWxlID0gcnVsZXNbaV0uc3BsaXQoJy0nKTtcbiAgICAgICAgbGV0IHJ1bGVTaXplID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVswXSA6ICdzbWFsbCc7XG4gICAgICAgIGxldCBydWxlUGx1Z2luID0gcnVsZS5sZW5ndGggPiAxID8gcnVsZVsxXSA6IHJ1bGVbMF07XG5cbiAgICAgICAgaWYgKE1lbnVQbHVnaW5zW3J1bGVQbHVnaW5dICE9PSBudWxsKSB7XG4gICAgICAgICAgcnVsZXNUcmVlW3J1bGVTaXplXSA9IE1lbnVQbHVnaW5zW3J1bGVQbHVnaW5dO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucnVsZXMgPSBydWxlc1RyZWU7XG4gICAgfVxuXG4gICAgaWYgKCEkLmlzRW1wdHlPYmplY3QodGhpcy5ydWxlcykpIHtcbiAgICAgIHRoaXMuX2NoZWNrTWVkaWFRdWVyaWVzKCk7XG4gICAgfVxuICAgIC8vIEFkZCBkYXRhLW11dGF0ZSBzaW5jZSBjaGlsZHJlbiBtYXkgbmVlZCBpdC5cbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGEtbXV0YXRlJywgKHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YS1tdXRhdGUnKSB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdyZXNwb25zaXZlLW1lbnUnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgdGhlIE1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH0pO1xuICAgIC8vICQod2luZG93KS5vbigncmVzaXplLnpmLlJlc3BvbnNpdmVNZW51JywgZnVuY3Rpb24oKSB7XG4gICAgLy8gICBfdGhpcy5fY2hlY2tNZWRpYVF1ZXJpZXMoKTtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgc2NyZWVuIHdpZHRoIGFnYWluc3QgYXZhaWxhYmxlIG1lZGlhIHF1ZXJpZXMuIElmIHRoZSBtZWRpYSBxdWVyeSBoYXMgY2hhbmdlZCwgYW5kIHRoZSBwbHVnaW4gbmVlZGVkIGhhcyBjaGFuZ2VkLCB0aGUgcGx1Z2lucyB3aWxsIHN3YXAgb3V0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja01lZGlhUXVlcmllcygpIHtcbiAgICB2YXIgbWF0Y2hlZE1xLCBfdGhpcyA9IHRoaXM7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcnVsZSBhbmQgZmluZCB0aGUgbGFzdCBtYXRjaGluZyBydWxlXG4gICAgJC5lYWNoKHRoaXMucnVsZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgaWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KGtleSkpIHtcbiAgICAgICAgbWF0Y2hlZE1xID0ga2V5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm8gbWF0Y2g/IE5vIGRpY2VcbiAgICBpZiAoIW1hdGNoZWRNcSkgcmV0dXJuO1xuXG4gICAgLy8gUGx1Z2luIGFscmVhZHkgaW5pdGlhbGl6ZWQ/IFdlIGdvb2RcbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luIGluc3RhbmNlb2YgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbikgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHBsdWdpbi1zcGVjaWZpYyBDU1MgY2xhc3Nlc1xuICAgICQuZWFjaChNZW51UGx1Z2lucywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgX3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModmFsdWUuY3NzQ2xhc3MpO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIHRoZSBDU1MgY2xhc3MgZm9yIHRoZSBuZXcgcGx1Z2luXG4gICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLnJ1bGVzW21hdGNoZWRNcV0uY3NzQ2xhc3MpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBuZXcgcGx1Z2luXG4gICAgaWYgKHRoaXMuY3VycmVudFBsdWdpbikgdGhpcy5jdXJyZW50UGx1Z2luLmRlc3Ryb3koKTtcbiAgICB0aGlzLmN1cnJlbnRQbHVnaW4gPSBuZXcgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbih0aGlzLiRlbGVtZW50LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHBsdWdpbiBvbiB0aGlzIGVsZW1lbnQsIGFzIHdlbGwgYXMgdGhlIHdpbmRvdyByZXNpemUgaGFuZGxlciB0aGF0IHN3aXRjaGVzIHRoZSBwbHVnaW5zIG91dC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY3VycmVudFBsdWdpbi5kZXN0cm95KCk7XG4gICAgJCh3aW5kb3cpLm9mZignLnpmLlJlc3BvbnNpdmVNZW51Jyk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblJlc3BvbnNpdmVNZW51LmRlZmF1bHRzID0ge307XG5cbi8vIFRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgcGx1Z2luIGNsYXNzZXMgd2l0aCB0aGVzZSBwbHVnaW4gaW5zdGFuY2VzLlxudmFyIE1lbnVQbHVnaW5zID0ge1xuICBkcm9wZG93bjoge1xuICAgIGNzc0NsYXNzOiAnZHJvcGRvd24nLFxuICAgIHBsdWdpbjogRm91bmRhdGlvbi5fcGx1Z2luc1snZHJvcGRvd24tbWVudSddIHx8IG51bGxcbiAgfSxcbiBkcmlsbGRvd246IHtcbiAgICBjc3NDbGFzczogJ2RyaWxsZG93bicsXG4gICAgcGx1Z2luOiBGb3VuZGF0aW9uLl9wbHVnaW5zWydkcmlsbGRvd24nXSB8fCBudWxsXG4gIH0sXG4gIGFjY29yZGlvbjoge1xuICAgIGNzc0NsYXNzOiAnYWNjb3JkaW9uLW1lbnUnLFxuICAgIHBsdWdpbjogRm91bmRhdGlvbi5fcGx1Z2luc1snYWNjb3JkaW9uLW1lbnUnXSB8fCBudWxsXG4gIH1cbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihSZXNwb25zaXZlTWVudSwgJ1Jlc3BvbnNpdmVNZW51Jyk7XG5cbn0oalF1ZXJ5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBSZXNwb25zaXZlVG9nZ2xlIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlVG9nZ2xlXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqL1xuXG5jbGFzcyBSZXNwb25zaXZlVG9nZ2xlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGFiIEJhci5cbiAgICogQGNsYXNzXG4gICAqIEBmaXJlcyBSZXNwb25zaXZlVG9nZ2xlI2luaXRcbiAgICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgLSBqUXVlcnkgb2JqZWN0IHRvIGF0dGFjaCB0YWIgYmFyIGZ1bmN0aW9uYWxpdHkgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgUmVzcG9uc2l2ZVRvZ2dsZS5kZWZhdWx0cywgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnUmVzcG9uc2l2ZVRvZ2dsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB0YWIgYmFyIGJ5IGZpbmRpbmcgdGhlIHRhcmdldCBlbGVtZW50LCB0b2dnbGluZyBlbGVtZW50LCBhbmQgcnVubmluZyB1cGRhdGUoKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB2YXIgdGFyZ2V0SUQgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3Jlc3BvbnNpdmUtdG9nZ2xlJyk7XG4gICAgaWYgKCF0YXJnZXRJRCkge1xuICAgICAgY29uc29sZS5lcnJvcignWW91ciB0YWIgYmFyIG5lZWRzIGFuIElEIG9mIGEgTWVudSBhcyB0aGUgdmFsdWUgb2YgZGF0YS10YWItYmFyLicpO1xuICAgIH1cblxuICAgIHRoaXMuJHRhcmdldE1lbnUgPSAkKGAjJHt0YXJnZXRJRH1gKTtcbiAgICB0aGlzLiR0b2dnbGVyID0gdGhpcy4kZWxlbWVudC5maW5kKCdbZGF0YS10b2dnbGVdJykuZmlsdGVyKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRhcmdldCA9ICQodGhpcykuZGF0YSgndG9nZ2xlJyk7XG4gICAgICByZXR1cm4gKHRhcmdldCA9PT0gdGFyZ2V0SUQgfHwgdGFyZ2V0ID09PSBcIlwiKTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCB0aGlzLiR0YXJnZXRNZW51LmRhdGEoKSk7XG5cbiAgICAvLyBJZiB0aGV5IHdlcmUgc2V0LCBwYXJzZSB0aGUgYW5pbWF0aW9uIGNsYXNzZXNcbiAgICBpZih0aGlzLm9wdGlvbnMuYW5pbWF0ZSkge1xuICAgICAgbGV0IGlucHV0ID0gdGhpcy5vcHRpb25zLmFuaW1hdGUuc3BsaXQoJyAnKTtcblxuICAgICAgdGhpcy5hbmltYXRpb25JbiA9IGlucHV0WzBdO1xuICAgICAgdGhpcy5hbmltYXRpb25PdXQgPSBpbnB1dFsxXSB8fCBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgdGFiIGJhciB0byB3b3JrLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX3VwZGF0ZU1xSGFuZGxlciA9IHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl91cGRhdGVNcUhhbmRsZXIpO1xuXG4gICAgdGhpcy4kdG9nZ2xlci5vbignY2xpY2suemYucmVzcG9uc2l2ZVRvZ2dsZScsIHRoaXMudG9nZ2xlTWVudS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIGN1cnJlbnQgbWVkaWEgcXVlcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0YWIgYmFyIHNob3VsZCBiZSB2aXNpYmxlIG9yIGhpZGRlbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlKCkge1xuICAgIC8vIE1vYmlsZVxuICAgIGlmICghRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmF0TGVhc3QodGhpcy5vcHRpb25zLmhpZGVGb3IpKSB7XG4gICAgICB0aGlzLiRlbGVtZW50LnNob3coKTtcbiAgICAgIHRoaXMuJHRhcmdldE1lbnUuaGlkZSgpO1xuICAgIH1cblxuICAgIC8vIERlc2t0b3BcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuaGlkZSgpO1xuICAgICAgdGhpcy4kdGFyZ2V0TWVudS5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGVsZW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRhYiBiYXIuIFRoZSB0b2dnbGUgb25seSBoYXBwZW5zIGlmIHRoZSBzY3JlZW4gaXMgc21hbGwgZW5vdWdoIHRvIGFsbG93IGl0LlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFJlc3BvbnNpdmVUb2dnbGUjdG9nZ2xlZFxuICAgKi9cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICBpZiAoIUZvdW5kYXRpb24uTWVkaWFRdWVyeS5hdExlYXN0KHRoaXMub3B0aW9ucy5oaWRlRm9yKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyB3aGVuIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSB0YWIgYmFyIHRvZ2dsZXMuXG4gICAgICAgKiBAZXZlbnQgUmVzcG9uc2l2ZVRvZ2dsZSN0b2dnbGVkXG4gICAgICAgKi9cbiAgICAgIGlmKHRoaXMub3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLiR0YXJnZXRNZW51LmlzKCc6aGlkZGVuJykpIHtcbiAgICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4odGhpcy4kdGFyZ2V0TWVudSwgdGhpcy5hbmltYXRpb25JbiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd0b2dnbGVkLnpmLnJlc3BvbnNpdmVUb2dnbGUnKTtcbiAgICAgICAgICAgIHRoaXMuJHRhcmdldE1lbnUuZmluZCgnW2RhdGEtbXV0YXRlXScpLnRyaWdnZXJIYW5kbGVyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiR0YXJnZXRNZW51LCB0aGlzLmFuaW1hdGlvbk91dCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCd0b2dnbGVkLnpmLnJlc3BvbnNpdmVUb2dnbGUnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuJHRhcmdldE1lbnUudG9nZ2xlKDApO1xuICAgICAgICB0aGlzLiR0YXJnZXRNZW51LmZpbmQoJ1tkYXRhLW11dGF0ZV0nKS50cmlnZ2VyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigndG9nZ2xlZC56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG4gICAgdGhpcy4kdG9nZ2xlci5vZmYoJy56Zi5yZXNwb25zaXZlVG9nZ2xlJyk7XG5cbiAgICAkKHdpbmRvdykub2ZmKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCB0aGlzLl91cGRhdGVNcUhhbmRsZXIpO1xuXG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblJlc3BvbnNpdmVUb2dnbGUuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBhZnRlciB3aGljaCB0aGUgbWVudSBpcyBhbHdheXMgc2hvd24sIGFuZCB0aGUgdGFiIGJhciBpcyBoaWRkZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGhpZGVGb3I6ICdtZWRpdW0nLFxuXG4gIC8qKlxuICAgKiBUbyBkZWNpZGUgaWYgdGhlIHRvZ2dsZSBzaG91bGQgYmUgYW5pbWF0ZWQgb3Igbm90LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYW5pbWF0ZTogZmFsc2Vcbn07XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihSZXNwb25zaXZlVG9nZ2xlLCAnUmVzcG9uc2l2ZVRvZ2dsZScpO1xuXG59KGpRdWVyeSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbiFmdW5jdGlvbigkKSB7XG5cbi8qKlxuICogUmV2ZWFsIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXZlYWxcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuYm94XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uIGlmIHVzaW5nIGFuaW1hdGlvbnNcbiAqL1xuXG5jbGFzcyBSZXZlYWwge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXZlYWwuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gdXNlIGZvciB0aGUgbW9kYWwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgUmV2ZWFsLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnUmV2ZWFsJyk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC5yZWdpc3RlcignUmV2ZWFsJywge1xuICAgICAgJ0VOVEVSJzogJ29wZW4nLFxuICAgICAgJ1NQQUNFJzogJ29wZW4nLFxuICAgICAgJ0VTQ0FQRSc6ICdjbG9zZScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIG1vZGFsIGJ5IGFkZGluZyB0aGUgb3ZlcmxheSBhbmQgY2xvc2UgYnV0dG9ucywgKGlmIHNlbGVjdGVkKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHRoaXMuaWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJyk7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkID0ge21xOiBGb3VuZGF0aW9uLk1lZGlhUXVlcnkuY3VycmVudH07XG4gICAgdGhpcy5pc01vYmlsZSA9IG1vYmlsZVNuaWZmKCk7XG5cbiAgICB0aGlzLiRhbmNob3IgPSAkKGBbZGF0YS1vcGVuPVwiJHt0aGlzLmlkfVwiXWApLmxlbmd0aCA/ICQoYFtkYXRhLW9wZW49XCIke3RoaXMuaWR9XCJdYCkgOiAkKGBbZGF0YS10b2dnbGU9XCIke3RoaXMuaWR9XCJdYCk7XG4gICAgdGhpcy4kYW5jaG9yLmF0dHIoe1xuICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmlkLFxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiB0cnVlLFxuICAgICAgJ3RhYmluZGV4JzogMFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5mdWxsU2NyZWVuIHx8IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwnKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmZ1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgdGhpcy5vcHRpb25zLm92ZXJsYXkgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5ICYmICF0aGlzLiRvdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5ID0gdGhpcy5fbWFrZU92ZXJsYXkodGhpcy5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKHtcbiAgICAgICAgJ3JvbGUnOiAnZGlhbG9nJyxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgICAgJ2RhdGEteWV0aS1ib3gnOiB0aGlzLmlkLFxuICAgICAgICAnZGF0YS1yZXNpemUnOiB0aGlzLmlkXG4gICAgfSk7XG5cbiAgICBpZih0aGlzLiRvdmVybGF5KSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmRldGFjaCgpLmFwcGVuZFRvKHRoaXMuJG92ZXJsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmRldGFjaCgpLmFwcGVuZFRvKCQodGhpcy5vcHRpb25zLmFwcGVuZFRvKSk7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCd3aXRob3V0LW92ZXJsYXknKTtcbiAgICB9XG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluayAmJiB3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gKCBgIyR7dGhpcy5pZH1gKSkge1xuICAgICAgJCh3aW5kb3cpLm9uZSgnbG9hZC56Zi5yZXZlYWwnLCB0aGlzLm9wZW4uYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb3ZlcmxheSBkaXYgdG8gZGlzcGxheSBiZWhpbmQgdGhlIG1vZGFsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VPdmVybGF5KCkge1xuICAgIHJldHVybiAkKCc8ZGl2PjwvZGl2PicpXG4gICAgICAuYWRkQ2xhc3MoJ3JldmVhbC1vdmVybGF5JylcbiAgICAgIC5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuYXBwZW5kVG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgcG9zaXRpb24gb2YgbW9kYWxcbiAgICogVE9ETzogIEZpZ3VyZSBvdXQgaWYgd2UgYWN0dWFsbHkgbmVlZCB0byBjYWNoZSB0aGVzZSB2YWx1ZXMgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVQb3NpdGlvbigpIHtcbiAgICB2YXIgd2lkdGggPSB0aGlzLiRlbGVtZW50Lm91dGVyV2lkdGgoKTtcbiAgICB2YXIgb3V0ZXJXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLiRlbGVtZW50Lm91dGVySGVpZ2h0KCk7XG4gICAgdmFyIG91dGVySGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgIHZhciBsZWZ0LCB0b3A7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5oT2Zmc2V0ID09PSAnYXV0bycpIHtcbiAgICAgIGxlZnQgPSBwYXJzZUludCgob3V0ZXJXaWR0aCAtIHdpZHRoKSAvIDIsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IHBhcnNlSW50KHRoaXMub3B0aW9ucy5oT2Zmc2V0LCAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMudk9mZnNldCA9PT0gJ2F1dG8nKSB7XG4gICAgICBpZiAoaGVpZ2h0ID4gb3V0ZXJIZWlnaHQpIHtcbiAgICAgICAgdG9wID0gcGFyc2VJbnQoTWF0aC5taW4oMTAwLCBvdXRlckhlaWdodCAvIDEwKSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gcGFyc2VJbnQoKG91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDQsIDEwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9wID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLnZPZmZzZXQsIDEwKTtcbiAgICB9XG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe3RvcDogdG9wICsgJ3B4J30pO1xuICAgIC8vIG9ubHkgd29ycnkgYWJvdXQgbGVmdCBpZiB3ZSBkb24ndCBoYXZlIGFuIG92ZXJsYXkgb3Igd2UgaGF2ZWEgIGhvcml6b250YWwgb2Zmc2V0LFxuICAgIC8vIG90aGVyd2lzZSB3ZSdyZSBwZXJmZWN0bHkgaW4gdGhlIG1pZGRsZVxuICAgIGlmKCF0aGlzLiRvdmVybGF5IHx8ICh0aGlzLm9wdGlvbnMuaE9mZnNldCAhPT0gJ2F1dG8nKSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe2xlZnQ6IGxlZnQgKyAncHgnfSk7XG4gICAgICB0aGlzLiRlbGVtZW50LmNzcyh7bWFyZ2luOiAnMHB4J30pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBtb2RhbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQub24oe1xuICAgICAgJ29wZW4uemYudHJpZ2dlcic6IHRoaXMub3Blbi5iaW5kKHRoaXMpLFxuICAgICAgJ2Nsb3NlLnpmLnRyaWdnZXInOiAoZXZlbnQsICRlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy4kZWxlbWVudFswXSkgfHxcbiAgICAgICAgICAgICgkKGV2ZW50LnRhcmdldCkucGFyZW50cygnW2RhdGEtY2xvc2FibGVdJylbMF0gPT09ICRlbGVtZW50KSkgeyAvLyBvbmx5IGNsb3NlIHJldmVhbCB3aGVuIGl0J3MgZXhwbGljaXRseSBjYWxsZWRcbiAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZS5hcHBseSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAncmVzaXplbWUuemYudHJpZ2dlcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICBfdGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLiRhbmNob3IubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRhbmNob3Iub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrICYmIHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICB0aGlzLiRvdmVybGF5Lm9mZignLnpmLnJldmVhbCcpLm9uKCdjbGljay56Zi5yZXZlYWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gX3RoaXMuJGVsZW1lbnRbMF0gfHxcbiAgICAgICAgICAkLmNvbnRhaW5zKF90aGlzLiRlbGVtZW50WzBdLCBlLnRhcmdldCkgfHxcbiAgICAgICAgICAgICEkLmNvbnRhaW5zKGRvY3VtZW50LCBlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgJCh3aW5kb3cpLm9uKGBwb3BzdGF0ZS56Zi5yZXZlYWw6JHt0aGlzLmlkfWAsIHRoaXMuX2hhbmRsZVN0YXRlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG1vZGFsIG1ldGhvZHMgb24gYmFjay9mb3J3YXJkIGJ1dHRvbiBjbGlja3Mgb3IgYW55IG90aGVyIGV2ZW50IHRoYXQgdHJpZ2dlcnMgcG9wc3RhdGUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlU3RhdGUoZSkge1xuICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAoICcjJyArIHRoaXMuaWQpICYmICF0aGlzLmlzQWN0aXZlKXsgdGhpcy5vcGVuKCk7IH1cbiAgICBlbHNleyB0aGlzLmNsb3NlKCk7IH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBtb2RhbCBjb250cm9sbGVkIGJ5IGB0aGlzLiRhbmNob3JgLCBhbmQgY2xvc2VzIGFsbCBvdGhlcnMgYnkgZGVmYXVsdC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBSZXZlYWwjY2xvc2VtZVxuICAgKiBAZmlyZXMgUmV2ZWFsI29wZW5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWVwTGluaykge1xuICAgICAgdmFyIGhhc2ggPSBgIyR7dGhpcy5pZH1gO1xuXG4gICAgICBpZiAod2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBoYXNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIC8vIE1ha2UgZWxlbWVudHMgaW52aXNpYmxlLCBidXQgcmVtb3ZlIGRpc3BsYXk6IG5vbmUgc28gd2UgY2FuIGdldCBzaXplIGFuZCBwb3NpdGlvbmluZ1xuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLmNzcyh7ICd2aXNpYmlsaXR5JzogJ2hpZGRlbicgfSlcbiAgICAgICAgLnNob3coKVxuICAgICAgICAuc2Nyb2xsVG9wKDApO1xuICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5jc3Moeyd2aXNpYmlsaXR5JzogJ2hpZGRlbid9KS5zaG93KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5oaWRlKClcbiAgICAgIC5jc3MoeyAndmlzaWJpbGl0eSc6ICcnIH0pO1xuXG4gICAgaWYodGhpcy4kb3ZlcmxheSkge1xuICAgICAgdGhpcy4kb3ZlcmxheS5jc3Moeyd2aXNpYmlsaXR5JzogJyd9KS5oaWRlKCk7XG4gICAgICBpZih0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYXN0JykpIHtcbiAgICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnZmFzdCcpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdzbG93JykpIHtcbiAgICAgICAgdGhpcy4kb3ZlcmxheS5hZGRDbGFzcygnc2xvdycpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGVPcGVuZWQpIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBtb2RhbCBvcGVucy5cbiAgICAgICAqIENsb3NlcyBhbnkgb3RoZXIgbW9kYWxzIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuXG4gICAgICAgKiBAZXZlbnQgUmV2ZWFsI2Nsb3NlbWVcbiAgICAgICAqL1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdjbG9zZW1lLnpmLnJldmVhbCcsIHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBhZGRSZXZlYWxPcGVuQ2xhc3NlcygpIHtcbiAgICAgIGlmIChfdGhpcy5pc01vYmlsZSkge1xuICAgICAgICBpZighX3RoaXMub3JpZ2luYWxTY3JvbGxQb3MpIHtcbiAgICAgICAgICBfdGhpcy5vcmlnaW5hbFNjcm9sbFBvcyA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICAkKCdodG1sLCBib2R5JykuYWRkQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdpcy1yZXZlYWwtb3BlbicpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBNb3Rpb24gVUkgbWV0aG9kIG9mIHJldmVhbFxuICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uSW4pIHtcbiAgICAgIGZ1bmN0aW9uIGFmdGVyQW5pbWF0aW9uKCl7XG4gICAgICAgIF90aGlzLiRlbGVtZW50XG4gICAgICAgICAgLmF0dHIoe1xuICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2UsXG4gICAgICAgICAgICAndGFiaW5kZXgnOiAtMVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvY3VzKCk7XG4gICAgICAgIGFkZFJldmVhbE9wZW5DbGFzc2VzKCk7XG4gICAgICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQudHJhcEZvY3VzKF90aGlzLiRlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4odGhpcy4kb3ZlcmxheSwgJ2ZhZGUtaW4nKTtcbiAgICAgIH1cbiAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVJbih0aGlzLiRlbGVtZW50LCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uSW4sICgpID0+IHtcbiAgICAgICAgaWYodGhpcy4kZWxlbWVudCkgeyAvLyBwcm90ZWN0IGFnYWluc3Qgb2JqZWN0IGhhdmluZyBiZWVuIHJlbW92ZWRcbiAgICAgICAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzID0gRm91bmRhdGlvbi5LZXlib2FyZC5maW5kRm9jdXNhYmxlKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICAgIGFmdGVyQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBqUXVlcnkgbWV0aG9kIG9mIHJldmVhbFxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuc2hvdygwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVsZW1lbnQuc2hvdyh0aGlzLm9wdGlvbnMuc2hvd0RlbGF5KTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgYWNjZXNzaWJpbGl0eVxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5hdHRyKHtcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2UsXG4gICAgICAgICd0YWJpbmRleCc6IC0xXG4gICAgICB9KVxuICAgICAgLmZvY3VzKCk7XG4gICAgRm91bmRhdGlvbi5LZXlib2FyZC50cmFwRm9jdXModGhpcy4kZWxlbWVudCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBtb2RhbCBoYXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC5cbiAgICAgKiBAZXZlbnQgUmV2ZWFsI29wZW5cbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ29wZW4uemYucmV2ZWFsJyk7XG5cbiAgICBhZGRSZXZlYWxPcGVuQ2xhc3NlcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9leHRyYUhhbmRsZXJzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBleHRyYSBldmVudCBoYW5kbGVycyBmb3IgdGhlIGJvZHkgYW5kIHdpbmRvdyBpZiBuZWNlc3NhcnkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXh0cmFIYW5kbGVycygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmKCF0aGlzLiRlbGVtZW50KSB7IHJldHVybjsgfSAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGNsZWFudXAsIGRvbid0IGZyZWFrIG91dFxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMgPSBGb3VuZGF0aW9uLktleWJvYXJkLmZpbmRGb2N1c2FibGUodGhpcy4kZWxlbWVudCk7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vdmVybGF5ICYmIHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgJiYgIXRoaXMub3B0aW9ucy5mdWxsU2NyZWVuKSB7XG4gICAgICAkKCdib2R5Jykub24oJ2NsaWNrLnpmLnJldmVhbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBfdGhpcy4kZWxlbWVudFswXSB8fFxuICAgICAgICAgICQuY29udGFpbnMoX3RoaXMuJGVsZW1lbnRbMF0sIGUudGFyZ2V0KSB8fFxuICAgICAgICAgICAgISQuY29udGFpbnMoZG9jdW1lbnQsIGUudGFyZ2V0KSkgeyByZXR1cm47IH1cbiAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkVzYykge1xuICAgICAgJCh3aW5kb3cpLm9uKCdrZXlkb3duLnpmLnJldmVhbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1JldmVhbCcsIHtcbiAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgIF90aGlzLiRhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gbG9jayBmb2N1cyB3aXRoaW4gbW9kYWwgd2hpbGUgdGFiYmluZ1xuICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uemYucmV2ZWFsJywgZnVuY3Rpb24oZSkge1xuICAgICAgdmFyICR0YXJnZXQgPSAkKHRoaXMpO1xuICAgICAgLy8gaGFuZGxlIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Ym9hcmQgdXRpbFxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1JldmVhbCcsIHtcbiAgICAgICAgb3BlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKF90aGlzLiRlbGVtZW50LmZpbmQoJzpmb2N1cycpLmlzKF90aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLWNsb3NlXScpKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgLy8gc2V0IGZvY3VzIGJhY2sgdG8gYW5jaG9yIGlmIGNsb3NlIGJ1dHRvbiBoYXMgYmVlbiBhY3RpdmF0ZWRcbiAgICAgICAgICAgICAgX3RoaXMuJGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgkdGFyZ2V0LmlzKF90aGlzLmZvY3VzYWJsZUVsZW1lbnRzKSkgeyAvLyBkb250J3QgdHJpZ2dlciBpZiBhY3VhbCBlbGVtZW50IGhhcyBmb2N1cyAoaS5lLiBpbnB1dHMsIGxpbmtzLCAuLi4pXG4gICAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuY2xvc2VPbkVzYykge1xuICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIF90aGlzLiRhbmNob3IuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZWQ6IGZ1bmN0aW9uKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGZpcmVzIFJldmVhbCNjbG9zZWRcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCAhdGhpcy4kZWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gTW90aW9uIFVJIG1ldGhvZCBvZiBoaWRpbmdcbiAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbk91dCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVPdXQodGhpcy4kb3ZlcmxheSwgJ2ZhZGUtb3V0JywgZmluaXNoVXApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZpbmlzaFVwKCk7XG4gICAgICB9XG5cbiAgICAgIEZvdW5kYXRpb24uTW90aW9uLmFuaW1hdGVPdXQodGhpcy4kZWxlbWVudCwgdGhpcy5vcHRpb25zLmFuaW1hdGlvbk91dCk7XG4gICAgfVxuICAgIC8vIGpRdWVyeSBtZXRob2Qgb2YgaGlkaW5nXG4gICAgZWxzZSB7XG5cbiAgICAgIHRoaXMuJGVsZW1lbnQuaGlkZSh0aGlzLm9wdGlvbnMuaGlkZURlbGF5KTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5vdmVybGF5KSB7XG4gICAgICAgIHRoaXMuJG92ZXJsYXkuaGlkZSgwLCBmaW5pc2hVcCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmluaXNoVXAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb25hbHMgdG8gcmVtb3ZlIGV4dHJhIGV2ZW50IGxpc3RlbmVycyBhZGRlZCBvbiBvcGVuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdrZXlkb3duLnpmLnJldmVhbCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJsYXkgJiYgdGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykge1xuICAgICAgJCgnYm9keScpLm9mZignY2xpY2suemYucmV2ZWFsJyk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5vZmYoJ2tleWRvd24uemYucmV2ZWFsJyk7XG5cbiAgICBmdW5jdGlvbiBmaW5pc2hVcCgpIHtcbiAgICAgIGlmIChfdGhpcy5pc01vYmlsZSkge1xuICAgICAgICBpZiAoJCgnLnJldmVhbDp2aXNpYmxlJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJCgnaHRtbCwgYm9keScpLnJlbW92ZUNsYXNzKCdpcy1yZXZlYWwtb3BlbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKF90aGlzLm9yaWdpbmFsU2Nyb2xsUG9zKSB7XG4gICAgICAgICAgJCgnYm9keScpLnNjcm9sbFRvcChfdGhpcy5vcmlnaW5hbFNjcm9sbFBvcyk7XG4gICAgICAgICAgX3RoaXMub3JpZ2luYWxTY3JvbGxQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCQoJy5yZXZlYWw6dmlzaWJsZScpLmxlbmd0aCAgPT09IDApIHtcbiAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlbGVhc2VGb2N1cyhfdGhpcy4kZWxlbWVudCk7XG5cbiAgICAgIF90aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG5cbiAgICAgIC8qKlxuICAgICAgKiBGaXJlcyB3aGVuIHRoZSBtb2RhbCBpcyBkb25lIGNsb3NpbmcuXG4gICAgICAqIEBldmVudCBSZXZlYWwjY2xvc2VkXG4gICAgICAqL1xuICAgICAgX3RoaXMuJGVsZW1lbnQudHJpZ2dlcignY2xvc2VkLnpmLnJldmVhbCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogUmVzZXRzIHRoZSBtb2RhbCBjb250ZW50XG4gICAgKiBUaGlzIHByZXZlbnRzIGEgcnVubmluZyB2aWRlbyB0byBrZWVwIGdvaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gICAgKi9cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlc2V0T25DbG9zZSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5odG1sKHRoaXMuJGVsZW1lbnQuaHRtbCgpKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgIGlmIChfdGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKCcnLCBkb2N1bWVudC50aXRsZSwgd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZShgIyR7dGhpcy5pZH1gLCAnJykpO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcnO1xuICAgICAgIH1cbiAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIG9wZW4vY2xvc2VkIHN0YXRlIG9mIGEgbW9kYWwuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgYSBtb2RhbC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub3ZlcmxheSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5hcHBlbmRUbygkKHRoaXMub3B0aW9ucy5hcHBlbmRUbykpOyAvLyBtb3ZlICRlbGVtZW50IG91dHNpZGUgb2YgJG92ZXJsYXkgdG8gcHJldmVudCBlcnJvciB1bnJlZ2lzdGVyUGx1Z2luKClcbiAgICAgIHRoaXMuJG92ZXJsYXkuaGlkZSgpLm9mZigpLnJlbW92ZSgpO1xuICAgIH1cbiAgICB0aGlzLiRlbGVtZW50LmhpZGUoKS5vZmYoKTtcbiAgICB0aGlzLiRhbmNob3Iub2ZmKCcuemYnKTtcbiAgICAkKHdpbmRvdykub2ZmKGAuemYucmV2ZWFsOiR7dGhpcy5pZH1gKTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfTtcbn1cblxuUmV2ZWFsLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogTW90aW9uLVVJIGNsYXNzIHRvIHVzZSBmb3IgYW5pbWF0ZWQgZWxlbWVudHMuIElmIG5vbmUgdXNlZCwgZGVmYXVsdHMgdG8gc2ltcGxlIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgYW5pbWF0aW9uSW46ICcnLFxuICAvKipcbiAgICogTW90aW9uLVVJIGNsYXNzIHRvIHVzZSBmb3IgYW5pbWF0ZWQgZWxlbWVudHMuIElmIG5vbmUgdXNlZCwgZGVmYXVsdHMgdG8gc2ltcGxlIHNob3cvaGlkZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgYW5pbWF0aW9uT3V0OiAnJyxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBkZWxheSB0aGUgb3BlbmluZyBvZiBhIG1vZGFsIGFmdGVyIGEgY2xpY2sgaWYgbm8gYW5pbWF0aW9uIHVzZWQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc2hvd0RlbGF5OiAwLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIHRvIGRlbGF5IHRoZSBjbG9zaW5nIG9mIGEgbW9kYWwgYWZ0ZXIgYSBjbGljayBpZiBubyBhbmltYXRpb24gdXNlZC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBoaWRlRGVsYXk6IDAsXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBjbGljayBvbiB0aGUgYm9keS9vdmVybGF5IHRvIGNsb3NlIHRoZSBtb2RhbC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBtb2RhbCB0byBjbG9zZSBpZiB0aGUgdXNlciBwcmVzc2VzIHRoZSBgRVNDQVBFYCBrZXkuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGNsb3NlT25Fc2M6IHRydWUsXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3MgbXVsdGlwbGUgbW9kYWxzIHRvIGJlIGRpc3BsYXllZCBhdCBvbmNlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlwbGVPcGVuZWQ6IGZhbHNlLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIG1vZGFsIHNob3VsZCBwdXNoIGRvd24gZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcnxzdHJpbmd9XG4gICAqIEBkZWZhdWx0IGF1dG9cbiAgICovXG4gIHZPZmZzZXQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIERpc3RhbmNlLCBpbiBwaXhlbHMsIHRoZSBtb2RhbCBzaG91bGQgcHVzaCBpbiBmcm9tIHRoZSBzaWRlIG9mIHRoZSBzY3JlZW4uXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcnxzdHJpbmd9XG4gICAqIEBkZWZhdWx0IGF1dG9cbiAgICovXG4gIGhPZmZzZXQ6ICdhdXRvJyxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYmUgZnVsbHNjcmVlbiwgY29tcGxldGVseSBibG9ja2luZyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHZpZXcuIEpTIGNoZWNrcyBmb3IgdGhpcyBhcyB3ZWxsLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFNjcmVlbjogZmFsc2UsXG4gIC8qKlxuICAgKiBQZXJjZW50YWdlIG9mIHNjcmVlbiBoZWlnaHQgdGhlIG1vZGFsIHNob3VsZCBwdXNoIHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgdmlldy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgYnRtT2Zmc2V0UGN0OiAxMCxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gZ2VuZXJhdGUgYW4gb3ZlcmxheSBkaXYsIHdoaWNoIHdpbGwgY292ZXIgdGhlIHZpZXcgd2hlbiBtb2RhbCBvcGVucy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgb3ZlcmxheTogdHJ1ZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gcmVtb3ZlIGFuZCByZWluamVjdCBtYXJrdXAgb24gY2xvc2UuIFNob3VsZCBiZSB0cnVlIGlmIHVzaW5nIHZpZGVvIGVsZW1lbnRzIHcvbyB1c2luZyBwcm92aWRlcidzIGFwaSwgb3RoZXJ3aXNlLCB2aWRlb3Mgd2lsbCBjb250aW51ZSB0byBwbGF5IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVzZXRPbkNsb3NlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgbW9kYWwgdG8gYWx0ZXIgdGhlIHVybCBvbiBvcGVuL2Nsb3NlLCBhbmQgYWxsb3dzIHRoZSB1c2Ugb2YgdGhlIGBiYWNrYCBidXR0b24gdG8gY2xvc2UgbW9kYWxzLiBBTFNPLCBhbGxvd3MgYSBtb2RhbCB0byBhdXRvLW1hbmlhY2FsbHkgb3BlbiBvbiBwYWdlIGxvYWQgSUYgdGhlIGhhc2ggPT09IHRoZSBtb2RhbCdzIHVzZXItc2V0IGlkLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcExpbms6IGZhbHNlLFxuICAgIC8qKlxuICAgKiBBbGxvd3MgdGhlIG1vZGFsIHRvIGFwcGVuZCB0byBjdXN0b20gZGl2LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwiYm9keVwiXG4gICAqL1xuICBhcHBlbmRUbzogXCJib2R5XCJcblxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFJldmVhbCwgJ1JldmVhbCcpO1xuXG5mdW5jdGlvbiBpUGhvbmVTbmlmZigpIHtcbiAgcmV0dXJuIC9pUChhZHxob25lfG9kKS4qT1MvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xufVxuXG5mdW5jdGlvbiBhbmRyb2lkU25pZmYoKSB7XG4gIHJldHVybiAvQW5kcm9pZC8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59XG5cbmZ1bmN0aW9uIG1vYmlsZVNuaWZmKCkge1xuICByZXR1cm4gaVBob25lU25pZmYoKSB8fCBhbmRyb2lkU25pZmYoKTtcbn1cblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFNsaWRlciBtb2R1bGUuXG4gKiBAbW9kdWxlIGZvdW5kYXRpb24uc2xpZGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50b3VjaFxuICovXG5cbmNsYXNzIFNsaWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgc2xpZGVyIGNvbnRyb2wuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGEgc2xpZGVyIGNvbnRyb2wuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU2xpZGVyLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdTbGlkZXInKTtcbiAgICBGb3VuZGF0aW9uLktleWJvYXJkLnJlZ2lzdGVyKCdTbGlkZXInLCB7XG4gICAgICAnbHRyJzoge1xuICAgICAgICAnQVJST1dfUklHSFQnOiAnaW5jcmVhc2UnLFxuICAgICAgICAnQVJST1dfVVAnOiAnaW5jcmVhc2UnLFxuICAgICAgICAnQVJST1dfRE9XTic6ICdkZWNyZWFzZScsXG4gICAgICAgICdBUlJPV19MRUZUJzogJ2RlY3JlYXNlJyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX1JJR0hUJzogJ2luY3JlYXNlX2Zhc3QnLFxuICAgICAgICAnU0hJRlRfQVJST1dfVVAnOiAnaW5jcmVhc2VfZmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19ET1dOJzogJ2RlY3JlYXNlX2Zhc3QnLFxuICAgICAgICAnU0hJRlRfQVJST1dfTEVGVCc6ICdkZWNyZWFzZV9mYXN0J1xuICAgICAgfSxcbiAgICAgICdydGwnOiB7XG4gICAgICAgICdBUlJPV19MRUZUJzogJ2luY3JlYXNlJyxcbiAgICAgICAgJ0FSUk9XX1JJR0hUJzogJ2RlY3JlYXNlJyxcbiAgICAgICAgJ1NISUZUX0FSUk9XX0xFRlQnOiAnaW5jcmVhc2VfZmFzdCcsXG4gICAgICAgICdTSElGVF9BUlJPV19SSUdIVCc6ICdkZWNyZWFzZV9mYXN0J1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpbGl6ZXMgdGhlIHBsdWdpbiBieSByZWFkaW5nL3NldHRpbmcgYXR0cmlidXRlcywgY3JlYXRpbmcgY29sbGVjdGlvbnMgYW5kIHNldHRpbmcgdGhlIGluaXRpYWwgcG9zaXRpb24gb2YgdGhlIGhhbmRsZShzKS5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdCgpIHtcbiAgICB0aGlzLmlucHV0cyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKTtcbiAgICB0aGlzLmhhbmRsZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ1tkYXRhLXNsaWRlci1oYW5kbGVdJyk7XG5cbiAgICB0aGlzLiRoYW5kbGUgPSB0aGlzLmhhbmRsZXMuZXEoMCk7XG4gICAgdGhpcy4kaW5wdXQgPSB0aGlzLmlucHV0cy5sZW5ndGggPyB0aGlzLmlucHV0cy5lcSgwKSA6ICQoYCMke3RoaXMuJGhhbmRsZS5hdHRyKCdhcmlhLWNvbnRyb2xzJyl9YCk7XG4gICAgdGhpcy4kZmlsbCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtc2xpZGVyLWZpbGxdJykuY3NzKHRoaXMub3B0aW9ucy52ZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJywgMCk7XG5cbiAgICB2YXIgaXNEYmwgPSBmYWxzZSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcyh0aGlzLm9wdGlvbnMuZGlzYWJsZWRDbGFzcykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5kaXNhYmxlZENsYXNzKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlucHV0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaW5wdXRzID0gJCgpLmFkZCh0aGlzLiRpbnB1dCk7XG4gICAgICB0aGlzLm9wdGlvbnMuYmluZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SW5pdEF0dHIoMCk7XG5cbiAgICBpZiAodGhpcy5oYW5kbGVzWzFdKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQgPSB0cnVlO1xuICAgICAgdGhpcy4kaGFuZGxlMiA9IHRoaXMuaGFuZGxlcy5lcSgxKTtcbiAgICAgIHRoaXMuJGlucHV0MiA9IHRoaXMuaW5wdXRzLmxlbmd0aCA+IDEgPyB0aGlzLmlucHV0cy5lcSgxKSA6ICQoYCMke3RoaXMuJGhhbmRsZTIuYXR0cignYXJpYS1jb250cm9scycpfWApO1xuXG4gICAgICBpZiAoIXRoaXMuaW5wdXRzWzFdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzID0gdGhpcy5pbnB1dHMuYWRkKHRoaXMuJGlucHV0Mik7XG4gICAgICB9XG4gICAgICBpc0RibCA9IHRydWU7XG5cbiAgICAgIC8vIHRoaXMuJGhhbmRsZS50cmlnZ2VySGFuZGxlcignY2xpY2suemYuc2xpZGVyJyk7XG4gICAgICB0aGlzLl9zZXRJbml0QXR0cigxKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgaGFuZGxlIHBvc2l0aW9uc1xuICAgIHRoaXMuc2V0SGFuZGxlcygpO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICBzZXRIYW5kbGVzKCkge1xuICAgIGlmKHRoaXMuaGFuZGxlc1sxXSkge1xuICAgICAgdGhpcy5fc2V0SGFuZGxlUG9zKHRoaXMuJGhhbmRsZSwgdGhpcy5pbnB1dHMuZXEoMCkudmFsKCksIHRydWUsICgpID0+IHtcbiAgICAgICAgdGhpcy5fc2V0SGFuZGxlUG9zKHRoaXMuJGhhbmRsZTIsIHRoaXMuaW5wdXRzLmVxKDEpLnZhbCgpLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRIYW5kbGVQb3ModGhpcy4kaGFuZGxlLCB0aGlzLmlucHV0cy5lcSgwKS52YWwoKSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX3JlZmxvdygpIHtcbiAgICB0aGlzLnNldEhhbmRsZXMoKTtcbiAgfVxuICAvKipcbiAgKiBAZnVuY3Rpb25cbiAgKiBAcHJpdmF0ZVxuICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIGZsb2F0aW5nIHBvaW50ICh0aGUgdmFsdWUpIHRvIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRvIGEgcmVsYXRpdmUgcG9zaXRpb24gb24gdGhlIHNsaWRlciAodGhlIGludmVyc2Ugb2YgX3ZhbHVlKVxuICAqL1xuICBfcGN0T2ZCYXIodmFsdWUpIHtcbiAgICB2YXIgcGN0T2ZCYXIgPSBwZXJjZW50KHZhbHVlIC0gdGhpcy5vcHRpb25zLnN0YXJ0LCB0aGlzLm9wdGlvbnMuZW5kIC0gdGhpcy5vcHRpb25zLnN0YXJ0KVxuXG4gICAgc3dpdGNoKHRoaXMub3B0aW9ucy5wb3NpdGlvblZhbHVlRnVuY3Rpb24pIHtcbiAgICBjYXNlIFwicG93XCI6XG4gICAgICBwY3RPZkJhciA9IHRoaXMuX2xvZ1RyYW5zZm9ybShwY3RPZkJhcik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibG9nXCI6XG4gICAgICBwY3RPZkJhciA9IHRoaXMuX3Bvd1RyYW5zZm9ybShwY3RPZkJhcik7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcGN0T2ZCYXIudG9GaXhlZCgyKVxuICB9XG5cbiAgLyoqXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gcGN0T2ZCYXIgLSBmbG9hdGluZyBwb2ludCwgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBzbGlkZXIgKHR5cGljYWxseSBiZXR3ZWVuIDAtMSkgdG8gYmUgdHJhbnNmb3JtZWQgdG8gYSB2YWx1ZVxuICAqL1xuICBfdmFsdWUocGN0T2ZCYXIpIHtcbiAgICBzd2l0Y2godGhpcy5vcHRpb25zLnBvc2l0aW9uVmFsdWVGdW5jdGlvbikge1xuICAgIGNhc2UgXCJwb3dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fcG93VHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgIHBjdE9mQmFyID0gdGhpcy5fbG9nVHJhbnNmb3JtKHBjdE9mQmFyKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdmFsdWUgPSAodGhpcy5vcHRpb25zLmVuZCAtIHRoaXMub3B0aW9ucy5zdGFydCkgKiBwY3RPZkJhciArIHRoaXMub3B0aW9ucy5zdGFydDtcblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgLSBmbG9hdGluZyBwb2ludCAodHlwaWNhbGx5IGJldHdlZW4gMC0xKSB0byBiZSB0cmFuc2Zvcm1lZCB1c2luZyB0aGUgbG9nIGZ1bmN0aW9uXG4gICovXG4gIF9sb2dUcmFuc2Zvcm0odmFsdWUpIHtcbiAgICByZXR1cm4gYmFzZUxvZyh0aGlzLm9wdGlvbnMubm9uTGluZWFyQmFzZSwgKCh2YWx1ZSoodGhpcy5vcHRpb25zLm5vbkxpbmVhckJhc2UtMSkpKzEpKVxuICB9XG5cbiAgLyoqXG4gICogQGZ1bmN0aW9uXG4gICogQHByaXZhdGVcbiAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgLSBmbG9hdGluZyBwb2ludCAodHlwaWNhbGx5IGJldHdlZW4gMC0xKSB0byBiZSB0cmFuc2Zvcm1lZCB1c2luZyB0aGUgcG93ZXIgZnVuY3Rpb25cbiAgKi9cbiAgX3Bvd1RyYW5zZm9ybSh2YWx1ZSkge1xuICAgIHJldHVybiAoTWF0aC5wb3codGhpcy5vcHRpb25zLm5vbkxpbmVhckJhc2UsIHZhbHVlKSAtIDEpIC8gKHRoaXMub3B0aW9ucy5ub25MaW5lYXJCYXNlIC0gMSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgaGFuZGxlIGFuZCBmaWxsIGJhci5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaG5kbCAtIHRoZSBzZWxlY3RlZCBoYW5kbGUgdG8gbW92ZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxvY2F0aW9uIC0gZmxvYXRpbmcgcG9pbnQgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMgb2YgdGhlIHNsaWRlciBiYXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlyZSBvbiBjb21wbGV0aW9uLlxuICAgKiBAZmlyZXMgU2xpZGVyI21vdmVkXG4gICAqIEBmaXJlcyBTbGlkZXIjY2hhbmdlZFxuICAgKi9cbiAgX3NldEhhbmRsZVBvcygkaG5kbCwgbG9jYXRpb24sIG5vSW52ZXJ0LCBjYikge1xuICAgIC8vIGRvbid0IG1vdmUgaWYgdGhlIHNsaWRlciBoYXMgYmVlbiBkaXNhYmxlZCBzaW5jZSBpdHMgaW5pdGlhbGl6YXRpb25cbiAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcyh0aGlzLm9wdGlvbnMuZGlzYWJsZWRDbGFzcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9taWdodCBuZWVkIHRvIGFsdGVyIHRoYXQgc2xpZ2h0bHkgZm9yIGJhcnMgdGhhdCB3aWxsIGhhdmUgb2RkIG51bWJlciBzZWxlY3Rpb25zLlxuICAgIGxvY2F0aW9uID0gcGFyc2VGbG9hdChsb2NhdGlvbik7Ly9vbiBpbnB1dCBjaGFuZ2UgZXZlbnRzLCBjb252ZXJ0IHN0cmluZyB0byBudW1iZXIuLi5ncnVtYmxlLlxuXG4gICAgLy8gcHJldmVudCBzbGlkZXIgZnJvbSBydW5uaW5nIG91dCBvZiBib3VuZHMsIGlmIHZhbHVlIGV4Y2VlZHMgdGhlIGxpbWl0cyBzZXQgdGhyb3VnaCBvcHRpb25zLCBvdmVycmlkZSB0aGUgdmFsdWUgdG8gbWluL21heFxuICAgIGlmIChsb2NhdGlvbiA8IHRoaXMub3B0aW9ucy5zdGFydCkgeyBsb2NhdGlvbiA9IHRoaXMub3B0aW9ucy5zdGFydDsgfVxuICAgIGVsc2UgaWYgKGxvY2F0aW9uID4gdGhpcy5vcHRpb25zLmVuZCkgeyBsb2NhdGlvbiA9IHRoaXMub3B0aW9ucy5lbmQ7IH1cblxuICAgIHZhciBpc0RibCA9IHRoaXMub3B0aW9ucy5kb3VibGVTaWRlZDtcblxuICAgIGlmIChpc0RibCkgeyAvL3RoaXMgYmxvY2sgaXMgdG8gcHJldmVudCAyIGhhbmRsZXMgZnJvbSBjcm9zc2luZyBlYWNob3RoZXIuIENvdWxkL3Nob3VsZCBiZSBpbXByb3ZlZC5cbiAgICAgIGlmICh0aGlzLmhhbmRsZXMuaW5kZXgoJGhuZGwpID09PSAwKSB7XG4gICAgICAgIHZhciBoMlZhbCA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlMi5hdHRyKCdhcmlhLXZhbHVlbm93JykpO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uID49IGgyVmFsID8gaDJWYWwgLSB0aGlzLm9wdGlvbnMuc3RlcCA6IGxvY2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGgxVmFsID0gcGFyc2VGbG9hdCh0aGlzLiRoYW5kbGUuYXR0cignYXJpYS12YWx1ZW5vdycpKTtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiA8PSBoMVZhbCA/IGgxVmFsICsgdGhpcy5vcHRpb25zLnN0ZXAgOiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL3RoaXMgaXMgZm9yIHNpbmdsZS1oYW5kbGVkIHZlcnRpY2FsIHNsaWRlcnMsIGl0IGFkanVzdHMgdGhlIHZhbHVlIHRvIGFjY291bnQgZm9yIHRoZSBzbGlkZXIgYmVpbmcgXCJ1cHNpZGUtZG93blwiXG4gICAgLy9mb3IgY2xpY2sgYW5kIGRyYWcgZXZlbnRzLCBpdCdzIHdlaXJkIGR1ZSB0byB0aGUgc2NhbGUoLTEsIDEpIGNzcyBwcm9wZXJ0eVxuICAgIGlmICh0aGlzLm9wdGlvbnMudmVydGljYWwgJiYgIW5vSW52ZXJ0KSB7XG4gICAgICBsb2NhdGlvbiA9IHRoaXMub3B0aW9ucy5lbmQgLSBsb2NhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICB2ZXJ0ID0gdGhpcy5vcHRpb25zLnZlcnRpY2FsLFxuICAgICAgICBoT3JXID0gdmVydCA/ICdoZWlnaHQnIDogJ3dpZHRoJyxcbiAgICAgICAgbE9yVCA9IHZlcnQgPyAndG9wJyA6ICdsZWZ0JyxcbiAgICAgICAgaGFuZGxlRGltID0gJGhuZGxbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaE9yV10sXG4gICAgICAgIGVsZW1EaW0gPSB0aGlzLiRlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2hPclddLFxuICAgICAgICAvL3BlcmNlbnRhZ2Ugb2YgYmFyIG1pbi9tYXggdmFsdWUgYmFzZWQgb24gY2xpY2sgb3IgZHJhZyBwb2ludFxuICAgICAgICBwY3RPZkJhciA9IHRoaXMuX3BjdE9mQmFyKGxvY2F0aW9uKSxcbiAgICAgICAgLy9udW1iZXIgb2YgYWN0dWFsIHBpeGVscyB0byBzaGlmdCB0aGUgaGFuZGxlLCBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBvYnRhaW5lZCBhYm92ZVxuICAgICAgICBweFRvTW92ZSA9IChlbGVtRGltIC0gaGFuZGxlRGltKSAqIHBjdE9mQmFyLFxuICAgICAgICAvL3BlcmNlbnRhZ2Ugb2YgYmFyIHRvIHNoaWZ0IHRoZSBoYW5kbGVcbiAgICAgICAgbW92ZW1lbnQgPSAocGVyY2VudChweFRvTW92ZSwgZWxlbURpbSkgKiAxMDApLnRvRml4ZWQodGhpcy5vcHRpb25zLmRlY2ltYWwpO1xuICAgICAgICAvL2ZpeGluZyB0aGUgZGVjaW1hbCB2YWx1ZSBmb3IgdGhlIGxvY2F0aW9uIG51bWJlciwgaXMgcGFzc2VkIHRvIG90aGVyIG1ldGhvZHMgYXMgYSBmaXhlZCBmbG9hdGluZy1wb2ludCB2YWx1ZVxuICAgICAgICBsb2NhdGlvbiA9IHBhcnNlRmxvYXQobG9jYXRpb24udG9GaXhlZCh0aGlzLm9wdGlvbnMuZGVjaW1hbCkpO1xuICAgICAgICAvLyBkZWNsYXJlIGVtcHR5IG9iamVjdCBmb3IgY3NzIGFkanVzdG1lbnRzLCBvbmx5IHVzZWQgd2l0aCAyIGhhbmRsZWQtc2xpZGVyc1xuICAgIHZhciBjc3MgPSB7fTtcblxuICAgIHRoaXMuX3NldFZhbHVlcygkaG5kbCwgbG9jYXRpb24pO1xuXG4gICAgLy8gVE9ETyB1cGRhdGUgdG8gY2FsY3VsYXRlIGJhc2VkIG9uIHZhbHVlcyBzZXQgdG8gcmVzcGVjdGl2ZSBpbnB1dHM/P1xuICAgIGlmIChpc0RibCkge1xuICAgICAgdmFyIGlzTGVmdEhuZGwgPSB0aGlzLmhhbmRsZXMuaW5kZXgoJGhuZGwpID09PSAwLFxuICAgICAgICAgIC8vZW1wdHkgdmFyaWFibGUsIHdpbGwgYmUgdXNlZCBmb3IgbWluLWhlaWdodC93aWR0aCBmb3IgZmlsbCBiYXJcbiAgICAgICAgICBkaW0sXG4gICAgICAgICAgLy9wZXJjZW50YWdlIHcvaCBvZiB0aGUgaGFuZGxlIGNvbXBhcmVkIHRvIHRoZSBzbGlkZXIgYmFyXG4gICAgICAgICAgaGFuZGxlUGN0ID0gIH5+KHBlcmNlbnQoaGFuZGxlRGltLCBlbGVtRGltKSAqIDEwMCk7XG4gICAgICAvL2lmIGxlZnQgaGFuZGxlLCB0aGUgbWF0aCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBpZiBpdCdzIHRoZSByaWdodCBoYW5kbGUsIGFuZCB0aGUgbGVmdC90b3AgcHJvcGVydHkgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIGZpbGwgYmFyXG4gICAgICBpZiAoaXNMZWZ0SG5kbCkge1xuICAgICAgICAvL2xlZnQgb3IgdG9wIHBlcmNlbnRhZ2UgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIGZpbGwgYmFyLlxuICAgICAgICBjc3NbbE9yVF0gPSBgJHttb3ZlbWVudH0lYDtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuXG4gICAgICAgIGRpbSA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlMlswXS5zdHlsZVtsT3JUXSkgLSBtb3ZlbWVudCArIGhhbmRsZVBjdDtcbiAgICAgICAgLy90aGlzIGNhbGxiYWNrIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGVycm9ycyBhbmQgYWxsb3cgdGhlIHByb3BlciBwbGFjZW1lbnQgYW5kIGluaXRpYWxpemF0aW9uIG9mIGEgMi1oYW5kbGVkIHNsaWRlclxuICAgICAgICAvL3BsdXMsIGl0IG1lYW5zIHdlIGRvbid0IGNhcmUgaWYgJ2RpbScgaXNOYU4gb24gaW5pdCwgaXQgd29uJ3QgYmUgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgaWYgKGNiICYmIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgeyBjYigpOyB9Ly90aGlzIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgMiBoYW5kbGVkIHNsaWRlcnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vanVzdCBjYWNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC9ib3R0b20gaGFuZGxlJ3MgbGVmdC90b3AgcHJvcGVydHlcbiAgICAgICAgdmFyIGhhbmRsZVBvcyA9IHBhcnNlRmxvYXQodGhpcy4kaGFuZGxlWzBdLnN0eWxlW2xPclRdKTtcbiAgICAgICAgLy9jYWxjdWxhdGUgdGhlIG5ldyBtaW4taGVpZ2h0L3dpZHRoIGZvciB0aGUgZmlsbCBiYXIuIFVzZSBpc05hTiB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcyBmb3IgbnVtYmVycyA8PSAwXG4gICAgICAgIC8vYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugb2YgbW92ZW1lbnQgb2YgdGhlIGhhbmRsZSBiZWluZyBtYW5pcHVsYXRlZCwgbGVzcyB0aGUgb3Bwb3NpbmcgaGFuZGxlJ3MgbGVmdC90b3AgcG9zaXRpb24sIHBsdXMgdGhlIHBlcmNlbnRhZ2Ugdy9oIG9mIHRoZSBoYW5kbGUgaXRzZWxmXG4gICAgICAgIGRpbSA9IG1vdmVtZW50IC0gKGlzTmFOKGhhbmRsZVBvcykgPyAodGhpcy5vcHRpb25zLmluaXRpYWxTdGFydCAtIHRoaXMub3B0aW9ucy5zdGFydCkvKCh0aGlzLm9wdGlvbnMuZW5kLXRoaXMub3B0aW9ucy5zdGFydCkvMTAwKSA6IGhhbmRsZVBvcykgKyBoYW5kbGVQY3Q7XG4gICAgICB9XG4gICAgICAvLyBhc3NpZ24gdGhlIG1pbi1oZWlnaHQvd2lkdGggdG8gb3VyIGNzcyBvYmplY3RcbiAgICAgIGNzc1tgbWluLSR7aE9yV31gXSA9IGAke2RpbX0lYDtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uZSgnZmluaXNoZWQuemYuYW5pbWF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgaGFuZGxlIGlzIGRvbmUgbW92aW5nLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZXZlbnQgU2xpZGVyI21vdmVkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdtb3ZlZC56Zi5zbGlkZXInLCBbJGhuZGxdKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgIC8vYmVjYXVzZSB3ZSBkb24ndCBrbm93IGV4YWN0bHkgaG93IHRoZSBoYW5kbGUgd2lsbCBiZSBtb3ZlZCwgY2hlY2sgdGhlIGFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIG1vdmUuXG4gICAgdmFyIG1vdmVUaW1lID0gdGhpcy4kZWxlbWVudC5kYXRhKCdkcmFnZ2luZycpID8gMTAwMC82MCA6IHRoaXMub3B0aW9ucy5tb3ZlVGltZTtcblxuICAgIEZvdW5kYXRpb24uTW92ZShtb3ZlVGltZSwgJGhuZGwsIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gYWRqdXN0aW5nIHRoZSBsZWZ0L3RvcCBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlLCBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBjYWxjdWxhdGVkIGFib3ZlXG4gICAgICAvLyBpZiBtb3ZlbWVudCBpc05hTiwgdGhhdCBpcyBiZWNhdXNlIHRoZSBzbGlkZXIgaXMgaGlkZGVuIGFuZCB3ZSBjYW5ub3QgZGV0ZXJtaW5lIGhhbmRsZSB3aWR0aCxcbiAgICAgIC8vIGZhbGwgYmFjayB0byBuZXh0IGJlc3QgZ3Vlc3MuXG4gICAgICBpZiAoaXNOYU4obW92ZW1lbnQpKSB7XG4gICAgICAgICRobmRsLmNzcyhsT3JULCBgJHtwY3RPZkJhciAqIDEwMH0lYCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgJGhuZGwuY3NzKGxPclQsIGAke21vdmVtZW50fSVgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgIC8vaWYgc2luZ2xlLWhhbmRsZWQsIGEgc2ltcGxlIG1ldGhvZCB0byBleHBhbmQgdGhlIGZpbGwgYmFyXG4gICAgICAgIF90aGlzLiRmaWxsLmNzcyhoT3JXLCBgJHtwY3RPZkJhciAqIDEwMH0lYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL290aGVyd2lzZSwgdXNlIHRoZSBjc3Mgb2JqZWN0IHdlIGNyZWF0ZWQgYWJvdmVcbiAgICAgICAgX3RoaXMuJGZpbGwuY3NzKGNzcyk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBub3QgYmVlbiBjaGFuZ2UgZm9yIGEgZ2l2ZW4gdGltZS5cbiAgICAgKiBAZXZlbnQgU2xpZGVyI2NoYW5nZWRcbiAgICAgKi9cbiAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIF90aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZWQuemYuc2xpZGVyJywgWyRobmRsXSk7XG4gICAgfSwgX3RoaXMub3B0aW9ucy5jaGFuZ2VkRGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgYXR0cmlidXRlIGZvciB0aGUgc2xpZGVyIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gaWR4IC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgaGFuZGxlL2lucHV0IHRvIHVzZS5cbiAgICovXG4gIF9zZXRJbml0QXR0cihpZHgpIHtcbiAgICB2YXIgaW5pdFZhbCA9IChpZHggPT09IDAgPyB0aGlzLm9wdGlvbnMuaW5pdGlhbFN0YXJ0IDogdGhpcy5vcHRpb25zLmluaXRpYWxFbmQpXG4gICAgdmFyIGlkID0gdGhpcy5pbnB1dHMuZXEoaWR4KS5hdHRyKCdpZCcpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ3NsaWRlcicpO1xuICAgIHRoaXMuaW5wdXRzLmVxKGlkeCkuYXR0cih7XG4gICAgICAnaWQnOiBpZCxcbiAgICAgICdtYXgnOiB0aGlzLm9wdGlvbnMuZW5kLFxuICAgICAgJ21pbic6IHRoaXMub3B0aW9ucy5zdGFydCxcbiAgICAgICdzdGVwJzogdGhpcy5vcHRpb25zLnN0ZXBcbiAgICB9KTtcbiAgICB0aGlzLmlucHV0cy5lcShpZHgpLnZhbChpbml0VmFsKTtcbiAgICB0aGlzLmhhbmRsZXMuZXEoaWR4KS5hdHRyKHtcbiAgICAgICdyb2xlJzogJ3NsaWRlcicsXG4gICAgICAnYXJpYS1jb250cm9scyc6IGlkLFxuICAgICAgJ2FyaWEtdmFsdWVtYXgnOiB0aGlzLm9wdGlvbnMuZW5kLFxuICAgICAgJ2FyaWEtdmFsdWVtaW4nOiB0aGlzLm9wdGlvbnMuc3RhcnQsXG4gICAgICAnYXJpYS12YWx1ZW5vdyc6IGluaXRWYWwsXG4gICAgICAnYXJpYS1vcmllbnRhdGlvbic6IHRoaXMub3B0aW9ucy52ZXJ0aWNhbCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCcsXG4gICAgICAndGFiaW5kZXgnOiAwXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5wdXQgYW5kIGBhcmlhLXZhbHVlbm93YCB2YWx1ZXMgZm9yIHRoZSBzbGlkZXIgZWxlbWVudC5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaGFuZGxlIC0gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBoYW5kbGUuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWwgLSBmbG9hdGluZyBwb2ludCBvZiB0aGUgbmV3IHZhbHVlLlxuICAgKi9cbiAgX3NldFZhbHVlcygkaGFuZGxlLCB2YWwpIHtcbiAgICB2YXIgaWR4ID0gdGhpcy5vcHRpb25zLmRvdWJsZVNpZGVkID8gdGhpcy5oYW5kbGVzLmluZGV4KCRoYW5kbGUpIDogMDtcbiAgICB0aGlzLmlucHV0cy5lcShpZHgpLnZhbCh2YWwpO1xuICAgICRoYW5kbGUuYXR0cignYXJpYS12YWx1ZW5vdycsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBldmVudHMgb24gdGhlIHNsaWRlciBlbGVtZW50LlxuICAgKiBDYWxjdWxhdGVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgaGFuZGxlLlxuICAgKiBJZiB0aGVyZSBhcmUgdHdvIGhhbmRsZXMgYW5kIHRoZSBiYXIgd2FzIGNsaWNrZWQsIGl0IGRldGVybWluZXMgd2hpY2ggaGFuZGxlIHRvIG1vdmUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gZSAtIHRoZSBgZXZlbnRgIG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaGFuZGxlIC0gdGhlIGN1cnJlbnQgaGFuZGxlIHRvIGNhbGN1bGF0ZSBmb3IsIGlmIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsIC0gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGZvciB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzbGlkZXIuXG4gICAqIFRPRE8gY2xlYW4gdGhpcyB1cCwgdGhlcmUncyBhIGxvdCBvZiByZXBlYXRlZCBjb2RlIGJldHdlZW4gdGhpcyBhbmQgdGhlIF9zZXRIYW5kbGVQb3MgZm4uXG4gICAqL1xuICBfaGFuZGxlRXZlbnQoZSwgJGhhbmRsZSwgdmFsKSB7XG4gICAgdmFyIHZhbHVlLCBoYXNWYWw7XG4gICAgaWYgKCF2YWwpIHsvL2NsaWNrIG9yIGRyYWcgZXZlbnRzXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICAgIHZlcnRpY2FsID0gdGhpcy5vcHRpb25zLnZlcnRpY2FsLFxuICAgICAgICAgIHBhcmFtID0gdmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCcsXG4gICAgICAgICAgZGlyZWN0aW9uID0gdmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JyxcbiAgICAgICAgICBldmVudE9mZnNldCA9IHZlcnRpY2FsID8gZS5wYWdlWSA6IGUucGFnZVgsXG4gICAgICAgICAgaGFsZk9mSGFuZGxlID0gdGhpcy4kaGFuZGxlWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3BhcmFtXSAvIDIsXG4gICAgICAgICAgYmFyRGltID0gdGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwYXJhbV0sXG4gICAgICAgICAgd2luZG93U2Nyb2xsID0gdmVydGljYWwgPyAkKHdpbmRvdykuc2Nyb2xsVG9wKCkgOiAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpO1xuXG5cbiAgICAgIHZhciBlbGVtT2Zmc2V0ID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVtkaXJlY3Rpb25dO1xuXG4gICAgICAvLyB0b3VjaCBldmVudHMgZW11bGF0ZWQgYnkgdGhlIHRvdWNoIHV0aWwgZ2l2ZSBwb3NpdGlvbiByZWxhdGl2ZSB0byBzY3JlZW4sIGFkZCB3aW5kb3cuc2Nyb2xsIHRvIGV2ZW50IGNvb3JkaW5hdGVzLi4uXG4gICAgICAvLyBiZXN0IHdheSB0byBndWVzcyB0aGlzIGlzIHNpbXVsYXRlZCBpcyBpZiBjbGllbnRZID09IHBhZ2VZXG4gICAgICBpZiAoZS5jbGllbnRZID09PSBlLnBhZ2VZKSB7IGV2ZW50T2Zmc2V0ID0gZXZlbnRPZmZzZXQgKyB3aW5kb3dTY3JvbGw7IH1cbiAgICAgIHZhciBldmVudEZyb21CYXIgPSBldmVudE9mZnNldCAtIGVsZW1PZmZzZXQ7XG4gICAgICB2YXIgYmFyWFk7XG4gICAgICBpZiAoZXZlbnRGcm9tQmFyIDwgMCkge1xuICAgICAgICBiYXJYWSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RnJvbUJhciA+IGJhckRpbSkge1xuICAgICAgICBiYXJYWSA9IGJhckRpbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhclhZID0gZXZlbnRGcm9tQmFyO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldFBjdCA9IHBlcmNlbnQoYmFyWFksIGJhckRpbSk7XG5cbiAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWUob2Zmc2V0UGN0KTtcblxuICAgICAgLy8gdHVybiBldmVyeXRoaW5nIGFyb3VuZCBmb3IgUlRMLCB5YXkgbWF0aCFcbiAgICAgIGlmIChGb3VuZGF0aW9uLnJ0bCgpICYmICF0aGlzLm9wdGlvbnMudmVydGljYWwpIHt2YWx1ZSA9IHRoaXMub3B0aW9ucy5lbmQgLSB2YWx1ZTt9XG5cbiAgICAgIHZhbHVlID0gX3RoaXMuX2FkanVzdFZhbHVlKG51bGwsIHZhbHVlKTtcbiAgICAgIC8vYm9vbGVhbiBmbGFnIGZvciB0aGUgc2V0SGFuZGxlUG9zIGZuLCBzcGVjaWZpY2FsbHkgZm9yIHZlcnRpY2FsIHNsaWRlcnNcbiAgICAgIGhhc1ZhbCA9IGZhbHNlO1xuXG4gICAgICBpZiAoISRoYW5kbGUpIHsvL2ZpZ3VyZSBvdXQgd2hpY2ggaGFuZGxlIGl0IGlzLCBwYXNzIGl0IHRvIHRoZSBuZXh0IGZ1bmN0aW9uLlxuICAgICAgICB2YXIgZmlyc3RIbmRsUG9zID0gYWJzUG9zaXRpb24odGhpcy4kaGFuZGxlLCBkaXJlY3Rpb24sIGJhclhZLCBwYXJhbSksXG4gICAgICAgICAgICBzZWNuZEhuZGxQb3MgPSBhYnNQb3NpdGlvbih0aGlzLiRoYW5kbGUyLCBkaXJlY3Rpb24sIGJhclhZLCBwYXJhbSk7XG4gICAgICAgICAgICAkaGFuZGxlID0gZmlyc3RIbmRsUG9zIDw9IHNlY25kSG5kbFBvcyA/IHRoaXMuJGhhbmRsZSA6IHRoaXMuJGhhbmRsZTI7XG4gICAgICB9XG5cbiAgICB9IGVsc2Ugey8vY2hhbmdlIGV2ZW50IG9uIGlucHV0XG4gICAgICB2YWx1ZSA9IHRoaXMuX2FkanVzdFZhbHVlKG51bGwsIHZhbCk7XG4gICAgICBoYXNWYWwgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEhhbmRsZVBvcygkaGFuZGxlLCB2YWx1ZSwgaGFzVmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3RlcyB2YWx1ZSBmb3IgaGFuZGxlIGluIHJlZ2FyZCB0byBzdGVwIHZhbHVlLiByZXR1cm5zIGFkanVzdGVkIHZhbHVlXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGhhbmRsZSAtIHRoZSBzZWxlY3RlZCBoYW5kbGUuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIGFkanVzdC4gdXNlZCBpZiAkaGFuZGxlIGlzIGZhbHN5XG4gICAqL1xuICBfYWRqdXN0VmFsdWUoJGhhbmRsZSwgdmFsdWUpIHtcbiAgICB2YXIgdmFsLFxuICAgICAgc3RlcCA9IHRoaXMub3B0aW9ucy5zdGVwLFxuICAgICAgZGl2ID0gcGFyc2VGbG9hdChzdGVwLzIpLFxuICAgICAgbGVmdCwgcHJldl92YWwsIG5leHRfdmFsO1xuICAgIGlmICghISRoYW5kbGUpIHtcbiAgICAgIHZhbCA9IHBhcnNlRmxvYXQoJGhhbmRsZS5hdHRyKCdhcmlhLXZhbHVlbm93JykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhbCA9IHZhbHVlO1xuICAgIH1cbiAgICBsZWZ0ID0gdmFsICUgc3RlcDtcbiAgICBwcmV2X3ZhbCA9IHZhbCAtIGxlZnQ7XG4gICAgbmV4dF92YWwgPSBwcmV2X3ZhbCArIHN0ZXA7XG4gICAgaWYgKGxlZnQgPT09IDApIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHZhbCA9IHZhbCA+PSBwcmV2X3ZhbCArIGRpdiA/IG5leHRfdmFsIDogcHJldl92YWw7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgc2xpZGVyIGVsZW1lbnRzLlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmVudHMoKSB7XG4gICAgdGhpcy5fZXZlbnRzRm9ySGFuZGxlKHRoaXMuJGhhbmRsZSk7XG4gICAgaWYodGhpcy5oYW5kbGVzWzFdKSB7XG4gICAgICB0aGlzLl9ldmVudHNGb3JIYW5kbGUodGhpcy4kaGFuZGxlMik7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQWRkcyBldmVudCBsaXN0ZW5lcnMgYSBwYXJ0aWN1bGFyIGhhbmRsZVxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRoYW5kbGUgLSB0aGUgY3VycmVudCBoYW5kbGUgdG8gYXBwbHkgbGlzdGVuZXJzIHRvLlxuICAgKi9cbiAgX2V2ZW50c0ZvckhhbmRsZSgkaGFuZGxlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgY3VySGFuZGxlLFxuICAgICAgICB0aW1lcjtcblxuICAgICAgdGhpcy5pbnB1dHMub2ZmKCdjaGFuZ2UuemYuc2xpZGVyJykub24oJ2NoYW5nZS56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBpZHggPSBfdGhpcy5pbnB1dHMuaW5kZXgoJCh0aGlzKSk7XG4gICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBfdGhpcy5oYW5kbGVzLmVxKGlkeCksICQodGhpcykudmFsKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xpY2tTZWxlY3QpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ2NsaWNrLnpmLnNsaWRlcicpLm9uKCdjbGljay56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgaWYgKF90aGlzLiRlbGVtZW50LmRhdGEoJ2RyYWdnaW5nJykpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgICBpZiAoISQoZS50YXJnZXQpLmlzKCdbZGF0YS1zbGlkZXItaGFuZGxlXScpKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5kb3VibGVTaWRlZCkge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlRXZlbnQoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlRXZlbnQoZSwgX3RoaXMuJGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlKSB7XG4gICAgICB0aGlzLmhhbmRsZXMuYWRkVG91Y2goKTtcblxuICAgICAgdmFyICRib2R5ID0gJCgnYm9keScpO1xuICAgICAgJGhhbmRsZVxuICAgICAgICAub2ZmKCdtb3VzZWRvd24uemYuc2xpZGVyJylcbiAgICAgICAgLm9uKCdtb3VzZWRvd24uemYuc2xpZGVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICRoYW5kbGUuYWRkQ2xhc3MoJ2lzLWRyYWdnaW5nJyk7XG4gICAgICAgICAgX3RoaXMuJGZpbGwuYWRkQ2xhc3MoJ2lzLWRyYWdnaW5nJyk7Ly9cbiAgICAgICAgICBfdGhpcy4kZWxlbWVudC5kYXRhKCdkcmFnZ2luZycsIHRydWUpO1xuXG4gICAgICAgICAgY3VySGFuZGxlID0gJChlLmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICAgICAgJGJvZHkub24oJ21vdXNlbW92ZS56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBfdGhpcy5faGFuZGxlRXZlbnQoZSwgY3VySGFuZGxlKTtcblxuICAgICAgICAgIH0pLm9uKCdtb3VzZXVwLnpmLnNsaWRlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIF90aGlzLl9oYW5kbGVFdmVudChlLCBjdXJIYW5kbGUpO1xuXG4gICAgICAgICAgICAkaGFuZGxlLnJlbW92ZUNsYXNzKCdpcy1kcmFnZ2luZycpO1xuICAgICAgICAgICAgX3RoaXMuJGZpbGwucmVtb3ZlQ2xhc3MoJ2lzLWRyYWdnaW5nJyk7XG4gICAgICAgICAgICBfdGhpcy4kZWxlbWVudC5kYXRhKCdkcmFnZ2luZycsIGZhbHNlKTtcblxuICAgICAgICAgICAgJGJvZHkub2ZmKCdtb3VzZW1vdmUuemYuc2xpZGVyIG1vdXNldXAuemYuc2xpZGVyJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLy8gcHJldmVudCBldmVudHMgdHJpZ2dlcmVkIGJ5IHRvdWNoXG4gICAgICAub24oJ3NlbGVjdHN0YXJ0LnpmLnNsaWRlciB0b3VjaG1vdmUuemYuc2xpZGVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkaGFuZGxlLm9mZigna2V5ZG93bi56Zi5zbGlkZXInKS5vbigna2V5ZG93bi56Zi5zbGlkZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgXyRoYW5kbGUgPSAkKHRoaXMpLFxuICAgICAgICAgIGlkeCA9IF90aGlzLm9wdGlvbnMuZG91YmxlU2lkZWQgPyBfdGhpcy5oYW5kbGVzLmluZGV4KF8kaGFuZGxlKSA6IDAsXG4gICAgICAgICAgb2xkVmFsdWUgPSBwYXJzZUZsb2F0KF90aGlzLmlucHV0cy5lcShpZHgpLnZhbCgpKSxcbiAgICAgICAgICBuZXdWYWx1ZTtcblxuICAgICAgLy8gaGFuZGxlIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Ym9hcmQgdXRpbFxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1NsaWRlcicsIHtcbiAgICAgICAgZGVjcmVhc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgLSBfdGhpcy5vcHRpb25zLnN0ZXA7XG4gICAgICAgIH0sXG4gICAgICAgIGluY3JlYXNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlICsgX3RoaXMub3B0aW9ucy5zdGVwO1xuICAgICAgICB9LFxuICAgICAgICBkZWNyZWFzZV9mYXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gX3RoaXMub3B0aW9ucy5zdGVwICogMTA7XG4gICAgICAgIH0sXG4gICAgICAgIGluY3JlYXNlX2Zhc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUgKyBfdGhpcy5vcHRpb25zLnN0ZXAgKiAxMDtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7IC8vIG9ubHkgc2V0IGhhbmRsZSBwb3Mgd2hlbiBldmVudCB3YXMgaGFuZGxlZCBzcGVjaWFsbHlcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX3RoaXMuX3NldEhhbmRsZVBvcyhfJGhhbmRsZSwgbmV3VmFsdWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qaWYgKG5ld1ZhbHVlKSB7IC8vIGlmIHByZXNzZWQga2V5IGhhcyBzcGVjaWFsIGZ1bmN0aW9uLCB1cGRhdGUgdmFsdWVcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBfdGhpcy5fc2V0SGFuZGxlUG9zKF8kaGFuZGxlLCBuZXdWYWx1ZSk7XG4gICAgICB9Ki9cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgc2xpZGVyIHBsdWdpbi5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5oYW5kbGVzLm9mZignLnpmLnNsaWRlcicpO1xuICAgIHRoaXMuaW5wdXRzLm9mZignLnpmLnNsaWRlcicpO1xuICAgIHRoaXMuJGVsZW1lbnQub2ZmKCcuemYuc2xpZGVyJyk7XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5TbGlkZXIuZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIGZvciB0aGUgc2xpZGVyIHNjYWxlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHN0YXJ0OiAwLFxuICAvKipcbiAgICogTWF4aW11bSB2YWx1ZSBmb3IgdGhlIHNsaWRlciBzY2FsZS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIGVuZDogMTAwLFxuICAvKipcbiAgICogTWluaW11bSB2YWx1ZSBjaGFuZ2UgcGVyIGNoYW5nZSBldmVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBzdGVwOiAxLFxuICAvKipcbiAgICogVmFsdWUgYXQgd2hpY2ggdGhlIGhhbmRsZS9pbnB1dCAqKGxlZnQgaGFuZGxlL2ZpcnN0IGlucHV0KSogc2hvdWxkIGJlIHNldCB0byBvbiBpbml0aWFsaXphdGlvbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbml0aWFsU3RhcnQ6IDAsXG4gIC8qKlxuICAgKiBWYWx1ZSBhdCB3aGljaCB0aGUgcmlnaHQgaGFuZGxlL3NlY29uZCBpbnB1dCBzaG91bGQgYmUgc2V0IHRvIG9uIGluaXRpYWxpemF0aW9uLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgaW5pdGlhbEVuZDogMTAwLFxuICAvKipcbiAgICogQWxsb3dzIHRoZSBpbnB1dCB0byBiZSBsb2NhdGVkIG91dHNpZGUgdGhlIGNvbnRhaW5lciBhbmQgdmlzaWJsZS4gU2V0IHRvIGJ5IHRoZSBKU1xuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYmluZGluZzogZmFsc2UsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gY2xpY2svdGFwIG9uIHRoZSBzbGlkZXIgYmFyIHRvIHNlbGVjdCBhIHZhbHVlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjbGlja1NlbGVjdDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGFuZCB1c2UgdGhlIGB2ZXJ0aWNhbGAgY2xhc3MgdG8gY2hhbmdlIGFsaWdubWVudCB0byB2ZXJ0aWNhbC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZlcnRpY2FsOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlciB0byBkcmFnIHRoZSBzbGlkZXIgaGFuZGxlKHMpIHRvIHNlbGVjdCBhIHZhbHVlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkcmFnZ2FibGU6IHRydWUsXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgc2xpZGVyIGFuZCBwcmV2ZW50cyBldmVudCBsaXN0ZW5lcnMgZnJvbSBiZWluZyBhcHBsaWVkLiBEb3VibGUgY2hlY2tlZCBieSBKUyB3aXRoIGBkaXNhYmxlZENsYXNzYC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgdXNlIG9mIHR3byBoYW5kbGVzLiBEb3VibGUgY2hlY2tlZCBieSB0aGUgSlMuIENoYW5nZXMgc29tZSBsb2dpYyBoYW5kbGluZy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRvdWJsZVNpZGVkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFBvdGVudGlhbCBmdXR1cmUgZmVhdHVyZS5cbiAgICovXG4gIC8vIHN0ZXBzOiAxMDAsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdGhlIHBsdWdpbiBzaG91bGQgZ28gdG8gZm9yIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICBkZWNpbWFsOiAyLFxuICAvKipcbiAgICogVGltZSBkZWxheSBmb3IgZHJhZ2dlZCBlbGVtZW50cy5cbiAgICovXG4gIC8vIGRyYWdEZWxheTogMCxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCB0byBhbmltYXRlIHRoZSBtb3ZlbWVudCBvZiBhIHNsaWRlciBoYW5kbGUgaWYgdXNlciBjbGlja3MvdGFwcyBvbiB0aGUgYmFyLiBOZWVkcyB0byBiZSBtYW51YWxseSBzZXQgaWYgdXBkYXRpbmcgdGhlIHRyYW5zaXRpb24gdGltZSBpbiB0aGUgU2FzcyBzZXR0aW5ncy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAyMDBcbiAgICovXG4gIG1vdmVUaW1lOiAyMDAsLy91cGRhdGUgdGhpcyBpZiBjaGFuZ2luZyB0aGUgdHJhbnNpdGlvbiB0aW1lIGluIHRoZSBzYXNzXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIGRpc2FibGVkIHNsaWRlcnMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2Rpc2FibGVkJ1xuICAgKi9cbiAgZGlzYWJsZWRDbGFzczogJ2Rpc2FibGVkJyxcbiAgLyoqXG4gICAqIFdpbGwgaW52ZXJ0IHRoZSBkZWZhdWx0IGxheW91dCBmb3IgYSB2ZXJ0aWNhbDxzcGFuIGRhdGEtdG9vbHRpcCB0aXRsZT1cIndobyB3b3VsZCBkbyB0aGlzPz8/XCI+IDwvc3Bhbj5zbGlkZXIuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbnZlcnRWZXJ0aWNhbDogZmFsc2UsXG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBgY2hhbmdlZC56Zi1zbGlkZXJgIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgNTAwXG4gICAqL1xuICBjaGFuZ2VkRGVsYXk6IDUwMCxcbiAgLyoqXG4gICogQmFzZXZhbHVlIGZvciBub24tbGluZWFyIHNsaWRlcnNcbiAgKiBAb3B0aW9uXG4gICogQHR5cGUge251bWJlcn1cbiAgKiBAZGVmYXVsdCA1XG4gICovXG4gIG5vbkxpbmVhckJhc2U6IDUsXG4gIC8qKlxuICAqIEJhc2V2YWx1ZSBmb3Igbm9uLWxpbmVhciBzbGlkZXJzLCBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBgJ2xpbmVhcidgLCBgJ3BvdydgICYgYCdsb2cnYC4gUG93IGFuZCBMb2cgdXNlIHRoZSBub25MaW5lYXJCYXNlIHNldHRpbmcuXG4gICogQG9wdGlvblxuICAqIEB0eXBlIHtzdHJpbmd9XG4gICogQGRlZmF1bHQgJ2xpbmVhcidcbiAgKi9cbiAgcG9zaXRpb25WYWx1ZUZ1bmN0aW9uOiAnbGluZWFyJyxcbn07XG5cbmZ1bmN0aW9uIHBlcmNlbnQoZnJhYywgbnVtKSB7XG4gIHJldHVybiAoZnJhYyAvIG51bSk7XG59XG5mdW5jdGlvbiBhYnNQb3NpdGlvbigkaGFuZGxlLCBkaXIsIGNsaWNrUG9zLCBwYXJhbSkge1xuICByZXR1cm4gTWF0aC5hYnMoKCRoYW5kbGUucG9zaXRpb24oKVtkaXJdICsgKCRoYW5kbGVbcGFyYW1dKCkgLyAyKSkgLSBjbGlja1Bvcyk7XG59XG5mdW5jdGlvbiBiYXNlTG9nKGJhc2UsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLmxvZyh2YWx1ZSkvTWF0aC5sb2coYmFzZSlcbn1cblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFNsaWRlciwgJ1NsaWRlcicpO1xuXG59KGpRdWVyeSk7XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuIWZ1bmN0aW9uKCQpIHtcblxuLyoqXG4gKiBTdGlja3kgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnN0aWNreVxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50cmlnZ2Vyc1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5tZWRpYVF1ZXJ5XG4gKi9cblxuY2xhc3MgU3RpY2t5IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBzdGlja3kgdGhpbmcuXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBzdGlja3kuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBvYmplY3QgcGFzc2VkIHdoZW4gY3JlYXRpbmcgdGhlIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgU3RpY2t5LmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdTdGlja3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgc3RpY2t5IGVsZW1lbnQgYnkgYWRkaW5nIGNsYXNzZXMsIGdldHRpbmcvc2V0dGluZyBkaW1lbnNpb25zLCBicmVha3BvaW50cyBhbmQgYXR0cmlidXRlc1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciAkcGFyZW50ID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXN0aWNreS1jb250YWluZXJdJyksXG4gICAgICAgIGlkID0gdGhpcy4kZWxlbWVudFswXS5pZCB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICdzdGlja3knKSxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xuICAgICAgdGhpcy53YXNXcmFwcGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4kY29udGFpbmVyID0gJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKS53cmFwSW5uZXIodGhpcy4kZWxlbWVudCk7XG4gICAgdGhpcy4kY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5jb250YWluZXJDbGFzcyk7XG5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5zdGlja3lDbGFzcykuYXR0cih7ICdkYXRhLXJlc2l6ZSc6IGlkLCAnZGF0YS1tdXRhdGUnOiBpZCB9KTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvciAhPT0gJycpIHtcbiAgICAgICAgJCgnIycgKyBfdGhpcy5vcHRpb25zLmFuY2hvcikuYXR0cih7ICdkYXRhLW11dGF0ZSc6IGlkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsQ291bnQgPSB0aGlzLm9wdGlvbnMuY2hlY2tFdmVyeTtcbiAgICB0aGlzLmlzU3R1Y2sgPSBmYWxzZTtcbiAgICAkKHdpbmRvdykub25lKCdsb2FkLnpmLnN0aWNreScsIGZ1bmN0aW9uKCl7XG4gICAgICAvL1dlIGNhbGN1bGF0ZSB0aGUgY29udGFpbmVyIGhlaWdodCB0byBoYXZlIGNvcnJlY3QgdmFsdWVzIGZvciBhbmNob3IgcG9pbnRzIG9mZnNldCBjYWxjdWxhdGlvbi5cbiAgICAgIF90aGlzLmNvbnRhaW5lckhlaWdodCA9IF90aGlzLiRlbGVtZW50LmNzcyhcImRpc3BsYXlcIikgPT0gXCJub25lXCIgPyAwIDogX3RoaXMuJGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgX3RoaXMuJGNvbnRhaW5lci5jc3MoJ2hlaWdodCcsIF90aGlzLmNvbnRhaW5lckhlaWdodCk7XG4gICAgICBfdGhpcy5lbGVtSGVpZ2h0ID0gX3RoaXMuY29udGFpbmVySGVpZ2h0O1xuICAgICAgaWYoX3RoaXMub3B0aW9ucy5hbmNob3IgIT09ICcnKXtcbiAgICAgICAgX3RoaXMuJGFuY2hvciA9ICQoJyMnICsgX3RoaXMub3B0aW9ucy5hbmNob3IpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIF90aGlzLl9wYXJzZVBvaW50cygpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fc2V0U2l6ZXMoZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UsIHNjcm9sbCk7XG4gICAgICAgIC8vVW5zdGljayB0aGUgZWxlbWVudCB3aWxsIGVuc3VyZSB0aGF0IHByb3BlciBjbGFzc2VzIGFyZSBzZXQuXG4gICAgICAgIGlmICghX3RoaXMuaXNTdHVjaykge1xuICAgICAgICAgIF90aGlzLl9yZW1vdmVTdGlja3koKHNjcm9sbCA+PSBfdGhpcy50b3BQb2ludCkgPyBmYWxzZSA6IHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9ldmVudHMoaWQuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLScpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB1c2luZyBtdWx0aXBsZSBlbGVtZW50cyBhcyBhbmNob3JzLCBjYWxjdWxhdGVzIHRoZSB0b3AgYW5kIGJvdHRvbSBwaXhlbCB2YWx1ZXMgdGhlIHN0aWNreSB0aGluZyBzaG91bGQgc3RpY2sgYW5kIHVuc3RpY2sgb24uXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlUG9pbnRzKCkge1xuICAgIHZhciB0b3AgPSB0aGlzLm9wdGlvbnMudG9wQW5jaG9yID09IFwiXCIgPyAxIDogdGhpcy5vcHRpb25zLnRvcEFuY2hvcixcbiAgICAgICAgYnRtID0gdGhpcy5vcHRpb25zLmJ0bUFuY2hvcj09IFwiXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDogdGhpcy5vcHRpb25zLmJ0bUFuY2hvcixcbiAgICAgICAgcHRzID0gW3RvcCwgYnRtXSxcbiAgICAgICAgYnJlYWtzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHB0cy5sZW5ndGg7IGkgPCBsZW4gJiYgcHRzW2ldOyBpKyspIHtcbiAgICAgIHZhciBwdDtcbiAgICAgIGlmICh0eXBlb2YgcHRzW2ldID09PSAnbnVtYmVyJykge1xuICAgICAgICBwdCA9IHB0c1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwbGFjZSA9IHB0c1tpXS5zcGxpdCgnOicpLFxuICAgICAgICAgICAgYW5jaG9yID0gJChgIyR7cGxhY2VbMF19YCk7XG5cbiAgICAgICAgcHQgPSBhbmNob3Iub2Zmc2V0KCkudG9wO1xuICAgICAgICBpZiAocGxhY2VbMV0gJiYgcGxhY2VbMV0udG9Mb3dlckNhc2UoKSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBwdCArPSBhbmNob3JbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVha3NbaV0gPSBwdDtcbiAgICB9XG5cblxuICAgIHRoaXMucG9pbnRzID0gYnJlYWtzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgc2Nyb2xsaW5nIGVsZW1lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZCAtIHBzdWVkby1yYW5kb20gaWQgZm9yIHVuaXF1ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBfZXZlbnRzKGlkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgc2Nyb2xsTGlzdGVuZXIgPSB0aGlzLnNjcm9sbExpc3RlbmVyID0gYHNjcm9sbC56Zi4ke2lkfWA7XG4gICAgaWYgKHRoaXMuaXNPbikgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5jYW5TdGljaykge1xuICAgICAgdGhpcy5pc09uID0gdHJ1ZTtcbiAgICAgICQod2luZG93KS5vZmYoc2Nyb2xsTGlzdGVuZXIpXG4gICAgICAgICAgICAgICAub24oc2Nyb2xsTGlzdGVuZXIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnNjcm9sbENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuc2Nyb2xsQ291bnQgPSBfdGhpcy5vcHRpb25zLmNoZWNrRXZlcnk7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldFNpemVzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NhbGMoZmFsc2UsIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgX3RoaXMuc2Nyb2xsQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICBfdGhpcy5fY2FsYyhmYWxzZSwgd2luZG93LnBhZ2VZT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9mZigncmVzaXplbWUuemYudHJpZ2dlcicpXG4gICAgICAgICAgICAgICAgIC5vbigncmVzaXplbWUuemYudHJpZ2dlcicsIGZ1bmN0aW9uKGUsIGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9ldmVudHNIYW5kbGVyKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbiAoZSwgZWwpIHtcbiAgICAgICAgX3RoaXMuX2V2ZW50c0hhbmRsZXIoaWQpO1xuICAgIH0pO1xuXG4gICAgaWYodGhpcy4kYW5jaG9yKSB7XG4gICAgICB0aGlzLiRhbmNob3Iub24oJ211dGF0ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbiAoZSwgZWwpIHtcbiAgICAgICAgICBfdGhpcy5fZXZlbnRzSGFuZGxlcihpZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlciBmb3IgZXZlbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgLSBwc3VlZG8tcmFuZG9tIGlkIGZvciB1bmlxdWUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgX2V2ZW50c0hhbmRsZXIoaWQpIHtcbiAgICAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBzY3JvbGxMaXN0ZW5lciA9IHRoaXMuc2Nyb2xsTGlzdGVuZXIgPSBgc2Nyb2xsLnpmLiR7aWR9YDtcblxuICAgICAgIF90aGlzLl9zZXRTaXplcyhmdW5jdGlvbigpIHtcbiAgICAgICBfdGhpcy5fY2FsYyhmYWxzZSk7XG4gICAgICAgaWYgKF90aGlzLmNhblN0aWNrKSB7XG4gICAgICAgICBpZiAoIV90aGlzLmlzT24pIHtcbiAgICAgICAgICAgX3RoaXMuX2V2ZW50cyhpZCk7XG4gICAgICAgICB9XG4gICAgICAgfSBlbHNlIGlmIChfdGhpcy5pc09uKSB7XG4gICAgICAgICBfdGhpcy5fcGF1c2VMaXN0ZW5lcnMoc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgIH1cbiAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBldmVudCBoYW5kbGVycyBmb3Igc2Nyb2xsIGFuZCBjaGFuZ2UgZXZlbnRzIG9uIGFuY2hvci5cbiAgICogQGZpcmVzIFN0aWNreSNwYXVzZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2Nyb2xsTGlzdGVuZXIgLSB1bmlxdWUsIG5hbWVzcGFjZWQgc2Nyb2xsIGxpc3RlbmVyIGF0dGFjaGVkIHRvIGB3aW5kb3dgXG4gICAqL1xuICBfcGF1c2VMaXN0ZW5lcnMoc2Nyb2xsTGlzdGVuZXIpIHtcbiAgICB0aGlzLmlzT24gPSBmYWxzZTtcbiAgICAkKHdpbmRvdykub2ZmKHNjcm9sbExpc3RlbmVyKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBwYXVzZWQgZHVlIHRvIHJlc2l6ZSBldmVudCBzaHJpbmtpbmcgdGhlIHZpZXcuXG4gICAgICogQGV2ZW50IFN0aWNreSNwYXVzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigncGF1c2UuemYuc3RpY2t5Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIG9uIGV2ZXJ5IGBzY3JvbGxgIGV2ZW50IGFuZCBvbiBgX2luaXRgXG4gICAqIGZpcmVzIGZ1bmN0aW9ucyBiYXNlZCBvbiBib29sZWFucyBhbmQgY2FjaGVkIHZhbHVlc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNoZWNrU2l6ZXMgLSB0cnVlIGlmIHBsdWdpbiBzaG91bGQgcmVjYWxjdWxhdGUgc2l6ZXMgYW5kIGJyZWFrcG9pbnRzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gc2Nyb2xsIC0gY3VycmVudCBzY3JvbGwgcG9zaXRpb24gcGFzc2VkIGZyb20gc2Nyb2xsIGV2ZW50IGNiIGZ1bmN0aW9uLiBJZiBub3QgcGFzc2VkLCBkZWZhdWx0cyB0byBgd2luZG93LnBhZ2VZT2Zmc2V0YC5cbiAgICovXG4gIF9jYWxjKGNoZWNrU2l6ZXMsIHNjcm9sbCkge1xuICAgIGlmIChjaGVja1NpemVzKSB7IHRoaXMuX3NldFNpemVzKCk7IH1cblxuICAgIGlmICghdGhpcy5jYW5TdGljaykge1xuICAgICAgaWYgKHRoaXMuaXNTdHVjaykge1xuICAgICAgICB0aGlzLl9yZW1vdmVTdGlja3kodHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFzY3JvbGwpIHsgc2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0OyB9XG5cbiAgICBpZiAoc2Nyb2xsID49IHRoaXMudG9wUG9pbnQpIHtcbiAgICAgIGlmIChzY3JvbGwgPD0gdGhpcy5ib3R0b21Qb2ludCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdHVjaykge1xuICAgICAgICAgIHRoaXMuX3NldFN0aWNreSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc1N0dWNrKSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlU3RpY2t5KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc1N0dWNrKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVN0aWNreSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2F1c2VzIHRoZSAkZWxlbWVudCB0byBiZWNvbWUgc3R1Y2suXG4gICAqIEFkZHMgYHBvc2l0aW9uOiBmaXhlZDtgLCBhbmQgaGVscGVyIGNsYXNzZXMuXG4gICAqIEBmaXJlcyBTdGlja3kjc3R1Y2t0b1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRTdGlja3koKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgc3RpY2tUbyA9IHRoaXMub3B0aW9ucy5zdGlja1RvLFxuICAgICAgICBtcmduID0gc3RpY2tUbyA9PT0gJ3RvcCcgPyAnbWFyZ2luVG9wJyA6ICdtYXJnaW5Cb3R0b20nLFxuICAgICAgICBub3RTdHVja1RvID0gc3RpY2tUbyA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnLFxuICAgICAgICBjc3MgPSB7fTtcblxuICAgIGNzc1ttcmduXSA9IGAke3RoaXMub3B0aW9uc1ttcmduXX1lbWA7XG4gICAgY3NzW3N0aWNrVG9dID0gMDtcbiAgICBjc3Nbbm90U3R1Y2tUb10gPSAnYXV0byc7XG4gICAgdGhpcy5pc1N0dWNrID0gdHJ1ZTtcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGBpcy1hbmNob3JlZCBpcy1hdC0ke25vdFN0dWNrVG99YClcbiAgICAgICAgICAgICAgICAgLmFkZENsYXNzKGBpcy1zdHVjayBpcy1hdC0ke3N0aWNrVG99YClcbiAgICAgICAgICAgICAgICAgLmNzcyhjc3MpXG4gICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSAkZWxlbWVudCBoYXMgYmVjb21lIGBwb3NpdGlvbjogZml4ZWQ7YFxuICAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2VkIHRvIGB0b3BgIG9yIGBib3R0b21gLCBlLmcuIGBzdGlja3kuemYuc3R1Y2t0bzp0b3BgXG4gICAgICAgICAgICAgICAgICAqIEBldmVudCBTdGlja3kjc3R1Y2t0b1xuICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgLnRyaWdnZXIoYHN0aWNreS56Zi5zdHVja3RvOiR7c3RpY2tUb31gKTtcbiAgICB0aGlzLiRlbGVtZW50Lm9uKFwidHJhbnNpdGlvbmVuZCB3ZWJraXRUcmFuc2l0aW9uRW5kIG9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIE1TVHJhbnNpdGlvbkVuZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9zZXRTaXplcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhdXNlcyB0aGUgJGVsZW1lbnQgdG8gYmVjb21lIHVuc3R1Y2suXG4gICAqIFJlbW92ZXMgYHBvc2l0aW9uOiBmaXhlZDtgLCBhbmQgaGVscGVyIGNsYXNzZXMuXG4gICAqIEFkZHMgb3RoZXIgaGVscGVyIGNsYXNzZXMuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNUb3AgLSB0ZWxscyB0aGUgZnVuY3Rpb24gaWYgdGhlICRlbGVtZW50IHNob3VsZCBhbmNob3IgdG8gdGhlIHRvcCBvciBib3R0b20gb2YgaXRzICRhbmNob3IgZWxlbWVudC5cbiAgICogQGZpcmVzIFN0aWNreSN1bnN0dWNrZnJvbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVN0aWNreShpc1RvcCkge1xuICAgIHZhciBzdGlja1RvID0gdGhpcy5vcHRpb25zLnN0aWNrVG8sXG4gICAgICAgIHN0aWNrVG9Ub3AgPSBzdGlja1RvID09PSAndG9wJyxcbiAgICAgICAgY3NzID0ge30sXG4gICAgICAgIGFuY2hvclB0ID0gKHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMV0gLSB0aGlzLnBvaW50c1swXSA6IHRoaXMuYW5jaG9ySGVpZ2h0KSAtIHRoaXMuZWxlbUhlaWdodCxcbiAgICAgICAgbXJnbiA9IHN0aWNrVG9Ub3AgPyAnbWFyZ2luVG9wJyA6ICdtYXJnaW5Cb3R0b20nLFxuICAgICAgICBub3RTdHVja1RvID0gc3RpY2tUb1RvcCA/ICdib3R0b20nIDogJ3RvcCcsXG4gICAgICAgIHRvcE9yQm90dG9tID0gaXNUb3AgPyAndG9wJyA6ICdib3R0b20nO1xuXG4gICAgY3NzW21yZ25dID0gMDtcblxuICAgIGNzc1snYm90dG9tJ10gPSAnYXV0byc7XG4gICAgaWYoaXNUb3ApIHtcbiAgICAgIGNzc1sndG9wJ10gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjc3NbJ3RvcCddID0gYW5jaG9yUHQ7XG4gICAgfVxuXG4gICAgdGhpcy5pc1N0dWNrID0gZmFsc2U7XG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhgaXMtc3R1Y2sgaXMtYXQtJHtzdGlja1RvfWApXG4gICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgaXMtYW5jaG9yZWQgaXMtYXQtJHt0b3BPckJvdHRvbX1gKVxuICAgICAgICAgICAgICAgICAuY3NzKGNzcylcbiAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAqIEZpcmVzIHdoZW4gdGhlICRlbGVtZW50IGhhcyBiZWNvbWUgYW5jaG9yZWQuXG4gICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZWQgdG8gYHRvcGAgb3IgYGJvdHRvbWAsIGUuZy4gYHN0aWNreS56Zi51bnN0dWNrZnJvbTpib3R0b21gXG4gICAgICAgICAgICAgICAgICAqIEBldmVudCBTdGlja3kjdW5zdHVja2Zyb21cbiAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgIC50cmlnZ2VyKGBzdGlja3kuemYudW5zdHVja2Zyb206JHt0b3BPckJvdHRvbX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSAkZWxlbWVudCBhbmQgJGNvbnRhaW5lciBzaXplcyBmb3IgcGx1Z2luLlxuICAgKiBDYWxscyBgX3NldEJyZWFrUG9pbnRzYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBmaXJlIG9uIGNvbXBsZXRpb24gb2YgYF9zZXRCcmVha1BvaW50c2AuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0U2l6ZXMoY2IpIHtcbiAgICB0aGlzLmNhblN0aWNrID0gRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmlzKHRoaXMub3B0aW9ucy5zdGlja3lPbik7XG4gICAgaWYgKCF0aGlzLmNhblN0aWNrKSB7XG4gICAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH1cbiAgICB9XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgbmV3RWxlbVdpZHRoID0gdGhpcy4kY29udGFpbmVyWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxuICAgICAgICBjb21wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy4kY29udGFpbmVyWzBdKSxcbiAgICAgICAgcGRuZ2wgPSBwYXJzZUludChjb21wWydwYWRkaW5nLWxlZnQnXSwgMTApLFxuICAgICAgICBwZG5nciA9IHBhcnNlSW50KGNvbXBbJ3BhZGRpbmctcmlnaHQnXSwgMTApO1xuXG4gICAgaWYgKHRoaXMuJGFuY2hvciAmJiB0aGlzLiRhbmNob3IubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFuY2hvckhlaWdodCA9IHRoaXMuJGFuY2hvclswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlUG9pbnRzKCk7XG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgJ21heC13aWR0aCc6IGAke25ld0VsZW1XaWR0aCAtIHBkbmdsIC0gcGRuZ3J9cHhgXG4gICAgfSk7XG5cbiAgICB2YXIgbmV3Q29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgdGhpcy5jb250YWluZXJIZWlnaHQ7XG4gICAgaWYgKHRoaXMuJGVsZW1lbnQuY3NzKFwiZGlzcGxheVwiKSA9PSBcIm5vbmVcIikge1xuICAgICAgbmV3Q29udGFpbmVySGVpZ2h0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBuZXdDb250YWluZXJIZWlnaHQ7XG4gICAgdGhpcy4kY29udGFpbmVyLmNzcyh7XG4gICAgICBoZWlnaHQ6IG5ld0NvbnRhaW5lckhlaWdodFxuICAgIH0pO1xuICAgIHRoaXMuZWxlbUhlaWdodCA9IG5ld0NvbnRhaW5lckhlaWdodDtcblxuICAgIGlmICghdGhpcy5pc1N0dWNrKSB7XG4gICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaXMtYXQtYm90dG9tJykpIHtcbiAgICAgICAgdmFyIGFuY2hvclB0ID0gKHRoaXMucG9pbnRzID8gdGhpcy5wb2ludHNbMV0gLSB0aGlzLiRjb250YWluZXIub2Zmc2V0KCkudG9wIDogdGhpcy5hbmNob3JIZWlnaHQpIC0gdGhpcy5lbGVtSGVpZ2h0O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmNzcygndG9wJywgYW5jaG9yUHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3NldEJyZWFrUG9pbnRzKG5ld0NvbnRhaW5lckhlaWdodCwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY2IgJiYgdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7IGNiKCk7IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cHBlciBhbmQgbG93ZXIgYnJlYWtwb2ludHMgZm9yIHRoZSBlbGVtZW50IHRvIGJlY29tZSBzdGlja3kvdW5zdGlja3kuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBlbGVtSGVpZ2h0IC0gcHggdmFsdWUgZm9yIHN0aWNreS4kZWxlbWVudCBoZWlnaHQsIGNhbGN1bGF0ZWQgYnkgYF9zZXRTaXplc2AuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGNvbXBsZXRpb24uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJlYWtQb2ludHMoZWxlbUhlaWdodCwgY2IpIHtcbiAgICBpZiAoIXRoaXMuY2FuU3RpY2spIHtcbiAgICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICAgICAgZWxzZSB7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cbiAgICB2YXIgbVRvcCA9IGVtQ2FsYyh0aGlzLm9wdGlvbnMubWFyZ2luVG9wKSxcbiAgICAgICAgbUJ0bSA9IGVtQ2FsYyh0aGlzLm9wdGlvbnMubWFyZ2luQm90dG9tKSxcbiAgICAgICAgdG9wUG9pbnQgPSB0aGlzLnBvaW50cyA/IHRoaXMucG9pbnRzWzBdIDogdGhpcy4kYW5jaG9yLm9mZnNldCgpLnRvcCxcbiAgICAgICAgYm90dG9tUG9pbnQgPSB0aGlzLnBvaW50cyA/IHRoaXMucG9pbnRzWzFdIDogdG9wUG9pbnQgKyB0aGlzLmFuY2hvckhlaWdodCxcbiAgICAgICAgLy8gdG9wUG9pbnQgPSB0aGlzLiRhbmNob3Iub2Zmc2V0KCkudG9wIHx8IHRoaXMucG9pbnRzWzBdLFxuICAgICAgICAvLyBib3R0b21Qb2ludCA9IHRvcFBvaW50ICsgdGhpcy5hbmNob3JIZWlnaHQgfHwgdGhpcy5wb2ludHNbMV0sXG4gICAgICAgIHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RpY2tUbyA9PT0gJ3RvcCcpIHtcbiAgICAgIHRvcFBvaW50IC09IG1Ub3A7XG4gICAgICBib3R0b21Qb2ludCAtPSAoZWxlbUhlaWdodCArIG1Ub3ApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0aWNrVG8gPT09ICdib3R0b20nKSB7XG4gICAgICB0b3BQb2ludCAtPSAod2luSGVpZ2h0IC0gKGVsZW1IZWlnaHQgKyBtQnRtKSk7XG4gICAgICBib3R0b21Qb2ludCAtPSAod2luSGVpZ2h0IC0gbUJ0bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vdGhpcyB3b3VsZCBiZSB0aGUgc3RpY2tUbzogYm90aCBvcHRpb24uLi4gdHJpY2t5XG4gICAgfVxuXG4gICAgdGhpcy50b3BQb2ludCA9IHRvcFBvaW50O1xuICAgIHRoaXMuYm90dG9tUG9pbnQgPSBib3R0b21Qb2ludDtcblxuICAgIGlmIChjYiAmJiB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHsgY2IoKTsgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBjdXJyZW50IHN0aWNreSBlbGVtZW50LlxuICAgKiBSZXNldHMgdGhlIGVsZW1lbnQgdG8gdGhlIHRvcCBwb3NpdGlvbiBmaXJzdC5cbiAgICogUmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMsIEpTLWFkZGVkIGNzcyBwcm9wZXJ0aWVzIGFuZCBjbGFzc2VzLCBhbmQgdW53cmFwcyB0aGUgJGVsZW1lbnQgaWYgdGhlIEpTIGFkZGVkIHRoZSAkY29udGFpbmVyLlxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVtb3ZlU3RpY2t5KHRydWUpO1xuXG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhgJHt0aGlzLm9wdGlvbnMuc3RpY2t5Q2xhc3N9IGlzLWFuY2hvcmVkIGlzLWF0LXRvcGApXG4gICAgICAgICAgICAgICAgIC5jc3Moe1xuICAgICAgICAgICAgICAgICAgIGhlaWdodDogJycsXG4gICAgICAgICAgICAgICAgICAgdG9wOiAnJyxcbiAgICAgICAgICAgICAgICAgICBib3R0b206ICcnLFxuICAgICAgICAgICAgICAgICAgICdtYXgtd2lkdGgnOiAnJ1xuICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAub2ZmKCdyZXNpemVtZS56Zi50cmlnZ2VyJylcbiAgICAgICAgICAgICAgICAgLm9mZignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgIGlmICh0aGlzLiRhbmNob3IgJiYgdGhpcy4kYW5jaG9yLmxlbmd0aCkge1xuICAgICAgdGhpcy4kYW5jaG9yLm9mZignY2hhbmdlLnpmLnN0aWNreScpO1xuICAgIH1cbiAgICAkKHdpbmRvdykub2ZmKHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuXG4gICAgaWYgKHRoaXMud2FzV3JhcHBlZCkge1xuICAgICAgdGhpcy4kZWxlbWVudC51bndyYXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5jb250YWluZXJDbGFzcylcbiAgICAgICAgICAgICAgICAgICAgIC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcnXG4gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblN0aWNreS5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIEN1c3RvbWl6YWJsZSBjb250YWluZXIgdGVtcGxhdGUuIEFkZCB5b3VyIG93biBjbGFzc2VzIGZvciBzdHlsaW5nIGFuZCBzaXppbmcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJyZsdDtkaXYgZGF0YS1zdGlja3ktY29udGFpbmVyJmd0OyZsdDsvZGl2Jmd0OydcbiAgICovXG4gIGNvbnRhaW5lcjogJzxkaXYgZGF0YS1zdGlja3ktY29udGFpbmVyPjwvZGl2PicsXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBpbiB0aGUgdmlldyB0aGUgZWxlbWVudCBzdGlja3MgdG8uIENhbiBiZSBgJ3RvcCdgIG9yIGAnYm90dG9tJ2AuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3RvcCdcbiAgICovXG4gIHN0aWNrVG86ICd0b3AnLFxuICAvKipcbiAgICogSWYgYW5jaG9yZWQgdG8gYSBzaW5nbGUgZWxlbWVudCwgdGhlIGlkIG9mIHRoYXQgZWxlbWVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgYW5jaG9yOiAnJyxcbiAgLyoqXG4gICAqIElmIHVzaW5nIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhcyBhbmNob3IgcG9pbnRzLCB0aGUgaWQgb2YgdGhlIHRvcCBhbmNob3IuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHRvcEFuY2hvcjogJycsXG4gIC8qKlxuICAgKiBJZiB1c2luZyBtb3JlIHRoYW4gb25lIGVsZW1lbnQgYXMgYW5jaG9yIHBvaW50cywgdGhlIGlkIG9mIHRoZSBib3R0b20gYW5jaG9yLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBidG1BbmNob3I6ICcnLFxuICAvKipcbiAgICogTWFyZ2luLCBpbiBgZW1gJ3MgdG8gYXBwbHkgdG8gdGhlIHRvcCBvZiB0aGUgZWxlbWVudCB3aGVuIGl0IGJlY29tZXMgc3RpY2t5LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIG1hcmdpblRvcDogMSxcbiAgLyoqXG4gICAqIE1hcmdpbiwgaW4gYGVtYCdzIHRvIGFwcGx5IHRvIHRoZSBib3R0b20gb2YgdGhlIGVsZW1lbnQgd2hlbiBpdCBiZWNvbWVzIHN0aWNreS5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBtYXJnaW5Cb3R0b206IDEsXG4gIC8qKlxuICAgKiBCcmVha3BvaW50IHN0cmluZyB0aGF0IGlzIHRoZSBtaW5pbXVtIHNjcmVlbiBzaXplIGFuIGVsZW1lbnQgc2hvdWxkIGJlY29tZSBzdGlja3kuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHN0aWNreU9uOiAnbWVkaXVtJyxcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gc3RpY2t5IGVsZW1lbnQsIGFuZCByZW1vdmVkIG9uIGRlc3RydWN0aW9uLiBGb3VuZGF0aW9uIGRlZmF1bHRzIHRvIGBzdGlja3lgLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdzdGlja3knXG4gICAqL1xuICBzdGlja3lDbGFzczogJ3N0aWNreScsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHN0aWNreSBjb250YWluZXIuIEZvdW5kYXRpb24gZGVmYXVsdHMgdG8gYHN0aWNreS1jb250YWluZXJgLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdzdGlja3ktY29udGFpbmVyJ1xuICAgKi9cbiAgY29udGFpbmVyQ2xhc3M6ICdzdGlja3ktY29udGFpbmVyJyxcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzY3JvbGwgZXZlbnRzIGJldHdlZW4gdGhlIHBsdWdpbidzIHJlY2FsY3VsYXRpbmcgc3RpY2t5IHBvaW50cy4gU2V0dGluZyBpdCB0byBgMGAgd2lsbCBjYXVzZSBpdCB0byByZWNhbGMgZXZlcnkgc2Nyb2xsIGV2ZW50LCBzZXR0aW5nIGl0IHRvIGAtMWAgd2lsbCBwcmV2ZW50IHJlY2FsYyBvbiBzY3JvbGwuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgLTFcbiAgICovXG4gIGNoZWNrRXZlcnk6IC0xXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgZW0gdmFsdWVzXG4gKiBAcGFyYW0gTnVtYmVyIHtlbX0gLSBudW1iZXIgb2YgZW0ncyB0byBjYWxjdWxhdGUgaW50byBwaXhlbHNcbiAqL1xuZnVuY3Rpb24gZW1DYWxjKGVtKSB7XG4gIHJldHVybiBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5LCBudWxsKS5mb250U2l6ZSwgMTApICogZW07XG59XG5cbi8vIFdpbmRvdyBleHBvcnRzXG5Gb3VuZGF0aW9uLnBsdWdpbihTdGlja3ksICdTdGlja3knKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFRhYnMgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRhYnNcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwua2V5Ym9hcmRcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudGltZXJBbmRJbWFnZUxvYWRlciBpZiB0YWJzIGNvbnRhaW4gaW1hZ2VzXG4gKi9cblxuY2xhc3MgVGFicyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRhYnMuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVGFicyNpbml0XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBtYWtlIGludG8gdGFicy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBUYWJzLmRlZmF1bHRzLCB0aGlzLiRlbGVtZW50LmRhdGEoKSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgRm91bmRhdGlvbi5yZWdpc3RlclBsdWdpbih0aGlzLCAnVGFicycpO1xuICAgIEZvdW5kYXRpb24uS2V5Ym9hcmQucmVnaXN0ZXIoJ1RhYnMnLCB7XG4gICAgICAnRU5URVInOiAnb3BlbicsXG4gICAgICAnU1BBQ0UnOiAnb3BlbicsXG4gICAgICAnQVJST1dfUklHSFQnOiAnbmV4dCcsXG4gICAgICAnQVJST1dfVVAnOiAncHJldmlvdXMnLFxuICAgICAgJ0FSUk9XX0RPV04nOiAnbmV4dCcsXG4gICAgICAnQVJST1dfTEVGVCc6ICdwcmV2aW91cydcbiAgICAgIC8vICdUQUInOiAnbmV4dCcsXG4gICAgICAvLyAnU0hJRlRfVEFCJzogJ3ByZXZpb3VzJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB0YWJzIGJ5IHNob3dpbmcgYW5kIGZvY3VzaW5nIChpZiBhdXRvRm9jdXM9dHJ1ZSkgdGhlIHByZXNldCBhY3RpdmUgdGFiLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7J3JvbGUnOiAndGFibGlzdCd9KTtcbiAgICB0aGlzLiR0YWJUaXRsZXMgPSB0aGlzLiRlbGVtZW50LmZpbmQoYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9YCk7XG4gICAgdGhpcy4kdGFiQ29udGVudCA9ICQoYFtkYXRhLXRhYnMtY29udGVudD1cIiR7dGhpcy4kZWxlbWVudFswXS5pZH1cIl1gKTtcblxuICAgIHRoaXMuJHRhYlRpdGxlcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgJGVsZW0gPSAkKHRoaXMpLFxuICAgICAgICAgICRsaW5rID0gJGVsZW0uZmluZCgnYScpLFxuICAgICAgICAgIGlzQWN0aXZlID0gJGVsZW0uaGFzQ2xhc3MoYCR7X3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCksXG4gICAgICAgICAgaGFzaCA9ICRsaW5rWzBdLmhhc2guc2xpY2UoMSksXG4gICAgICAgICAgbGlua0lkID0gJGxpbmtbMF0uaWQgPyAkbGlua1swXS5pZCA6IGAke2hhc2h9LWxhYmVsYCxcbiAgICAgICAgICAkdGFiQ29udGVudCA9ICQoYCMke2hhc2h9YCk7XG5cbiAgICAgICRlbGVtLmF0dHIoeydyb2xlJzogJ3ByZXNlbnRhdGlvbid9KTtcblxuICAgICAgJGxpbmsuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ3RhYicsXG4gICAgICAgICdhcmlhLWNvbnRyb2xzJzogaGFzaCxcbiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBpc0FjdGl2ZSxcbiAgICAgICAgJ2lkJzogbGlua0lkXG4gICAgICB9KTtcblxuICAgICAgJHRhYkNvbnRlbnQuYXR0cih7XG4gICAgICAgICdyb2xlJzogJ3RhYnBhbmVsJyxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogIWlzQWN0aXZlLFxuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGlua0lkXG4gICAgICB9KTtcblxuICAgICAgaWYoaXNBY3RpdmUgJiYgX3RoaXMub3B0aW9ucy5hdXRvRm9jdXMpe1xuICAgICAgICAkKHdpbmRvdykubG9hZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogJGVsZW0ub2Zmc2V0KCkudG9wIH0sIF90aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2VEZWxheSwgKCkgPT4ge1xuICAgICAgICAgICAgJGxpbmsuZm9jdXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYodGhpcy5vcHRpb25zLm1hdGNoSGVpZ2h0KSB7XG4gICAgICB2YXIgJGltYWdlcyA9IHRoaXMuJHRhYkNvbnRlbnQuZmluZCgnaW1nJyk7XG5cbiAgICAgIGlmICgkaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgICBGb3VuZGF0aW9uLm9uSW1hZ2VzTG9hZGVkKCRpbWFnZXMsIHRoaXMuX3NldEhlaWdodC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldEhlaWdodCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICAvL2N1cnJlbnQgY29udGV4dC1ib3VuZCBmdW5jdGlvbiB0byBvcGVuIHRhYnMgb24gcGFnZSBsb2FkIG9yIGhpc3RvcnkgcG9wc3RhdGVcbiAgICB0aGlzLl9jaGVja0RlZXBMaW5rID0gKCkgPT4ge1xuICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgLy9uZWVkIGEgaGFzaCBhbmQgYSByZWxldmFudCBhbmNob3IgaW4gdGhpcyB0YWJzZXRcbiAgICAgIGlmKGFuY2hvci5sZW5ndGgpIHtcbiAgICAgICAgdmFyICRsaW5rID0gdGhpcy4kZWxlbWVudC5maW5kKCdbaHJlZiQ9XCInK2FuY2hvcisnXCJdJyk7XG4gICAgICAgIGlmICgkbGluay5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdFRhYigkKGFuY2hvciksIHRydWUpO1xuXG4gICAgICAgICAgLy9yb2xsIHVwIGEgbGl0dGxlIHRvIHNob3cgdGhlIHRpdGxlc1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmtTbXVkZ2UpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLiRlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IG9mZnNldC50b3AgfSwgdGhpcy5vcHRpb25zLmRlZXBMaW5rU211ZGdlRGVsYXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB6cGx1Z2luIGhhcyBkZWVwbGlua2VkIGF0IHBhZ2Vsb2FkXG4gICAgICAgICAgICAqIEBldmVudCBUYWJzI2RlZXBsaW5rXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2RlZXBsaW5rLnpmLnRhYnMnLCBbJGxpbmssICQoYW5jaG9yKV0pO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICAgLy91c2UgYnJvd3NlciB0byBvcGVuIGEgdGFiLCBpZiBpdCBleGlzdHMgaW4gdGhpcyB0YWJzZXRcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICB0aGlzLl9jaGVja0RlZXBMaW5rKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBldmVudCBoYW5kbGVycyBmb3IgaXRlbXMgd2l0aGluIHRoZSB0YWJzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLl9hZGRLZXlIYW5kbGVyKCk7XG4gICAgdGhpcy5fYWRkQ2xpY2tIYW5kbGVyKCk7XG4gICAgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIHRoaXMuX3NldEhlaWdodE1xSGFuZGxlciA9IHRoaXMuX3NldEhlaWdodC5iaW5kKHRoaXMpO1xuXG4gICAgICAkKHdpbmRvdykub24oJ2NoYW5nZWQuemYubWVkaWFxdWVyeScsIHRoaXMuX3NldEhlaWdodE1xSGFuZGxlcik7XG4gICAgfVxuXG4gICAgaWYodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAkKHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhpcy5fY2hlY2tEZWVwTGluayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY2xpY2sgaGFuZGxlcnMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgdGFicy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRDbGlja0hhbmRsZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vZmYoJ2NsaWNrLnpmLnRhYnMnKVxuICAgICAgLm9uKCdjbGljay56Zi50YWJzJywgYC4ke3RoaXMub3B0aW9ucy5saW5rQ2xhc3N9YCwgZnVuY3Rpb24oZSl7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgX3RoaXMuX2hhbmRsZVRhYkNoYW5nZSgkKHRoaXMpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMga2V5Ym9hcmQgZXZlbnQgaGFuZGxlcnMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgdGFicy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGRLZXlIYW5kbGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiR0YWJUaXRsZXMub2ZmKCdrZXlkb3duLnpmLnRhYnMnKS5vbigna2V5ZG93bi56Zi50YWJzJywgZnVuY3Rpb24oZSl7XG4gICAgICBpZiAoZS53aGljaCA9PT0gOSkgcmV0dXJuO1xuXG5cbiAgICAgIHZhciAkZWxlbWVudCA9ICQodGhpcyksXG4gICAgICAgICRlbGVtZW50cyA9ICRlbGVtZW50LnBhcmVudCgndWwnKS5jaGlsZHJlbignbGknKSxcbiAgICAgICAgJHByZXZFbGVtZW50LFxuICAgICAgICAkbmV4dEVsZW1lbnQ7XG5cbiAgICAgICRlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKCQodGhpcykuaXMoJGVsZW1lbnQpKSB7XG4gICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMud3JhcE9uS2V5cykge1xuICAgICAgICAgICAgJHByZXZFbGVtZW50ID0gaSA9PT0gMCA/ICRlbGVtZW50cy5sYXN0KCkgOiAkZWxlbWVudHMuZXEoaS0xKTtcbiAgICAgICAgICAgICRuZXh0RWxlbWVudCA9IGkgPT09ICRlbGVtZW50cy5sZW5ndGggLTEgPyAkZWxlbWVudHMuZmlyc3QoKSA6ICRlbGVtZW50cy5lcShpKzEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJldkVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5tYXgoMCwgaS0xKSk7XG4gICAgICAgICAgICAkbmV4dEVsZW1lbnQgPSAkZWxlbWVudHMuZXEoTWF0aC5taW4oaSsxLCAkZWxlbWVudHMubGVuZ3RoLTEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Ym9hcmQgdXRpbFxuICAgICAgRm91bmRhdGlvbi5LZXlib2FyZC5oYW5kbGVLZXkoZSwgJ1RhYnMnLCB7XG4gICAgICAgIG9wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRlbGVtZW50LmZpbmQoJ1tyb2xlPVwidGFiXCJdJykuZm9jdXMoKTtcbiAgICAgICAgICBfdGhpcy5faGFuZGxlVGFiQ2hhbmdlKCRlbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRwcmV2RWxlbWVudC5maW5kKCdbcm9sZT1cInRhYlwiXScpLmZvY3VzKCk7XG4gICAgICAgICAgX3RoaXMuX2hhbmRsZVRhYkNoYW5nZSgkcHJldkVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAkbmV4dEVsZW1lbnQuZmluZCgnW3JvbGU9XCJ0YWJcIl0nKS5mb2N1cygpO1xuICAgICAgICAgIF90aGlzLl9oYW5kbGVUYWJDaGFuZ2UoJG5leHRFbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSB0YWIgYCR0YXJnZXRDb250ZW50YCBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC4gQ29sbGFwc2VzIGFjdGl2ZSB0YWIuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gVGFiIHRvIG9wZW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlzdG9yeUhhbmRsZWQgLSBicm93c2VyIGhhcyBhbHJlYWR5IGhhbmRsZWQgYSBoaXN0b3J5IHVwZGF0ZVxuICAgKiBAZmlyZXMgVGFicyNjaGFuZ2VcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfaGFuZGxlVGFiQ2hhbmdlKCR0YXJnZXQsIGhpc3RvcnlIYW5kbGVkKSB7XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgYWN0aXZlIGNsYXNzIG9uIHRhcmdldC4gQ29sbGFwc2UgaWYgZXhpc3RzLlxuICAgICAqL1xuICAgIGlmICgkdGFyZ2V0Lmhhc0NsYXNzKGAke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCkpIHtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmFjdGl2ZUNvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRhYigkdGFyZ2V0KTtcblxuICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgenBsdWdpbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbGxhcHNlZCB0YWJzLlxuICAgICAgICAgICAgKiBAZXZlbnQgVGFicyNjb2xsYXBzZVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignY29sbGFwc2UuemYudGFicycsIFskdGFyZ2V0XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciAkb2xkVGFiID0gdGhpcy4kZWxlbWVudC5cbiAgICAgICAgICBmaW5kKGAuJHt0aGlzLm9wdGlvbnMubGlua0NsYXNzfS4ke3RoaXMub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3N9YCksXG4gICAgICAgICAgJHRhYkxpbmsgPSAkdGFyZ2V0LmZpbmQoJ1tyb2xlPVwidGFiXCJdJyksXG4gICAgICAgICAgaGFzaCA9ICR0YWJMaW5rWzBdLmhhc2gsXG4gICAgICAgICAgJHRhcmdldENvbnRlbnQgPSB0aGlzLiR0YWJDb250ZW50LmZpbmQoaGFzaCk7XG5cbiAgICAvL2Nsb3NlIG9sZCB0YWJcbiAgICB0aGlzLl9jb2xsYXBzZVRhYigkb2xkVGFiKTtcblxuICAgIC8vb3BlbiBuZXcgdGFiXG4gICAgdGhpcy5fb3BlblRhYigkdGFyZ2V0KTtcblxuICAgIC8vZWl0aGVyIHJlcGxhY2Ugb3IgdXBkYXRlIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVlcExpbmsgJiYgIWhpc3RvcnlIYW5kbGVkKSB7XG4gICAgICB2YXIgYW5jaG9yID0gJHRhcmdldC5maW5kKCdhJykuYXR0cignaHJlZicpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnVwZGF0ZUhpc3RvcnkpIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBhbmNob3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBhbmNob3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHBsdWdpbiBoYXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdGFicy5cbiAgICAgKiBAZXZlbnQgVGFicyNjaGFuZ2VcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2NoYW5nZS56Zi50YWJzJywgWyR0YXJnZXQsICR0YXJnZXRDb250ZW50XSk7XG5cbiAgICAvL2ZpcmUgdG8gY2hpbGRyZW4gYSBtdXRhdGlvbiBldmVudFxuICAgICR0YXJnZXRDb250ZW50LmZpbmQoXCJbZGF0YS1tdXRhdGVdXCIpLnRyaWdnZXIoXCJtdXRhdGVtZS56Zi50cmlnZ2VyXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSB0YWIgYCR0YXJnZXRDb250ZW50YCBkZWZpbmVkIGJ5IGAkdGFyZ2V0YC5cbiAgICogQHBhcmFtIHtqUXVlcnl9ICR0YXJnZXQgLSBUYWIgdG8gT3Blbi5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBfb3BlblRhYigkdGFyZ2V0KSB7XG4gICAgICB2YXIgJHRhYkxpbmsgPSAkdGFyZ2V0LmZpbmQoJ1tyb2xlPVwidGFiXCJdJyksXG4gICAgICAgICAgaGFzaCA9ICR0YWJMaW5rWzBdLmhhc2gsXG4gICAgICAgICAgJHRhcmdldENvbnRlbnQgPSB0aGlzLiR0YWJDb250ZW50LmZpbmQoaGFzaCk7XG5cbiAgICAgICR0YXJnZXQuYWRkQ2xhc3MoYCR7dGhpcy5vcHRpb25zLmxpbmtBY3RpdmVDbGFzc31gKTtcblxuICAgICAgJHRhYkxpbmsuYXR0cih7J2FyaWEtc2VsZWN0ZWQnOiAndHJ1ZSd9KTtcblxuICAgICAgJHRhcmdldENvbnRlbnRcbiAgICAgICAgLmFkZENsYXNzKGAke3RoaXMub3B0aW9ucy5wYW5lbEFjdGl2ZUNsYXNzfWApXG4gICAgICAgIC5hdHRyKHsnYXJpYS1oaWRkZW4nOiAnZmFsc2UnfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2VzIGAkdGFyZ2V0Q29udGVudGAgZGVmaW5lZCBieSBgJHRhcmdldGAuXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdGFyZ2V0IC0gVGFiIHRvIE9wZW4uXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgX2NvbGxhcHNlVGFiKCR0YXJnZXQpIHtcbiAgICB2YXIgJHRhcmdldF9hbmNob3IgPSAkdGFyZ2V0XG4gICAgICAucmVtb3ZlQ2xhc3MoYCR7dGhpcy5vcHRpb25zLmxpbmtBY3RpdmVDbGFzc31gKVxuICAgICAgLmZpbmQoJ1tyb2xlPVwidGFiXCJdJylcbiAgICAgIC5hdHRyKHsgJ2FyaWEtc2VsZWN0ZWQnOiAnZmFsc2UnIH0pO1xuXG4gICAgJChgIyR7JHRhcmdldF9hbmNob3IuYXR0cignYXJpYS1jb250cm9scycpfWApXG4gICAgICAucmVtb3ZlQ2xhc3MoYCR7dGhpcy5vcHRpb25zLnBhbmVsQWN0aXZlQ2xhc3N9YClcbiAgICAgIC5hdHRyKHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgZm9yIHNlbGVjdGluZyBhIGNvbnRlbnQgcGFuZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge2pRdWVyeSB8IFN0cmluZ30gZWxlbSAtIGpRdWVyeSBvYmplY3Qgb3Igc3RyaW5nIG9mIHRoZSBpZCBvZiB0aGUgcGFuZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpc3RvcnlIYW5kbGVkIC0gYnJvd3NlciBoYXMgYWxyZWFkeSBoYW5kbGVkIGEgaGlzdG9yeSB1cGRhdGVcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBzZWxlY3RUYWIoZWxlbSwgaGlzdG9yeUhhbmRsZWQpIHtcbiAgICB2YXIgaWRTdHI7XG5cbiAgICBpZiAodHlwZW9mIGVsZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZFN0ciA9IGVsZW1bMF0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkU3RyID0gZWxlbTtcbiAgICB9XG5cbiAgICBpZiAoaWRTdHIuaW5kZXhPZignIycpIDwgMCkge1xuICAgICAgaWRTdHIgPSBgIyR7aWRTdHJ9YDtcbiAgICB9XG5cbiAgICB2YXIgJHRhcmdldCA9IHRoaXMuJHRhYlRpdGxlcy5maW5kKGBbaHJlZiQ9XCIke2lkU3RyfVwiXWApLnBhcmVudChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKTtcblxuICAgIHRoaXMuX2hhbmRsZVRhYkNoYW5nZSgkdGFyZ2V0LCBoaXN0b3J5SGFuZGxlZCk7XG4gIH07XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBoZWlnaHQgb2YgZWFjaCBwYW5lbCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0YWxsZXN0IHBhbmVsLlxuICAgKiBJZiBlbmFibGVkIGluIG9wdGlvbnMsIGdldHMgY2FsbGVkIG9uIG1lZGlhIHF1ZXJ5IGNoYW5nZS5cbiAgICogSWYgbG9hZGluZyBjb250ZW50IHZpYSBleHRlcm5hbCBzb3VyY2UsIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgb3Igd2l0aCBfcmVmbG93LlxuICAgKiBJZiBlbmFibGVkIHdpdGggYGRhdGEtbWF0Y2gtaGVpZ2h0PVwidHJ1ZVwiYCwgdGFicyBzZXRzIHRvIGVxdWFsIGhlaWdodFxuICAgKiBAZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRIZWlnaHQoKSB7XG4gICAgdmFyIG1heCA9IDAsXG4gICAgICAgIF90aGlzID0gdGhpczsgLy8gTG9jayBkb3duIHRoZSBgdGhpc2AgdmFsdWUgZm9yIHRoZSByb290IHRhYnMgb2JqZWN0XG5cbiAgICB0aGlzLiR0YWJDb250ZW50XG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLnBhbmVsQ2xhc3N9YClcbiAgICAgIC5jc3MoJ2hlaWdodCcsICcnKVxuICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIHBhbmVsID0gJCh0aGlzKSxcbiAgICAgICAgICAgIGlzQWN0aXZlID0gcGFuZWwuaGFzQ2xhc3MoYCR7X3RoaXMub3B0aW9ucy5wYW5lbEFjdGl2ZUNsYXNzfWApOyAvLyBnZXQgdGhlIG9wdGlvbnMgZnJvbSB0aGUgcGFyZW50IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGdldCB0aGVtIGZyb20gdGhlIGNoaWxkXG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgIHBhbmVsLmNzcyh7J3Zpc2liaWxpdHknOiAnaGlkZGVuJywgJ2Rpc3BsYXknOiAnYmxvY2snfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGVtcCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgICBwYW5lbC5jc3Moe1xuICAgICAgICAgICAgJ3Zpc2liaWxpdHknOiAnJyxcbiAgICAgICAgICAgICdkaXNwbGF5JzogJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heCA9IHRlbXAgPiBtYXggPyB0ZW1wIDogbWF4O1xuICAgICAgfSlcbiAgICAgIC5jc3MoJ2hlaWdodCcsIGAke21heH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFuIGluc3RhbmNlIG9mIGFuIHRhYnMuXG4gICAqIEBmaXJlcyBUYWJzI2Rlc3Ryb3llZFxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuZmluZChgLiR7dGhpcy5vcHRpb25zLmxpbmtDbGFzc31gKVxuICAgICAgLm9mZignLnpmLnRhYnMnKS5oaWRlKCkuZW5kKClcbiAgICAgIC5maW5kKGAuJHt0aGlzLm9wdGlvbnMucGFuZWxDbGFzc31gKVxuICAgICAgLmhpZGUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF0Y2hIZWlnaHQpIHtcbiAgICAgIGlmICh0aGlzLl9zZXRIZWlnaHRNcUhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgJCh3aW5kb3cpLm9mZignY2hhbmdlZC56Zi5tZWRpYXF1ZXJ5JywgdGhpcy5fc2V0SGVpZ2h0TXFIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZXBMaW5rKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdwb3BzdGF0ZScsIHRoaXMuX2NoZWNrRGVlcExpbmspO1xuICAgIH1cblxuICAgIEZvdW5kYXRpb24udW5yZWdpc3RlclBsdWdpbih0aGlzKTtcbiAgfVxufVxuXG5UYWJzLmRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQWxsb3dzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsIHRvIGNvbnRlbnQgb2YgcGFuZSBzcGVjaWZpZWQgYnkgaGFzaCBhbmNob3JcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXBMaW5rOiBmYWxzZSxcblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBkZWVwIGxpbmsgc2Nyb2xsIHRvIG1ha2Ugc3VyZSB0aGUgdG9wIG9mIHRoZSB0YWIgcGFuZWwgaXMgdmlzaWJsZVxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVlcExpbmtTbXVkZ2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbmltYXRpb24gdGltZSAobXMpIGZvciB0aGUgZGVlcCBsaW5rIGFkanVzdG1lbnRcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIGRlZXBMaW5rU211ZGdlRGVsYXk6IDMwMCxcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBicm93c2VyIGhpc3Rvcnkgd2l0aCB0aGUgb3BlbiB0YWJcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVwZGF0ZUhpc3Rvcnk6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHdpbmRvdyB0byBzY3JvbGwgdG8gY29udGVudCBvZiBhY3RpdmUgcGFuZSBvbiBsb2FkIGlmIHNldCB0byB0cnVlLlxuICAgKiBOb3QgcmVjb21tZW5kZWQgaWYgbW9yZSB0aGFuIG9uZSB0YWIgcGFuZWwgcGVyIHBhZ2UuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3Mga2V5Ym9hcmQgaW5wdXQgdG8gJ3dyYXAnIGFyb3VuZCB0aGUgdGFiIGxpbmtzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3cmFwT25LZXlzOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHRhYiBjb250ZW50IHBhbmVzIHRvIG1hdGNoIGhlaWdodHMgaWYgc2V0IHRvIHRydWUuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtYXRjaEhlaWdodDogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEFsbG93cyBhY3RpdmUgdGFicyB0byBjb2xsYXBzZSB3aGVuIGNsaWNrZWQuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhY3RpdmVDb2xsYXBzZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gYGxpYCdzIGluIHRhYiBsaW5rIGxpc3QuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ3RhYnMtdGl0bGUnXG4gICAqL1xuICBsaW5rQ2xhc3M6ICd0YWJzLXRpdGxlJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgYWN0aXZlIGBsaWAgaW4gdGFiIGxpbmsgbGlzdC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnaXMtYWN0aXZlJ1xuICAgKi9cbiAgbGlua0FjdGl2ZUNsYXNzOiAnaXMtYWN0aXZlJyxcblxuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgY29udGVudCBjb250YWluZXJzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICd0YWJzLXBhbmVsJ1xuICAgKi9cbiAgcGFuZWxDbGFzczogJ3RhYnMtcGFuZWwnLFxuXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSBhY3RpdmUgY29udGVudCBjb250YWluZXIuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lzLWFjdGl2ZSdcbiAgICovXG4gIHBhbmVsQWN0aXZlQ2xhc3M6ICdpcy1hY3RpdmUnXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oVGFicywgJ1RhYnMnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFRvZ2dsZXIgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRvZ2dsZXJcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwubW90aW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLnRyaWdnZXJzXG4gKi9cblxuY2xhc3MgVG9nZ2xlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRvZ2dsZXIuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgVG9nZ2xlciNpbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IC0galF1ZXJ5IG9iamVjdCB0byBhZGQgdGhlIHRyaWdnZXIgdG8uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3ZlcnJpZGVzIHRvIHRoZSBkZWZhdWx0IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgVG9nZ2xlci5kZWZhdWx0cywgZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xhc3NOYW1lID0gJyc7XG5cbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fZXZlbnRzKCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdUb2dnbGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFRvZ2dsZXIgcGx1Z2luIGJ5IHBhcnNpbmcgdGhlIHRvZ2dsZSBjbGFzcyBmcm9tIGRhdGEtdG9nZ2xlciwgb3IgYW5pbWF0aW9uIGNsYXNzZXMgZnJvbSBkYXRhLWFuaW1hdGUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgdmFyIGlucHV0O1xuICAgIC8vIFBhcnNlIGFuaW1hdGlvbiBjbGFzc2VzIGlmIHRoZXkgd2VyZSBzZXRcbiAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGUpIHtcbiAgICAgIGlucHV0ID0gdGhpcy5vcHRpb25zLmFuaW1hdGUuc3BsaXQoJyAnKTtcblxuICAgICAgdGhpcy5hbmltYXRpb25JbiA9IGlucHV0WzBdO1xuICAgICAgdGhpcy5hbmltYXRpb25PdXQgPSBpbnB1dFsxXSB8fCBudWxsO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHBhcnNlIHRvZ2dsZSBjbGFzc1xuICAgIGVsc2Uge1xuICAgICAgaW5wdXQgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3RvZ2dsZXInKTtcbiAgICAgIC8vIEFsbG93IGZvciBhIC4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nXG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IGlucHV0WzBdID09PSAnLicgPyBpbnB1dC5zbGljZSgxKSA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIEFkZCBBUklBIGF0dHJpYnV0ZXMgdG8gdHJpZ2dlcnNcbiAgICB2YXIgaWQgPSB0aGlzLiRlbGVtZW50WzBdLmlkO1xuICAgICQoYFtkYXRhLW9wZW49XCIke2lkfVwiXSwgW2RhdGEtY2xvc2U9XCIke2lkfVwiXSwgW2RhdGEtdG9nZ2xlPVwiJHtpZH1cIl1gKVxuICAgICAgLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBpZCk7XG4gICAgLy8gSWYgdGhlIHRhcmdldCBpcyBoaWRkZW4sIGFkZCBhcmlhLWhpZGRlblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIHRoaXMuJGVsZW1lbnQuaXMoJzpoaWRkZW4nKSA/IGZhbHNlIDogdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZXZlbnRzIGZvciB0aGUgdG9nZ2xlIHRyaWdnZXIuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZigndG9nZ2xlLnpmLnRyaWdnZXInKS5vbigndG9nZ2xlLnpmLnRyaWdnZXInLCB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0YXJnZXQgY2xhc3Mgb24gdGhlIHRhcmdldCBlbGVtZW50LiBBbiBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvcmlnaW5hbCB0cmlnZ2VyIGRlcGVuZGluZyBvbiBpZiB0aGUgcmVzdWx0YW50IHN0YXRlIHdhcyBcIm9uXCIgb3IgXCJvZmZcIi5cbiAgICogQGZ1bmN0aW9uXG4gICAqIEBmaXJlcyBUb2dnbGVyI29uXG4gICAqIEBmaXJlcyBUb2dnbGVyI29mZlxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXNbIHRoaXMub3B0aW9ucy5hbmltYXRlID8gJ190b2dnbGVBbmltYXRlJyA6ICdfdG9nZ2xlQ2xhc3MnXSgpO1xuICB9XG5cbiAgX3RvZ2dsZUNsYXNzKCkge1xuICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5jbGFzc05hbWUpO1xuXG4gICAgdmFyIGlzT24gPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lKTtcbiAgICBpZiAoaXNPbikge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXJlcyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIHRoZSBjbGFzcyBhZnRlciBhIHRvZ2dsZS5cbiAgICAgICAqIEBldmVudCBUb2dnbGVyI29uXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb24uemYudG9nZ2xlcicpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogRmlyZXMgaWYgdGhlIHRhcmdldCBlbGVtZW50IGRvZXMgbm90IGhhdmUgdGhlIGNsYXNzIGFmdGVyIGEgdG9nZ2xlLlxuICAgICAgICogQGV2ZW50IFRvZ2dsZXIjb2ZmXG4gICAgICAgKi9cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignb2ZmLnpmLnRvZ2dsZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVBUklBKGlzT24pO1xuICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnW2RhdGEtbXV0YXRlXScpLnRyaWdnZXIoJ211dGF0ZW1lLnpmLnRyaWdnZXInKTtcbiAgfVxuXG4gIF90b2dnbGVBbmltYXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5pcygnOmhpZGRlbicpKSB7XG4gICAgICBGb3VuZGF0aW9uLk1vdGlvbi5hbmltYXRlSW4odGhpcy4kZWxlbWVudCwgdGhpcy5hbmltYXRpb25JbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKHRydWUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ29uLnpmLnRvZ2dsZXInKTtcbiAgICAgICAgdGhpcy5maW5kKCdbZGF0YS1tdXRhdGVdJykudHJpZ2dlcignbXV0YXRlbWUuemYudHJpZ2dlcicpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgRm91bmRhdGlvbi5Nb3Rpb24uYW5pbWF0ZU91dCh0aGlzLiRlbGVtZW50LCB0aGlzLmFuaW1hdGlvbk91dCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLl91cGRhdGVBUklBKGZhbHNlKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdvZmYuemYudG9nZ2xlcicpO1xuICAgICAgICB0aGlzLmZpbmQoJ1tkYXRhLW11dGF0ZV0nKS50cmlnZ2VyKCdtdXRhdGVtZS56Zi50cmlnZ2VyJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlQVJJQShpc09uKSB7XG4gICAgdGhpcy4kZWxlbWVudC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgaXNPbiA/IHRydWUgOiBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIFRvZ2dsZXIgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50Lm9mZignLnpmLnRvZ2dsZXInKTtcbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuVG9nZ2xlci5kZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFRlbGxzIHRoZSBwbHVnaW4gaWYgdGhlIGVsZW1lbnQgc2hvdWxkIGFuaW1hdGVkIHdoZW4gdG9nZ2xlZC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFuaW1hdGU6IGZhbHNlXG59O1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oVG9nZ2xlciwgJ1RvZ2dsZXInKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFRvb2x0aXAgbW9kdWxlLlxuICogQG1vZHVsZSBmb3VuZGF0aW9uLnRvb2x0aXBcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwuYm94XG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1lZGlhUXVlcnlcbiAqIEByZXF1aXJlcyBmb3VuZGF0aW9uLnV0aWwudHJpZ2dlcnNcbiAqL1xuXG5jbGFzcyBUb29sdGlwIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBUb29sdGlwLlxuICAgKiBAY2xhc3NcbiAgICogQGZpcmVzIFRvb2x0aXAjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gYXR0YWNoIGEgdG9vbHRpcCB0by5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvYmplY3QgdG8gZXh0ZW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFRvb2x0aXAuZGVmYXVsdHMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcblxuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLl9pbml0KCk7XG5cbiAgICBGb3VuZGF0aW9uLnJlZ2lzdGVyUGx1Z2luKHRoaXMsICdUb29sdGlwJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRvb2x0aXAgYnkgc2V0dGluZyB0aGUgY3JlYXRpbmcgdGhlIHRpcCBlbGVtZW50LCBhZGRpbmcgaXQncyB0ZXh0LCBzZXR0aW5nIHByaXZhdGUgdmFyaWFibGVzIGFuZCBzZXR0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIGFuY2hvci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0KCkge1xuICAgIHZhciBlbGVtSWQgPSB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKSB8fCBGb3VuZGF0aW9uLkdldFlvRGlnaXRzKDYsICd0b29sdGlwJyk7XG5cbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzIHx8IHRoaXMuX2dldFBvc2l0aW9uQ2xhc3ModGhpcy4kZWxlbWVudCk7XG4gICAgdGhpcy5vcHRpb25zLnRpcFRleHQgPSB0aGlzLm9wdGlvbnMudGlwVGV4dCB8fCB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJyk7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZSA/ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKSA6IHRoaXMuX2J1aWxkVGVtcGxhdGUoZWxlbUlkKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dIdG1sKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpXG4gICAgICAgIC5odG1sKHRoaXMub3B0aW9ucy50aXBUZXh0KVxuICAgICAgICAuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpXG4gICAgICAgIC50ZXh0KHRoaXMub3B0aW9ucy50aXBUZXh0KVxuICAgICAgICAuaGlkZSgpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsZW1lbnQuYXR0cih7XG4gICAgICAndGl0bGUnOiAnJyxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogZWxlbUlkLFxuICAgICAgJ2RhdGEteWV0aS1ib3gnOiBlbGVtSWQsXG4gICAgICAnZGF0YS10b2dnbGUnOiBlbGVtSWQsXG4gICAgICAnZGF0YS1yZXNpemUnOiBlbGVtSWRcbiAgICB9KS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudHJpZ2dlckNsYXNzKTtcblxuICAgIC8vaGVscGVyIHZhcmlhYmxlcyB0byB0cmFjayBtb3ZlbWVudCBvbiBjb2xsaXNpb25zXG4gICAgdGhpcy51c2VkUG9zaXRpb25zID0gW107XG4gICAgdGhpcy5jb3VudGVyID0gNDtcbiAgICB0aGlzLmNsYXNzQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5fZXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhYnMgdGhlIGN1cnJlbnQgcG9zaXRpb25pbmcgY2xhc3MsIGlmIHByZXNlbnQsIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0UG9zaXRpb25DbGFzcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7IHJldHVybiAnJzsgfVxuICAgIC8vIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuYXR0cignY2xhc3MnKS5tYXRjaCgvdG9wfGxlZnR8cmlnaHQvZyk7XG4gICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudFswXS5jbGFzc05hbWUubWF0Y2goL1xcYih0b3B8bGVmdHxyaWdodClcXGIvZyk7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPyBwb3NpdGlvblswXSA6ICcnO1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfTtcbiAgLyoqXG4gICAqIGJ1aWxkcyB0aGUgdG9vbHRpcCBlbGVtZW50LCBhZGRzIGF0dHJpYnV0ZXMsIGFuZCByZXR1cm5zIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9idWlsZFRlbXBsYXRlKGlkKSB7XG4gICAgdmFyIHRlbXBsYXRlQ2xhc3NlcyA9IChgJHt0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfSAke3RoaXMub3B0aW9ucy5wb3NpdGlvbkNsYXNzfSAke3RoaXMub3B0aW9ucy50ZW1wbGF0ZUNsYXNzZXN9YCkudHJpbSgpO1xuICAgIHZhciAkdGVtcGxhdGUgPSAgJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcyh0ZW1wbGF0ZUNsYXNzZXMpLmF0dHIoe1xuICAgICAgJ3JvbGUnOiAndG9vbHRpcCcsXG4gICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgJ2RhdGEtaXMtYWN0aXZlJzogZmFsc2UsXG4gICAgICAnZGF0YS1pcy1mb2N1cyc6IGZhbHNlLFxuICAgICAgJ2lkJzogaWRcbiAgICB9KTtcbiAgICByZXR1cm4gJHRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgaWYgYSBjb2xsaXNpb24gZXZlbnQgaXMgZGV0ZWN0ZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwb3NpdGlvbiAtIHBvc2l0aW9uaW5nIGNsYXNzIHRvIHRyeVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlcG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICB0aGlzLnVzZWRQb3NpdGlvbnMucHVzaChwb3NpdGlvbiA/IHBvc2l0aW9uIDogJ2JvdHRvbScpO1xuXG4gICAgLy9kZWZhdWx0LCB0cnkgc3dpdGNoaW5nIHRvIG9wcG9zaXRlIHNpZGVcbiAgICBpZiAoIXBvc2l0aW9uICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5hZGRDbGFzcygndG9wJyk7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdyaWdodCcpIDwgMCkpIHtcbiAgICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlQ2xhc3MocG9zaXRpb24pXG4gICAgICAgICAgLmFkZENsYXNzKCdyaWdodCcpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbilcbiAgICAgICAgICAuYWRkQ2xhc3MoJ2xlZnQnKTtcbiAgICB9XG5cbiAgICAvL2lmIGRlZmF1bHQgY2hhbmdlIGRpZG4ndCB3b3JrLCB0cnkgYm90dG9tIG9yIGxlZnQgZmlyc3RcbiAgICBlbHNlIGlmICghcG9zaXRpb24gJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCd0b3AnKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLmFkZENsYXNzKCdsZWZ0Jyk7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA+IC0xKSAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ2xlZnQnKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKVxuICAgICAgICAgIC5hZGRDbGFzcygnbGVmdCcpO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAodGhpcy51c2VkUG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSkgJiYgKHRoaXMudXNlZFBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA8IDApKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpID4gLTEpICYmICh0aGlzLnVzZWRQb3NpdGlvbnMuaW5kZXhPZignYm90dG9tJykgPCAwKSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZS5yZW1vdmVDbGFzcyhwb3NpdGlvbik7XG4gICAgfVxuICAgIC8vaWYgbm90aGluZyBjbGVhcmVkLCBzZXQgdG8gYm90dG9tXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUNsYXNzKHBvc2l0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc0NoYW5nZWQgPSB0cnVlO1xuICAgIHRoaXMuY291bnRlci0tO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldHMgdGhlIHBvc2l0aW9uIGNsYXNzIG9mIGFuIGVsZW1lbnQgYW5kIHJlY3Vyc2l2ZWx5IGNhbGxzIGl0c2VsZiB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBwb3NzaWJsZSBwb3NpdGlvbnMgdG8gYXR0ZW1wdCwgb3IgdGhlIHRvb2x0aXAgZWxlbWVudCBpcyBubyBsb25nZXIgY29sbGlkaW5nLlxuICAgKiBpZiB0aGUgdG9vbHRpcCBpcyBsYXJnZXIgdGhhbiB0aGUgc2NyZWVuIHdpZHRoLCBkZWZhdWx0IHRvIGZ1bGwgd2lkdGggLSBhbnkgdXNlciBzZWxlY3RlZCBtYXJnaW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQb3NpdGlvbigpIHtcbiAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvbkNsYXNzKHRoaXMudGVtcGxhdGUpLFxuICAgICAgICAkdGlwRGltcyA9IEZvdW5kYXRpb24uQm94LkdldERpbWVuc2lvbnModGhpcy50ZW1wbGF0ZSksXG4gICAgICAgICRhbmNob3JEaW1zID0gRm91bmRhdGlvbi5Cb3guR2V0RGltZW5zaW9ucyh0aGlzLiRlbGVtZW50KSxcbiAgICAgICAgZGlyZWN0aW9uID0gKHBvc2l0aW9uID09PSAnbGVmdCcgPyAnbGVmdCcgOiAoKHBvc2l0aW9uID09PSAncmlnaHQnKSA/ICdsZWZ0JyA6ICd0b3AnKSksXG4gICAgICAgIHBhcmFtID0gKGRpcmVjdGlvbiA9PT0gJ3RvcCcpID8gJ2hlaWdodCcgOiAnd2lkdGgnLFxuICAgICAgICBvZmZzZXQgPSAocGFyYW0gPT09ICdoZWlnaHQnKSA/IHRoaXMub3B0aW9ucy52T2Zmc2V0IDogdGhpcy5vcHRpb25zLmhPZmZzZXQsXG4gICAgICAgIF90aGlzID0gdGhpcztcblxuICAgIGlmICgoJHRpcERpbXMud2lkdGggPj0gJHRpcERpbXMud2luZG93RGltcy53aWR0aCkgfHwgKCF0aGlzLmNvdW50ZXIgJiYgIUZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UodGhpcy50ZW1wbGF0ZSkpKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlLm9mZnNldChGb3VuZGF0aW9uLkJveC5HZXRPZmZzZXRzKHRoaXMudGVtcGxhdGUsIHRoaXMuJGVsZW1lbnQsICdjZW50ZXIgYm90dG9tJywgdGhpcy5vcHRpb25zLnZPZmZzZXQsIHRoaXMub3B0aW9ucy5oT2Zmc2V0LCB0cnVlKSkuY3NzKHtcbiAgICAgIC8vIHRoaXMuJGVsZW1lbnQub2Zmc2V0KEZvdW5kYXRpb24uR2V0T2Zmc2V0cyh0aGlzLnRlbXBsYXRlLCB0aGlzLiRlbGVtZW50LCAnY2VudGVyIGJvdHRvbScsIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCwgdHJ1ZSkpLmNzcyh7XG4gICAgICAgICd3aWR0aCc6ICRhbmNob3JEaW1zLndpbmRvd0RpbXMud2lkdGggLSAodGhpcy5vcHRpb25zLmhPZmZzZXQgKiAyKSxcbiAgICAgICAgJ2hlaWdodCc6ICdhdXRvJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wbGF0ZS5vZmZzZXQoRm91bmRhdGlvbi5Cb3guR2V0T2Zmc2V0cyh0aGlzLnRlbXBsYXRlLCB0aGlzLiRlbGVtZW50LCdjZW50ZXIgJyArIChwb3NpdGlvbiB8fCAnYm90dG9tJyksIHRoaXMub3B0aW9ucy52T2Zmc2V0LCB0aGlzLm9wdGlvbnMuaE9mZnNldCkpO1xuXG4gICAgd2hpbGUoIUZvdW5kYXRpb24uQm94LkltTm90VG91Y2hpbmdZb3UodGhpcy50ZW1wbGF0ZSkgJiYgdGhpcy5jb3VudGVyKSB7XG4gICAgICB0aGlzLl9yZXBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldmVhbHMgdGhlIHRvb2x0aXAsIGFuZCBmaXJlcyBhbiBldmVudCB0byBjbG9zZSBhbnkgb3RoZXIgb3BlbiB0b29sdGlwcyBvbiB0aGUgcGFnZVxuICAgKiBAZmlyZXMgVG9vbHRpcCNjbG9zZW1lXG4gICAqIEBmaXJlcyBUb29sdGlwI3Nob3dcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd09uICE9PSAnYWxsJyAmJiAhRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmlzKHRoaXMub3B0aW9ucy5zaG93T24pKSB7XG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdUaGUgc2NyZWVuIGlzIHRvbyBzbWFsbCB0byBkaXNwbGF5IHRoaXMgdG9vbHRpcCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJykuc2hvdygpO1xuICAgIHRoaXMuX3NldFBvc2l0aW9uKCk7XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyB0byBjbG9zZSBhbGwgb3RoZXIgb3BlbiB0b29sdGlwcyBvbiB0aGUgcGFnZVxuICAgICAqIEBldmVudCBDbG9zZW1lI3Rvb2x0aXBcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2Nsb3NlbWUuemYudG9vbHRpcCcsIHRoaXMudGVtcGxhdGUuYXR0cignaWQnKSk7XG5cblxuICAgIHRoaXMudGVtcGxhdGUuYXR0cih7XG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiB0cnVlLFxuICAgICAgJ2FyaWEtaGlkZGVuJzogZmFsc2VcbiAgICB9KTtcbiAgICBfdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy50ZW1wbGF0ZSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5zdG9wKCkuaGlkZSgpLmNzcygndmlzaWJpbGl0eScsICcnKS5mYWRlSW4odGhpcy5vcHRpb25zLmZhZGVJbkR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIC8vbWF5YmUgZG8gc3R1ZmY/XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgdG9vbHRpcCBpcyBzaG93blxuICAgICAqIEBldmVudCBUb29sdGlwI3Nob3dcbiAgICAgKi9cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Nob3cuemYudG9vbHRpcCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBjdXJyZW50IHRvb2x0aXAsIGFuZCByZXNldHMgdGhlIHBvc2l0aW9uaW5nIGNsYXNzIGlmIGl0IHdhcyBjaGFuZ2VkIGR1ZSB0byBjb2xsaXNpb25cbiAgICogQGZpcmVzIFRvb2x0aXAjaGlkZVxuICAgKiBAZnVuY3Rpb25cbiAgICovXG4gIGhpZGUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2hpZGluZycsIHRoaXMuJGVsZW1lbnQuZGF0YSgneWV0aS1ib3gnKSk7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLnN0b3AoKS5hdHRyKHtcbiAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAnZGF0YS1pcy1hY3RpdmUnOiBmYWxzZVxuICAgIH0pLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVPdXREdXJhdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICBfdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKF90aGlzLmNsYXNzQ2hhbmdlZCkge1xuICAgICAgICBfdGhpcy50ZW1wbGF0ZVxuICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhfdGhpcy5fZ2V0UG9zaXRpb25DbGFzcyhfdGhpcy50ZW1wbGF0ZSkpXG4gICAgICAgICAgICAgLmFkZENsYXNzKF90aGlzLm9wdGlvbnMucG9zaXRpb25DbGFzcyk7XG5cbiAgICAgICBfdGhpcy51c2VkUG9zaXRpb25zID0gW107XG4gICAgICAgX3RoaXMuY291bnRlciA9IDQ7XG4gICAgICAgX3RoaXMuY2xhc3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogZmlyZXMgd2hlbiB0aGUgdG9vbHRpcCBpcyBoaWRkZW5cbiAgICAgKiBAZXZlbnQgVG9vbHRpcCNoaWRlXG4gICAgICovXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdoaWRlLnpmLnRvb2x0aXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGRzIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIHRvb2x0aXAgYW5kIGl0cyBhbmNob3JcbiAgICogVE9ETyBjb21iaW5lIHNvbWUgb2YgdGhlIGxpc3RlbmVycyBsaWtlIGZvY3VzIGFuZCBtb3VzZWVudGVyLCBldGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZXZlbnRzKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyICR0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGU7XG4gICAgdmFyIGlzRm9jdXMgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5vcHRpb25zLmRpc2FibGVIb3Zlcikge1xuXG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub24oJ21vdXNlZW50ZXIuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgX3RoaXMuc2hvdygpO1xuICAgICAgICAgIH0sIF90aGlzLm9wdGlvbnMuaG92ZXJEZWxheSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ21vdXNlbGVhdmUuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXQpO1xuICAgICAgICBpZiAoIWlzRm9jdXMgfHwgKF90aGlzLmlzQ2xpY2sgJiYgIV90aGlzLm9wdGlvbnMuY2xpY2tPcGVuKSkge1xuICAgICAgICAgIF90aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja09wZW4pIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ21vdXNlZG93bi56Zi50b29sdGlwJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoX3RoaXMuaXNDbGljaykge1xuICAgICAgICAgIC8vX3RoaXMuaGlkZSgpO1xuICAgICAgICAgIC8vIF90aGlzLmlzQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5pc0NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoKF90aGlzLm9wdGlvbnMuZGlzYWJsZUhvdmVyIHx8ICFfdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpKSAmJiAhX3RoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIF90aGlzLnNob3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdtb3VzZWRvd24uemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgX3RoaXMuaXNDbGljayA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlRm9yVG91Y2gpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbigndGFwLnpmLnRvb2x0aXAgdG91Y2hlbmQuemYudG9vbHRpcCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgX3RoaXMuaXNBY3RpdmUgPyBfdGhpcy5oaWRlKCkgOiBfdGhpcy5zaG93KCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKHtcbiAgICAgIC8vICd0b2dnbGUuemYudHJpZ2dlcic6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAvLyAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuaGlkZS5iaW5kKHRoaXMpXG4gICAgICAnY2xvc2UuemYudHJpZ2dlcic6IHRoaXMuaGlkZS5iaW5kKHRoaXMpXG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub24oJ2ZvY3VzLnpmLnRvb2x0aXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXMgPSB0cnVlO1xuICAgICAgICBpZiAoX3RoaXMuaXNDbGljaykge1xuICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBzaG93aW5nIG9wZW4gb24gY2xpY2tzLCB3ZSBuZWVkIHRvIHByZXRlbmQgYSBjbGljay1sYXVuY2hlZCBmb2N1cyBpc24ndFxuICAgICAgICAgIC8vIGEgcmVhbCBmb2N1cywgb3RoZXJ3aXNlIG9uIGhvdmVyIGFuZCBjb21lIGJhY2sgd2UgZ2V0IGJhZCBiZWhhdmlvclxuICAgICAgICAgIGlmKCFfdGhpcy5vcHRpb25zLmNsaWNrT3BlbikgeyBpc0ZvY3VzID0gZmFsc2U7IH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAub24oJ2ZvY3Vzb3V0LnpmLnRvb2x0aXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNDbGljayA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oaWRlKCk7XG4gICAgICB9KVxuXG4gICAgICAub24oJ3Jlc2l6ZW1lLnpmLnRyaWdnZXInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKF90aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgX3RoaXMuX3NldFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgYSB0b2dnbGUgbWV0aG9kLCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGljIHNob3coKSAmIGhpZGUoKSBmdW5jdGlvbnNcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgYW4gaW5zdGFuY2Ugb2YgdG9vbHRpcCwgcmVtb3ZlcyB0ZW1wbGF0ZSBlbGVtZW50IGZyb20gdGhlIHZpZXcuXG4gICAqIEBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ3RpdGxlJywgdGhpcy50ZW1wbGF0ZS50ZXh0KCkpXG4gICAgICAgICAgICAgICAgIC5vZmYoJy56Zi50cmlnZ2VyIC56Zi50b29sdGlwJylcbiAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdoYXMtdGlwIHRvcCByaWdodCBsZWZ0JylcbiAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtZGVzY3JpYmVkYnkgYXJpYS1oYXNwb3B1cCBkYXRhLWRpc2FibGUtaG92ZXIgZGF0YS1yZXNpemUgZGF0YS10b2dnbGUgZGF0YS10b29sdGlwIGRhdGEteWV0aS1ib3gnKTtcblxuICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlKCk7XG5cbiAgICBGb3VuZGF0aW9uLnVucmVnaXN0ZXJQbHVnaW4odGhpcyk7XG4gIH1cbn1cblxuVG9vbHRpcC5kZWZhdWx0cyA9IHtcbiAgZGlzYWJsZUZvclRvdWNoOiBmYWxzZSxcbiAgLyoqXG4gICAqIFRpbWUsIGluIG1zLCBiZWZvcmUgYSB0b29sdGlwIHNob3VsZCBvcGVuIG9uIGhvdmVyLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDIwMFxuICAgKi9cbiAgaG92ZXJEZWxheTogMjAwLFxuICAvKipcbiAgICogVGltZSwgaW4gbXMsIGEgdG9vbHRpcCBzaG91bGQgdGFrZSB0byBmYWRlIGludG8gdmlldy5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxNTBcbiAgICovXG4gIGZhZGVJbkR1cmF0aW9uOiAxNTAsXG4gIC8qKlxuICAgKiBUaW1lLCBpbiBtcywgYSB0b29sdGlwIHNob3VsZCB0YWtlIHRvIGZhZGUgb3V0IG9mIHZpZXcuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMTUwXG4gICAqL1xuICBmYWRlT3V0RHVyYXRpb246IDE1MCxcbiAgLyoqXG4gICAqIERpc2FibGVzIGhvdmVyIGV2ZW50cyBmcm9tIG9wZW5pbmcgdGhlIHRvb2x0aXAgaWYgc2V0IHRvIHRydWVcbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVIb3ZlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhZGR0aW9uYWwgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSBvbiBpbml0LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB0ZW1wbGF0ZUNsYXNzZXM6ICcnLFxuICAvKipcbiAgICogTm9uLW9wdGlvbmFsIGNsYXNzIGFkZGVkIHRvIHRvb2x0aXAgdGVtcGxhdGVzLiBGb3VuZGF0aW9uIGRlZmF1bHQgaXMgJ3Rvb2x0aXAnLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICd0b29sdGlwJ1xuICAgKi9cbiAgdG9vbHRpcENsYXNzOiAndG9vbHRpcCcsXG4gIC8qKlxuICAgKiBDbGFzcyBhcHBsaWVkIHRvIHRoZSB0b29sdGlwIGFuY2hvciBlbGVtZW50LlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdoYXMtdGlwJ1xuICAgKi9cbiAgdHJpZ2dlckNsYXNzOiAnaGFzLXRpcCcsXG4gIC8qKlxuICAgKiBNaW5pbXVtIGJyZWFrcG9pbnQgc2l6ZSBhdCB3aGljaCB0byBvcGVuIHRoZSB0b29sdGlwLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdzbWFsbCdcbiAgICovXG4gIHNob3dPbjogJ3NtYWxsJyxcbiAgLyoqXG4gICAqIEN1c3RvbSB0ZW1wbGF0ZSB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIG1hcmt1cCBmb3IgdG9vbHRpcC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgdGVtcGxhdGU6ICcnLFxuICAvKipcbiAgICogVGV4dCBkaXNwbGF5ZWQgaW4gdGhlIHRvb2x0aXAgdGVtcGxhdGUgb24gb3Blbi5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgdGlwVGV4dDogJycsXG4gIHRvdWNoQ2xvc2VUZXh0OiAnVGFwIHRvIGNsb3NlLicsXG4gIC8qKlxuICAgKiBBbGxvd3MgdGhlIHRvb2x0aXAgdG8gcmVtYWluIG9wZW4gaWYgdHJpZ2dlcmVkIHdpdGggYSBjbGljayBvciB0b3VjaCBldmVudC5cbiAgICogQG9wdGlvblxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xpY2tPcGVuOiB0cnVlLFxuICAvKipcbiAgICogQWRkaXRpb25hbCBwb3NpdGlvbmluZyBjbGFzc2VzLCBzZXQgYnkgdGhlIEpTXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHBvc2l0aW9uQ2xhc3M6ICcnLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNob3VsZCBwdXNoIGF3YXkgZnJvbSB0aGUgYW5jaG9yIG9uIHRoZSBZIGF4aXMuXG4gICAqIEBvcHRpb25cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZPZmZzZXQ6IDEwLFxuICAvKipcbiAgICogRGlzdGFuY2UsIGluIHBpeGVscywgdGhlIHRlbXBsYXRlIHNob3VsZCBwdXNoIGF3YXkgZnJvbSB0aGUgYW5jaG9yIG9uIHRoZSBYIGF4aXMsIGlmIGFsaWduZWQgdG8gYSBzaWRlLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDEyXG4gICAqL1xuICBoT2Zmc2V0OiAxMixcbiAgICAvKipcbiAgICogQWxsb3cgSFRNTCBpbiB0b29sdGlwLiBXYXJuaW5nOiBJZiB5b3UgYXJlIGxvYWRpbmcgdXNlci1nZW5lcmF0ZWQgY29udGVudCBpbnRvIHRvb2x0aXBzLFxuICAgKiBhbGxvd2luZyBIVE1MIG1heSBvcGVuIHlvdXJzZWxmIHVwIHRvIFhTUyBhdHRhY2tzLlxuICAgKiBAb3B0aW9uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYWxsb3dIdG1sOiBmYWxzZVxufTtcblxuLyoqXG4gKiBUT0RPIHV0aWxpemUgcmVzaXplIGV2ZW50IHRyaWdnZXJcbiAqL1xuXG4vLyBXaW5kb3cgZXhwb3J0c1xuRm91bmRhdGlvbi5wbHVnaW4oVG9vbHRpcCwgJ1Rvb2x0aXAnKTtcblxufShqUXVlcnkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4hZnVuY3Rpb24oJCkge1xuXG4vKipcbiAqIFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzIG1vZHVsZS5cbiAqIEBtb2R1bGUgZm91bmRhdGlvbi5yZXNwb25zaXZlQWNjb3JkaW9uVGFic1xuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC5rZXlib2FyZFxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24udXRpbC50aW1lckFuZEltYWdlTG9hZGVyXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi51dGlsLm1vdGlvblxuICogQHJlcXVpcmVzIGZvdW5kYXRpb24uYWNjb3JkaW9uXG4gKiBAcmVxdWlyZXMgZm91bmRhdGlvbi50YWJzXG4gKi9cblxuY2xhc3MgUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhIHJlc3BvbnNpdmUgYWNjb3JkaW9uIHRhYnMuXG4gICAqIEBjbGFzc1xuICAgKiBAZmlyZXMgUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMjaW5pdFxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZWxlbWVudCAtIGpRdWVyeSBvYmplY3QgdG8gbWFrZSBpbnRvIGEgZHJvcGRvd24gbWVudS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPdmVycmlkZXMgdG8gdGhlIGRlZmF1bHQgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIHRoaXMub3B0aW9ucyAgPSAkLmV4dGVuZCh7fSwgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpO1xuICAgIHRoaXMucnVsZXMgPSB0aGlzLiRlbGVtZW50LmRhdGEoJ3Jlc3BvbnNpdmUtYWNjb3JkaW9uLXRhYnMnKTtcbiAgICB0aGlzLmN1cnJlbnRNcSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50UGx1Z2luID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuYXR0cignaWQnKSkge1xuICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcsRm91bmRhdGlvbi5HZXRZb0RpZ2l0cyg2LCAncmVzcG9uc2l2ZWFjY29yZGlvbnRhYnMnKSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgIEZvdW5kYXRpb24ucmVnaXN0ZXJQbHVnaW4odGhpcywgJ1Jlc3BvbnNpdmVBY2NvcmRpb25UYWJzJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIE1lbnUgYnkgcGFyc2luZyB0aGUgY2xhc3NlcyBmcm9tIHRoZSAnZGF0YS1yZXNwb25zaXZlLWFjY29yZGlvbi10YWJzJyBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXQoKSB7XG4gICAgLy8gVGhlIGZpcnN0IHRpbWUgYW4gSW50ZXJjaGFuZ2UgcGx1Z2luIGlzIGluaXRpYWxpemVkLCB0aGlzLnJ1bGVzIGlzIGNvbnZlcnRlZCBmcm9tIGEgc3RyaW5nIG9mIFwiY2xhc3Nlc1wiIHRvIGFuIG9iamVjdCBvZiBydWxlc1xuICAgIGlmICh0eXBlb2YgdGhpcy5ydWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBydWxlc1RyZWUgPSB7fTtcblxuICAgICAgLy8gUGFyc2UgcnVsZXMgZnJvbSBcImNsYXNzZXNcIiBwdWxsZWQgZnJvbSBkYXRhIGF0dHJpYnV0ZVxuICAgICAgbGV0IHJ1bGVzID0gdGhpcy5ydWxlcy5zcGxpdCgnICcpO1xuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnkgcnVsZSBmb3VuZFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzW2ldLnNwbGl0KCctJyk7XG4gICAgICAgIGxldCBydWxlU2l6ZSA9IHJ1bGUubGVuZ3RoID4gMSA/IHJ1bGVbMF0gOiAnc21hbGwnO1xuICAgICAgICBsZXQgcnVsZVBsdWdpbiA9IHJ1bGUubGVuZ3RoID4gMSA/IHJ1bGVbMV0gOiBydWxlWzBdO1xuXG4gICAgICAgIGlmIChNZW51UGx1Z2luc1tydWxlUGx1Z2luXSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJ1bGVzVHJlZVtydWxlU2l6ZV0gPSBNZW51UGx1Z2luc1tydWxlUGx1Z2luXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJ1bGVzID0gcnVsZXNUcmVlO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEFsbE9wdGlvbnMoKTtcblxuICAgIGlmICghJC5pc0VtcHR5T2JqZWN0KHRoaXMucnVsZXMpKSB7XG4gICAgICB0aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRBbGxPcHRpb25zKCkge1xuICAgIC8vZ2V0IGFsbCBkZWZhdWx0cyBhbmQgb3B0aW9uc1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgX3RoaXMuYWxsT3B0aW9ucyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBNZW51UGx1Z2lucykge1xuICAgICAgaWYgKE1lbnVQbHVnaW5zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE1lbnVQbHVnaW5zW2tleV07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGR1bW15UGx1Z2luID0gJCgnPHVsPjwvdWw+Jyk7XG4gICAgICAgICAgdmFyIHRtcFBsdWdpbiA9IG5ldyBvYmoucGx1Z2luKGR1bW15UGx1Z2luLF90aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIGZvciAodmFyIGtleUtleSBpbiB0bXBQbHVnaW4ub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRtcFBsdWdpbi5vcHRpb25zLmhhc093blByb3BlcnR5KGtleUtleSkgJiYga2V5S2V5ICE9PSAnemZQbHVnaW4nKSB7XG4gICAgICAgICAgICAgIHZhciBvYmpPYmogPSB0bXBQbHVnaW4ub3B0aW9uc1trZXlLZXldO1xuICAgICAgICAgICAgICBfdGhpcy5hbGxPcHRpb25zW2tleUtleV0gPSBvYmpPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRtcFBsdWdpbi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGV2ZW50cyBmb3IgdGhlIE1lbnUuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V2ZW50cygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgJCh3aW5kb3cpLm9uKCdjaGFuZ2VkLnpmLm1lZGlhcXVlcnknLCBmdW5jdGlvbigpIHtcbiAgICAgIF90aGlzLl9jaGVja01lZGlhUXVlcmllcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgY3VycmVudCBzY3JlZW4gd2lkdGggYWdhaW5zdCBhdmFpbGFibGUgbWVkaWEgcXVlcmllcy4gSWYgdGhlIG1lZGlhIHF1ZXJ5IGhhcyBjaGFuZ2VkLCBhbmQgdGhlIHBsdWdpbiBuZWVkZWQgaGFzIGNoYW5nZWQsIHRoZSBwbHVnaW5zIHdpbGwgc3dhcCBvdXQuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrTWVkaWFRdWVyaWVzKCkge1xuICAgIHZhciBtYXRjaGVkTXEsIF90aGlzID0gdGhpcztcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBydWxlIGFuZCBmaW5kIHRoZSBsYXN0IG1hdGNoaW5nIHJ1bGVcbiAgICAkLmVhY2godGhpcy5ydWxlcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoRm91bmRhdGlvbi5NZWRpYVF1ZXJ5LmF0TGVhc3Qoa2V5KSkge1xuICAgICAgICBtYXRjaGVkTXEgPSBrZXk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBObyBtYXRjaD8gTm8gZGljZVxuICAgIGlmICghbWF0Y2hlZE1xKSByZXR1cm47XG5cbiAgICAvLyBQbHVnaW4gYWxyZWFkeSBpbml0aWFsaXplZD8gV2UgZ29vZFxuICAgIGlmICh0aGlzLmN1cnJlbnRQbHVnaW4gaW5zdGFuY2VvZiB0aGlzLnJ1bGVzW21hdGNoZWRNcV0ucGx1Z2luKSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgcGx1Z2luLXNwZWNpZmljIENTUyBjbGFzc2VzXG4gICAgJC5lYWNoKE1lbnVQbHVnaW5zLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICBfdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh2YWx1ZS5jc3NDbGFzcyk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIENTUyBjbGFzcyBmb3IgdGhlIG5ldyBwbHVnaW5cbiAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucnVsZXNbbWF0Y2hlZE1xXS5jc3NDbGFzcyk7XG5cbiAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG5ldyBwbHVnaW5cbiAgICBpZiAodGhpcy5jdXJyZW50UGx1Z2luKSB7XG4gICAgICAvL2Rvbid0IGtub3cgd2h5IGJ1dCBvbiBuZXN0ZWQgZWxlbWVudHMgZGF0YSB6ZlBsdWdpbiBnZXQncyBsb3N0XG4gICAgICBpZiAoIXRoaXMuY3VycmVudFBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicpICYmIHRoaXMuc3RvcmV6ZkRhdGEpIHRoaXMuY3VycmVudFBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicsdGhpcy5zdG9yZXpmRGF0YSk7XG4gICAgICB0aGlzLmN1cnJlbnRQbHVnaW4uZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVNYXJrdXAodGhpcy5ydWxlc1ttYXRjaGVkTXFdLmNzc0NsYXNzKTtcbiAgICB0aGlzLmN1cnJlbnRQbHVnaW4gPSBuZXcgdGhpcy5ydWxlc1ttYXRjaGVkTXFdLnBsdWdpbih0aGlzLiRlbGVtZW50LCB7fSk7XG4gICAgdGhpcy5zdG9yZXpmRGF0YSA9IHRoaXMuY3VycmVudFBsdWdpbi4kZWxlbWVudC5kYXRhKCd6ZlBsdWdpbicpO1xuXG4gIH1cblxuICBfaGFuZGxlTWFya3VwKHRvU2V0KXtcbiAgICB2YXIgX3RoaXMgPSB0aGlzLCBmcm9tU3RyaW5nID0gJ2FjY29yZGlvbic7XG4gICAgdmFyICRwYW5lbHMgPSAkKCdbZGF0YS10YWJzLWNvbnRlbnQ9Jyt0aGlzLiRlbGVtZW50LmF0dHIoJ2lkJykrJ10nKTtcbiAgICBpZiAoJHBhbmVscy5sZW5ndGgpIGZyb21TdHJpbmcgPSAndGFicyc7XG4gICAgaWYgKGZyb21TdHJpbmcgPT09IHRvU2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfTtcblxuICAgIHZhciB0YWJzVGl0bGUgPSBfdGhpcy5hbGxPcHRpb25zLmxpbmtDbGFzcz9fdGhpcy5hbGxPcHRpb25zLmxpbmtDbGFzczondGFicy10aXRsZSc7XG4gICAgdmFyIHRhYnNQYW5lbCA9IF90aGlzLmFsbE9wdGlvbnMucGFuZWxDbGFzcz9fdGhpcy5hbGxPcHRpb25zLnBhbmVsQ2xhc3M6J3RhYnMtcGFuZWwnO1xuXG4gICAgdGhpcy4kZWxlbWVudC5yZW1vdmVBdHRyKCdyb2xlJyk7XG4gICAgdmFyICRsaUhlYWRzID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLicrdGFic1RpdGxlKycsW2RhdGEtYWNjb3JkaW9uLWl0ZW1dJykucmVtb3ZlQ2xhc3ModGFic1RpdGxlKS5yZW1vdmVDbGFzcygnYWNjb3JkaW9uLWl0ZW0nKS5yZW1vdmVBdHRyKCdkYXRhLWFjY29yZGlvbi1pdGVtJyk7XG4gICAgdmFyICRsaUhlYWRzQSA9ICRsaUhlYWRzLmNoaWxkcmVuKCdhJykucmVtb3ZlQ2xhc3MoJ2FjY29yZGlvbi10aXRsZScpO1xuXG4gICAgaWYgKGZyb21TdHJpbmcgPT09ICd0YWJzJykge1xuICAgICAgJHBhbmVscyA9ICRwYW5lbHMuY2hpbGRyZW4oJy4nK3RhYnNQYW5lbCkucmVtb3ZlQ2xhc3ModGFic1BhbmVsKS5yZW1vdmVBdHRyKCdyb2xlJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKS5yZW1vdmVBdHRyKCdhcmlhLWxhYmVsbGVkYnknKTtcbiAgICAgICRwYW5lbHMuY2hpbGRyZW4oJ2EnKS5yZW1vdmVBdHRyKCdyb2xlJykucmVtb3ZlQXR0cignYXJpYS1jb250cm9scycpLnJlbW92ZUF0dHIoJ2FyaWEtc2VsZWN0ZWQnKTtcbiAgICB9ZWxzZXtcbiAgICAgICRwYW5lbHMgPSAkbGlIZWFkcy5jaGlsZHJlbignW2RhdGEtdGFiLWNvbnRlbnRdJykucmVtb3ZlQ2xhc3MoJ2FjY29yZGlvbi1jb250ZW50Jyk7XG4gICAgfTtcblxuICAgICRwYW5lbHMuY3NzKHtkaXNwbGF5OicnLHZpc2liaWxpdHk6Jyd9KTtcbiAgICAkbGlIZWFkcy5jc3Moe2Rpc3BsYXk6JycsdmlzaWJpbGl0eTonJ30pO1xuICAgIGlmICh0b1NldCA9PT0gJ2FjY29yZGlvbicpIHtcbiAgICAgICRwYW5lbHMuZWFjaChmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICAkKHZhbHVlKS5hcHBlbmRUbygkbGlIZWFkcy5nZXQoa2V5KSkuYWRkQ2xhc3MoJ2FjY29yZGlvbi1jb250ZW50JykuYXR0cignZGF0YS10YWItY29udGVudCcsJycpLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKS5jc3Moe2hlaWdodDonJ30pO1xuICAgICAgICAkKCdbZGF0YS10YWJzLWNvbnRlbnQ9JytfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKyddJykuYWZ0ZXIoJzxkaXYgaWQ9XCJ0YWJzLXBsYWNlaG9sZGVyLScrX3RoaXMuJGVsZW1lbnQuYXR0cignaWQnKSsnXCI+PC9kaXY+JykucmVtb3ZlKCk7XG4gICAgICAgICRsaUhlYWRzLmFkZENsYXNzKCdhY2NvcmRpb24taXRlbScpLmF0dHIoJ2RhdGEtYWNjb3JkaW9uLWl0ZW0nLCcnKTtcbiAgICAgICAgJGxpSGVhZHNBLmFkZENsYXNzKCdhY2NvcmRpb24tdGl0bGUnKTtcbiAgICAgIH0pO1xuICAgIH1lbHNlIGlmICh0b1NldCA9PT0gJ3RhYnMnKXtcbiAgICAgIHZhciAkdGFic0NvbnRlbnQgPSAkKCdbZGF0YS10YWJzLWNvbnRlbnQ9JytfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKyddJyk7XG4gICAgICB2YXIgJHBsYWNlaG9sZGVyID0gJCgnI3RhYnMtcGxhY2Vob2xkZXItJytfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICAgIGlmICgkcGxhY2Vob2xkZXIubGVuZ3RoKSB7XG4gICAgICAgICR0YWJzQ29udGVudCA9ICQoJzxkaXYgY2xhc3M9XCJ0YWJzLWNvbnRlbnRcIj48L2Rpdj4nKS5pbnNlcnRBZnRlcigkcGxhY2Vob2xkZXIpLmF0dHIoJ2RhdGEtdGFicy1jb250ZW50JyxfdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpKTtcbiAgICAgICAgJHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuICAgICAgfWVsc2V7XG4gICAgICAgICR0YWJzQ29udGVudCA9ICQoJzxkaXYgY2xhc3M9XCJ0YWJzLWNvbnRlbnRcIj48L2Rpdj4nKS5pbnNlcnRBZnRlcihfdGhpcy4kZWxlbWVudCkuYXR0cignZGF0YS10YWJzLWNvbnRlbnQnLF90aGlzLiRlbGVtZW50LmF0dHIoJ2lkJykpO1xuICAgICAgfTtcbiAgICAgICRwYW5lbHMuZWFjaChmdW5jdGlvbihrZXksdmFsdWUpe1xuICAgICAgICB2YXIgdGVtcFZhbHVlID0gJCh2YWx1ZSkuYXBwZW5kVG8oJHRhYnNDb250ZW50KS5hZGRDbGFzcyh0YWJzUGFuZWwpO1xuICAgICAgICB2YXIgaGFzaCA9ICRsaUhlYWRzQS5nZXQoa2V5KS5oYXNoLnNsaWNlKDEpO1xuICAgICAgICB2YXIgaWQgPSAkKHZhbHVlKS5hdHRyKCdpZCcpIHx8IEZvdW5kYXRpb24uR2V0WW9EaWdpdHMoNiwgJ2FjY29yZGlvbicpO1xuICAgICAgICBpZiAoaGFzaCAhPT0gaWQpIHtcbiAgICAgICAgICBpZiAoaGFzaCAhPT0gJycpIHtcbiAgICAgICAgICAgICQodmFsdWUpLmF0dHIoJ2lkJyxoYXNoKTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGhhc2ggPSBpZDtcbiAgICAgICAgICAgICQodmFsdWUpLmF0dHIoJ2lkJyxoYXNoKTtcbiAgICAgICAgICAgICQoJGxpSGVhZHNBLmdldChrZXkpKS5hdHRyKCdocmVmJywkKCRsaUhlYWRzQS5nZXQoa2V5KSkuYXR0cignaHJlZicpLnJlcGxhY2UoJyMnLCcnKSsnIycraGFzaCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGlzQWN0aXZlID0gJCgkbGlIZWFkcy5nZXQoa2V5KSkuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICB0ZW1wVmFsdWUuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAkbGlIZWFkcy5hZGRDbGFzcyh0YWJzVGl0bGUpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHBsdWdpbiBvbiB0aGlzIGVsZW1lbnQsIGFzIHdlbGwgYXMgdGhlIHdpbmRvdyByZXNpemUgaGFuZGxlciB0aGF0IHN3aXRjaGVzIHRoZSBwbHVnaW5zIG91dC5cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQbHVnaW4pIHRoaXMuY3VycmVudFBsdWdpbi5kZXN0cm95KCk7XG4gICAgJCh3aW5kb3cpLm9mZignLnpmLlJlc3BvbnNpdmVBY2NvcmRpb25UYWJzJyk7XG4gICAgRm91bmRhdGlvbi51bnJlZ2lzdGVyUGx1Z2luKHRoaXMpO1xuICB9XG59XG5cblJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLmRlZmF1bHRzID0ge307XG5cbi8vIFRoZSBwbHVnaW4gbWF0Y2hlcyB0aGUgcGx1Z2luIGNsYXNzZXMgd2l0aCB0aGVzZSBwbHVnaW4gaW5zdGFuY2VzLlxudmFyIE1lbnVQbHVnaW5zID0ge1xuICB0YWJzOiB7XG4gICAgY3NzQ2xhc3M6ICd0YWJzJyxcbiAgICBwbHVnaW46IEZvdW5kYXRpb24uX3BsdWdpbnMudGFicyB8fCBudWxsXG4gIH0sXG4gIGFjY29yZGlvbjoge1xuICAgIGNzc0NsYXNzOiAnYWNjb3JkaW9uJyxcbiAgICBwbHVnaW46IEZvdW5kYXRpb24uX3BsdWdpbnMuYWNjb3JkaW9uIHx8IG51bGxcbiAgfVxufTtcblxuLy8gV2luZG93IGV4cG9ydHNcbkZvdW5kYXRpb24ucGx1Z2luKFJlc3BvbnNpdmVBY2NvcmRpb25UYWJzLCAnUmVzcG9uc2l2ZUFjY29yZGlvblRhYnMnKTtcblxufShqUXVlcnkpO1xuIiwiJChkb2N1bWVudCkuZm91bmRhdGlvbigpO1xuIl19
+"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,t){"object"===("undefined"==typeof module?"undefined":_typeof(module))&&"object"===_typeof(module.exports)?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:void 0,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=se.type(e);return"function"!==n&&!se.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(se.isFunction(t))return se.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return se.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(me.test(t))return se.filter(t,e,n);t=se.filter(t,e)}return se.grep(e,function(e){return J.call(t,e)>-1!==n})}function o(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return se.each(e.match(Ce)||[],function(e,n){t[n]=!0}),t}function a(){U.removeEventListener("DOMContentLoaded",a),e.removeEventListener("load",a),se.ready()}function r(){this.expando=se.expando+r.uid++}function l(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(ze,"-$&").toLowerCase(),n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Te.test(n)?se.parseJSON(n):n)}catch(o){}Fe.set(e,t,n)}else n=void 0;return n}function u(e,t,n,i){var o,s=1,a=20,r=i?function(){return i.cur()}:function(){return se.css(e,t,"")},l=r(),u=n&&n[3]||(se.cssNumber[t]?"":"px"),d=(se.cssNumber[t]||"px"!==u&&+l)&&Oe.exec(se.css(e,t));if(d&&d[3]!==u){u=u||d[3],n=n||[],d=+l||1;do s=s||".5",d/=s,se.style(e,t,d+u);while(s!==(s=r()/l)&&1!==s&&--a)}return n&&(d=+d||+l||0,o=n[1]?d+(n[1]+1)*n[2]:+n[2],i&&(i.unit=u,i.start=d,i.end=o)),o}function d(e,t){var n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&se.nodeName(e,t)?se.merge([e],n):n}function c(e,t){for(var n=0,i=e.length;n<i;n++)_e.set(e[n],"globalEval",!t||_e.get(t[n],"globalEval"))}function h(e,t,n,i,o){for(var s,a,r,l,u,h,f=t.createDocumentFragment(),p=[],m=0,g=e.length;m<g;m++)if(s=e[m],s||0===s)if("object"===se.type(s))se.merge(p,s.nodeType?[s]:s);else if(qe.test(s)){for(a=a||f.appendChild(t.createElement("div")),r=(Pe.exec(s)||["",""])[1].toLowerCase(),l=Re[r]||Re._default,a.innerHTML=l[1]+se.htmlPrefilter(s)+l[2],h=l[0];h--;)a=a.lastChild;se.merge(p,a.childNodes),a=f.firstChild,a.textContent=""}else p.push(t.createTextNode(s));for(f.textContent="",m=0;s=p[m++];)if(i&&se.inArray(s,i)>-1)o&&o.push(s);else if(u=se.contains(s.ownerDocument,s),a=d(f.appendChild(s),"script"),u&&c(a),n)for(h=0;s=a[h++];)He.test(s.type||"")&&n.push(s);return f}function f(){return!0}function p(){return!1}function m(){try{return U.activeElement}catch(e){}}function g(e,t,n,i,o,s){var a,r;if("object"===("undefined"==typeof t?"undefined":_typeof(t))){"string"!=typeof n&&(i=i||n,n=void 0);for(r in t)g(e,r,n,i,t[r],s);return e}if(null==i&&null==o?(o=n,i=n=void 0):null==o&&("string"==typeof n?(o=i,i=void 0):(o=i,i=n,n=void 0)),o===!1)o=p;else if(!o)return e;return 1===s&&(a=o,o=function(e){return se().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=se.guid++)),e.each(function(){se.event.add(this,t,o,i,n)})}function v(e,t){return se.nodeName(e,"table")&&se.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function y(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function b(e){var t=We.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function w(e,t){var n,i,o,s,a,r,l,u;if(1===t.nodeType){if(_e.hasData(e)&&(s=_e.access(e),a=_e.set(t,s),u=s.events)){delete a.handle,a.events={};for(o in u)for(n=0,i=u[o].length;n<i;n++)se.event.add(t,o,u[o][n])}Fe.hasData(e)&&(r=Fe.access(e),l=se.extend({},r),Fe.set(t,l))}}function C(e,t){var n=t.nodeName.toLowerCase();"input"===n&&De.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function $(e,t,n,i){t=V.apply([],t);var o,s,a,r,l,u,c=0,f=e.length,p=f-1,m=t[0],g=se.isFunction(m);if(g||f>1&&"string"==typeof m&&!ie.checkClone&&Be.test(m))return e.each(function(o){var s=e.eq(o);g&&(t[0]=m.call(this,o,s.html())),$(s,t,n,i)});if(f&&(o=h(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=se.map(d(o,"script"),y),r=a.length;c<f;c++)l=o,c!==p&&(l=se.clone(l,!0,!0),r&&se.merge(a,d(l,"script"))),n.call(e[c],l,c);if(r)for(u=a[a.length-1].ownerDocument,se.map(a,b),c=0;c<r;c++)l=a[c],He.test(l.type||"")&&!_e.access(l,"globalEval")&&se.contains(u,l)&&(l.src?se._evalUrl&&se._evalUrl(l.src):se.globalEval(l.textContent.replace(Qe,"")))}return e}function k(e,t,n){for(var i,o=t?se.filter(t,e):e,s=0;null!=(i=o[s]);s++)n||1!==i.nodeType||se.cleanData(d(i)),i.parentNode&&(n&&se.contains(i.ownerDocument,i)&&c(d(i,"script")),i.parentNode.removeChild(i));return e}function x(e,t){var n=se(t.createElement(e)).appendTo(t.body),i=se.css(n[0],"display");return n.detach(),i}function _(e){var t=U,n=Ye[e];return n||(n=x(e,t),"none"!==n&&n||(Ke=(Ke||se("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=Ke[0].contentDocument,t.write(),t.close(),n=x(e,t),Ke.detach()),Ye[e]=n),n}function F(e,t,n){var i,o,s,a,r=e.style;return n=n||Xe(e),a=n?n.getPropertyValue(t)||n[t]:void 0,""!==a&&void 0!==a||se.contains(e.ownerDocument,e)||(a=se.style(e,t)),n&&!ie.pixelMarginRight()&&Ue.test(a)&&Ge.test(t)&&(i=r.width,o=r.minWidth,s=r.maxWidth,r.minWidth=r.maxWidth=r.width=a,a=n.width,r.width=i,r.minWidth=o,r.maxWidth=s),void 0!==a?a+"":a}function T(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function z(e){if(e in it)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=nt.length;n--;)if(e=nt[n]+t,e in it)return e}function E(e,t,n){var i=Oe.exec(t);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):t}function O(e,t,n,i,o){for(var s=n===(i?"border":"content")?4:"width"===t?1:0,a=0;s<4;s+=2)"margin"===n&&(a+=se.css(e,n+Ae[s],!0,o)),i?("content"===n&&(a-=se.css(e,"padding"+Ae[s],!0,o)),"margin"!==n&&(a-=se.css(e,"border"+Ae[s]+"Width",!0,o))):(a+=se.css(e,"padding"+Ae[s],!0,o),"padding"!==n&&(a+=se.css(e,"border"+Ae[s]+"Width",!0,o)));return a}function A(e,t,n){var i=!0,o="width"===t?e.offsetWidth:e.offsetHeight,s=Xe(e),a="border-box"===se.css(e,"boxSizing",!1,s);if(o<=0||null==o){if(o=F(e,t,s),(o<0||null==o)&&(o=e.style[t]),Ue.test(o))return o;i=a&&(ie.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+O(e,t,n||(a?"border":"content"),i,s)+"px"}function S(e,t){for(var n,i,o,s=[],a=0,r=e.length;a<r;a++)i=e[a],i.style&&(s[a]=_e.get(i,"olddisplay"),n=i.style.display,t?(s[a]||"none"!==n||(i.style.display=""),""===i.style.display&&Se(i)&&(s[a]=_e.access(i,"olddisplay",_(i.nodeName)))):(o=Se(i),"none"===n&&o||_e.set(i,"olddisplay",o?n:se.css(i,"display"))));for(a=0;a<r;a++)i=e[a],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?s[a]||"":"none"));return e}function D(e,t,n,i,o){return new D.prototype.init(e,t,n,i,o)}function P(){return e.setTimeout(function(){ot=void 0}),ot=se.now()}function H(e,t){var n,i=0,o={height:e};for(t=t?1:0;i<4;i+=2-t)n=Ae[i],o["margin"+n]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function R(e,t,n){for(var i,o=(j.tweeners[t]||[]).concat(j.tweeners["*"]),s=0,a=o.length;s<a;s++)if(i=o[s].call(n,t,e))return i}function q(e,t,n){var i,o,s,a,r,l,u,d,c=this,h={},f=e.style,p=e.nodeType&&Se(e),m=_e.get(e,"fxshow");n.queue||(r=se._queueHooks(e,"fx"),null==r.unqueued&&(r.unqueued=0,l=r.empty.fire,r.empty.fire=function(){r.unqueued||l()}),r.unqueued++,c.always(function(){c.always(function(){r.unqueued--,se.queue(e,"fx").length||r.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],u=se.css(e,"display"),d="none"===u?_e.get(e,"olddisplay")||_(e.nodeName):u,"inline"===d&&"none"===se.css(e,"float")&&(f.display="inline-block")),n.overflow&&(f.overflow="hidden",c.always(function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}));for(i in t)if(o=t[i],at.exec(o)){if(delete t[i],s=s||"toggle"===o,o===(p?"hide":"show")){if("show"!==o||!m||void 0===m[i])continue;p=!0}h[i]=m&&m[i]||se.style(e,i)}else u=void 0;if(se.isEmptyObject(h))"inline"===("none"===u?_(e.nodeName):u)&&(f.display=u);else{m?"hidden"in m&&(p=m.hidden):m=_e.access(e,"fxshow",{}),s&&(m.hidden=!p),p?se(e).show():c.done(function(){se(e).hide()}),c.done(function(){var t;_e.remove(e,"fxshow");for(t in h)se.style(e,t,h[t])});for(i in h)a=R(p?m[i]:0,i,c),i in m||(m[i]=a.start,p&&(a.end=a.start,a.start="width"===i||"height"===i?1:0))}}function L(e,t){var n,i,o,s,a;for(n in e)if(i=se.camelCase(n),o=t[i],s=e[n],se.isArray(s)&&(o=s[1],s=e[n]=s[0]),n!==i&&(e[i]=s,delete e[n]),a=se.cssHooks[i],a&&"expand"in a){s=a.expand(s),delete e[i];for(n in s)n in e||(e[n]=s[n],t[n]=o)}else t[i]=o}function j(e,t,n){var i,o,s=0,a=j.prefilters.length,r=se.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var t=ot||P(),n=Math.max(0,u.startTime+u.duration-t),i=n/u.duration||0,s=1-i,a=0,l=u.tweens.length;a<l;a++)u.tweens[a].run(s);return r.notifyWith(e,[u,s,n]),s<1&&l?n:(r.resolveWith(e,[u]),!1)},u=r.promise({elem:e,props:se.extend({},t),opts:se.extend(!0,{specialEasing:{},easing:se.easing._default},n),originalProperties:t,originalOptions:n,startTime:ot||P(),duration:n.duration,tweens:[],createTween:function(t,n){var i=se.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(i),i},stop:function(t){var n=0,i=t?u.tweens.length:0;if(o)return this;for(o=!0;n<i;n++)u.tweens[n].run(1);return t?(r.notifyWith(e,[u,1,0]),r.resolveWith(e,[u,t])):r.rejectWith(e,[u,t]),this}}),d=u.props;for(L(d,u.opts.specialEasing);s<a;s++)if(i=j.prefilters[s].call(u,e,d,u.opts))return se.isFunction(i.stop)&&(se._queueHooks(u.elem,u.opts.queue).stop=se.proxy(i.stop,i)),i;return se.map(d,R,u),se.isFunction(u.opts.start)&&u.opts.start.call(e,u),se.fx.timer(se.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function M(e){return e.getAttribute&&e.getAttribute("class")||""}function N(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,s=t.toLowerCase().match(Ce)||[];if(se.isFunction(n))for(;i=s[o++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function I(e,t,n,i){function o(r){var l;return s[r]=!0,se.each(e[r]||[],function(e,r){var u=r(t,n,i);return"string"!=typeof u||a||s[u]?a?!(l=u):void 0:(t.dataTypes.unshift(u),o(u),!1)}),l}var s={},a=e===Ft;return o(t.dataTypes[0])||!s["*"]&&o("*")}function B(e,t){var n,i,o=se.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:i||(i={}))[n]=t[n]);return i&&se.extend(!0,e,i),e}function W(e,t,n){for(var i,o,s,a,r=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(o in r)if(r[o]&&r[o].test(i)){l.unshift(o);break}if(l[0]in n)s=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){s=o;break}a||(a=o)}s=s||a}if(s)return s!==l[0]&&l.unshift(s),n[s]}function Q(e,t,n,i){var o,s,a,r,l,u={},d=e.dataTypes.slice();if(d[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(s=d.shift();s;)if(e.responseFields[s]&&(n[e.responseFields[s]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=s,s=d.shift())if("*"===s)s=l;else if("*"!==l&&l!==s){if(a=u[l+" "+s]||u["* "+s],!a)for(o in u)if(r=o.split(" "),r[1]===s&&(a=u[l+" "+r[0]]||u["* "+r[0]])){a===!0?a=u[o]:u[o]!==!0&&(s=r[0],d.unshift(r[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(c){return{state:"parsererror",error:a?c:"No conversion from "+l+" to "+s}}}return{state:"success",data:t}}function K(e,t,n,i){var o;if(se.isArray(t))se.each(t,function(t,o){n||Ot.test(e)?i(e,o):K(e+"["+("object"===("undefined"==typeof o?"undefined":_typeof(o))&&null!=o?t:"")+"]",o,n,i)});else if(n||"object"!==se.type(t))i(e,t);else for(o in t)K(e+"["+o+"]",t[o],n,i)}function Y(e){return se.isWindow(e)?e:9===e.nodeType&&e.defaultView}var G=[],U=e.document,X=G.slice,V=G.concat,Z=G.push,J=G.indexOf,ee={},te=ee.toString,ne=ee.hasOwnProperty,ie={},oe="2.2.4",se=function Nt(e,t){return new Nt.fn.init(e,t)},ae=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,re=/^-ms-/,le=/-([\da-z])/gi,ue=function(e,t){return t.toUpperCase()};se.fn=se.prototype={jquery:oe,constructor:se,selector:"",length:0,toArray:function(){return X.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:X.call(this)},pushStack:function(e){var t=se.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return se.each(this,e)},map:function(e){return this.pushStack(se.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(X.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:Z,sort:G.sort,splice:G.splice},se.extend=se.fn.extend=function(){var e,t,n,i,o,s,a=arguments[0]||{},r=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[r]||{},r++),"object"===("undefined"==typeof a?"undefined":_typeof(a))||se.isFunction(a)||(a={}),r===l&&(a=this,r--);r<l;r++)if(null!=(e=arguments[r]))for(t in e)n=a[t],i=e[t],a!==i&&(u&&i&&(se.isPlainObject(i)||(o=se.isArray(i)))?(o?(o=!1,s=n&&se.isArray(n)?n:[]):s=n&&se.isPlainObject(n)?n:{},a[t]=se.extend(u,s,i)):void 0!==i&&(a[t]=i));return a},se.extend({expando:"jQuery"+(oe+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===se.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!se.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if("object"!==se.type(e)||e.nodeType||se.isWindow(e))return!1;if(e.constructor&&!ne.call(e,"constructor")&&!ne.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||ne.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"===("undefined"==typeof e?"undefined":_typeof(e))||"function"==typeof e?ee[te.call(e)]||"object":"undefined"==typeof e?"undefined":_typeof(e)},globalEval:function(e){var t,n=eval;e=se.trim(e),e&&(1===e.indexOf("use strict")?(t=U.createElement("script"),t.text=e,U.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(re,"ms-").replace(le,ue)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var i,o=0;if(n(e))for(i=e.length;o<i&&t.call(e[o],o,e[o])!==!1;o++);else for(o in e)if(t.call(e[o],o,e[o])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(ae,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?se.merge(i,"string"==typeof e?[e]:e):Z.call(i,e)),i},inArray:function(e,t,n){return null==t?-1:J.call(t,e,n)},merge:function(e,t){for(var n=+t.length,i=0,o=e.length;i<n;i++)e[o++]=t[i];return e.length=o,e},grep:function(e,t,n){for(var i,o=[],s=0,a=e.length,r=!n;s<a;s++)i=!t(e[s],s),i!==r&&o.push(e[s]);return o},map:function(e,t,i){var o,s,a=0,r=[];if(n(e))for(o=e.length;a<o;a++)s=t(e[a],a,i),null!=s&&r.push(s);else for(a in e)s=t(e[a],a,i),null!=s&&r.push(s);return V.apply([],r)},guid:1,proxy:function It(e,t){var n,i,It;if("string"==typeof t&&(n=e[t],t=e,e=n),se.isFunction(e))return i=X.call(arguments,2),It=function(){return e.apply(t||this,i.concat(X.call(arguments)))},It.guid=e.guid=e.guid||se.guid++,It},now:Date.now,support:ie}),"function"==typeof Symbol&&(se.fn[Symbol.iterator]=G[Symbol.iterator]),se.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){ee["[object "+t+"]"]=t.toLowerCase()});var de=function(e){function t(e,t,n,i){var o,s,a,r,l,u,c,f,p=t&&t.ownerDocument,m=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!i&&((t?t.ownerDocument||t:M)!==S&&A(t),t=t||S,P)){if(11!==m&&(u=ve.exec(e)))if(o=u[1]){if(9===m){if(!(a=t.getElementById(o)))return n;if(a.id===o)return n.push(a),n}else if(p&&(a=p.getElementById(o))&&L(t,a)&&a.id===o)return n.push(a),n}else{if(u[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((o=u[3])&&C.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(o)),n}if(C.qsa&&!Q[e+" "]&&(!H||!H.test(e))){if(1!==m)p=t,f=e;else if("object"!==t.nodeName.toLowerCase()){for((r=t.getAttribute("id"))?r=r.replace(be,"\\$&"):t.setAttribute("id",r=j),c=_(e),s=c.length,l=he.test(r)?"#"+r:"[id='"+r+"']";s--;)c[s]=l+" "+h(c[s]);f=c.join(","),p=ye.test(e)&&d(t.parentNode)||t}if(f)try{return Z.apply(n,p.querySelectorAll(f)),n}catch(g){}finally{r===j&&t.removeAttribute("id")}}}return T(e.replace(re,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>$.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[j]=!0,e}function o(e){var t=S.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function s(e,t){for(var n=e.split("|"),i=n.length;i--;)$.attrHandle[n[i]]=t}function a(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||Y)-(~e.sourceIndex||Y);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function r(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return i(function(t){return t=+t,i(function(n,i){for(var o,s=e([],n.length,t),a=s.length;a--;)n[o=s[a]]&&(n[o]=!(i[o]=n[o]))})})}function d(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function c(){}function h(e){for(var t=0,n=e.length,i="";t<n;t++)i+=e[t].value;return i}function f(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=I++;return t.first?function(t,n,s){for(;t=t[i];)if(1===t.nodeType||o)return e(t,n,s)}:function(t,n,a){var r,l,u,d=[N,s];if(a){for(;t=t[i];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[i];)if(1===t.nodeType||o){if(u=t[j]||(t[j]={}),l=u[t.uniqueID]||(u[t.uniqueID]={}),(r=l[i])&&r[0]===N&&r[1]===s)return d[2]=r[2];if(l[i]=d,d[2]=e(t,n,a))return!0}}}function p(e){return e.length>1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function m(e,n,i){for(var o=0,s=n.length;o<s;o++)t(e,n[o],i);return i}function g(e,t,n,i,o){for(var s,a=[],r=0,l=e.length,u=null!=t;r<l;r++)(s=e[r])&&(n&&!n(s,i,o)||(a.push(s),u&&t.push(r)));return a}function v(e,t,n,o,s,a){return o&&!o[j]&&(o=v(o)),s&&!s[j]&&(s=v(s,a)),i(function(i,a,r,l){var u,d,c,h=[],f=[],p=a.length,v=i||m(t||"*",r.nodeType?[r]:r,[]),y=!e||!i&&t?v:g(v,h,e,r,l),b=n?s||(i?e:p||o)?[]:a:y;if(n&&n(y,b,r,l),o)for(u=g(b,f),o(u,[],r,l),d=u.length;d--;)(c=u[d])&&(b[f[d]]=!(y[f[d]]=c));if(i){if(s||e){if(s){for(u=[],d=b.length;d--;)(c=b[d])&&u.push(y[d]=c);s(null,b=[],u,l)}for(d=b.length;d--;)(c=b[d])&&(u=s?ee(i,c):h[d])>-1&&(i[u]=!(a[u]=c))}}else b=g(b===a?b.splice(p,b.length):b),s?s(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,i,o=e.length,s=$.relative[e[0].type],a=s||$.relative[" "],r=s?1:0,l=f(function(e){return e===t},a,!0),u=f(function(e){return ee(t,e)>-1},a,!0),d=[function(e,n,i){var o=!s&&(i||n!==z)||((t=n).nodeType?l(e,n,i):u(e,n,i));return t=null,o}];r<o;r++)if(n=$.relative[e[r].type])d=[f(p(d),n)];else{if(n=$.filter[e[r].type].apply(null,e[r].matches),n[j]){for(i=++r;i<o&&!$.relative[e[i].type];i++);return v(r>1&&p(d),r>1&&h(e.slice(0,r-1).concat({value:" "===e[r-2].type?"*":""})).replace(re,"$1"),n,r<i&&y(e.slice(r,i)),i<o&&y(e=e.slice(i)),i<o&&h(e))}d.push(n)}return p(d)}function b(e,n){var o=n.length>0,s=e.length>0,a=function(i,a,r,l,u){var d,c,h,f=0,p="0",m=i&&[],v=[],y=z,b=i||s&&$.find.TAG("*",u),w=N+=null==y?1:Math.random()||.1,C=b.length;for(u&&(z=a===S||a||u);p!==C&&null!=(d=b[p]);p++){if(s&&d){for(c=0,a||d.ownerDocument===S||(A(d),r=!P);h=e[c++];)if(h(d,a||S,r)){l.push(d);break}u&&(N=w)}o&&((d=!h&&d)&&f--,i&&m.push(d))}if(f+=p,o&&p!==f){for(c=0;h=n[c++];)h(m,v,a,r);if(i){if(f>0)for(;p--;)m[p]||v[p]||(v[p]=X.call(l));v=g(v)}Z.apply(l,v),u&&!i&&v.length>0&&f+n.length>1&&t.uniqueSort(l)}return u&&(N=w,z=y),m};return o?i(a):a}var w,C,$,k,x,_,F,T,z,E,O,A,S,D,P,H,R,q,L,j="sizzle"+1*new Date,M=e.document,N=0,I=0,B=n(),W=n(),Q=n(),K=function(e,t){return e===t&&(O=!0),0},Y=1<<31,G={}.hasOwnProperty,U=[],X=U.pop,V=U.push,Z=U.push,J=U.slice,ee=function(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe="\\["+ne+"*("+ie+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+ne+"*\\]",se=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+oe+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),re=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),le=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),de=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),ce=new RegExp(se),he=new RegExp("^"+ie+"$"),fe={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,we=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),Ce=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},$e=function(){A()};try{Z.apply(U=J.call(M.childNodes),M.childNodes),U[M.childNodes.length].nodeType}catch(ke){Z={apply:U.length?function(e,t){V.apply(e,J.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}C=t.support={},x=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},A=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:M;return i!==S&&9===i.nodeType&&i.documentElement?(S=i,D=S.documentElement,P=!x(S),(n=S.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",$e,!1):n.attachEvent&&n.attachEvent("onunload",$e)),C.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),C.getElementsByTagName=o(function(e){return e.appendChild(S.createComment("")),!e.getElementsByTagName("*").length}),C.getElementsByClassName=ge.test(S.getElementsByClassName),C.getById=o(function(e){return D.appendChild(e).id=j,!S.getElementsByName||!S.getElementsByName(j).length}),C.getById?($.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&P){var n=t.getElementById(e);return n?[n]:[]}},$.filter.ID=function(e){var t=e.replace(we,Ce);return function(e){return e.getAttribute("id")===t}}):(delete $.find.ID,$.filter.ID=function(e){var t=e.replace(we,Ce);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),$.find.TAG=C.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):C.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,s=t.getElementsByTagName(e);if("*"===e){for(;n=s[o++];)1===n.nodeType&&i.push(n);return i}return s},$.find.CLASS=C.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&P)return t.getElementsByClassName(e)},R=[],H=[],(C.qsa=ge.test(S.querySelectorAll))&&(o(function(e){D.appendChild(e).innerHTML="<a id='"+j+"'></a><select id='"+j+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&H.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||H.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+j+"-]").length||H.push("~="),e.querySelectorAll(":checked").length||H.push(":checked"),e.querySelectorAll("a#"+j+"+*").length||H.push(".#.+[+~]")}),o(function(e){var t=S.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&H.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||H.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),H.push(",.*:")})),(C.matchesSelector=ge.test(q=D.matches||D.webkitMatchesSelector||D.mozMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&o(function(e){C.disconnectedMatch=q.call(e,"div"),q.call(e,"[s!='']:x"),R.push("!=",se)}),H=H.length&&new RegExp(H.join("|")),R=R.length&&new RegExp(R.join("|")),t=ge.test(D.compareDocumentPosition),L=t||ge.test(D.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=t?function(e,t){if(e===t)return O=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!C.sortDetached&&t.compareDocumentPosition(e)===n?e===S||e.ownerDocument===M&&L(M,e)?-1:t===S||t.ownerDocument===M&&L(M,t)?1:E?ee(E,e)-ee(E,t):0:4&n?-1:1)}:function(e,t){if(e===t)return O=!0,0;var n,i=0,o=e.parentNode,s=t.parentNode,r=[e],l=[t];if(!o||!s)return e===S?-1:t===S?1:o?-1:s?1:E?ee(E,e)-ee(E,t):0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)r.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;r[i]===l[i];)i++;return i?a(r[i],l[i]):r[i]===M?-1:l[i]===M?1:0},S):S},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==S&&A(e),n=n.replace(de,"='$1']"),C.matchesSelector&&P&&!Q[n+" "]&&(!R||!R.test(n))&&(!H||!H.test(n)))try{var i=q.call(e,n);if(i||C.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(o){}return t(n,S,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==S&&A(e),L(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==S&&A(e);var n=$.attrHandle[t.toLowerCase()],i=n&&G.call($.attrHandle,t.toLowerCase())?n(e,t,!P):void 0;return void 0!==i?i:C.attributes||!P?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,o=0;if(O=!C.detectDuplicates,E=!C.sortStable&&e.slice(0),e.sort(K),O){for(;t=e[o++];)t===e[o]&&(i=n.push(o));for(;i--;)e.splice(n[i],1)}return E=null,e},k=t.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=k(t);return n},$=t.selectors={cacheLength:50,createPseudo:i,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(we,Ce),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Ce),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ce.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(we,Ce).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&B(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(o){var s=t.attr(o,e);return null==s?"!="===n:!n||(s+="","="===n?s===i:"!="===n?s!==i:"^="===n?i&&0===s.indexOf(i):"*="===n?i&&s.indexOf(i)>-1:"$="===n?i&&s.slice(-i.length)===i:"~="===n?(" "+s.replace(ae," ")+" ").indexOf(i)>-1:"|="===n&&(s===i||s.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,o){var s="nth"!==e.slice(0,3),a="last"!==e.slice(-4),r="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var u,d,c,h,f,p,m=s!==a?"nextSibling":"previousSibling",g=t.parentNode,v=r&&t.nodeName.toLowerCase(),y=!l&&!r,b=!1;if(g){if(s){for(;m;){for(h=t;h=h[m];)if(r?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(h=g,c=h[j]||(h[j]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),u=d[e]||[],f=u[0]===N&&u[1],b=f&&u[2],
+h=f&&g.childNodes[f];h=++f&&h&&h[m]||(b=f=0)||p.pop();)if(1===h.nodeType&&++b&&h===t){d[e]=[N,f,b];break}}else if(y&&(h=t,c=h[j]||(h[j]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),u=d[e]||[],f=u[0]===N&&u[1],b=f),b===!1)for(;(h=++f&&h&&h[m]||(b=f=0)||p.pop())&&((r?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++b||(y&&(c=h[j]||(h[j]={}),d=c[h.uniqueID]||(c[h.uniqueID]={}),d[e]=[N,b]),h!==t)););return b-=o,b===i||b%i===0&&b/i>=0}}},PSEUDO:function(e,n){var o,s=$.pseudos[e]||$.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return s[j]?s(n):s.length>1?(o=[e,e,"",n],$.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,o=s(e,n),a=o.length;a--;)i=ee(e,o[a]),e[i]=!(t[i]=o[a])}):function(e){return s(e,0,o)}):s}},pseudos:{not:i(function(e){var t=[],n=[],o=F(e.replace(re,"$1"));return o[j]?i(function(e,t,n,i){for(var s,a=o(e,null,i,[]),r=e.length;r--;)(s=a[r])&&(e[r]=!(t[r]=s))}):function(e,i,s){return t[0]=e,o(t,null,s,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(we,Ce),function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return he.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ce).toLowerCase(),function(t){var n;do if(n=P?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===D},focus:function(e){return e===S.activeElement&&(!S.hasFocus||S.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!$.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[n<0?n+t:n]}),even:u(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var i=n<0?n+t:n;--i>=0;)e.push(i);return e}),gt:u(function(e,t,n){for(var i=n<0?n+t:n;++i<t;)e.push(i);return e})}},$.pseudos.nth=$.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})$.pseudos[w]=r(w);for(w in{submit:!0,reset:!0})$.pseudos[w]=l(w);return c.prototype=$.filters=$.pseudos,$.setFilters=new c,_=t.tokenize=function(e,n){var i,o,s,a,r,l,u,d=W[e+" "];if(d)return n?0:d.slice(0);for(r=e,l=[],u=$.preFilter;r;){i&&!(o=le.exec(r))||(o&&(r=r.slice(o[0].length)||r),l.push(s=[])),i=!1,(o=ue.exec(r))&&(i=o.shift(),s.push({value:i,type:o[0].replace(re," ")}),r=r.slice(i.length));for(a in $.filter)!(o=fe[a].exec(r))||u[a]&&!(o=u[a](o))||(i=o.shift(),s.push({value:i,type:a,matches:o}),r=r.slice(i.length));if(!i)break}return n?r.length:r?t.error(e):W(e,l).slice(0)},F=t.compile=function(e,t){var n,i=[],o=[],s=Q[e+" "];if(!s){for(t||(t=_(e)),n=t.length;n--;)s=y(t[n]),s[j]?i.push(s):o.push(s);s=Q(e,b(o,i)),s.selector=e}return s},T=t.select=function(e,t,n,i){var o,s,a,r,l,u="function"==typeof e&&e,c=!i&&_(e=u.selector||e);if(n=n||[],1===c.length){if(s=c[0]=c[0].slice(0),s.length>2&&"ID"===(a=s[0]).type&&C.getById&&9===t.nodeType&&P&&$.relative[s[1].type]){if(t=($.find.ID(a.matches[0].replace(we,Ce),t)||[])[0],!t)return n;u&&(t=t.parentNode),e=e.slice(s.shift().value.length)}for(o=fe.needsContext.test(e)?0:s.length;o--&&(a=s[o],!$.relative[r=a.type]);)if((l=$.find[r])&&(i=l(a.matches[0].replace(we,Ce),ye.test(s[0].type)&&d(t.parentNode)||t))){if(s.splice(o,1),e=i.length&&h(s),!e)return Z.apply(n,i),n;break}}return(u||F(e,c))(i,t,!P,n,!t||ye.test(e)&&d(t.parentNode)||t),n},C.sortStable=j.split("").sort(K).join("")===j,C.detectDuplicates=!!O,A(),C.sortDetached=o(function(e){return 1&e.compareDocumentPosition(S.createElement("div"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||s("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),C.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||s("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||s(te,function(e,t,n){var i;if(!n)return e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);se.find=de,se.expr=de.selectors,se.expr[":"]=se.expr.pseudos,se.uniqueSort=se.unique=de.uniqueSort,se.text=de.getText,se.isXMLDoc=de.isXML,se.contains=de.contains;var ce=function(e,t,n){for(var i=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&se(e).is(n))break;i.push(e)}return i},he=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},fe=se.expr.match.needsContext,pe=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,me=/^.[^:#\[\.,]*$/;se.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?se.find.matchesSelector(i,e)?[i]:[]:se.find.matches(e,se.grep(t,function(e){return 1===e.nodeType}))},se.fn.extend({find:function(e){var t,n=this.length,i=[],o=this;if("string"!=typeof e)return this.pushStack(se(e).filter(function(){for(t=0;t<n;t++)if(se.contains(o[t],this))return!0}));for(t=0;t<n;t++)se.find(e,o[t],i);return i=this.pushStack(n>1?se.unique(i):i),i.selector=this.selector?this.selector+" "+e:e,i},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&fe.test(e)?se(e):e||[],!1).length}});var ge,ve=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ye=se.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||ge,"string"==typeof e){if(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:ve.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof se?t[0]:t,se.merge(this,se.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:U,!0)),pe.test(i[1])&&se.isPlainObject(t))for(i in t)se.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return o=U.getElementById(i[2]),o&&o.parentNode&&(this.length=1,this[0]=o),this.context=U,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):se.isFunction(e)?void 0!==n.ready?n.ready(e):e(se):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),se.makeArray(e,this))};ye.prototype=se.fn,ge=se(U);var be=/^(?:parents|prev(?:Until|All))/,we={children:!0,contents:!0,next:!0,prev:!0};se.fn.extend({has:function(e){var t=se(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(se.contains(this,t[e]))return!0})},closest:function(e,t){for(var n,i=0,o=this.length,s=[],a=fe.test(e)||"string"!=typeof e?se(e,t||this.context):0;i<o;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&se.find.matchesSelector(n,e))){s.push(n);break}return this.pushStack(s.length>1?se.uniqueSort(s):s)},index:function(e){return e?"string"==typeof e?J.call(se(e),this[0]):J.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(se.uniqueSort(se.merge(this.get(),se(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),se.each({parent:function Bt(e){var Bt=e.parentNode;return Bt&&11!==Bt.nodeType?Bt:null},parents:function(e){return ce(e,"parentNode")},parentsUntil:function(e,t,n){return ce(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return ce(e,"nextSibling")},prevAll:function(e){return ce(e,"previousSibling")},nextUntil:function(e,t,n){return ce(e,"nextSibling",n)},prevUntil:function(e,t,n){return ce(e,"previousSibling",n)},siblings:function(e){return he((e.parentNode||{}).firstChild,e)},children:function(e){return he(e.firstChild)},contents:function(e){return e.contentDocument||se.merge([],e.childNodes)}},function(e,t){se.fn[e]=function(n,i){var o=se.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=se.filter(i,o)),this.length>1&&(we[e]||se.uniqueSort(o),be.test(e)&&o.reverse()),this.pushStack(o)}});var Ce=/\S+/g;se.Callbacks=function(e){e="string"==typeof e?s(e):se.extend({},e);var t,n,i,o,a=[],r=[],l=-1,u=function(){for(o=e.once,i=t=!0;r.length;l=-1)for(n=r.shift();++l<a.length;)a[l].apply(n[0],n[1])===!1&&e.stopOnFalse&&(l=a.length,n=!1);e.memory||(n=!1),t=!1,o&&(a=n?[]:"")},d={add:function(){return a&&(n&&!t&&(l=a.length-1,r.push(n)),function i(t){se.each(t,function(t,n){se.isFunction(n)?e.unique&&d.has(n)||a.push(n):n&&n.length&&"string"!==se.type(n)&&i(n)})}(arguments),n&&!t&&u()),this},remove:function(){return se.each(arguments,function(e,t){for(var n;(n=se.inArray(t,a,n))>-1;)a.splice(n,1),n<=l&&l--}),this},has:function(e){return e?se.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=r=[],a=n="",this},disabled:function(){return!a},lock:function(){return o=r=[],n||(a=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],r.push(n),t||u()),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},se.extend({Deferred:function(e){var t=[["resolve","done",se.Callbacks("once memory"),"resolved"],["reject","fail",se.Callbacks("once memory"),"rejected"],["notify","progress",se.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return se.Deferred(function(n){se.each(t,function(t,s){var a=se.isFunction(e[t])&&e[t];o[s[1]](function(){var e=a&&a.apply(this,arguments);e&&se.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[s[0]+"With"](this===i?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?se.extend(e,i):i}},o={};return i.pipe=i.then,se.each(t,function(e,s){var a=s[2],r=s[3];i[s[1]]=a.add,r&&a.add(function(){n=r},t[1^e][2].disable,t[2][2].lock),o[s[0]]=function(){return o[s[0]+"With"](this===o?i:this,arguments),this},o[s[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,i,o=0,s=X.call(arguments),a=s.length,r=1!==a||e&&se.isFunction(e.promise)?a:0,l=1===r?e:se.Deferred(),u=function(e,n,i){return function(o){n[e]=this,i[e]=arguments.length>1?X.call(arguments):o,i===t?l.notifyWith(n,i):--r||l.resolveWith(n,i)}};if(a>1)for(t=new Array(a),n=new Array(a),i=new Array(a);o<a;o++)s[o]&&se.isFunction(s[o].promise)?s[o].promise().progress(u(o,n,t)).done(u(o,i,s)).fail(l.reject):--r;return r||l.resolveWith(i,s),l.promise()}});var $e;se.fn.ready=function(e){return se.ready.promise().done(e),this},se.extend({isReady:!1,readyWait:1,holdReady:function(e){e?se.readyWait++:se.ready(!0)},ready:function(e){(e===!0?--se.readyWait:se.isReady)||(se.isReady=!0,e!==!0&&--se.readyWait>0||($e.resolveWith(U,[se]),se.fn.triggerHandler&&(se(U).triggerHandler("ready"),se(U).off("ready"))))}}),se.ready.promise=function(t){return $e||($e=se.Deferred(),"complete"===U.readyState||"loading"!==U.readyState&&!U.documentElement.doScroll?e.setTimeout(se.ready):(U.addEventListener("DOMContentLoaded",a),e.addEventListener("load",a))),$e.promise(t)},se.ready.promise();var ke=function Wt(e,t,n,i,o,s,a){var r=0,l=e.length,u=null==n;if("object"===se.type(n)){o=!0;for(r in n)Wt(e,t,r,n[r],!0,s,a)}else if(void 0!==i&&(o=!0,se.isFunction(i)||(a=!0),u&&(a?(t.call(e,i),t=null):(u=t,t=function(e,t,n){return u.call(se(e),n)})),t))for(;r<l;r++)t(e[r],n,a?i:i.call(e[r],r,t(e[r],n)));return o?e:u?t.call(e):l?t(e[0],n):s},xe=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};r.uid=1,r.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!xe(e))return{};var t=e[this.expando];return t||(t={},xe(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var i,o=this.cache(e);if("string"==typeof t)o[t]=n;else for(i in t)o[i]=t[i];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var i;return void 0===t||t&&"string"==typeof t&&void 0===n?(i=this.get(e,t),void 0!==i?i:this.get(e,se.camelCase(t))):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,i,o,s=e[this.expando];if(void 0!==s){if(void 0===t)this.register(e);else{se.isArray(t)?i=t.concat(t.map(se.camelCase)):(o=se.camelCase(t),t in s?i=[t,o]:(i=o,i=i in s?[i]:i.match(Ce)||[])),n=i.length;for(;n--;)delete s[i[n]]}(void 0===t||se.isEmptyObject(s))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!se.isEmptyObject(t)}};var _e=new r,Fe=new r,Te=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ze=/[A-Z]/g;se.extend({hasData:function(e){return Fe.hasData(e)||_e.hasData(e)},data:function(e,t,n){return Fe.access(e,t,n)},removeData:function(e,t){Fe.remove(e,t)},_data:function(e,t,n){return _e.access(e,t,n)},_removeData:function(e,t){_e.remove(e,t)}}),se.fn.extend({data:function Qt(e,t){var n,i,Qt,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(Qt=Fe.get(o),1===o.nodeType&&!_e.get(o,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=se.camelCase(i.slice(5)),l(o,i,Qt[i])));_e.set(o,"hasDataAttrs",!0)}return Qt}return"object"===("undefined"==typeof e?"undefined":_typeof(e))?this.each(function(){Fe.set(this,e)}):ke(this,function(t){var n,i;if(o&&void 0===t){if(n=Fe.get(o,e)||Fe.get(o,e.replace(ze,"-$&").toLowerCase()),void 0!==n)return n;if(i=se.camelCase(e),n=Fe.get(o,i),void 0!==n)return n;if(n=l(o,i,void 0),void 0!==n)return n}else i=se.camelCase(e),this.each(function(){var n=Fe.get(this,i);Fe.set(this,i,t),e.indexOf("-")>-1&&void 0!==n&&Fe.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Fe.remove(this,e)})}}),se.extend({queue:function Kt(e,t,n){var Kt;if(e)return t=(t||"fx")+"queue",Kt=_e.get(e,t),n&&(!Kt||se.isArray(n)?Kt=_e.access(e,t,se.makeArray(n)):Kt.push(n)),Kt||[]},dequeue:function(e,t){t=t||"fx";var n=se.queue(e,t),i=n.length,o=n.shift(),s=se._queueHooks(e,t),a=function(){se.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete s.stop,o.call(e,a,s)),!i&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _e.get(e,n)||_e.access(e,n,{empty:se.Callbacks("once memory").add(function(){_e.remove(e,[t+"queue",n])})})}}),se.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?se.queue(this[0],e):void 0===t?this:this.each(function(){var n=se.queue(this,e,t);se._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&se.dequeue(this,e)})},dequeue:function(e){return this.each(function(){se.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,o=se.Deferred(),s=this,a=this.length,r=function(){--i||o.resolveWith(s,[s])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)n=_e.get(s[a],e+"queueHooks"),n&&n.empty&&(i++,n.empty.add(r));return r(),o.promise(t)}});var Ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Oe=new RegExp("^(?:([+-])=|)("+Ee+")([a-z%]*)$","i"),Ae=["Top","Right","Bottom","Left"],Se=function(e,t){return e=t||e,"none"===se.css(e,"display")||!se.contains(e.ownerDocument,e)},De=/^(?:checkbox|radio)$/i,Pe=/<([\w:-]+)/,He=/^$|\/(?:java|ecma)script/i,Re={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Re.optgroup=Re.option,Re.tbody=Re.tfoot=Re.colgroup=Re.caption=Re.thead,Re.th=Re.td;var qe=/<|&#?\w+;/;!function(){var e=U.createDocumentFragment(),t=e.appendChild(U.createElement("div")),n=U.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ie.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",ie.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Le=/^key/,je=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Me=/^([^.]*)(?:\.(.+)|)/;se.event={global:{},add:function(e,t,n,i,o){var s,a,r,l,u,d,c,h,f,p,m,g=_e.get(e);if(g)for(n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=se.guid++),(l=g.events)||(l=g.events={}),(a=g.handle)||(a=g.handle=function(t){return"undefined"!=typeof se&&se.event.triggered!==t.type?se.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Ce)||[""],u=t.length;u--;)r=Me.exec(t[u])||[],f=m=r[1],p=(r[2]||"").split(".").sort(),f&&(c=se.event.special[f]||{},f=(o?c.delegateType:c.bindType)||f,c=se.event.special[f]||{},d=se.extend({type:f,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&se.expr.match.needsContext.test(o),namespace:p.join(".")},s),(h=l[f])||(h=l[f]=[],h.delegateCount=0,c.setup&&c.setup.call(e,i,p,a)!==!1||e.addEventListener&&e.addEventListener(f,a)),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,d):h.push(d),se.event.global[f]=!0)},remove:function(e,t,n,i,o){var s,a,r,l,u,d,c,h,f,p,m,g=_e.hasData(e)&&_e.get(e);if(g&&(l=g.events)){for(t=(t||"").match(Ce)||[""],u=t.length;u--;)if(r=Me.exec(t[u])||[],f=m=r[1],p=(r[2]||"").split(".").sort(),f){for(c=se.event.special[f]||{},f=(i?c.delegateType:c.bindType)||f,h=l[f]||[],r=r[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=s=h.length;s--;)d=h[s],!o&&m!==d.origType||n&&n.guid!==d.guid||r&&!r.test(d.namespace)||i&&i!==d.selector&&("**"!==i||!d.selector)||(h.splice(s,1),d.selector&&h.delegateCount--,c.remove&&c.remove.call(e,d));a&&!h.length&&(c.teardown&&c.teardown.call(e,p,g.handle)!==!1||se.removeEvent(e,f,g.handle),delete l[f])}else for(f in l)se.event.remove(e,f+t[u],n,i,!0);se.isEmptyObject(l)&&_e.remove(e,"handle events")}},dispatch:function(e){e=se.event.fix(e);var t,n,i,o,s,a=[],r=X.call(arguments),l=(_e.get(this,"events")||{})[e.type]||[],u=se.event.special[e.type]||{};if(r[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(a=se.event.handlers.call(this,e,l),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,n=0;(s=o.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(s.namespace)||(e.handleObj=s,e.data=s.data,i=((se.event.special[s.origType]||{}).handle||s.handler).apply(o.elem,r),void 0!==i&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,o,s,a=[],r=t.delegateCount,l=e.target;if(r&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(i=[],n=0;n<r;n++)s=t[n],o=s.selector+" ",void 0===i[o]&&(i[o]=s.needsContext?se(o,this).index(l)>-1:se.find(o,this,null,[l]).length),i[o]&&i.push(s);i.length&&a.push({elem:l,handlers:i})}return r<t.length&&a.push({elem:this,handlers:t.slice(r)}),a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,o,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||U,i=n.documentElement,o=n.body,e.pageX=t.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),e.which||void 0===s||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[se.expando])return e;var t,n,i,o=e.type,s=e,a=this.fixHooks[o];for(a||(this.fixHooks[o]=a=je.test(o)?this.mouseHooks:Le.test(o)?this.keyHooks:{}),i=a.props?this.props.concat(a.props):this.props,e=new se.Event(s),t=i.length;t--;)n=i[t],e[n]=s[n];return e.target||(e.target=U),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==m()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===m()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&se.nodeName(this,"input"))return this.click(),!1},_default:function(e){return se.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},se.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},se.Event=function(e,t){return this instanceof se.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?f:p):this.type=e,t&&se.extend(this,t),this.timeStamp=e&&e.timeStamp||se.now(),void(this[se.expando]=!0)):new se.Event(e,t)},se.Event.prototype={constructor:se.Event,isDefaultPrevented:p,isPropagationStopped:p,isImmediatePropagationStopped:p,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=f,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=f,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=f,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},se.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){se.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,o=e.relatedTarget,s=e.handleObj;return o&&(o===i||se.contains(i,o))||(e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t),n}}}),se.fn.extend({on:function(e,t,n,i){return g(this,e,t,n,i)},one:function(e,t,n,i){return g(this,e,t,n,i,1)},off:function(e,t,n){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,se(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"===("undefined"==typeof e?"undefined":_typeof(e))){for(o in e)this.off(o,t,e[o]);return this}return t!==!1&&"function"!=typeof t||(n=t,t=void 0),n===!1&&(n=p),this.each(function(){se.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Ie=/<script|<style|<link/i,Be=/checked\s*(?:[^=]|=\s*.checked.)/i,We=/^true\/(.*)/,Qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;se.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function Yt(e,t,n){var i,o,s,a,Yt=e.cloneNode(!0),r=se.contains(e.ownerDocument,e);if(!(ie.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||se.isXMLDoc(e)))for(a=d(Yt),s=d(e),i=0,o=s.length;i<o;i++)C(s[i],a[i]);if(t)if(n)for(s=s||d(e),a=a||d(Yt),i=0,o=s.length;i<o;i++)w(s[i],a[i]);else w(e,Yt);return a=d(Yt,"script"),a.length>0&&c(a,!r&&d(e,"script")),Yt},cleanData:function(e){for(var t,n,i,o=se.event.special,s=0;void 0!==(n=e[s]);s++)if(xe(n)){if(t=n[_e.expando]){if(t.events)for(i in t.events)o[i]?se.event.remove(n,i):se.removeEvent(n,i,t.handle);n[_e.expando]=void 0}n[Fe.expando]&&(n[Fe.expando]=void 0)}}}),se.fn.extend({domManip:$,detach:function(e){return k(this,e,!0)},remove:function(e){return k(this,e)},text:function(e){return ke(this,function(e){return void 0===e?se.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=v(this,e);t.appendChild(e)}})},prepend:function(){return $(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=v(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(se.cleanData(d(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return se.clone(this,e,t)})},html:function(e){return ke(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ie.test(e)&&!Re[(Pe.exec(e)||["",""])[1].toLowerCase()]){e=se.htmlPrefilter(e);try{for(;n<i;n++)t=this[n]||{},1===t.nodeType&&(se.cleanData(d(t,!1)),t.innerHTML=e);t=0}catch(o){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return $(this,arguments,function(t){var n=this.parentNode;se.inArray(this,e)<0&&(se.cleanData(d(this)),n&&n.replaceChild(t,this))},e)}}),se.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){se.fn[e]=function(e){for(var n,i=[],o=se(e),s=o.length-1,a=0;a<=s;a++)n=a===s?this:this.clone(!0),se(o[a])[t](n),Z.apply(i,n.get());return this.pushStack(i)}});var Ke,Ye={HTML:"block",BODY:"block"},Ge=/^margin/,Ue=new RegExp("^("+Ee+")(?!px)[a-z%]+$","i"),Xe=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Ve=function(e,t,n,i){var o,s,a={};for(s in t)a[s]=e.style[s],e.style[s]=t[s];o=n.apply(e,i||[]);for(s in t)e.style[s]=a[s];return o},Ze=U.documentElement;!function(){function t(){r.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",r.innerHTML="",Ze.appendChild(a);var t=e.getComputedStyle(r);n="1%"!==t.top,s="2px"===t.marginLeft,i="4px"===t.width,r.style.marginRight="50%",o="4px"===t.marginRight,Ze.removeChild(a)}var n,i,o,s,a=U.createElement("div"),r=U.createElement("div");r.style&&(r.style.backgroundClip="content-box",r.cloneNode(!0).style.backgroundClip="",ie.clearCloneStyle="content-box"===r.style.backgroundClip,a.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",a.appendChild(r),se.extend(ie,{pixelPosition:function(){return t(),n},boxSizingReliable:function(){return null==i&&t(),i},pixelMarginRight:function(){return null==i&&t(),o},reliableMarginLeft:function(){return null==i&&t(),s},reliableMarginRight:function(){var t,n=r.appendChild(U.createElement("div"));return n.style.cssText=r.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",r.style.width="1px",Ze.appendChild(a),t=!parseFloat(e.getComputedStyle(n).marginRight),Ze.removeChild(a),r.removeChild(n),t}}))}();var Je=/^(none|table(?!-c[ea]).+)/,et={position:"absolute",visibility:"hidden",display:"block"},tt={letterSpacing:"0",fontWeight:"400"},nt=["Webkit","O","Moz","ms"],it=U.createElement("div").style;se.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=F(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function Gt(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,s,a,r=se.camelCase(t),Gt=e.style;return t=se.cssProps[r]||(se.cssProps[r]=z(r)||r),a=se.cssHooks[t]||se.cssHooks[r],void 0===n?a&&"get"in a&&void 0!==(o=a.get(e,!1,i))?o:Gt[t]:(s="undefined"==typeof n?"undefined":_typeof(n),"string"===s&&(o=Oe.exec(n))&&o[1]&&(n=u(e,t,o),s="number"),null!=n&&n===n&&("number"===s&&(n+=o&&o[3]||(se.cssNumber[r]?"":"px")),ie.clearCloneStyle||""!==n||0!==t.indexOf("background")||(Gt[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,i))||(Gt[t]=n)),void 0)}},css:function(e,t,n,i){var o,s,a,r=se.camelCase(t);return t=se.cssProps[r]||(se.cssProps[r]=z(r)||r),a=se.cssHooks[t]||se.cssHooks[r],a&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=F(e,t,i)),"normal"===o&&t in tt&&(o=tt[t]),""===n||n?(s=parseFloat(o),n===!0||isFinite(s)?s||0:o):o}}),se.each(["height","width"],function(e,t){se.cssHooks[t]={get:function(e,n,i){if(n)return Je.test(se.css(e,"display"))&&0===e.offsetWidth?Ve(e,et,function(){return A(e,t,i)}):A(e,t,i)},set:function(e,n,i){var o,s=i&&Xe(e),a=i&&O(e,t,i,"border-box"===se.css(e,"boxSizing",!1,s),s);return a&&(o=Oe.exec(n))&&"px"!==(o[3]||"px")&&(e.style[t]=n,n=se.css(e,t)),E(e,n,a)}}}),se.cssHooks.marginLeft=T(ie.reliableMarginLeft,function(e,t){if(t)return(parseFloat(F(e,"marginLeft"))||e.getBoundingClientRect().left-Ve(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),se.cssHooks.marginRight=T(ie.reliableMarginRight,function(e,t){if(t)return Ve(e,{display:"inline-block"},F,[e,"marginRight"])}),se.each({margin:"",padding:"",border:"Width"},function(e,t){se.cssHooks[e+t]={expand:function(n){for(var i=0,o={},s="string"==typeof n?n.split(" "):[n];i<4;i++)o[e+Ae[i]+t]=s[i]||s[i-2]||s[0];return o}},Ge.test(e)||(se.cssHooks[e+t].set=E)}),se.fn.extend({css:function(e,t){return ke(this,function(e,t,n){var i,o,s={},a=0;if(se.isArray(t)){for(i=Xe(e),o=t.length;a<o;a++)s[t[a]]=se.css(e,t[a],!1,i);return s}return void 0!==n?se.style(e,t,n):se.css(e,t)},e,t,arguments.length>1)},show:function(){return S(this,!0)},hide:function(){return S(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Se(this)?se(this).show():se(this).hide()})}}),se.Tween=D,D.prototype={constructor:D,init:function(e,t,n,i,o,s){this.elem=e,this.prop=n,this.easing=o||se.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=s||(se.cssNumber[n]?"":"px")},cur:function(){var e=D.propHooks[this.prop];return e&&e.get?e.get(this):D.propHooks._default.get(this)},run:function(e){var t,n=D.propHooks[this.prop];return this.options.duration?this.pos=t=se.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):D.propHooks._default.set(this),this}},D.prototype.init.prototype=D.prototype,D.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=se.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){se.fx.step[e.prop]?se.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[se.cssProps[e.prop]]&&!se.cssHooks[e.prop]?e.elem[e.prop]=e.now:se.style(e.elem,e.prop,e.now+e.unit)}}},D.propHooks.scrollTop=D.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now);
+}},se.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},se.fx=D.prototype.init,se.fx.step={};var ot,st,at=/^(?:toggle|show|hide)$/,rt=/queueHooks$/;se.Animation=se.extend(j,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return u(n.elem,e,Oe.exec(t),n),n}]},tweener:function(e,t){se.isFunction(e)?(t=e,e=["*"]):e=e.match(Ce);for(var n,i=0,o=e.length;i<o;i++)n=e[i],j.tweeners[n]=j.tweeners[n]||[],j.tweeners[n].unshift(t)},prefilters:[q],prefilter:function(e,t){t?j.prefilters.unshift(e):j.prefilters.push(e)}}),se.speed=function(e,t,n){var i=e&&"object"===("undefined"==typeof e?"undefined":_typeof(e))?se.extend({},e):{complete:n||!n&&t||se.isFunction(e)&&e,duration:e,easing:n&&t||t&&!se.isFunction(t)&&t};return i.duration=se.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in se.fx.speeds?se.fx.speeds[i.duration]:se.fx.speeds._default,null!=i.queue&&i.queue!==!0||(i.queue="fx"),i.old=i.complete,i.complete=function(){se.isFunction(i.old)&&i.old.call(this),i.queue&&se.dequeue(this,i.queue)},i},se.fn.extend({fadeTo:function(e,t,n,i){return this.filter(Se).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var o=se.isEmptyObject(e),s=se.speed(t,n,i),a=function(){var t=j(this,se.extend({},e),s);(o||_e.get(this,"finish"))&&t.stop(!0)};return a.finish=a,o||s.queue===!1?this.each(a):this.queue(s.queue,a)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",s=se.timers,a=_e.get(this);if(o)a[o]&&a[o].stop&&i(a[o]);else for(o in a)a[o]&&a[o].stop&&rt.test(o)&&i(a[o]);for(o=s.length;o--;)s[o].elem!==this||null!=e&&s[o].queue!==e||(s[o].anim.stop(n),t=!1,s.splice(o,1));!t&&n||se.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=_e.get(this),i=n[e+"queue"],o=n[e+"queueHooks"],s=se.timers,a=i?i.length:0;for(n.finish=!0,se.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=s.length;t--;)s[t].elem===this&&s[t].queue===e&&(s[t].anim.stop(!0),s.splice(t,1));for(t=0;t<a;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish})}}),se.each(["toggle","show","hide"],function(e,t){var n=se.fn[t];se.fn[t]=function(e,i,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(H(t,!0),e,i,o)}}),se.each({slideDown:H("show"),slideUp:H("hide"),slideToggle:H("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){se.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}}),se.timers=[],se.fx.tick=function(){var e,t=0,n=se.timers;for(ot=se.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||se.fx.stop(),ot=void 0},se.fx.timer=function(e){se.timers.push(e),e()?se.fx.start():se.timers.pop()},se.fx.interval=13,se.fx.start=function(){st||(st=e.setInterval(se.fx.tick,se.fx.interval))},se.fx.stop=function(){e.clearInterval(st),st=null},se.fx.speeds={slow:600,fast:200,_default:400},se.fn.delay=function(t,n){return t=se.fx?se.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,i){var o=e.setTimeout(n,t);i.stop=function(){e.clearTimeout(o)}})},function(){var e=U.createElement("input"),t=U.createElement("select"),n=t.appendChild(U.createElement("option"));e.type="checkbox",ie.checkOn=""!==e.value,ie.optSelected=n.selected,t.disabled=!0,ie.optDisabled=!n.disabled,e=U.createElement("input"),e.value="t",e.type="radio",ie.radioValue="t"===e.value}();var lt,ut=se.expr.attrHandle;se.fn.extend({attr:function(e,t){return ke(this,se.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){se.removeAttr(this,e)})}}),se.extend({attr:function(e,t,n){var i,o,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return"undefined"==typeof e.getAttribute?se.prop(e,t,n):(1===s&&se.isXMLDoc(e)||(t=t.toLowerCase(),o=se.attrHooks[t]||(se.expr.match.bool.test(t)?lt:void 0)),void 0!==n?null===n?void se.removeAttr(e,t):o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(i=o.get(e,t))?i:(i=se.find.attr(e,t),null==i?void 0:i))},attrHooks:{type:{set:function(e,t){if(!ie.radioValue&&"radio"===t&&se.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i,o=0,s=t&&t.match(Ce);if(s&&1===e.nodeType)for(;n=s[o++];)i=se.propFix[n]||n,se.expr.match.bool.test(n)&&(e[i]=!1),e.removeAttribute(n)}}),lt={set:function(e,t,n){return t===!1?se.removeAttr(e,n):e.setAttribute(n,n),n}},se.each(se.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ut[t]||se.find.attr;ut[t]=function(e,t,i){var o,s;return i||(s=ut[t],ut[t]=o,o=null!=n(e,t,i)?t.toLowerCase():null,ut[t]=s),o}});var dt=/^(?:input|select|textarea|button)$/i,ct=/^(?:a|area)$/i;se.fn.extend({prop:function(e,t){return ke(this,se.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[se.propFix[e]||e]})}}),se.extend({prop:function(e,t,n){var i,o,s=e.nodeType;if(3!==s&&8!==s&&2!==s)return 1===s&&se.isXMLDoc(e)||(t=se.propFix[t]||t,o=se.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=se.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||ct.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),ie.optSelected||(se.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),se.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){se.propFix[this.toLowerCase()]=this});var ht=/[\t\r\n\f]/g;se.fn.extend({addClass:function(e){var t,n,i,o,s,a,r,l=0;if(se.isFunction(e))return this.each(function(t){se(this).addClass(e.call(this,t,M(this)))});if("string"==typeof e&&e)for(t=e.match(Ce)||[];n=this[l++];)if(o=M(n),i=1===n.nodeType&&(" "+o+" ").replace(ht," ")){for(a=0;s=t[a++];)i.indexOf(" "+s+" ")<0&&(i+=s+" ");r=se.trim(i),o!==r&&n.setAttribute("class",r)}return this},removeClass:function(e){var t,n,i,o,s,a,r,l=0;if(se.isFunction(e))return this.each(function(t){se(this).removeClass(e.call(this,t,M(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Ce)||[];n=this[l++];)if(o=M(n),i=1===n.nodeType&&(" "+o+" ").replace(ht," ")){for(a=0;s=t[a++];)for(;i.indexOf(" "+s+" ")>-1;)i=i.replace(" "+s+" "," ");r=se.trim(i),o!==r&&n.setAttribute("class",r)}return this},toggleClass:function(e,t){var n="undefined"==typeof e?"undefined":_typeof(e);return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):se.isFunction(e)?this.each(function(n){se(this).toggleClass(e.call(this,n,M(this),t),t)}):this.each(function(){var t,i,o,s;if("string"===n)for(i=0,o=se(this),s=e.match(Ce)||[];t=s[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=M(this),t&&_e.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":_e.get(this,"__className__")||""))})},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+M(n)+" ").replace(ht," ").indexOf(t)>-1)return!0;return!1}});var ft=/\r/g,pt=/[\x20\t\r\n\f]+/g;se.fn.extend({val:function(e){var t,n,i,o=this[0];{if(arguments.length)return i=se.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,se(this).val()):e,null==o?o="":"number"==typeof o?o+="":se.isArray(o)&&(o=se.map(o,function(e){return null==e?"":e+""})),t=se.valHooks[this.type]||se.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=se.valHooks[o.type]||se.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(ft,""):null==n?"":n)}}}),se.extend({valHooks:{option:{get:function(e){var t=se.find.attr(e,"value");return null!=t?t:se.trim(se.text(e)).replace(pt," ")}},select:{get:function(e){for(var t,n,i=e.options,o=e.selectedIndex,s="select-one"===e.type||o<0,a=s?null:[],r=s?o+1:i.length,l=o<0?r:s?o:0;l<r;l++)if(n=i[l],(n.selected||l===o)&&(ie.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!se.nodeName(n.parentNode,"optgroup"))){if(t=se(n).val(),s)return t;a.push(t)}return a},set:function(e,t){for(var n,i,o=e.options,s=se.makeArray(t),a=o.length;a--;)i=o[a],(i.selected=se.inArray(se.valHooks.option.get(i),s)>-1)&&(n=!0);return n||(e.selectedIndex=-1),s}}}}),se.each(["radio","checkbox"],function(){se.valHooks[this]={set:function(e,t){if(se.isArray(t))return e.checked=se.inArray(se(e).val(),t)>-1}},ie.checkOn||(se.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var mt=/^(?:focusinfocus|focusoutblur)$/;se.extend(se.event,{trigger:function(t,n,i,o){var s,a,r,l,u,d,c,h=[i||U],f=ne.call(t,"type")?t.type:t,p=ne.call(t,"namespace")?t.namespace.split("."):[];if(a=r=i=i||U,3!==i.nodeType&&8!==i.nodeType&&!mt.test(f+se.event.triggered)&&(f.indexOf(".")>-1&&(p=f.split("."),f=p.shift(),p.sort()),u=f.indexOf(":")<0&&"on"+f,t=t[se.expando]?t:new se.Event(f,"object"===("undefined"==typeof t?"undefined":_typeof(t))&&t),t.isTrigger=o?2:3,t.namespace=p.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:se.makeArray(n,[t]),c=se.event.special[f]||{},o||!c.trigger||c.trigger.apply(i,n)!==!1)){if(!o&&!c.noBubble&&!se.isWindow(i)){for(l=c.delegateType||f,mt.test(l+f)||(a=a.parentNode);a;a=a.parentNode)h.push(a),r=a;r===(i.ownerDocument||U)&&h.push(r.defaultView||r.parentWindow||e)}for(s=0;(a=h[s++])&&!t.isPropagationStopped();)t.type=s>1?l:c.bindType||f,d=(_e.get(a,"events")||{})[t.type]&&_e.get(a,"handle"),d&&d.apply(a,n),d=u&&a[u],d&&d.apply&&xe(a)&&(t.result=d.apply(a,n),t.result===!1&&t.preventDefault());return t.type=f,o||t.isDefaultPrevented()||c._default&&c._default.apply(h.pop(),n)!==!1||!xe(i)||u&&se.isFunction(i[f])&&!se.isWindow(i)&&(r=i[u],r&&(i[u]=null),se.event.triggered=f,i[f](),se.event.triggered=void 0,r&&(i[u]=r)),t.result}},simulate:function(e,t,n){var i=se.extend(new se.Event,n,{type:e,isSimulated:!0});se.event.trigger(i,null,t)}}),se.fn.extend({trigger:function(e,t){return this.each(function(){se.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return se.event.trigger(e,t,n,!0)}}),se.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){se.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),se.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ie.focusin="onfocusin"in e,ie.focusin||se.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){se.event.simulate(t,e.target,se.event.fix(e))};se.event.special[t]={setup:function(){var i=this.ownerDocument||this,o=_e.access(i,t);o||i.addEventListener(e,n,!0),_e.access(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=_e.access(i,t)-1;o?_e.access(i,t,o):(i.removeEventListener(e,n,!0),_e.remove(i,t))}}});var gt=e.location,vt=se.now(),yt=/\?/;se.parseJSON=function(e){return JSON.parse(e+"")},se.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(i){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||se.error("Invalid XML: "+t),n};var bt=/#.*$/,wt=/([?&])_=[^&]*/,Ct=/^(.*?):[ \t]*([^\r\n]*)$/gm,$t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kt=/^(?:GET|HEAD)$/,xt=/^\/\//,_t={},Ft={},Tt="*/".concat("*"),zt=U.createElement("a");zt.href=gt.href,se.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:gt.href,type:"GET",isLocal:$t.test(gt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Tt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":se.parseJSON,"text xml":se.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?B(B(e,se.ajaxSettings),t):B(se.ajaxSettings,e)},ajaxPrefilter:N(_t),ajaxTransport:N(Ft),ajax:function(t,n){function i(t,n,i,r){var u,c,y,b,C,k=n;2!==w&&(w=2,l&&e.clearTimeout(l),o=void 0,a=r||"",$.readyState=t>0?4:0,u=t>=200&&t<300||304===t,i&&(b=W(h,$,i)),b=Q(h,b,$,u),u?(h.ifModified&&(C=$.getResponseHeader("Last-Modified"),C&&(se.lastModified[s]=C),C=$.getResponseHeader("etag"),C&&(se.etag[s]=C)),204===t||"HEAD"===h.type?k="nocontent":304===t?k="notmodified":(k=b.state,c=b.data,y=b.error,u=!y)):(y=k,!t&&k||(k="error",t<0&&(t=0))),$.status=t,$.statusText=(n||k)+"",u?m.resolveWith(f,[c,k,$]):m.rejectWith(f,[$,k,y]),$.statusCode(v),v=void 0,d&&p.trigger(u?"ajaxSuccess":"ajaxError",[$,h,u?c:y]),g.fireWith(f,[$,k]),d&&(p.trigger("ajaxComplete",[$,h]),--se.active||se.event.trigger("ajaxStop")))}"object"===("undefined"==typeof t?"undefined":_typeof(t))&&(n=t,t=void 0),n=n||{};var o,s,a,r,l,u,d,c,h=se.ajaxSetup({},n),f=h.context||h,p=h.context&&(f.nodeType||f.jquery)?se(f):se.event,m=se.Deferred(),g=se.Callbacks("once memory"),v=h.statusCode||{},y={},b={},w=0,C="canceled",$={readyState:0,getResponseHeader:function(e){var t;if(2===w){if(!r)for(r={};t=Ct.exec(a);)r[t[1].toLowerCase()]=t[2];t=r[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===w?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return w||(e=b[n]=b[n]||e,y[e]=t),this},overrideMimeType:function(e){return w||(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(w<2)for(t in e)v[t]=[v[t],e[t]];else $.always(e[$.status]);return this},abort:function(e){var t=e||C;return o&&o.abort(t),i(0,t),this}};if(m.promise($).complete=g.add,$.success=$.done,$.error=$.fail,h.url=((t||h.url||gt.href)+"").replace(bt,"").replace(xt,gt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=se.trim(h.dataType||"*").toLowerCase().match(Ce)||[""],null==h.crossDomain){u=U.createElement("a");try{u.href=h.url,u.href=u.href,h.crossDomain=zt.protocol+"//"+zt.host!=u.protocol+"//"+u.host}catch(k){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=se.param(h.data,h.traditional)),I(_t,h,n,$),2===w)return $;d=se.event&&h.global,d&&0===se.active++&&se.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!kt.test(h.type),s=h.url,h.hasContent||(h.data&&(s=h.url+=(yt.test(s)?"&":"?")+h.data,delete h.data),h.cache===!1&&(h.url=wt.test(s)?s.replace(wt,"$1_="+vt++):s+(yt.test(s)?"&":"?")+"_="+vt++)),h.ifModified&&(se.lastModified[s]&&$.setRequestHeader("If-Modified-Since",se.lastModified[s]),se.etag[s]&&$.setRequestHeader("If-None-Match",se.etag[s])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&$.setRequestHeader("Content-Type",h.contentType),$.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Tt+"; q=0.01":""):h.accepts["*"]);for(c in h.headers)$.setRequestHeader(c,h.headers[c]);if(h.beforeSend&&(h.beforeSend.call(f,$,h)===!1||2===w))return $.abort();C="abort";for(c in{success:1,error:1,complete:1})$[c](h[c]);if(o=I(Ft,h,n,$)){if($.readyState=1,d&&p.trigger("ajaxSend",[$,h]),2===w)return $;h.async&&h.timeout>0&&(l=e.setTimeout(function(){$.abort("timeout")},h.timeout));try{w=1,o.send(y,i)}catch(k){if(!(w<2))throw k;i(-1,k)}}else i(-1,"No Transport");return $},getJSON:function(e,t,n){return se.get(e,t,n,"json")},getScript:function(e,t){return se.get(e,void 0,t,"script")}}),se.each(["get","post"],function(e,t){se[t]=function(e,n,i,o){return se.isFunction(n)&&(o=o||i,i=n,n=void 0),se.ajax(se.extend({url:e,type:t,dataType:o,data:n,success:i},se.isPlainObject(e)&&e))}}),se._evalUrl=function(e){return se.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},se.fn.extend({wrapAll:function(e){var t;return se.isFunction(e)?this.each(function(t){se(this).wrapAll(e.call(this,t))}):(this[0]&&(t=se(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return se.isFunction(e)?this.each(function(t){se(this).wrapInner(e.call(this,t))}):this.each(function(){var t=se(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=se.isFunction(e);return this.each(function(n){se(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){se.nodeName(this,"body")||se(this).replaceWith(this.childNodes)}).end()}}),se.expr.filters.hidden=function(e){return!se.expr.filters.visible(e)},se.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Et=/%20/g,Ot=/\[\]$/,At=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;se.param=function(e,t){var n,i=[],o=function(e,t){t=se.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=se.ajaxSettings&&se.ajaxSettings.traditional),se.isArray(e)||e.jquery&&!se.isPlainObject(e))se.each(e,function(){o(this.name,this.value)});else for(n in e)K(n,e[n],t,o);return i.join("&").replace(Et,"+")},se.fn.extend({serialize:function(){return se.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=se.prop(this,"elements");return e?se.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!se(this).is(":disabled")&&Dt.test(this.nodeName)&&!St.test(e)&&(this.checked||!De.test(e))}).map(function(e,t){var n=se(this).val();return null==n?null:se.isArray(n)?se.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}}),se.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(t){}};var Pt={0:200,1223:204},Ht=se.ajaxSettings.xhr();ie.cors=!!Ht&&"withCredentials"in Ht,ie.ajax=Ht=!!Ht,se.ajaxTransport(function(t){var n,i;if(ie.cors||Ht&&!t.crossDomain)return{send:function(o,s){var a,r=t.xhr();if(r.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)r[a]=t.xhrFields[a];t.mimeType&&r.overrideMimeType&&r.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(a in o)r.setRequestHeader(a,o[a]);n=function(e){return function(){n&&(n=i=r.onload=r.onerror=r.onabort=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?s(0,"error"):s(r.status,r.statusText):s(Pt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=n(),i=r.onerror=n("error"),void 0!==r.onabort?r.onabort=i:r.onreadystatechange=function(){4===r.readyState&&e.setTimeout(function(){n&&i()})},n=n("abort");try{r.send(t.hasContent&&t.data||null)}catch(l){if(n)throw l}},abort:function(){n&&n()}}}),se.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return se.globalEval(e),e}}}),se.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),se.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=se("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),U.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Rt=[],qt=/(=)\?(?=&|$)|\?\?/;se.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Rt.pop()||se.expando+"_"+vt++;return this[e]=!0,e}}),se.ajaxPrefilter("json jsonp",function(t,n,i){var o,s,a,r=t.jsonp!==!1&&(qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&qt.test(t.data)&&"data");if(r||"jsonp"===t.dataTypes[0])return o=t.jsonpCallback=se.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,r?t[r]=t[r].replace(qt,"$1"+o):t.jsonp!==!1&&(t.url+=(yt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return a||se.error(o+" was not called"),a[0]},t.dataTypes[0]="json",s=e[o],e[o]=function(){a=arguments},i.always(function(){void 0===s?se(e).removeProp(o):e[o]=s,t[o]&&(t.jsonpCallback=n.jsonpCallback,Rt.push(o)),a&&se.isFunction(s)&&s(a[0]),a=s=void 0}),"script"}),se.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||U;var i=pe.exec(e),o=!n&&[];return i?[t.createElement(i[1])]:(i=h([e],t,o),o&&o.length&&se(o).remove(),se.merge([],i.childNodes))};var Lt=se.fn.load;se.fn.load=function(e,t,n){if("string"!=typeof e&&Lt)return Lt.apply(this,arguments);var i,o,s,a=this,r=e.indexOf(" ");return r>-1&&(i=se.trim(e.slice(r)),e=e.slice(0,r)),se.isFunction(t)?(n=t,t=void 0):t&&"object"===("undefined"==typeof t?"undefined":_typeof(t))&&(o="POST"),a.length>0&&se.ajax({url:e,type:o||"GET",dataType:"html",data:t}).done(function(e){s=arguments,a.html(i?se("<div>").append(se.parseHTML(e)).find(i):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,s||[e.responseText,t,e])})}),this},se.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){se.fn[t]=function(e){return this.on(t,e)}}),se.expr.filters.animated=function(e){return se.grep(se.timers,function(t){return e===t.elem}).length},se.offset={setOffset:function(e,t,n){var i,o,s,a,r,l,u,d=se.css(e,"position"),c=se(e),h={};"static"===d&&(e.style.position="relative"),r=c.offset(),s=se.css(e,"top"),l=se.css(e,"left"),u=("absolute"===d||"fixed"===d)&&(s+l).indexOf("auto")>-1,u?(i=c.position(),a=i.top,o=i.left):(a=parseFloat(s)||0,o=parseFloat(l)||0),se.isFunction(t)&&(t=t.call(e,n,se.extend({},r))),null!=t.top&&(h.top=t.top-r.top+a),null!=t.left&&(h.left=t.left-r.left+o),"using"in t?t.using.call(e,h):c.css(h)}},se.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){se.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,se.contains(t,i)?(o=i.getBoundingClientRect(),n=Y(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},position:function(){if(this[0]){var e,t,n=this[0],i={top:0,left:0};return"fixed"===se.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),se.nodeName(e[0],"html")||(i=e.offset()),i.top+=se.css(e[0],"borderTopWidth",!0),i.left+=se.css(e[0],"borderLeftWidth",!0)),{top:t.top-i.top-se.css(n,"marginTop",!0),left:t.left-i.left-se.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===se.css(e,"position");)e=e.offsetParent;return e||Ze})}}),se.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;se.fn[e]=function(i){return ke(this,function(e,i,o){var s=Y(e);return void 0===o?s?s[t]:e[i]:void(s?s.scrollTo(n?s.pageXOffset:o,n?o:s.pageYOffset):e[i]=o)},e,i,arguments.length)}}),se.each(["top","left"],function(e,t){se.cssHooks[t]=T(ie.pixelPosition,function(e,n){if(n)return n=F(e,t),Ue.test(n)?se(e).position()[t]+"px":n})}),se.each({Height:"height",Width:"width"},function(e,t){se.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){se.fn[i]=function(i,o){var s=arguments.length&&(n||"boolean"!=typeof i),a=n||(i===!0||o===!0?"margin":"border");return ke(this,function(t,n,i){var o;return se.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?se.css(t,n,a):se.style(t,n,i,a)},t,s?i:void 0,s,null)}})}),se.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},size:function(){return this.length}}),se.fn.andSelf=se.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return se});var jt=e.jQuery,Mt=e.$;return se.noConflict=function(t){return e.$===se&&(e.$=Mt),t&&e.jQuery===se&&(e.jQuery=jt),se},t||(e.jQuery=e.$=se),se}),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("whatInput",[],t):"object"==typeof exports?exports.whatInput=t():e.whatInput=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){e.exports=function(){var e=document.documentElement,t="initial",n=null,i=["input","select","textarea"],o=[16,17,18,91,93],s={keyup:"keyboard",mousedown:"mouse",mousemove:"mouse",MSPointerDown:"pointer",MSPointerMove:"pointer",pointerdown:"pointer",pointermove:"pointer",touchstart:"touch"},a=[],r=!1,l={2:"touch",3:"touch",4:"mouse"},u=null,d=function(){s[v()]="mouse",c(),f()},c=function(){window.PointerEvent?(e.addEventListener("pointerdown",h),e.addEventListener("pointermove",p)):window.MSPointerEvent?(e.addEventListener("MSPointerDown",h),e.addEventListener("MSPointerMove",p)):(e.addEventListener("mousedown",h),e.addEventListener("mousemove",p),"ontouchstart"in window&&e.addEventListener("touchstart",m)),e.addEventListener(v(),p),e.addEventListener("keydown",h),e.addEventListener("keyup",h)},h=function(e){if(!r){var a=e.which,l=s[e.type];if("pointer"===l&&(l=g(e)),t!==l||n!==l){var u=document.activeElement,d=!(!u||!u.nodeName||i.indexOf(u.nodeName.toLowerCase())!==-1);("touch"===l||"mouse"===l&&o.indexOf(a)===-1||"keyboard"===l&&d)&&(t=n=l,f())}}},f=function(){e.setAttribute("data-whatinput",t),e.setAttribute("data-whatintent",t),a.indexOf(t)===-1&&(a.push(t),e.className+=" whatinput-types-"+t)},p=function(t){if(!r){var i=s[t.type];"pointer"===i&&(i=g(t)),n!==i&&(n=i,e.setAttribute("data-whatintent",n))}},m=function(e){window.clearTimeout(u),h(e),r=!0,u=window.setTimeout(function(){r=!1},200)},g=function(e){return"number"==typeof e.pointerType?l[e.pointerType]:"pen"===e.pointerType?"touch":e.pointerType},v=function(){return"onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll"};return"addEventListener"in window&&Array.prototype.indexOf&&d(),{ask:function(e){return"loose"===e?n:t},types:function(){return a}}}()}])});var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e){function t(e){if(void 0===Function.prototype.name){var t=/function\s([^(]{1,})\(/,n=t.exec(e.toString());return n&&n.length>1?n[1].trim():""}return void 0===e.prototype?e.constructor.name:e.prototype.constructor.name}function n(e){return"true"===e||"false"!==e&&(isNaN(1*e)?e:parseFloat(e))}function i(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}var o="6.3.1",s={version:o,_plugins:{},_uuids:[],rtl:function(){return"rtl"===e("html").attr("dir")},plugin:function(e,n){var o=n||t(e),s=i(o);this._plugins[s]=this[o]=e},registerPlugin:function(e,n){var o=n?i(n):t(e.constructor).toLowerCase();e.uuid=this.GetYoDigits(6,o),e.$element.attr("data-"+o)||e.$element.attr("data-"+o,e.uuid),e.$element.data("zfPlugin")||e.$element.data("zfPlugin",e),e.$element.trigger("init.zf."+o),this._uuids.push(e.uuid)},unregisterPlugin:function(e){var n=i(t(e.$element.data("zfPlugin").constructor));this._uuids.splice(this._uuids.indexOf(e.uuid),1),e.$element.removeAttr("data-"+n).removeData("zfPlugin").trigger("destroyed.zf."+n);for(var o in e)e[o]=null},reInit:function(t){var n=t instanceof e;try{if(n)t.each(function(){e(this).data("zfPlugin")._init()});else{var o="undefined"==typeof t?"undefined":_typeof(t),s=this,a={object:function(t){t.forEach(function(t){t=i(t),e("[data-"+t+"]").foundation("_init")})},string:function(){t=i(t),e("[data-"+t+"]").foundation("_init")},undefined:function(){this.object(Object.keys(s._plugins))}};a[o](t)}}catch(r){console.error(r)}finally{return t}},GetYoDigits:function(e,t){return e=e||6,Math.round(Math.pow(36,e+1)-Math.random()*Math.pow(36,e)).toString(36).slice(1)+(t?"-"+t:"")},reflow:function(t,i){"undefined"==typeof i?i=Object.keys(this._plugins):"string"==typeof i&&(i=[i]);var o=this;e.each(i,function(i,s){var a=o._plugins[s],r=e(t).find("[data-"+s+"]").addBack("[data-"+s+"]");r.each(function(){var t=e(this),i={};if(t.data("zfPlugin"))return void console.warn("Tried to initialize "+s+" on an element that already has a Foundation plugin.");if(t.attr("data-options")){t.attr("data-options").split(";").forEach(function(e,t){var o=e.split(":").map(function(e){return e.trim()});o[0]&&(i[o[0]]=n(o[1]))})}try{t.data("zfPlugin",new a(e(this),i))}catch(o){console.error(o)}finally{return}})})},getFnName:t,transitionend:function(e){var t,n={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend"},i=document.createElement("div");for(var o in n)"undefined"!=typeof i.style[o]&&(t=n[o]);return t?t:(t=setTimeout(function(){e.triggerHandler("transitionend",[e])},1),"transitionend")}};s.util={throttle:function(e,t){var n=null;return function(){var i=this,o=arguments;null===n&&(n=setTimeout(function(){e.apply(i,o),n=null},t))}}};var a=function(n){var i="undefined"==typeof n?"undefined":_typeof(n),o=e("meta.foundation-mq"),a=e(".no-js");if(o.length||e('<meta class="foundation-mq">').appendTo(document.head),a.length&&a.removeClass("no-js"),"undefined"===i)s.MediaQuery._init(),s.reflow(this);else{if("string"!==i)throw new TypeError("We're sorry, "+i+" is not a valid parameter. You must use a string representing the method you wish to invoke.");var r=Array.prototype.slice.call(arguments,1),l=this.data("zfPlugin");if(void 0===l||void 0===l[n])throw new ReferenceError("We're sorry, '"+n+"' is not an available method for "+(l?t(l):"this element")+".");1===this.length?l[n].apply(l,r):this.each(function(t,i){l[n].apply(e(i).data("zfPlugin"),r)})}return this};window.Foundation=s,e.fn.foundation=a,function(){Date.now&&window.Date.now||(window.Date.now=Date.now=function(){return(new Date).getTime()});for(var e=["webkit","moz"],t=0;t<e.length&&!window.requestAnimationFrame;++t){var n=e[t];window.requestAnimationFrame=window[n+"RequestAnimationFrame"],window.cancelAnimationFrame=window[n+"CancelAnimationFrame"]||window[n+"CancelRequestAnimationFrame"]}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var i=0;window.requestAnimationFrame=function(e){var t=Date.now(),n=Math.max(i+16,t);return setTimeout(function(){e(i=n)},n-t)},window.cancelAnimationFrame=clearTimeout}window.performance&&window.performance.now||(window.performance={start:Date.now(),now:function(){return Date.now()-this.start}})}(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,i=function(){},o=function(){return n.apply(this instanceof i?this:e,t.concat(Array.prototype.slice.call(arguments)));
+};return this.prototype&&(i.prototype=this.prototype),o.prototype=new i,o})}(jQuery),!function(e){function t(e,t,i,o){var s,a,r,l,u=n(e);if(t){var d=n(t);a=u.offset.top+u.height<=d.height+d.offset.top,s=u.offset.top>=d.offset.top,r=u.offset.left>=d.offset.left,l=u.offset.left+u.width<=d.width+d.offset.left}else a=u.offset.top+u.height<=u.windowDims.height+u.windowDims.offset.top,s=u.offset.top>=u.windowDims.offset.top,r=u.offset.left>=u.windowDims.offset.left,l=u.offset.left+u.width<=u.windowDims.width;var c=[a,s,r,l];return i?r===l==!0:o?s===a==!0:c.indexOf(!1)===-1}function n(e,t){if(e=e.length?e[0]:e,e===window||e===document)throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");var n=e.getBoundingClientRect(),i=e.parentNode.getBoundingClientRect(),o=document.body.getBoundingClientRect(),s=window.pageYOffset,a=window.pageXOffset;return{width:n.width,height:n.height,offset:{top:n.top+s,left:n.left+a},parentDims:{width:i.width,height:i.height,offset:{top:i.top+s,left:i.left+a}},windowDims:{width:o.width,height:o.height,offset:{top:s,left:a}}}}function i(e,t,i,o,s,a){var r=n(e),l=t?n(t):null;switch(i){case"top":return{left:Foundation.rtl()?l.offset.left-r.width+l.width:l.offset.left,top:l.offset.top-(r.height+o)};case"left":return{left:l.offset.left-(r.width+s),top:l.offset.top};case"right":return{left:l.offset.left+l.width+s,top:l.offset.top};case"center top":return{left:l.offset.left+l.width/2-r.width/2,top:l.offset.top-(r.height+o)};case"center bottom":return{left:a?s:l.offset.left+l.width/2-r.width/2,top:l.offset.top+l.height+o};case"center left":return{left:l.offset.left-(r.width+s),top:l.offset.top+l.height/2-r.height/2};case"center right":return{left:l.offset.left+l.width+s+1,top:l.offset.top+l.height/2-r.height/2};case"center":return{left:r.windowDims.offset.left+r.windowDims.width/2-r.width/2,top:r.windowDims.offset.top+r.windowDims.height/2-r.height/2};case"reveal":return{left:(r.windowDims.width-r.width)/2,top:r.windowDims.offset.top+o};case"reveal full":return{left:r.windowDims.offset.left,top:r.windowDims.offset.top};case"left bottom":return{left:l.offset.left,top:l.offset.top+l.height+o};case"right bottom":return{left:l.offset.left+l.width+s-r.width,top:l.offset.top+l.height+o};default:return{left:Foundation.rtl()?l.offset.left-r.width+l.width:l.offset.left+s,top:l.offset.top+l.height+o}}}Foundation.Box={ImNotTouchingYou:t,GetDimensions:n,GetOffsets:i}}(jQuery),!function(e){function t(e){var t={};for(var n in e)t[e[n]]=e[n];return t}var n={9:"TAB",13:"ENTER",27:"ESCAPE",32:"SPACE",37:"ARROW_LEFT",38:"ARROW_UP",39:"ARROW_RIGHT",40:"ARROW_DOWN"},i={},o={keys:t(n),parseKey:function(e){var t=n[e.which||e.keyCode]||String.fromCharCode(e.which).toUpperCase();return t=t.replace(/\W+/,""),e.shiftKey&&(t="SHIFT_"+t),e.ctrlKey&&(t="CTRL_"+t),e.altKey&&(t="ALT_"+t),t=t.replace(/_$/,"")},handleKey:function(t,n,o){var s,a,r,l=i[n],u=this.parseKey(t);if(!l)return console.warn("Component not defined!");if(s="undefined"==typeof l.ltr?l:Foundation.rtl()?e.extend({},l.ltr,l.rtl):e.extend({},l.rtl,l.ltr),a=s[u],r=o[a],r&&"function"==typeof r){var d=r.apply();(o.handled||"function"==typeof o.handled)&&o.handled(d)}else(o.unhandled||"function"==typeof o.unhandled)&&o.unhandled()},findFocusable:function(t){return!!t&&t.find("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(function(){return!(!e(this).is(":visible")||e(this).attr("tabindex")<0)})},register:function(e,t){i[e]=t},trapFocus:function(e){var t=Foundation.Keyboard.findFocusable(e),n=t.eq(0),i=t.eq(-1);e.on("keydown.zf.trapfocus",function(e){e.target===i[0]&&"TAB"===Foundation.Keyboard.parseKey(e)?(e.preventDefault(),n.focus()):e.target===n[0]&&"SHIFT_TAB"===Foundation.Keyboard.parseKey(e)&&(e.preventDefault(),i.focus())})},releaseFocus:function(e){e.off("keydown.zf.trapfocus")}};Foundation.Keyboard=o}(jQuery);var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e){function t(e){var t={};return"string"!=typeof e?t:(e=e.trim().slice(1,-1))?t=e.split("&").reduce(function(e,t){var n=t.replace(/\+/g," ").split("="),i=n[0],o=n[1];return i=decodeURIComponent(i),o=void 0===o?null:decodeURIComponent(o),e.hasOwnProperty(i)?Array.isArray(e[i])?e[i].push(o):e[i]=[e[i],o]:e[i]=o,e},{}):t}var n={queries:[],current:"",_init:function(){var n,i=this,o=e(".foundation-mq").css("font-family");n=t(o);for(var s in n)n.hasOwnProperty(s)&&i.queries.push({name:s,value:"only screen and (min-width: "+n[s]+")"});this.current=this._getCurrentSize(),this._watcher()},atLeast:function(e){var t=this.get(e);return!!t&&window.matchMedia(t).matches},is:function(e){return e=e.trim().split(" "),e.length>1&&"only"===e[1]?e[0]===this._getCurrentSize():this.atLeast(e[0])},get:function(e){for(var t in this.queries)if(this.queries.hasOwnProperty(t)){var n=this.queries[t];if(e===n.name)return n.value}return null},_getCurrentSize:function(){for(var e,t=0;t<this.queries.length;t++){var n=this.queries[t];window.matchMedia(n.value).matches&&(e=n)}return"object"===("undefined"==typeof e?"undefined":_typeof(e))?e.name:e},_watcher:function(){var t=this;e(window).on("resize.zf.mediaquery",function(){var n=t._getCurrentSize(),i=t.current;n!==i&&(t.current=n,e(window).trigger("changed.zf.mediaquery",[n,i]))})}};Foundation.MediaQuery=n,window.matchMedia||(window.matchMedia=function(){var e=window.styleMedia||window.media;if(!e){var t=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;t.type="text/css",t.id="matchmediajs-test",n&&n.parentNode&&n.parentNode.insertBefore(t,n),i="getComputedStyle"in window&&window.getComputedStyle(t,null)||t.currentStyle,e={matchMedium:function(e){var n="@media "+e+"{ #matchmediajs-test { width: 1px; } }";return t.styleSheet?t.styleSheet.cssText=n:t.textContent=n,"1px"===i.width}}}return function(t){return{matches:e.matchMedium(t||"all"),media:t||"all"}}}()),Foundation.MediaQuery=n}(jQuery),!function(e){function t(e,t,n){function i(r){a||(a=r),s=r-a,n.apply(t),s<e?o=window.requestAnimationFrame(i,t):(window.cancelAnimationFrame(o),t.trigger("finished.zf.animate",[t]).triggerHandler("finished.zf.animate",[t]))}var o,s,a=null;return 0===e?(n.apply(t),void t.trigger("finished.zf.animate",[t]).triggerHandler("finished.zf.animate",[t])):void(o=window.requestAnimationFrame(i))}function n(t,n,s,a){function r(){t||n.hide(),l(),a&&a.apply(n)}function l(){n[0].style.transitionDuration=0,n.removeClass(u+" "+d+" "+s)}if(n=e(n).eq(0),n.length){var u=t?i[0]:i[1],d=t?o[0]:o[1];l(),n.addClass(s).css("transition","none"),requestAnimationFrame(function(){n.addClass(u),t&&n.show()}),requestAnimationFrame(function(){n[0].offsetWidth,n.css("transition","").addClass(d)}),n.one(Foundation.transitionend(n),r)}}var i=["mui-enter","mui-leave"],o=["mui-enter-active","mui-leave-active"],s={animateIn:function(e,t,i){n(!0,e,t,i)},animateOut:function(e,t,i){n(!1,e,t,i)}};Foundation.Move=t,Foundation.Motion=s}(jQuery),!function(e){var t={Feather:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"zf";t.attr("role","menubar");var i=t.find("li").attr({role:"menuitem"}),o="is-"+n+"-submenu",s=o+"-item",a="is-"+n+"-submenu-parent";i.each(function(){var t=e(this),i=t.children("ul");i.length&&(t.addClass(a).attr({"aria-haspopup":!0,"aria-label":t.children("a:first").text()}),"drilldown"===n&&t.attr({"aria-expanded":!1}),i.addClass("submenu "+o).attr({"data-submenu":"",role:"menu"}),"drilldown"===n&&i.attr({"aria-hidden":!0})),t.parent("[data-submenu]").length&&t.addClass("is-submenu-item "+s)})},Burn:function(e,t){var n="is-"+t+"-submenu",i=n+"-item",o="is-"+t+"-submenu-parent";e.find(">li, .menu, .menu > li").removeClass(n+" "+i+" "+o+" is-submenu-item submenu is-active").removeAttr("data-submenu").css("display","")}};Foundation.Nest=t}(jQuery),!function(e){function t(e,t,n){var i,o,s=this,a=t.duration,r=Object.keys(e.data())[0]||"timer",l=-1;this.isPaused=!1,this.restart=function(){l=-1,clearTimeout(o),this.start()},this.start=function(){this.isPaused=!1,clearTimeout(o),l=l<=0?a:l,e.data("paused",!1),i=Date.now(),o=setTimeout(function(){t.infinite&&s.restart(),n&&"function"==typeof n&&n()},l),e.trigger("timerstart.zf."+r)},this.pause=function(){this.isPaused=!0,clearTimeout(o),e.data("paused",!0);var t=Date.now();l-=t-i,e.trigger("timerpaused.zf."+r)}}function n(t,n){function i(){o--,0===o&&n()}var o=t.length;0===o&&n(),t.each(function(){if(this.complete||4===this.readyState||"complete"===this.readyState)i();else{var t=e(this).attr("src");e(this).attr("src",t+(t.indexOf("?")>=0?"&":"?")+(new Date).getTime()),e(this).one("load",function(){i()})}})}Foundation.Timer=t,Foundation.onImagesLoaded=n}(jQuery),function(e){function t(){this.removeEventListener("touchmove",n),this.removeEventListener("touchend",t),u=!1}function n(n){if(e.spotSwipe.preventDefault&&n.preventDefault(),u){var i,o=n.touches[0].pageX,a=(n.touches[0].pageY,s-o);l=(new Date).getTime()-r,Math.abs(a)>=e.spotSwipe.moveThreshold&&l<=e.spotSwipe.timeThreshold&&(i=a>0?"left":"right"),i&&(n.preventDefault(),t.call(this),e(this).trigger("swipe",i).trigger("swipe"+i))}}function i(e){1==e.touches.length&&(s=e.touches[0].pageX,a=e.touches[0].pageY,u=!0,r=(new Date).getTime(),this.addEventListener("touchmove",n,!1),this.addEventListener("touchend",t,!1))}function o(){this.addEventListener&&this.addEventListener("touchstart",i,!1)}e.spotSwipe={version:"1.0.0",enabled:"ontouchstart"in document.documentElement,preventDefault:!1,moveThreshold:75,timeThreshold:200};var s,a,r,l,u=!1;e.event.special.swipe={setup:o},e.each(["left","up","down","right"],function(){e.event.special["swipe"+this]={setup:function(){e(this).on("swipe",e.noop)}}})}(jQuery),!function(e){e.fn.addTouch=function(){this.each(function(n,i){e(i).bind("touchstart touchmove touchend touchcancel",function(){t(event)})});var t=function(e){var t,n=e.changedTouches,i=n[0],o={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},s=o[e.type];"MouseEvent"in window&&"function"==typeof window.MouseEvent?t=new window.MouseEvent(s,{bubbles:!0,cancelable:!0,screenX:i.screenX,screenY:i.screenY,clientX:i.clientX,clientY:i.clientY}):(t=document.createEvent("MouseEvent"),t.initMouseEvent(s,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null)),i.target.dispatchEvent(t)}}}(jQuery);var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e){function t(){s(),i(),o(),n()}function n(t){var n=e("[data-yeti-box]"),i=["dropdown","tooltip","reveal"];if(t&&("string"==typeof t?i.push(t):"object"===("undefined"==typeof t?"undefined":_typeof(t))&&"string"==typeof t[0]?i.concat(t):console.error("Plugin names must be strings")),n.length){var o=i.map(function(e){return"closeme.zf."+e}).join(" ");e(window).off(o).on(o,function(t,n){var i=t.namespace.split(".")[0],o=e("[data-"+i+"]").not('[data-yeti-box="'+n+'"]');o.each(function(){var t=e(this);t.triggerHandler("close.zf.trigger",[t])})})}}function i(t){var n=void 0,i=e("[data-resize]");i.length&&e(window).off("resize.zf.trigger").on("resize.zf.trigger",function(o){n&&clearTimeout(n),n=setTimeout(function(){a||i.each(function(){e(this).triggerHandler("resizeme.zf.trigger")}),i.attr("data-events","resize")},t||10)})}function o(t){var n=void 0,i=e("[data-scroll]");i.length&&e(window).off("scroll.zf.trigger").on("scroll.zf.trigger",function(o){n&&clearTimeout(n),n=setTimeout(function(){a||i.each(function(){e(this).triggerHandler("scrollme.zf.trigger")}),i.attr("data-events","scroll")},t||10)})}function s(){if(!a)return!1;var t=document.querySelectorAll("[data-resize], [data-scroll], [data-mutate]"),n=function(t){var n=e(t[0].target);switch(t[0].type){case"attributes":"scroll"===n.attr("data-events")&&"data-events"===t[0].attributeName&&n.triggerHandler("scrollme.zf.trigger",[n,window.pageYOffset]),"resize"===n.attr("data-events")&&"data-events"===t[0].attributeName&&n.triggerHandler("resizeme.zf.trigger",[n]),"style"===t[0].attributeName&&(n.closest("[data-mutate]").attr("data-events","mutate"),n.closest("[data-mutate]").triggerHandler("mutateme.zf.trigger",[n.closest("[data-mutate]")]));break;case"childList":n.closest("[data-mutate]").attr("data-events","mutate"),n.closest("[data-mutate]").triggerHandler("mutateme.zf.trigger",[n.closest("[data-mutate]")]);break;default:return!1}};if(t.length)for(var i=0;i<=t.length-1;i++){var o=new a(n);o.observe(t[i],{attributes:!0,childList:!0,characterData:!1,subtree:!0,attributeFilter:["data-events","style"]})}}var a=function(){for(var e=["WebKit","Moz","O","Ms",""],t=0;t<e.length;t++)if(e[t]+"MutationObserver"in window)return window[e[t]+"MutationObserver"];return!1}(),r=function(t,n){t.data(n).split(" ").forEach(function(i){e("#"+i)["close"===n?"trigger":"triggerHandler"](n+".zf.trigger",[t])})};e(document).on("click.zf.trigger","[data-open]",function(){r(e(this),"open")}),e(document).on("click.zf.trigger","[data-close]",function(){var t=e(this).data("close");t?r(e(this),"close"):e(this).trigger("close.zf.trigger")}),e(document).on("click.zf.trigger","[data-toggle]",function(){var t=e(this).data("toggle");t?r(e(this),"toggle"):e(this).trigger("toggle.zf.trigger")}),e(document).on("close.zf.trigger","[data-closable]",function(t){t.stopPropagation();var n=e(this).data("closable");""!==n?Foundation.Motion.animateOut(e(this),n,function(){e(this).trigger("closed.zf")}):e(this).fadeOut().trigger("closed.zf")}),e(document).on("focus.zf.trigger blur.zf.trigger","[data-toggle-focus]",function(){var t=e(this).data("toggle-focus");e("#"+t).triggerHandler("toggle.zf.trigger",[e(this)])}),e(window).on("load",function(){t()}),Foundation.IHearYou=t}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Abide")}return _createClass(t,[{key:"_init",value:function(){this.$inputs=this.$element.find("input, textarea, select"),this._events()}},{key:"_events",value:function(){var t=this;this.$element.off(".abide").on("reset.zf.abide",function(){t.resetForm()}).on("submit.zf.abide",function(){return t.validateForm()}),"fieldChange"===this.options.validateOn&&this.$inputs.off("change.zf.abide").on("change.zf.abide",function(n){t.validateInput(e(n.target))}),this.options.liveValidate&&this.$inputs.off("input.zf.abide").on("input.zf.abide",function(n){t.validateInput(e(n.target))}),this.options.validateOnBlur&&this.$inputs.off("blur.zf.abide").on("blur.zf.abide",function(n){t.validateInput(e(n.target))})}},{key:"_reflow",value:function(){this._init()}},{key:"requiredCheck",value:function(e){if(!e.attr("required"))return!0;var t=!0;switch(e[0].type){case"checkbox":t=e[0].checked;break;case"select":case"select-one":case"select-multiple":var n=e.find("option:selected");n.length&&n.val()||(t=!1);break;default:e.val()&&e.val().length||(t=!1)}return t}},{key:"findFormError",value:function(e){var t=e[0].id,n=e.siblings(this.options.formErrorSelector);return n.length||(n=e.parent().find(this.options.formErrorSelector)),n=n.add(this.$element.find('[data-form-error-for="'+t+'"]'))}},{key:"findLabel",value:function(e){var t=e[0].id,n=this.$element.find('label[for="'+t+'"]');return n.length?n:e.closest("label")}},{key:"findRadioLabels",value:function(t){var n=this,i=t.map(function(t,i){var o=i.id,s=n.$element.find('label[for="'+o+'"]');return s.length||(s=e(i).closest("label")),s[0]});return e(i)}},{key:"addErrorClasses",value:function(e){var t=this.findLabel(e),n=this.findFormError(e);t.length&&t.addClass(this.options.labelErrorClass),n.length&&n.addClass(this.options.formErrorClass),e.addClass(this.options.inputErrorClass).attr("data-invalid","")}},{key:"removeRadioErrorClasses",value:function(e){var t=this.$element.find(':radio[name="'+e+'"]'),n=this.findRadioLabels(t),i=this.findFormError(t);n.length&&n.removeClass(this.options.labelErrorClass),i.length&&i.removeClass(this.options.formErrorClass),t.removeClass(this.options.inputErrorClass).removeAttr("data-invalid")}},{key:"removeErrorClasses",value:function(e){if("radio"==e[0].type)return this.removeRadioErrorClasses(e.attr("name"));var t=this.findLabel(e),n=this.findFormError(e);t.length&&t.removeClass(this.options.labelErrorClass),n.length&&n.removeClass(this.options.formErrorClass),e.removeClass(this.options.inputErrorClass).removeAttr("data-invalid")}},{key:"validateInput",value:function(t){var n=this.requiredCheck(t),i=!1,o=!0,s=t.attr("data-validator"),a=!0;if(t.is("[data-abide-ignore]")||t.is('[type="hidden"]')||t.is("[disabled]"))return!0;switch(t[0].type){case"radio":i=this.validateRadio(t.attr("name"));break;case"checkbox":i=n;break;case"select":case"select-one":case"select-multiple":i=n;break;default:i=this.validateText(t)}s&&(o=this.matchValidation(t,s,t.attr("required"))),t.attr("data-equalto")&&(a=this.options.validators.equalTo(t));var r=[n,i,o,a].indexOf(!1)===-1,l=(r?"valid":"invalid")+".zf.abide";if(r){var u=this.$element.find('[data-equalto="'+t.attr("id")+'"]');if(u.length){var d=this;u.each(function(){e(this).val()&&d.validateInput(e(this))})}}return this[r?"removeErrorClasses":"addErrorClasses"](t),t.trigger(l,[t]),r}},{key:"validateForm",value:function(){var t=[],n=this;this.$inputs.each(function(){t.push(n.validateInput(e(this)))});var i=t.indexOf(!1)===-1;return this.$element.find("[data-abide-error]").css("display",i?"none":"block"),this.$element.trigger((i?"formvalid":"forminvalid")+".zf.abide",[this.$element]),i}},{key:"validateText",value:function(e,t){t=t||e.attr("pattern")||e.attr("type");var n=e.val(),i=!1;return n.length?i=this.options.patterns.hasOwnProperty(t)?this.options.patterns[t].test(n):t===e.attr("type")||new RegExp(t).test(n):e.prop("required")||(i=!0),i}},{key:"validateRadio",value:function(t){var n=this.$element.find(':radio[name="'+t+'"]'),i=!1,o=!1;return n.each(function(t,n){e(n).attr("required")&&(o=!0)}),o||(i=!0),i||n.each(function(t,n){e(n).prop("checked")&&(i=!0)}),i}},{key:"matchValidation",value:function(e,t,n){var i=this;n=!!n;var o=t.split(" ").map(function(t){return i.options.validators[t](e,n,e.parent())});return o.indexOf(!1)===-1}},{key:"resetForm",value:function(){var t=this.$element,n=this.options;e("."+n.labelErrorClass,t).not("small").removeClass(n.labelErrorClass),e("."+n.inputErrorClass,t).not("small").removeClass(n.inputErrorClass),e(n.formErrorSelector+"."+n.formErrorClass).removeClass(n.formErrorClass),t.find("[data-abide-error]").css("display","none"),e(":input",t).not(":button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]").val("").removeAttr("data-invalid"),e(":input:radio",t).not("[data-abide-ignore]").prop("checked",!1).removeAttr("data-invalid"),e(":input:checkbox",t).not("[data-abide-ignore]").prop("checked",!1).removeAttr("data-invalid"),t.trigger("formreset.zf.abide",[t])}},{key:"destroy",value:function(){var t=this;this.$element.off(".abide").find("[data-abide-error]").css("display","none"),this.$inputs.off(".abide").each(function(){t.removeErrorClasses(e(this))}),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={validateOn:"fieldChange",labelErrorClass:"is-invalid-label",inputErrorClass:"is-invalid-input",formErrorSelector:".form-error",formErrorClass:"is-visible",liveValidate:!1,validateOnBlur:!1,patterns:{alpha:/^[a-zA-Z]+$/,alpha_numeric:/^[a-zA-Z0-9]+$/,integer:/^[-+]?\d+$/,number:/^[-+]?\d*(?:[\.\,]\d+)?$/,card:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,cvv:/^([0-9]){3,4}$/,email:/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,url:/^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,datetime:/^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,date:/(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,time:/^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,dateISO:/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,month_day_year:/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,day_month_year:/^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/},validators:{equalTo:function(t,n,i){return e("#"+t.attr("data-equalto")).val()===t.val()}}},Foundation.plugin(t,"Abide")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Accordion"),Foundation.Keyboard.register("Accordion",{ENTER:"toggle",SPACE:"toggle",ARROW_DOWN:"next",ARROW_UP:"previous"})}return _createClass(t,[{key:"_init",value:function(){var t=this;this.$element.attr("role","tablist"),this.$tabs=this.$element.children("[data-accordion-item]"),this.$tabs.each(function(t,n){var i=e(n),o=i.children("[data-tab-content]"),s=o[0].id||Foundation.GetYoDigits(6,"accordion"),a=n.id||s+"-label";i.find("a:first").attr({"aria-controls":s,role:"tab",id:a,"aria-expanded":!1,"aria-selected":!1}),o.attr({role:"tabpanel","aria-labelledby":a,"aria-hidden":!0,id:s})});var n=this.$element.find(".is-active").children("[data-tab-content]");this.firstTimeInit=!0,n.length&&(this.down(n,this.firstTimeInit),this.firstTimeInit=!1),this._checkDeepLink=function(){var n=window.location.hash;if(n.length){var i=t.$element.find('[href$="'+n+'"]'),o=e(n);if(i.length&&o){if(i.parent("[data-accordion-item]").hasClass("is-active")||(t.down(o,t.firstTimeInit),t.firstTimeInit=!1),t.options.deepLinkSmudge){var s=t;e(window).load(function(){var t=s.$element.offset();e("html, body").animate({scrollTop:t.top},s.options.deepLinkSmudgeDelay)})}t.$element.trigger("deeplink.zf.accordion",[i,o])}}},this.options.deepLink&&this._checkDeepLink(),this._events()}},{key:"_events",value:function(){var t=this;this.$tabs.each(function(){var n=e(this),i=n.children("[data-tab-content]");i.length&&n.children("a").off("click.zf.accordion keydown.zf.accordion").on("click.zf.accordion",function(e){e.preventDefault(),t.toggle(i)}).on("keydown.zf.accordion",function(e){Foundation.Keyboard.handleKey(e,"Accordion",{toggle:function(){t.toggle(i)},next:function(){var e=n.next().find("a").focus();t.options.multiExpand||e.trigger("click.zf.accordion")},previous:function(){var e=n.prev().find("a").focus();t.options.multiExpand||e.trigger("click.zf.accordion")},handled:function(){e.preventDefault(),e.stopPropagation()}})})}),this.options.deepLink&&e(window).on("popstate",this._checkDeepLink)}},{key:"toggle",value:function(e){if(e.parent().hasClass("is-active")?this.up(e):this.down(e),this.options.deepLink){var t=e.prev("a").attr("href");this.options.updateHistory?history.pushState({},"",t):history.replaceState({},"",t)}}},{key:"down",value:function(t,n){var i=this;if(t.attr("aria-hidden",!1).parent("[data-tab-content]").addBack().parent().addClass("is-active"),!this.options.multiExpand&&!n){var o=this.$element.children(".is-active").children("[data-tab-content]");o.length&&this.up(o.not(t))}t.slideDown(this.options.slideSpeed,function(){i.$element.trigger("down.zf.accordion",[t])}),e("#"+t.attr("aria-labelledby")).attr({"aria-expanded":!0,"aria-selected":!0})}},{key:"up",value:function(t){var n=t.parent().siblings(),i=this;(this.options.allowAllClosed||n.hasClass("is-active"))&&t.parent().hasClass("is-active")&&(t.slideUp(i.options.slideSpeed,function(){i.$element.trigger("up.zf.accordion",[t])}),t.attr("aria-hidden",!0).parent().removeClass("is-active"),e("#"+t.attr("aria-labelledby")).attr({"aria-expanded":!1,"aria-selected":!1}))}},{key:"destroy",value:function(){this.$element.find("[data-tab-content]").stop(!0).slideUp(0).css("display",""),this.$element.find("a").off(".zf.accordion"),this.options.deepLink&&e(window).off("popstate",this._checkDeepLink),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={slideSpeed:250,multiExpand:!1,allowAllClosed:!1,deepLink:!1,deepLinkSmudge:!1,deepLinkSmudgeDelay:300,updateHistory:!1},Foundation.plugin(t,"Accordion")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),Foundation.Nest.Feather(this.$element,"accordion"),this._init(),Foundation.registerPlugin(this,"AccordionMenu"),Foundation.Keyboard.register("AccordionMenu",{ENTER:"toggle",SPACE:"toggle",ARROW_RIGHT:"open",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"close",ESCAPE:"closeAll"})}return _createClass(t,[{key:"_init",value:function(){this.$element.find("[data-submenu]").not(".is-active").slideUp(0),this.$element.attr({role:"menu","aria-multiselectable":this.options.multiOpen}),this.$menuLinks=this.$element.find(".is-accordion-submenu-parent"),this.$menuLinks.each(function(){var t=this.id||Foundation.GetYoDigits(6,"acc-menu-link"),n=e(this),i=n.children("[data-submenu]"),o=i[0].id||Foundation.GetYoDigits(6,"acc-menu"),s=i.hasClass("is-active");n.attr({"aria-controls":o,"aria-expanded":s,role:"menuitem",id:t}),i.attr({"aria-labelledby":t,"aria-hidden":!s,role:"menu",id:o})});var t=this.$element.find(".is-active");if(t.length){var n=this;t.each(function(){n.down(e(this))})}this._events()}},{key:"_events",value:function(){var t=this;this.$element.find("li").each(function(){var n=e(this).children("[data-submenu]");n.length&&e(this).children("a").off("click.zf.accordionMenu").on("click.zf.accordionMenu",function(e){e.preventDefault(),t.toggle(n)})}).on("keydown.zf.accordionmenu",function(n){var i,o,s=e(this),a=s.parent("ul").children("li"),r=s.children("[data-submenu]");a.each(function(t){if(e(this).is(s))return i=a.eq(Math.max(0,t-1)).find("a").first(),o=a.eq(Math.min(t+1,a.length-1)).find("a").first(),e(this).children("[data-submenu]:visible").length&&(o=s.find("li:first-child").find("a").first()),e(this).is(":first-child")?i=s.parents("li").first().find("a").first():i.parents("li").first().children("[data-submenu]:visible").length&&(i=i.parents("li").find("li:last-child").find("a").first()),void(e(this).is(":last-child")&&(o=s.parents("li").first().next("li").find("a").first()))}),Foundation.Keyboard.handleKey(n,"AccordionMenu",{open:function(){r.is(":hidden")&&(t.down(r),r.find("li").first().find("a").first().focus())},close:function(){r.length&&!r.is(":hidden")?t.up(r):s.parent("[data-submenu]").length&&(t.up(s.parent("[data-submenu]")),s.parents("li").first().find("a").first().focus())},up:function(){return i.focus(),!0},down:function(){return o.focus(),!0},toggle:function(){s.children("[data-submenu]").length&&t.toggle(s.children("[data-submenu]"))},closeAll:function(){t.hideAll()},handled:function(e){e&&n.preventDefault(),n.stopImmediatePropagation()}})})}},{key:"hideAll",value:function(){this.up(this.$element.find("[data-submenu]"))}},{key:"showAll",value:function(){this.down(this.$element.find("[data-submenu]"))}},{key:"toggle",value:function(e){e.is(":animated")||(e.is(":hidden")?this.down(e):this.up(e))}},{key:"down",value:function(e){var t=this;this.options.multiOpen||this.up(this.$element.find(".is-active").not(e.parentsUntil(this.$element).add(e))),e.addClass("is-active").attr({"aria-hidden":!1}).parent(".is-accordion-submenu-parent").attr({"aria-expanded":!0}),e.slideDown(t.options.slideSpeed,function(){t.$element.trigger("down.zf.accordionMenu",[e])})}},{key:"up",value:function(e){var t=this;e.slideUp(t.options.slideSpeed,function(){t.$element.trigger("up.zf.accordionMenu",[e])});var n=e.find("[data-submenu]").slideUp(0).addBack().attr("aria-hidden",!0);n.parent(".is-accordion-submenu-parent").attr("aria-expanded",!1)}},{key:"destroy",value:function(){this.$element.find("[data-submenu]").slideDown(0).css("display",""),this.$element.find("a").off("click.zf.accordionMenu"),Foundation.Nest.Burn(this.$element,"accordion"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={slideSpeed:250,multiOpen:!0},Foundation.plugin(t,"AccordionMenu")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),Foundation.Nest.Feather(this.$element,"drilldown"),this._init(),Foundation.registerPlugin(this,"Drilldown"),Foundation.Keyboard.register("Drilldown",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"previous",ESCAPE:"close",TAB:"down",SHIFT_TAB:"up"})}return _createClass(t,[{key:"_init",value:function(){this.$submenuAnchors=this.$element.find("li.is-drilldown-submenu-parent").children("a"),this.$submenus=this.$submenuAnchors.parent("li").children("[data-submenu]"),this.$menuItems=this.$element.find("li").not(".js-drilldown-back").attr("role","menuitem").find("a"),this.$element.attr("data-mutate",this.$element.attr("data-drilldown")||Foundation.GetYoDigits(6,"drilldown")),this._prepareMenu(),this._registerEvents(),this._keyboardEvents()}},{key:"_prepareMenu",value:function(){var t=this;this.$submenuAnchors.each(function(){var n=e(this),i=n.parent();t.options.parentLink&&n.clone().prependTo(i.children("[data-submenu]")).wrap('<li class="is-submenu-parent-item is-submenu-item is-drilldown-submenu-item" role="menu-item"></li>'),n.data("savedHref",n.attr("href")).removeAttr("href").attr("tabindex",0),
+n.children("[data-submenu]").attr({"aria-hidden":!0,tabindex:0,role:"menu"}),t._events(n)}),this.$submenus.each(function(){var n=e(this),i=n.find(".js-drilldown-back");if(!i.length)switch(t.options.backButtonPosition){case"bottom":n.append(t.options.backButton);break;case"top":n.prepend(t.options.backButton);break;default:console.error("Unsupported backButtonPosition value '"+t.options.backButtonPosition+"'")}t._back(n)}),this.$submenus.addClass("invisible"),this.options.autoHeight||this.$submenus.addClass("drilldown-submenu-cover-previous"),this.$element.parent().hasClass("is-drilldown")||(this.$wrapper=e(this.options.wrapper).addClass("is-drilldown"),this.options.animateHeight&&this.$wrapper.addClass("animate-height"),this.$element.wrap(this.$wrapper)),this.$wrapper=this.$element.parent(),this.$wrapper.css(this._getMaxDims())}},{key:"_resize",value:function(){this.$wrapper.css({"max-width":"none","min-height":"none"}),this.$wrapper.css(this._getMaxDims())}},{key:"_events",value:function(t){var n=this;t.off("click.zf.drilldown").on("click.zf.drilldown",function(i){if(e(i.target).parentsUntil("ul","li").hasClass("is-drilldown-submenu-parent")&&(i.stopImmediatePropagation(),i.preventDefault()),n._show(t.parent("li")),n.options.closeOnClick){var o=e("body");o.off(".zf.drilldown").on("click.zf.drilldown",function(t){t.target===n.$element[0]||e.contains(n.$element[0],t.target)||(t.preventDefault(),n._hideAll(),o.off(".zf.drilldown"))})}}),this.$element.on("mutateme.zf.trigger",this._resize.bind(this))}},{key:"_registerEvents",value:function(){this.options.scrollTop&&(this._bindHandler=this._scrollTop.bind(this),this.$element.on("open.zf.drilldown hide.zf.drilldown closed.zf.drilldown",this._bindHandler))}},{key:"_scrollTop",value:function(){var t=this,n=""!=t.options.scrollTopElement?e(t.options.scrollTopElement):t.$element,i=parseInt(n.offset().top+t.options.scrollTopOffset);e("html, body").stop(!0).animate({scrollTop:i},t.options.animationDuration,t.options.animationEasing,function(){this===e("html")[0]&&t.$element.trigger("scrollme.zf.drilldown")})}},{key:"_keyboardEvents",value:function(){var t=this;this.$menuItems.add(this.$element.find(".js-drilldown-back > a, .is-submenu-parent-item > a")).on("keydown.zf.drilldown",function(n){var i,o,s=e(this),a=s.parent("li").parent("ul").children("li").children("a");a.each(function(t){if(e(this).is(s))return i=a.eq(Math.max(0,t-1)),void(o=a.eq(Math.min(t+1,a.length-1)))}),Foundation.Keyboard.handleKey(n,"Drilldown",{next:function(){if(s.is(t.$submenuAnchors))return t._show(s.parent("li")),s.parent("li").one(Foundation.transitionend(s),function(){s.parent("li").find("ul li a").filter(t.$menuItems).first().focus()}),!0},previous:function(){return t._hide(s.parent("li").parent("ul")),s.parent("li").parent("ul").one(Foundation.transitionend(s),function(){setTimeout(function(){s.parent("li").parent("ul").parent("li").children("a").first().focus()},1)}),!0},up:function(){return i.focus(),!s.is(t.$element.find("> li:first-child > a"))},down:function(){return o.focus(),!s.is(t.$element.find("> li:last-child > a"))},close:function(){s.is(t.$element.find("> li > a"))||(t._hide(s.parent().parent()),s.parent().parent().siblings("a").focus())},open:function(){return s.is(t.$menuItems)?s.is(t.$submenuAnchors)?(t._show(s.parent("li")),s.parent("li").one(Foundation.transitionend(s),function(){s.parent("li").find("ul li a").filter(t.$menuItems).first().focus()}),!0):void 0:(t._hide(s.parent("li").parent("ul")),s.parent("li").parent("ul").one(Foundation.transitionend(s),function(){setTimeout(function(){s.parent("li").parent("ul").parent("li").children("a").first().focus()},1)}),!0)},handled:function(e){e&&n.preventDefault(),n.stopImmediatePropagation()}})})}},{key:"_hideAll",value:function(){var e=this.$element.find(".is-drilldown-submenu.is-active").addClass("is-closing");this.options.autoHeight&&this.$wrapper.css({height:e.parent().closest("ul").data("calcHeight")}),e.one(Foundation.transitionend(e),function(t){e.removeClass("is-active is-closing")}),this.$element.trigger("closed.zf.drilldown")}},{key:"_back",value:function(e){var t=this;e.off("click.zf.drilldown"),e.children(".js-drilldown-back").on("click.zf.drilldown",function(n){n.stopImmediatePropagation(),t._hide(e);var i=e.parent("li").parent("ul").parent("li");i.length&&t._show(i)})}},{key:"_menuLinkEvents",value:function(){var e=this;this.$menuItems.not(".is-drilldown-submenu-parent").off("click.zf.drilldown").on("click.zf.drilldown",function(t){setTimeout(function(){e._hideAll()},0)})}},{key:"_show",value:function(e){this.options.autoHeight&&this.$wrapper.css({height:e.children("[data-submenu]").data("calcHeight")}),e.attr("aria-expanded",!0),e.children("[data-submenu]").addClass("is-active").removeClass("invisible").attr("aria-hidden",!1),this.$element.trigger("open.zf.drilldown",[e])}},{key:"_hide",value:function(e){this.options.autoHeight&&this.$wrapper.css({height:e.parent().closest("ul").data("calcHeight")});e.parent("li").attr("aria-expanded",!1),e.attr("aria-hidden",!0).addClass("is-closing"),e.addClass("is-closing").one(Foundation.transitionend(e),function(){e.removeClass("is-active is-closing"),e.blur().addClass("invisible")}),e.trigger("hide.zf.drilldown",[e])}},{key:"_getMaxDims",value:function(){var t=0,n={},i=this;return this.$submenus.add(this.$element).each(function(){var o=(e(this).children("li").length,Foundation.Box.GetDimensions(this).height);t=o>t?o:t,i.options.autoHeight&&(e(this).data("calcHeight",o),e(this).hasClass("is-drilldown-submenu")||(n.height=o))}),this.options.autoHeight||(n["min-height"]=t+"px"),n["max-width"]=this.$element[0].getBoundingClientRect().width+"px",n}},{key:"destroy",value:function(){this.options.scrollTop&&this.$element.off(".zf.drilldown",this._bindHandler),this._hideAll(),this.$element.off("mutateme.zf.trigger"),Foundation.Nest.Burn(this.$element,"drilldown"),this.$element.unwrap().find(".js-drilldown-back, .is-submenu-parent-item").remove().end().find(".is-active, .is-closing, .is-drilldown-submenu").removeClass("is-active is-closing is-drilldown-submenu").end().find("[data-submenu]").removeAttr("aria-hidden tabindex role"),this.$submenuAnchors.each(function(){e(this).off(".zf.drilldown")}),this.$submenus.removeClass("drilldown-submenu-cover-previous"),this.$element.find("a").each(function(){var t=e(this);t.removeAttr("tabindex"),t.data("savedHref")&&t.attr("href",t.data("savedHref")).removeData("savedHref")}),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={backButton:'<li class="js-drilldown-back"><a tabindex="0">Back</a></li>',backButtonPosition:"top",wrapper:"<div></div>",parentLink:!1,closeOnClick:!1,autoHeight:!1,animateHeight:!1,scrollTop:!1,scrollTopElement:"",scrollTopOffset:0,animationDuration:500,animationEasing:"swing"},Foundation.plugin(t,"Drilldown")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Dropdown"),Foundation.Keyboard.register("Dropdown",{ENTER:"open",SPACE:"open",ESCAPE:"close"})}return _createClass(t,[{key:"_init",value:function(){var t=this.$element.attr("id");this.$anchor=e(e('[data-toggle="'+t+'"]').length?'[data-toggle="'+t+'"]':'[data-open="'+t+'"]'),this.$anchor.attr({"aria-controls":t,"data-is-focus":!1,"data-yeti-box":t,"aria-haspopup":!0,"aria-expanded":!1}),this.options.parentClass?this.$parent=this.$element.parents("."+this.options.parentClass):this.$parent=null,this.options.positionClass=this.getPositionClass(),this.counter=4,this.usedPositions=[],this.$element.attr({"aria-hidden":"true","data-yeti-box":t,"data-resize":t,"aria-labelledby":this.$anchor[0].id||Foundation.GetYoDigits(6,"dd-anchor")}),this._events()}},{key:"getPositionClass",value:function(){var e=this.$element[0].className.match(/(top|left|right|bottom)/g);e=e?e[0]:"";var t=/float-(\S+)/.exec(this.$anchor[0].className);t=t?t[1]:"";var n=t?t+" "+e:e;return n}},{key:"_reposition",value:function(e){this.usedPositions.push(e?e:"bottom"),!e&&this.usedPositions.indexOf("top")<0?this.$element.addClass("top"):"top"===e&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(e):"left"===e&&this.usedPositions.indexOf("right")<0?this.$element.removeClass(e).addClass("right"):"right"===e&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(e).addClass("left"):!e&&this.usedPositions.indexOf("top")>-1&&this.usedPositions.indexOf("left")<0?this.$element.addClass("left"):"top"===e&&this.usedPositions.indexOf("bottom")>-1&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(e).addClass("left"):"left"===e&&this.usedPositions.indexOf("right")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(e):"right"===e&&this.usedPositions.indexOf("left")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(e):this.$element.removeClass(e),this.classChanged=!0,this.counter--}},{key:"_setPosition",value:function(){if("false"===this.$anchor.attr("aria-expanded"))return!1;var e=this.getPositionClass(),t=Foundation.Box.GetDimensions(this.$element),n=(Foundation.Box.GetDimensions(this.$anchor),"left"===e?"left":"right"===e?"left":"top"),i="top"===n?"height":"width";"height"===i?this.options.vOffset:this.options.hOffset;if(t.width>=t.windowDims.width||!this.counter&&!Foundation.Box.ImNotTouchingYou(this.$element,this.$parent)){var o=t.windowDims.width,s=0;if(this.$parent){var a=Foundation.Box.GetDimensions(this.$parent),s=a.offset.left;a.width<o&&(o=a.width)}return this.$element.offset(Foundation.Box.GetOffsets(this.$element,this.$anchor,"center bottom",this.options.vOffset,this.options.hOffset+s,!0)).css({width:o-2*this.options.hOffset,height:"auto"}),this.classChanged=!0,!1}for(this.$element.offset(Foundation.Box.GetOffsets(this.$element,this.$anchor,e,this.options.vOffset,this.options.hOffset));!Foundation.Box.ImNotTouchingYou(this.$element,this.$parent,!0)&&this.counter;)this._reposition(e),this._setPosition()}},{key:"_events",value:function(){var t=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":this._setPosition.bind(this)}),this.options.hover&&(this.$anchor.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){var n=e("body").data();"undefined"!=typeof n.whatinput&&"mouse"!==n.whatinput||(clearTimeout(t.timeout),t.timeout=setTimeout(function(){t.open(),t.$anchor.data("hover",!0)},t.options.hoverDelay))}).on("mouseleave.zf.dropdown",function(){clearTimeout(t.timeout),t.timeout=setTimeout(function(){t.close(),t.$anchor.data("hover",!1)},t.options.hoverDelay)}),this.options.hoverPane&&this.$element.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){clearTimeout(t.timeout)}).on("mouseleave.zf.dropdown",function(){clearTimeout(t.timeout),t.timeout=setTimeout(function(){t.close(),t.$anchor.data("hover",!1)},t.options.hoverDelay)})),this.$anchor.add(this.$element).on("keydown.zf.dropdown",function(n){var i=e(this);Foundation.Keyboard.findFocusable(t.$element);Foundation.Keyboard.handleKey(n,"Dropdown",{open:function(){i.is(t.$anchor)&&(t.open(),t.$element.attr("tabindex",-1).focus(),n.preventDefault())},close:function(){t.close(),t.$anchor.focus()}})})}},{key:"_addBodyHandler",value:function(){var t=e(document.body).not(this.$element),n=this;t.off("click.zf.dropdown").on("click.zf.dropdown",function(e){n.$anchor.is(e.target)||n.$anchor.find(e.target).length||n.$element.find(e.target).length||(n.close(),t.off("click.zf.dropdown"))})}},{key:"open",value:function(){if(this.$element.trigger("closeme.zf.dropdown",this.$element.attr("id")),this.$anchor.addClass("hover").attr({"aria-expanded":!0}),this._setPosition(),this.$element.addClass("is-open").attr({"aria-hidden":!1}),this.options.autoFocus){var e=Foundation.Keyboard.findFocusable(this.$element);e.length&&e.eq(0).focus()}this.options.closeOnClick&&this._addBodyHandler(),this.options.trapFocus&&Foundation.Keyboard.trapFocus(this.$element),this.$element.trigger("show.zf.dropdown",[this.$element])}},{key:"close",value:function(){if(!this.$element.hasClass("is-open"))return!1;if(this.$element.removeClass("is-open").attr({"aria-hidden":!0}),this.$anchor.removeClass("hover").attr("aria-expanded",!1),this.classChanged){var e=this.getPositionClass();e&&this.$element.removeClass(e),this.$element.addClass(this.options.positionClass).css({height:"",width:""}),this.classChanged=!1,this.counter=4,this.usedPositions.length=0}this.$element.trigger("hide.zf.dropdown",[this.$element]),this.options.trapFocus&&Foundation.Keyboard.releaseFocus(this.$element)}},{key:"toggle",value:function(){if(this.$element.hasClass("is-open")){if(this.$anchor.data("hover"))return;this.close()}else this.open()}},{key:"destroy",value:function(){this.$element.off(".zf.trigger").hide(),this.$anchor.off(".zf.dropdown"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={parentClass:null,hoverDelay:250,hover:!1,hoverPane:!1,vOffset:1,hOffset:1,positionClass:"",trapFocus:!1,autoFocus:!1,closeOnClick:!1},Foundation.plugin(t,"Dropdown")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),Foundation.Nest.Feather(this.$element,"dropdown"),this._init(),Foundation.registerPlugin(this,"DropdownMenu"),Foundation.Keyboard.register("DropdownMenu",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"previous",ESCAPE:"close"})}return _createClass(t,[{key:"_init",value:function(){var e=this.$element.find("li.is-dropdown-submenu-parent");this.$element.children(".is-dropdown-submenu-parent").children(".is-dropdown-submenu").addClass("first-sub"),this.$menuItems=this.$element.find('[role="menuitem"]'),this.$tabs=this.$element.children('[role="menuitem"]'),this.$tabs.find("ul.is-dropdown-submenu").addClass(this.options.verticalClass),this.$element.hasClass(this.options.rightClass)||"right"===this.options.alignment||Foundation.rtl()||this.$element.parents(".top-bar-right").is("*")?(this.options.alignment="right",e.addClass("opens-left")):e.addClass("opens-right"),this.changed=!1,this._events()}},{key:"_isVertical",value:function(){return"block"===this.$tabs.css("display")}},{key:"_events",value:function(){var t=this,n="ontouchstart"in window||"undefined"!=typeof window.ontouchstart,i="is-dropdown-submenu-parent",o=function(o){var s=e(o.target).parentsUntil("ul","."+i),a=s.hasClass(i),r="true"===s.attr("data-is-click"),l=s.children(".is-dropdown-submenu");if(a)if(r){if(!t.options.closeOnClick||!t.options.clickOpen&&!n||t.options.forceFollow&&n)return;o.stopImmediatePropagation(),o.preventDefault(),t._hide(s)}else o.preventDefault(),o.stopImmediatePropagation(),t._show(l),s.add(s.parentsUntil(t.$element,"."+i)).attr("data-is-click",!0)};(this.options.clickOpen||n)&&this.$menuItems.on("click.zf.dropdownmenu touchstart.zf.dropdownmenu",o),t.options.closeOnClickInside&&this.$menuItems.on("click.zf.dropdownmenu",function(n){var o=e(this),s=o.hasClass(i);s||t._hide()}),this.options.disableHover||this.$menuItems.on("mouseenter.zf.dropdownmenu",function(n){var o=e(this),s=o.hasClass(i);s&&(clearTimeout(o.data("_delay")),o.data("_delay",setTimeout(function(){t._show(o.children(".is-dropdown-submenu"))},t.options.hoverDelay)))}).on("mouseleave.zf.dropdownmenu",function(n){var o=e(this),s=o.hasClass(i);if(s&&t.options.autoclose){if("true"===o.attr("data-is-click")&&t.options.clickOpen)return!1;clearTimeout(o.data("_delay")),o.data("_delay",setTimeout(function(){t._hide(o)},t.options.closingTime))}}),this.$menuItems.on("keydown.zf.dropdownmenu",function(n){var i,o,s=e(n.target).parentsUntil("ul",'[role="menuitem"]'),a=t.$tabs.index(s)>-1,r=a?t.$tabs:s.siblings("li").add(s);r.each(function(t){if(e(this).is(s))return i=r.eq(t-1),void(o=r.eq(t+1))});var l=function(){s.is(":last-child")||(o.children("a:first").focus(),n.preventDefault())},u=function(){i.children("a:first").focus(),n.preventDefault()},d=function(){var e=s.children("ul.is-dropdown-submenu");e.length&&(t._show(e),s.find("li > a:first").focus(),n.preventDefault())},c=function(){var e=s.parent("ul").parent("li");e.children("a:first").focus(),t._hide(e),n.preventDefault()},h={open:d,close:function(){t._hide(t.$element),t.$menuItems.find("a:first").focus(),n.preventDefault()},handled:function(){n.stopImmediatePropagation()}};a?t._isVertical()?Foundation.rtl()?e.extend(h,{down:l,up:u,next:c,previous:d}):e.extend(h,{down:l,up:u,next:d,previous:c}):Foundation.rtl()?e.extend(h,{next:u,previous:l,down:d,up:c}):e.extend(h,{next:l,previous:u,down:d,up:c}):Foundation.rtl()?e.extend(h,{next:c,previous:d,down:l,up:u}):e.extend(h,{next:d,previous:c,down:l,up:u}),Foundation.Keyboard.handleKey(n,"DropdownMenu",h)})}},{key:"_addBodyHandler",value:function(){var t=e(document.body),n=this;t.off("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu").on("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu",function(e){var i=n.$element.find(e.target);i.length||(n._hide(),t.off("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu"))})}},{key:"_show",value:function(t){var n=this.$tabs.index(this.$tabs.filter(function(n,i){return e(i).find(t).length>0})),i=t.parent("li.is-dropdown-submenu-parent").siblings("li.is-dropdown-submenu-parent");this._hide(i,n),t.css("visibility","hidden").addClass("js-dropdown-active").parent("li.is-dropdown-submenu-parent").addClass("is-active");var o=Foundation.Box.ImNotTouchingYou(t,null,!0);if(!o){var s="left"===this.options.alignment?"-right":"-left",a=t.parent(".is-dropdown-submenu-parent");a.removeClass("opens"+s).addClass("opens-"+this.options.alignment),o=Foundation.Box.ImNotTouchingYou(t,null,!0),o||a.removeClass("opens-"+this.options.alignment).addClass("opens-inner"),this.changed=!0}t.css("visibility",""),this.options.closeOnClick&&this._addBodyHandler(),this.$element.trigger("show.zf.dropdownmenu",[t])}},{key:"_hide",value:function(e,t){var n;n=e&&e.length?e:void 0!==t?this.$tabs.not(function(e,n){return e===t}):this.$element;var i=n.hasClass("is-active")||n.find(".is-active").length>0;if(i){if(n.find("li.is-active").add(n).attr({"data-is-click":!1}).removeClass("is-active"),n.find("ul.js-dropdown-active").removeClass("js-dropdown-active"),this.changed||n.find("opens-inner").length){var o="left"===this.options.alignment?"right":"left";n.find("li.is-dropdown-submenu-parent").add(n).removeClass("opens-inner opens-"+this.options.alignment).addClass("opens-"+o),this.changed=!1}this.$element.trigger("hide.zf.dropdownmenu",[n])}}},{key:"destroy",value:function(){this.$menuItems.off(".zf.dropdownmenu").removeAttr("data-is-click").removeClass("is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner"),e(document.body).off(".zf.dropdownmenu"),Foundation.Nest.Burn(this.$element,"dropdown"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={disableHover:!1,autoclose:!0,hoverDelay:50,clickOpen:!1,closingTime:500,alignment:"left",closeOnClick:!0,closeOnClickInside:!0,verticalClass:"vertical",rightClass:"align-right",forceFollow:!0},Foundation.plugin(t,"DropdownMenu")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Equalizer")}return _createClass(t,[{key:"_init",value:function(){var t=this.$element.attr("data-equalizer")||"",n=this.$element.find('[data-equalizer-watch="'+t+'"]');this.$watched=n.length?n:this.$element.find("[data-equalizer-watch]"),this.$element.attr("data-resize",t||Foundation.GetYoDigits(6,"eq")),this.$element.attr("data-mutate",t||Foundation.GetYoDigits(6,"eq")),this.hasNested=this.$element.find("[data-equalizer]").length>0,this.isNested=this.$element.parentsUntil(document.body,"[data-equalizer]").length>0,this.isOn=!1,this._bindHandler={onResizeMeBound:this._onResizeMe.bind(this),onPostEqualizedBound:this._onPostEqualized.bind(this)};var i,o=this.$element.find("img");this.options.equalizeOn?(i=this._checkMQ(),e(window).on("changed.zf.mediaquery",this._checkMQ.bind(this))):this._events(),(void 0!==i&&i===!1||void 0===i)&&(o.length?Foundation.onImagesLoaded(o,this._reflow.bind(this)):this._reflow())}},{key:"_pauseEvents",value:function(){this.isOn=!1,this.$element.off({".zf.equalizer":this._bindHandler.onPostEqualizedBound,"resizeme.zf.trigger":this._bindHandler.onResizeMeBound,"mutateme.zf.trigger":this._bindHandler.onResizeMeBound})}},{key:"_onResizeMe",value:function(e){this._reflow()}},{key:"_onPostEqualized",value:function(e){e.target!==this.$element[0]&&this._reflow()}},{key:"_events",value:function(){this._pauseEvents(),this.hasNested?this.$element.on("postequalized.zf.equalizer",this._bindHandler.onPostEqualizedBound):(this.$element.on("resizeme.zf.trigger",this._bindHandler.onResizeMeBound),this.$element.on("mutateme.zf.trigger",this._bindHandler.onResizeMeBound)),this.isOn=!0}},{key:"_checkMQ",value:function(){var e=!Foundation.MediaQuery.is(this.options.equalizeOn);return e?this.isOn&&(this._pauseEvents(),this.$watched.css("height","auto")):this.isOn||this._events(),e}},{key:"_killswitch",value:function(){}},{key:"_reflow",value:function(){return!this.options.equalizeOnStack&&this._isStacked()?(this.$watched.css("height","auto"),!1):void(this.options.equalizeByRow?this.getHeightsByRow(this.applyHeightByRow.bind(this)):this.getHeights(this.applyHeight.bind(this)))}},{key:"_isStacked",value:function(){return!this.$watched[0]||!this.$watched[1]||this.$watched[0].getBoundingClientRect().top!==this.$watched[1].getBoundingClientRect().top}},{key:"getHeights",value:function(e){for(var t=[],n=0,i=this.$watched.length;n<i;n++)this.$watched[n].style.height="auto",t.push(this.$watched[n].offsetHeight);e(t)}},{key:"getHeightsByRow",value:function(t){var n=this.$watched.length?this.$watched.first().offset().top:0,i=[],o=0;i[o]=[];for(var s=0,a=this.$watched.length;s<a;s++){this.$watched[s].style.height="auto";var r=e(this.$watched[s]).offset().top;r!=n&&(o++,i[o]=[],n=r),i[o].push([this.$watched[s],this.$watched[s].offsetHeight])}for(var l=0,u=i.length;l<u;l++){var d=e(i[l]).map(function(){return this[1]}).get(),c=Math.max.apply(null,d);i[l].push(c)}t(i)}},{key:"applyHeight",value:function(e){var t=Math.max.apply(null,e);this.$element.trigger("preequalized.zf.equalizer"),this.$watched.css("height",t),this.$element.trigger("postequalized.zf.equalizer")}},{key:"applyHeightByRow",value:function(t){this.$element.trigger("preequalized.zf.equalizer");for(var n=0,i=t.length;n<i;n++){var o=t[n].length,s=t[n][o-1];if(o<=2)e(t[n][0][0]).css({height:"auto"});else{this.$element.trigger("preequalizedrow.zf.equalizer");for(var a=0,r=o-1;a<r;a++)e(t[n][a][0]).css({height:s});this.$element.trigger("postequalizedrow.zf.equalizer")}}this.$element.trigger("postequalized.zf.equalizer")}},{key:"destroy",value:function(){this._pauseEvents(),this.$watched.css("height","auto"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={equalizeOnStack:!1,equalizeByRow:!1,equalizeOn:""},Foundation.plugin(t,"Equalizer")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,i),this.rules=[],this.currentPath="",this._init(),this._events(),Foundation.registerPlugin(this,"Interchange")}return _createClass(t,[{key:"_init",value:function(){this._addBreakpoints(),this._generateRules(),this._reflow()}},{key:"_events",value:function(){var t=this;e(window).on("resize.zf.interchange",Foundation.util.throttle(function(){t._reflow()},50))}},{key:"_reflow",value:function(){var e;for(var t in this.rules)if(this.rules.hasOwnProperty(t)){var n=this.rules[t];window.matchMedia(n.query).matches&&(e=n)}e&&this.replace(e.path)}},{key:"_addBreakpoints",value:function(){for(var e in Foundation.MediaQuery.queries)if(Foundation.MediaQuery.queries.hasOwnProperty(e)){var n=Foundation.MediaQuery.queries[e];t.SPECIAL_QUERIES[n.name]=n.value}}},{key:"_generateRules",value:function(e){var n,i=[];n=this.options.rules?this.options.rules:this.$element.data("interchange"),n="string"==typeof n?n.match(/\[.*?\]/g):n;for(var o in n)if(n.hasOwnProperty(o)){var s=n[o].slice(1,-1).split(", "),a=s.slice(0,-1).join(""),r=s[s.length-1];t.SPECIAL_QUERIES[r]&&(r=t.SPECIAL_QUERIES[r]),i.push({path:a,query:r})}this.rules=i}},{key:"replace",value:function(t){if(this.currentPath!==t){var n=this,i="replaced.zf.interchange";"IMG"===this.$element[0].nodeName?this.$element.attr("src",t).on("load",function(){n.currentPath=t}).trigger(i):t.match(/\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)?this.$element.css({"background-image":"url("+t+")"}).trigger(i):e.get(t,function(o){n.$element.html(o).trigger(i),e(o).foundation(),n.currentPath=t})}}},{key:"destroy",value:function(){}}]),t}();t.defaults={rules:null},t.SPECIAL_QUERIES={landscape:"screen and (orientation: landscape)",portrait:"screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)"},Foundation.plugin(t,"Interchange")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),this.calcPoints(),Foundation.registerPlugin(this,"Magellan")}return _createClass(t,[{key:"_init",value:function(){var t=this.$element[0].id||Foundation.GetYoDigits(6,"magellan");this.$targets=e("[data-magellan-target]"),this.$links=this.$element.find("a"),this.$element.attr({"data-resize":t,"data-scroll":t,id:t}),this.$active=e(),this.scrollPos=parseInt(window.pageYOffset,10),this._events()}},{key:"calcPoints",value:function(){var t=this,n=document.body,i=document.documentElement;this.points=[],this.winHeight=Math.round(Math.max(window.innerHeight,i.clientHeight)),this.docHeight=Math.round(Math.max(n.scrollHeight,n.offsetHeight,i.clientHeight,i.scrollHeight,i.offsetHeight)),this.$targets.each(function(){var n=e(this),i=Math.round(n.offset().top-t.options.threshold);n.targetPoint=i,t.points.push(i)})}},{key:"_events",value:function(){var t=this;e("html, body"),{duration:t.options.animationDuration,easing:t.options.animationEasing};e(window).one("load",function(){t.options.deepLinking&&location.hash&&t.scrollToLoc(location.hash),t.calcPoints(),t._updateActive()}),this.$element.on({"resizeme.zf.trigger":this.reflow.bind(this),"scrollme.zf.trigger":this._updateActive.bind(this)}).on("click.zf.magellan",'a[href^="#"]',function(e){e.preventDefault();var n=this.getAttribute("href");t.scrollToLoc(n)}),e(window).on("popstate",function(e){t.options.deepLinking&&t.scrollToLoc(window.location.hash)})}},{key:"scrollToLoc",value:function(t){if(!e(t).length)return!1;this._inTransition=!0;var n=this,i=Math.round(e(t).offset().top-this.options.threshold/2-this.options.barOffset);e("html, body").stop(!0).animate({scrollTop:i},this.options.animationDuration,this.options.animationEasing,function(){n._inTransition=!1,n._updateActive()})}},{key:"reflow",value:function(){this.calcPoints(),this._updateActive()}},{key:"_updateActive",value:function(){if(!this._inTransition){var e,t=parseInt(window.pageYOffset,10);if(t+this.winHeight===this.docHeight)e=this.points.length-1;else if(t<this.points[0])e=void 0;else{var n=this.scrollPos<t,i=this,o=this.points.filter(function(e,o){return n?e-i.options.barOffset<=t:e-i.options.barOffset-i.options.threshold<=t});e=o.length?o.length-1:0}if(this.$active.removeClass(this.options.activeClass),this.$active=this.$links.filter('[href="#'+this.$targets.eq(e).data("magellan-target")+'"]').addClass(this.options.activeClass),this.options.deepLinking){var s="";void 0!=e&&(s=this.$active[0].getAttribute("href")),s!==window.location.hash&&(window.history.pushState?window.history.pushState(null,null,s):window.location.hash=s)}this.scrollPos=t,this.$element.trigger("update.zf.magellan",[this.$active])}}},{key:"destroy",value:function(){if(this.$element.off(".zf.trigger .zf.magellan").find("."+this.options.activeClass).removeClass(this.options.activeClass),this.options.deepLinking){var e=this.$active[0].getAttribute("href");window.location.hash.replace(e,"")}Foundation.unregisterPlugin(this)}}]),t}();t.defaults={animationDuration:500,animationEasing:"linear",threshold:50,activeClass:"active",deepLinking:!1,barOffset:0},Foundation.plugin(t,"Magellan")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this.$lastTrigger=e(),this.$triggers=e(),this._init(),this._events(),Foundation.registerPlugin(this,"OffCanvas"),Foundation.Keyboard.register("OffCanvas",{ESCAPE:"close"})}return _createClass(t,[{key:"_init",value:function(){var t=this.$element.attr("id");if(this.$element.attr("aria-hidden","true"),this.$element.addClass("is-transition-"+this.options.transition),this.$triggers=e(document).find('[data-open="'+t+'"], [data-close="'+t+'"], [data-toggle="'+t+'"]').attr("aria-expanded","false").attr("aria-controls",t),this.options.contentOverlay===!0){var n=document.createElement("div"),i="fixed"===e(this.$element).css("position")?"is-overlay-fixed":"is-overlay-absolute";n.setAttribute("class","js-off-canvas-overlay "+i),this.$overlay=e(n),"is-overlay-fixed"===i?e("body").append(this.$overlay):this.$element.siblings("[data-off-canvas-content]").append(this.$overlay)}this.options.isRevealed=this.options.isRevealed||new RegExp(this.options.revealClass,"g").test(this.$element[0].className),this.options.isRevealed===!0&&(this.options.revealOn=this.options.revealOn||this.$element[0].className.match(/(reveal-for-medium|reveal-for-large)/g)[0].split("-")[2],this._setMQChecker()),!this.options.transitionTime==!0&&(this.options.transitionTime=1e3*parseFloat(window.getComputedStyle(e("[data-off-canvas]")[0]).transitionDuration))}},{key:"_events",value:function(){if(this.$element.off(".zf.trigger .zf.offcanvas").on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"keydown.zf.offcanvas":this._handleKeyboard.bind(this)}),this.options.closeOnClick===!0){
+var t=this.options.contentOverlay?this.$overlay:e("[data-off-canvas-content]");t.on({"click.zf.offcanvas":this.close.bind(this)})}}},{key:"_setMQChecker",value:function(){var t=this;e(window).on("changed.zf.mediaquery",function(){Foundation.MediaQuery.atLeast(t.options.revealOn)?t.reveal(!0):t.reveal(!1)}).one("load.zf.offcanvas",function(){Foundation.MediaQuery.atLeast(t.options.revealOn)&&t.reveal(!0)})}},{key:"reveal",value:function(e){var t=this.$element.find("[data-close]");e?(this.close(),this.isRevealed=!0,this.$element.attr("aria-hidden","false"),this.$element.off("open.zf.trigger toggle.zf.trigger"),t.length&&t.hide()):(this.isRevealed=!1,this.$element.attr("aria-hidden","true"),this.$element.off("open.zf.trigger toggle.zf.trigger").on({"open.zf.trigger":this.open.bind(this),"toggle.zf.trigger":this.toggle.bind(this)}),t.length&&t.show())}},{key:"_stopScrolling",value:function(e){return!1}},{key:"_recordScrollable",value:function(e){var t=this;t.scrollHeight!==t.clientHeight&&(0===t.scrollTop&&(t.scrollTop=1),t.scrollTop===t.scrollHeight-t.clientHeight&&(t.scrollTop=t.scrollHeight-t.clientHeight-1)),t.allowUp=t.scrollTop>0,t.allowDown=t.scrollTop<t.scrollHeight-t.clientHeight,t.lastY=e.originalEvent.pageY}},{key:"_stopScrollPropagation",value:function(e){var t=this,n=e.pageY<t.lastY,i=!n;t.lastY=e.pageY,n&&t.allowUp||i&&t.allowDown?e.stopPropagation():e.preventDefault()}},{key:"open",value:function(t,n){if(!this.$element.hasClass("is-open")&&!this.isRevealed){var i=this;n&&(this.$lastTrigger=n),"top"===this.options.forceTo?window.scrollTo(0,0):"bottom"===this.options.forceTo&&window.scrollTo(0,document.body.scrollHeight),i.$element.addClass("is-open"),this.$triggers.attr("aria-expanded","true"),this.$element.attr("aria-hidden","false").trigger("opened.zf.offcanvas"),this.options.contentScroll===!1&&(e("body").addClass("is-off-canvas-open").on("touchmove",this._stopScrolling),this.$element.on("touchstart",this._recordScrollable),this.$element.on("touchmove",this._stopScrollPropagation)),this.options.contentOverlay===!0&&this.$overlay.addClass("is-visible"),this.options.closeOnClick===!0&&this.options.contentOverlay===!0&&this.$overlay.addClass("is-closable"),this.options.autoFocus===!0&&this.$element.one(Foundation.transitionend(this.$element),function(){var e=i.$element.find("[data-autofocus]");e.length?e.eq(0).focus():i.$element.find("a, button").eq(0).focus()}),this.options.trapFocus===!0&&(this.$element.siblings("[data-off-canvas-content]").attr("tabindex","-1"),Foundation.Keyboard.trapFocus(this.$element))}}},{key:"close",value:function(t){if(this.$element.hasClass("is-open")&&!this.isRevealed){var n=this;n.$element.removeClass("is-open"),this.$element.attr("aria-hidden","true").trigger("closed.zf.offcanvas"),this.options.contentScroll===!1&&(e("body").removeClass("is-off-canvas-open").off("touchmove",this._stopScrolling),this.$element.off("touchstart",this._recordScrollable),this.$element.off("touchmove",this._stopScrollPropagation)),this.options.contentOverlay===!0&&this.$overlay.removeClass("is-visible"),this.options.closeOnClick===!0&&this.options.contentOverlay===!0&&this.$overlay.removeClass("is-closable"),this.$triggers.attr("aria-expanded","false"),this.options.trapFocus===!0&&(this.$element.siblings("[data-off-canvas-content]").removeAttr("tabindex"),Foundation.Keyboard.releaseFocus(this.$element))}}},{key:"toggle",value:function(e,t){this.$element.hasClass("is-open")?this.close(e,t):this.open(e,t)}},{key:"_handleKeyboard",value:function(e){var t=this;Foundation.Keyboard.handleKey(e,"OffCanvas",{close:function(){return t.close(),t.$lastTrigger.focus(),!0},handled:function(){e.stopPropagation(),e.preventDefault()}})}},{key:"destroy",value:function(){this.close(),this.$element.off(".zf.trigger .zf.offcanvas"),this.$overlay.off(".zf.offcanvas"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={closeOnClick:!0,contentOverlay:!0,contentScroll:!0,transitionTime:0,transition:"push",forceTo:null,isRevealed:!1,revealOn:null,autoFocus:!0,revealClass:"reveal-for-",trapFocus:!1},Foundation.plugin(t,"OffCanvas")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Orbit"),Foundation.Keyboard.register("Orbit",{ltr:{ARROW_RIGHT:"next",ARROW_LEFT:"previous"},rtl:{ARROW_LEFT:"next",ARROW_RIGHT:"previous"}})}return _createClass(t,[{key:"_init",value:function(){this._reset(),this.$wrapper=this.$element.find("."+this.options.containerClass),this.$slides=this.$element.find("."+this.options.slideClass);var e=this.$element.find("img"),t=this.$slides.filter(".is-active"),n=this.$element[0].id||Foundation.GetYoDigits(6,"orbit");this.$element.attr({"data-resize":n,id:n}),t.length||this.$slides.eq(0).addClass("is-active"),this.options.useMUI||this.$slides.addClass("no-motionui"),e.length?Foundation.onImagesLoaded(e,this._prepareForOrbit.bind(this)):this._prepareForOrbit(),this.options.bullets&&this._loadBullets(),this._events(),this.options.autoPlay&&this.$slides.length>1&&this.geoSync(),this.options.accessible&&this.$wrapper.attr("tabindex",0)}},{key:"_loadBullets",value:function(){this.$bullets=this.$element.find("."+this.options.boxOfBullets).find("button")}},{key:"geoSync",value:function(){var e=this;this.timer=new Foundation.Timer(this.$element,{duration:this.options.timerDelay,infinite:!1},function(){e.changeSlide(!0)}),this.timer.start()}},{key:"_prepareForOrbit",value:function(){this._setWrapperHeight()}},{key:"_setWrapperHeight",value:function(t){var n,i=0,o=0,s=this;this.$slides.each(function(){n=this.getBoundingClientRect().height,e(this).attr("data-slide",o),s.$slides.filter(".is-active")[0]!==s.$slides.eq(o)[0]&&e(this).css({position:"relative",display:"none"}),i=n>i?n:i,o++}),o===this.$slides.length&&(this.$wrapper.css({height:i}),t&&t(i))}},{key:"_setSlideHeight",value:function(t){this.$slides.each(function(){e(this).css("max-height",t)})}},{key:"_events",value:function(){var t=this;if(this.$element.off(".resizeme.zf.trigger").on({"resizeme.zf.trigger":this._prepareForOrbit.bind(this)}),this.$slides.length>1){if(this.options.swipe&&this.$slides.off("swipeleft.zf.orbit swiperight.zf.orbit").on("swipeleft.zf.orbit",function(e){e.preventDefault(),t.changeSlide(!0)}).on("swiperight.zf.orbit",function(e){e.preventDefault(),t.changeSlide(!1)}),this.options.autoPlay&&(this.$slides.on("click.zf.orbit",function(){t.$element.data("clickedOn",!t.$element.data("clickedOn")),t.timer[t.$element.data("clickedOn")?"pause":"start"]()}),this.options.pauseOnHover&&this.$element.on("mouseenter.zf.orbit",function(){t.timer.pause()}).on("mouseleave.zf.orbit",function(){t.$element.data("clickedOn")||t.timer.start()})),this.options.navButtons){var n=this.$element.find("."+this.options.nextClass+", ."+this.options.prevClass);n.attr("tabindex",0).on("click.zf.orbit touchend.zf.orbit",function(n){n.preventDefault(),t.changeSlide(e(this).hasClass(t.options.nextClass))})}this.options.bullets&&this.$bullets.on("click.zf.orbit touchend.zf.orbit",function(){if(/is-active/g.test(this.className))return!1;var n=e(this).data("slide"),i=n>t.$slides.filter(".is-active").data("slide"),o=t.$slides.eq(n);t.changeSlide(i,o,n)}),this.options.accessible&&this.$wrapper.add(this.$bullets).on("keydown.zf.orbit",function(n){Foundation.Keyboard.handleKey(n,"Orbit",{next:function(){t.changeSlide(!0)},previous:function(){t.changeSlide(!1)},handled:function(){e(n.target).is(t.$bullets)&&t.$bullets.filter(".is-active").focus()}})})}}},{key:"_reset",value:function(){"undefined"!=typeof this.$slides&&this.$slides.length>1&&(this.$element.off(".zf.orbit").find("*").off(".zf.orbit"),this.options.autoPlay&&this.timer.restart(),this.$slides.each(function(t){e(t).removeClass("is-active is-active is-in").removeAttr("aria-live").hide()}),this.$slides.first().addClass("is-active").show(),this.$element.trigger("slidechange.zf.orbit",[this.$slides.first()]),this.options.bullets&&this._updateBullets(0))}},{key:"changeSlide",value:function(e,t,n){if(this.$slides){var i=this.$slides.filter(".is-active").eq(0);if(/mui/g.test(i[0].className))return!1;var o,s=this.$slides.first(),a=this.$slides.last(),r=e?"Right":"Left",l=e?"Left":"Right",u=this;o=t?t:e?this.options.infiniteWrap?i.next("."+this.options.slideClass).length?i.next("."+this.options.slideClass):s:i.next("."+this.options.slideClass):this.options.infiniteWrap?i.prev("."+this.options.slideClass).length?i.prev("."+this.options.slideClass):a:i.prev("."+this.options.slideClass),o.length&&(this.$element.trigger("beforeslidechange.zf.orbit",[i,o]),this.options.bullets&&(n=n||this.$slides.index(o),this._updateBullets(n)),this.options.useMUI&&!this.$element.is(":hidden")?(Foundation.Motion.animateIn(o.addClass("is-active").css({position:"absolute",top:0}),this.options["animInFrom"+r],function(){o.css({position:"relative",display:"block"}).attr("aria-live","polite")}),Foundation.Motion.animateOut(i.removeClass("is-active"),this.options["animOutTo"+l],function(){i.removeAttr("aria-live"),u.options.autoPlay&&!u.timer.isPaused&&u.timer.restart()})):(i.removeClass("is-active is-in").removeAttr("aria-live").hide(),o.addClass("is-active is-in").attr("aria-live","polite").show(),this.options.autoPlay&&!this.timer.isPaused&&this.timer.restart()),this.$element.trigger("slidechange.zf.orbit",[o]))}}},{key:"_updateBullets",value:function(e){var t=this.$element.find("."+this.options.boxOfBullets).find(".is-active").removeClass("is-active").blur(),n=t.find("span:last").detach();this.$bullets.eq(e).addClass("is-active").append(n)}},{key:"destroy",value:function(){this.$element.off(".zf.orbit").find("*").off(".zf.orbit").end().hide(),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={bullets:!0,navButtons:!0,animInFromRight:"slide-in-right",animOutToRight:"slide-out-right",animInFromLeft:"slide-in-left",animOutToLeft:"slide-out-left",autoPlay:!0,timerDelay:5e3,infiniteWrap:!0,swipe:!0,pauseOnHover:!0,accessible:!0,containerClass:"orbit-container",slideClass:"orbit-slide",boxOfBullets:"orbit-bullets",nextClass:"orbit-next",prevClass:"orbit-previous",useMUI:!0},Foundation.plugin(t,"Orbit")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=e(n),this.rules=this.$element.data("responsive-menu"),this.currentMq=null,this.currentPlugin=null,this._init(),this._events(),Foundation.registerPlugin(this,"ResponsiveMenu")}return _createClass(t,[{key:"_init",value:function(){if("string"==typeof this.rules){for(var t={},i=this.rules.split(" "),o=0;o<i.length;o++){var s=i[o].split("-"),a=s.length>1?s[0]:"small",r=s.length>1?s[1]:s[0];null!==n[r]&&(t[a]=n[r])}this.rules=t}e.isEmptyObject(this.rules)||this._checkMediaQueries(),this.$element.attr("data-mutate",this.$element.attr("data-mutate")||Foundation.GetYoDigits(6,"responsive-menu"))}},{key:"_events",value:function(){var t=this;e(window).on("changed.zf.mediaquery",function(){t._checkMediaQueries()})}},{key:"_checkMediaQueries",value:function(){var t,i=this;e.each(this.rules,function(e){Foundation.MediaQuery.atLeast(e)&&(t=e)}),t&&(this.currentPlugin instanceof this.rules[t].plugin||(e.each(n,function(e,t){i.$element.removeClass(t.cssClass)}),this.$element.addClass(this.rules[t].cssClass),this.currentPlugin&&this.currentPlugin.destroy(),this.currentPlugin=new this.rules[t].plugin(this.$element,{})))}},{key:"destroy",value:function(){this.currentPlugin.destroy(),e(window).off(".zf.ResponsiveMenu"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={};var n={dropdown:{cssClass:"dropdown",plugin:Foundation._plugins["dropdown-menu"]||null},drilldown:{cssClass:"drilldown",plugin:Foundation._plugins.drilldown||null},accordion:{cssClass:"accordion-menu",plugin:Foundation._plugins["accordion-menu"]||null}};Foundation.plugin(t,"ResponsiveMenu")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=e(n),this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),this._events(),Foundation.registerPlugin(this,"ResponsiveToggle")}return _createClass(t,[{key:"_init",value:function(){var t=this.$element.data("responsive-toggle");if(t||console.error("Your tab bar needs an ID of a Menu as the value of data-tab-bar."),this.$targetMenu=e("#"+t),this.$toggler=this.$element.find("[data-toggle]").filter(function(){var n=e(this).data("toggle");return n===t||""===n}),this.options=e.extend({},this.options,this.$targetMenu.data()),this.options.animate){var n=this.options.animate.split(" ");this.animationIn=n[0],this.animationOut=n[1]||null}this._update()}},{key:"_events",value:function(){this._updateMqHandler=this._update.bind(this),e(window).on("changed.zf.mediaquery",this._updateMqHandler),this.$toggler.on("click.zf.responsiveToggle",this.toggleMenu.bind(this))}},{key:"_update",value:function(){Foundation.MediaQuery.atLeast(this.options.hideFor)?(this.$element.hide(),this.$targetMenu.show()):(this.$element.show(),this.$targetMenu.hide())}},{key:"toggleMenu",value:function(){var e=this;Foundation.MediaQuery.atLeast(this.options.hideFor)||(this.options.animate?this.$targetMenu.is(":hidden")?Foundation.Motion.animateIn(this.$targetMenu,this.animationIn,function(){e.$element.trigger("toggled.zf.responsiveToggle"),e.$targetMenu.find("[data-mutate]").triggerHandler("mutateme.zf.trigger")}):Foundation.Motion.animateOut(this.$targetMenu,this.animationOut,function(){e.$element.trigger("toggled.zf.responsiveToggle")}):(this.$targetMenu.toggle(0),this.$targetMenu.find("[data-mutate]").trigger("mutateme.zf.trigger"),this.$element.trigger("toggled.zf.responsiveToggle")))}},{key:"destroy",value:function(){this.$element.off(".zf.responsiveToggle"),this.$toggler.off(".zf.responsiveToggle"),e(window).off("changed.zf.mediaquery",this._updateMqHandler),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={hideFor:"medium",animate:!1},Foundation.plugin(t,"ResponsiveToggle")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){function t(){return/iP(ad|hone|od).*OS/.test(window.navigator.userAgent)}function n(){return/Android/.test(window.navigator.userAgent)}function i(){return t()||n()}var o=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Reveal"),Foundation.Keyboard.register("Reveal",{ENTER:"open",SPACE:"open",ESCAPE:"close"})}return _createClass(t,[{key:"_init",value:function(){this.id=this.$element.attr("id"),this.isActive=!1,this.cached={mq:Foundation.MediaQuery.current},this.isMobile=i(),this.$anchor=e(e('[data-open="'+this.id+'"]').length?'[data-open="'+this.id+'"]':'[data-toggle="'+this.id+'"]'),this.$anchor.attr({"aria-controls":this.id,"aria-haspopup":!0,tabindex:0}),(this.options.fullScreen||this.$element.hasClass("full"))&&(this.options.fullScreen=!0,this.options.overlay=!1),this.options.overlay&&!this.$overlay&&(this.$overlay=this._makeOverlay(this.id)),this.$element.attr({role:"dialog","aria-hidden":!0,"data-yeti-box":this.id,"data-resize":this.id}),this.$overlay?this.$element.detach().appendTo(this.$overlay):(this.$element.detach().appendTo(e(this.options.appendTo)),this.$element.addClass("without-overlay")),this._events(),this.options.deepLink&&window.location.hash==="#"+this.id&&e(window).one("load.zf.reveal",this.open.bind(this))}},{key:"_makeOverlay",value:function(){return e("<div></div>").addClass("reveal-overlay").appendTo(this.options.appendTo)}},{key:"_updatePosition",value:function(){var t,n,i=this.$element.outerWidth(),o=e(window).width(),s=this.$element.outerHeight(),a=e(window).height();t="auto"===this.options.hOffset?parseInt((o-i)/2,10):parseInt(this.options.hOffset,10),n="auto"===this.options.vOffset?s>a?parseInt(Math.min(100,a/10),10):parseInt((a-s)/4,10):parseInt(this.options.vOffset,10),this.$element.css({top:n+"px"}),this.$overlay&&"auto"===this.options.hOffset||(this.$element.css({left:t+"px"}),this.$element.css({margin:"0px"}))}},{key:"_events",value:function(){var t=this,n=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":function(i,o){if(i.target===n.$element[0]||e(i.target).parents("[data-closable]")[0]===o)return t.close.apply(t)},"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":function(){n._updatePosition()}}),this.$anchor.length&&this.$anchor.on("keydown.zf.reveal",function(e){13!==e.which&&32!==e.which||(e.stopPropagation(),e.preventDefault(),n.open())}),this.options.closeOnClick&&this.options.overlay&&this.$overlay.off(".zf.reveal").on("click.zf.reveal",function(t){t.target!==n.$element[0]&&!e.contains(n.$element[0],t.target)&&e.contains(document,t.target)&&n.close()}),this.options.deepLink&&e(window).on("popstate.zf.reveal:"+this.id,this._handleState.bind(this))}},{key:"_handleState",value:function(e){window.location.hash!=="#"+this.id||this.isActive?this.close():this.open()}},{key:"open",value:function(){function t(){o.isMobile?(o.originalScrollPos||(o.originalScrollPos=window.pageYOffset),e("html, body").addClass("is-reveal-open")):e("body").addClass("is-reveal-open")}var n=this;if(this.options.deepLink){var i="#"+this.id;window.history.pushState?window.history.pushState(null,null,i):window.location.hash=i}this.isActive=!0,this.$element.css({visibility:"hidden"}).show().scrollTop(0),this.options.overlay&&this.$overlay.css({visibility:"hidden"}).show(),this._updatePosition(),this.$element.hide().css({visibility:""}),this.$overlay&&(this.$overlay.css({visibility:""}).hide(),this.$element.hasClass("fast")?this.$overlay.addClass("fast"):this.$element.hasClass("slow")&&this.$overlay.addClass("slow")),this.options.multipleOpened||this.$element.trigger("closeme.zf.reveal",this.id);var o=this;if(this.options.animationIn){var s=function(){o.$element.attr({"aria-hidden":!1,tabindex:-1}).focus(),t(),Foundation.Keyboard.trapFocus(o.$element)};this.options.overlay&&Foundation.Motion.animateIn(this.$overlay,"fade-in"),Foundation.Motion.animateIn(this.$element,this.options.animationIn,function(){n.$element&&(n.focusableElements=Foundation.Keyboard.findFocusable(n.$element),s())})}else this.options.overlay&&this.$overlay.show(0),this.$element.show(this.options.showDelay);this.$element.attr({"aria-hidden":!1,tabindex:-1}).focus(),Foundation.Keyboard.trapFocus(this.$element),this.$element.trigger("open.zf.reveal"),t(),setTimeout(function(){n._extraHandlers()},0)}},{key:"_extraHandlers",value:function(){var t=this;this.$element&&(this.focusableElements=Foundation.Keyboard.findFocusable(this.$element),this.options.overlay||!this.options.closeOnClick||this.options.fullScreen||e("body").on("click.zf.reveal",function(n){n.target!==t.$element[0]&&!e.contains(t.$element[0],n.target)&&e.contains(document,n.target)&&t.close()}),this.options.closeOnEsc&&e(window).on("keydown.zf.reveal",function(e){Foundation.Keyboard.handleKey(e,"Reveal",{close:function(){t.options.closeOnEsc&&(t.close(),t.$anchor.focus())}})}),this.$element.on("keydown.zf.reveal",function(n){var i=e(this);Foundation.Keyboard.handleKey(n,"Reveal",{open:function(){t.$element.find(":focus").is(t.$element.find("[data-close]"))?setTimeout(function(){t.$anchor.focus()},1):i.is(t.focusableElements)&&t.open()},close:function(){t.options.closeOnEsc&&(t.close(),t.$anchor.focus())},handled:function(e){e&&n.preventDefault()}})}))}},{key:"close",value:function(){function t(){n.isMobile?(0===e(".reveal:visible").length&&e("html, body").removeClass("is-reveal-open"),n.originalScrollPos&&(e("body").scrollTop(n.originalScrollPos),n.originalScrollPos=null)):0===e(".reveal:visible").length&&e("body").removeClass("is-reveal-open"),Foundation.Keyboard.releaseFocus(n.$element),n.$element.attr("aria-hidden",!0),n.$element.trigger("closed.zf.reveal")}if(!this.isActive||!this.$element.is(":visible"))return!1;var n=this;this.options.animationOut?(this.options.overlay?Foundation.Motion.animateOut(this.$overlay,"fade-out",t):t(),Foundation.Motion.animateOut(this.$element,this.options.animationOut)):(this.$element.hide(this.options.hideDelay),this.options.overlay?this.$overlay.hide(0,t):t()),this.options.closeOnEsc&&e(window).off("keydown.zf.reveal"),!this.options.overlay&&this.options.closeOnClick&&e("body").off("click.zf.reveal"),this.$element.off("keydown.zf.reveal"),this.options.resetOnClose&&this.$element.html(this.$element.html()),this.isActive=!1,n.options.deepLink&&(window.history.replaceState?window.history.replaceState("",document.title,window.location.href.replace("#"+this.id,"")):window.location.hash="")}},{key:"toggle",value:function(){this.isActive?this.close():this.open()}},{key:"destroy",value:function(){this.options.overlay&&(this.$element.appendTo(e(this.options.appendTo)),this.$overlay.hide().off().remove()),this.$element.hide().off(),this.$anchor.off(".zf"),e(window).off(".zf.reveal:"+this.id),Foundation.unregisterPlugin(this)}}]),t}();o.defaults={animationIn:"",animationOut:"",showDelay:0,hideDelay:0,closeOnClick:!0,closeOnEsc:!0,multipleOpened:!1,vOffset:"auto",hOffset:"auto",fullScreen:!1,btmOffsetPct:10,overlay:!0,resetOnClose:!1,deepLink:!1,appendTo:"body"},Foundation.plugin(o,"Reveal")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){function t(e,t){return e/t}function n(e,t,n,i){return Math.abs(e.position()[t]+e[i]()/2-n)}function i(e,t){return Math.log(t)/Math.log(e)}var o=function(){function o(t,n){_classCallCheck(this,o),this.$element=t,this.options=e.extend({},o.defaults,this.$element.data(),n),this._init(),Foundation.registerPlugin(this,"Slider"),Foundation.Keyboard.register("Slider",{ltr:{ARROW_RIGHT:"increase",ARROW_UP:"increase",ARROW_DOWN:"decrease",ARROW_LEFT:"decrease",SHIFT_ARROW_RIGHT:"increase_fast",SHIFT_ARROW_UP:"increase_fast",SHIFT_ARROW_DOWN:"decrease_fast",SHIFT_ARROW_LEFT:"decrease_fast"},rtl:{ARROW_LEFT:"increase",ARROW_RIGHT:"decrease",SHIFT_ARROW_LEFT:"increase_fast",SHIFT_ARROW_RIGHT:"decrease_fast"}})}return _createClass(o,[{key:"_init",value:function(){this.inputs=this.$element.find("input"),this.handles=this.$element.find("[data-slider-handle]"),this.$handle=this.handles.eq(0),this.$input=this.inputs.length?this.inputs.eq(0):e("#"+this.$handle.attr("aria-controls")),this.$fill=this.$element.find("[data-slider-fill]").css(this.options.vertical?"height":"width",0);var t=!1;(this.options.disabled||this.$element.hasClass(this.options.disabledClass))&&(this.options.disabled=!0,this.$element.addClass(this.options.disabledClass)),this.inputs.length||(this.inputs=e().add(this.$input),this.options.binding=!0),this._setInitAttr(0),this.handles[1]&&(this.options.doubleSided=!0,this.$handle2=this.handles.eq(1),this.$input2=this.inputs.length>1?this.inputs.eq(1):e("#"+this.$handle2.attr("aria-controls")),this.inputs[1]||(this.inputs=this.inputs.add(this.$input2)),t=!0,this._setInitAttr(1)),this.setHandles(),this._events()}},{key:"setHandles",value:function(){var e=this;this.handles[1]?this._setHandlePos(this.$handle,this.inputs.eq(0).val(),!0,function(){e._setHandlePos(e.$handle2,e.inputs.eq(1).val(),!0)}):this._setHandlePos(this.$handle,this.inputs.eq(0).val(),!0)}},{key:"_reflow",value:function(){this.setHandles()}},{key:"_pctOfBar",value:function(e){var n=t(e-this.options.start,this.options.end-this.options.start);switch(this.options.positionValueFunction){case"pow":n=this._logTransform(n);break;case"log":n=this._powTransform(n)}return n.toFixed(2)}},{key:"_value",value:function(e){switch(this.options.positionValueFunction){case"pow":e=this._powTransform(e);break;case"log":e=this._logTransform(e)}var t=(this.options.end-this.options.start)*e+this.options.start;return t}},{key:"_logTransform",value:function(e){return i(this.options.nonLinearBase,e*(this.options.nonLinearBase-1)+1)}},{key:"_powTransform",value:function(e){return(Math.pow(this.options.nonLinearBase,e)-1)/(this.options.nonLinearBase-1)}},{key:"_setHandlePos",value:function(e,n,i,o){if(!this.$element.hasClass(this.options.disabledClass)){n=parseFloat(n),n<this.options.start?n=this.options.start:n>this.options.end&&(n=this.options.end);var s=this.options.doubleSided;if(s)if(0===this.handles.index(e)){var a=parseFloat(this.$handle2.attr("aria-valuenow"));n=n>=a?a-this.options.step:n}else{var r=parseFloat(this.$handle.attr("aria-valuenow"));n=n<=r?r+this.options.step:n}this.options.vertical&&!i&&(n=this.options.end-n);var l=this,u=this.options.vertical,d=u?"height":"width",c=u?"top":"left",h=e[0].getBoundingClientRect()[d],f=this.$element[0].getBoundingClientRect()[d],p=this._pctOfBar(n),m=(f-h)*p,g=(100*t(m,f)).toFixed(this.options.decimal);n=parseFloat(n.toFixed(this.options.decimal));var v={};if(this._setValues(e,n),s){var y,b=0===this.handles.index(e),w=~~(100*t(h,f));if(b)v[c]=g+"%",y=parseFloat(this.$handle2[0].style[c])-g+w,o&&"function"==typeof o&&o();else{var C=parseFloat(this.$handle[0].style[c]);y=g-(isNaN(C)?(this.options.initialStart-this.options.start)/((this.options.end-this.options.start)/100):C)+w}v["min-"+d]=y+"%"}this.$element.one("finished.zf.animate",function(){l.$element.trigger("moved.zf.slider",[e])});var $=this.$element.data("dragging")?1e3/60:this.options.moveTime;Foundation.Move($,e,function(){isNaN(g)?e.css(c,100*p+"%"):e.css(c,g+"%"),l.options.doubleSided?l.$fill.css(v):l.$fill.css(d,100*p+"%")}),clearTimeout(l.timeout),l.timeout=setTimeout(function(){l.$element.trigger("changed.zf.slider",[e])},l.options.changedDelay)}}},{key:"_setInitAttr",value:function(e){var t=0===e?this.options.initialStart:this.options.initialEnd,n=this.inputs.eq(e).attr("id")||Foundation.GetYoDigits(6,"slider");this.inputs.eq(e).attr({id:n,max:this.options.end,min:this.options.start,step:this.options.step}),this.inputs.eq(e).val(t),this.handles.eq(e).attr({role:"slider","aria-controls":n,"aria-valuemax":this.options.end,"aria-valuemin":this.options.start,"aria-valuenow":t,"aria-orientation":this.options.vertical?"vertical":"horizontal",tabindex:0})}},{key:"_setValues",value:function(e,t){var n=this.options.doubleSided?this.handles.index(e):0;this.inputs.eq(n).val(t),e.attr("aria-valuenow",t)}},{key:"_handleEvent",value:function(i,o,s){var a,r;if(s)a=this._adjustValue(null,s),r=!0;else{i.preventDefault();var l=this,u=this.options.vertical,d=u?"height":"width",c=u?"top":"left",h=u?i.pageY:i.pageX,f=(this.$handle[0].getBoundingClientRect()[d]/2,this.$element[0].getBoundingClientRect()[d]),p=u?e(window).scrollTop():e(window).scrollLeft(),m=this.$element.offset()[c];i.clientY===i.pageY&&(h+=p);var g,v=h-m;g=v<0?0:v>f?f:v;var y=t(g,f);if(a=this._value(y),Foundation.rtl()&&!this.options.vertical&&(a=this.options.end-a),a=l._adjustValue(null,a),r=!1,!o){var b=n(this.$handle,c,g,d),w=n(this.$handle2,c,g,d);o=b<=w?this.$handle:this.$handle2}}this._setHandlePos(o,a,r)}},{key:"_adjustValue",value:function(e,t){var n,i,o,s,a=this.options.step,r=parseFloat(a/2);return n=e?parseFloat(e.attr("aria-valuenow")):t,i=n%a,o=n-i,s=o+a,0===i?n:n=n>=o+r?s:o}},{key:"_events",value:function(){this._eventsForHandle(this.$handle),this.handles[1]&&this._eventsForHandle(this.$handle2)}},{key:"_eventsForHandle",value:function(t){var n,i=this;if(this.inputs.off("change.zf.slider").on("change.zf.slider",function(t){var n=i.inputs.index(e(this));i._handleEvent(t,i.handles.eq(n),e(this).val())}),this.options.clickSelect&&this.$element.off("click.zf.slider").on("click.zf.slider",function(t){return!i.$element.data("dragging")&&void(e(t.target).is("[data-slider-handle]")||(i.options.doubleSided?i._handleEvent(t):i._handleEvent(t,i.$handle)))}),this.options.draggable){this.handles.addTouch();var o=e("body");t.off("mousedown.zf.slider").on("mousedown.zf.slider",function(s){t.addClass("is-dragging"),i.$fill.addClass("is-dragging"),i.$element.data("dragging",!0),n=e(s.currentTarget),o.on("mousemove.zf.slider",function(e){e.preventDefault(),i._handleEvent(e,n)}).on("mouseup.zf.slider",function(e){i._handleEvent(e,n),t.removeClass("is-dragging"),i.$fill.removeClass("is-dragging"),i.$element.data("dragging",!1),o.off("mousemove.zf.slider mouseup.zf.slider")})}).on("selectstart.zf.slider touchmove.zf.slider",function(e){e.preventDefault()})}t.off("keydown.zf.slider").on("keydown.zf.slider",function(t){var n,o=e(this),s=i.options.doubleSided?i.handles.index(o):0,a=parseFloat(i.inputs.eq(s).val());Foundation.Keyboard.handleKey(t,"Slider",{decrease:function(){n=a-i.options.step},increase:function(){n=a+i.options.step},decrease_fast:function(){n=a-10*i.options.step},increase_fast:function(){n=a+10*i.options.step},handled:function(){t.preventDefault(),i._setHandlePos(o,n,!0)}})})}},{key:"destroy",value:function(){this.handles.off(".zf.slider"),this.inputs.off(".zf.slider"),this.$element.off(".zf.slider"),clearTimeout(this.timeout),Foundation.unregisterPlugin(this)}}]),o}();o.defaults={start:0,end:100,step:1,initialStart:0,initialEnd:100,binding:!1,clickSelect:!0,vertical:!1,draggable:!0,disabled:!1,doubleSided:!1,decimal:2,moveTime:200,disabledClass:"disabled",invertVertical:!1,changedDelay:500,nonLinearBase:5,positionValueFunction:"linear"},Foundation.plugin(o,"Slider")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){function t(e){return parseInt(window.getComputedStyle(document.body,null).fontSize,10)*e}var n=function(){function n(t,i){_classCallCheck(this,n),this.$element=t,this.options=e.extend({},n.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Sticky")}return _createClass(n,[{key:"_init",value:function(){var t=this.$element.parent("[data-sticky-container]"),n=this.$element[0].id||Foundation.GetYoDigits(6,"sticky"),i=this;t.length||(this.wasWrapped=!0),this.$container=t.length?t:e(this.options.container).wrapInner(this.$element),this.$container.addClass(this.options.containerClass),this.$element.addClass(this.options.stickyClass).attr({"data-resize":n,"data-mutate":n}),""!==this.options.anchor&&e("#"+i.options.anchor).attr({"data-mutate":n}),this.scrollCount=this.options.checkEvery,this.isStuck=!1,e(window).one("load.zf.sticky",function(){i.containerHeight="none"==i.$element.css("display")?0:i.$element[0].getBoundingClientRect().height,i.$container.css("height",i.containerHeight),i.elemHeight=i.containerHeight,""!==i.options.anchor?i.$anchor=e("#"+i.options.anchor):i._parsePoints(),i._setSizes(function(){var e=window.pageYOffset;i._calc(!1,e),i.isStuck||i._removeSticky(!(e>=i.topPoint))}),i._events(n.split("-").reverse().join("-"))})}},{key:"_parsePoints",value:function(){for(var t=""==this.options.topAnchor?1:this.options.topAnchor,n=""==this.options.btmAnchor?document.documentElement.scrollHeight:this.options.btmAnchor,i=[t,n],o={},s=0,a=i.length;s<a&&i[s];s++){
+var r;if("number"==typeof i[s])r=i[s];else{var l=i[s].split(":"),u=e("#"+l[0]);r=u.offset().top,l[1]&&"bottom"===l[1].toLowerCase()&&(r+=u[0].getBoundingClientRect().height)}o[s]=r}this.points=o}},{key:"_events",value:function(t){var n=this,i=this.scrollListener="scroll.zf."+t;this.isOn||(this.canStick&&(this.isOn=!0,e(window).off(i).on(i,function(e){0===n.scrollCount?(n.scrollCount=n.options.checkEvery,n._setSizes(function(){n._calc(!1,window.pageYOffset)})):(n.scrollCount--,n._calc(!1,window.pageYOffset))})),this.$element.off("resizeme.zf.trigger").on("resizeme.zf.trigger",function(e,i){n._eventsHandler(t)}),this.$element.on("mutateme.zf.trigger",function(e,i){n._eventsHandler(t)}),this.$anchor&&this.$anchor.on("mutateme.zf.trigger",function(e,i){n._eventsHandler(t)}))}},{key:"_eventsHandler",value:function(e){var t=this,n=this.scrollListener="scroll.zf."+e;t._setSizes(function(){t._calc(!1),t.canStick?t.isOn||t._events(e):t.isOn&&t._pauseListeners(n)})}},{key:"_pauseListeners",value:function(t){this.isOn=!1,e(window).off(t),this.$element.trigger("pause.zf.sticky")}},{key:"_calc",value:function(e,t){return e&&this._setSizes(),this.canStick?(t||(t=window.pageYOffset),void(t>=this.topPoint?t<=this.bottomPoint?this.isStuck||this._setSticky():this.isStuck&&this._removeSticky(!1):this.isStuck&&this._removeSticky(!0))):(this.isStuck&&this._removeSticky(!0),!1)}},{key:"_setSticky",value:function(){var e=this,t=this.options.stickTo,n="top"===t?"marginTop":"marginBottom",i="top"===t?"bottom":"top",o={};o[n]=this.options[n]+"em",o[t]=0,o[i]="auto",this.isStuck=!0,this.$element.removeClass("is-anchored is-at-"+i).addClass("is-stuck is-at-"+t).css(o).trigger("sticky.zf.stuckto:"+t),this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",function(){e._setSizes()})}},{key:"_removeSticky",value:function(e){var t=this.options.stickTo,n="top"===t,i={},o=(this.points?this.points[1]-this.points[0]:this.anchorHeight)-this.elemHeight,s=n?"marginTop":"marginBottom",a=e?"top":"bottom";i[s]=0,i.bottom="auto",e?i.top=0:i.top=o,this.isStuck=!1,this.$element.removeClass("is-stuck is-at-"+t).addClass("is-anchored is-at-"+a).css(i).trigger("sticky.zf.unstuckfrom:"+a)}},{key:"_setSizes",value:function(e){this.canStick=Foundation.MediaQuery.is(this.options.stickyOn),this.canStick||e&&"function"==typeof e&&e();var t=this.$container[0].getBoundingClientRect().width,n=window.getComputedStyle(this.$container[0]),i=parseInt(n["padding-left"],10),o=parseInt(n["padding-right"],10);this.$anchor&&this.$anchor.length?this.anchorHeight=this.$anchor[0].getBoundingClientRect().height:this._parsePoints(),this.$element.css({"max-width":t-i-o+"px"});var s=this.$element[0].getBoundingClientRect().height||this.containerHeight;if("none"==this.$element.css("display")&&(s=0),this.containerHeight=s,this.$container.css({height:s}),this.elemHeight=s,!this.isStuck&&this.$element.hasClass("is-at-bottom")){var a=(this.points?this.points[1]-this.$container.offset().top:this.anchorHeight)-this.elemHeight;this.$element.css("top",a)}this._setBreakPoints(s,function(){e&&"function"==typeof e&&e()})}},{key:"_setBreakPoints",value:function(e,n){if(!this.canStick){if(!n||"function"!=typeof n)return!1;n()}var i=t(this.options.marginTop),o=t(this.options.marginBottom),s=this.points?this.points[0]:this.$anchor.offset().top,a=this.points?this.points[1]:s+this.anchorHeight,r=window.innerHeight;"top"===this.options.stickTo?(s-=i,a-=e+i):"bottom"===this.options.stickTo&&(s-=r-(e+o),a-=r-o),this.topPoint=s,this.bottomPoint=a,n&&"function"==typeof n&&n()}},{key:"destroy",value:function(){this._removeSticky(!0),this.$element.removeClass(this.options.stickyClass+" is-anchored is-at-top").css({height:"",top:"",bottom:"","max-width":""}).off("resizeme.zf.trigger").off("mutateme.zf.trigger"),this.$anchor&&this.$anchor.length&&this.$anchor.off("change.zf.sticky"),e(window).off(this.scrollListener),this.wasWrapped?this.$element.unwrap():this.$container.removeClass(this.options.containerClass).css({height:""}),Foundation.unregisterPlugin(this)}}]),n}();n.defaults={container:"<div data-sticky-container></div>",stickTo:"top",anchor:"",topAnchor:"",btmAnchor:"",marginTop:1,marginBottom:1,stickyOn:"medium",stickyClass:"sticky",containerClass:"sticky-container",checkEvery:-1},Foundation.plugin(n,"Sticky")}(jQuery);var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this._init(),Foundation.registerPlugin(this,"Tabs"),Foundation.Keyboard.register("Tabs",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"previous",ARROW_DOWN:"next",ARROW_LEFT:"previous"})}return _createClass(t,[{key:"_init",value:function(){var t=this,n=this;if(this.$element.attr({role:"tablist"}),this.$tabTitles=this.$element.find("."+this.options.linkClass),this.$tabContent=e('[data-tabs-content="'+this.$element[0].id+'"]'),this.$tabTitles.each(function(){var t=e(this),i=t.find("a"),o=t.hasClass(""+n.options.linkActiveClass),s=i[0].hash.slice(1),a=i[0].id?i[0].id:s+"-label",r=e("#"+s);t.attr({role:"presentation"}),i.attr({role:"tab","aria-controls":s,"aria-selected":o,id:a}),r.attr({role:"tabpanel","aria-hidden":!o,"aria-labelledby":a}),o&&n.options.autoFocus&&e(window).load(function(){e("html, body").animate({scrollTop:t.offset().top},n.options.deepLinkSmudgeDelay,function(){i.focus()})})}),this.options.matchHeight){var i=this.$tabContent.find("img");i.length?Foundation.onImagesLoaded(i,this._setHeight.bind(this)):this._setHeight()}this._checkDeepLink=function(){var n=window.location.hash;if(n.length){var i=t.$element.find('[href$="'+n+'"]');if(i.length){if(t.selectTab(e(n),!0),t.options.deepLinkSmudge){var o=t.$element.offset();e("html, body").animate({scrollTop:o.top},t.options.deepLinkSmudgeDelay)}t.$element.trigger("deeplink.zf.tabs",[i,e(n)])}}},this.options.deepLink&&this._checkDeepLink(),this._events()}},{key:"_events",value:function(){this._addKeyHandler(),this._addClickHandler(),this._setHeightMqHandler=null,this.options.matchHeight&&(this._setHeightMqHandler=this._setHeight.bind(this),e(window).on("changed.zf.mediaquery",this._setHeightMqHandler)),this.options.deepLink&&e(window).on("popstate",this._checkDeepLink)}},{key:"_addClickHandler",value:function(){var t=this;this.$element.off("click.zf.tabs").on("click.zf.tabs","."+this.options.linkClass,function(n){n.preventDefault(),n.stopPropagation(),t._handleTabChange(e(this))})}},{key:"_addKeyHandler",value:function(){var t=this;this.$tabTitles.off("keydown.zf.tabs").on("keydown.zf.tabs",function(n){if(9!==n.which){var i,o,s=e(this),a=s.parent("ul").children("li");a.each(function(n){if(e(this).is(s))return void(t.options.wrapOnKeys?(i=0===n?a.last():a.eq(n-1),o=n===a.length-1?a.first():a.eq(n+1)):(i=a.eq(Math.max(0,n-1)),o=a.eq(Math.min(n+1,a.length-1))))}),Foundation.Keyboard.handleKey(n,"Tabs",{open:function(){s.find('[role="tab"]').focus(),t._handleTabChange(s)},previous:function(){i.find('[role="tab"]').focus(),t._handleTabChange(i)},next:function(){o.find('[role="tab"]').focus(),t._handleTabChange(o)},handled:function(){n.stopPropagation(),n.preventDefault()}})}})}},{key:"_handleTabChange",value:function(e,t){if(e.hasClass(""+this.options.linkActiveClass))return void(this.options.activeCollapse&&(this._collapseTab(e),this.$element.trigger("collapse.zf.tabs",[e])));var n=this.$element.find("."+this.options.linkClass+"."+this.options.linkActiveClass),i=e.find('[role="tab"]'),o=i[0].hash,s=this.$tabContent.find(o);if(this._collapseTab(n),this._openTab(e),this.options.deepLink&&!t){var a=e.find("a").attr("href");this.options.updateHistory?history.pushState({},"",a):history.replaceState({},"",a)}this.$element.trigger("change.zf.tabs",[e,s]),s.find("[data-mutate]").trigger("mutateme.zf.trigger")}},{key:"_openTab",value:function(e){var t=e.find('[role="tab"]'),n=t[0].hash,i=this.$tabContent.find(n);e.addClass(""+this.options.linkActiveClass),t.attr({"aria-selected":"true"}),i.addClass(""+this.options.panelActiveClass).attr({"aria-hidden":"false"})}},{key:"_collapseTab",value:function(t){var n=t.removeClass(""+this.options.linkActiveClass).find('[role="tab"]').attr({"aria-selected":"false"});e("#"+n.attr("aria-controls")).removeClass(""+this.options.panelActiveClass).attr({"aria-hidden":"true"})}},{key:"selectTab",value:function(e,t){var n;n="object"===("undefined"==typeof e?"undefined":_typeof(e))?e[0].id:e,n.indexOf("#")<0&&(n="#"+n);var i=this.$tabTitles.find('[href$="'+n+'"]').parent("."+this.options.linkClass);this._handleTabChange(i,t)}},{key:"_setHeight",value:function(){var t=0,n=this;this.$tabContent.find("."+this.options.panelClass).css("height","").each(function(){var i=e(this),o=i.hasClass(""+n.options.panelActiveClass);o||i.css({visibility:"hidden",display:"block"});var s=this.getBoundingClientRect().height;o||i.css({visibility:"",display:""}),t=s>t?s:t}).css("height",t+"px")}},{key:"destroy",value:function(){this.$element.find("."+this.options.linkClass).off(".zf.tabs").hide().end().find("."+this.options.panelClass).hide(),this.options.matchHeight&&null!=this._setHeightMqHandler&&e(window).off("changed.zf.mediaquery",this._setHeightMqHandler),this.options.deepLink&&e(window).off("popstate",this._checkDeepLink),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={deepLink:!1,deepLinkSmudge:!1,deepLinkSmudgeDelay:300,updateHistory:!1,autoFocus:!1,wrapOnKeys:!0,matchHeight:!1,activeCollapse:!1,linkClass:"tabs-title",linkActiveClass:"is-active",panelClass:"tabs-panel",panelActiveClass:"is-active"},Foundation.plugin(t,"Tabs")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,n.data(),i),this.className="",this._init(),this._events(),Foundation.registerPlugin(this,"Toggler")}return _createClass(t,[{key:"_init",value:function(){var t;this.options.animate?(t=this.options.animate.split(" "),this.animationIn=t[0],this.animationOut=t[1]||null):(t=this.$element.data("toggler"),this.className="."===t[0]?t.slice(1):t);var n=this.$element[0].id;e('[data-open="'+n+'"], [data-close="'+n+'"], [data-toggle="'+n+'"]').attr("aria-controls",n),this.$element.attr("aria-expanded",!this.$element.is(":hidden"))}},{key:"_events",value:function(){this.$element.off("toggle.zf.trigger").on("toggle.zf.trigger",this.toggle.bind(this))}},{key:"toggle",value:function(){this[this.options.animate?"_toggleAnimate":"_toggleClass"]()}},{key:"_toggleClass",value:function(){this.$element.toggleClass(this.className);var e=this.$element.hasClass(this.className);e?this.$element.trigger("on.zf.toggler"):this.$element.trigger("off.zf.toggler"),this._updateARIA(e),this.$element.find("[data-mutate]").trigger("mutateme.zf.trigger")}},{key:"_toggleAnimate",value:function(){var e=this;this.$element.is(":hidden")?Foundation.Motion.animateIn(this.$element,this.animationIn,function(){e._updateARIA(!0),this.trigger("on.zf.toggler"),this.find("[data-mutate]").trigger("mutateme.zf.trigger")}):Foundation.Motion.animateOut(this.$element,this.animationOut,function(){e._updateARIA(!1),this.trigger("off.zf.toggler"),this.find("[data-mutate]").trigger("mutateme.zf.trigger")})}},{key:"_updateARIA",value:function(e){this.$element.attr("aria-expanded",!!e)}},{key:"destroy",value:function(){this.$element.off(".zf.toggler"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={animate:!1},Foundation.plugin(t,"Toggler")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=n,this.options=e.extend({},t.defaults,this.$element.data(),i),this.isActive=!1,this.isClick=!1,this._init(),Foundation.registerPlugin(this,"Tooltip")}return _createClass(t,[{key:"_init",value:function(){var t=this.$element.attr("aria-describedby")||Foundation.GetYoDigits(6,"tooltip");this.options.positionClass=this.options.positionClass||this._getPositionClass(this.$element),this.options.tipText=this.options.tipText||this.$element.attr("title"),this.template=this.options.template?e(this.options.template):this._buildTemplate(t),this.options.allowHtml?this.template.appendTo(document.body).html(this.options.tipText).hide():this.template.appendTo(document.body).text(this.options.tipText).hide(),this.$element.attr({title:"","aria-describedby":t,"data-yeti-box":t,"data-toggle":t,"data-resize":t}).addClass(this.options.triggerClass),this.usedPositions=[],this.counter=4,this.classChanged=!1,this._events()}},{key:"_getPositionClass",value:function(e){if(!e)return"";var t=e[0].className.match(/\b(top|left|right)\b/g);return t=t?t[0]:""}},{key:"_buildTemplate",value:function(t){var n=(this.options.tooltipClass+" "+this.options.positionClass+" "+this.options.templateClasses).trim(),i=e("<div></div>").addClass(n).attr({role:"tooltip","aria-hidden":!0,"data-is-active":!1,"data-is-focus":!1,id:t});return i}},{key:"_reposition",value:function(e){this.usedPositions.push(e?e:"bottom"),!e&&this.usedPositions.indexOf("top")<0?this.template.addClass("top"):"top"===e&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(e):"left"===e&&this.usedPositions.indexOf("right")<0?this.template.removeClass(e).addClass("right"):"right"===e&&this.usedPositions.indexOf("left")<0?this.template.removeClass(e).addClass("left"):!e&&this.usedPositions.indexOf("top")>-1&&this.usedPositions.indexOf("left")<0?this.template.addClass("left"):"top"===e&&this.usedPositions.indexOf("bottom")>-1&&this.usedPositions.indexOf("left")<0?this.template.removeClass(e).addClass("left"):"left"===e&&this.usedPositions.indexOf("right")>-1&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(e):"right"===e&&this.usedPositions.indexOf("left")>-1&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(e):this.template.removeClass(e),this.classChanged=!0,this.counter--}},{key:"_setPosition",value:function(){var e=this._getPositionClass(this.template),t=Foundation.Box.GetDimensions(this.template),n=Foundation.Box.GetDimensions(this.$element),i="left"===e?"left":"right"===e?"left":"top",o="top"===i?"height":"width";"height"===o?this.options.vOffset:this.options.hOffset;if(t.width>=t.windowDims.width||!this.counter&&!Foundation.Box.ImNotTouchingYou(this.template))return this.template.offset(Foundation.Box.GetOffsets(this.template,this.$element,"center bottom",this.options.vOffset,this.options.hOffset,!0)).css({width:n.windowDims.width-2*this.options.hOffset,height:"auto"}),!1;for(this.template.offset(Foundation.Box.GetOffsets(this.template,this.$element,"center "+(e||"bottom"),this.options.vOffset,this.options.hOffset));!Foundation.Box.ImNotTouchingYou(this.template)&&this.counter;)this._reposition(e),this._setPosition()}},{key:"show",value:function(){if("all"!==this.options.showOn&&!Foundation.MediaQuery.is(this.options.showOn))return!1;var e=this;this.template.css("visibility","hidden").show(),this._setPosition(),this.$element.trigger("closeme.zf.tooltip",this.template.attr("id")),this.template.attr({"data-is-active":!0,"aria-hidden":!1}),e.isActive=!0,this.template.stop().hide().css("visibility","").fadeIn(this.options.fadeInDuration,function(){}),this.$element.trigger("show.zf.tooltip")}},{key:"hide",value:function(){var e=this;this.template.stop().attr({"aria-hidden":!0,"data-is-active":!1}).fadeOut(this.options.fadeOutDuration,function(){e.isActive=!1,e.isClick=!1,e.classChanged&&(e.template.removeClass(e._getPositionClass(e.template)).addClass(e.options.positionClass),e.usedPositions=[],e.counter=4,e.classChanged=!1)}),this.$element.trigger("hide.zf.tooltip")}},{key:"_events",value:function(){var e=this,t=(this.template,!1);this.options.disableHover||this.$element.on("mouseenter.zf.tooltip",function(t){e.isActive||(e.timeout=setTimeout(function(){e.show()},e.options.hoverDelay))}).on("mouseleave.zf.tooltip",function(n){clearTimeout(e.timeout),(!t||e.isClick&&!e.options.clickOpen)&&e.hide()}),this.options.clickOpen?this.$element.on("mousedown.zf.tooltip",function(t){t.stopImmediatePropagation(),e.isClick||(e.isClick=!0,!e.options.disableHover&&e.$element.attr("tabindex")||e.isActive||e.show())}):this.$element.on("mousedown.zf.tooltip",function(t){t.stopImmediatePropagation(),e.isClick=!0}),this.options.disableForTouch||this.$element.on("tap.zf.tooltip touchend.zf.tooltip",function(t){e.isActive?e.hide():e.show()}),this.$element.on({"close.zf.trigger":this.hide.bind(this)}),this.$element.on("focus.zf.tooltip",function(n){return t=!0,e.isClick?(e.options.clickOpen||(t=!1),!1):void e.show()}).on("focusout.zf.tooltip",function(n){t=!1,e.isClick=!1,e.hide()}).on("resizeme.zf.trigger",function(){e.isActive&&e._setPosition()})}},{key:"toggle",value:function(){this.isActive?this.hide():this.show()}},{key:"destroy",value:function(){this.$element.attr("title",this.template.text()).off(".zf.trigger .zf.tooltip").removeClass("has-tip top right left").removeAttr("aria-describedby aria-haspopup data-disable-hover data-resize data-toggle data-tooltip data-yeti-box"),this.template.remove(),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={disableForTouch:!1,hoverDelay:200,fadeInDuration:150,fadeOutDuration:150,disableHover:!1,templateClasses:"",tooltipClass:"tooltip",triggerClass:"has-tip",showOn:"small",template:"",tipText:"",touchCloseText:"Tap to close.",clickOpen:!0,positionClass:"",vOffset:10,hOffset:12,allowHtml:!1},Foundation.plugin(t,"Tooltip")}(jQuery);var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();!function(e){var t=function(){function t(n,i){_classCallCheck(this,t),this.$element=e(n),this.options=e.extend({},this.$element.data(),i),this.rules=this.$element.data("responsive-accordion-tabs"),this.currentMq=null,this.currentPlugin=null,this.$element.attr("id")||this.$element.attr("id",Foundation.GetYoDigits(6,"responsiveaccordiontabs")),this._init(),this._events(),Foundation.registerPlugin(this,"ResponsiveAccordionTabs")}return _createClass(t,[{key:"_init",value:function(){if("string"==typeof this.rules){for(var t={},i=this.rules.split(" "),o=0;o<i.length;o++){var s=i[o].split("-"),a=s.length>1?s[0]:"small",r=s.length>1?s[1]:s[0];null!==n[r]&&(t[a]=n[r])}this.rules=t}this._getAllOptions(),e.isEmptyObject(this.rules)||this._checkMediaQueries()}},{key:"_getAllOptions",value:function(){var t=this;t.allOptions={};for(var i in n)if(n.hasOwnProperty(i)){var o=n[i];try{var s=e("<ul></ul>"),a=new o.plugin(s,t.options);for(var r in a.options)if(a.options.hasOwnProperty(r)&&"zfPlugin"!==r){var l=a.options[r];t.allOptions[r]=l}a.destroy()}catch(u){}}}},{key:"_events",value:function(){var t=this;e(window).on("changed.zf.mediaquery",function(){t._checkMediaQueries()})}},{key:"_checkMediaQueries",value:function(){var t,i=this;e.each(this.rules,function(e){Foundation.MediaQuery.atLeast(e)&&(t=e)}),t&&(this.currentPlugin instanceof this.rules[t].plugin||(e.each(n,function(e,t){i.$element.removeClass(t.cssClass)}),this.$element.addClass(this.rules[t].cssClass),this.currentPlugin&&(!this.currentPlugin.$element.data("zfPlugin")&&this.storezfData&&this.currentPlugin.$element.data("zfPlugin",this.storezfData),this.currentPlugin.destroy()),this._handleMarkup(this.rules[t].cssClass),this.currentPlugin=new this.rules[t].plugin(this.$element,{}),this.storezfData=this.currentPlugin.$element.data("zfPlugin")))}},{key:"_handleMarkup",value:function(t){var n=this,i="accordion",o=e("[data-tabs-content="+this.$element.attr("id")+"]");if(o.length&&(i="tabs"),i!==t){var s=n.allOptions.linkClass?n.allOptions.linkClass:"tabs-title",a=n.allOptions.panelClass?n.allOptions.panelClass:"tabs-panel";this.$element.removeAttr("role");var r=this.$element.children("."+s+",[data-accordion-item]").removeClass(s).removeClass("accordion-item").removeAttr("data-accordion-item"),l=r.children("a").removeClass("accordion-title");if("tabs"===i?(o=o.children("."+a).removeClass(a).removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby"),o.children("a").removeAttr("role").removeAttr("aria-controls").removeAttr("aria-selected")):o=r.children("[data-tab-content]").removeClass("accordion-content"),o.css({display:"",visibility:""}),r.css({display:"",visibility:""}),"accordion"===t)o.each(function(t,i){e(i).appendTo(r.get(t)).addClass("accordion-content").attr("data-tab-content","").removeClass("is-active").css({height:""}),e("[data-tabs-content="+n.$element.attr("id")+"]").after('<div id="tabs-placeholder-'+n.$element.attr("id")+'"></div>').remove(),r.addClass("accordion-item").attr("data-accordion-item",""),l.addClass("accordion-title")});else if("tabs"===t){var u=e("[data-tabs-content="+n.$element.attr("id")+"]"),d=e("#tabs-placeholder-"+n.$element.attr("id"));d.length?(u=e('<div class="tabs-content"></div>').insertAfter(d).attr("data-tabs-content",n.$element.attr("id")),d.remove()):u=e('<div class="tabs-content"></div>').insertAfter(n.$element).attr("data-tabs-content",n.$element.attr("id")),o.each(function(t,n){var i=e(n).appendTo(u).addClass(a),o=l.get(t).hash.slice(1),s=e(n).attr("id")||Foundation.GetYoDigits(6,"accordion");o!==s&&(""!==o?e(n).attr("id",o):(o=s,e(n).attr("id",o),e(l.get(t)).attr("href",e(l.get(t)).attr("href").replace("#","")+"#"+o)));var d=e(r.get(t)).hasClass("is-active");d&&i.addClass("is-active")}),r.addClass(s)}}}},{key:"destroy",value:function(){this.currentPlugin&&this.currentPlugin.destroy(),e(window).off(".zf.ResponsiveAccordionTabs"),Foundation.unregisterPlugin(this)}}]),t}();t.defaults={};var n={tabs:{cssClass:"tabs",plugin:Foundation._plugins.tabs||null},accordion:{cssClass:"accordion",plugin:Foundation._plugins.accordion||null}};Foundation.plugin(t,"ResponsiveAccordionTabs")}(jQuery),$(document).foundation();
\ No newline at end of file