@charset "UTF-8";
/***
 * Utilities
 *
 * Reusable functions, mixins, and helper classes.  Things like colors, vertical rhythm, and the .clear-fix helper are in this group.
 * > This directory of partials is also important because we’ll need to define global classes, mixins and styles that can be used anywhere and at any time.
 * >
 * >\- http://www.smashingmagazine.com/2013/08/other-interface-atomic-design-sass/
 */
@font-face {
	font-family: "icons";
	src: url("../fonts/icons.eot");
	src: url("../fonts/icons.eot?#iefix") format("eot"), url("../fonts/icons.woff2") format("woff2"), url("../fonts/icons.woff") format("woff"), url("../fonts/icons.ttf") format("truetype"), url("../fonts/icons.svg#icons") format("svg"); }

.icon-atoms:before, .icon-code:before, .icon-colors:before, .icon-copy:before, .icon-desktop:before, .icon-fonts:before, .icon-html:before, .icon-menu:before, .icon-molecules:before, .icon-organisms:before, .icon-phone:before, .icon-quarks:before, .icon-right-arrow:before, .icon-settings:before, .icon-tablet:before, .icon-utilities:before, .button--icon-settings:before, .button--icon-menu:before, .button--icon-phone:before, .button--icon-tablet:before, .button--icon-desktop:before, .button--icon-right-arrow:before, .button--icon-copy:before, [data-copy]:before, .section__title:before, .section__title--colors:before, .section__title--fonts:before, .section__title--quarks:before, .section__title--atoms:before, .section__title--molecules:before, .section__title--organisms:before, .section__title--settings:before, .section__title--utilities:before, .section__title--menu:before, .section__title--phone:before, .section__title--table:before, .section__title--desktop:before {
	font-family: "icons";
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	font-style: normal;
	font-variant: normal;
	font-weight: normal;
	text-decoration: none;
	text-transform: none; }

.icon-atoms:before {
	content: ""; }

.icon-code:before {
	content: ""; }

.icon-colors:before {
	content: ""; }

.icon-copy:before {
	content: ""; }

.icon-desktop:before {
	content: ""; }

.icon-fonts:before {
	content: ""; }

.icon-html:before {
	content: ""; }

.icon-menu:before {
	content: ""; }

.icon-molecules:before {
	content: ""; }

.icon-organisms:before {
	content: ""; }

.icon-phone:before {
	content: ""; }

.icon-quarks:before {
	content: ""; }

.icon-right-arrow:before {
	content: ""; }

.icon-settings:before {
	content: ""; }

.icon-tablet:before {
	content: ""; }

.icon-utilities:before {
	content: ""; }

/***
 * Strip Units
 *
 * Strips the units from a number
 *
 * scss:
 *   stripUnits($number);
 *
 * @param $number - value to strip the units from.
 */
/***
 * Pixels to Rems function
 *
 * Converts pixels to REMs so we can keep our units consistent.  Assumes 1rem is 16px (default for most browsers).
 *
 * scss:
 *   pxToRem($px[,$baseRem]);
 *
 * @param $px - unitless integer to convert to rems
 * @param $baseRem - pixels to count as one rem. Defaults to 16
 */
/***
 * Pixels to Ems function
 *
 * Converts pixels to EMs so we can keep our units consistent.  Assumes 1em is 16px, or you can pass a different base.
 *
 * scss:
 *   pxToEm($px[,$base]);
 *
 * @param $px - unitless integer to convert to rems
 * @param $base - pixels to count as one em. Defaults to 16
 */
/***
 * Square Root Function
 *
 * Gets the square root of a number (within a margin of error)
 *
 * Useful for diagonal/Pythagorean stuff.
 *
 * scss:
 *   sqrt($num)
 *
 * @param $num - number to get square root of
 */
/***
 * Power / Exponent Function
 *
 * Raises a number to a certain power. Supports integers and .5s as the exponent.
 *
 * Useful for diagonal/Pythagorean stuff.
 *
 * scss:
 *   pow($base, $exponent)
 *
 * @param $base - number to get square root of
 * @param $exponent - exponent to raise the base number to
 */
/***
 * Modular Scale Function
 *
 * Determines a size from a base, multiple, and scale factor.
 *
 * scss:
 *   font-size: modularScale(16, 3, 1.5); // 36
 */
/***
 * Aspect Ratio
 *
 * Gets padding for correct aspect ratio, and sets height to 0.
 *
 * scss:
 *   @include aspect-ratio($width, $height)
 *
 * @param {Number} $width - comparative width of the ratio. The 'x' in x:y
 * @param {Number} $height - comparative height of the ratio. The 'y' in x:y
 */
/***
 * Quantity Query
 *
 * Mixins to allow styles to be set based on at-least, at-most, and exactly `n`
 * number of an element.
 *
 * scss:
 *   @include qqAtLeast ($n) {
 *     @content;
 *   }
 *  
 *   @include qqAtMost ($n) {
 *     @content;
 *   }
 *  
 *   @include qqExactly ($n) {
 *     @content;
 *   }
 *
 * @param $n - how many elements to query against
 * @param @content - the styles to apply to it
 */
/***
 * Mod Query
 *
 * A damn clever way to select elements when the number of children is divisible
 * by a given integer. As opposed to the absolute [Quantity Query](#/utilities/mixins/quantity-query),
 * this selects when `children % n = 0`, or if a remainder is also passed, when
 * `children % n = remainder`.
 *
 * Gleefully stolen from Patrick Clancey's article: http://alistapart.com/article/using-css-mod-queries-with-range-selectors
 *
 * @param $divisibleBy
 * @param $remainder
 * @param $selector - string passed that represents selector for siblings
 *
 * scss:
 *   @include selectRange(5,9) {
 *     // things you want only items 5 - 9 to do
 *   }
 *   @include modQuery(3, 0, '.custom-selector') {
 *     // things you want all .custom-selectors in a given parent to do
 *     // when their total number is divisible by 3
 *   }
 *   @include modFirst(3, 1) {
 *     // things you want the first element to do when the total number of
 *     // children matches n % 3 == 1
 *   }
 */
/***
 * Media Queries
 *
 * Defines our default breakpoints.  Assumes mobile-first code, but supports not
 * by passing your breakpoint to the alternate mixin: `mq-lt`. Don't worry about
 * having a ton of these, since the minification process will combine them.
 *
 * There's also a separate mixin each for `portrait` and `landscape` orientations.
 *
 * scss:
 *   @include mq($breakpoint) {
 *     @content;
 *   }
 *   @include portrait {
 *     @content;
 *   }
 *   @include landscape {
 *     @content;
 *   }
 *
 * @param $breakpoint - what size you'd like to target larger than. A few have been pre-defined.
 * @param @content - the content to put in the media query
 */
/***
 *  Clear Fix
 *
 *  Clears all floats inside this element by using the `::after` pseudo-element.
 *
 *  scss:
 *    @include clear-fix;
 *    // or
 *    @extend %clear-fix;
 */
.button-group::after, .section::after, .section__inner::after, .component::after, .palette::after {
	content: '';
	display: table;
	clear: both; }

/***
 * Grid
 *
 * Our super simple custom grid system. Just include the mixin `gridContainer`
 * to set max-width = $max-width + $gutter. For internal stuff, use
 * `subgridContainer` to automatically offset the margins on the container if
 * needed, and `colspan` on the actual column.  By default, assumes 12 columns
 * and a 2 * $wr gutter, but those can be overridden for more complex layouts.
 * It spits out styles wherever it is called, so you can define different
 * columns or even entirely different grids within media queries.
 *
 * There's also a colpush mixin to shift an element to the right by a number of columns.
 *
 * Remember, variables wrapped in `[]` in the example are optional.
 *
 * scss:
 *   @include gridContainer ([$gutter]);
 *   @include subgridContainer ([$gutter]);
 *   @include colspan ($span[, $total[, $gutter]]);
 *   @include colpush ($span[, $total[, $gutter]]);
 *
 * @param {int} $span - number of columns to span
 * @param {int} $total - number of total columns the grid has
 * @param {number w/ unit} $gutter - width of the gutters between columns
 */
/*
* Hide only visually, but have it available for screen readers:
* http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
*/
.visuallyhidden {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
	/*
  * Extends the .visuallyhidden class to allow the element
  * to be focusable when navigated to via the keyboard:
  * https://www.drupal.org/node/897638
  */ }
	.visuallyhidden.focusable:focus, .visuallyhidden.focusable:active {
		clip: auto;
		height: auto;
		margin: 0;
		overflow: visible;
		position: static;
		width: auto; }

*, *::before, *::after {
	box-sizing: inherit; }

/**
 * Settings
 *
 * Global settings and variables. This defines global site wide things like
 * colors and fonts.
 */
/***
 * Visual Rhythm
 *
 * Variables to maintain a standard visual rhythm both vertically and horizontally.
 *
 * Also, there's a function for returning the next multiple of vertical rhythm
 * above a given number.
 *
 * @param {Number} $base - number to find next multiple above.
 * @param {optional, Number} $rhythm - number that's multiplied until it's larger than `$base`. Equal to `$vr` if omitted.
 *
 * scss:
 *   line-height: multipleAbove(30, 14); // 3;
 */
/***
 * Colors
 *
 * These colors define the look of the guide itself, _not_ anything within the examples.
 *
 * path: .
 */
/***
 * Primary Palette
 *
 * The main colors used for the Autoguide template.  By default, these colors get
 * reused for the more detailed palette.
 *
 * Note to learners: these variable names are less than stellar.  They're kept
 * intentionally vague, because of their wide application.
 *
 * path: ./colors
 * order: 0
 * template: color
 */
/***
 * Detailed Palette
 *
 * These are the colors that will actually appear throughout the generated guide.
 * Altering these will grant a very fine level of control over components.
 *
 * The colors titled `$background-*` are used directly as the background property
 * for their given element, so you can replace them with anything that could apply
 * there.  For example: `$background-header: url(https://morbotron.com/img/S03E06/1053451.jpg) center center no-repeat`.
 *
 * path: ./colors
 * order: 1
 * template: color
 */
/***
 * Code Colors
 *
 * These are the color variables that can be overridden for code blocks.
 *
 * template: color
 * path: ./molecules/code block
 */
/***
 * Fonts
 *
 * The font families used throughout the guide.  These can be overridden just like
 * colors.  If you need to load a webfont, you can do so in your `sassPrepend` file
 * using `@import`.
 *
 * template: font
 * path: ./
 */
/***
 *  Type Scale mixins
 *
 *  Created using a modular scale. Factor is 1.4. This means, starting at a base
 *  of `20px`, the next size up (`h3`) is `20 * 1.4 = 28`. To simplify this, the
 *  math is handled by the [`modularScale`](#/utilities/functions/modularScale)
 *  function.
 *
 *  Additionally, `h4` splits between body and `h3`, while `small` is an
 *  arbitrary size.
 *
 *  scss:
 *    @include h1;
 *    @include h2;
 *    @include h3;
 *    @include h4;
 *    @include body;
 *    @include small;
 */
/***
 * Quarks
 *
 * Element level styles meant to apply globally.  These define what elements look like if no class is applied to them.  Effectively our site specific _normalize.css_.
 * > Note that these files contain only the default styles for these elements, not modified elements. For example, if we have a table that looks and works entirely differently from the default tables used throughout the website, it would not be a quark.
 * >
 * >\- http://www.smashingmagazine.com/2013/08/other-interface-atomic-design-sass/
 */
html {
	padding: 0;
	margin: 0;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale; }

body {
	font-family: "Lato", sans-serif;
	font-size: 1.25rem;
	line-height: 2rem;
	font-weight: 300;
	margin: 0;
	padding: 0;
	background: #fff;
	color: #333; }

/***
 * Typography
 *
 * Default text styles.
 *
 * html:
 *   <h1>Heading Level 1</h1>
 *   <h2>Heading Level 2</h2>
 *   <h3>Heading Level 3</h3>
 *   <h4>Heading Level 4</h4>
 *   <p>Unde quo, minus eaque eligendi cum tempore, nulla, accusamus est labore tenetur modi eveniet obcaecati voluptas eius vitae vero dolorem nobis culpa nihil. Itaque saepe suscipit odit fugit quidem culpa.</p>
 *   <p>Accusantium recusandae, dignissimos rerum quaerat voluptatem quis itaque deleniti sequi autem explicabo dolore delectus, doloremque eos. Accusantium<sup>sup</sup> recusandae<sub>sub</sub> eius, debitis voluptates adipisci aspernatur rem voluptatum, delectus, tempore accusantium dolorum cumque error.</p>
 */
h1, .h1 {
	font-size: 3.43rem;
	line-height: 4rem;
	font-family: "Droid Serif", serif;
	weight: 400;
	margin: 0; }

h2, .h2 {
	font-size: 2.45rem;
	line-height: 3rem;
	font-family: "Droid Serif", serif;
	weight: 400;
	margin: 0; }

h3, .h3 {
	font-size: 1.75rem;
	line-height: 2rem;
	font-family: "Droid Serif", serif;
	weight: 400;
	margin: 0; }

h4, .h4 {
	font-size: 1.47903rem;
	line-height: 2rem;
	font-family: "Droid Serif", serif;
	weight: 400;
	margin: 0; }

h5, .h5, h6, .h6 {
	font-size: 1.25rem;
	line-height: 2rem;
	font-family: "Droid Serif", serif;
	weight: 400;
	margin: 1rem 0 0; }

p {
	margin: 1rem auto; }

strong {
	font-weight: 700; }

em {
	font-style: italic; }

/***
 * Links
 *
 * html:
 *   <a href="#">Simple Default Link</a>
 */
a {
	color: #046C6F;
	transition: color 0.15s;
	text-decoration: none;
	font-weight: 600; }
	a:hover {
		color: #11c1c4; }

/**
 *  Image Resets
 */
img {
	display: inline-block;
	max-width: 100%;
	border: none; }

/**
 * Hide the overflow in IE.
 */
svg:not(:root) {
	overflow: hidden; }

[src$='svg'] {
	width: auto;
	height: auto; }

/***
 * Horizontal Rule
 *
 * html:
 *   <hr>
 */
hr {
	display: block;
	width: auto;
	margin: 3rem 3rem;
	border: none;
	height: 1px;
	background: #e9eaf0; }
	@media only screen and (min-width: 45.625em) {
		hr {
			margin: 3rem 6rem; } }

/***
 *  Lists
 *
 *  html:
 *    <ul>
 *      <li>Lorem ipsum dolor sit amet</li>
 *      <li>Minima recusandae adipisci quidem</li>
 *      <li>Amet eum non animi soluta</li>
 *      <li>Saepe commodi nesciunt quaerat quae minima</li>
 *    </ul>
 *    <ol>
 *      <li>Lorem ipsum dolor sit amet</li>
 *      <li>Minima recusandae adipisci quidem</li>
 *      <li>Amet eum non animi soluta</li>
 *      <li>Saepe commodi nesciunt quaerat quae minima</li>
 *    </ol>
 */
ul, ol {
	margin: 2rem 0;
	padding-left: 2rem; }

li {
	margin: 1rem 0; }

/***
 * Blockquote
 *
 * Inset with a left border.
 *
 * html:
 *   <blockquote>
 *     <p>"Some content that's a quote."</p>
 *   </blockquote>
 */
blockquote {
	margin: 1rem 0;
	padding: 0 0 0 0.75rem;
	border-left: 0.25rem solid #e9eaf0; }

/***
 * Table
 *
 * html:
 *   <table>
 *     <tr>
 *       <th>Lorem</th>
 *       <td>Ipsum</td>
 *       <td>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Esse
 *          perspiciatis vitae sunt, magnam blanditiis unde velit quis perferendis
 *          iure ut excepturi tempora eos autem accusamus amet et, non? Distinctio,
 *          eaque.</td>
 *     </tr>
 *     <tr>
 *       <th>Sit</th>
 *       <td>Amet</td>
 *       <td>Lorem</td>
 *     </tr>
 *     <tr>
 *       <th>Ipsum</th>
 *       <td>Dolor</td>
 *       <td>Sit</td>
 *     </tr>
 *   </table>
 */
table {
	display: table;
	width: 100%;
	box-sizing: border-box;
	border-collapse: collapse; }

tr {
	border-top: 1px solid #e9eaf0;
	border-bottom: 1px solid #e9eaf0; }

th, td {
	text-align: left;
	padding: 0.5rem 1rem;
	vertical-align: top; }
	@media only screen and (max-width: 45.615em) {
		th, td {
			display: block; } }

/***
 *  Code
 *
 *  `<code>` elements. Uses `$font-mono`.
 *
 *  html:
 *    <code>this.is_some("code")</code>
 */
code {
	font-family: "Source Code Pro", monospace; }

/***
 * Input
 *
 * Standard input element.
 *
 * html:
 *   <input type="text">
 */
input {
	display: block;
	width: 100%;
	padding: 0 0.5rem;
	box-sizing: border-box;
	background: transparent;
	border: 1px solid #e9eaf0;
	font-size: 1.25rem;
	line-height: 2rem;
	font-family: "Source Code Pro", monospace; }
	input:focus {
		border-color: #046C6F; }

/***
 * Atoms
 *
 * These are the smallest level of styles that merit a class.  Examples are buttons, icons, and text variations like disclaimers.
 * > The styles in an atom should almost never be attached to an HTML element itself; we might not be able to guarantee what the markup will look like in the future. Specifying a class instead is always safer.
 * >
 * >\- http://www.smashingmagazine.com/2013/08/other-interface-atomic-design-sass/
 */
/***
 *  File Path
 *
 *  Light text showing where to find the element being described.
 *
 *  html:
 *    <p class="file-path">./dev/scss/super/_awesome-file.scss</p>
 */
.file-path {
	font-size: 0.875rem;
	line-height: 1rem;
	font-family: "Source Code Pro", monospace;
	margin: 0;
	color: rgba(51, 51, 51, 0.5); }

/***
 *  Color Swatch
 *
 *  Just a big block of color.
 *
 *  html:
 *    <div class="swatch"></div>
 *
 *  @default .swatch--light
 */
.swatch {
	min-height: 8rem;
	background: #046C6F; }

/***
 *  Font Sample
 *
 *  Shows the first font found in the font stack of variables in a file named fonts.scss.
 *
 *  html:
 *    <div class="font-sample">
 *      <span class="font-sample__var-name">$my-font</span>
 *      <span class="font-sample__value" style="font-family: 'Times New Roman', serif;">
 *        Times New Roman
 *      </span>
 *    </div>
 */
.font-sample {
	margin: 2rem auto; }

.font-sample__var-name {
	font-family: "Source Code Pro", monospace;
	display: block; }

.font-sample__value {
	font-size: 2.45rem;
	line-height: 3rem; }

/***
 *  Button
 *
 *  Basic button, and its variations.
 *
 *  @modifier .button--small
 *  @modifier .button--icon-phone
 *
 *  html:
 *    <a class="button">Click Here, Dummy</a>
 *
 *  template: html
 */
.button {
	font-size: 1.25rem;
	line-height: 2rem;
	position: relative;
	display: inline-block;
	padding: 0.5rem 1rem;
	border: 1px solid #046C6F;
	border-radius: 0.25rem;
	cursor: pointer;
	transition: all .3s;
	color: #046C6F;
	background: #fff; }
	.button:hover {
		border-color: #11c1c4;
		box-shadow: inset 0 0 1rem rgba(4, 108, 111, 0.25);
		color: #11c1c4; }
	.button--icon-settings {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-settings:before {
			content: ""; }
		.button--icon-settings::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-menu {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-menu:before {
			content: ""; }
		.button--icon-menu::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-phone {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-phone:before {
			content: ""; }
		.button--icon-phone::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-tablet {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-tablet:before {
			content: ""; }
		.button--icon-tablet::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-desktop {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-desktop:before {
			content: ""; }
		.button--icon-desktop::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-right-arrow {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-right-arrow:before {
			content: ""; }
		.button--icon-right-arrow::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }
	.button--icon-copy {
		padding-left: calc(1.5em + 1rem); }
		.button--icon-copy:before {
			content: ""; }
		.button--icon-copy::before {
			position: absolute;
			top: 50%;
			left: 1rem;
			transform: translateY(-50%); }

.button--small {
	font-size: 0.875rem;
	line-height: 1rem;
	padding: 0.25rem 0.5rem; }
	.button--small::before {
		left: 0.5rem; }

/***
 * Copyable element
 *
 * Element that, when clicked, copies a string to the user's clipboard.
 *
 * When hovered, an icon appears. It jumps when the user clicks (thus getting the copy).
 *
 * html:
 *   <span data-copy="Copy Me!">Click to "Copy Me"</span>
 */
[data-copy] {
	cursor: copy; }
	[data-copy]:before {
		content: ""; }
	[data-copy]::before {
		display: inline-block;
		width: 0;
		vertical-align: bottom;
		opacity: 0;
		transform: translateX(-0.25em);
		transition: opacity 0.15s linear, transform 0.15s ease-in;
		color: #046C6F; }
	[data-copy]:hover::before {
		opacity: 1;
		transform: translateX(-1em);
		transition-timing-function: ease-out; }
	[data-copy]:active::before {
		transform: translateY(-15%);
		transition-duration: 0s; }

/***
 * Attribute
 *
 * A parameter, method, or other array-like bit of info for a component.
 *
 * Assumes it's part of an [Attribute List](#/molecules/attribute-list).
 *
 * html:
 *   <dt class="attribute-list__term">
 *     <span class="attribute__type">DOMElement</span>
 *     <span class="attribute__name">makeInput()</span>
 *   </dt>
 *   <dd class="attribute-list__description">
 *     <div class="attribute__description">
 *       <p>internal function to make the input from which the string will be copied.</p>
 *     </div>
 *   </dd>
 *
 * wrap: dl.attribute-list
 */
.attribute__type {
	font-family: "Source Code Pro", monospace;
	font-size: 0.875rem;
	line-height: 1rem;
	margin-right: 1rem;
	color: rgba(51, 51, 51, 0.5);
	font-style: italic; }

.attribute__name {
	font-family: "Source Code Pro", monospace;
	font-weight: bold; }

.attribute__description > :first-child {
	margin-top: 0; }

/***
 * Molecules
 *
 * Structures which combine multiple elements to create a coherent piece. A header with an image and headline, or a nav dropdown containing numerous links, for example.
 * > This is where we can combine multiple quarks and atoms, without interfering with any of our global styles.
 * >
 * >\- http://www.smashingmagazine.com/2013/08/other-interface-atomic-design-sass/
 */
/***
 *  Main Nav
 *
 *  html:
 *    <nav class="nav-main">
 *      <ul class="nav-main__list">
 *        <li class="nav-main__item"><a class="nav-main__link" href="#/colors">Colors</a></li>
 *        <li class="nav-main__item"><a class="nav-main__link" href="#/fonts">Fonts</a></li>
 *        <li class="nav-main__item">
 *          <a href="#/quarks" class="nav-main__link">Quarks</a>
 *          <ul class="nav-main__subnav">
 *            <li class="nav-main__item">
 *              <a href="#/quarks/blockquote" class="nav-main__link">Blockquote</a>
 *            </li>
 *            <li class="nav-main__item">
 *              <a href="#/quarks/code" class="nav-main__link">Code</a>
 *            </li>
 *          </ul>
 *        </li>
 *        <li class="nav-main__item">
 *          <a href="#/atoms" class="nav-main__link">Atoms</a>
 *        </li>
 *      </ul>
 *    </nav>
 */
.nav-main {
	max-height: 100%;
	padding: 2rem 1rem;
	overflow: auto;
	overflow: -moz-scrollbars-none; }
	.nav-main::-webkit-scrollbar {
		width: 0.25rem; }
	.nav-main__list {
		margin: 0;
		padding: 0;
		list-style-type: none; }
	.nav-main__item {
		margin: 0; }
	.nav-main__subnav {
		font-size: 0.875rem;
		line-height: 1rem;
		margin: 0;
		padding: 0;
		list-style-type: none; }
		.nav-main__subnav .nav-main__link {
			padding-left: 1rem; }
		.nav-main__subnav .nav-main__subnav .nav-main__link {
			padding-left: 2rem; }
		.nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__link {
			padding-left: 3rem; }
		.nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__link {
			padding-left: 4rem; }
		.nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__subnav .nav-main__link {
			padding-left: 5rem; }
	.nav-main__link {
		display: block;
		position: relative; }

/***
 * Button Group
 *
 * Group of buttons with similar functions.
 *
 * Uses sexy-ass [mod queries](#/utilities/mixins/mod-query) to size buttons based
 * on whether the number is divisible by 2 or 3.
 *
 * html:
 *   <div class="button-group">
 *     <button class="button button-group__button">Button 1</button>
 *     <button class="button button-group__button">Button 2</button>
 *     <button class="button button-group__button">Button 3</button>
 *     <button class="button button-group__button">Button 4</button>
 *   </div>
 *
 *   <div class="button-group">
 *     <button class="button button-group__button">Button 1</button>
 *     <button class="button button-group__button">Button 2</button>
 *     <button class="button button-group__button">Button 3</button>
 *     <button class="button button-group__button">Button 4</button>
 *     <button class="button button-group__button">Button 5</button>
 *     <button class="button button-group__button">Button 6</button>
 *   </div>
 *
 *   <div class="button-group">
 *     <button class="button button-group__button">Button 1</button>
 *     <button class="button button-group__button">Button 2</button>
 *     <button class="button button-group__button">Button 3</button>
 *     <button class="button button-group__button">Button 4</button>
 *     <button class="button button-group__button">Button 5</button>
 *   </div>
 */
.button-group {
	margin: 1rem 0;
	display: -ms-flexbox;
	display: flex;
	-ms-flex-wrap: wrap;
	    flex-wrap: wrap; }
	.button-group__button {
		float: left;
		display: block;
		box-sizing: border-box;
		width: 100%;
		border-radius: 0;
		border-top-width: 0;
		-ms-flex-negative: 0;
		    flex-shrink: 0; }
		.button-group__button:first-child {
			border-top-left-radius: 0.25rem;
			border-top-right-radius: 0.25rem;
			border-top-width: 1px; }
		.button-group__button:last-child {
			border-bottom-left-radius: 0.25rem;
			border-bottom-right-radius: 0.25rem; }
		.button-group__button:nth-last-child(2n+0):first-child,
		.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button {
			width: 50%; }
			.button-group__button:nth-last-child(2n+0):first-child:first-child,
			.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button:first-child {
				border-top-right-radius: 0; }
			.button-group__button:nth-last-child(2n+0):first-child:nth-child(2),
			.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button:nth-child(2) {
				border-top-right-radius: 0.25rem;
				border-top-width: 1px; }
			.button-group__button:nth-last-child(2n+0):first-child:nth-child(2n),
			.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button:nth-child(2n) {
				border-left-width: 0; }
			.button-group__button:nth-last-child(2n+0):first-child:nth-last-child(2),
			.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button:nth-last-child(2) {
				border-bottom-left-radius: 0.25rem; }
			.button-group__button:nth-last-child(2n+0):first-child:last-child,
			.button-group__button:nth-last-child(2n+0):first-child ~ .button-group__button:last-child {
				border-bottom-left-radius: 0; }
		.button-group__button:nth-last-child(3n+0):first-child,
		.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button {
			width: 33.33333%; }
			.button-group__button:nth-last-child(3n+0):first-child:first-child,
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:first-child {
				border-top-right-radius: 0; }
			.button-group__button:nth-last-child(3n+0):first-child:nth-child(2),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-child(2) {
				border-top-width: 1px; }
			.button-group__button:nth-last-child(3n+0):first-child:nth-child(3),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-child(3) {
				border-top-right-radius: 0.25rem;
				border-top-width: 1px; }
			.button-group__button:nth-last-child(3n+0):first-child:nth-child(2n),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-child(2n) {
				border-left-width: 1px; }
			.button-group__button:nth-last-child(3n+0):first-child:nth-child(3n), .button-group__button:nth-last-child(3n+0):first-child:nth-child(3n-1),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-child(3n),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-child(3n-1) {
				border-left-width: 0; }
			.button-group__button:nth-last-child(3n+0):first-child:nth-last-child(3),
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:nth-last-child(3) {
				border-bottom-left-radius: 0.25rem; }
			.button-group__button:nth-last-child(3n+0):first-child:last-child,
			.button-group__button:nth-last-child(3n+0):first-child ~ .button-group__button:last-child {
				border-bottom-left-radius: 0; }

/***
 * Color Sample
 *
 * A swatch and variable name + color value combo molecule. JS also makes the
 * variable name and value copyable with a click.
 *
 * @default .color--light
 * @modifier .color--dark - when a color's luminosity is < 55%.
 *
 * html:
 *   <div class="color">
 *     <div class="swatch" style="background-color: #f13b0c;"></div>
 *     <div class="color__details">
 *       <span class="color__var-name js-copyable" data-copy="$my-color">$my-color</span>
 *       <span class="color__value js-copyable" data-copy="#F13B0C">#F13B0C</span>
 *     </div>
 *   </div>
 */
.color {
	position: relative; }
	.color .swatch {
		width: 100%;
		height: 100%; }
	.color__details {
		position: absolute;
		right: 0;
		bottom: 0;
		left: 0;
		padding: 1rem 1rem;
		text-align: right; }
	.color__var-name {
		font-family: "Source Code Pro", monospace;
		display: block; }
	.color__value {
		display: block; }
	.color--dark {
		color: white; }
		.color--dark [data-copy]::before {
			color: white; }

.hljs-comment {
	color: rgba(51, 51, 51, 0.5);
	font-style: italic; }

.hljs-quote {
	color: rgba(51, 51, 51, 0.5);
	font-style: italic; }

.hljs-keyword {
	color: #333;
	font-weight: bold; }

.hljs-selector-tag {
	color: #333;
	font-weight: bold; }

.hljs-subst {
	color: #333; }

.hljs-number {
	color: #11c1c4; }

.hljs-literal {
	color: #11c1c4; }

.hljs-variable {
	color: #11c1c4; }

.hljs-template-variable {
	color: #11c1c4; }

.hljs-tag .hljs-attr {
	color: #11c1c4; }

.hljs-string {
	color: #186cbf; }

.hljs-doctag {
	color: #186cbf; }

.hljs-title {
	color: #14477a;
	font-weight: bold; }

.hljs-section {
	color: #14477a;
	font-weight: bold; }

.hljs-selector-id {
	color: #14477a;
	font-weight: bold; }

.hljs-type {
	color: #046C6F;
	font-weight: bold; }

.hljs-class .hljs-title {
	color: #046C6F;
	font-weight: bold; }

.hljs-tag {
	color: #03595b;
	font-weight: normal; }

.hljs-name {
	color: #03595b;
	font-weight: normal; }

.hljs-attribute {
	color: #03595b;
	font-weight: normal; }

.hljs-regexp {
	color: #14477a; }

.hljs-link {
	color: #14477a; }

.hljs-symbol {
	color: #113d68; }

.hljs-bullet {
	color: #113d68; }

.hljs-built_in {
	color: #046C6F; }

.hljs-builtin-name {
	color: #046C6F; }

.hljs-meta {
	color: rgba(51, 51, 51, 0.5);
	font-weight: bold; }

.hljs-deletion {
	background: #fdd; }

.hljs-addition {
	background: #dfd; }

.hljs-emphasis {
	font-style: italic; }

.hljs-strong {
	font-weight: bold; }

/***
 * Code Block
 *
 * A (usually) collapsable block of code. Colors are from a [unique palette](#/molecules/code-block/code-colors).
 * To see how the collapsable part works, check it out in its [JS section](#/app/collapsable).
 *
 * html:
 *   <div class="code-block js-collapsable is-open">
 *     <div class="code-block__header collapsable__toggle js-collapsable__toggle">
 *       <h6>HTML</h6>
 *     </div>
 *     <pre class="code-block__pre collapsable__content js-collapsable__content"><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">header</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"header-main"</span>&gt;</span>
 *     <span class="hljs-tag">&lt;<span class="hljs-name">h1</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"header-main__title"</span>&gt;</span>Autoguide<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
 *   <span class="hljs-tag">&lt;/<span class="hljs-name">header</span>&gt;</span></code></pre>
 *   </div>
 */
.code-block {
	border: 0.25rem solid #e9eaf0; }
	.code-block__header {
		padding: 0 1rem;
		margin: 0; }
		.code-block__header h6 {
			margin: 0; }
	.code-block__pre {
		margin: 0;
		padding: 0;
		background: #e9eaf0;
		color: #333;
		overflow: auto; }
		.code-block__pre > code {
			display: block;
			padding: 1rem 1rem; }

/***
 * Attribute List
 *
 * A nestable list of attributes.
 *
 * html:
 *   <dl class="attribute-list attribute-list--methods">
 *     <h6 class="attribute-list__title">Methods</h6>
 *     <dt class="attribute-list__term">
 *       <span class="attribute__type">void</span>
 *       <span class="attribute__name">toggleGrid()</span>
 *     </dt>
 *     <dd class="attribute-list__description">
 *       <div class="attribute__description">
 *         <p>adds/removes the 'show-grid' class to the  element so we can show a grid overlay</p>
 *       </div>
 *     </dd>
 *     <dt class="attribute-list__term">
 *       <span class="attribute__type">void</span>
 *       <span class="attribute__name">setWidth(width)</span>
 *     </dt>
 *     <dd class="attribute-list__description">
 *       <div class="attribute__description">
 *         <p>sets the width of the iframe, useful for showing media queries</p>
 *       </div>
 *       <dl class="attribute-list attribute-list--parameters">
 *         <h6 class="attribute-list__title">Parameters</h6>
 *         <dt class="attribute-list__term">
 *           <span class="attribute__type">int</span>
 *           <span class="attribute__name">width</span>
 *         </dt>
 *         <dd class="attribute-list__description">
 *           <div class="attribute__description">
 *             <p>width in pixels. Resets to default size if falsy</p>
 *           </div>
 *         </dd>
 *       </dl>
 *     </dd>
 *   </dl>
 */
.attribute-list {
	padding: 0 1rem; }
	.attribute-list__title {
		font-size: 0.875rem;
		line-height: 1rem; }
	.attribute-list__description {
		margin-left: 2rem; }
		.attribute-list__description .attribute-list {
			padding: 0; }

/***
 * Organisms
 *
 * These are big things that combine everything smaller.  An entire form containing molecules of labels with inputs, or the global site header, for example.
 * > Organisms are groups of molecules joined together to form a relatively complex, distinct section of an interface.
 * >
 * >\- http://bradfrost.com/blog/post/atomic-web-design/#organisms
 */
/***
 *  Section
 *
 *  The main sections of the guide.  Modifiers would define variations.
 *
 *  html:
 *    <section class="section {{ modifier }}">
 *      <div class="section__inner">
 *        <header class="section__header">
 *          <h4>This is a Section</h4>
 *        </header>
 *        <div class="section__description"><p>The info here is <em>super</em> important!</p></div>
 *      </div>
 *    </section>
 *
 *  wrap: [style="background: #a99"]
 */
.section {
	margin: 8rem auto;
	position: relative;
	overflow: hidden; }
	.section--depth-1 {
		margin-top: 12rem; }

.section__inner {
	max-width: 65.75rem;
	margin-left: auto;
	margin-right: auto;
	padding: 0 1rem;
	margin: 0 auto;
	box-sizing: border-box; }
	.section--depth-2 .section__inner {
		padding-left: 2rem; }
	.section--depth-3 .section__inner {
		padding-left: 3rem; }
	.section--depth-4 .section__inner {
		padding-left: 4rem; }
	.section--depth-5 .section__inner {
		padding-left: 5rem; }

.section__sub-elements {
	position: relative;
	padding-top: 4rem;
	margin-top: 2rem; }
	.section__sub-elements::before {
		content: '';
		position: absolute;
		top: 0;
		bottom: 0;
		margin: 0 auto;
		width: 63.75rem;
		max-width: 100%;
		border-left: 1px solid #e9eaf0;
		transform: translateX(-50%);
		pointer-events: none; }
	.section__sub-elements > .section:first-child {
		margin-top: 0; }
	.section__sub-elements > .section:last-child {
		margin-bottom: 0; }
	.section__sub-elements .section__title::before {
		display: none; }
	.section--depth-1 .section__sub-elements::before {
		left: calc(50% + 0rem); }
	.section--depth-2 .section__sub-elements::before {
		left: calc(50% + 1rem); }
	.section--depth-3 .section__sub-elements::before {
		left: calc(50% + 2rem); }
	.section--depth-4 .section__sub-elements::before {
		left: calc(50% + 3rem); }
	.section--depth-5 .section__sub-elements::before {
		left: calc(50% + 4rem); }

.section__title {
	position: relative; }
	.section__title::before {
		position: absolute;
		right: 100%;
		top: 0;
		vertical-align: top;
		margin-right: 1rem; }
	.section__title:before {
		content: ""; }

.section__title--colors:before {
	content: ""; }

.section__title--fonts:before {
	content: ""; }

.section__title--quarks:before {
	content: ""; }

.section__title--atoms:before {
	content: ""; }

.section__title--molecules:before {
	content: ""; }

.section__title--organisms:before {
	content: ""; }

.section__title--settings:before {
	content: ""; }

.section__title--utilities:before {
	content: ""; }

.section__title--menu:before {
	content: ""; }

.section__title--phone:before {
	content: ""; }

.section__title--table:before {
	content: ""; }

.section__title--desktop:before {
	content: ""; }

/***
 * Main Header
 *
 * The main header of the styleguide.
 *
 * Makes use of `$background-header` and `$text-header` with the `super` sizing.
 * Background size is set to `cover` in case you want to override `$background-header`
 * with an image.
 *
 * html:
 *   <header class="header-main">
 *     <h1 class="header-main__title">Autoguide</h1>
 *   </header>
 *
 * fullWidth: true
 */
.header-main {
	padding: 12rem 2rem 3rem;
	background: #046C6F;
	background-size: cover; }
	.header-main__inner {
		margin: 0 auto;
		max-width: 63.75rem; }
	.header-main__title {
		font-size: 3.43rem;
		line-height: 4rem;
		font-family: "Droid Serif", serif;
		weight: 400;
		margin: 0;
		color: white; }
		@media only screen and (min-width: 45.625em) {
			.header-main__title {
				font-size: 4.802rem;
				line-height: 5rem; } }

/***
 * Main Footer
 *
 * Just a quick signoff.
 *
 * html:
 *    <footer class="footer-main">
 *      <p>Created using <a href="https://github.com/jhereg00/autoguide" target="_blank">Autoguide</a>.</p>
 *    </footer>
 *
 * fullWidth: true
 */
.footer-main {
	font-size: 0.875rem;
	line-height: 1rem;
	padding: 1rem 1rem;
	background: #66676a;
	color: white; }
	.footer-main a {
		text-decoration: underline;
		color: inherit; }

/***
 *  Controls
 *
 *  Buttons that handle certain guide-level features.
 *
 *  html:
 *    <div class="controls">
 *      <div class="controls__group controls__group--sample-size">
 *        <h5 class="controls__group-header">Sample Size</h5>
 *        <div class="input-text">
 *          <input type="number" name="sampleSize" id="sampleSize">
 *        </div>
 *        <div class="button-group">
 *          <button class="button button--small button--ison-phone button-group__button js-update-input" value="320">
 *            <span class="button__text">320px</span>
 *          </button>
 *          <button class="button button--small button--ison-tablet button-group__button js-update-input" value="768">
 *            <span class="button__text">768px</span>
 *          </button>
 *          <button class="button button--small button--ison-desktop button-group__button js-update-input" value="1200">
 *            <span class="button__text">1200px</span>
 *          </button>
 *          <button class="button button--small button-group__button js-update-input" value="">
 *            <span class="button__text">Default</span>
 *          </button>
 *        </div>
 *      </div>
 *    </div>
 */
.controls {
	padding: 1rem 1rem; }
	.controls__group + .controls__group {
		margin-top: 1rem;
		border-top: 1px solid #e9eaf0; }

/***
 *  Controls/Nav Tray
 *
 *  A fold-away thingy with tiers that can open/close.
 *
 *  html:
 *    <div class="tray">
 *      <div class="tray__tier">
 *        <a class="tray__opener"></a>
 *        <h4>Tier 1</h4>
 *      </div>
 *      <div class="tray__tier">
 *        <a class="tray__opener"></a>
 *        <h4>Tier 2</h4>
 *      </div>
 *    </div>
 *
 *  wrap: [style="height: 200px"]
 */
.tray {
	position: fixed;
	top: 0;
	left: 0;
	z-index: 9999999; }
	.tray + * {
		transition: margin-left 0.6s cubic-bezier(0.36, 0.01, 0.32, 0.99); }
	.tray.is-open + * {
		margin-left: 17rem; }
	.tray.is-open .tray__tier:not(.is-open) .tray__opener {
		left: 34rem; }

.tray__tier {
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	width: 17rem;
	box-sizing: border-box;
	background: #fff;
	border-right: 1px solid #e9eaf0;
	transition: transform 0.45s cubic-bezier(0.36, 0.01, 0.32, 0.99);
	z-index: 10;
	transform: translateX(-100%); }
	.tray__tier.is-open {
		transform: none; }
		.tray__tier.is-open > .tray__opener {
			text-indent: -0.25rem;
			-webkit-clip-path: polygon(1rem 0, 3rem 0, 3rem 1.5rem, 3rem 3rem, 1rem 3rem, 0 1.5rem);
			        clip-path: polygon(1rem 0, 3rem 0, 3rem 1.5rem, 3rem 3rem, 1rem 3rem, 0 1.5rem); }
			.tray__tier.is-open > .tray__opener::after {
				border-left-width: 0;
				border-right-width: calc(1rem + 1px); }
	.tray__tier:nth-child(2) .tray__opener {
		top: 5rem; }
	.tray__tier:nth-child(3) .tray__opener {
		top: 9rem; }
	.tray__tier:nth-child(4) .tray__opener {
		top: 13rem; }
	.tray__tier:nth-child(5) .tray__opener {
		top: 17rem; }

.tray__opener {
	font-size: 1.47903rem;
	line-height: 2rem;
	display: block;
	position: absolute;
	top: 1rem;
	left: 100%;
	width: 4rem;
	height: 3rem;
	box-sizing: border-box;
	margin-left: -1rem;
	line-height: 3rem;
	background: #fff;
	cursor: pointer;
	border: 1px solid #e9eaf0;
	border-width: 1px 0;
	color: rgba(51, 51, 51, 0.5);
	transition: color 0.15s;
	text-align: center;
	text-indent: 0.25rem;
	-webkit-clip-path: polygon(1rem 0, 3rem 0, 4rem 1.5rem, 3rem 3rem, 1rem 3rem, 1rem 1.5rem);
	        clip-path: polygon(1rem 0, 3rem 0, 4rem 1.5rem, 3rem 3rem, 1rem 3rem, 1rem 1.5rem);
	transition: text-indent 0.45s, left 0.45s, -webkit-clip-path 0.45s;
	transition: clip-path 0.45s, text-indent 0.45s, left 0.45s;
	transition: clip-path 0.45s, text-indent 0.45s, left 0.45s, -webkit-clip-path 0.45s; }
	.tray__opener:hover, .tray__tier.is-open .tray__opener {
		color: #333; }
	.tray__opener::before {
		content: '';
		position: absolute;
		top: 0;
		left: 1px;
		border-width: calc(1.5rem - 1px);
		border-right-width: calc(1rem - 1px);
		border-left-width: 1px;
		border-style: solid;
		border-color: #e9eaf0;
		border-right-color: transparent; }
	.tray__opener::after {
		content: '';
		position: absolute;
		top: 0;
		right: 0;
		border-width: calc(1.5rem - 1px);
		border-left-width: calc(1rem - 1px);
		border-right-width: 1px;
		border-style: solid;
		border-color: #e9eaf0;
		border-left-color: transparent;
		transition: border-width 0.15s; }

/***
 * Component
 *
 * An individual piece of the styleguide.
 *
 * html:
TODO
 */
.component {
	position: relative;
	padding: 6rem calc((100% - 63.75rem) / 2); }
	.component--depth-2 {
		padding-top: 4rem;
		padding-bottom: 4rem; }
	.component--depth-3 {
		padding-top: 2rem;
		padding-bottom: 2rem; }
	.component--depth-4 {
		padding-top: 2rem;
		padding-bottom: 2rem; }
	.component__header {
		position: relative;
		margin: 0 0 1rem; }
		.component__header .file-path {
			position: absolute;
			right: 0;
			bottom: 0.5rem; }
	.component__sub-elements > .component {
		padding-right: 0;
		padding-left: 2rem;
		margin: 0; }
		.component__sub-elements > .component:last-child {
			padding-bottom: 0; }
	.component--depth-1 {
		border-top: 1px solid #e9eaf0; }

/***
 * Palette
 *
 * Just a colection of [color](#/molecules/color) elements.  Sizes them mostly
 * based on how many are present.  This is achieved through the utterly ingenious
 * [mod selector](http://alistapart.com/article/using-css-mod-queries-with-range-selectors).
 *
 * Shows the colors as larger if in an element with 'primary' in its title.
 *
 * @modifier [id*="primary"] &
 *
 * html:
 *   <div class="palette">
 *     <div class="color color--dark">
 *       <div class="swatch swatch-- swatch--dark" style="background-color: #FF0000"></div>
 *       <div class="color__details">
 *         <span class="color__var-name" data-copy="$c1">$c1</span>
 *         <span class="color__value color__value--hex" data-copy="#FF0000">#FF0000</span>
 *       </div>
 *     </div>
 *     <div class="color color--dark">
 *       <div class="swatch swatch-- swatch--dark" style="background-color: #EE0000"></div>
 *       <div class="color__details">
 *         <span class="color__var-name" data-copy="$c2">$c2</span>
 *         <span class="color__value color__value--hex" data-copy="#EE0000">#EE0000</span>
 *       </div>
 *     </div>
 *     <div class="color color--dark">
 *       <div class="swatch swatch-- swatch--dark" style="background-color: #DD0000"></div>
 *       <div class="color__details">
 *         <span class="color__var-name" data-copy="$c3">$c3</span>
 *         <span class="color__value color__value--hex" data-copy="#DD0000">#DD0000</span>
 *       </div>
 *     </div>
 *     <div class="color color--dark">
 *       <div class="swatch swatch-- swatch--dark" style="background-color: #CC0000"></div>
 *       <div class="color__details">
 *         <span class="color__var-name" data-copy="$c4">$c4</span>
 *         <span class="color__value color__value--hex" data-copy="#CC0000">#CC0000</span>
 *       </div>
 *     </div>
 *   </div>
 */
.palette {
	max-width: 63.75rem;
	margin-left: auto;
	margin-right: auto; }
	.palette .color {
		float: left;
		width: 33.33333%; }
		.palette .color:nth-last-child(4n+0):first-child,
		.palette .color:nth-last-child(4n+0):first-child ~ .color {
			width: 25%; }
		.palette .color:nth-last-child(4n+3):first-child,
		.palette .color:nth-last-child(4n+3):first-child ~ .color {
			width: 25%; }
			.palette .color:nth-last-child(4n+3):first-child:nth-child(n+1):nth-child(-n+3),
			.palette .color:nth-last-child(4n+3):first-child ~ .color:nth-child(n+1):nth-child(-n+3) {
				width: 33.33333%; }
	[id*="primary"] .palette, [id*="brand"] .palette {
		font-size: 1.47903rem;
		line-height: 2rem; }
		[id*="primary"] .palette .color, [id*="brand"] .palette .color {
			width: 50%;
			height: 12rem; }
			[id*="primary"] .palette .color:nth-last-child(2n+1):first-child, [id*="brand"] .palette .color:nth-last-child(2n+1):first-child {
				width: 100%; }
			[id*="primary"] .palette .color:nth-last-child(3n+0):first-child,
			[id*="primary"] .palette .color:nth-last-child(3n+0):first-child ~ .color, [id*="brand"] .palette .color:nth-last-child(3n+0):first-child,
			[id*="brand"] .palette .color:nth-last-child(3n+0):first-child ~ .color {
				width: 33.33333%; }
			[id*="primary"] .palette .color:nth-last-child(3n+1):first-child,
			[id*="primary"] .palette .color:nth-last-child(3n+1):first-child ~ .color, [id*="brand"] .palette .color:nth-last-child(3n+1):first-child,
			[id*="brand"] .palette .color:nth-last-child(3n+1):first-child ~ .color {
				width: 33.33333%; }
			[id*="primary"] .palette .color:nth-last-child(3n+1):first-child, [id*="brand"] .palette .color:nth-last-child(3n+1):first-child {
				width: 100%; }
			[id*="primary"] .palette .color:nth-last-child(2n+0):first-child,
			[id*="primary"] .palette .color:nth-last-child(2n+0):first-child ~ .color, [id*="brand"] .palette .color:nth-last-child(2n+0):first-child,
			[id*="brand"] .palette .color:nth-last-child(2n+0):first-child ~ .color {
				width: 50%; }

/***
 * HTML Sample
 *
 * An output of a sample element/component.  It is turned into an iframe by
 * autoguide.js, allowing it to keep all of its styling localized.
 *
 * Title and description are optional based on the passed data.
 *
 * html:
 *   <div class="html-sample">
 *     <h6 class="html-sample__header">A Single Sample</h6>
 *     <div class="html-sample__description">
 *       <p>This is a sample of the sample. Neat, right?</p>
 *       <p>Side note, iframe can't be dynamically generated within dynamically generated iframe. It fucks up.</p>
 *     </div>
 *     <iframe class="html-sample__iframe" srcdoc='
 *       <html>
 *         <head>
 *           <link rel="stylesheet" href="assets/css/autoguide.css">
 *         </head>
 *         <body><h5>This is in an iframe</h5></body>
 *       </html>'>
 *     </iframe>
 *   </div>
 *
 * wrap: .component
 */
.html-sample__header--class-name {
	font-family: "Source Code Pro", monospace; }

.html-sample__description :first-child {
	margin-top: 0; }

.html-sample__iframe {
	border: 0.25rem solid #e9eaf0;
	width: calc(100% - 0.5rem);
	margin-left: 50%;
	transform: translateX(-50%); }

/**
 * outer page container
 */
.page-container {
	overflow: hidden; }

/**
 * Helper styles for js-collapsable
 */
.js-collapsable__toggle {
	cursor: pointer; }
	.js-collapsable__toggle::before {
		content: '+';
		float: right;
		font-weight: bold; }

.js-collapsable__content {
	overflow-y: hidden;
	height: 0;
	transition: height 0.3s cubic-bezier(0.36, 0.01, 0.32, 0.99); }

.js-collapsable.is-open .js-collapsable__toggle::before {
	content: '-'; }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF1dG9ndWlkZS5jc3MiLCJhdXRvZ3VpZGUuc2NzcyIsInV0aWxpdGllcy9faWNvbnMuc2NzcyIsInV0aWxpdGllcy9mdW5jdGlvbnMvX3N0cmlwVW5pdHMuc2NzcyIsInV0aWxpdGllcy9mdW5jdGlvbnMvX3B4VG9SZW0uc2NzcyIsInV0aWxpdGllcy9mdW5jdGlvbnMvX3B4VG9FbS5zY3NzIiwidXRpbGl0aWVzL2Z1bmN0aW9ucy9fc3FydC5zY3NzIiwidXRpbGl0aWVzL2Z1bmN0aW9ucy9fcG93LnNjc3MiLCJ1dGlsaXRpZXMvZnVuY3Rpb25zL19tb2R1bGFyU2NhbGUuc2NzcyIsInV0aWxpdGllcy9taXhpbnMvX2FzcGVjdC1yYXRpby5zY3NzIiwidXRpbGl0aWVzL21peGlucy9fcXVhbnRpdHktcXVlcnkuc2NzcyIsInV0aWxpdGllcy9taXhpbnMvX21vZC1xdWVyeS5zY3NzIiwidXRpbGl0aWVzL21peGlucy9fbWVkaWEtcXVlcmllcy5zY3NzIiwidXRpbGl0aWVzL21peGlucy9fY2xlYXItZml4LnNjc3MiLCJ1dGlsaXRpZXMvbWl4aW5zL19ncmlkLnNjc3MiLCJ1dGlsaXRpZXMvX3Zpc3VhbGx5aGlkZGVuLnNjc3MiLCJ1dGlsaXRpZXMvX3Jlc2V0cy5zY3NzIiwic2V0dGluZ3MvX3NwYWNpbmcuc2NzcyIsInNldHRpbmdzL19jb2xvcnMuc2NzcyIsInNldHRpbmdzL19mb250cy5zY3NzIiwic2V0dGluZ3MvX3R5cGUtc2NhbGUuc2NzcyIsInF1YXJrcy9faHRtbC5zY3NzIiwicXVhcmtzL19ib2R5LnNjc3MiLCJxdWFya3MvX3R5cG9ncmFwaHkuc2NzcyIsInF1YXJrcy9fbGlua3Muc2NzcyIsInNldHRpbmdzL190cmFuc2l0aW9ucy5zY3NzIiwicXVhcmtzL19pbWcuc2NzcyIsInF1YXJrcy9fc3ZnLnNjc3MiLCJxdWFya3MvX2hyLnNjc3MiLCJxdWFya3MvX2xpc3Quc2NzcyIsInF1YXJrcy9fYmxvY2txdW90ZS5zY3NzIiwicXVhcmtzL190YWJsZS5zY3NzIiwicXVhcmtzL19jb2RlLnNjc3MiLCJxdWFya3MvX2lucHV0LnNjc3MiLCJhdG9tcy9fZmlsZS1wYXRoLnNjc3MiLCJhdG9tcy9fc3dhdGNoLnNjc3MiLCJhdG9tcy9fZm9udC1zYW1wbGUuc2NzcyIsImF0b21zL19idXR0b24uc2NzcyIsImF0b21zL19jb3B5YWJsZS5zY3NzIiwiYXRvbXMvX2F0dHJpYnV0ZS5zY3NzIiwibW9sZWN1bGVzL19uYXYtbWFpbi5zY3NzIiwibW9sZWN1bGVzL19idXR0b24tZ3JvdXAuc2NzcyIsIm1vbGVjdWxlcy9fY29sb3Iuc2NzcyIsIm1vbGVjdWxlcy9fY29kZS1ibG9jay5zY3NzIiwibW9sZWN1bGVzL19hdHRyaWJ1dGUtbGlzdC5zY3NzIiwib3JnYW5pc21zL19zZWN0aW9uLnNjc3MiLCJvcmdhbmlzbXMvX2hlYWRlci1tYWluLnNjc3MiLCJvcmdhbmlzbXMvX2Zvb3Rlci1tYWluLnNjc3MiLCJvcmdhbmlzbXMvX2NvbnRyb2xzLnNjc3MiLCJvcmdhbmlzbXMvX3RyYXkuc2NzcyIsIm9yZ2FuaXNtcy9fY29tcG9uZW50LnNjc3MiLCJvcmdhbmlzbXMvX3BhbGV0dGUuc2NzcyIsIm9yZ2FuaXNtcy9faHRtbC1zYW1wbGUuc2NzcyIsInRlbXBsYXRlL19wYWdlLWNvbnRhaW5lci5zY3NzIiwianMtc3R5bGVzL19qcy1jb2xsYXBzYWJsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQ3NCakI7Ozs7Ozs7R0FPRztBQzdCSDtDQUNDLHFCQUFxQjtDQUNyQiwrQkFBUTtDQUNSLHlPQUl1QyxFQUFBOztBQWV4QztDQVhDLHFCQUFxQjtDQUNwQixvQ0FBb0M7Q0FDcEMsbUNBQW1DO0NBQ3BDLG1CQUFtQjtDQUNuQixxQkFBcUI7Q0FDckIsb0JBQW9CO0NBRXBCLHNCQUFzQjtDQUN0QixxQkFBcUIsRUFLckI7O0FBb0VEO0NBSkUsYUExRE8sRUFBTzs7QUFpRWhCO0NBUEUsYUF2RE8sRUFBTzs7QUFpRWhCO0NBVkUsYUFw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SDtDakNMRSwwQ0FWc0MsRWlDa0JyQzs7QUFISDtDQU1NLGNBQWMsRUFDZjs7QUFQTDtDQVVJLDhCbENkMEI7Q2tDZTFCLDJCQUFXO0NBQ1gsaUJBQWlCO0NBQ2pCLDRCQUFxQixFQUN0Qjs7QUN6Q0g7O0dBRUc7QUFDSDtDQUNFLGlCQUFpQixFQUNsQjs7QUNMRDs7R0FFRztBQUNIO0NBRUksZ0JBQWdCLEVBTWpCO0NBUkg7RUFJTSxhQUFhO0VBQ2IsYUFBYTtFQUNiLGtCQUFrQixFQUNuQjs7QUFQTDtDQVVJLG1CQUFtQjtDQUNuQixVQUFVO0NBQ1YsNkQ3QlBvQixFNkJRckI7O0FBYkg7Q0FpQk0sYUFBYSxFQUNkIiwiZmlsZSI6ImF1dG9ndWlkZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKioqXG4gKiBVdGlsaXRpZXNcbiAqXG4gKiBSZXVzYWJsZSBmdW5jdGlvbnMsIG1peGlucywgYW5kIGhlbHBlciBjbGFzc2VzLiAgVGhpbmdzIGxpa2UgY29sb3JzLCB2ZXJ0aWNhbCByaHl0aG0sIGFuZCB0aGUgLmNsZWFyLWZpeCBoZWxwZXIgYXJlIGluIHRoaXMgZ3JvdXAuXG4gKiA+IFRoaXMgZGlyZWN0b3J5IG9mIHBhcnRpYWxzIGlzIGFsc28gaW1wb3J0YW50IGJlY2F1c2Ugd2XigJlsbCBuZWVkIHRvIGRlZmluZSBnbG9iYWwgY2xhc3NlcywgbWl4aW5zIGFuZCBzdHlsZXMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBhbmQgYXQgYW55IHRpbWUuXG4gKiA+XG4gKiA+XFwtIGh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxMy8wOC9vdGhlci1pbnRlcmZhY2UtYXRvbWljLWRlc2lnbi1zYXNzL1xuICovXG5AZm9udC1mYWNlIHtcblx0Zm9udC1mYW1pbHk6IFwiaWNvbnNcIjtcblx0c3JjOiB1cmwoXCIuLi9mb250cy9pY29ucy5lb3RcIik7XG5cdHNyYzogdXJsKFwiLi4vZm9udHMvaWNvbnMuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksIHVybChcIi4uL2ZvbnRzL2ljb25zLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9pY29ucy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL2ljb25zLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvaWNvbnMuc3ZnI2ljb25zXCIpIGZvcm1hdChcInN2Z1wiKTsgfVxuXG4uaWNvbi1hdG9tczpiZWZvcmUsIC5pY29uLWNvZGU6YmVmb3JlLCAuaWNvbi1jb2xvcnM6YmVmb3JlLCAuaWNvbi1jb3B5OmJlZm9yZSwgLmljb24tZGVza3RvcDpiZWZvcmUsIC5pY29uLWZvbnRzOmJlZm9yZSwgLmljb24taHRtbDpiZWZvcmUsIC5pY29uLW1lbnU6YmVmb3JlLCAuaWNvbi1tb2xlY3VsZXM6YmVmb3JlLCAuaWNvbi1vcmdhbmlzbXM6YmVmb3JlLCAuaWNvbi1waG9uZTpiZWZvcmUsIC5pY29uLXF1YXJrczpiZWZvcmUsIC5pY29uLXJpZ2h0LWFycm93OmJlZm9yZSwgLmljb24tc2V0dGluZ3M6YmVmb3JlLCAuaWNvbi10YWJsZXQ6YmVmb3JlLCAuaWNvbi11dGlsaXRpZXM6YmVmb3JlLCAuYnV0dG9uLS1pY29uLXNldHRpbmdzOmJlZm9yZSwgLmJ1dHRvbi0taWNvbi1tZW51OmJlZm9yZSwgLmJ1dHRvbi0taWNvbi1waG9uZTpiZWZvcmUsIC5idXR0b24tLWljb24tdGFibGV0OmJlZm9yZSwgLmJ1dHRvbi0taWNvbi1kZXNrdG9wOmJlZm9yZSwgLmJ1dHRvbi0taWNvbi1yaWdodC1hcnJvdzpiZWZvcmUsIC5idXR0b24tLWljb24tY29weTpiZWZvcmUsIFtkYXRhLWNvcHldOmJlZm9yZSwgLnNlY3Rpb25fX3RpdGxlOmJlZm9yZSwgLnNlY3Rpb25fX3RpdGxlLS1jb2xvcnM6YmVmb3JlLCAuc2VjdGlvbl9fdGl0bGUtLWZvbnRzOmJlZm9yZSwgLnNlY3Rpb25fX3RpdGxlLS1xdWFya3M6YmVmb3JlLCAuc2VjdGlvbl9fdGl0bGUtLWF0b21zOmJlZm9yZSwgLnNlY3Rpb25fX3RpdGxlLS1tb2xlY3VsZXM6YmVmb3JlLCAuc2VjdGlvbl9fdGl0bGUtLW9yZ2FuaXNtczpiZWZvcmUsIC5zZWN0aW9uX190aXRsZS0tc2V0dGluZ3M6YmVmb3JlLCAuc2VjdGlvbl9fdGl0bGUtLXV0aWxpdGllczpiZWZvcmUsIC5zZWN0aW9uX190aXRsZS0tbWVudTpiZWZvcmUsIC5zZWN0aW9uX190aXRsZS0tcGhvbmU6YmVmb3JlLCAuc2VjdGlvbl9fdGl0bGUtLXRhYmxlOmJlZm9yZSwgLnNlY3Rpb25fX3RpdGxlLS1kZXNrdG9wOmJlZm9yZSB7XG5cdGZvbnQtZmFtaWx5OiBcImljb25zXCI7XG5cdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHRmb250LXN0eWxlOiBub3JtYWw7XG5cdGZvbnQtdmFyaWFudDogbm9ybWFsO1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHRleHQtdHJhbnNmb3JtOiBub25lOyB9XG5cbi5pY29uLWF0b21zOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCBXCI7IH1cblxuLmljb24tY29kZTpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AglwiOyB9XG5cbi5pY29uLWNvbG9yczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6Ag1wiOyB9XG5cbi5pY29uLWNvcHk6YmVmb3JlIHtcblx0Y29udGVudDogXCLugIRcIjsgfVxuXG4uaWNvbi1kZXNrdG9wOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCFXCI7IH1cblxuLmljb24tZm9udHM6YmVmb3JlIHtcblx0Y29udGVudDogXCLugIZcIjsgfVxuXG4uaWNvbi1odG1sOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCHXCI7IH1cblxuLmljb24tbWVudTpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AiFwiOyB9XG5cbi5pY29uLW1vbGVjdWxlczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AiVwiOyB9XG5cbi5pY29uLW9yZ2FuaXNtczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AilwiOyB9XG5cbi5pY29uLXBob25lOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCLXCI7IH1cblxuLmljb24tcXVhcmtzOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCMXCI7IH1cblxuLmljb24tcmlnaHQtYXJyb3c6YmVmb3JlIHtcblx0Y29udGVudDogXCLugI1cIjsgfVxuXG4uaWNvbi1zZXR0aW5nczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AjlwiOyB9XG5cbi5pY29uLXRhYmxldDpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6Aj1wiOyB9XG5cbi5pY29uLXV0aWxpdGllczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AkFwiOyB9XG5cbi8qKipcbiAqIFN0cmlwIFVuaXRzXG4gKlxuICogU3RyaXBzIHRoZSB1bml0cyBmcm9tIGEgbnVtYmVyXG4gKlxuICogc2NzczpcbiAqICAgc3RyaXBVbml0cygkbnVtYmVyKTtcbiAqXG4gKiBAcGFyYW0gJG51bWJlciAtIHZhbHVlIHRvIHN0cmlwIHRoZSB1bml0cyBmcm9tLlxuICovXG4vKioqXG4gKiBQaXhlbHMgdG8gUmVtcyBmdW5jdGlvblxuICpcbiAqIENvbnZlcnRzIHBpeGVscyB0byBSRU1zIHNvIHdlIGNhbiBrZWVwIG91ciB1bml0cyBjb25zaXN0ZW50LiAgQXNzdW1lcyAxcmVtIGlzIDE2cHggKGRlZmF1bHQgZm9yIG1vc3QgYnJvd3NlcnMpLlxuICpcbiAqIHNjc3M6XG4gKiAgIHB4VG9SZW0oJHB4WywkYmFzZVJlbV0pO1xuICpcbiAqIEBwYXJhbSAkcHggLSB1bml0bGVzcyBpbnRlZ2VyIHRvIGNvbnZlcnQgdG8gcmVtc1xuICogQHBhcmFtICRiYXNlUmVtIC0gcGl4ZWxzIHRvIGNvdW50IGFzIG9uZSByZW0uIERlZmF1bHRzIHRvIDE2XG4gKi9cbi8qKipcbiAqIFBpeGVscyB0byBFbXMgZnVuY3Rpb25cbiAqXG4gKiBDb252ZXJ0cyBwaXhlbHMgdG8gRU1zIHNvIHdlIGNhbiBrZWVwIG91ciB1bml0cyBjb25zaXN0ZW50LiAgQXNzdW1lcyAxZW0gaXMgMTZweCwgb3IgeW91IGNhbiBwYXNzIGEgZGlmZmVyZW50IGJhc2UuXG4gKlxuICogc2NzczpcbiAqICAgcHhUb0VtKCRweFssJGJhc2VdKTtcbiAqXG4gKiBAcGFyYW0gJHB4IC0gdW5pdGxlc3MgaW50ZWdlciB0byBjb252ZXJ0IHRvIHJlbXNcbiAqIEBwYXJhbSAkYmFzZSAtIHBpeGVscyB0byBjb3VudCBhcyBvbmUgZW0uIERlZmF1bHRzIHRvIDE2XG4gKi9cbi8qKipcbiAqIFNxdWFyZSBSb290IEZ1bmN0aW9uXG4gKlxuICogR2V0cyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIgKHdpdGhpbiBhIG1hcmdpbiBvZiBlcnJvcilcbiAqXG4gKiBVc2VmdWwgZm9yIGRpYWdvbmFsL1B5dGhhZ29yZWFuIHN0dWZmLlxuICpcbiAqIHNjc3M6XG4gKiAgIHNxcnQoJG51bSlcbiAqXG4gKiBAcGFyYW0gJG51bSAtIG51bWJlciB0byBnZXQgc3F1YXJlIHJvb3Qgb2ZcbiAqL1xuLyoqKlxuICogUG93ZXIgLyBFeHBvbmVudCBGdW5jdGlvblxuICpcbiAqIFJhaXNlcyBhIG51bWJlciB0byBhIGNlcnRhaW4gcG93ZXIuIFN1cHBvcnRzIGludGVnZXJzIGFuZCAuNXMgYXMgdGhlIGV4cG9uZW50LlxuICpcbiAqIFVzZWZ1bCBmb3IgZGlhZ29uYWwvUHl0aGFnb3JlYW4gc3R1ZmYuXG4gKlxuICogc2NzczpcbiAqICAgcG93KCRiYXNlLCAkZXhwb25lbnQpXG4gKlxuICogQHBhcmFtICRiYXNlIC0gbnVtYmVyIHRvIGdldCBzcXVhcmUgcm9vdCBvZlxuICogQHBhcmFtICRleHBvbmVudCAtIGV4cG9uZW50IHRvIHJhaXNlIHRoZSBiYXNlIG51bWJlciB0b1xuICovXG4vKioqXG4gKiBNb2R1bGFyIFNjYWxlIEZ1bmN0aW9uXG4gKlxuICogRGV0ZXJtaW5lcyBhIHNpemUgZnJvbSBhIGJhc2UsIG11bHRpcGxlLCBhbmQgc2NhbGUgZmFjdG9yLlxuICpcbiAqIHNjc3M6XG4gKiAgIGZvbnQtc2l6ZTogbW9kdWxhclNjYWxlKDE2LCAzLCAxLjUpOyAvLyAzNlxuICovXG4vKioqXG4gKiBBc3BlY3QgUmF0aW9cbiAqXG4gKiBHZXRzIHBhZGRpbmcgZm9yIGNvcnJlY3QgYXNwZWN0IHJhdGlvLCBhbmQgc2V0cyBoZWlnaHQgdG8gMC5cbiAqXG4gKiBzY3NzOlxuICogICBAaW5jbHVkZSBhc3BlY3QtcmF0aW8oJHdpZHRoLCAkaGVpZ2h0KVxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBjb21wYXJhdGl2ZSB3aWR0aCBvZiB0aGUgcmF0aW8uIFRoZSAneCcgaW4geDp5XG4gKiBAcGFyYW0ge051bWJlcn0gJGhlaWdodCAtIGNvbXBhcmF0aXZlIGhlaWdodCBvZiB0aGUgcmF0aW8uIFRoZSAneScgaW4geDp5XG4gKi9cbi8qKipcbiAqIFF1YW50aXR5IFF1ZXJ5XG4gKlxuICogTWl4aW5zIHRvIGFsbG93IHN0eWxlcyB0byBiZSBzZXQgYmFzZWQgb24gYXQtbGVhc3QsIGF0LW1vc3QsIGFuZCBleGFjdGx5IGBuYFxuICogbnVtYmVyIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogc2NzczpcbiAqICAgQGluY2x1ZGUgcXFBdExlYXN0ICgkbikge1xuICogICAgIEBjb250ZW50O1xuICogICB9XG4gKiAgXG4gKiAgIEBpbmNsdWRlIHFxQXRNb3N0ICgkbikge1xuICogICAgIEBjb250ZW50O1xuICogICB9XG4gKiAgXG4gKiAgIEBpbmNsdWRlIHFxRXhhY3RseSAoJG4pIHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICpcbiAqIEBwYXJhbSAkbiAtIGhvdyBtYW55IGVsZW1lbnRzIHRvIHF1ZXJ5IGFnYWluc3RcbiAqIEBwYXJhbSBAY29udGVudCAtIHRoZSBzdHlsZXMgdG8gYXBwbHkgdG8gaXRcbiAqL1xuLyoqKlxuICogTW9kIFF1ZXJ5XG4gKlxuICogQSBkYW1uIGNsZXZlciB3YXkgdG8gc2VsZWN0IGVsZW1lbnRzIHdoZW4gdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpcyBkaXZpc2libGVcbiAqIGJ5IGEgZ2l2ZW4gaW50ZWdlci4gQXMgb3Bwb3NlZCB0byB0aGUgYWJzb2x1dGUgW1F1YW50aXR5IFF1ZXJ5XSgjL3V0aWxpdGllcy9taXhpbnMvcXVhbnRpdHktcXVlcnkpLFxuICogdGhpcyBzZWxlY3RzIHdoZW4gYGNoaWxkcmVuICUgbiA9IDBgLCBvciBpZiBhIHJlbWFpbmRlciBpcyBhbHNvIHBhc3NlZCwgd2hlblxuICogYGNoaWxkcmVuICUgbiA9IHJlbWFpbmRlcmAuXG4gKlxuICogR2xlZWZ1bGx5IHN0b2xlbiBmcm9tIFBhdHJpY2sgQ2xhbmNleSdzIGFydGljbGU6IGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3VzaW5nLWNzcy1tb2QtcXVlcmllcy13aXRoLXJhbmdlLXNlbGVjdG9yc1xuICpcbiAqIEBwYXJhbSAkZGl2aXNpYmxlQnlcbiAqIEBwYXJhbSAkcmVtYWluZGVyXG4gKiBAcGFyYW0gJHNlbGVjdG9yIC0gc3RyaW5nIHBhc3NlZCB0aGF0IHJlcHJlc2VudHMgc2VsZWN0b3IgZm9yIHNpYmxpbmdzXG4gKlxuICogc2NzczpcbiAqICAgQGluY2x1ZGUgc2VsZWN0UmFuZ2UoNSw5KSB7XG4gKiAgICAgLy8gdGhpbmdzIHlvdSB3YW50IG9ubHkgaXRlbXMgNSAtIDkgdG8gZG9cbiAqICAgfVxuICogICBAaW5jbHVkZSBtb2RRdWVyeSgzLCAwLCAnLmN1c3RvbS1zZWxlY3RvcicpIHtcbiAqICAgICAvLyB0aGluZ3MgeW91IHdhbnQgYWxsIC5jdXN0b20tc2VsZWN0b3JzIGluIGEgZ2l2ZW4gcGFyZW50IHRvIGRvXG4gKiAgICAgLy8gd2hlbiB0aGVpciB0b3RhbCBudW1iZXIgaXMgZGl2aXNpYmxlIGJ5IDNcbiAqICAgfVxuICogICBAaW5jbHVkZSBtb2RGaXJzdCgzLCAxKSB7XG4gKiAgICAgLy8gdGhpbmdzIHlvdSB3YW50IHRoZSBmaXJzdCBlbGVtZW50IHRvIGRvIHdoZW4gdGhlIHRvdGFsIG51bWJlciBvZlxuICogICAgIC8vIGNoaWxkcmVuIG1hdGNoZXMgbiAlIDMgPT0gMVxuICogICB9XG4gKi9cbi8qKipcbiAqIE1lZGlhIFF1ZXJpZXNcbiAqXG4gKiBEZWZpbmVzIG91ciBkZWZhdWx0IGJyZWFrcG9pbnRzLiAgQXNzdW1lcyBtb2JpbGUtZmlyc3QgY29kZSwgYnV0IHN1cHBvcnRzIG5vdFxuICogYnkgcGFzc2luZyB5b3VyIGJyZWFrcG9pbnQgdG8gdGhlIGFsdGVybmF0ZSBtaXhpbjogYG1xLWx0YC4gRG9uJ3Qgd29ycnkgYWJvdXRcbiAqIGhhdmluZyBhIHRvbiBvZiB0aGVzZSwgc2luY2UgdGhlIG1pbmlmaWNhdGlvbiBwcm9jZXNzIHdpbGwgY29tYmluZSB0aGVtLlxuICpcbiAqIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIG1peGluIGVhY2ggZm9yIGBwb3J0cmFpdGAgYW5kIGBsYW5kc2NhcGVgIG9yaWVudGF0aW9ucy5cbiAqXG4gKiBzY3NzOlxuICogICBAaW5jbHVkZSBtcSgkYnJlYWtwb2ludCkge1xuICogICAgIEBjb250ZW50O1xuICogICB9XG4gKiAgIEBpbmNsdWRlIHBvcnRyYWl0IHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICogICBAaW5jbHVkZSBsYW5kc2NhcGUge1xuICogICAgIEBjb250ZW50O1xuICogICB9XG4gKlxuICogQHBhcmFtICRicmVha3BvaW50IC0gd2hhdCBzaXplIHlvdSdkIGxpa2UgdG8gdGFyZ2V0IGxhcmdlciB0aGFuLiBBIGZldyBoYXZlIGJlZW4gcHJlLWRlZmluZWQuXG4gKiBAcGFyYW0gQGNvbnRlbnQgLSB0aGUgY29udGVudCB0byBwdXQgaW4gdGhlIG1lZGlhIHF1ZXJ5XG4gKi9cbi8qKipcbiAqICBDbGVhciBGaXhcbiAqXG4gKiAgQ2xlYXJzIGFsbCBmbG9hdHMgaW5zaWRlIHRoaXMgZWxlbWVudCBieSB1c2luZyB0aGUgYDo6YWZ0ZXJgIHBzZXVkby1lbGVtZW50LlxuICpcbiAqICBzY3NzOlxuICogICAgQGluY2x1ZGUgY2xlYXItZml4O1xuICogICAgLy8gb3JcbiAqICAgIEBleHRlbmQgJWNsZWFyLWZpeDtcbiAqL1xuLmJ1dHRvbi1ncm91cDo6YWZ0ZXIsIC5zZWN0aW9uOjphZnRlciwgLnNlY3Rpb25fX2lubmVyOjphZnRlciwgLmNvbXBvbmVudDo6YWZ0ZXIsIC5wYWxldHRlOjphZnRlciB7XG5cdGNvbnRlbnQ6ICcnO1xuXHRkaXNwbGF5OiB0YWJsZTtcblx0Y2xlYXI6IGJvdGg7IH1cblxuLyoqKlxuICogR3JpZFxuICpcbiAqIE91ciBzdXBlciBzaW1wbGUgY3VzdG9tIGdyaWQgc3lzdGVtLiBKdXN0IGluY2x1ZGUgdGhlIG1peGluIGBncmlkQ29udGFpbmVyYFxuICogdG8gc2V0IG1heC13aWR0aCA9ICRtYXgtd2lkdGggKyAkZ3V0dGVyLiBGb3IgaW50ZXJuYWwgc3R1ZmYsIHVzZVxuICogYHN1YmdyaWRDb250YWluZXJgIHRvIGF1dG9tYXRpY2FsbHkgb2Zmc2V0IHRoZSBtYXJnaW5zIG9uIHRoZSBjb250YWluZXIgaWZcbiAqIG5lZWRlZCwgYW5kIGBjb2xzcGFuYCBvbiB0aGUgYWN0dWFsIGNvbHVtbi4gIEJ5IGRlZmF1bHQsIGFzc3VtZXMgMTIgY29sdW1uc1xuICogYW5kIGEgMiAqICR3ciBndXR0ZXIsIGJ1dCB0aG9zZSBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgbW9yZSBjb21wbGV4IGxheW91dHMuXG4gKiBJdCBzcGl0cyBvdXQgc3R5bGVzIHdoZXJldmVyIGl0IGlzIGNhbGxlZCwgc28geW91IGNhbiBkZWZpbmUgZGlmZmVyZW50XG4gKiBjb2x1bW5zIG9yIGV2ZW4gZW50aXJlbHkgZGlmZmVyZW50IGdyaWRzIHdpdGhpbiBtZWRpYSBxdWVyaWVzLlxuICpcbiAqIFRoZXJlJ3MgYWxzbyBhIGNvbHB1c2ggbWl4aW4gdG8gc2hpZnQgYW4gZWxlbWVudCB0byB0aGUgcmlnaHQgYnkgYSBudW1iZXIgb2YgY29sdW1ucy5cbiAqXG4gKiBSZW1lbWJlciwgdmFyaWFibGVzIHdyYXBwZWQgaW4gYFtdYCBpbiB0aGUgZXhhbXBsZSBhcmUgb3B0aW9uYWwuXG4gKlxuICogc2NzczpcbiAqICAgQGluY2x1ZGUgZ3JpZENvbnRhaW5lciAoWyRndXR0ZXJdKTtcbiAqICAgQGluY2x1ZGUgc3ViZ3JpZENvbnRhaW5lciAoWyRndXR0ZXJdKTtcbiAqICAgQGluY2x1ZGUgY29sc3BhbiAoJHNwYW5bLCAkdG90YWxbLCAkZ3V0dGVyXV0pO1xuICogICBAaW5jbHVkZSBjb2xwdXNoICgkc3BhblssICR0b3RhbFssICRndXR0ZXJdXSk7XG4gKlxuICogQHBhcmFtIHtpbnR9ICRzcGFuIC0gbnVtYmVyIG9mIGNvbHVtbnMgdG8gc3BhblxuICogQHBhcmFtIHtpbnR9ICR0b3RhbCAtIG51bWJlciBvZiB0b3RhbCBjb2x1bW5zIHRoZSBncmlkIGhhc1xuICogQHBhcmFtIHtudW1iZXIgdy8gdW5pdH0gJGd1dHRlciAtIHdpZHRoIG9mIHRoZSBndXR0ZXJzIGJldHdlZW4gY29sdW1uc1xuICovXG4vKlxuKiBIaWRlIG9ubHkgdmlzdWFsbHksIGJ1dCBoYXZlIGl0IGF2YWlsYWJsZSBmb3Igc2NyZWVuIHJlYWRlcnM6XG4qIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHlcbiovXG4udmlzdWFsbHloaWRkZW4ge1xuXHRib3JkZXI6IDA7XG5cdGNsaXA6IHJlY3QoMCAwIDAgMCk7XG5cdGhlaWdodDogMXB4O1xuXHRtYXJnaW46IC0xcHg7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHBhZGRpbmc6IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0d2lkdGg6IDFweDtcblx0LypcbiAgKiBFeHRlbmRzIHRoZSAudmlzdWFsbHloaWRkZW4gY2xhc3MgdG8gYWxsb3cgdGhlIGVsZW1lbnRcbiAgKiB0byBiZSBmb2N1c2FibGUgd2hlbiBuYXZpZ2F0ZWQgdG8gdmlhIHRoZSBrZXlib2FyZDpcbiAgKiBodHRwczovL3d3dy5kcnVwYWwub3JnL25vZGUvODk3NjM4XG4gICovIH1cblx0LnZpc3VhbGx5aGlkZGVuLmZvY3VzYWJsZTpmb2N1cywgLnZpc3VhbGx5aGlkZGVuLmZvY3VzYWJsZTphY3RpdmUge1xuXHRcdGNsaXA6IGF1dG87XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdG1hcmdpbjogMDtcblx0XHRvdmVyZmxvdzogdmlzaWJsZTtcblx0XHRwb3NpdGlvbjogc3RhdGljO1xuXHRcdHdpZHRoOiBhdXRvOyB9XG5cbiosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuXHRib3gtc2l6aW5nOiBpbmhlcml0OyB9XG5cbi8qKlxuICogU2V0dGluZ3NcbiAqXG4gKiBHbG9iYWwgc2V0dGluZ3MgYW5kIHZhcmlhYmxlcy4gVGhpcyBkZWZpbmVzIGdsb2JhbCBzaXRlIHdpZGUgdGhpbmdzIGxpa2VcbiAqIGNvbG9ycyBhbmQgZm9udHMuXG4gKi9cbi8qKipcbiAqIFZpc3VhbCBSaHl0aG1cbiAqXG4gKiBWYXJpYWJsZXMgdG8gbWFpbnRhaW4gYSBzdGFuZGFyZCB2aXN1YWwgcmh5dGhtIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LlxuICpcbiAqIEFsc28sIHRoZXJlJ3MgYSBmdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBuZXh0IG11bHRpcGxlIG9mIHZlcnRpY2FsIHJoeXRobVxuICogYWJvdmUgYSBnaXZlbiBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gbnVtYmVyIHRvIGZpbmQgbmV4dCBtdWx0aXBsZSBhYm92ZS5cbiAqIEBwYXJhbSB7b3B0aW9uYWwsIE51bWJlcn0gJHJoeXRobSAtIG51bWJlciB0aGF0J3MgbXVsdGlwbGllZCB1bnRpbCBpdCdzIGxhcmdlciB0aGFuIGAkYmFzZWAuIEVxdWFsIHRvIGAkdnJgIGlmIG9taXR0ZWQuXG4gKlxuICogc2NzczpcbiAqICAgbGluZS1oZWlnaHQ6IG11bHRpcGxlQWJvdmUoMzAsIDE0KTsgLy8gMztcbiAqL1xuLyoqKlxuICogQ29sb3JzXG4gKlxuICogVGhlc2UgY29sb3JzIGRlZmluZSB0aGUgbG9vayBvZiB0aGUgZ3VpZGUgaXRzZWxmLCBfbm90XyBhbnl0aGluZyB3aXRoaW4gdGhlIGV4YW1wbGVzLlxuICpcbiAqIHBhdGg6IC5cbiAqL1xuLyoqKlxuICogUHJpbWFyeSBQYWxldHRlXG4gKlxuICogVGhlIG1haW4gY29sb3JzIHVzZWQgZm9yIHRoZSBBdXRvZ3VpZGUgdGVtcGxhdGUuICBCeSBkZWZhdWx0LCB0aGVzZSBjb2xvcnMgZ2V0XG4gKiByZXVzZWQgZm9yIHRoZSBtb3JlIGRldGFpbGVkIHBhbGV0dGUuXG4gKlxuICogTm90ZSB0byBsZWFybmVyczogdGhlc2UgdmFyaWFibGUgbmFtZXMgYXJlIGxlc3MgdGhhbiBzdGVsbGFyLiAgVGhleSdyZSBrZXB0XG4gKiBpbnRlbnRpb25hbGx5IHZhZ3VlLCBiZWNhdXNlIG9mIHRoZWlyIHdpZGUgYXBwbGljYXRpb24uXG4gKlxuICogcGF0aDogLi9jb2xvcnNcbiAqIG9yZGVyOiAwXG4gKiB0ZW1wbGF0ZTogY29sb3JcbiAqL1xuLyoqKlxuICogRGV0YWlsZWQgUGFsZXR0ZVxuICpcbiAqIFRoZXNlIGFyZSB0aGUgY29sb3JzIHRoYXQgd2lsbCBhY3R1YWxseSBhcHBlYXIgdGhyb3VnaG91dCB0aGUgZ2VuZXJhdGVkIGd1aWRlLlxuICogQWx0ZXJpbmcgdGhlc2Ugd2lsbCBncmFudCBhIHZlcnkgZmluZSBsZXZlbCBvZiBjb250cm9sIG92ZXIgY29tcG9uZW50cy5cbiAqXG4gKiBUaGUgY29sb3JzIHRpdGxlZCBgJGJhY2tncm91bmQtKmAgYXJlIHVzZWQgZGlyZWN0bHkgYXMgdGhlIGJhY2tncm91bmQgcHJvcGVydHlcbiAqIGZvciB0aGVpciBnaXZlbiBlbGVtZW50LCBzbyB5b3UgY2FuIHJlcGxhY2UgdGhlbSB3aXRoIGFueXRoaW5nIHRoYXQgY291bGQgYXBwbHlcbiAqIHRoZXJlLiAgRm9yIGV4YW1wbGU6IGAkYmFja2dyb3VuZC1oZWFkZXI6IHVybChodHRwczovL21vcmJvdHJvbi5jb20vaW1nL1MwM0UwNi8xMDUzNDUxLmpwZykgY2VudGVyIGNlbnRlciBuby1yZXBlYXRgLlxuICpcbiAqIHBhdGg6IC4vY29sb3JzXG4gKiBvcmRlcjogMVxuICogdGVtcGxhdGU6IGNvbG9yXG4gKi9cbi8qKipcbiAqIENvZGUgQ29sb3JzXG4gKlxuICogVGhlc2UgYXJlIHRoZSBjb2xvciB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgY29kZSBibG9ja3MuXG4gKlxuICogdGVtcGxhdGU6IGNvbG9yXG4gKiBwYXRoOiAuL21vbGVjdWxlcy9jb2RlIGJsb2NrXG4gKi9cbi8qKipcbiAqIEZvbnRzXG4gKlxuICogVGhlIGZvbnQgZmFtaWxpZXMgdXNlZCB0aHJvdWdob3V0IHRoZSBndWlkZS4gIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGp1c3QgbGlrZVxuICogY29sb3JzLiAgSWYgeW91IG5lZWQgdG8gbG9hZCBhIHdlYmZvbnQsIHlvdSBjYW4gZG8gc28gaW4geW91ciBgc2Fzc1ByZXBlbmRgIGZpbGVcbiAqIHVzaW5nIGBAaW1wb3J0YC5cbiAqXG4gKiB0ZW1wbGF0ZTogZm9udFxuICogcGF0aDogLi9cbiAqL1xuLyoqKlxuICogIFR5cGUgU2NhbGUgbWl4aW5zXG4gKlxuICogIENyZWF0ZWQgdXNpbmcgYSBtb2R1bGFyIHNjYWxlLiBGYWN0b3IgaXMgMS40LiBUaGlzIG1lYW5zLCBzdGFydGluZyBhdCBhIGJhc2VcbiAqICBvZiBgMjBweGAsIHRoZSBuZXh0IHNpemUgdXAgKGBoM2ApIGlzIGAyMCAqIDEuNCA9IDI4YC4gVG8gc2ltcGxpZnkgdGhpcywgdGhlXG4gKiAgbWF0aCBpcyBoYW5kbGVkIGJ5IHRoZSBbYG1vZHVsYXJTY2FsZWBdKCMvdXRpbGl0aWVzL2Z1bmN0aW9ucy9tb2R1bGFyU2NhbGUpXG4gKiAgZnVuY3Rpb24uXG4gKlxuICogIEFkZGl0aW9uYWxseSwgYGg0YCBzcGxpdHMgYmV0d2VlbiBib2R5IGFuZCBgaDNgLCB3aGlsZSBgc21hbGxgIGlzIGFuXG4gKiAgYXJiaXRyYXJ5IHNpemUuXG4gKlxuICogIHNjc3M6XG4gKiAgICBAaW5jbHVkZSBoMTtcbiAqICAgIEBpbmNsdWRlIGgyO1xuICogICAgQGluY2x1ZGUgaDM7XG4gKiAgICBAaW5jbHVkZSBoNDtcbiAqICAgIEBpbmNsdWRlIGJvZHk7XG4gKiAgICBAaW5jbHVkZSBzbWFsbDtcbiAqL1xuLyoqKlxuICogUXVhcmtzXG4gKlxuICogRWxlbWVudCBsZXZlbCBzdHlsZXMgbWVhbnQgdG8gYXBwbHkgZ2xvYmFsbHkuICBUaGVzZSBkZWZpbmUgd2hhdCBlbGVtZW50cyBsb29rIGxpa2UgaWYgbm8gY2xhc3MgaXMgYXBwbGllZCB0byB0aGVtLiAgRWZmZWN0aXZlbHkgb3VyIHNpdGUgc3BlY2lmaWMgX25vcm1hbGl6ZS5jc3NfLlxuICogPiBOb3RlIHRoYXQgdGhlc2UgZmlsZXMgY29udGFpbiBvbmx5IHRoZSBkZWZhdWx0IHN0eWxlcyBmb3IgdGhlc2UgZWxlbWVudHMsIG5vdCBtb2RpZmllZCBlbGVtZW50cy4gRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSB0YWJsZSB0aGF0IGxvb2tzIGFuZCB3b3JrcyBlbnRpcmVseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBkZWZhdWx0IHRhYmxlcyB1c2VkIHRocm91Z2hvdXQgdGhlIHdlYnNpdGUsIGl0IHdvdWxkIG5vdCBiZSBhIHF1YXJrLlxuICogPlxuICogPlxcLSBodHRwOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTMvMDgvb3RoZXItaW50ZXJmYWNlLWF0b21pYy1kZXNpZ24tc2Fzcy9cbiAqL1xuaHRtbCB7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IH1cblxuYm9keSB7XG5cdGZvbnQtZmFtaWx5OiBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcblx0Zm9udC1zaXplOiAxLjI1cmVtO1xuXHRsaW5lLWhlaWdodDogMnJlbTtcblx0Zm9udC13ZWlnaHQ6IDMwMDtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRjb2xvcjogIzMzMzsgfVxuXG4vKioqXG4gKiBUeXBvZ3JhcGh5XG4gKlxuICogRGVmYXVsdCB0ZXh0IHN0eWxlcy5cbiAqXG4gKiBodG1sOlxuICogICA8aDE+SGVhZGluZyBMZXZlbCAxPC9oMT5cbiAqICAgPGgyPkhlYWRpbmcgTGV2ZWwgMjwvaDI+XG4gKiAgIDxoMz5IZWFkaW5nIExldmVsIDM8L2gzPlxuICogICA8aDQ+SGVhZGluZyBMZXZlbCA0PC9oND5cbiAqICAgPHA+VW5kZSBxdW8sIG1pbnVzIGVhcXVlIGVsaWdlbmRpIGN1bSB0ZW1wb3JlLCBudWxsYSwgYWNjdXNhbXVzIGVzdCBsYWJvcmUgdGVuZXR1ciBtb2RpIGV2ZW5pZXQgb2JjYWVjYXRpIHZvbHVwdGFzIGVpdXMgdml0YWUgdmVybyBkb2xvcmVtIG5vYmlzIGN1bHBhIG5paGlsLiBJdGFxdWUgc2FlcGUgc3VzY2lwaXQgb2RpdCBmdWdpdCBxdWlkZW0gY3VscGEuPC9wPlxuICogICA8cD5BY2N1c2FudGl1bSByZWN1c2FuZGFlLCBkaWduaXNzaW1vcyByZXJ1bSBxdWFlcmF0IHZvbHVwdGF0ZW0gcXVpcyBpdGFxdWUgZGVsZW5pdGkgc2VxdWkgYXV0ZW0gZXhwbGljYWJvIGRvbG9yZSBkZWxlY3R1cywgZG9sb3JlbXF1ZSBlb3MuIEFjY3VzYW50aXVtPHN1cD5zdXA8L3N1cD4gcmVjdXNhbmRhZTxzdWI+c3ViPC9zdWI+IGVpdXMsIGRlYml0aXMgdm9sdXB0YXRlcyBhZGlwaXNjaSBhc3Blcm5hdHVyIHJlbSB2b2x1cHRhdHVtLCBkZWxlY3R1cywgdGVtcG9yZSBhY2N1c2FudGl1bSBkb2xvcnVtIGN1bXF1ZSBlcnJvci48L3A+XG4gKi9cbmgxLCAuaDEge1xuXHRmb250LXNpemU6IDMuNDNyZW07XG5cdGxpbmUtaGVpZ2h0OiA0cmVtO1xuXHRmb250LWZhbWlseTogXCJEcm9pZCBTZXJpZlwiLCBzZXJpZjtcblx0d2VpZ2h0OiA0MDA7XG5cdG1hcmdpbjogMDsgfVxuXG5oMiwgLmgyIHtcblx0Zm9udC1zaXplOiAyLjQ1cmVtO1xuXHRsaW5lLWhlaWdodDogM3JlbTtcblx0Zm9udC1mYW1pbHk6IFwiRHJvaWQgU2VyaWZcIiwgc2VyaWY7XG5cdHdlaWdodDogNDAwO1xuXHRtYXJnaW46IDA7IH1cblxuaDMsIC5oMyB7XG5cdGZvbnQtc2l6ZTogMS43NXJlbTtcblx0bGluZS1oZWlnaHQ6IDJyZW07XG5cdGZvbnQtZmFtaWx5OiBcIkRyb2lkIFNlcmlmXCIsIHNlcmlmO1xuXHR3ZWlnaHQ6IDQwMDtcblx0bWFyZ2luOiAwOyB9XG5cbmg0LCAuaDQge1xuXHRmb250LXNpemU6IDEuNDc5MDNyZW07XG5cdGxpbmUtaGVpZ2h0OiAycmVtO1xuXHRmb250LWZhbWlseTogXCJEcm9pZCBTZXJpZlwiLCBzZXJpZjtcblx0d2VpZ2h0OiA0MDA7XG5cdG1hcmdpbjogMDsgfVxuXG5oNSwgLmg1LCBoNiwgLmg2IHtcblx0Zm9udC1zaXplOiAxLjI1cmVtO1xuXHRsaW5lLWhlaWdodDogMnJlbTtcblx0Zm9udC1mYW1pbHk6IFwiRHJvaWQgU2VyaWZcIiwgc2VyaWY7XG5cdHdlaWdodDogNDAwO1xuXHRtYXJnaW46IDFyZW0gMCAwOyB9XG5cbnAge1xuXHRtYXJnaW46IDFyZW0gYXV0bzsgfVxuXG5zdHJvbmcge1xuXHRmb250LXdlaWdodDogNzAwOyB9XG5cbmVtIHtcblx0Zm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qKipcbiAqIExpbmtzXG4gKlxuICogaHRtbDpcbiAqICAgPGEgaHJlZj1cIiNcIj5TaW1wbGUgRGVmYXVsdCBMaW5rPC9hPlxuICovXG5hIHtcblx0Y29sb3I6ICMwNDZDNkY7XG5cdHRyYW5zaXRpb246IGNvbG9yIDAuMTVzO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7IH1cblx0YTpob3ZlciB7XG5cdFx0Y29sb3I6ICMxMWMxYzQ7IH1cblxuLyoqXG4gKiAgSW1hZ2UgUmVzZXRzXG4gKi9cbmltZyB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IG5vbmU7IH1cblxuLyoqXG4gKiBIaWRlIHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAqL1xuc3ZnOm5vdCg6cm9vdCkge1xuXHRvdmVyZmxvdzogaGlkZGVuOyB9XG5cbltzcmMkPSdzdmcnXSB7XG5cdHdpZHRoOiBhdXRvO1xuXHRoZWlnaHQ6IGF1dG87IH1cblxuLyoqKlxuICogSG9yaXpvbnRhbCBSdWxlXG4gKlxuICogaHRtbDpcbiAqICAgPGhyPlxuICovXG5ociB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogYXV0bztcblx0bWFyZ2luOiAzcmVtIDNyZW07XG5cdGJvcmRlcjogbm9uZTtcblx0aGVpZ2h0OiAxcHg7XG5cdGJhY2tncm91bmQ6ICNlOWVhZjA7IH1cblx0QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NS42MjVlbSkge1xuXHRcdGhyIHtcblx0XHRcdG1hcmdpbjogM3JlbSA2cmVtOyB9IH1cblxuLyoqKlxuICogIExpc3RzXG4gKlxuICogIGh0bWw6XG4gKiAgICA8dWw+XG4gKiAgICAgIDxsaT5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldDwvbGk+XG4gKiAgICAgIDxsaT5NaW5pbWEgcmVjdXNhbmRhZSBhZGlwaXNjaSBxdWlkZW08L2xpPlxuICogICAgICA8bGk+QW1ldCBldW0gbm9uIGFuaW1pIHNvbHV0YTwvbGk+XG4gKiAgICAgIDxsaT5TYWVwZSBjb21tb2RpIG5lc2NpdW50IHF1YWVyYXQgcXVhZSBtaW5pbWE8L2xpPlxuICogICAgPC91bD5cbiAqICAgIDxvbD5cbiAqICAgICAgPGxpPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0PC9saT5cbiAqICAgICAgPGxpPk1pbmltYSByZWN1c2FuZGFlIGFkaXBpc2NpIHF1aWRlbTwvbGk+XG4gKiAgICAgIDxsaT5BbWV0IGV1bSBub24gYW5pbWkgc29sdXRhPC9saT5cbiAqICAgICAgPGxpPlNhZXBlIGNvbW1vZGkgbmVzY2l1bnQgcXVhZXJhdCBxdWFlIG1pbmltYTwvbGk+XG4gKiAgICA8L29sPlxuICovXG51bCwgb2wge1xuXHRtYXJnaW46IDJyZW0gMDtcblx0cGFkZGluZy1sZWZ0OiAycmVtOyB9XG5cbmxpIHtcblx0bWFyZ2luOiAxcmVtIDA7IH1cblxuLyoqKlxuICogQmxvY2txdW90ZVxuICpcbiAqIEluc2V0IHdpdGggYSBsZWZ0IGJvcmRlci5cbiAqXG4gKiBodG1sOlxuICogICA8YmxvY2txdW90ZT5cbiAqICAgICA8cD5cIlNvbWUgY29udGVudCB0aGF0J3MgYSBxdW90ZS5cIjwvcD5cbiAqICAgPC9ibG9ja3F1b3RlPlxuICovXG5ibG9ja3F1b3RlIHtcblx0bWFyZ2luOiAxcmVtIDA7XG5cdHBhZGRpbmc6IDAgMCAwIDAuNzVyZW07XG5cdGJvcmRlci1sZWZ0OiAwLjI1cmVtIHNvbGlkICNlOWVhZjA7IH1cblxuLyoqKlxuICogVGFibGVcbiAqXG4gKiBodG1sOlxuICogICA8dGFibGU+XG4gKiAgICAgPHRyPlxuICogICAgICAgPHRoPkxvcmVtPC90aD5cbiAqICAgICAgIDx0ZD5JcHN1bTwvdGQ+XG4gKiAgICAgICA8dGQ+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQuIEVzc2VcbiAqICAgICAgICAgIHBlcnNwaWNpYXRpcyB2aXRhZSBzdW50LCBtYWduYW0gYmxhbmRpdGlpcyB1bmRlIHZlbGl0IHF1aXMgcGVyZmVyZW5kaXNcbiAqICAgICAgICAgIGl1cmUgdXQgZXhjZXB0dXJpIHRlbXBvcmEgZW9zIGF1dGVtIGFjY3VzYW11cyBhbWV0IGV0LCBub24/IERpc3RpbmN0aW8sXG4gKiAgICAgICAgICBlYXF1ZS48L3RkPlxuICogICAgIDwvdHI+XG4gKiAgICAgPHRyPlxuICogICAgICAgPHRoPlNpdDwvdGg+XG4gKiAgICAgICA8dGQ+QW1ldDwvdGQ+XG4gKiAgICAgICA8dGQ+TG9yZW08L3RkPlxuICogICAgIDwvdHI+XG4gKiAgICAgPHRyPlxuICogICAgICAgPHRoPklwc3VtPC90aD5cbiAqICAgICAgIDx0ZD5Eb2xvcjwvdGQ+XG4gKiAgICAgICA8dGQ+U2l0PC90ZD5cbiAqICAgICA8L3RyPlxuICogICA8L3RhYmxlPlxuICovXG50YWJsZSB7XG5cdGRpc3BsYXk6IHRhYmxlO1xuXHR3aWR0aDogMTAwJTtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfVxuXG50ciB7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTllYWYwO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U5ZWFmMDsgfVxuXG50aCwgdGQge1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAwLjVyZW0gMXJlbTtcblx0dmVydGljYWwtYWxpZ246IHRvcDsgfVxuXHRAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ1LjYxNWVtKSB7XG5cdFx0dGgsIHRkIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrOyB9IH1cblxuLyoqKlxuICogIENvZGVcbiAqXG4gKiAgYDxjb2RlPmAgZWxlbWVudHMuIFVzZXMgYCRmb250LW1vbm9gLlxuICpcbiAqICBodG1sOlxuICogICAgPGNvZGU+dGhpcy5pc19zb21lKFwiY29kZVwiKTwvY29kZT5cbiAqL1xuY29kZSB7XG5cdGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBtb25vc3BhY2U7IH1cblxuLyoqKlxuICogSW5wdXRcbiAqXG4gKiBTdGFuZGFyZCBpbnB1dCBlbGVtZW50LlxuICpcbiAqIGh0bWw6XG4gKiAgIDxpbnB1dCB0eXBlPVwidGV4dFwiPlxuICovXG5pbnB1dCB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0cGFkZGluZzogMCAwLjVyZW07XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRib3JkZXI6IDFweCBzb2xpZCAjZTllYWYwO1xuXHRmb250LXNpemU6IDEuMjVyZW07XG5cdGxpbmUtaGVpZ2h0OiAycmVtO1xuXHRmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgbW9ub3NwYWNlOyB9XG5cdGlucHV0OmZvY3VzIHtcblx0XHRib3JkZXItY29sb3I6ICMwNDZDNkY7IH1cblxuLyoqKlxuICogQXRvbXNcbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHNtYWxsZXN0IGxldmVsIG9mIHN0eWxlcyB0aGF0IG1lcml0IGEgY2xhc3MuICBFeGFtcGxlcyBhcmUgYnV0dG9ucywgaWNvbnMsIGFuZCB0ZXh0IHZhcmlhdGlvbnMgbGlrZSBkaXNjbGFpbWVycy5cbiAqID4gVGhlIHN0eWxlcyBpbiBhbiBhdG9tIHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgYXR0YWNoZWQgdG8gYW4gSFRNTCBlbGVtZW50IGl0c2VsZjsgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZ3VhcmFudGVlIHdoYXQgdGhlIG1hcmt1cCB3aWxsIGxvb2sgbGlrZSBpbiB0aGUgZnV0dXJlLiBTcGVjaWZ5aW5nIGEgY2xhc3MgaW5zdGVhZCBpcyBhbHdheXMgc2FmZXIuXG4gKiA+XG4gKiA+XFwtIGh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxMy8wOC9vdGhlci1pbnRlcmZhY2UtYXRvbWljLWRlc2lnbi1zYXNzL1xuICovXG4vKioqXG4gKiAgRmlsZSBQYXRoXG4gKlxuICogIExpZ2h0IHRleHQgc2hvd2luZyB3aGVyZSB0byBmaW5kIHRoZSBlbGVtZW50IGJlaW5nIGRlc2NyaWJlZC5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxwIGNsYXNzPVwiZmlsZS1wYXRoXCI+Li9kZXYvc2Nzcy9zdXBlci9fYXdlc29tZS1maWxlLnNjc3M8L3A+XG4gKi9cbi5maWxlLXBhdGgge1xuXHRmb250LXNpemU6IDAuODc1cmVtO1xuXHRsaW5lLWhlaWdodDogMXJlbTtcblx0Zm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIG1vbm9zcGFjZTtcblx0bWFyZ2luOiAwO1xuXHRjb2xvcjogcmdiYSg1MSwgNTEsIDUxLCAwLjUpOyB9XG5cbi8qKipcbiAqICBDb2xvciBTd2F0Y2hcbiAqXG4gKiAgSnVzdCBhIGJpZyBibG9jayBvZiBjb2xvci5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2hcIj48L2Rpdj5cbiAqXG4gKiAgQGRlZmF1bHQgLnN3YXRjaC0tbGlnaHRcbiAqL1xuLnN3YXRjaCB7XG5cdG1pbi1oZWlnaHQ6IDhyZW07XG5cdGJhY2tncm91bmQ6ICMwNDZDNkY7IH1cblxuLyoqKlxuICogIEZvbnQgU2FtcGxlXG4gKlxuICogIFNob3dzIHRoZSBmaXJzdCBmb250IGZvdW5kIGluIHRoZSBmb250IHN0YWNrIG9mIHZhcmlhYmxlcyBpbiBhIGZpbGUgbmFtZWQgZm9udHMuc2Nzcy5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxkaXYgY2xhc3M9XCJmb250LXNhbXBsZVwiPlxuICogICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2FtcGxlX192YXItbmFtZVwiPiRteS1mb250PC9zcGFuPlxuICogICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2FtcGxlX192YWx1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjtcIj5cbiAqICAgICAgICBUaW1lcyBOZXcgUm9tYW5cbiAqICAgICAgPC9zcGFuPlxuICogICAgPC9kaXY+XG4gKi9cbi5mb250LXNhbXBsZSB7XG5cdG1hcmdpbjogMnJlbSBhdXRvOyB9XG5cbi5mb250LXNhbXBsZV9fdmFyLW5hbWUge1xuXHRmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgbW9ub3NwYWNlO1xuXHRkaXNwbGF5OiBibG9jazsgfVxuXG4uZm9udC1zYW1wbGVfX3ZhbHVlIHtcblx0Zm9udC1zaXplOiAyLjQ1cmVtO1xuXHRsaW5lLWhlaWdodDogM3JlbTsgfVxuXG4vKioqXG4gKiAgQnV0dG9uXG4gKlxuICogIEJhc2ljIGJ1dHRvbiwgYW5kIGl0cyB2YXJpYXRpb25zLlxuICpcbiAqICBAbW9kaWZpZXIgLmJ1dHRvbi0tc21hbGxcbiAqICBAbW9kaWZpZXIgLmJ1dHRvbi0taWNvbi1waG9uZVxuICpcbiAqICBodG1sOlxuICogICAgPGEgY2xhc3M9XCJidXR0b25cIj5DbGljayBIZXJlLCBEdW1teTwvYT5cbiAqXG4gKiAgdGVtcGxhdGU6IGh0bWxcbiAqL1xuLmJ1dHRvbiB7XG5cdGZvbnQtc2l6ZTogMS4yNXJlbTtcblx0bGluZS1oZWlnaHQ6IDJyZW07XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRwYWRkaW5nOiAwLjVyZW0gMXJlbTtcblx0Ym9yZGVyOiAxcHggc29saWQgIzA0NkM2Rjtcblx0Ym9yZGVyLXJhZGl1czogMC4yNXJlbTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHR0cmFuc2l0aW9uOiBhbGwgLjNzO1xuXHRjb2xvcjogIzA0NkM2Rjtcblx0YmFja2dyb3VuZDogI2ZmZjsgfVxuXHQuYnV0dG9uOmhvdmVyIHtcblx0XHRib3JkZXItY29sb3I6ICMxMWMxYzQ7XG5cdFx0Ym94LXNoYWRvdzogaW5zZXQgMCAwIDFyZW0gcmdiYSg0LCAxMDgsIDExMSwgMC4yNSk7XG5cdFx0Y29sb3I6ICMxMWMxYzQ7IH1cblx0LmJ1dHRvbi0taWNvbi1zZXR0aW5ncyB7XG5cdFx0cGFkZGluZy1sZWZ0OiBjYWxjKDEuNWVtICsgMXJlbSk7IH1cblx0XHQuYnV0dG9uLS1pY29uLXNldHRpbmdzOmJlZm9yZSB7XG5cdFx0XHRjb250ZW50OiBcIu6AjlwiOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1zZXR0aW5nczo6YmVmb3JlIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0bGVmdDogMXJlbTtcblx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgfVxuXHQuYnV0dG9uLS1pY29uLW1lbnUge1xuXHRcdHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArIDFyZW0pOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1tZW51OmJlZm9yZSB7XG5cdFx0XHRjb250ZW50OiBcIu6AiFwiOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1tZW51OjpiZWZvcmUge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRsZWZ0OiAxcmVtO1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG5cdC5idXR0b24tLWljb24tcGhvbmUge1xuXHRcdHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArIDFyZW0pOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1waG9uZTpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogXCLugItcIjsgfVxuXHRcdC5idXR0b24tLWljb24tcGhvbmU6OmJlZm9yZSB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDUwJTtcblx0XHRcdGxlZnQ6IDFyZW07XG5cdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IH1cblx0LmJ1dHRvbi0taWNvbi10YWJsZXQge1xuXHRcdHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArIDFyZW0pOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi10YWJsZXQ6YmVmb3JlIHtcblx0XHRcdGNvbnRlbnQ6IFwi7oCPXCI7IH1cblx0XHQuYnV0dG9uLS1pY29uLXRhYmxldDo6YmVmb3JlIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0bGVmdDogMXJlbTtcblx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgfVxuXHQuYnV0dG9uLS1pY29uLWRlc2t0b3Age1xuXHRcdHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArIDFyZW0pOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1kZXNrdG9wOmJlZm9yZSB7XG5cdFx0XHRjb250ZW50OiBcIu6AhVwiOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1kZXNrdG9wOjpiZWZvcmUge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRsZWZ0OiAxcmVtO1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG5cdC5idXR0b24tLWljb24tcmlnaHQtYXJyb3cge1xuXHRcdHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArIDFyZW0pOyB9XG5cdFx0LmJ1dHRvbi0taWNvbi1yaWdodC1hcnJvdzpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogXCLugI1cIjsgfVxuXHRcdC5idXR0b24tLWljb24tcmlnaHQtYXJyb3c6OmJlZm9yZSB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDUwJTtcblx0XHRcdGxlZnQ6IDFyZW07XG5cdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IH1cblx0LmJ1dHRvbi0taWNvbi1jb3B5IHtcblx0XHRwYWRkaW5nLWxlZnQ6IGNhbGMoMS41ZW0gKyAxcmVtKTsgfVxuXHRcdC5idXR0b24tLWljb24tY29weTpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogXCLugIRcIjsgfVxuXHRcdC5idXR0b24tLWljb24tY29weTo6YmVmb3JlIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0bGVmdDogMXJlbTtcblx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgfVxuXG4uYnV0dG9uLS1zbWFsbCB7XG5cdGZvbnQtc2l6ZTogMC44NzVyZW07XG5cdGxpbmUtaGVpZ2h0OiAxcmVtO1xuXHRwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTsgfVxuXHQuYnV0dG9uLS1zbWFsbDo6YmVmb3JlIHtcblx0XHRsZWZ0OiAwLjVyZW07IH1cblxuLyoqKlxuICogQ29weWFibGUgZWxlbWVudFxuICpcbiAqIEVsZW1lbnQgdGhhdCwgd2hlbiBjbGlja2VkLCBjb3BpZXMgYSBzdHJpbmcgdG8gdGhlIHVzZXIncyBjbGlwYm9hcmQuXG4gKlxuICogV2hlbiBob3ZlcmVkLCBhbiBpY29uIGFwcGVhcnMuIEl0IGp1bXBzIHdoZW4gdGhlIHVzZXIgY2xpY2tzICh0aHVzIGdldHRpbmcgdGhlIGNvcHkpLlxuICpcbiAqIGh0bWw6XG4gKiAgIDxzcGFuIGRhdGEtY29weT1cIkNvcHkgTWUhXCI+Q2xpY2sgdG8gXCJDb3B5IE1lXCI8L3NwYW4+XG4gKi9cbltkYXRhLWNvcHldIHtcblx0Y3Vyc29yOiBjb3B5OyB9XG5cdFtkYXRhLWNvcHldOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCLugIRcIjsgfVxuXHRbZGF0YS1jb3B5XTo6YmVmb3JlIHtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0d2lkdGg6IDA7XG5cdFx0dmVydGljYWwtYWxpZ246IGJvdHRvbTtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4yNWVtKTtcblx0XHR0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhciwgdHJhbnNmb3JtIDAuMTVzIGVhc2UtaW47XG5cdFx0Y29sb3I6ICMwNDZDNkY7IH1cblx0W2RhdGEtY29weV06aG92ZXI6OmJlZm9yZSB7XG5cdFx0b3BhY2l0eTogMTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTFlbSk7XG5cdFx0dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0OyB9XG5cdFtkYXRhLWNvcHldOmFjdGl2ZTo6YmVmb3JlIHtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE1JSk7XG5cdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7IH1cblxuLyoqKlxuICogQXR0cmlidXRlXG4gKlxuICogQSBwYXJhbWV0ZXIsIG1ldGhvZCwgb3Igb3RoZXIgYXJyYXktbGlrZSBiaXQgb2YgaW5mbyBmb3IgYSBjb21wb25lbnQuXG4gKlxuICogQXNzdW1lcyBpdCdzIHBhcnQgb2YgYW4gW0F0dHJpYnV0ZSBMaXN0XSgjL21vbGVjdWxlcy9hdHRyaWJ1dGUtbGlzdCkuXG4gKlxuICogaHRtbDpcbiAqICAgPGR0IGNsYXNzPVwiYXR0cmlidXRlLWxpc3RfX3Rlcm1cIj5cbiAqICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fdHlwZVwiPkRPTUVsZW1lbnQ8L3NwYW4+XG4gKiAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGVfX25hbWVcIj5tYWtlSW5wdXQoKTwvc3Bhbj5cbiAqICAgPC9kdD5cbiAqICAgPGRkIGNsYXNzPVwiYXR0cmlidXRlLWxpc3RfX2Rlc2NyaXB0aW9uXCI+XG4gKiAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZV9fZGVzY3JpcHRpb25cIj5cbiAqICAgICAgIDxwPmludGVybmFsIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIGlucHV0IGZyb20gd2hpY2ggdGhlIHN0cmluZyB3aWxsIGJlIGNvcGllZC48L3A+XG4gKiAgICAgPC9kaXY+XG4gKiAgIDwvZGQ+XG4gKlxuICogd3JhcDogZGwuYXR0cmlidXRlLWxpc3RcbiAqL1xuLmF0dHJpYnV0ZV9fdHlwZSB7XG5cdGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBtb25vc3BhY2U7XG5cdGZvbnQtc2l6ZTogMC44NzVyZW07XG5cdGxpbmUtaGVpZ2h0OiAxcmVtO1xuXHRtYXJnaW4tcmlnaHQ6IDFyZW07XG5cdGNvbG9yOiByZ2JhKDUxLCA1MSwgNTEsIDAuNSk7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4uYXR0cmlidXRlX19uYW1lIHtcblx0Zm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIG1vbm9zcGFjZTtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmF0dHJpYnV0ZV9fZGVzY3JpcHRpb24gPiA6Zmlyc3QtY2hpbGQge1xuXHRtYXJnaW4tdG9wOiAwOyB9XG5cbi8qKipcbiAqIE1vbGVjdWxlc1xuICpcbiAqIFN0cnVjdHVyZXMgd2hpY2ggY29tYmluZSBtdWx0aXBsZSBlbGVtZW50cyB0byBjcmVhdGUgYSBjb2hlcmVudCBwaWVjZS4gQSBoZWFkZXIgd2l0aCBhbiBpbWFnZSBhbmQgaGVhZGxpbmUsIG9yIGEgbmF2IGRyb3Bkb3duIGNvbnRhaW5pbmcgbnVtZXJvdXMgbGlua3MsIGZvciBleGFtcGxlLlxuICogPiBUaGlzIGlzIHdoZXJlIHdlIGNhbiBjb21iaW5lIG11bHRpcGxlIHF1YXJrcyBhbmQgYXRvbXMsIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBhbnkgb2Ygb3VyIGdsb2JhbCBzdHlsZXMuXG4gKiA+XG4gKiA+XFwtIGh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxMy8wOC9vdGhlci1pbnRlcmZhY2UtYXRvbWljLWRlc2lnbi1zYXNzL1xuICovXG4vKioqXG4gKiAgTWFpbiBOYXZcbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxuYXYgY2xhc3M9XCJuYXYtbWFpblwiPlxuICogICAgICA8dWwgY2xhc3M9XCJuYXYtbWFpbl9fbGlzdFwiPlxuICogICAgICAgIDxsaSBjbGFzcz1cIm5hdi1tYWluX19pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbWFpbl9fbGlua1wiIGhyZWY9XCIjL2NvbG9yc1wiPkNvbG9yczwvYT48L2xpPlxuICogICAgICAgIDxsaSBjbGFzcz1cIm5hdi1tYWluX19pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbWFpbl9fbGlua1wiIGhyZWY9XCIjL2ZvbnRzXCI+Rm9udHM8L2E+PC9saT5cbiAqICAgICAgICA8bGkgY2xhc3M9XCJuYXYtbWFpbl9faXRlbVwiPlxuICogICAgICAgICAgPGEgaHJlZj1cIiMvcXVhcmtzXCIgY2xhc3M9XCJuYXYtbWFpbl9fbGlua1wiPlF1YXJrczwvYT5cbiAqICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdi1tYWluX19zdWJuYXZcIj5cbiAqICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LW1haW5fX2l0ZW1cIj5cbiAqICAgICAgICAgICAgICA8YSBocmVmPVwiIy9xdWFya3MvYmxvY2txdW90ZVwiIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIj5CbG9ja3F1b3RlPC9hPlxuICogICAgICAgICAgICA8L2xpPlxuICogICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtbWFpbl9faXRlbVwiPlxuICogICAgICAgICAgICAgIDxhIGhyZWY9XCIjL3F1YXJrcy9jb2RlXCIgY2xhc3M9XCJuYXYtbWFpbl9fbGlua1wiPkNvZGU8L2E+XG4gKiAgICAgICAgICAgIDwvbGk+XG4gKiAgICAgICAgICA8L3VsPlxuICogICAgICAgIDwvbGk+XG4gKiAgICAgICAgPGxpIGNsYXNzPVwibmF2LW1haW5fX2l0ZW1cIj5cbiAqICAgICAgICAgIDxhIGhyZWY9XCIjL2F0b21zXCIgY2xhc3M9XCJuYXYtbWFpbl9fbGlua1wiPkF0b21zPC9hPlxuICogICAgICAgIDwvbGk+XG4gKiAgICAgIDwvdWw+XG4gKiAgICA8L25hdj5cbiAqL1xuLm5hdi1tYWluIHtcblx0bWF4LWhlaWdodDogMTAwJTtcblx0cGFkZGluZzogMnJlbSAxcmVtO1xuXHRvdmVyZmxvdzogYXV0bztcblx0b3ZlcmZsb3c6IC1tb3otc2Nyb2xsYmFycy1ub25lOyB9XG5cdC5uYXYtbWFpbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdHdpZHRoOiAwLjI1cmVtOyB9XG5cdC5uYXYtbWFpbl9fbGlzdCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0bGlzdC1zdHlsZS10eXBlOiBub25lOyB9XG5cdC5uYXYtbWFpbl9faXRlbSB7XG5cdFx0bWFyZ2luOiAwOyB9XG5cdC5uYXYtbWFpbl9fc3VibmF2IHtcblx0XHRmb250LXNpemU6IDAuODc1cmVtO1xuXHRcdGxpbmUtaGVpZ2h0OiAxcmVtO1xuXHRcdG1hcmdpbjogMDtcblx0XHRwYWRkaW5nOiAwO1xuXHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgfVxuXHRcdC5uYXYtbWFpbl9fc3VibmF2IC5uYXYtbWFpbl9fbGluayB7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDFyZW07IH1cblx0XHQubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX2xpbmsge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAycmVtOyB9XG5cdFx0Lm5hdi1tYWluX19zdWJuYXYgLm5hdi1tYWluX19zdWJuYXYgLm5hdi1tYWluX19zdWJuYXYgLm5hdi1tYWluX19saW5rIHtcblx0XHRcdHBhZGRpbmctbGVmdDogM3JlbTsgfVxuXHRcdC5uYXYtbWFpbl9fc3VibmF2IC5uYXYtbWFpbl9fc3VibmF2IC5uYXYtbWFpbl9fc3VibmF2IC5uYXYtbWFpbl9fc3VibmF2IC5uYXYtbWFpbl9fbGluayB7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDRyZW07IH1cblx0XHQubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX3N1Ym5hdiAubmF2LW1haW5fX2xpbmsge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiA1cmVtOyB9XG5cdC5uYXYtbWFpbl9fbGluayB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbi8qKipcbiAqIEJ1dHRvbiBHcm91cFxuICpcbiAqIEdyb3VwIG9mIGJ1dHRvbnMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9ucy5cbiAqXG4gKiBVc2VzIHNleHktYXNzIFttb2QgcXVlcmllc10oIy91dGlsaXRpZXMvbWl4aW5zL21vZC1xdWVyeSkgdG8gc2l6ZSBidXR0b25zIGJhc2VkXG4gKiBvbiB3aGV0aGVyIHRoZSBudW1iZXIgaXMgZGl2aXNpYmxlIGJ5IDIgb3IgMy5cbiAqXG4gKiBodG1sOlxuICogICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAxPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAyPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAzPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiA0PC9idXR0b24+XG4gKiAgIDwvZGl2PlxuICpcbiAqICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMTwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMjwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMzwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gNDwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gNTwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gNjwvYnV0dG9uPlxuICogICA8L2Rpdj5cbiAqXG4gKiAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDE8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDI8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDM8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDQ8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDU8L2J1dHRvbj5cbiAqICAgPC9kaXY+XG4gKi9cbi5idXR0b24tZ3JvdXAge1xuXHRtYXJnaW46IDFyZW0gMDtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwOyB9XG5cdC5idXR0b24tZ3JvdXBfX2J1dHRvbiB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRib3JkZXItcmFkaXVzOiAwO1xuXHRcdGJvcmRlci10b3Atd2lkdGg6IDA7XG5cdFx0ZmxleC1zaHJpbms6IDA7IH1cblx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246Zmlyc3QtY2hpbGQge1xuXHRcdFx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4yNXJlbTtcblx0XHRcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjI1cmVtO1xuXHRcdFx0Ym9yZGVyLXRvcC13aWR0aDogMXB4OyB9XG5cdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOmxhc3QtY2hpbGQge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4yNXJlbTtcblx0XHRcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjI1cmVtOyB9XG5cdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDJuKzApOmZpcnN0LWNoaWxkLFxuXHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbiB7XG5cdFx0XHR3aWR0aDogNTAlOyB9XG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoMm4rMCk6Zmlyc3QtY2hpbGQ6Zmlyc3QtY2hpbGQsXG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoMm4rMCk6Zmlyc3QtY2hpbGQgfiAuYnV0dG9uLWdyb3VwX19idXR0b246Zmlyc3QtY2hpbGQge1xuXHRcdFx0XHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfVxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDJuKzApOmZpcnN0LWNoaWxkOm50aC1jaGlsZCgyKSxcblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtY2hpbGQoMikge1xuXHRcdFx0XHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTtcblx0XHRcdFx0Ym9yZGVyLXRvcC13aWR0aDogMXB4OyB9XG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoMm4rMCk6Zmlyc3QtY2hpbGQ6bnRoLWNoaWxkKDJuKSxcblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtY2hpbGQoMm4pIHtcblx0XHRcdFx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgyKSxcblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgyKSB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLFxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDJuKzApOmZpcnN0LWNoaWxkIH4gLmJ1dHRvbi1ncm91cF9fYnV0dG9uOmxhc3QtY2hpbGQge1xuXHRcdFx0XHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyB9XG5cdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDNuKzApOmZpcnN0LWNoaWxkLFxuXHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbiB7XG5cdFx0XHR3aWR0aDogMzMuMzMzMzMlOyB9XG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQ6Zmlyc3QtY2hpbGQsXG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQgfiAuYnV0dG9uLWdyb3VwX19idXR0b246Zmlyc3QtY2hpbGQge1xuXHRcdFx0XHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfVxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDNuKzApOmZpcnN0LWNoaWxkOm50aC1jaGlsZCgyKSxcblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtY2hpbGQoMikge1xuXHRcdFx0XHRib3JkZXItdG9wLXdpZHRoOiAxcHg7IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZDpudGgtY2hpbGQoMyksXG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQgfiAuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWNoaWxkKDMpIHtcblx0XHRcdFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07XG5cdFx0XHRcdGJvcmRlci10b3Atd2lkdGg6IDFweDsgfVxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDNuKzApOmZpcnN0LWNoaWxkOm50aC1jaGlsZCgybiksXG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQgfiAuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWNoaWxkKDJuKSB7XG5cdFx0XHRcdGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZDpudGgtY2hpbGQoM24pLCAuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQ6bnRoLWNoaWxkKDNuLTEpLFxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDNuKzApOmZpcnN0LWNoaWxkIH4gLmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1jaGlsZCgzbiksXG5cdFx0XHQuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQgfiAuYnV0dG9uLWdyb3VwX19idXR0b246bnRoLWNoaWxkKDNuLTEpIHtcblx0XHRcdFx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZDpudGgtbGFzdC1jaGlsZCgzKSxcblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCB+IC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzKSB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuMjVyZW07IH1cblx0XHRcdC5idXR0b24tZ3JvdXBfX2J1dHRvbjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLFxuXHRcdFx0LmJ1dHRvbi1ncm91cF9fYnV0dG9uOm50aC1sYXN0LWNoaWxkKDNuKzApOmZpcnN0LWNoaWxkIH4gLmJ1dHRvbi1ncm91cF9fYnV0dG9uOmxhc3QtY2hpbGQge1xuXHRcdFx0XHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi8qKipcbiAqIENvbG9yIFNhbXBsZVxuICpcbiAqIEEgc3dhdGNoIGFuZCB2YXJpYWJsZSBuYW1lICsgY29sb3IgdmFsdWUgY29tYm8gbW9sZWN1bGUuIEpTIGFsc28gbWFrZXMgdGhlXG4gKiB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZSBjb3B5YWJsZSB3aXRoIGEgY2xpY2suXG4gKlxuICogQGRlZmF1bHQgLmNvbG9yLS1saWdodFxuICogQG1vZGlmaWVyIC5jb2xvci0tZGFyayAtIHdoZW4gYSBjb2xvcidzIGx1bWlub3NpdHkgaXMgPCA1NSUuXG4gKlxuICogaHRtbDpcbiAqICAgPGRpdiBjbGFzcz1cImNvbG9yXCI+XG4gKiAgICAgPGRpdiBjbGFzcz1cInN3YXRjaFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2YxM2IwYztcIj48L2Rpdj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29sb3JfX2RldGFpbHNcIj5cbiAqICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3JfX3Zhci1uYW1lIGpzLWNvcHlhYmxlXCIgZGF0YS1jb3B5PVwiJG15LWNvbG9yXCI+JG15LWNvbG9yPC9zcGFuPlxuICogICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFsdWUganMtY29weWFibGVcIiBkYXRhLWNvcHk9XCIjRjEzQjBDXCI+I0YxM0IwQzwvc3Bhbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKi9cbi5jb2xvciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXHQuY29sb3IgLnN3YXRjaCB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiAxMDAlOyB9XG5cdC5jb2xvcl9fZGV0YWlscyB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHJpZ2h0OiAwO1xuXHRcdGJvdHRvbTogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHBhZGRpbmc6IDFyZW0gMXJlbTtcblx0XHR0ZXh0LWFsaWduOiByaWdodDsgfVxuXHQuY29sb3JfX3Zhci1uYW1lIHtcblx0XHRmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgbW9ub3NwYWNlO1xuXHRcdGRpc3BsYXk6IGJsb2NrOyB9XG5cdC5jb2xvcl9fdmFsdWUge1xuXHRcdGRpc3BsYXk6IGJsb2NrOyB9XG5cdC5jb2xvci0tZGFyayB7XG5cdFx0Y29sb3I6IHdoaXRlOyB9XG5cdFx0LmNvbG9yLS1kYXJrIFtkYXRhLWNvcHldOjpiZWZvcmUge1xuXHRcdFx0Y29sb3I6IHdoaXRlOyB9XG5cbi5obGpzLWNvbW1lbnQge1xuXHRjb2xvcjogcmdiYSg1MSwgNTEsIDUxLCAwLjUpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLmhsanMtcXVvdGUge1xuXHRjb2xvcjogcmdiYSg1MSwgNTEsIDUxLCAwLjUpO1xuXHRmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLmhsanMta2V5d29yZCB7XG5cdGNvbG9yOiAjMzMzO1xuXHRmb250LXdlaWdodDogYm9sZDsgfVxuXG4uaGxqcy1zZWxlY3Rvci10YWcge1xuXHRjb2xvcjogIzMzMztcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmhsanMtc3Vic3Qge1xuXHRjb2xvcjogIzMzMzsgfVxuXG4uaGxqcy1udW1iZXIge1xuXHRjb2xvcjogIzExYzFjNDsgfVxuXG4uaGxqcy1saXRlcmFsIHtcblx0Y29sb3I6ICMxMWMxYzQ7IH1cblxuLmhsanMtdmFyaWFibGUge1xuXHRjb2xvcjogIzExYzFjNDsgfVxuXG4uaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSB7XG5cdGNvbG9yOiAjMTFjMWM0OyB9XG5cbi5obGpzLXRhZyAuaGxqcy1hdHRyIHtcblx0Y29sb3I6ICMxMWMxYzQ7IH1cblxuLmhsanMtc3RyaW5nIHtcblx0Y29sb3I6ICMxODZjYmY7IH1cblxuLmhsanMtZG9jdGFnIHtcblx0Y29sb3I6ICMxODZjYmY7IH1cblxuLmhsanMtdGl0bGUge1xuXHRjb2xvcjogIzE0NDc3YTtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmhsanMtc2VjdGlvbiB7XG5cdGNvbG9yOiAjMTQ0NzdhO1xuXHRmb250LXdlaWdodDogYm9sZDsgfVxuXG4uaGxqcy1zZWxlY3Rvci1pZCB7XG5cdGNvbG9yOiAjMTQ0NzdhO1xuXHRmb250LXdlaWdodDogYm9sZDsgfVxuXG4uaGxqcy10eXBlIHtcblx0Y29sb3I6ICMwNDZDNkY7XG5cdGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5obGpzLWNsYXNzIC5obGpzLXRpdGxlIHtcblx0Y29sb3I6ICMwNDZDNkY7XG5cdGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5obGpzLXRhZyB7XG5cdGNvbG9yOiAjMDM1OTViO1xuXHRmb250LXdlaWdodDogbm9ybWFsOyB9XG5cbi5obGpzLW5hbWUge1xuXHRjb2xvcjogIzAzNTk1Yjtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDsgfVxuXG4uaGxqcy1hdHRyaWJ1dGUge1xuXHRjb2xvcjogIzAzNTk1Yjtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDsgfVxuXG4uaGxqcy1yZWdleHAge1xuXHRjb2xvcjogIzE0NDc3YTsgfVxuXG4uaGxqcy1saW5rIHtcblx0Y29sb3I6ICMxNDQ3N2E7IH1cblxuLmhsanMtc3ltYm9sIHtcblx0Y29sb3I6ICMxMTNkNjg7IH1cblxuLmhsanMtYnVsbGV0IHtcblx0Y29sb3I6ICMxMTNkNjg7IH1cblxuLmhsanMtYnVpbHRfaW4ge1xuXHRjb2xvcjogIzA0NkM2RjsgfVxuXG4uaGxqcy1idWlsdGluLW5hbWUge1xuXHRjb2xvcjogIzA0NkM2RjsgfVxuXG4uaGxqcy1tZXRhIHtcblx0Y29sb3I6IHJnYmEoNTEsIDUxLCA1MSwgMC41KTtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmhsanMtZGVsZXRpb24ge1xuXHRiYWNrZ3JvdW5kOiAjZmRkOyB9XG5cbi5obGpzLWFkZGl0aW9uIHtcblx0YmFja2dyb3VuZDogI2RmZDsgfVxuXG4uaGxqcy1lbXBoYXNpcyB7XG5cdGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4uaGxqcy1zdHJvbmcge1xuXHRmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKioqXG4gKiBDb2RlIEJsb2NrXG4gKlxuICogQSAodXN1YWxseSkgY29sbGFwc2FibGUgYmxvY2sgb2YgY29kZS4gQ29sb3JzIGFyZSBmcm9tIGEgW3VuaXF1ZSBwYWxldHRlXSgjL21vbGVjdWxlcy9jb2RlLWJsb2NrL2NvZGUtY29sb3JzKS5cbiAqIFRvIHNlZSBob3cgdGhlIGNvbGxhcHNhYmxlIHBhcnQgd29ya3MsIGNoZWNrIGl0IG91dCBpbiBpdHMgW0pTIHNlY3Rpb25dKCMvYXBwL2NvbGxhcHNhYmxlKS5cbiAqXG4gKiBodG1sOlxuICogICA8ZGl2IGNsYXNzPVwiY29kZS1ibG9jayBqcy1jb2xsYXBzYWJsZSBpcy1vcGVuXCI+XG4gKiAgICAgPGRpdiBjbGFzcz1cImNvZGUtYmxvY2tfX2hlYWRlciBjb2xsYXBzYWJsZV9fdG9nZ2xlIGpzLWNvbGxhcHNhYmxlX190b2dnbGVcIj5cbiAqICAgICAgIDxoNj5IVE1MPC9oNj5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8cHJlIGNsYXNzPVwiY29kZS1ibG9ja19fcHJlIGNvbGxhcHNhYmxlX19jb250ZW50IGpzLWNvbGxhcHNhYmxlX19jb250ZW50XCI+PGNvZGUgY2xhc3M9XCJsYW5nLWh0bWxcIj48c3BhbiBjbGFzcz1cImhsanMtdGFnXCI+Jmx0OzxzcGFuIGNsYXNzPVwiaGxqcy1uYW1lXCI+aGVhZGVyPC9zcGFuPiA8c3BhbiBjbGFzcz1cImhsanMtYXR0clwiPmNsYXNzPC9zcGFuPj08c3BhbiBjbGFzcz1cImhsanMtc3RyaW5nXCI+XCJoZWFkZXItbWFpblwiPC9zcGFuPiZndDs8L3NwYW4+XG4gKiAgICAgPHNwYW4gY2xhc3M9XCJobGpzLXRhZ1wiPiZsdDs8c3BhbiBjbGFzcz1cImhsanMtbmFtZVwiPmgxPC9zcGFuPiA8c3BhbiBjbGFzcz1cImhsanMtYXR0clwiPmNsYXNzPC9zcGFuPj08c3BhbiBjbGFzcz1cImhsanMtc3RyaW5nXCI+XCJoZWFkZXItbWFpbl9fdGl0bGVcIjwvc3Bhbj4mZ3Q7PC9zcGFuPkF1dG9ndWlkZTxzcGFuIGNsYXNzPVwiaGxqcy10YWdcIj4mbHQ7LzxzcGFuIGNsYXNzPVwiaGxqcy1uYW1lXCI+aDE8L3NwYW4+Jmd0Ozwvc3Bhbj5cbiAqICAgPHNwYW4gY2xhc3M9XCJobGpzLXRhZ1wiPiZsdDsvPHNwYW4gY2xhc3M9XCJobGpzLW5hbWVcIj5oZWFkZXI8L3NwYW4+Jmd0Ozwvc3Bhbj48L2NvZGU+PC9wcmU+XG4gKiAgIDwvZGl2PlxuICovXG4uY29kZS1ibG9jayB7XG5cdGJvcmRlcjogMC4yNXJlbSBzb2xpZCAjZTllYWYwOyB9XG5cdC5jb2RlLWJsb2NrX19oZWFkZXIge1xuXHRcdHBhZGRpbmc6IDAgMXJlbTtcblx0XHRtYXJnaW46IDA7IH1cblx0XHQuY29kZS1ibG9ja19faGVhZGVyIGg2IHtcblx0XHRcdG1hcmdpbjogMDsgfVxuXHQuY29kZS1ibG9ja19fcHJlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0XHRiYWNrZ3JvdW5kOiAjZTllYWYwO1xuXHRcdGNvbG9yOiAjMzMzO1xuXHRcdG92ZXJmbG93OiBhdXRvOyB9XG5cdFx0LmNvZGUtYmxvY2tfX3ByZSA+IGNvZGUge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRwYWRkaW5nOiAxcmVtIDFyZW07IH1cblxuLyoqKlxuICogQXR0cmlidXRlIExpc3RcbiAqXG4gKiBBIG5lc3RhYmxlIGxpc3Qgb2YgYXR0cmlidXRlcy5cbiAqXG4gKiBodG1sOlxuICogICA8ZGwgY2xhc3M9XCJhdHRyaWJ1dGUtbGlzdCBhdHRyaWJ1dGUtbGlzdC0tbWV0aG9kc1wiPlxuICogICAgIDxoNiBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190aXRsZVwiPk1ldGhvZHM8L2g2PlxuICogICAgIDxkdCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190ZXJtXCI+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fdHlwZVwiPnZvaWQ8L3NwYW4+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fbmFtZVwiPnRvZ2dsZUdyaWQoKTwvc3Bhbj5cbiAqICAgICA8L2R0PlxuICogICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZV9fZGVzY3JpcHRpb25cIj5cbiAqICAgICAgICAgPHA+YWRkcy9yZW1vdmVzIHRoZSAnc2hvdy1ncmlkJyBjbGFzcyB0byB0aGUgIGVsZW1lbnQgc28gd2UgY2FuIHNob3cgYSBncmlkIG92ZXJsYXk8L3A+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2RkPlxuICogICAgIDxkdCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190ZXJtXCI+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fdHlwZVwiPnZvaWQ8L3NwYW4+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fbmFtZVwiPnNldFdpZHRoKHdpZHRoKTwvc3Bhbj5cbiAqICAgICA8L2R0PlxuICogICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZV9fZGVzY3JpcHRpb25cIj5cbiAqICAgICAgICAgPHA+c2V0cyB0aGUgd2lkdGggb2YgdGhlIGlmcmFtZSwgdXNlZnVsIGZvciBzaG93aW5nIG1lZGlhIHF1ZXJpZXM8L3A+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICAgIDxkbCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0IGF0dHJpYnV0ZS1saXN0LS1wYXJhbWV0ZXJzXCI+XG4gKiAgICAgICAgIDxoNiBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190aXRsZVwiPlBhcmFtZXRlcnM8L2g2PlxuICogICAgICAgICA8ZHQgY2xhc3M9XCJhdHRyaWJ1dGUtbGlzdF9fdGVybVwiPlxuICogICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlX190eXBlXCI+aW50PC9zcGFuPlxuICogICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlX19uYW1lXCI+d2lkdGg8L3NwYW4+XG4gKiAgICAgICAgIDwvZHQ+XG4gKiAgICAgICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGVfX2Rlc2NyaXB0aW9uXCI+XG4gKiAgICAgICAgICAgICA8cD53aWR0aCBpbiBwaXhlbHMuIFJlc2V0cyB0byBkZWZhdWx0IHNpemUgaWYgZmFsc3k8L3A+XG4gKiAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgIDwvZGQ+XG4gKiAgICAgICA8L2RsPlxuICogICAgIDwvZGQ+XG4gKiAgIDwvZGw+XG4gKi9cbi5hdHRyaWJ1dGUtbGlzdCB7XG5cdHBhZGRpbmc6IDAgMXJlbTsgfVxuXHQuYXR0cmlidXRlLWxpc3RfX3RpdGxlIHtcblx0XHRmb250LXNpemU6IDAuODc1cmVtO1xuXHRcdGxpbmUtaGVpZ2h0OiAxcmVtOyB9XG5cdC5hdHRyaWJ1dGUtbGlzdF9fZGVzY3JpcHRpb24ge1xuXHRcdG1hcmdpbi1sZWZ0OiAycmVtOyB9XG5cdFx0LmF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvbiAuYXR0cmlidXRlLWxpc3Qge1xuXHRcdFx0cGFkZGluZzogMDsgfVxuXG4vKioqXG4gKiBPcmdhbmlzbXNcbiAqXG4gKiBUaGVzZSBhcmUgYmlnIHRoaW5ncyB0aGF0IGNvbWJpbmUgZXZlcnl0aGluZyBzbWFsbGVyLiAgQW4gZW50aXJlIGZvcm0gY29udGFpbmluZyBtb2xlY3VsZXMgb2YgbGFiZWxzIHdpdGggaW5wdXRzLCBvciB0aGUgZ2xvYmFsIHNpdGUgaGVhZGVyLCBmb3IgZXhhbXBsZS5cbiAqID4gT3JnYW5pc21zIGFyZSBncm91cHMgb2YgbW9sZWN1bGVzIGpvaW5lZCB0b2dldGhlciB0byBmb3JtIGEgcmVsYXRpdmVseSBjb21wbGV4LCBkaXN0aW5jdCBzZWN0aW9uIG9mIGFuIGludGVyZmFjZS5cbiAqID5cbiAqID5cXC0gaHR0cDovL2JyYWRmcm9zdC5jb20vYmxvZy9wb3N0L2F0b21pYy13ZWItZGVzaWduLyNvcmdhbmlzbXNcbiAqL1xuLyoqKlxuICogIFNlY3Rpb25cbiAqXG4gKiAgVGhlIG1haW4gc2VjdGlvbnMgb2YgdGhlIGd1aWRlLiAgTW9kaWZpZXJzIHdvdWxkIGRlZmluZSB2YXJpYXRpb25zLlxuICpcbiAqICBodG1sOlxuICogICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uIHt7IG1vZGlmaWVyIH19XCI+XG4gKiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uX19pbm5lclwiPlxuICogICAgICAgIDxoZWFkZXIgY2xhc3M9XCJzZWN0aW9uX19oZWFkZXJcIj5cbiAqICAgICAgICAgIDxoND5UaGlzIGlzIGEgU2VjdGlvbjwvaDQ+XG4gKiAgICAgICAgPC9oZWFkZXI+XG4gKiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25fX2Rlc2NyaXB0aW9uXCI+PHA+VGhlIGluZm8gaGVyZSBpcyA8ZW0+c3VwZXI8L2VtPiBpbXBvcnRhbnQhPC9wPjwvZGl2PlxuICogICAgICA8L2Rpdj5cbiAqICAgIDwvc2VjdGlvbj5cbiAqXG4gKiAgd3JhcDogW3N0eWxlPVwiYmFja2dyb3VuZDogI2E5OVwiXVxuICovXG4uc2VjdGlvbiB7XG5cdG1hcmdpbjogOHJlbSBhdXRvO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG92ZXJmbG93OiBoaWRkZW47IH1cblx0LnNlY3Rpb24tLWRlcHRoLTEge1xuXHRcdG1hcmdpbi10b3A6IDEycmVtOyB9XG5cbi5zZWN0aW9uX19pbm5lciB7XG5cdG1heC13aWR0aDogNjUuNzVyZW07XG5cdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdHBhZGRpbmc6IDAgMXJlbTtcblx0bWFyZ2luOiAwIGF1dG87XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblx0LnNlY3Rpb24tLWRlcHRoLTIgLnNlY3Rpb25fX2lubmVyIHtcblx0XHRwYWRkaW5nLWxlZnQ6IDJyZW07IH1cblx0LnNlY3Rpb24tLWRlcHRoLTMgLnNlY3Rpb25fX2lubmVyIHtcblx0XHRwYWRkaW5nLWxlZnQ6IDNyZW07IH1cblx0LnNlY3Rpb24tLWRlcHRoLTQgLnNlY3Rpb25fX2lubmVyIHtcblx0XHRwYWRkaW5nLWxlZnQ6IDRyZW07IH1cblx0LnNlY3Rpb24tLWRlcHRoLTUgLnNlY3Rpb25fX2lubmVyIHtcblx0XHRwYWRkaW5nLWxlZnQ6IDVyZW07IH1cblxuLnNlY3Rpb25fX3N1Yi1lbGVtZW50cyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZy10b3A6IDRyZW07XG5cdG1hcmdpbi10b3A6IDJyZW07IH1cblx0LnNlY3Rpb25fX3N1Yi1lbGVtZW50czo6YmVmb3JlIHtcblx0XHRjb250ZW50OiAnJztcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0dG9wOiAwO1xuXHRcdGJvdHRvbTogMDtcblx0XHRtYXJnaW46IDAgYXV0bztcblx0XHR3aWR0aDogNjMuNzVyZW07XG5cdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U5ZWFmMDtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdFx0cG9pbnRlci1ldmVudHM6IG5vbmU7IH1cblx0LnNlY3Rpb25fX3N1Yi1lbGVtZW50cyA+IC5zZWN0aW9uOmZpcnN0LWNoaWxkIHtcblx0XHRtYXJnaW4tdG9wOiAwOyB9XG5cdC5zZWN0aW9uX19zdWItZWxlbWVudHMgPiAuc2VjdGlvbjpsYXN0LWNoaWxkIHtcblx0XHRtYXJnaW4tYm90dG9tOiAwOyB9XG5cdC5zZWN0aW9uX19zdWItZWxlbWVudHMgLnNlY3Rpb25fX3RpdGxlOjpiZWZvcmUge1xuXHRcdGRpc3BsYXk6IG5vbmU7IH1cblx0LnNlY3Rpb24tLWRlcHRoLTEgLnNlY3Rpb25fX3N1Yi1lbGVtZW50czo6YmVmb3JlIHtcblx0XHRsZWZ0OiBjYWxjKDUwJSArIDByZW0pOyB9XG5cdC5zZWN0aW9uLS1kZXB0aC0yIC5zZWN0aW9uX19zdWItZWxlbWVudHM6OmJlZm9yZSB7XG5cdFx0bGVmdDogY2FsYyg1MCUgKyAxcmVtKTsgfVxuXHQuc2VjdGlvbi0tZGVwdGgtMyAuc2VjdGlvbl9fc3ViLWVsZW1lbnRzOjpiZWZvcmUge1xuXHRcdGxlZnQ6IGNhbGMoNTAlICsgMnJlbSk7IH1cblx0LnNlY3Rpb24tLWRlcHRoLTQgLnNlY3Rpb25fX3N1Yi1lbGVtZW50czo6YmVmb3JlIHtcblx0XHRsZWZ0OiBjYWxjKDUwJSArIDNyZW0pOyB9XG5cdC5zZWN0aW9uLS1kZXB0aC01IC5zZWN0aW9uX19zdWItZWxlbWVudHM6OmJlZm9yZSB7XG5cdFx0bGVmdDogY2FsYyg1MCUgKyA0cmVtKTsgfVxuXG4uc2VjdGlvbl9fdGl0bGUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7IH1cblx0LnNlY3Rpb25fX3RpdGxlOjpiZWZvcmUge1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRyaWdodDogMTAwJTtcblx0XHR0b3A6IDA7XG5cdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRtYXJnaW4tcmlnaHQ6IDFyZW07IH1cblx0LnNlY3Rpb25fX3RpdGxlOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCLugIhcIjsgfVxuXG4uc2VjdGlvbl9fdGl0bGUtLWNvbG9yczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6Ag1wiOyB9XG5cbi5zZWN0aW9uX190aXRsZS0tZm9udHM6YmVmb3JlIHtcblx0Y29udGVudDogXCLugIZcIjsgfVxuXG4uc2VjdGlvbl9fdGl0bGUtLXF1YXJrczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AjFwiOyB9XG5cbi5zZWN0aW9uX190aXRsZS0tYXRvbXM6YmVmb3JlIHtcblx0Y29udGVudDogXCLugIFcIjsgfVxuXG4uc2VjdGlvbl9fdGl0bGUtLW1vbGVjdWxlczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AiVwiOyB9XG5cbi5zZWN0aW9uX190aXRsZS0tb3JnYW5pc21zOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCKXCI7IH1cblxuLnNlY3Rpb25fX3RpdGxlLS1zZXR0aW5nczpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6AjlwiOyB9XG5cbi5zZWN0aW9uX190aXRsZS0tdXRpbGl0aWVzOmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCQXCI7IH1cblxuLnNlY3Rpb25fX3RpdGxlLS1tZW51OmJlZm9yZSB7XG5cdGNvbnRlbnQ6IFwi7oCIXCI7IH1cblxuLnNlY3Rpb25fX3RpdGxlLS1waG9uZTpiZWZvcmUge1xuXHRjb250ZW50OiBcIu6Ai1wiOyB9XG5cbi5zZWN0aW9uX190aXRsZS0tdGFibGU6YmVmb3JlIHtcblx0Y29udGVudDogXCJcIjsgfVxuXG4uc2VjdGlvbl9fdGl0bGUtLWRlc2t0b3A6YmVmb3JlIHtcblx0Y29udGVudDogXCLugIVcIjsgfVxuXG4vKioqXG4gKiBNYWluIEhlYWRlclxuICpcbiAqIFRoZSBtYWluIGhlYWRlciBvZiB0aGUgc3R5bGVndWlkZS5cbiAqXG4gKiBNYWtlcyB1c2Ugb2YgYCRiYWNrZ3JvdW5kLWhlYWRlcmAgYW5kIGAkdGV4dC1oZWFkZXJgIHdpdGggdGhlIGBzdXBlcmAgc2l6aW5nLlxuICogQmFja2dyb3VuZCBzaXplIGlzIHNldCB0byBgY292ZXJgIGluIGNhc2UgeW91IHdhbnQgdG8gb3ZlcnJpZGUgYCRiYWNrZ3JvdW5kLWhlYWRlcmBcbiAqIHdpdGggYW4gaW1hZ2UuXG4gKlxuICogaHRtbDpcbiAqICAgPGhlYWRlciBjbGFzcz1cImhlYWRlci1tYWluXCI+XG4gKiAgICAgPGgxIGNsYXNzPVwiaGVhZGVyLW1haW5fX3RpdGxlXCI+QXV0b2d1aWRlPC9oMT5cbiAqICAgPC9oZWFkZXI+XG4gKlxuICogZnVsbFdpZHRoOiB0cnVlXG4gKi9cbi5oZWFkZXItbWFpbiB7XG5cdHBhZGRpbmc6IDEycmVtIDJyZW0gM3JlbTtcblx0YmFja2dyb3VuZDogIzA0NkM2Rjtcblx0YmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxuXHQuaGVhZGVyLW1haW5fX2lubmVyIHtcblx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRtYXgtd2lkdGg6IDYzLjc1cmVtOyB9XG5cdC5oZWFkZXItbWFpbl9fdGl0bGUge1xuXHRcdGZvbnQtc2l6ZTogMy40M3JlbTtcblx0XHRsaW5lLWhlaWdodDogNHJlbTtcblx0XHRmb250LWZhbWlseTogXCJEcm9pZCBTZXJpZlwiLCBzZXJpZjtcblx0XHR3ZWlnaHQ6IDQwMDtcblx0XHRtYXJnaW46IDA7XG5cdFx0Y29sb3I6IHdoaXRlOyB9XG5cdFx0QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NS42MjVlbSkge1xuXHRcdFx0LmhlYWRlci1tYWluX190aXRsZSB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogNC44MDJyZW07XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiA1cmVtOyB9IH1cblxuLyoqKlxuICogTWFpbiBGb290ZXJcbiAqXG4gKiBKdXN0IGEgcXVpY2sgc2lnbm9mZi5cbiAqXG4gKiBodG1sOlxuICogICAgPGZvb3RlciBjbGFzcz1cImZvb3Rlci1tYWluXCI+XG4gKiAgICAgIDxwPkNyZWF0ZWQgdXNpbmcgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9qaGVyZWcwMC9hdXRvZ3VpZGVcIiB0YXJnZXQ9XCJfYmxhbmtcIj5BdXRvZ3VpZGU8L2E+LjwvcD5cbiAqICAgIDwvZm9vdGVyPlxuICpcbiAqIGZ1bGxXaWR0aDogdHJ1ZVxuICovXG4uZm9vdGVyLW1haW4ge1xuXHRmb250LXNpemU6IDAuODc1cmVtO1xuXHRsaW5lLWhlaWdodDogMXJlbTtcblx0cGFkZGluZzogMXJlbSAxcmVtO1xuXHRiYWNrZ3JvdW5kOiAjNjY2NzZhO1xuXHRjb2xvcjogd2hpdGU7IH1cblx0LmZvb3Rlci1tYWluIGEge1xuXHRcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuXHRcdGNvbG9yOiBpbmhlcml0OyB9XG5cbi8qKipcbiAqICBDb250cm9sc1xuICpcbiAqICBCdXR0b25zIHRoYXQgaGFuZGxlIGNlcnRhaW4gZ3VpZGUtbGV2ZWwgZmVhdHVyZXMuXG4gKlxuICogIGh0bWw6XG4gKiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAqICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzX19ncm91cCBjb250cm9sc19fZ3JvdXAtLXNhbXBsZS1zaXplXCI+XG4gKiAgICAgICAgPGg1IGNsYXNzPVwiY29udHJvbHNfX2dyb3VwLWhlYWRlclwiPlNhbXBsZSBTaXplPC9oNT5cbiAqICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPlxuICogICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBuYW1lPVwic2FtcGxlU2l6ZVwiIGlkPVwic2FtcGxlU2l6ZVwiPlxuICogICAgICAgIDwvZGl2PlxuICogICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAqICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLS1zbWFsbCBidXR0b24tLWlzb24tcGhvbmUgYnV0dG9uLWdyb3VwX19idXR0b24ganMtdXBkYXRlLWlucHV0XCIgdmFsdWU9XCIzMjBcIj5cbiAqICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b25fX3RleHRcIj4zMjBweDwvc3Bhbj5cbiAqICAgICAgICAgIDwvYnV0dG9uPlxuICogICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tLXNtYWxsIGJ1dHRvbi0taXNvbi10YWJsZXQgYnV0dG9uLWdyb3VwX19idXR0b24ganMtdXBkYXRlLWlucHV0XCIgdmFsdWU9XCI3NjhcIj5cbiAqICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b25fX3RleHRcIj43NjhweDwvc3Bhbj5cbiAqICAgICAgICAgIDwvYnV0dG9uPlxuICogICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tLXNtYWxsIGJ1dHRvbi0taXNvbi1kZXNrdG9wIGJ1dHRvbi1ncm91cF9fYnV0dG9uIGpzLXVwZGF0ZS1pbnB1dFwiIHZhbHVlPVwiMTIwMFwiPlxuICogICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbl9fdGV4dFwiPjEyMDBweDwvc3Bhbj5cbiAqICAgICAgICAgIDwvYnV0dG9uPlxuICogICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tLXNtYWxsIGJ1dHRvbi1ncm91cF9fYnV0dG9uIGpzLXVwZGF0ZS1pbnB1dFwiIHZhbHVlPVwiXCI+XG4gKiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uX190ZXh0XCI+RGVmYXVsdDwvc3Bhbj5cbiAqICAgICAgICAgIDwvYnV0dG9uPlxuICogICAgICAgIDwvZGl2PlxuICogICAgICA8L2Rpdj5cbiAqICAgIDwvZGl2PlxuICovXG4uY29udHJvbHMge1xuXHRwYWRkaW5nOiAxcmVtIDFyZW07IH1cblx0LmNvbnRyb2xzX19ncm91cCArIC5jb250cm9sc19fZ3JvdXAge1xuXHRcdG1hcmdpbi10b3A6IDFyZW07XG5cdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlOWVhZjA7IH1cblxuLyoqKlxuICogIENvbnRyb2xzL05hdiBUcmF5XG4gKlxuICogIEEgZm9sZC1hd2F5IHRoaW5neSB3aXRoIHRpZXJzIHRoYXQgY2FuIG9wZW4vY2xvc2UuXG4gKlxuICogIGh0bWw6XG4gKiAgICA8ZGl2IGNsYXNzPVwidHJheVwiPlxuICogICAgICA8ZGl2IGNsYXNzPVwidHJheV9fdGllclwiPlxuICogICAgICAgIDxhIGNsYXNzPVwidHJheV9fb3BlbmVyXCI+PC9hPlxuICogICAgICAgIDxoND5UaWVyIDE8L2g0PlxuICogICAgICA8L2Rpdj5cbiAqICAgICAgPGRpdiBjbGFzcz1cInRyYXlfX3RpZXJcIj5cbiAqICAgICAgICA8YSBjbGFzcz1cInRyYXlfX29wZW5lclwiPjwvYT5cbiAqICAgICAgICA8aDQ+VGllciAyPC9oND5cbiAqICAgICAgPC9kaXY+XG4gKiAgICA8L2Rpdj5cbiAqXG4gKiAgd3JhcDogW3N0eWxlPVwiaGVpZ2h0OiAyMDBweFwiXVxuICovXG4udHJheSB7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHR6LWluZGV4OiA5OTk5OTk5OyB9XG5cdC50cmF5ICsgKiB7XG5cdFx0dHJhbnNpdGlvbjogbWFyZ2luLWxlZnQgMC42cyBjdWJpYy1iZXppZXIoMC4zNiwgMC4wMSwgMC4zMiwgMC45OSk7IH1cblx0LnRyYXkuaXMtb3BlbiArICoge1xuXHRcdG1hcmdpbi1sZWZ0OiAxN3JlbTsgfVxuXHQudHJheS5pcy1vcGVuIC50cmF5X190aWVyOm5vdCguaXMtb3BlbikgLnRyYXlfX29wZW5lciB7XG5cdFx0bGVmdDogMzRyZW07IH1cblxuLnRyYXlfX3RpZXIge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMDtcblx0bGVmdDogMDtcblx0Ym90dG9tOiAwO1xuXHR3aWR0aDogMTdyZW07XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdGJhY2tncm91bmQ6ICNmZmY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlOWVhZjA7XG5cdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjQ1cyBjdWJpYy1iZXppZXIoMC4zNiwgMC4wMSwgMC4zMiwgMC45OSk7XG5cdHotaW5kZXg6IDEwO1xuXHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG5cdC50cmF5X190aWVyLmlzLW9wZW4ge1xuXHRcdHRyYW5zZm9ybTogbm9uZTsgfVxuXHRcdC50cmF5X190aWVyLmlzLW9wZW4gPiAudHJheV9fb3BlbmVyIHtcblx0XHRcdHRleHQtaW5kZW50OiAtMC4yNXJlbTtcblx0XHRcdGNsaXAtcGF0aDogcG9seWdvbigxcmVtIDAsIDNyZW0gMCwgM3JlbSAxLjVyZW0sIDNyZW0gM3JlbSwgMXJlbSAzcmVtLCAwIDEuNXJlbSk7IH1cblx0XHRcdC50cmF5X190aWVyLmlzLW9wZW4gPiAudHJheV9fb3BlbmVyOjphZnRlciB7XG5cdFx0XHRcdGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuXHRcdFx0XHRib3JkZXItcmlnaHQtd2lkdGg6IGNhbGMoMXJlbSArIDFweCk7IH1cblx0LnRyYXlfX3RpZXI6bnRoLWNoaWxkKDIpIC50cmF5X19vcGVuZXIge1xuXHRcdHRvcDogNXJlbTsgfVxuXHQudHJheV9fdGllcjpudGgtY2hpbGQoMykgLnRyYXlfX29wZW5lciB7XG5cdFx0dG9wOiA5cmVtOyB9XG5cdC50cmF5X190aWVyOm50aC1jaGlsZCg0KSAudHJheV9fb3BlbmVyIHtcblx0XHR0b3A6IDEzcmVtOyB9XG5cdC50cmF5X190aWVyOm50aC1jaGlsZCg1KSAudHJheV9fb3BlbmVyIHtcblx0XHR0b3A6IDE3cmVtOyB9XG5cbi50cmF5X19vcGVuZXIge1xuXHRmb250LXNpemU6IDEuNDc5MDNyZW07XG5cdGxpbmUtaGVpZ2h0OiAycmVtO1xuXHRkaXNwbGF5OiBibG9jaztcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDFyZW07XG5cdGxlZnQ6IDEwMCU7XG5cdHdpZHRoOiA0cmVtO1xuXHRoZWlnaHQ6IDNyZW07XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdG1hcmdpbi1sZWZ0OiAtMXJlbTtcblx0bGluZS1oZWlnaHQ6IDNyZW07XG5cdGJhY2tncm91bmQ6ICNmZmY7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Ym9yZGVyOiAxcHggc29saWQgI2U5ZWFmMDtcblx0Ym9yZGVyLXdpZHRoOiAxcHggMDtcblx0Y29sb3I6IHJnYmEoNTEsIDUxLCA1MSwgMC41KTtcblx0dHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0dGV4dC1pbmRlbnQ6IDAuMjVyZW07XG5cdGNsaXAtcGF0aDogcG9seWdvbigxcmVtIDAsIDNyZW0gMCwgNHJlbSAxLjVyZW0sIDNyZW0gM3JlbSwgMXJlbSAzcmVtLCAxcmVtIDEuNXJlbSk7XG5cdHRyYW5zaXRpb246IGNsaXAtcGF0aCAwLjQ1cywgdGV4dC1pbmRlbnQgMC40NXMsIGxlZnQgMC40NXM7IH1cblx0LnRyYXlfX29wZW5lcjpob3ZlciwgLnRyYXlfX3RpZXIuaXMtb3BlbiAudHJheV9fb3BlbmVyIHtcblx0XHRjb2xvcjogIzMzMzsgfVxuXHQudHJheV9fb3BlbmVyOjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR0b3A6IDA7XG5cdFx0bGVmdDogMXB4O1xuXHRcdGJvcmRlci13aWR0aDogY2FsYygxLjVyZW0gLSAxcHgpO1xuXHRcdGJvcmRlci1yaWdodC13aWR0aDogY2FsYygxcmVtIC0gMXB4KTtcblx0XHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLWNvbG9yOiAjZTllYWYwO1xuXHRcdGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cblx0LnRyYXlfX29wZW5lcjo6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR0b3A6IDA7XG5cdFx0cmlnaHQ6IDA7XG5cdFx0Ym9yZGVyLXdpZHRoOiBjYWxjKDEuNXJlbSAtIDFweCk7XG5cdFx0Ym9yZGVyLWxlZnQtd2lkdGg6IGNhbGMoMXJlbSAtIDFweCk7XG5cdFx0Ym9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItY29sb3I6ICNlOWVhZjA7XG5cdFx0Ym9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xuXHRcdHRyYW5zaXRpb246IGJvcmRlci13aWR0aCAwLjE1czsgfVxuXG4vKioqXG4gKiBDb21wb25lbnRcbiAqXG4gKiBBbiBpbmRpdmlkdWFsIHBpZWNlIG9mIHRoZSBzdHlsZWd1aWRlLlxuICpcbiAqIGh0bWw6XG5UT0RPXG4gKi9cbi5jb21wb25lbnQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHBhZGRpbmc6IDZyZW0gY2FsYygoMTAwJSAtIDYzLjc1cmVtKSAvIDIpOyB9XG5cdC5jb21wb25lbnQtLWRlcHRoLTIge1xuXHRcdHBhZGRpbmctdG9wOiA0cmVtO1xuXHRcdHBhZGRpbmctYm90dG9tOiA0cmVtOyB9XG5cdC5jb21wb25lbnQtLWRlcHRoLTMge1xuXHRcdHBhZGRpbmctdG9wOiAycmVtO1xuXHRcdHBhZGRpbmctYm90dG9tOiAycmVtOyB9XG5cdC5jb21wb25lbnQtLWRlcHRoLTQge1xuXHRcdHBhZGRpbmctdG9wOiAycmVtO1xuXHRcdHBhZGRpbmctYm90dG9tOiAycmVtOyB9XG5cdC5jb21wb25lbnRfX2hlYWRlciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdG1hcmdpbjogMCAwIDFyZW07IH1cblx0XHQuY29tcG9uZW50X19oZWFkZXIgLmZpbGUtcGF0aCB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRyaWdodDogMDtcblx0XHRcdGJvdHRvbTogMC41cmVtOyB9XG5cdC5jb21wb25lbnRfX3N1Yi1lbGVtZW50cyA+IC5jb21wb25lbnQge1xuXHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0cGFkZGluZy1sZWZ0OiAycmVtO1xuXHRcdG1hcmdpbjogMDsgfVxuXHRcdC5jb21wb25lbnRfX3N1Yi1lbGVtZW50cyA+IC5jb21wb25lbnQ6bGFzdC1jaGlsZCB7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMDsgfVxuXHQuY29tcG9uZW50LS1kZXB0aC0xIHtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U5ZWFmMDsgfVxuXG4vKioqXG4gKiBQYWxldHRlXG4gKlxuICogSnVzdCBhIGNvbGVjdGlvbiBvZiBbY29sb3JdKCMvbW9sZWN1bGVzL2NvbG9yKSBlbGVtZW50cy4gIFNpemVzIHRoZW0gbW9zdGx5XG4gKiBiYXNlZCBvbiBob3cgbWFueSBhcmUgcHJlc2VudC4gIFRoaXMgaXMgYWNoaWV2ZWQgdGhyb3VnaCB0aGUgdXR0ZXJseSBpbmdlbmlvdXNcbiAqIFttb2Qgc2VsZWN0b3JdKGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3VzaW5nLWNzcy1tb2QtcXVlcmllcy13aXRoLXJhbmdlLXNlbGVjdG9ycykuXG4gKlxuICogU2hvd3MgdGhlIGNvbG9ycyBhcyBsYXJnZXIgaWYgaW4gYW4gZWxlbWVudCB3aXRoICdwcmltYXJ5JyBpbiBpdHMgdGl0bGUuXG4gKlxuICogQG1vZGlmaWVyIFtpZCo9XCJwcmltYXJ5XCJdICZcbiAqXG4gKiBodG1sOlxuICogICA8ZGl2IGNsYXNzPVwicGFsZXR0ZVwiPlxuICogICAgIDxkaXYgY2xhc3M9XCJjb2xvciBjb2xvci0tZGFya1wiPlxuICogICAgICAgPGRpdiBjbGFzcz1cInN3YXRjaCBzd2F0Y2gtLSBzd2F0Y2gtLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNGRjAwMDBcIj48L2Rpdj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcl9fZGV0YWlsc1wiPlxuICogICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yX192YXItbmFtZVwiIGRhdGEtY29weT1cIiRjMVwiPiRjMTwvc3Bhbj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFsdWUgY29sb3JfX3ZhbHVlLS1oZXhcIiBkYXRhLWNvcHk9XCIjRkYwMDAwXCI+I0ZGMDAwMDwvc3Bhbj5cbiAqICAgICAgIDwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICAgIDxkaXYgY2xhc3M9XCJjb2xvciBjb2xvci0tZGFya1wiPlxuICogICAgICAgPGRpdiBjbGFzcz1cInN3YXRjaCBzd2F0Y2gtLSBzd2F0Y2gtLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNFRTAwMDBcIj48L2Rpdj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcl9fZGV0YWlsc1wiPlxuICogICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yX192YXItbmFtZVwiIGRhdGEtY29weT1cIiRjMlwiPiRjMjwvc3Bhbj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFsdWUgY29sb3JfX3ZhbHVlLS1oZXhcIiBkYXRhLWNvcHk9XCIjRUUwMDAwXCI+I0VFMDAwMDwvc3Bhbj5cbiAqICAgICAgIDwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICAgIDxkaXYgY2xhc3M9XCJjb2xvciBjb2xvci0tZGFya1wiPlxuICogICAgICAgPGRpdiBjbGFzcz1cInN3YXRjaCBzd2F0Y2gtLSBzd2F0Y2gtLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNERDAwMDBcIj48L2Rpdj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcl9fZGV0YWlsc1wiPlxuICogICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yX192YXItbmFtZVwiIGRhdGEtY29weT1cIiRjM1wiPiRjMzwvc3Bhbj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFsdWUgY29sb3JfX3ZhbHVlLS1oZXhcIiBkYXRhLWNvcHk9XCIjREQwMDAwXCI+I0REMDAwMDwvc3Bhbj5cbiAqICAgICAgIDwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICAgIDxkaXYgY2xhc3M9XCJjb2xvciBjb2xvci0tZGFya1wiPlxuICogICAgICAgPGRpdiBjbGFzcz1cInN3YXRjaCBzd2F0Y2gtLSBzd2F0Y2gtLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNDQzAwMDBcIj48L2Rpdj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvcl9fZGV0YWlsc1wiPlxuICogICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yX192YXItbmFtZVwiIGRhdGEtY29weT1cIiRjNFwiPiRjNDwvc3Bhbj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFsdWUgY29sb3JfX3ZhbHVlLS1oZXhcIiBkYXRhLWNvcHk9XCIjQ0MwMDAwXCI+I0NDMDAwMDwvc3Bhbj5cbiAqICAgICAgIDwvZGl2PlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqL1xuLnBhbGV0dGUge1xuXHRtYXgtd2lkdGg6IDYzLjc1cmVtO1xuXHRtYXJnaW4tbGVmdDogYXV0bztcblx0bWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG5cdC5wYWxldHRlIC5jb2xvciB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0d2lkdGg6IDMzLjMzMzMzJTsgfVxuXHRcdC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCg0biswKTpmaXJzdC1jaGlsZCxcblx0XHQucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoNG4rMCk6Zmlyc3QtY2hpbGQgfiAuY29sb3Ige1xuXHRcdFx0d2lkdGg6IDI1JTsgfVxuXHRcdC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCg0biszKTpmaXJzdC1jaGlsZCxcblx0XHQucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoNG4rMyk6Zmlyc3QtY2hpbGQgfiAuY29sb3Ige1xuXHRcdFx0d2lkdGg6IDI1JTsgfVxuXHRcdFx0LnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDRuKzMpOmZpcnN0LWNoaWxkOm50aC1jaGlsZChuKzEpOm50aC1jaGlsZCgtbiszKSxcblx0XHRcdC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCg0biszKTpmaXJzdC1jaGlsZCB+IC5jb2xvcjpudGgtY2hpbGQobisxKTpudGgtY2hpbGQoLW4rMykge1xuXHRcdFx0XHR3aWR0aDogMzMuMzMzMzMlOyB9XG5cdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlLCBbaWQqPVwiYnJhbmRcIl0gLnBhbGV0dGUge1xuXHRcdGZvbnQtc2l6ZTogMS40NzkwM3JlbTtcblx0XHRsaW5lLWhlaWdodDogMnJlbTsgfVxuXHRcdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlIC5jb2xvciwgW2lkKj1cImJyYW5kXCJdIC5wYWxldHRlIC5jb2xvciB7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0aGVpZ2h0OiAxMnJlbTsgfVxuXHRcdFx0W2lkKj1cInByaW1hcnlcIl0gLnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDJuKzEpOmZpcnN0LWNoaWxkLCBbaWQqPVwiYnJhbmRcIl0gLnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDJuKzEpOmZpcnN0LWNoaWxkIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7IH1cblx0XHRcdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCxcblx0XHRcdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCB+IC5jb2xvciwgW2lkKj1cImJyYW5kXCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgzbiswKTpmaXJzdC1jaGlsZCxcblx0XHRcdFtpZCo9XCJicmFuZFwiXSAucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoM24rMCk6Zmlyc3QtY2hpbGQgfiAuY29sb3Ige1xuXHRcdFx0XHR3aWR0aDogMzMuMzMzMzMlOyB9XG5cdFx0XHRbaWQqPVwicHJpbWFyeVwiXSAucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoM24rMSk6Zmlyc3QtY2hpbGQsXG5cdFx0XHRbaWQqPVwicHJpbWFyeVwiXSAucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoM24rMSk6Zmlyc3QtY2hpbGQgfiAuY29sb3IsIFtpZCo9XCJicmFuZFwiXSAucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoM24rMSk6Zmlyc3QtY2hpbGQsXG5cdFx0XHRbaWQqPVwiYnJhbmRcIl0gLnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDNuKzEpOmZpcnN0LWNoaWxkIH4gLmNvbG9yIHtcblx0XHRcdFx0d2lkdGg6IDMzLjMzMzMzJTsgfVxuXHRcdFx0W2lkKj1cInByaW1hcnlcIl0gLnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDNuKzEpOmZpcnN0LWNoaWxkLCBbaWQqPVwiYnJhbmRcIl0gLnBhbGV0dGUgLmNvbG9yOm50aC1sYXN0LWNoaWxkKDNuKzEpOmZpcnN0LWNoaWxkIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7IH1cblx0XHRcdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCxcblx0XHRcdFtpZCo9XCJwcmltYXJ5XCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCB+IC5jb2xvciwgW2lkKj1cImJyYW5kXCJdIC5wYWxldHRlIC5jb2xvcjpudGgtbGFzdC1jaGlsZCgybiswKTpmaXJzdC1jaGlsZCxcblx0XHRcdFtpZCo9XCJicmFuZFwiXSAucGFsZXR0ZSAuY29sb3I6bnRoLWxhc3QtY2hpbGQoMm4rMCk6Zmlyc3QtY2hpbGQgfiAuY29sb3Ige1xuXHRcdFx0XHR3aWR0aDogNTAlOyB9XG5cbi8qKipcbiAqIEhUTUwgU2FtcGxlXG4gKlxuICogQW4gb3V0cHV0IG9mIGEgc2FtcGxlIGVsZW1lbnQvY29tcG9uZW50LiAgSXQgaXMgdHVybmVkIGludG8gYW4gaWZyYW1lIGJ5XG4gKiBhdXRvZ3VpZGUuanMsIGFsbG93aW5nIGl0IHRvIGtlZXAgYWxsIG9mIGl0cyBzdHlsaW5nIGxvY2FsaXplZC5cbiAqXG4gKiBUaXRsZSBhbmQgZGVzY3JpcHRpb24gYXJlIG9wdGlvbmFsIGJhc2VkIG9uIHRoZSBwYXNzZWQgZGF0YS5cbiAqXG4gKiBodG1sOlxuICogICA8ZGl2IGNsYXNzPVwiaHRtbC1zYW1wbGVcIj5cbiAqICAgICA8aDYgY2xhc3M9XCJodG1sLXNhbXBsZV9faGVhZGVyXCI+QSBTaW5nbGUgU2FtcGxlPC9oNj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiaHRtbC1zYW1wbGVfX2Rlc2NyaXB0aW9uXCI+XG4gKiAgICAgICA8cD5UaGlzIGlzIGEgc2FtcGxlIG9mIHRoZSBzYW1wbGUuIE5lYXQsIHJpZ2h0PzwvcD5cbiAqICAgICAgIDxwPlNpZGUgbm90ZSwgaWZyYW1lIGNhbid0IGJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB3aXRoaW4gZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGlmcmFtZS4gSXQgZnVja3MgdXAuPC9wPlxuICogICAgIDwvZGl2PlxuICogICAgIDxpZnJhbWUgY2xhc3M9XCJodG1sLXNhbXBsZV9faWZyYW1lXCIgc3JjZG9jPSdcbiAqICAgICAgIDxodG1sPlxuICogICAgICAgICA8aGVhZD5cbiAqICAgICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImFzc2V0cy9jc3MvYXV0b2d1aWRlLmNzc1wiPlxuICogICAgICAgICA8L2hlYWQ+XG4gKiAgICAgICAgIDxib2R5PjxoNT5UaGlzIGlzIGluIGFuIGlmcmFtZTwvaDU+PC9ib2R5PlxuICogICAgICAgPC9odG1sPic+XG4gKiAgICAgPC9pZnJhbWU+XG4gKiAgIDwvZGl2PlxuICpcbiAqIHdyYXA6IC5jb21wb25lbnRcbiAqL1xuLmh0bWwtc2FtcGxlX19oZWFkZXItLWNsYXNzLW5hbWUge1xuXHRmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgbW9ub3NwYWNlOyB9XG5cbi5odG1sLXNhbXBsZV9fZGVzY3JpcHRpb24gOmZpcnN0LWNoaWxkIHtcblx0bWFyZ2luLXRvcDogMDsgfVxuXG4uaHRtbC1zYW1wbGVfX2lmcmFtZSB7XG5cdGJvcmRlcjogMC4yNXJlbSBzb2xpZCAjZTllYWYwO1xuXHR3aWR0aDogY2FsYygxMDAlIC0gMC41cmVtKTtcblx0bWFyZ2luLWxlZnQ6IDUwJTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9XG5cbi8qKlxuICogb3V0ZXIgcGFnZSBjb250YWluZXJcbiAqL1xuLnBhZ2UtY29udGFpbmVyIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4vKipcbiAqIEhlbHBlciBzdHlsZXMgZm9yIGpzLWNvbGxhcHNhYmxlXG4gKi9cbi5qcy1jb2xsYXBzYWJsZV9fdG9nZ2xlIHtcblx0Y3Vyc29yOiBwb2ludGVyOyB9XG5cdC5qcy1jb2xsYXBzYWJsZV9fdG9nZ2xlOjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6ICcrJztcblx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmpzLWNvbGxhcHNhYmxlX19jb250ZW50IHtcblx0b3ZlcmZsb3cteTogaGlkZGVuO1xuXHRoZWlnaHQ6IDA7XG5cdHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGN1YmljLWJlemllcigwLjM2LCAwLjAxLCAwLjMyLCAwLjk5KTsgfVxuXG4uanMtY29sbGFwc2FibGUuaXMtb3BlbiAuanMtY29sbGFwc2FibGVfX3RvZ2dsZTo6YmVmb3JlIHtcblx0Y29udGVudDogJy0nOyB9XG4iLCIvLyBndWlkZSBzdHlsZXNcbkBjaGFyc2V0ICdVVEYtOCc7XG4vLyBpY29uIGxpc3QsIHVzZWQgdG8gZ2VuZXJhdGUgc29tZSBjbGFzc2VzXG4kaWNvbnM6XG4gIC8vJ2NvbG9ycycsXG4gIC8vJ2ZvbnRzJyxcbiAgLy8ncXVhcmtzJyxcbiAgLy8nYXRvbXMnLFxuICAvLydtb2xlY3VsZXMnLFxuICAvLydvcmdhbmlzbXMnLFxuICAnc2V0dGluZ3MnLFxuICAvLyd1dGlsaXRpZXMnLFxuICAnbWVudScsXG4gICdwaG9uZScsXG4gICd0YWJsZXQnLFxuICAnZGVza3RvcCcsXG4gIC8vJ2NvZGUnLFxuICAncmlnaHQtYXJyb3cnLFxuICAnY29weScsXG4gIC8vJ2h0bWwnXG47XG5cbi8qKipcbiAqIFV0aWxpdGllc1xuICpcbiAqIFJldXNhYmxlIGZ1bmN0aW9ucywgbWl4aW5zLCBhbmQgaGVscGVyIGNsYXNzZXMuICBUaGluZ3MgbGlrZSBjb2xvcnMsIHZlcnRpY2FsIHJoeXRobSwgYW5kIHRoZSAuY2xlYXItZml4IGhlbHBlciBhcmUgaW4gdGhpcyBncm91cC5cbiAqID4gVGhpcyBkaXJlY3Rvcnkgb2YgcGFydGlhbHMgaXMgYWxzbyBpbXBvcnRhbnQgYmVjYXVzZSB3ZeKAmWxsIG5lZWQgdG8gZGVmaW5lIGdsb2JhbCBjbGFzc2VzLCBtaXhpbnMgYW5kIHN0eWxlcyB0aGF0IGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCBhdCBhbnkgdGltZS5cbiAqID5cbiAqID5cXC0gaHR0cDovL3d3dy5zbWFzaGluZ21hZ2F6aW5lLmNvbS8yMDEzLzA4L290aGVyLWludGVyZmFjZS1hdG9taWMtZGVzaWduLXNhc3MvXG4gKi9cbkBpbXBvcnRcbi8vIFNhc3MgRnVuY3Rpb25zXG4vL1xuLy8gRnVuY3Rpb25zIHlvdSBjYW4gY2FsbCBpbiBTYXNzIHRoYXQgd2lsbCBoZWxwIHdpdGggdmFyaW91cyB0aGluZ3MuXG4vL1xuLy8gU3R5bGVndWlkZSBJLjFcbiAgJ3V0aWxpdGllcy9pY29ucycsXG4gICd1dGlsaXRpZXMvZnVuY3Rpb25zL3N0cmlwVW5pdHMnLFxuICAndXRpbGl0aWVzL2Z1bmN0aW9ucy9weFRvUmVtJyxcbiAgJ3V0aWxpdGllcy9mdW5jdGlvbnMvcHhUb0VtJyxcbiAgJ3V0aWxpdGllcy9mdW5jdGlvbnMvc3FydCcsXG4gICd1dGlsaXRpZXMvZnVuY3Rpb25zL3BvdycsXG4gICd1dGlsaXRpZXMvZnVuY3Rpb25zL21vZHVsYXJTY2FsZScsXG5cbi8vIFNhc3MgTWl4aW5zXG4vL1xuLy8gSGVscGZ1bCBtaXhpbnMgZm9yIGNvbXBsZXggcXVlcmllcyBhbmQgcHJvcGVydGllcy5cbi8vXG4vLyBTdHlsZWd1aWRlIEkuMlxuICAndXRpbGl0aWVzL21peGlucy9hc3BlY3QtcmF0aW8nLFxuICAndXRpbGl0aWVzL21peGlucy9xdWFudGl0eS1xdWVyeScsXG4gICd1dGlsaXRpZXMvbWl4aW5zL21vZC1xdWVyeScsXG4gICd1dGlsaXRpZXMvbWl4aW5zL21lZGlhLXF1ZXJpZXMnLFxuXG4vLyBnbG9iYWwgc3R5bGVzXG4gICd1dGlsaXRpZXMvbWl4aW5zL2NsZWFyLWZpeCcsXG4gICd1dGlsaXRpZXMvbWl4aW5zL2dyaWQnLFxuICAndXRpbGl0aWVzL3Zpc3VhbGx5aGlkZGVuJyxcbiAgJ3V0aWxpdGllcy9yZXNldHMnXG4gIDtcblxuLyoqXG4gKiBTZXR0aW5nc1xuICpcbiAqIEdsb2JhbCBzZXR0aW5ncyBhbmQgdmFyaWFibGVzLiBUaGlzIGRlZmluZXMgZ2xvYmFsIHNpdGUgd2lkZSB0aGluZ3MgbGlrZVxuICogY29sb3JzIGFuZCBmb250cy5cbiAqL1xuQGltcG9ydFxuICAnc2V0dGluZ3Mvc3BhY2luZycsXG4gICdzZXR0aW5ncy9jb2xvcnMnLFxuICAnc2V0dGluZ3MvZm9udHMnLFxuICAnc2V0dGluZ3MvdHJhbnNpdGlvbnMnLFxuICAnc2V0dGluZ3MvdHlwZS1zY2FsZSdcbiAgO1xuXG4vKioqXG4gKiBRdWFya3NcbiAqXG4gKiBFbGVtZW50IGxldmVsIHN0eWxlcyBtZWFudCB0byBhcHBseSBnbG9iYWxseS4gIFRoZXNlIGRlZmluZSB3aGF0IGVsZW1lbnRzIGxvb2sgbGlrZSBpZiBubyBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZW0uICBFZmZlY3RpdmVseSBvdXIgc2l0ZSBzcGVjaWZpYyBfbm9ybWFsaXplLmNzc18uXG4gKiA+IE5vdGUgdGhhdCB0aGVzZSBmaWxlcyBjb250YWluIG9ubHkgdGhlIGRlZmF1bHQgc3R5bGVzIGZvciB0aGVzZSBlbGVtZW50cywgbm90IG1vZGlmaWVkIGVsZW1lbnRzLiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIHRhYmxlIHRoYXQgbG9va3MgYW5kIHdvcmtzIGVudGlyZWx5IGRpZmZlcmVudGx5IGZyb20gdGhlIGRlZmF1bHQgdGFibGVzIHVzZWQgdGhyb3VnaG91dCB0aGUgd2Vic2l0ZSwgaXQgd291bGQgbm90IGJlIGEgcXVhcmsuXG4gKiA+XG4gKiA+XFwtIGh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxMy8wOC9vdGhlci1pbnRlcmZhY2UtYXRvbWljLWRlc2lnbi1zYXNzL1xuICovXG5AaW1wb3J0XG4gICdxdWFya3MvaHRtbCcsXG4gICdxdWFya3MvYm9keScsXG4gICdxdWFya3MvdHlwb2dyYXBoeScsXG4gICdxdWFya3MvbGlua3MnLFxuICAncXVhcmtzL2ltZycsXG4gICdxdWFya3Mvc3ZnJyxcbiAgJ3F1YXJrcy9ocicsXG4gICdxdWFya3MvbGlzdCcsXG4gICdxdWFya3MvYmxvY2txdW90ZScsXG4gICdxdWFya3MvdGFibGUnLFxuICAncXVhcmtzL2NvZGUnLFxuICAncXVhcmtzL2lucHV0J1xuICA7XG5cbi8qKipcbiAqIEF0b21zXG4gKlxuICogVGhlc2UgYXJlIHRoZSBzbWFsbGVzdCBsZXZlbCBvZiBzdHlsZXMgdGhhdCBtZXJpdCBhIGNsYXNzLiAgRXhhbXBsZXMgYXJlIGJ1dHRvbnMsIGljb25zLCBhbmQgdGV4dCB2YXJpYXRpb25zIGxpa2UgZGlzY2xhaW1lcnMuXG4gKiA+IFRoZSBzdHlsZXMgaW4gYW4gYXRvbSBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIGF0dGFjaGVkIHRvIGFuIEhUTUwgZWxlbWVudCBpdHNlbGY7IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGd1YXJhbnRlZSB3aGF0IHRoZSBtYXJrdXAgd2lsbCBsb29rIGxpa2UgaW4gdGhlIGZ1dHVyZS4gU3BlY2lmeWluZyBhIGNsYXNzIGluc3RlYWQgaXMgYWx3YXlzIHNhZmVyLlxuICogPlxuICogPlxcLSBodHRwOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTMvMDgvb3RoZXItaW50ZXJmYWNlLWF0b21pYy1kZXNpZ24tc2Fzcy9cbiAqL1xuQGltcG9ydFxuICAnYXRvbXMvZmlsZS1wYXRoJyxcbiAgJ2F0b21zL3N3YXRjaCcsXG4gICdhdG9tcy9mb250LXNhbXBsZScsXG4gICdhdG9tcy9idXR0b24nLFxuICAnYXRvbXMvY29weWFibGUnLFxuICAnYXRvbXMvYXR0cmlidXRlJ1xuICA7XG5cbi8qKipcbiAqIE1vbGVjdWxlc1xuICpcbiAqIFN0cnVjdHVyZXMgd2hpY2ggY29tYmluZSBtdWx0aXBsZSBlbGVtZW50cyB0byBjcmVhdGUgYSBjb2hlcmVudCBwaWVjZS4gQSBoZWFkZXIgd2l0aCBhbiBpbWFnZSBhbmQgaGVhZGxpbmUsIG9yIGEgbmF2IGRyb3Bkb3duIGNvbnRhaW5pbmcgbnVtZXJvdXMgbGlua3MsIGZvciBleGFtcGxlLlxuICogPiBUaGlzIGlzIHdoZXJlIHdlIGNhbiBjb21iaW5lIG11bHRpcGxlIHF1YXJrcyBhbmQgYXRvbXMsIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBhbnkgb2Ygb3VyIGdsb2JhbCBzdHlsZXMuXG4gKiA+XG4gKiA+XFwtIGh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxMy8wOC9vdGhlci1pbnRlcmZhY2UtYXRvbWljLWRlc2lnbi1zYXNzL1xuICovXG5AaW1wb3J0XG4gICdtb2xlY3VsZXMvbmF2LW1haW4nLFxuICAnbW9sZWN1bGVzL2J1dHRvbi1ncm91cCcsXG4gICdtb2xlY3VsZXMvY29sb3InLFxuICAnbW9sZWN1bGVzL2NvZGUtYmxvY2snLFxuICAnbW9sZWN1bGVzL2F0dHJpYnV0ZS1saXN0J1xuICA7XG5cbi8qKipcbiAqIE9yZ2FuaXNtc1xuICpcbiAqIFRoZXNlIGFyZSBiaWcgdGhpbmdzIHRoYXQgY29tYmluZSBldmVyeXRoaW5nIHNtYWxsZXIuICBBbiBlbnRpcmUgZm9ybSBjb250YWluaW5nIG1vbGVjdWxlcyBvZiBsYWJlbHMgd2l0aCBpbnB1dHMsIG9yIHRoZSBnbG9iYWwgc2l0ZSBoZWFkZXIsIGZvciBleGFtcGxlLlxuICogPiBPcmdhbmlzbXMgYXJlIGdyb3VwcyBvZiBtb2xlY3VsZXMgam9pbmVkIHRvZ2V0aGVyIHRvIGZvcm0gYSByZWxhdGl2ZWx5IGNvbXBsZXgsIGRpc3RpbmN0IHNlY3Rpb24gb2YgYW4gaW50ZXJmYWNlLlxuICogPlxuICogPlxcLSBodHRwOi8vYnJhZGZyb3N0LmNvbS9ibG9nL3Bvc3QvYXRvbWljLXdlYi1kZXNpZ24vI29yZ2FuaXNtc1xuICovXG5AaW1wb3J0XG4gICdvcmdhbmlzbXMvc2VjdGlvbicsXG4gICdvcmdhbmlzbXMvaGVhZGVyLW1haW4nLFxuICAnb3JnYW5pc21zL2Zvb3Rlci1tYWluJyxcbiAgJ29yZ2FuaXNtcy9jb250cm9scycsXG4gICdvcmdhbmlzbXMvdHJheScsXG4gICdvcmdhbmlzbXMvY29tcG9uZW50JyxcbiAgJ29yZ2FuaXNtcy9wYWxldHRlJyxcbiAgJ29yZ2FuaXNtcy9odG1sLXNhbXBsZSdcbiAgO1xuXG5AaW1wb3J0XG4gICd0ZW1wbGF0ZS9wYWdlLWNvbnRhaW5lcidcbiAgO1xuXG4vLyBleHRyYVxuLy8gQGltcG9ydFxuLy8gICAnZXh0cmEvZGV2LW9ubHknLFxuLy8gICAnZXh0cmEvc2Nyb2xsYmFyJ1xuLy8gICA7XG5cbi8vIGpzIGhlbHBlcnNcbkBpbXBvcnRcbiAgJ2pzLXN0eWxlcy9qcy1jb2xsYXBzYWJsZSdcbiAgO1xuIiwiQGZvbnQtZmFjZSB7XG5cdGZvbnQtZmFtaWx5OiBcImljb25zXCI7XG5cdHNyYzogdXJsKCcuLi9mb250cy9pY29ucy5lb3QnKTtcblx0c3JjOiB1cmwoJy4uL2ZvbnRzL2ljb25zLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VvdCcpLFxuXHRcdHVybCgnLi4vZm9udHMvaWNvbnMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG5cdFx0dXJsKCcuLi9mb250cy9pY29ucy53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG5cdFx0dXJsKCcuLi9mb250cy9pY29ucy50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksXG5cdFx0dXJsKCcuLi9mb250cy9pY29ucy5zdmcjaWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xufVxuXG5AbWl4aW4gaWNvbi1zdHlsZXMge1xuXHRmb250LWZhbWlseTogXCJpY29uc1wiO1xuXHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdGZvbnQtc3R5bGU6IG5vcm1hbDtcblx0Zm9udC12YXJpYW50OiBub3JtYWw7XG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cdC8vIHNwZWFrOiBub25lOyAvLyBvbmx5IG5lY2Vzc2FyeSBpZiBub3QgdXNpbmcgdGhlIHByaXZhdGUgdW5pY29kZSByYW5nZSAoZmlyc3RHbHlwaCBvcHRpb24pXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0dGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbiVpY29uIHtcblx0QGluY2x1ZGUgaWNvbi1zdHlsZXM7XG59XG5cbkBmdW5jdGlvbiBpY29uLWNoYXIoJGZpbGVuYW1lKSB7XG5cdCRjaGFyOiBcIlwiO1xuXG5cdEBpZiAkZmlsZW5hbWUgPT0gYXRvbXMge1xuXHRcdCRjaGFyOiBcIlxcRTAwMVwiO1xuXHR9XG5cdEBpZiAkZmlsZW5hbWUgPT0gY29kZSB7XG5cdFx0JGNoYXI6IFwiXFxFMDAyXCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSBjb2xvcnMge1xuXHRcdCRjaGFyOiBcIlxcRTAwM1wiO1xuXHR9XG5cdEBpZiAkZmlsZW5hbWUgPT0gY29weSB7XG5cdFx0JGNoYXI6IFwiXFxFMDA0XCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSBkZXNrdG9wIHtcblx0XHQkY2hhcjogXCJcXEUwMDVcIjtcblx0fVxuXHRAaWYgJGZpbGVuYW1lID09IGZvbnRzIHtcblx0XHQkY2hhcjogXCJcXEUwMDZcIjtcblx0fVxuXHRAaWYgJGZpbGVuYW1lID09IGh0bWwge1xuXHRcdCRjaGFyOiBcIlxcRTAwN1wiO1xuXHR9XG5cdEBpZiAkZmlsZW5hbWUgPT0gbWVudSB7XG5cdFx0JGNoYXI6IFwiXFxFMDA4XCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSBtb2xlY3VsZXMge1xuXHRcdCRjaGFyOiBcIlxcRTAwOVwiO1xuXHR9XG5cdEBpZiAkZmlsZW5hbWUgPT0gb3JnYW5pc21zIHtcblx0XHQkY2hhcjogXCJcXEUwMEFcIjtcblx0fVxuXHRAaWYgJGZpbGVuYW1lID09IHBob25lIHtcblx0XHQkY2hhcjogXCJcXEUwMEJcIjtcblx0fVxuXHRAaWYgJGZpbGVuYW1lID09IHF1YXJrcyB7XG5cdFx0JGNoYXI6IFwiXFxFMDBDXCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSByaWdodC1hcnJvdyB7XG5cdFx0JGNoYXI6IFwiXFxFMDBEXCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSBzZXR0aW5ncyB7XG5cdFx0JGNoYXI6IFwiXFxFMDBFXCI7XG5cdH1cblx0QGlmICRmaWxlbmFtZSA9PSB0YWJsZXQge1xuXHRcdCRjaGFyOiBcIlxcRTAwRlwiO1xuXHR9XG5cdEBpZiAkZmlsZW5hbWUgPT0gdXRpbGl0aWVzIHtcblx0XHQkY2hhcjogXCJcXEUwMTBcIjtcblx0fVxuXG5cdEByZXR1cm4gJGNoYXI7XG59XG5cbkBtaXhpbiBpY29uKCRmaWxlbmFtZSwgJGluc2VydDogYmVmb3JlLCAkZXh0ZW5kOiB0cnVlKSB7XG5cdCY6I3skaW5zZXJ0fSB7XG5cdFx0QGlmICRleHRlbmQge1xuXHRcdFx0QGV4dGVuZCAlaWNvbjtcblx0XHR9IEBlbHNlIHtcblx0XHRcdEBpbmNsdWRlIGljb24tc3R5bGVzO1xuXHRcdH1cblx0XHRjb250ZW50OiBpY29uLWNoYXIoJGZpbGVuYW1lKTtcblx0fVxufVxuXG4uaWNvbi1hdG9tcyB7XG5cdEBpbmNsdWRlIGljb24oYXRvbXMpO1xufVxuLmljb24tY29kZSB7XG5cdEBpbmNsdWRlIGljb24oY29kZSk7XG59XG4uaWNvbi1jb2xvcnMge1xuXHRAaW5jbHVkZSBpY29uKGNvbG9ycyk7XG59XG4uaWNvbi1jb3B5IHtcblx0QGluY2x1ZGUgaWNvbihjb3B5KTtcbn1cbi5pY29uLWRlc2t0b3Age1xuXHRAaW5jbHVkZSBpY29uKGRlc2t0b3ApO1xufVxuLmljb24tZm9udHMge1xuXHRAaW5jbHVkZSBpY29uKGZvbnRzKTtcbn1cbi5pY29uLWh0bWwge1xuXHRAaW5jbHVkZSBpY29uKGh0bWwpO1xufVxuLmljb24tbWVudSB7XG5cdEBpbmNsdWRlIGljb24obWVudSk7XG59XG4uaWNvbi1tb2xlY3VsZXMge1xuXHRAaW5jbHVkZSBpY29uKG1vbGVjdWxlcyk7XG59XG4uaWNvbi1vcmdhbmlzbXMge1xuXHRAaW5jbHVkZSBpY29uKG9yZ2FuaXNtcyk7XG59XG4uaWNvbi1waG9uZSB7XG5cdEBpbmNsdWRlIGljb24ocGhvbmUpO1xufVxuLmljb24tcXVhcmtzIHtcblx0QGluY2x1ZGUgaWNvbihxdWFya3MpO1xufVxuLmljb24tcmlnaHQtYXJyb3cge1xuXHRAaW5jbHVkZSBpY29uKHJpZ2h0LWFycm93KTtcbn1cbi5pY29uLXNldHRpbmdzIHtcblx0QGluY2x1ZGUgaWNvbihzZXR0aW5ncyk7XG59XG4uaWNvbi10YWJsZXQge1xuXHRAaW5jbHVkZSBpY29uKHRhYmxldCk7XG59XG4uaWNvbi11dGlsaXRpZXMge1xuXHRAaW5jbHVkZSBpY29uKHV0aWxpdGllcyk7XG59XG4iLCIvKioqXG4gKiBTdHJpcCBVbml0c1xuICpcbiAqIFN0cmlwcyB0aGUgdW5pdHMgZnJvbSBhIG51bWJlclxuICpcbiAqIHNjc3M6XG4gKiAgIHN0cmlwVW5pdHMoJG51bWJlcik7XG4gKlxuICogQHBhcmFtICRudW1iZXIgLSB2YWx1ZSB0byBzdHJpcCB0aGUgdW5pdHMgZnJvbS5cbiAqL1xuQGZ1bmN0aW9uIHN0cmlwVW5pdHMoJG51bWJlcikge1xuICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbn1cbiIsIi8qKipcbiAqIFBpeGVscyB0byBSZW1zIGZ1bmN0aW9uXG4gKlxuICogQ29udmVydHMgcGl4ZWxzIHRvIFJFTXMgc28gd2UgY2FuIGtlZXAgb3VyIHVuaXRzIGNvbnNpc3RlbnQuICBBc3N1bWVzIDFyZW0gaXMgMTZweCAoZGVmYXVsdCBmb3IgbW9zdCBicm93c2VycykuXG4gKlxuICogc2NzczpcbiAqICAgcHhUb1JlbSgkcHhbLCRiYXNlUmVtXSk7XG4gKlxuICogQHBhcmFtICRweCAtIHVuaXRsZXNzIGludGVnZXIgdG8gY29udmVydCB0byByZW1zXG4gKiBAcGFyYW0gJGJhc2VSZW0gLSBwaXhlbHMgdG8gY291bnQgYXMgb25lIHJlbS4gRGVmYXVsdHMgdG8gMTZcbiAqL1xuQGZ1bmN0aW9uIHB4VG9SZW0gKCRweCwgJGJhc2VSZW06IDE2KSB7XG4gIC8vIGNvbnZlcnRzIHBpeGVscyB0byByZW1zIGJhc2VkIG9uIHRoZSAkYmFzZS1yZW0gdmFyaWFibGVcbiAgQHJldHVybiAxcmVtICogc3RyaXBVbml0cygkcHgpIC8gJGJhc2VSZW07XG59XG4iLCIvKioqXG4gKiBQaXhlbHMgdG8gRW1zIGZ1bmN0aW9uXG4gKlxuICogQ29udmVydHMgcGl4ZWxzIHRvIEVNcyBzbyB3ZSBjYW4ga2VlcCBvdXIgdW5pdHMgY29uc2lzdGVudC4gIEFzc3VtZXMgMWVtIGlzIDE2cHgsIG9yIHlvdSBjYW4gcGFzcyBhIGRpZmZlcmVudCBiYXNlLlxuICpcbiAqIHNjc3M6XG4gKiAgIHB4VG9FbSgkcHhbLCRiYXNlXSk7XG4gKlxuICogQHBhcmFtICRweCAtIHVuaXRsZXNzIGludGVnZXIgdG8gY29udmVydCB0byByZW1zXG4gKiBAcGFyYW0gJGJhc2UgLSBwaXhlbHMgdG8gY291bnQgYXMgb25lIGVtLiBEZWZhdWx0cyB0byAxNlxuICovXG5AZnVuY3Rpb24gcHhUb0VtICgkcHgsICRiYXNlOiAxNikge1xuICBAcmV0dXJuIDFlbSAqIHN0cmlwVW5pdHMoJHB4KSAvICRiYXNlO1xufVxuIiwiLyoqKlxuICogU3F1YXJlIFJvb3QgRnVuY3Rpb25cbiAqXG4gKiBHZXRzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIG51bWJlciAod2l0aGluIGEgbWFyZ2luIG9mIGVycm9yKVxuICpcbiAqIFVzZWZ1bCBmb3IgZGlhZ29uYWwvUHl0aGFnb3JlYW4gc3R1ZmYuXG4gKlxuICogc2NzczpcbiAqICAgc3FydCgkbnVtKVxuICpcbiAqIEBwYXJhbSAkbnVtIC0gbnVtYmVyIHRvIGdldCBzcXVhcmUgcm9vdCBvZlxuICovXG5AZnVuY3Rpb24gYXBwcm94aW1hdGVTcSgkbnVtLCAkYXBwcm94KSB7XG4gICRyb290IDogKCggJG51bSAvICRhcHByb3ggKSArICRhcHByb3gpIC8gMjtcbiAgQHJldHVybiAkcm9vdDtcbn1cbkBmdW5jdGlvbiBzcXJ0KCRudW0pIHtcbiAgJHVuaXQ6ICRudW0gLyBzdHJpcFVuaXRzKCRudW0pO1xuICAkcm9vdDogMTtcbiAgJG51bTogc3RyaXBVbml0cygkbnVtKTtcbiAgJHVwcGVyQm91bmRzIDogKCRudW0gLyAyKSArIDE7IC8vbmV2ZXIgbmVlZCBvdmVyIGhhbGYgdGhlIG1haW4gbnVtYmVyLiBBZGQgb25lIGp1c3QgdG8gYmUgc3VyZSFcbiAgJGxvb3BzIDogJHVwcGVyQm91bmRzO1xuICBAaWYgJG51bSA+PSA0IHtcbiAgICBAZm9yICR0ZXN0IGZyb20gMiB0aHJvdWdoIChyb3VuZCgkdXBwZXJCb3VuZHMpKSB7XG4gICAgICAkc3EgOiAkdGVzdCAqICR0ZXN0O1xuICAgICAgQGlmICRzcSA8PSAkbnVtIHtcbiAgICAgICAgJHJvb3QgOiAkdGVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICR0ZXN0OiAxLjE7XG4gICAgQHdoaWxlICR0ZXN0IDwgJHVwcGVyQm91bmRzIHtcbiAgICAgICRzcSA6ICR0ZXN0ICogJHRlc3Q7XG4gICAgICBAaWYgJHNxIDw9ICRudW0ge1xuICAgICAgICAkcm9vdCA6ICR0ZXN0O1xuICAgICAgfVxuICAgICAgJHRlc3Q6ICR0ZXN0ICsgLjE7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5jcmVhc2UgYWNjdXJhY3lcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAyIHtcbiAgICAkcm9vdCA6IChhcHByb3hpbWF0ZVNxKCRudW0sICRyb290KSk7XG4gIH1cblxuICBAcmV0dXJuICRyb290ICogJHVuaXQ7XG59XG4iLCIvKioqXG4gKiBQb3dlciAvIEV4cG9uZW50IEZ1bmN0aW9uXG4gKlxuICogUmFpc2VzIGEgbnVtYmVyIHRvIGEgY2VydGFpbiBwb3dlci4gU3VwcG9ydHMgaW50ZWdlcnMgYW5kIC41cyBhcyB0aGUgZXhwb25lbnQuXG4gKlxuICogVXNlZnVsIGZvciBkaWFnb25hbC9QeXRoYWdvcmVhbiBzdHVmZi5cbiAqXG4gKiBzY3NzOlxuICogICBwb3coJGJhc2UsICRleHBvbmVudClcbiAqXG4gKiBAcGFyYW0gJGJhc2UgLSBudW1iZXIgdG8gZ2V0IHNxdWFyZSByb290IG9mXG4gKiBAcGFyYW0gJGV4cG9uZW50IC0gZXhwb25lbnQgdG8gcmFpc2UgdGhlIGJhc2UgbnVtYmVyIHRvXG4gKi9cbkBmdW5jdGlvbiBwb3cgKCRiYXNlLCAkZXhwb25lbnQpIHtcbiAgJHVuaXQ6ICRiYXNlIC8gc3RyaXBVbml0cygkYmFzZSk7XG4gICRiYXNlOiBzdHJpcFVuaXRzKCRiYXNlKTtcbiAgJHZhbHVlOiBzdHJpcFVuaXRzKCRiYXNlKTtcbiAgQGlmICRleHBvbmVudCAlIDEgIT0gMCBhbmQgJGV4cG9uZW50ICUgMSAhPSAuNSBhbmQgJGV4cG9uZW50ICUgMSAhPSAtLjUge1xuICAgIEBlcnJvciBcImV4cG9uZW50IG11c3QgYmUgbXVsdGlwbGUgb2YgLjUsIHdhcyAjeyRleHBvbmVudH1cIjtcbiAgfVxuICBAaWYgJGV4cG9uZW50ID49IDAge1xuICAgICRudW0gOiBmbG9vcigkZXhwb25lbnQpO1xuICAgIEBpZiAkbnVtID09IDAge1xuICAgICAgJHZhbHVlIDogMTtcbiAgICB9XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAkbnVtIHtcbiAgICAgIEBpZiAkaSA+IDEge1xuICAgICAgICAkdmFsdWU6ICR2YWx1ZSAqICRiYXNlO1xuICAgICAgfVxuICAgIH1cbiAgICBAaWYgJGV4cG9uZW50ICUgMSAhPSAwIHtcbiAgICAgICR2YWx1ZTogJHZhbHVlICogc3FydCgkYmFzZSk7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAZm9yICRpIGZyb20gMCB0aHJvdWdoICgtMSAqIGNlaWwoJGV4cG9uZW50KSkge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgLyAkYmFzZTtcbiAgICB9XG4gICAgQGlmICRleHBvbmVudCAlIDEgIT0gMCB7XG4gICAgICAkdmFsdWU6ICR2YWx1ZSAvIChzcXJ0KCRiYXNlKSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHZhbHVlICogJHVuaXQ7XG59XG4iLCIvKioqXG4gKiBNb2R1bGFyIFNjYWxlIEZ1bmN0aW9uXG4gKlxuICogRGV0ZXJtaW5lcyBhIHNpemUgZnJvbSBhIGJhc2UsIG11bHRpcGxlLCBhbmQgc2NhbGUgZmFjdG9yLlxuICpcbiAqIHNjc3M6XG4gKiAgIGZvbnQtc2l6ZTogbW9kdWxhclNjYWxlKDE2LCAzLCAxLjUpOyAvLyAzNlxuICovXG5AZnVuY3Rpb24gbW9kdWxhclNjYWxlICgkYmFzZTogcHhUb1JlbSgxNiksICRtdWx0aXBsZTogMSwgJGZhY3RvcjogMS41KSB7XG4gIEByZXR1cm4gJGJhc2UgKiBwb3coJGZhY3RvciwgKCRtdWx0aXBsZSAtIDEpKTtcbn1cbiIsIi8qKipcbiAqIEFzcGVjdCBSYXRpb1xuICpcbiAqIEdldHMgcGFkZGluZyBmb3IgY29ycmVjdCBhc3BlY3QgcmF0aW8sIGFuZCBzZXRzIGhlaWdodCB0byAwLlxuICpcbiAqIHNjc3M6XG4gKiAgIEBpbmNsdWRlIGFzcGVjdC1yYXRpbygkd2lkdGgsICRoZWlnaHQpXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICR3aWR0aCAtIGNvbXBhcmF0aXZlIHdpZHRoIG9mIHRoZSByYXRpby4gVGhlICd4JyBpbiB4OnlcbiAqIEBwYXJhbSB7TnVtYmVyfSAkaGVpZ2h0IC0gY29tcGFyYXRpdmUgaGVpZ2h0IG9mIHRoZSByYXRpby4gVGhlICd5JyBpbiB4OnlcbiAqL1xuQG1peGluIGFzcGVjdC1yYXRpbygkd2lkdGgsICRoZWlnaHQpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAoJGhlaWdodCAvICR3aWR0aCkgKiAxMDAlIDAgMCAwO1xuICBoZWlnaHQ6IDA7XG59XG4iLCIvKioqXG4gKiBRdWFudGl0eSBRdWVyeVxuICpcbiAqIE1peGlucyB0byBhbGxvdyBzdHlsZXMgdG8gYmUgc2V0IGJhc2VkIG9uIGF0LWxlYXN0LCBhdC1tb3N0LCBhbmQgZXhhY3RseSBgbmBcbiAqIG51bWJlciBvZiBhbiBlbGVtZW50LlxuICpcbiAqIHNjc3M6XG4gKiAgIEBpbmNsdWRlIHFxQXRMZWFzdCAoJG4pIHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICogIFxuICogICBAaW5jbHVkZSBxcUF0TW9zdCAoJG4pIHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICogIFxuICogICBAaW5jbHVkZSBxcUV4YWN0bHkgKCRuKSB7XG4gKiAgICAgQGNvbnRlbnQ7XG4gKiAgIH1cbiAqXG4gKiBAcGFyYW0gJG4gLSBob3cgbWFueSBlbGVtZW50cyB0byBxdWVyeSBhZ2FpbnN0XG4gKiBAcGFyYW0gQGNvbnRlbnQgLSB0aGUgc3R5bGVzIHRvIGFwcGx5IHRvIGl0XG4gKi9cbkBtaXhpbiBxcUF0TGVhc3QgKCRuKSB7XG4gICY6bnRoLWxhc3QtY2hpbGQoI3tufSsjeyRufSksXG4gICY6bnRoLWxhc3QtY2hpbGQoI3tufSsjeyRufSkgfiAmIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuQG1peGluIHFxQXRNb3N0ICgkbikge1xuICAmOm50aC1sYXN0LWNoaWxkKCN7LW59KyN7JG59KTpmaXJzdC1jaGlsZCxcbiAgJjpudGgtbGFzdC1jaGlsZCgjey1ufSsjeyRufSk6Zmlyc3QtY2hpbGQgfiAmIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuQG1peGluIHFxRXhhY3RseSAoJG4pIHtcbiAgJjpudGgtbGFzdC1jaGlsZCgje259KyN7JG59KTpudGgtbGFzdC1jaGlsZCgjey1ufSsjeyRufSk6Zmlyc3QtY2hpbGQsXG4gICY6bnRoLWxhc3QtY2hpbGQoI3tufSsjeyRufSk6bnRoLWxhc3QtY2hpbGQoI3stbn0rI3skbn0pOmZpcnN0LWNoaWxkIH4gJiB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cbiIsIi8qKipcbiAqIE1vZCBRdWVyeVxuICpcbiAqIEEgZGFtbiBjbGV2ZXIgd2F5IHRvIHNlbGVjdCBlbGVtZW50cyB3aGVuIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaXMgZGl2aXNpYmxlXG4gKiBieSBhIGdpdmVuIGludGVnZXIuIEFzIG9wcG9zZWQgdG8gdGhlIGFic29sdXRlIFtRdWFudGl0eSBRdWVyeV0oIy91dGlsaXRpZXMvbWl4aW5zL3F1YW50aXR5LXF1ZXJ5KSxcbiAqIHRoaXMgc2VsZWN0cyB3aGVuIGBjaGlsZHJlbiAlIG4gPSAwYCwgb3IgaWYgYSByZW1haW5kZXIgaXMgYWxzbyBwYXNzZWQsIHdoZW5cbiAqIGBjaGlsZHJlbiAlIG4gPSByZW1haW5kZXJgLlxuICpcbiAqIEdsZWVmdWxseSBzdG9sZW4gZnJvbSBQYXRyaWNrIENsYW5jZXkncyBhcnRpY2xlOiBodHRwOi8vYWxpc3RhcGFydC5jb20vYXJ0aWNsZS91c2luZy1jc3MtbW9kLXF1ZXJpZXMtd2l0aC1yYW5nZS1zZWxlY3RvcnNcbiAqXG4gKiBAcGFyYW0gJGRpdmlzaWJsZUJ5XG4gKiBAcGFyYW0gJHJlbWFpbmRlclxuICogQHBhcmFtICRzZWxlY3RvciAtIHN0cmluZyBwYXNzZWQgdGhhdCByZXByZXNlbnRzIHNlbGVjdG9yIGZvciBzaWJsaW5nc1xuICpcbiAqIHNjc3M6XG4gKiAgIEBpbmNsdWRlIHNlbGVjdFJhbmdlKDUsOSkge1xuICogICAgIC8vIHRoaW5ncyB5b3Ugd2FudCBvbmx5IGl0ZW1zIDUgLSA5IHRvIGRvXG4gKiAgIH1cbiAqICAgQGluY2x1ZGUgbW9kUXVlcnkoMywgMCwgJy5jdXN0b20tc2VsZWN0b3InKSB7XG4gKiAgICAgLy8gdGhpbmdzIHlvdSB3YW50IGFsbCAuY3VzdG9tLXNlbGVjdG9ycyBpbiBhIGdpdmVuIHBhcmVudCB0byBkb1xuICogICAgIC8vIHdoZW4gdGhlaXIgdG90YWwgbnVtYmVyIGlzIGRpdmlzaWJsZSBieSAzXG4gKiAgIH1cbiAqICAgQGluY2x1ZGUgbW9kRmlyc3QoMywgMSkge1xuICogICAgIC8vIHRoaW5ncyB5b3Ugd2FudCB0aGUgZmlyc3QgZWxlbWVudCB0byBkbyB3aGVuIHRoZSB0b3RhbCBudW1iZXIgb2ZcbiAqICAgICAvLyBjaGlsZHJlbiBtYXRjaGVzIG4gJSAzID09IDFcbiAqICAgfVxuICovXG5cbi8vIHJhbmdlIHNlbGVjdG9yIG1peGluXG5AbWl4aW4gc2VsZWN0UmFuZ2UoJHN0YXJ0LCAkZW5kKXtcbiAgJjpudGgtY2hpbGQobisjeyRzdGFydH0pOm50aC1jaGlsZCgtbisjeyRlbmR9KXtcbiAgICBAY29udGVudDtcbiAgfVxufVxuLy8gbW9kIHF1ZXJ5IG1peGluXG5AbWl4aW4gbW9kUXVlcnkoJG1vZCwgJHJlbWFpbmRlcjogMCwgJHNlbGVjdG9yOiBsaSl7XG4gICY6bnRoLWxhc3QtY2hpbGQoI3skbW9kfW4rI3skcmVtYWluZGVyfSk6Zmlyc3QtY2hpbGQsXG4gICY6bnRoLWxhc3QtY2hpbGQoI3skbW9kfW4rI3skcmVtYWluZGVyfSk6Zmlyc3QtY2hpbGQgfiAjeyRzZWxlY3Rvcn0ge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBtb2RGaXJzdCgkbW9kLCAkcmVtYWluZGVyOiAwKSB7XG4gICY6bnRoLWxhc3QtY2hpbGQoI3skbW9kfW4rI3skcmVtYWluZGVyfSk6Zmlyc3QtY2hpbGQge1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvKioqXG4gKiBNZWRpYSBRdWVyaWVzXG4gKlxuICogRGVmaW5lcyBvdXIgZGVmYXVsdCBicmVha3BvaW50cy4gIEFzc3VtZXMgbW9iaWxlLWZpcnN0IGNvZGUsIGJ1dCBzdXBwb3J0cyBub3RcbiAqIGJ5IHBhc3NpbmcgeW91ciBicmVha3BvaW50IHRvIHRoZSBhbHRlcm5hdGUgbWl4aW46IGBtcS1sdGAuIERvbid0IHdvcnJ5IGFib3V0XG4gKiBoYXZpbmcgYSB0b24gb2YgdGhlc2UsIHNpbmNlIHRoZSBtaW5pZmljYXRpb24gcHJvY2VzcyB3aWxsIGNvbWJpbmUgdGhlbS5cbiAqXG4gKiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBtaXhpbiBlYWNoIGZvciBgcG9ydHJhaXRgIGFuZCBgbGFuZHNjYXBlYCBvcmllbnRhdGlvbnMuXG4gKlxuICogc2NzczpcbiAqICAgQGluY2x1ZGUgbXEoJGJyZWFrcG9pbnQpIHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICogICBAaW5jbHVkZSBwb3J0cmFpdCB7XG4gKiAgICAgQGNvbnRlbnQ7XG4gKiAgIH1cbiAqICAgQGluY2x1ZGUgbGFuZHNjYXBlIHtcbiAqICAgICBAY29udGVudDtcbiAqICAgfVxuICpcbiAqIEBwYXJhbSAkYnJlYWtwb2ludCAtIHdoYXQgc2l6ZSB5b3UnZCBsaWtlIHRvIHRhcmdldCBsYXJnZXIgdGhhbi4gQSBmZXcgaGF2ZSBiZWVuIHByZS1kZWZpbmVkLlxuICogQHBhcmFtIEBjb250ZW50IC0gdGhlIGNvbnRlbnQgdG8gcHV0IGluIHRoZSBtZWRpYSBxdWVyeVxuICovXG5AbWl4aW4gbXEgKCRicmVha3BvaW50KSB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDokYnJlYWtwb2ludCkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5AbWl4aW4gbXEtbHQgKCRicmVha3BvaW50KSB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDojeyRicmVha3BvaW50IC0gLjAxfSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5AbWl4aW4gcG9ydHJhaXQgKCkge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuQG1peGluIGxhbmRzY2FwZSAoKSB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBQcmUtZGVmaW5lZCBicmVha3BvaW50c1xuLy9cbi8vIEJyZWFrcG9pbnRzIHNhdmVkIHRvIHZhcmlhYmxlcyBmb3IgZWFzeSBhY2Nlcy4gTm90ZSB0aGF0IHRoZSBicmVha3BvaW50cyBhcmVcbi8vIG5vdCBiYXNlZCBvbiBkZXZpY2VzLCBhbmQgdGhlIGRldmljZSBuYW1lIGluIHBhcmVudGhlc2lzIGlzIGp1c3QgZm9yXG4vLyBzaW1wbGlmaWNhdGlvbi5cbi8vXG4vLyAkYnAtbWVkaXVtIC0gdGhlIGJyZWFrcG9pbnQgYmV0d2VlbiBzbWFsbCAocGhvbmUpIGFuZCBtZWRpdW0gKHRhYmxldCkgbGF5b3V0cy5cbi8vICRicC1sYXJnZSAtIHRoZSBicmVha3BvaW50IGJldHdlZW4gbWVkaXVtICh0YWJsZXQpIGFuZCBsYXJnZSAoZGVza3RvcCkgbGF5b3V0cy5cbi8vXG4vLyBTdHlsZWd1aWRlIEkuMy4xXG4kYnAtc21hbGw6IHB4VG9FbSg0NjApO1xuJGJwLW1lZGl1bTogcHhUb0VtKDczMCk7XG4kYnAtbGFyZ2U6IHB4VG9FbSg5NjApO1xuJGJwLXhsYXJnZTogcHhUb0VtKDExMDApO1xuIiwiLyoqKlxuICogIENsZWFyIEZpeFxuICpcbiAqICBDbGVhcnMgYWxsIGZsb2F0cyBpbnNpZGUgdGhpcyBlbGVtZW50IGJ5IHVzaW5nIHRoZSBgOjphZnRlcmAgcHNldWRvLWVsZW1lbnQuXG4gKlxuICogIHNjc3M6XG4gKiAgICBAaW5jbHVkZSBjbGVhci1maXg7XG4gKiAgICAvLyBvclxuICogICAgQGV4dGVuZCAlY2xlYXItZml4O1xuICovXG4lY2xlYXItZml4IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNsZWFyOiBib3RoO1xuICB9XG59XG5AbWl4aW4gY2xlYXJGaXggKCkge1xuICBAZXh0ZW5kICVjbGVhci1maXg7XG59XG4iLCIvKioqXG4gKiBHcmlkXG4gKlxuICogT3VyIHN1cGVyIHNpbXBsZSBjdXN0b20gZ3JpZCBzeXN0ZW0uIEp1c3QgaW5jbHVkZSB0aGUgbWl4aW4gYGdyaWRDb250YWluZXJgXG4gKiB0byBzZXQgbWF4LXdpZHRoID0gJG1heC13aWR0aCArICRndXR0ZXIuIEZvciBpbnRlcm5hbCBzdHVmZiwgdXNlXG4gKiBgc3ViZ3JpZENvbnRhaW5lcmAgdG8gYXV0b21hdGljYWxseSBvZmZzZXQgdGhlIG1hcmdpbnMgb24gdGhlIGNvbnRhaW5lciBpZlxuICogbmVlZGVkLCBhbmQgYGNvbHNwYW5gIG9uIHRoZSBhY3R1YWwgY29sdW1uLiAgQnkgZGVmYXVsdCwgYXNzdW1lcyAxMiBjb2x1bW5zXG4gKiBhbmQgYSAyICogJHdyIGd1dHRlciwgYnV0IHRob3NlIGNhbiBiZSBvdmVycmlkZGVuIGZvciBtb3JlIGNvbXBsZXggbGF5b3V0cy5cbiAqIEl0IHNwaXRzIG91dCBzdHlsZXMgd2hlcmV2ZXIgaXQgaXMgY2FsbGVkLCBzbyB5b3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAqIGNvbHVtbnMgb3IgZXZlbiBlbnRpcmVseSBkaWZmZXJlbnQgZ3JpZHMgd2l0aGluIG1lZGlhIHF1ZXJpZXMuXG4gKlxuICogVGhlcmUncyBhbHNvIGEgY29scHVzaCBtaXhpbiB0byBzaGlmdCBhbiBlbGVtZW50IHRvIHRoZSByaWdodCBieSBhIG51bWJlciBvZiBjb2x1bW5zLlxuICpcbiAqIFJlbWVtYmVyLCB2YXJpYWJsZXMgd3JhcHBlZCBpbiBgW11gIGluIHRoZSBleGFtcGxlIGFyZSBvcHRpb25hbC5cbiAqXG4gKiBzY3NzOlxuICogICBAaW5jbHVkZSBncmlkQ29udGFpbmVyIChbJGd1dHRlcl0pO1xuICogICBAaW5jbHVkZSBzdWJncmlkQ29udGFpbmVyIChbJGd1dHRlcl0pO1xuICogICBAaW5jbHVkZSBjb2xzcGFuICgkc3BhblssICR0b3RhbFssICRndXR0ZXJdXSk7XG4gKiAgIEBpbmNsdWRlIGNvbHB1c2ggKCRzcGFuWywgJHRvdGFsWywgJGd1dHRlcl1dKTtcbiAqXG4gKiBAcGFyYW0ge2ludH0gJHNwYW4gLSBudW1iZXIgb2YgY29sdW1ucyB0byBzcGFuXG4gKiBAcGFyYW0ge2ludH0gJHRvdGFsIC0gbnVtYmVyIG9mIHRvdGFsIGNvbHVtbnMgdGhlIGdyaWQgaGFzXG4gKiBAcGFyYW0ge251bWJlciB3LyB1bml0fSAkZ3V0dGVyIC0gd2lkdGggb2YgdGhlIGd1dHRlcnMgYmV0d2VlbiBjb2x1bW5zXG4gKi9cbkBtaXhpbiBncmlkQ29udGFpbmVyICgkZ3V0dGVyOiAkd3IgKiAyKSB7XG4gIEBleHRlbmQgJWNsZWFyLWZpeDtcbiAgQGlmICRtYXgtd2lkdGggIT0gMTAwJSB7XG4gICAgbWF4LXdpZHRoOiAkbWF4LXdpZHRoICsgJGd1dHRlcjtcbiAgfVxuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAvLyBwYWRkaW5nLWxlZnQ6ICR3cjtcbiAgLy8gcGFkZGluZy1yaWdodDogJHdyO1xufVxuQG1peGluIHN1YmdyaWRDb250YWluZXIgKCRndXR0ZXI6ICR3ciAqIDIpIHtcbiAgQGV4dGVuZCAlY2xlYXItZml4O1xuICBtYXJnaW4tbGVmdDogLTEgKiAkZ3V0dGVyIC8gMjtcbiAgbWFyZ2luLXJpZ2h0OiAtMSAqICRndXR0ZXIgLyAyO1xufVxuQG1peGluIGNvbHNwYW4gKCRzcGFuLCAkdG90YWw6IDEyLCAkZ3V0dGVyOiAkd3IgKiAyKSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZsb2F0OiBsZWZ0O1xuICBtaW4taGVpZ2h0OiAxcHg7IC8vIGZvcmNlIGl0IHRvIHRha2Ugc3BhY2Ugbm8gbWF0dGVyIHdoYXRcbiAgQGlmICgkZ3V0dGVyICE9IDApIHtcbiAgICB3aWR0aDogY2FsYygjeyRzcGFuIC8gJHRvdGFsICogIDEwMCV9IC0gI3skZ3V0dGVyfSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIHdpZHRoOiAjeyRzcGFuIC8gJHRvdGFsICogIDEwMCV9O1xuICB9XG4gIG1hcmdpbi1sZWZ0OiAkZ3V0dGVyIC8gMjtcbiAgbWFyZ2luLXJpZ2h0OiAkZ3V0dGVyIC8gMjtcbn1cbkBtaXhpbiBjb2xwdXNoICgkc3BhbiwgJHRvdGFsOiAxMiwgJGd1dHRlcjogJHdyICogMikge1xuICBAaWYgKCRndXR0ZXIgIT0gMCkge1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKCN7JHNwYW4gLyAkdG90YWwgKiAgMTAwJX0gKyAjeyRndXR0ZXIgLyAyfSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIG1hcmdpbi1sZWZ0OiAjeyRzcGFuIC8gJHRvdGFsICogIDEwMCV9O1xuICB9XG59XG4iLCIvKlxuKiBIaWRlIG9ubHkgdmlzdWFsbHksIGJ1dCBoYXZlIGl0IGF2YWlsYWJsZSBmb3Igc2NyZWVuIHJlYWRlcnM6XG4qIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHlcbiovXG5cbi52aXN1YWxseWhpZGRlbiwgJXZpc3VhbGx5aGlkZGVuIHtcbiAgYm9yZGVyOiAwO1xuICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG5cbiAgLypcbiAgKiBFeHRlbmRzIHRoZSAudmlzdWFsbHloaWRkZW4gY2xhc3MgdG8gYWxsb3cgdGhlIGVsZW1lbnRcbiAgKiB0byBiZSBmb2N1c2FibGUgd2hlbiBuYXZpZ2F0ZWQgdG8gdmlhIHRoZSBrZXlib2FyZDpcbiAgKiBodHRwczovL3d3dy5kcnVwYWwub3JnL25vZGUvODk3NjM4XG4gICovXG4gICYuZm9jdXNhYmxlOmZvY3VzLCAmLmZvY3VzYWJsZTphY3RpdmUge1xuICAgIGNsaXA6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG4iLCIqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cbiIsIi8qKipcbiAqIFZpc3VhbCBSaHl0aG1cbiAqXG4gKiBWYXJpYWJsZXMgdG8gbWFpbnRhaW4gYSBzdGFuZGFyZCB2aXN1YWwgcmh5dGhtIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LlxuICpcbiAqIEFsc28sIHRoZXJlJ3MgYSBmdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBuZXh0IG11bHRpcGxlIG9mIHZlcnRpY2FsIHJoeXRobVxuICogYWJvdmUgYSBnaXZlbiBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gbnVtYmVyIHRvIGZpbmQgbmV4dCBtdWx0aXBsZSBhYm92ZS5cbiAqIEBwYXJhbSB7b3B0aW9uYWwsIE51bWJlcn0gJHJoeXRobSAtIG51bWJlciB0aGF0J3MgbXVsdGlwbGllZCB1bnRpbCBpdCdzIGxhcmdlciB0aGFuIGAkYmFzZWAuIEVxdWFsIHRvIGAkdnJgIGlmIG9taXR0ZWQuXG4gKlxuICogc2NzczpcbiAqICAgbGluZS1oZWlnaHQ6IG11bHRpcGxlQWJvdmUoMzAsIDE0KTsgLy8gMztcbiAqL1xuXG4vLyB2ZXJ0aWNhbCByaHl0aG1cbiR2cjogcHhUb1JlbSgxNikgIWRlZmF1bHQ7XG4kd3I6ICR2ciAhZGVmYXVsdDtcblxuLy8gYmFzZSBncmlkIHdpZHRoXG4kbWF4LXdpZHRoOiBweFRvUmVtKDEwMjApO1xuQGZ1bmN0aW9uIG4tY29sLXdpZHRoICgkY29scykge1xuICBAcmV0dXJuICgoJG1heC13aWR0aCAvIDEyIC0gJHdyKSAqICRjb2xzICsgJHdyICogKCRjb2xzIC0gMSkpO1xufVxuXG4vLyB1c2VmdWwgZm9yIGxpbmUgaGVpZ2h0c1xuQGZ1bmN0aW9uIG11bHRpcGxlQWJvdmUgKCRiYXNlLCAkcmh5dGhtOiAkdnIpIHtcbiAgQHJldHVybiAkcmh5dGhtICogY2VpbCgkYmFzZSAvICRyaHl0aG0pO1xufVxuIiwiLyoqKlxuICogQ29sb3JzXG4gKlxuICogVGhlc2UgY29sb3JzIGRlZmluZSB0aGUgbG9vayBvZiB0aGUgZ3VpZGUgaXRzZWxmLCBfbm90XyBhbnl0aGluZyB3aXRoaW4gdGhlIGV4YW1wbGVzLlxuICpcbiAqIHBhdGg6IC5cbiAqL1xuXG4vKioqXG4gKiBQcmltYXJ5IFBhbGV0dGVcbiAqXG4gKiBUaGUgbWFpbiBjb2xvcnMgdXNlZCBmb3IgdGhlIEF1dG9ndWlkZSB0ZW1wbGF0ZS4gIEJ5IGRlZmF1bHQsIHRoZXNlIGNvbG9ycyBnZXRcbiAqIHJldXNlZCBmb3IgdGhlIG1vcmUgZGV0YWlsZWQgcGFsZXR0ZS5cbiAqXG4gKiBOb3RlIHRvIGxlYXJuZXJzOiB0aGVzZSB2YXJpYWJsZSBuYW1lcyBhcmUgbGVzcyB0aGFuIHN0ZWxsYXIuICBUaGV5J3JlIGtlcHRcbiAqIGludGVudGlvbmFsbHkgdmFndWUsIGJlY2F1c2Ugb2YgdGhlaXIgd2lkZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBwYXRoOiAuL2NvbG9yc1xuICogb3JkZXI6IDBcbiAqIHRlbXBsYXRlOiBjb2xvclxuICovXG4kdGV4dDogIzMzMyAhZGVmYXVsdDtcbiRiYWNrZ3JvdW5kLXByaW1hcnk6ICNmZmYgIWRlZmF1bHQ7XG4kYmFja2dyb3VuZC1zZWNvbmRhcnk6ICNlOWVhZjAgIWRlZmF1bHQ7XG4kYWNjZW50LXByaW1hcnk6ICMwNDZDNkYgIWRlZmF1bHQ7XG4kYWNjZW50LXByaW1hcnktbGlnaHQ6ICMxMWMxYzQgIWRlZmF1bHQ7XG4kYWNjZW50LXNlY29uZGFyeTogIzE0NDc3YSAhZGVmYXVsdDtcbiRhY2NlbnQtc2Vjb25kYXJ5LWxpZ2h0OiAjMTg2Y2JmICFkZWZhdWx0O1xuXG4vKioqXG4gKiBEZXRhaWxlZCBQYWxldHRlXG4gKlxuICogVGhlc2UgYXJlIHRoZSBjb2xvcnMgdGhhdCB3aWxsIGFjdHVhbGx5IGFwcGVhciB0aHJvdWdob3V0IHRoZSBnZW5lcmF0ZWQgZ3VpZGUuXG4gKiBBbHRlcmluZyB0aGVzZSB3aWxsIGdyYW50IGEgdmVyeSBmaW5lIGxldmVsIG9mIGNvbnRyb2wgb3ZlciBjb21wb25lbnRzLlxuICpcbiAqIFRoZSBjb2xvcnMgdGl0bGVkIGAkYmFja2dyb3VuZC0qYCBhcmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eVxuICogZm9yIHRoZWlyIGdpdmVuIGVsZW1lbnQsIHNvIHlvdSBjYW4gcmVwbGFjZSB0aGVtIHdpdGggYW55dGhpbmcgdGhhdCBjb3VsZCBhcHBseVxuICogdGhlcmUuICBGb3IgZXhhbXBsZTogYCRiYWNrZ3JvdW5kLWhlYWRlcjogdXJsKGh0dHBzOi8vbW9yYm90cm9uLmNvbS9pbWcvUzAzRTA2LzEwNTM0NTEuanBnKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdGAuXG4gKlxuICogcGF0aDogLi9jb2xvcnNcbiAqIG9yZGVyOiAxXG4gKiB0ZW1wbGF0ZTogY29sb3JcbiAqL1xuJHRleHQtYm9keTogJHRleHQgIWRlZmF1bHQ7XG4kdGV4dC1oZWFkbGluZXM6ICR0ZXh0ICFkZWZhdWx0O1xuJHRleHQtc3VidGxlOiByZ2JhKCR0ZXh0LCAuNSkgIWRlZmF1bHQ7XG4kdGV4dC1pbnZlcnRlZDogd2hpdGUgIWRlZmF1bHQ7XG4kdGV4dC1oZWFkZXI6ICR0ZXh0LWludmVydGVkICFkZWZhdWx0O1xuJHRleHQtZm9vdGVyOiByZ2IoMjU1LCAyNTUsIDI1NSkgIWRlZmF1bHQ7XG4kdGV4dC1jb2RlOiAkdGV4dCAhZGVmYXVsdDtcbiRiYWNrZ3JvdW5kLWhlYWRlcjogJGFjY2VudC1wcmltYXJ5ICFkZWZhdWx0O1xuJGJhY2tncm91bmQtYm9keTogJGJhY2tncm91bmQtcHJpbWFyeSAhZGVmYXVsdDtcbiRiYWNrZ3JvdW5kLWNvZGU6ICRiYWNrZ3JvdW5kLXNlY29uZGFyeSAhZGVmYXVsdDtcbiRiYWNrZ3JvdW5kLXRyYXk6ICRiYWNrZ3JvdW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kYmFja2dyb3VuZC1mb290ZXI6ICM2NjY3NmEgIWRlZmF1bHQ7XG4kYm9yZGVyLWh0bWw6ICRiYWNrZ3JvdW5kLXNlY29uZGFyeSAhZGVmYXVsdDtcbiRib3JkZXItY29kZTogJGJhY2tncm91bmQtc2Vjb25kYXJ5ICFkZWZhdWx0O1xuJGJvcmRlci10cmF5OiAkYmFja2dyb3VuZC1zZWNvbmRhcnkgIWRlZmF1bHQ7XG4kYm9yZGVyLWlucHV0OiAkYmFja2dyb3VuZC1zZWNvbmRhcnkgIWRlZmF1bHQ7XG4kb3ZlcmxheS1jb2x1bW5zOiByZ2JhKCRhY2NlbnQtcHJpbWFyeSwgLjEpICFkZWZhdWx0O1xuXG5cbi8qKipcbiAqIENvZGUgQ29sb3JzXG4gKlxuICogVGhlc2UgYXJlIHRoZSBjb2xvciB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgY29kZSBibG9ja3MuXG4gKlxuICogdGVtcGxhdGU6IGNvbG9yXG4gKiBwYXRoOiAuL21vbGVjdWxlcy9jb2RlIGJsb2NrXG4gKi9cbiRjb2RlLWNvbW1lbnQ6ICR0ZXh0LXN1YnRsZSAhZGVmYXVsdDtcbiRjb2RlLXF1b3RlOiAkdGV4dC1zdWJ0bGUgIWRlZmF1bHQ7XG4kY29kZS1rZXl3b3JkOiAkdGV4dC1jb2RlICFkZWZhdWx0O1xuJGNvZGUtc2VsZWN0b3ItdGFnOiAkdGV4dC1jb2RlICFkZWZhdWx0O1xuJGNvZGUtc3Vic3Q6ICR0ZXh0LWNvZGUgIWRlZmF1bHQ7XG4kY29kZS1udW1iZXI6ICRhY2NlbnQtcHJpbWFyeS1saWdodCAhZGVmYXVsdDtcbiRjb2RlLWxpdGVyYWw6ICRhY2NlbnQtcHJpbWFyeS1saWdodCAhZGVmYXVsdDtcbiRjb2RlLXZhcmlhYmxlOiAkYWNjZW50LXByaW1hcnktbGlnaHQgIWRlZmF1bHQ7XG4kY29kZS10ZW1wbGF0ZS12YXJpYWJsZTogJGFjY2VudC1wcmltYXJ5LWxpZ2h0ICFkZWZhdWx0O1xuJGNvZGUtdGFnLWF0dHI6ICRhY2NlbnQtcHJpbWFyeS1saWdodCAhZGVmYXVsdDtcbiRjb2RlLXN0cmluZzogJGFjY2VudC1zZWNvbmRhcnktbGlnaHQgIWRlZmF1bHQ7XG4kY29kZS1kb2N0YWc6ICRhY2NlbnQtc2Vjb25kYXJ5LWxpZ2h0ICFkZWZhdWx0O1xuJGNvZGUtdGl0bGU6ICRhY2NlbnQtc2Vjb25kYXJ5ICFkZWZhdWx0O1xuJGNvZGUtc2VjdGlvbjogJGFjY2VudC1zZWNvbmRhcnkgIWRlZmF1bHQ7XG4kY29kZS1zZWxlY3Rvci1pZDogJGFjY2VudC1zZWNvbmRhcnkgIWRlZmF1bHQ7XG4kY29kZS10eXBlOiAkYWNjZW50LXByaW1hcnkgIWRlZmF1bHQ7XG4kY29kZS1jbGFzcy10aXRsZTogJGFjY2VudC1wcmltYXJ5ICFkZWZhdWx0O1xuJGNvZGUtdGFnOiBkYXJrZW4oJGFjY2VudC1wcmltYXJ5LCA0KSAhZGVmYXVsdDtcbiRjb2RlLW5hbWU6IGRhcmtlbigkYWNjZW50LXByaW1hcnksIDQpICFkZWZhdWx0O1xuJGNvZGUtYXR0cmlidXRlOiBkYXJrZW4oJGFjY2VudC1wcmltYXJ5LCA0KSAhZGVmYXVsdDtcbiRjb2RlLXJlZ2V4cDogJGFjY2VudC1zZWNvbmRhcnkgIWRlZmF1bHQ7XG4kY29kZS1saW5rOiAkYWNjZW50LXNlY29uZGFyeSAhZGVmYXVsdDtcbiRjb2RlLXN5bWJvbDogZGFya2VuKCRhY2NlbnQtc2Vjb25kYXJ5LCA0KSAhZGVmYXVsdDtcbiRjb2RlLWJ1bGxldDogZGFya2VuKCRhY2NlbnQtc2Vjb25kYXJ5LCA0KSAhZGVmYXVsdDtcbiRjb2RlLWJ1aWx0X2luOiAkYWNjZW50LXByaW1hcnkgIWRlZmF1bHQ7XG4kY29kZS1idWlsdGluLW5hbWU6ICRhY2NlbnQtcHJpbWFyeSAhZGVmYXVsdDtcbiRjb2RlLW1ldGE6ICR0ZXh0LXN1YnRsZSAhZGVmYXVsdDtcbiIsIi8qKipcbiAqIEZvbnRzXG4gKlxuICogVGhlIGZvbnQgZmFtaWxpZXMgdXNlZCB0aHJvdWdob3V0IHRoZSBndWlkZS4gIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGp1c3QgbGlrZVxuICogY29sb3JzLiAgSWYgeW91IG5lZWQgdG8gbG9hZCBhIHdlYmZvbnQsIHlvdSBjYW4gZG8gc28gaW4geW91ciBgc2Fzc1ByZXBlbmRgIGZpbGVcbiAqIHVzaW5nIGBAaW1wb3J0YC5cbiAqXG4gKiB0ZW1wbGF0ZTogZm9udFxuICogcGF0aDogLi9cbiAqL1xuJGZvbnQtYm9keTogJ0xhdG8nLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGZvbnQtaGVhZGxpbmU6ICdEcm9pZCBTZXJpZicsIHNlcmlmICFkZWZhdWx0O1xuJGZvbnQtbW9ubzogJ1NvdXJjZSBDb2RlIFBybycsIG1vbm9zcGFjZSAhZGVmYXVsdDtcblxuQG1peGluIGZvbnQtYm9keSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1ib2R5O1xufVxuQG1peGluIGZvbnQtaGVhZGxpbmUge1xuICBmb250LWZhbWlseTogJGZvbnQtaGVhZGxpbmU7XG4gIHdlaWdodDogNDAwO1xufVxuQG1peGluIGZvbnQtbW9ubyB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1tb25vO1xufVxuIiwiLyoqKlxuICogIFR5cGUgU2NhbGUgbWl4aW5zXG4gKlxuICogIENyZWF0ZWQgdXNpbmcgYSBtb2R1bGFyIHNjYWxlLiBGYWN0b3IgaXMgMS40LiBUaGlzIG1lYW5zLCBzdGFydGluZyBhdCBhIGJhc2VcbiAqICBvZiBgMjBweGAsIHRoZSBuZXh0IHNpemUgdXAgKGBoM2ApIGlzIGAyMCAqIDEuNCA9IDI4YC4gVG8gc2ltcGxpZnkgdGhpcywgdGhlXG4gKiAgbWF0aCBpcyBoYW5kbGVkIGJ5IHRoZSBbYG1vZHVsYXJTY2FsZWBdKCMvdXRpbGl0aWVzL2Z1bmN0aW9ucy9tb2R1bGFyU2NhbGUpXG4gKiAgZnVuY3Rpb24uXG4gKlxuICogIEFkZGl0aW9uYWxseSwgYGg0YCBzcGxpdHMgYmV0d2VlbiBib2R5IGFuZCBgaDNgLCB3aGlsZSBgc21hbGxgIGlzIGFuXG4gKiAgYXJiaXRyYXJ5IHNpemUuXG4gKlxuICogIHNjc3M6XG4gKiAgICBAaW5jbHVkZSBoMTtcbiAqICAgIEBpbmNsdWRlIGgyO1xuICogICAgQGluY2x1ZGUgaDM7XG4gKiAgICBAaW5jbHVkZSBoNDtcbiAqICAgIEBpbmNsdWRlIGJvZHk7XG4gKiAgICBAaW5jbHVkZSBzbWFsbDtcbiAqL1xuJGJhc2U6IHB4VG9SZW0oMjApICFkZWZhdWx0O1xuJHNjYWxlOiAxLjQgIWRlZmF1bHQ7XG5AbWl4aW4gc3VwZXIgKCkge1xuICBAaW5jbHVkZSBoMTtcbiAgQGluY2x1ZGUgbXEgKCRicC1tZWRpdW0pIHtcbiAgICBmb250LXNpemU6IG1vZHVsYXJTY2FsZSgkYmFzZSwgNSwgJHNjYWxlKTtcbiAgICBsaW5lLWhlaWdodDogbXVsdGlwbGVBYm92ZShtb2R1bGFyU2NhbGUoJGJhc2UsIDUsICRzY2FsZSkpO1xuICB9XG59XG5AbWl4aW4gaDEgKCkge1xuICBmb250LXNpemU6IG1vZHVsYXJTY2FsZSgkYmFzZSwgNCwgJHNjYWxlKTtcbiAgbGluZS1oZWlnaHQ6IG11bHRpcGxlQWJvdmUobW9kdWxhclNjYWxlKCRiYXNlLCA0LCAkc2NhbGUpKTtcbn1cbkBtaXhpbiBoMiAoKSB7XG4gIGZvbnQtc2l6ZTogbW9kdWxhclNjYWxlKCRiYXNlLCAzLCAkc2NhbGUpO1xuICBsaW5lLWhlaWdodDogbXVsdGlwbGVBYm92ZShtb2R1bGFyU2NhbGUoJGJhc2UsIDMsICRzY2FsZSkpO1xufVxuQG1peGluIGgzICgpIHtcbiAgZm9udC1zaXplOiBtb2R1bGFyU2NhbGUoJGJhc2UsIDIsICRzY2FsZSk7XG4gIGxpbmUtaGVpZ2h0OiBtdWx0aXBsZUFib3ZlKG1vZHVsYXJTY2FsZSgkYmFzZSwgMiwgJHNjYWxlKSk7XG59XG5AbWl4aW4gaDQgKCkge1xuICBmb250LXNpemU6IG1vZHVsYXJTY2FsZSgkYmFzZSwgMS41LCAkc2NhbGUpO1xuICBsaW5lLWhlaWdodDogbXVsdGlwbGVBYm92ZShtb2R1bGFyU2NhbGUoJGJhc2UsIDEuNSwgJHNjYWxlKSk7XG59XG5AbWl4aW4gYm9keSAoKSB7XG4gIGZvbnQtc2l6ZTogJGJhc2U7XG4gIGxpbmUtaGVpZ2h0OiBtdWx0aXBsZUFib3ZlKCRiYXNlKTtcbn1cbkBtaXhpbiBzbWFsbCAoKSB7XG4gIGZvbnQtc2l6ZTogcHhUb1JlbSgxNCk7XG4gIGxpbmUtaGVpZ2h0OiBtdWx0aXBsZUFib3ZlKHB4VG9SZW0oMTQpKTtcbn1cbiIsImh0bWwge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuIiwiLy8gR2xvYmFsIEJvZHkgU3R5bGVzXG4vL1xuXG5ib2R5IHtcbiAgQGluY2x1ZGUgZm9udC1ib2R5O1xuICBAaW5jbHVkZSBib2R5O1xuICBmb250LXdlaWdodDogMzAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLWJvZHk7XG4gIGNvbG9yOiAkdGV4dC1ib2R5O1xufVxuIiwiLyoqKlxuICogVHlwb2dyYXBoeVxuICpcbiAqIERlZmF1bHQgdGV4dCBzdHlsZXMuXG4gKlxuICogaHRtbDpcbiAqICAgPGgxPkhlYWRpbmcgTGV2ZWwgMTwvaDE+XG4gKiAgIDxoMj5IZWFkaW5nIExldmVsIDI8L2gyPlxuICogICA8aDM+SGVhZGluZyBMZXZlbCAzPC9oMz5cbiAqICAgPGg0PkhlYWRpbmcgTGV2ZWwgNDwvaDQ+XG4gKiAgIDxwPlVuZGUgcXVvLCBtaW51cyBlYXF1ZSBlbGlnZW5kaSBjdW0gdGVtcG9yZSwgbnVsbGEsIGFjY3VzYW11cyBlc3QgbGFib3JlIHRlbmV0dXIgbW9kaSBldmVuaWV0IG9iY2FlY2F0aSB2b2x1cHRhcyBlaXVzIHZpdGFlIHZlcm8gZG9sb3JlbSBub2JpcyBjdWxwYSBuaWhpbC4gSXRhcXVlIHNhZXBlIHN1c2NpcGl0IG9kaXQgZnVnaXQgcXVpZGVtIGN1bHBhLjwvcD5cbiAqICAgPHA+QWNjdXNhbnRpdW0gcmVjdXNhbmRhZSwgZGlnbmlzc2ltb3MgcmVydW0gcXVhZXJhdCB2b2x1cHRhdGVtIHF1aXMgaXRhcXVlIGRlbGVuaXRpIHNlcXVpIGF1dGVtIGV4cGxpY2FibyBkb2xvcmUgZGVsZWN0dXMsIGRvbG9yZW1xdWUgZW9zLiBBY2N1c2FudGl1bTxzdXA+c3VwPC9zdXA+IHJlY3VzYW5kYWU8c3ViPnN1Yjwvc3ViPiBlaXVzLCBkZWJpdGlzIHZvbHVwdGF0ZXMgYWRpcGlzY2kgYXNwZXJuYXR1ciByZW0gdm9sdXB0YXR1bSwgZGVsZWN0dXMsIHRlbXBvcmUgYWNjdXNhbnRpdW0gZG9sb3J1bSBjdW1xdWUgZXJyb3IuPC9wPlxuICovXG5cbmgxLC5oMSB7XG4gIEBpbmNsdWRlIGgxO1xuICBAaW5jbHVkZSBmb250LWhlYWRsaW5lO1xuICBtYXJnaW46IDA7XG59XG5oMiwuaDIge1xuICBAaW5jbHVkZSBoMjtcbiAgQGluY2x1ZGUgZm9udC1oZWFkbGluZTtcbiAgbWFyZ2luOiAwO1xufVxuaDMsLmgzIHtcbiAgQGluY2x1ZGUgaDM7XG4gIEBpbmNsdWRlIGZvbnQtaGVhZGxpbmU7XG4gIG1hcmdpbjogMDtcbn1cbmg0LC5oNCB7XG4gIEBpbmNsdWRlIGg0O1xuICBAaW5jbHVkZSBmb250LWhlYWRsaW5lO1xuICBtYXJnaW46IDA7XG59XG5oNSwuaDUsaDYsLmg2IHtcbiAgQGluY2x1ZGUgYm9keTtcbiAgQGluY2x1ZGUgZm9udC1oZWFkbGluZTtcbiAgbWFyZ2luOiAkdnIgMCAwO1xufVxucCB7XG4gIG1hcmdpbjogJHZyIGF1dG87XG59XG5zdHJvbmcge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuZW0ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4iLCIvKioqXG4gKiBMaW5rc1xuICpcbiAqIGh0bWw6XG4gKiAgIDxhIGhyZWY9XCIjXCI+U2ltcGxlIERlZmF1bHQgTGluazwvYT5cbiAqL1xuXG4kbGluay1jb2xvcjogJGFjY2VudC1wcmltYXJ5O1xuJGhvdmVyLWNvbG9yOiAkYWNjZW50LXByaW1hcnktbGlnaHQ7IC8vIHRlbXA/XG5cbmEge1xuICBjb2xvcjogJGxpbmstY29sb3I7XG4gIHRyYW5zaXRpb246IGNvbG9yICR0cmFuc2l0aW9uLXRpbWU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRob3Zlci1jb2xvcjtcbiAgfVxufVxuIiwiLy8gdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIHRpbWluZ1xuJHRyYW5zaXRpb24tdGltZTogLjE1cztcblxuLy8gY3VzdG9tIGVhc2luZ3NcbiRib3VuY2Utb3V0OiBjdWJpYy1iZXppZXIoLjE5LC4wMiwuNTMsMS41MSk7XG4kYm91bmNlLW91dC1mYXI6IGN1YmljLWJlemllciguMTksLjAyLC41MywyKTtcbiRib3VuY2UtaW4tb3V0OiBjdWJpYy1iZXppZXIoLjQ5LC0wLjI0LC41MSwxLjMzKTtcbiRib3VuY2UtaW4tb3V0LWZhcjogY3ViaWMtYmV6aWVyKC40NSwtMC43NywuNTMsMS42Myk7XG4kZWFzZS1zb2Z0OiBjdWJpYy1iZXppZXIoLjM2LC4wMSwuMzIsLjk5KTtcbiRlYXNlLW91dC1iYWNrOiBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSk7XG4iLCIvKipcbiAqICBJbWFnZSBSZXNldHNcbiAqL1xuaW1nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbn1cbiIsIi8qKlxuICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKi9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuW3NyYyQ9J3N2ZyddIHtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cbiIsIi8qKipcbiAqIEhvcml6b250YWwgUnVsZVxuICpcbiAqIGh0bWw6XG4gKiAgIDxocj5cbiAqL1xuaHIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogJHZyICogMyAkd3IgKiAzO1xuICBib3JkZXI6IG5vbmU7XG4gIGhlaWdodDogMXB4O1xuICBiYWNrZ3JvdW5kOiAkYm9yZGVyLWh0bWw7XG5cbiAgQGluY2x1ZGUgbXEgKCRicC1tZWRpdW0pIHtcbiAgICBtYXJnaW46ICR2ciAqIDMgJHdyICogNjtcbiAgfVxufVxuIiwiLyoqKlxuICogIExpc3RzXG4gKlxuICogIGh0bWw6XG4gKiAgICA8dWw+XG4gKiAgICAgIDxsaT5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldDwvbGk+XG4gKiAgICAgIDxsaT5NaW5pbWEgcmVjdXNhbmRhZSBhZGlwaXNjaSBxdWlkZW08L2xpPlxuICogICAgICA8bGk+QW1ldCBldW0gbm9uIGFuaW1pIHNvbHV0YTwvbGk+XG4gKiAgICAgIDxsaT5TYWVwZSBjb21tb2RpIG5lc2NpdW50IHF1YWVyYXQgcXVhZSBtaW5pbWE8L2xpPlxuICogICAgPC91bD5cbiAqICAgIDxvbD5cbiAqICAgICAgPGxpPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0PC9saT5cbiAqICAgICAgPGxpPk1pbmltYSByZWN1c2FuZGFlIGFkaXBpc2NpIHF1aWRlbTwvbGk+XG4gKiAgICAgIDxsaT5BbWV0IGV1bSBub24gYW5pbWkgc29sdXRhPC9saT5cbiAqICAgICAgPGxpPlNhZXBlIGNvbW1vZGkgbmVzY2l1bnQgcXVhZXJhdCBxdWFlIG1pbmltYTwvbGk+XG4gKiAgICA8L29sPlxuICovXG51bCwgb2wge1xuICBtYXJnaW46ICR2ciAqIDIgMDtcbiAgcGFkZGluZy1sZWZ0OiAkd3IgKiAyO1xufVxubGkge1xuICBtYXJnaW46ICR2ciAwO1xufVxuIiwiLyoqKlxuICogQmxvY2txdW90ZVxuICpcbiAqIEluc2V0IHdpdGggYSBsZWZ0IGJvcmRlci5cbiAqXG4gKiBodG1sOlxuICogICA8YmxvY2txdW90ZT5cbiAqICAgICA8cD5cIlNvbWUgY29udGVudCB0aGF0J3MgYSBxdW90ZS5cIjwvcD5cbiAqICAgPC9ibG9ja3F1b3RlPlxuICovXG5ibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAkdnIgMDtcbiAgcGFkZGluZzogMCAwIDAgJHZyICogLjc1O1xuICBib3JkZXItbGVmdDogJHZyICogLjI1IHNvbGlkICRib3JkZXItaHRtbDtcbn1cbiIsIi8qKipcbiAqIFRhYmxlXG4gKlxuICogaHRtbDpcbiAqICAgPHRhYmxlPlxuICogICAgIDx0cj5cbiAqICAgICAgIDx0aD5Mb3JlbTwvdGg+XG4gKiAgICAgICA8dGQ+SXBzdW08L3RkPlxuICogICAgICAgPHRkPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LiBFc3NlXG4gKiAgICAgICAgICBwZXJzcGljaWF0aXMgdml0YWUgc3VudCwgbWFnbmFtIGJsYW5kaXRpaXMgdW5kZSB2ZWxpdCBxdWlzIHBlcmZlcmVuZGlzXG4gKiAgICAgICAgICBpdXJlIHV0IGV4Y2VwdHVyaSB0ZW1wb3JhIGVvcyBhdXRlbSBhY2N1c2FtdXMgYW1ldCBldCwgbm9uPyBEaXN0aW5jdGlvLFxuICogICAgICAgICAgZWFxdWUuPC90ZD5cbiAqICAgICA8L3RyPlxuICogICAgIDx0cj5cbiAqICAgICAgIDx0aD5TaXQ8L3RoPlxuICogICAgICAgPHRkPkFtZXQ8L3RkPlxuICogICAgICAgPHRkPkxvcmVtPC90ZD5cbiAqICAgICA8L3RyPlxuICogICAgIDx0cj5cbiAqICAgICAgIDx0aD5JcHN1bTwvdGg+XG4gKiAgICAgICA8dGQ+RG9sb3I8L3RkPlxuICogICAgICAgPHRkPlNpdDwvdGQ+XG4gKiAgICAgPC90cj5cbiAqICAgPC90YWJsZT5cbiAqL1xudGFibGUge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG50ciB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkYm9yZGVyLWh0bWw7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWh0bWw7XG59XG50aCx0ZCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmc6ICR2ciAvIDIgJHdyO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXG4gIEBpbmNsdWRlIG1xLWx0ICgkYnAtbWVkaXVtKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbiIsIi8qKipcbiAqICBDb2RlXG4gKlxuICogIGA8Y29kZT5gIGVsZW1lbnRzLiBVc2VzIGAkZm9udC1tb25vYC5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxjb2RlPnRoaXMuaXNfc29tZShcImNvZGVcIik8L2NvZGU+XG4gKi9cbmNvZGUge1xuICBAaW5jbHVkZSBmb250LW1vbm87XG59XG4iLCIvKioqXG4gKiBJbnB1dFxuICpcbiAqIFN0YW5kYXJkIGlucHV0IGVsZW1lbnQuXG4gKlxuICogaHRtbDpcbiAqICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCI+XG4gKi9cbmlucHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwICR3ciAvIDI7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWlucHV0O1xuICBAaW5jbHVkZSBib2R5O1xuICBAaW5jbHVkZSBmb250LW1vbm87XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYWNjZW50LXByaW1hcnk7XG4gIH1cbn1cbiIsIi8qKipcbiAqICBGaWxlIFBhdGhcbiAqXG4gKiAgTGlnaHQgdGV4dCBzaG93aW5nIHdoZXJlIHRvIGZpbmQgdGhlIGVsZW1lbnQgYmVpbmcgZGVzY3JpYmVkLlxuICpcbiAqICBodG1sOlxuICogICAgPHAgY2xhc3M9XCJmaWxlLXBhdGhcIj4uL2Rldi9zY3NzL3N1cGVyL19hd2Vzb21lLWZpbGUuc2NzczwvcD5cbiAqL1xuLmZpbGUtcGF0aCB7XG4gIEBpbmNsdWRlIHNtYWxsO1xuICBAaW5jbHVkZSBmb250LW1vbm87XG4gIG1hcmdpbjogMDtcbiAgY29sb3I6ICR0ZXh0LXN1YnRsZTtcbn1cbiIsIi8qKipcbiAqICBDb2xvciBTd2F0Y2hcbiAqXG4gKiAgSnVzdCBhIGJpZyBibG9jayBvZiBjb2xvci5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2hcIj48L2Rpdj5cbiAqXG4gKiAgQGRlZmF1bHQgLnN3YXRjaC0tbGlnaHRcbiAqL1xuLnN3YXRjaCB7XG4gIG1pbi1oZWlnaHQ6ICR2ciAqIDg7XG4gIGJhY2tncm91bmQ6ICRhY2NlbnQtcHJpbWFyeTtcbn1cbiIsIi8qKipcbiAqICBGb250IFNhbXBsZVxuICpcbiAqICBTaG93cyB0aGUgZmlyc3QgZm9udCBmb3VuZCBpbiB0aGUgZm9udCBzdGFjayBvZiB2YXJpYWJsZXMgaW4gYSBmaWxlIG5hbWVkIGZvbnRzLnNjc3MuXG4gKlxuICogIGh0bWw6XG4gKiAgICA8ZGl2IGNsYXNzPVwiZm9udC1zYW1wbGVcIj5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNhbXBsZV9fdmFyLW5hbWVcIj4kbXktZm9udDwvc3Bhbj5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNhbXBsZV9fdmFsdWVcIiBzdHlsZT1cImZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJywgc2VyaWY7XCI+XG4gKiAgICAgICAgVGltZXMgTmV3IFJvbWFuXG4gKiAgICAgIDwvc3Bhbj5cbiAqICAgIDwvZGl2PlxuICovXG4uZm9udC1zYW1wbGUge1xuICBtYXJnaW46ICR2ciAqIDIgYXV0bztcbn1cbi5mb250LXNhbXBsZV9fdmFyLW5hbWUge1xuICBAaW5jbHVkZSBmb250LW1vbm87XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmZvbnQtc2FtcGxlX192YWx1ZSB7XG4gIEBpbmNsdWRlIGgyO1xufVxuIiwiLyoqKlxuICogIEJ1dHRvblxuICpcbiAqICBCYXNpYyBidXR0b24sIGFuZCBpdHMgdmFyaWF0aW9ucy5cbiAqXG4gKiAgQG1vZGlmaWVyIC5idXR0b24tLXNtYWxsXG4gKiAgQG1vZGlmaWVyIC5idXR0b24tLWljb24tcGhvbmVcbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxhIGNsYXNzPVwiYnV0dG9uXCI+Q2xpY2sgSGVyZSwgRHVtbXk8L2E+XG4gKlxuICogIHRlbXBsYXRlOiBodG1sXG4gKi9cbi5idXR0b24ge1xuICBAaW5jbHVkZSBib2R5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogJHZyIC8gMiAkd3I7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRhY2NlbnQtcHJpbWFyeTtcbiAgYm9yZGVyLXJhZGl1czogJHZyIC8gNDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgLjNzO1xuICBjb2xvcjogJGFjY2VudC1wcmltYXJ5O1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZC1ib2R5O1xuXG4gICY6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGFjY2VudC1wcmltYXJ5LWxpZ2h0O1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAkdnIgcmdiYSgkYWNjZW50LXByaW1hcnksIC4yNSk7XG4gICAgY29sb3I6ICRhY2NlbnQtcHJpbWFyeS1saWdodDtcbiAgfVxuXG4gIEBlYWNoICRpY29uTmFtZSBpbiAkaWNvbnMge1xuICAgICYtLWljb24tI3skaWNvbk5hbWV9IHtcbiAgICAgIEBpbmNsdWRlIGljb24oJGljb25OYW1lKTtcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYygxLjVlbSArICN7JHdyfSk7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiAkd3I7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmJ1dHRvbi0tc21hbGwge1xuICBAaW5jbHVkZSBzbWFsbDtcbiAgcGFkZGluZzogJHZyIC8gNCAkd3IgLyAyO1xuICAmOjpiZWZvcmUge1xuICAgIGxlZnQ6ICR3ciAvIDI7XG4gIH1cbn1cbiIsIi8qKipcbiAqIENvcHlhYmxlIGVsZW1lbnRcbiAqXG4gKiBFbGVtZW50IHRoYXQsIHdoZW4gY2xpY2tlZCwgY29waWVzIGEgc3RyaW5nIHRvIHRoZSB1c2VyJ3MgY2xpcGJvYXJkLlxuICpcbiAqIFdoZW4gaG92ZXJlZCwgYW4gaWNvbiBhcHBlYXJzLiBJdCBqdW1wcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyAodGh1cyBnZXR0aW5nIHRoZSBjb3B5KS5cbiAqXG4gKiBodG1sOlxuICogICA8c3BhbiBkYXRhLWNvcHk9XCJDb3B5IE1lIVwiPkNsaWNrIHRvIFwiQ29weSBNZVwiPC9zcGFuPlxuICovXG5bZGF0YS1jb3B5XSB7XG4gIEBpbmNsdWRlIGljb24oJ2NvcHknKTtcbiAgY3Vyc29yOiBjb3B5O1xuXG4gICY6OmJlZm9yZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLS4yNWVtKTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICR0cmFuc2l0aW9uLXRpbWUgbGluZWFyLCB0cmFuc2Zvcm0gJHRyYW5zaXRpb24tdGltZSBlYXNlLWluO1xuICAgIGNvbG9yOiAkYWNjZW50LXByaW1hcnk7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMWVtKTtcbiAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcbiAgICB9XG4gIH1cbiAgJjphY3RpdmUge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE1JSk7XG4gICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwcztcbiAgICB9XG4gIH1cbn1cbiIsIi8qKipcbiAqIEF0dHJpYnV0ZVxuICpcbiAqIEEgcGFyYW1ldGVyLCBtZXRob2QsIG9yIG90aGVyIGFycmF5LWxpa2UgYml0IG9mIGluZm8gZm9yIGEgY29tcG9uZW50LlxuICpcbiAqIEFzc3VtZXMgaXQncyBwYXJ0IG9mIGFuIFtBdHRyaWJ1dGUgTGlzdF0oIy9tb2xlY3VsZXMvYXR0cmlidXRlLWxpc3QpLlxuICpcbiAqIGh0bWw6XG4gKiAgIDxkdCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190ZXJtXCI+XG4gKiAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGVfX3R5cGVcIj5ET01FbGVtZW50PC9zcGFuPlxuICogICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlX19uYW1lXCI+bWFrZUlucHV0KCk8L3NwYW4+XG4gKiAgIDwvZHQ+XG4gKiAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGVfX2Rlc2NyaXB0aW9uXCI+XG4gKiAgICAgICA8cD5pbnRlcm5hbCBmdW5jdGlvbiB0byBtYWtlIHRoZSBpbnB1dCBmcm9tIHdoaWNoIHRoZSBzdHJpbmcgd2lsbCBiZSBjb3BpZWQuPC9wPlxuICogICAgIDwvZGl2PlxuICogICA8L2RkPlxuICpcbiAqIHdyYXA6IGRsLmF0dHJpYnV0ZS1saXN0XG4gKi9cbi5hdHRyaWJ1dGUge1xuICAmX190eXBlIHtcbiAgICBAaW5jbHVkZSBmb250LW1vbm87XG4gICAgQGluY2x1ZGUgc21hbGw7XG4gICAgbWFyZ2luLXJpZ2h0OiAkd3I7XG4gICAgY29sb3I6ICR0ZXh0LXN1YnRsZTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgJl9fbmFtZSB7XG4gICAgQGluY2x1ZGUgZm9udC1tb25vO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG4gICZfX2Rlc2NyaXB0aW9uIHtcbiAgICA+IDpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqKlxuICogIE1haW4gTmF2XG4gKlxuICogIGh0bWw6XG4gKiAgICA8bmF2IGNsYXNzPVwibmF2LW1haW5cIj5cbiAqICAgICAgPHVsIGNsYXNzPVwibmF2LW1haW5fX2xpc3RcIj5cbiAqICAgICAgICA8bGkgY2xhc3M9XCJuYXYtbWFpbl9faXRlbVwiPjxhIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIiBocmVmPVwiIy9jb2xvcnNcIj5Db2xvcnM8L2E+PC9saT5cbiAqICAgICAgICA8bGkgY2xhc3M9XCJuYXYtbWFpbl9faXRlbVwiPjxhIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIiBocmVmPVwiIy9mb250c1wiPkZvbnRzPC9hPjwvbGk+XG4gKiAgICAgICAgPGxpIGNsYXNzPVwibmF2LW1haW5fX2l0ZW1cIj5cbiAqICAgICAgICAgIDxhIGhyZWY9XCIjL3F1YXJrc1wiIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIj5RdWFya3M8L2E+XG4gKiAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYtbWFpbl9fc3VibmF2XCI+XG4gKiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1tYWluX19pdGVtXCI+XG4gKiAgICAgICAgICAgICAgPGEgaHJlZj1cIiMvcXVhcmtzL2Jsb2NrcXVvdGVcIiBjbGFzcz1cIm5hdi1tYWluX19saW5rXCI+QmxvY2txdW90ZTwvYT5cbiAqICAgICAgICAgICAgPC9saT5cbiAqICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LW1haW5fX2l0ZW1cIj5cbiAqICAgICAgICAgICAgICA8YSBocmVmPVwiIy9xdWFya3MvY29kZVwiIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIj5Db2RlPC9hPlxuICogICAgICAgICAgICA8L2xpPlxuICogICAgICAgICAgPC91bD5cbiAqICAgICAgICA8L2xpPlxuICogICAgICAgIDxsaSBjbGFzcz1cIm5hdi1tYWluX19pdGVtXCI+XG4gKiAgICAgICAgICA8YSBocmVmPVwiIy9hdG9tc1wiIGNsYXNzPVwibmF2LW1haW5fX2xpbmtcIj5BdG9tczwvYT5cbiAqICAgICAgICA8L2xpPlxuICogICAgICA8L3VsPlxuICogICAgPC9uYXY+XG4gKi9cbi5uYXYtbWFpbiB7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6ICR2ciAqIDIgJHdyO1xuICBvdmVyZmxvdzogYXV0bztcbiAgb3ZlcmZsb3c6IC1tb3otc2Nyb2xsYmFycy1ub25lO1xuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6ICR3ciAqIC4yNTtcbiAgfVxuXG4gICZfX2xpc3Qge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuICAgIC8vID4gLm5hdi1tYWluX19pdGVtID4gLm5hdi1tYWluX19saW5rIHtcbiAgICAvLyAgIEBlYWNoICRpIGluICRpY29ucyB7XG4gICAgLy8gICAgICYtLSN7JGl9IHtcbiAgICAvLyAgICAgICBAaW5jbHVkZSBpY29uKCRpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxuICAmX19pdGVtIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgJl9fc3VibmF2IHtcbiAgICBAaW5jbHVkZSBzbWFsbDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIDUge1xuICAgICRuZXN0LXNlbGVjdG9yOiAnJiAnO1xuICAgICAgQGlmICgkaSA+IDEpIHtcbiAgICAgICAgQGZvciAkaiBmcm9tIDIgdGhyb3VnaCAkaSB7XG4gICAgICAgICAgJG5lc3Qtc2VsZWN0b3I6ICRuZXN0LXNlbGVjdG9yICcmICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICN7JG5lc3Qtc2VsZWN0b3J9IC5uYXYtbWFpbl9fbGluayB7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAkd3IgKiAoJGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAvLyAmOjpiZWZvcmUge1xuICAgIC8vICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vICAgbGVmdDogMDtcbiAgICAvLyAgIG1hcmdpbi1yaWdodDogJHdyIC8gMjtcbiAgICAvLyAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgLy8gfVxuICB9XG59XG4iLCIvKioqXG4gKiBCdXR0b24gR3JvdXBcbiAqXG4gKiBHcm91cCBvZiBidXR0b25zIHdpdGggc2ltaWxhciBmdW5jdGlvbnMuXG4gKlxuICogVXNlcyBzZXh5LWFzcyBbbW9kIHF1ZXJpZXNdKCMvdXRpbGl0aWVzL21peGlucy9tb2QtcXVlcnkpIHRvIHNpemUgYnV0dG9ucyBiYXNlZFxuICogb24gd2hldGhlciB0aGUgbnVtYmVyIGlzIGRpdmlzaWJsZSBieSAyIG9yIDMuXG4gKlxuICogaHRtbDpcbiAqICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMTwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMjwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gMzwvYnV0dG9uPlxuICogICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLWdyb3VwX19idXR0b25cIj5CdXR0b24gNDwvYnV0dG9uPlxuICogICA8L2Rpdj5cbiAqXG4gKiAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDE8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDI8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDM8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDQ8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDU8L2J1dHRvbj5cbiAqICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1ncm91cF9fYnV0dG9uXCI+QnV0dG9uIDY8L2J1dHRvbj5cbiAqICAgPC9kaXY+XG4gKlxuICogICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAxPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAyPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiAzPC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiA0PC9idXR0b24+XG4gKiAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tZ3JvdXBfX2J1dHRvblwiPkJ1dHRvbiA1PC9idXR0b24+XG4gKiAgIDwvZGl2PlxuICovXG4uYnV0dG9uLWdyb3VwIHtcbiAgQGluY2x1ZGUgY2xlYXJGaXg7XG4gIG1hcmdpbjogJHZyIDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgJl9fYnV0dG9uIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICBmbGV4LXNocmluazogMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHZyIC8gNDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdnIgLyA0O1xuICAgICAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHZyIC8gNDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkdnIgLyA0O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIG1vZFF1ZXJ5KDIsMCwnLmJ1dHRvbi1ncm91cF9fYnV0dG9uJykge1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cbiAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR2ciAvIDQ7XG4gICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgICAgIH1cbiAgICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgJjpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR2ciAvIDQ7XG4gICAgICB9XG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpbmNsdWRlIG1vZFF1ZXJ5KDMsMCwnLmJ1dHRvbi1ncm91cF9fYnV0dG9uJykge1xuICAgICAgd2lkdGg6IDMzLjMzMzMzJTtcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cbiAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICAgICAgfVxuICAgICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHZyIC8gNDtcbiAgICAgICAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICAgICAgfVxuICAgICAgLy8gaW4gY2FzZSBkaXZpc2libGUgYnkgYm90aCAyIGFuZCAzXG4gICAgICAmOm50aC1jaGlsZCgybikge1xuICAgICAgICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xuICAgICAgfVxuICAgICAgJjpudGgtY2hpbGQoM24pLCAmOm50aC1jaGlsZCgzbi0xKSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgJjpudGgtbGFzdC1jaGlsZCgzKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR2ciAvIDQ7XG4gICAgICB9XG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqKlxuICogQ29sb3IgU2FtcGxlXG4gKlxuICogQSBzd2F0Y2ggYW5kIHZhcmlhYmxlIG5hbWUgKyBjb2xvciB2YWx1ZSBjb21ibyBtb2xlY3VsZS4gSlMgYWxzbyBtYWtlcyB0aGVcbiAqIHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlIGNvcHlhYmxlIHdpdGggYSBjbGljay5cbiAqXG4gKiBAZGVmYXVsdCAuY29sb3ItLWxpZ2h0XG4gKiBAbW9kaWZpZXIgLmNvbG9yLS1kYXJrIC0gd2hlbiBhIGNvbG9yJ3MgbHVtaW5vc2l0eSBpcyA8IDU1JS5cbiAqXG4gKiBodG1sOlxuICogICA8ZGl2IGNsYXNzPVwiY29sb3JcIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwic3dhdGNoXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjEzYjBjO1wiPjwvZGl2PlxuICogICAgIDxkaXYgY2xhc3M9XCJjb2xvcl9fZGV0YWlsc1wiPlxuICogICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFyLW5hbWUganMtY29weWFibGVcIiBkYXRhLWNvcHk9XCIkbXktY29sb3JcIj4kbXktY29sb3I8L3NwYW4+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yX192YWx1ZSBqcy1jb3B5YWJsZVwiIGRhdGEtY29weT1cIiNGMTNCMENcIj4jRjEzQjBDPC9zcGFuPlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqL1xuLmNvbG9yIHtcbiAgLy8gc2l6aW5nIGhhbmRsZWQgYnkgcGFsZXR0ZSBvcmdhbmlzbVxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLnN3YXRjaCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgJl9fZGV0YWlscyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHBhZGRpbmc6ICR2ciAkd3I7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH1cbiAgJl9fdmFyLW5hbWUge1xuICAgIEBpbmNsdWRlIGZvbnQtbW9ubztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAmX192YWx1ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmLS1kYXJrIHtcbiAgICBjb2xvcjogJHRleHQtaW52ZXJ0ZWQ7XG4gICAgW2RhdGEtY29weV06OmJlZm9yZSB7XG4gICAgICBjb2xvcjogJHRleHQtaW52ZXJ0ZWQ7XG4gICAgfVxuICB9XG59XG4iLCIuaGxqcyB7XG4gICYtY29tbWVudCB7XG4gICAgY29sb3I6ICRjb2RlLWNvbW1lbnQ7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gICYtcXVvdGUge1xuICAgIGNvbG9yOiAkY29kZS1xdW90ZTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgJi1rZXl3b3JkIHtcbiAgICBjb2xvcjogJGNvZGUta2V5d29yZDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICAmLXNlbGVjdG9yLXRhZyB7XG4gICAgY29sb3I6ICRjb2RlLXNlbGVjdG9yLXRhZztcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICAmLXN1YnN0IHtcbiAgICBjb2xvcjogJGNvZGUtc3Vic3Q7XG4gIH1cbiAgJi1udW1iZXIge1xuICAgIGNvbG9yOiAkY29kZS1udW1iZXI7XG4gIH1cbiAgJi1saXRlcmFsIHtcbiAgICBjb2xvcjogJGNvZGUtbGl0ZXJhbDtcbiAgfVxuICAmLXZhcmlhYmxlIHtcbiAgICBjb2xvcjogJGNvZGUtdmFyaWFibGU7XG4gIH1cbiAgJi10ZW1wbGF0ZS12YXJpYWJsZSB7XG4gICAgY29sb3I6ICRjb2RlLXRlbXBsYXRlLXZhcmlhYmxlO1xuICB9XG4gICYtdGFnIC5obGpzLWF0dHIge1xuICAgIGNvbG9yOiAkY29kZS10YWctYXR0cjtcbiAgfVxuICAmLXN0cmluZyB7XG4gICAgY29sb3I6ICRjb2RlLXN0cmluZztcbiAgfVxuICAmLWRvY3RhZyB7XG4gICAgY29sb3I6ICRjb2RlLWRvY3RhZztcbiAgfVxuICAmLXRpdGxlIHtcbiAgICBjb2xvcjogJGNvZGUtdGl0bGU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbiAgJi1zZWN0aW9uIHtcbiAgICBjb2xvcjogJGNvZGUtc2VjdGlvbjtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICAmLXNlbGVjdG9yLWlkIHtcbiAgICBjb2xvcjogJGNvZGUtc2VsZWN0b3ItaWQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbiAgJi10eXBlIHtcbiAgICBjb2xvcjogJGNvZGUtdHlwZTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuICAmLWNsYXNzIC5obGpzLXRpdGxlIHtcbiAgICBjb2xvcjogJGNvZGUtY2xhc3MtdGl0bGU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbiAgJi10YWcge1xuICAgIGNvbG9yOiAkY29kZS10YWc7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuICAmLW5hbWUge1xuICAgIGNvbG9yOiAkY29kZS1uYW1lO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIH1cbiAgJi1hdHRyaWJ1dGUge1xuICAgIGNvbG9yOiAkY29kZS1hdHRyaWJ1dGU7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuICAmLXJlZ2V4cCB7XG4gICAgY29sb3I6ICRjb2RlLXJlZ2V4cDtcbiAgfVxuICAmLWxpbmsge1xuICAgIGNvbG9yOiAkY29kZS1saW5rO1xuICB9XG4gICYtc3ltYm9sIHtcbiAgICBjb2xvcjogJGNvZGUtc3ltYm9sO1xuICB9XG4gICYtYnVsbGV0IHtcbiAgICBjb2xvcjogJGNvZGUtYnVsbGV0O1xuICB9XG4gICYtYnVpbHRfaW4ge1xuICAgIGNvbG9yOiAkY29kZS1idWlsdF9pbjtcbiAgfVxuICAmLWJ1aWx0aW4tbmFtZSB7XG4gICAgY29sb3I6ICRjb2RlLWJ1aWx0aW4tbmFtZTtcbiAgfVxuICAmLW1ldGEge1xuICAgIGNvbG9yOiAkY29kZS1tZXRhO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG4gICYtZGVsZXRpb24ge1xuICAgIGJhY2tncm91bmQ6ICNmZGQ7XG4gIH1cbiAgJi1hZGRpdGlvbiB7XG4gICAgYmFja2dyb3VuZDogI2RmZDtcbiAgfVxuICAmLWVtcGhhc2lzIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgJi1zdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG59XG5cbi8qKipcbiAqIENvZGUgQmxvY2tcbiAqXG4gKiBBICh1c3VhbGx5KSBjb2xsYXBzYWJsZSBibG9jayBvZiBjb2RlLiBDb2xvcnMgYXJlIGZyb20gYSBbdW5pcXVlIHBhbGV0dGVdKCMvbW9sZWN1bGVzL2NvZGUtYmxvY2svY29kZS1jb2xvcnMpLlxuICogVG8gc2VlIGhvdyB0aGUgY29sbGFwc2FibGUgcGFydCB3b3JrcywgY2hlY2sgaXQgb3V0IGluIGl0cyBbSlMgc2VjdGlvbl0oIy9hcHAvY29sbGFwc2FibGUpLlxuICpcbiAqIGh0bWw6XG4gKiAgIDxkaXYgY2xhc3M9XCJjb2RlLWJsb2NrIGpzLWNvbGxhcHNhYmxlIGlzLW9wZW5cIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29kZS1ibG9ja19faGVhZGVyIGNvbGxhcHNhYmxlX190b2dnbGUganMtY29sbGFwc2FibGVfX3RvZ2dsZVwiPlxuICogICAgICAgPGg2PkhUTUw8L2g2PlxuICogICAgIDwvZGl2PlxuICogICAgIDxwcmUgY2xhc3M9XCJjb2RlLWJsb2NrX19wcmUgY29sbGFwc2FibGVfX2NvbnRlbnQganMtY29sbGFwc2FibGVfX2NvbnRlbnRcIj48Y29kZSBjbGFzcz1cImxhbmctaHRtbFwiPjxzcGFuIGNsYXNzPVwiaGxqcy10YWdcIj4mbHQ7PHNwYW4gY2xhc3M9XCJobGpzLW5hbWVcIj5oZWFkZXI8L3NwYW4+IDxzcGFuIGNsYXNzPVwiaGxqcy1hdHRyXCI+Y2xhc3M8L3NwYW4+PTxzcGFuIGNsYXNzPVwiaGxqcy1zdHJpbmdcIj5cImhlYWRlci1tYWluXCI8L3NwYW4+Jmd0Ozwvc3Bhbj5cbiAqICAgICA8c3BhbiBjbGFzcz1cImhsanMtdGFnXCI+Jmx0OzxzcGFuIGNsYXNzPVwiaGxqcy1uYW1lXCI+aDE8L3NwYW4+IDxzcGFuIGNsYXNzPVwiaGxqcy1hdHRyXCI+Y2xhc3M8L3NwYW4+PTxzcGFuIGNsYXNzPVwiaGxqcy1zdHJpbmdcIj5cImhlYWRlci1tYWluX190aXRsZVwiPC9zcGFuPiZndDs8L3NwYW4+QXV0b2d1aWRlPHNwYW4gY2xhc3M9XCJobGpzLXRhZ1wiPiZsdDsvPHNwYW4gY2xhc3M9XCJobGpzLW5hbWVcIj5oMTwvc3Bhbj4mZ3Q7PC9zcGFuPlxuICogICA8c3BhbiBjbGFzcz1cImhsanMtdGFnXCI+Jmx0Oy88c3BhbiBjbGFzcz1cImhsanMtbmFtZVwiPmhlYWRlcjwvc3Bhbj4mZ3Q7PC9zcGFuPjwvY29kZT48L3ByZT5cbiAqICAgPC9kaXY+XG4gKi9cbi5jb2RlLWJsb2NrIHtcbiAgYm9yZGVyOiAkdnIgLyA0IHNvbGlkICRib3JkZXItY29kZTtcbiAgJl9faGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwICR3cjtcbiAgICBtYXJnaW46IDA7XG4gICAgaDYge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuICAmX19wcmUge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLWNvZGU7XG4gICAgY29sb3I6ICR0ZXh0LWNvZGU7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgICA+IGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkdnIgJHdyO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqKlxuICogQXR0cmlidXRlIExpc3RcbiAqXG4gKiBBIG5lc3RhYmxlIGxpc3Qgb2YgYXR0cmlidXRlcy5cbiAqXG4gKiBodG1sOlxuICogICA8ZGwgY2xhc3M9XCJhdHRyaWJ1dGUtbGlzdCBhdHRyaWJ1dGUtbGlzdC0tbWV0aG9kc1wiPlxuICogICAgIDxoNiBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190aXRsZVwiPk1ldGhvZHM8L2g2PlxuICogICAgIDxkdCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190ZXJtXCI+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fdHlwZVwiPnZvaWQ8L3NwYW4+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fbmFtZVwiPnRvZ2dsZUdyaWQoKTwvc3Bhbj5cbiAqICAgICA8L2R0PlxuICogICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZV9fZGVzY3JpcHRpb25cIj5cbiAqICAgICAgICAgPHA+YWRkcy9yZW1vdmVzIHRoZSAnc2hvdy1ncmlkJyBjbGFzcyB0byB0aGUgIGVsZW1lbnQgc28gd2UgY2FuIHNob3cgYSBncmlkIG92ZXJsYXk8L3A+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2RkPlxuICogICAgIDxkdCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190ZXJtXCI+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fdHlwZVwiPnZvaWQ8L3NwYW4+XG4gKiAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZV9fbmFtZVwiPnNldFdpZHRoKHdpZHRoKTwvc3Bhbj5cbiAqICAgICA8L2R0PlxuICogICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZV9fZGVzY3JpcHRpb25cIj5cbiAqICAgICAgICAgPHA+c2V0cyB0aGUgd2lkdGggb2YgdGhlIGlmcmFtZSwgdXNlZnVsIGZvciBzaG93aW5nIG1lZGlhIHF1ZXJpZXM8L3A+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICAgIDxkbCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0IGF0dHJpYnV0ZS1saXN0LS1wYXJhbWV0ZXJzXCI+XG4gKiAgICAgICAgIDxoNiBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X190aXRsZVwiPlBhcmFtZXRlcnM8L2g2PlxuICogICAgICAgICA8ZHQgY2xhc3M9XCJhdHRyaWJ1dGUtbGlzdF9fdGVybVwiPlxuICogICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlX190eXBlXCI+aW50PC9zcGFuPlxuICogICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlX19uYW1lXCI+d2lkdGg8L3NwYW4+XG4gKiAgICAgICAgIDwvZHQ+XG4gKiAgICAgICAgIDxkZCBjbGFzcz1cImF0dHJpYnV0ZS1saXN0X19kZXNjcmlwdGlvblwiPlxuICogICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGVfX2Rlc2NyaXB0aW9uXCI+XG4gKiAgICAgICAgICAgICA8cD53aWR0aCBpbiBwaXhlbHMuIFJlc2V0cyB0byBkZWZhdWx0IHNpemUgaWYgZmFsc3k8L3A+XG4gKiAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgIDwvZGQ+XG4gKiAgICAgICA8L2RsPlxuICogICAgIDwvZGQ+XG4gKiAgIDwvZGw+XG4gKi9cbi5hdHRyaWJ1dGUtbGlzdCB7XG4gIHBhZGRpbmc6IDAgJHdyO1xuICAmX190aXRsZSB7XG4gICAgQGluY2x1ZGUgc21hbGw7XG4gIH1cbiAgJl9fZGVzY3JpcHRpb24ge1xuICAgIG1hcmdpbi1sZWZ0OiAkd3IgKiAyO1xuICAgIC5hdHRyaWJ1dGUtbGlzdCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqKlxuICogIFNlY3Rpb25cbiAqXG4gKiAgVGhlIG1haW4gc2VjdGlvbnMgb2YgdGhlIGd1aWRlLiAgTW9kaWZpZXJzIHdvdWxkIGRlZmluZSB2YXJpYXRpb25zLlxuICpcbiAqICBodG1sOlxuICogICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uIHt7IG1vZGlmaWVyIH19XCI+XG4gKiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uX19pbm5lclwiPlxuICogICAgICAgIDxoZWFkZXIgY2xhc3M9XCJzZWN0aW9uX19oZWFkZXJcIj5cbiAqICAgICAgICAgIDxoND5UaGlzIGlzIGEgU2VjdGlvbjwvaDQ+XG4gKiAgICAgICAgPC9oZWFkZXI+XG4gKiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25fX2Rlc2NyaXB0aW9uXCI+PHA+VGhlIGluZm8gaGVyZSBpcyA8ZW0+c3VwZXI8L2VtPiBpbXBvcnRhbnQhPC9wPjwvZGl2PlxuICogICAgICA8L2Rpdj5cbiAqICAgIDwvc2VjdGlvbj5cbiAqXG4gKiAgd3JhcDogW3N0eWxlPVwiYmFja2dyb3VuZDogI2E5OVwiXVxuICovXG4kaWNvbnM6XG4gICdjb2xvcnMnLFxuICAnZm9udHMnLFxuICAncXVhcmtzJyxcbiAgJ2F0b21zJyxcbiAgJ21vbGVjdWxlcycsXG4gICdvcmdhbmlzbXMnLFxuICAnc2V0dGluZ3MnLFxuICAndXRpbGl0aWVzJyxcbiAgJ21lbnUnLFxuICAncGhvbmUnLFxuICAndGFibGUnLFxuICAnZGVza3RvcCdcbjtcblxuLnNlY3Rpb24ge1xuICBAaW5jbHVkZSBjbGVhckZpeCgpO1xuICBtYXJnaW46ICR2ciAqIDggYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICYtLWRlcHRoLTEge1xuICAgIG1hcmdpbi10b3A6ICR2ciAqIDEyO1xuICB9XG59XG5cbi5zZWN0aW9uX19pbm5lciB7XG4gIEBpbmNsdWRlIGdyaWRDb250YWluZXI7XG4gIHBhZGRpbmc6IDAgJHdyO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICBAZm9yICRkZXB0aCBmcm9tIDIgdGhyb3VnaCA1IHtcbiAgICAuc2VjdGlvbi0tZGVwdGgtI3skZGVwdGh9ICYge1xuICAgICAgcGFkZGluZy1sZWZ0OiAkd3IgKiAoJGRlcHRoKTtcbiAgICB9XG4gIH1cbn1cblxuLnNlY3Rpb25fX3N1Yi1lbGVtZW50cyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy10b3A6ICR2ciAqIDQ7XG4gIG1hcmdpbi10b3A6ICR2ciAqIDI7XG4gICY6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDsgYm90dG9tOiAwOyAvL2xlZnQ6IDUwJTtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB3aWR0aDogJG1heC13aWR0aDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkYm9yZGVyLWh0bWw7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gID4gLnNlY3Rpb246Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbiAgPiAuc2VjdGlvbjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG4gIC5zZWN0aW9uX190aXRsZTo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgQGZvciAkZGVwdGggZnJvbSAxIHRocm91Z2ggNSB7XG4gICAgLnNlY3Rpb24tLWRlcHRoLSN7JGRlcHRofSAmOjpiZWZvcmUge1xuICAgICAgbGVmdDogY2FsYyg1MCUgKyAjeyR3ciAqICgkZGVwdGggLSAxKX0pO1xuICAgIH1cbiAgfVxufVxuXG4uc2VjdGlvbl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICY6OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxMDAlOyB0b3A6IDA7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICBtYXJnaW4tcmlnaHQ6ICR3cjtcbiAgfVxuICBAaW5jbHVkZSBpY29uKCdtZW51Jyk7XG59XG5AZWFjaCAkaSBpbiAkaWNvbnMge1xuICAuc2VjdGlvbl9fdGl0bGUtLSN7JGl9IHtcbiAgICBAaW5jbHVkZSBpY29uKCRpKTtcbiAgfVxufVxuIiwiLyoqKlxuICogTWFpbiBIZWFkZXJcbiAqXG4gKiBUaGUgbWFpbiBoZWFkZXIgb2YgdGhlIHN0eWxlZ3VpZGUuXG4gKlxuICogTWFrZXMgdXNlIG9mIGAkYmFja2dyb3VuZC1oZWFkZXJgIGFuZCBgJHRleHQtaGVhZGVyYCB3aXRoIHRoZSBgc3VwZXJgIHNpemluZy5cbiAqIEJhY2tncm91bmQgc2l6ZSBpcyBzZXQgdG8gYGNvdmVyYCBpbiBjYXNlIHlvdSB3YW50IHRvIG92ZXJyaWRlIGAkYmFja2dyb3VuZC1oZWFkZXJgXG4gKiB3aXRoIGFuIGltYWdlLlxuICpcbiAqIGh0bWw6XG4gKiAgIDxoZWFkZXIgY2xhc3M9XCJoZWFkZXItbWFpblwiPlxuICogICAgIDxoMSBjbGFzcz1cImhlYWRlci1tYWluX190aXRsZVwiPkF1dG9ndWlkZTwvaDE+XG4gKiAgIDwvaGVhZGVyPlxuICpcbiAqIGZ1bGxXaWR0aDogdHJ1ZVxuICovXG4uaGVhZGVyLW1haW4ge1xuICBwYWRkaW5nOiAkdnIgKiAxMiAkd3IgKiAyICR2ciAqIDM7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLWhlYWRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcblxuICAmX19pbm5lciB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgbWF4LXdpZHRoOiAkbWF4LXdpZHRoO1xuICB9XG5cbiAgJl9fdGl0bGUge1xuICAgIEBpbmNsdWRlIHN1cGVyO1xuICAgIEBpbmNsdWRlIGZvbnQtaGVhZGxpbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIGNvbG9yOiAkdGV4dC1oZWFkZXI7XG4gIH1cbn1cbiIsIi8qKipcbiAqIE1haW4gRm9vdGVyXG4gKlxuICogSnVzdCBhIHF1aWNrIHNpZ25vZmYuXG4gKlxuICogaHRtbDpcbiAqICAgIDxmb290ZXIgY2xhc3M9XCJmb290ZXItbWFpblwiPlxuICogICAgICA8cD5DcmVhdGVkIHVzaW5nIDxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vamhlcmVnMDAvYXV0b2d1aWRlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+QXV0b2d1aWRlPC9hPi48L3A+XG4gKiAgICA8L2Zvb3Rlcj5cbiAqXG4gKiBmdWxsV2lkdGg6IHRydWVcbiAqL1xuLmZvb3Rlci1tYWluIHtcbiAgQGluY2x1ZGUgc21hbGw7XG4gIHBhZGRpbmc6ICR2ciAkd3I7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLWZvb3RlcjtcblxuICBAaWYgKGxpZ2h0bmVzcygkYmFja2dyb3VuZC1mb290ZXIpIDwgNTUpIHtcbiAgICBjb2xvcjogJHRleHQtaW52ZXJ0ZWQ7XG4gIH0gQGVsc2Uge1xuICAgIGNvbG9yOiAkdGV4dC1zdWJ0bGU7XG4gIH1cblxuICBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxufVxuIiwiLyoqKlxuICogIENvbnRyb2xzXG4gKlxuICogIEJ1dHRvbnMgdGhhdCBoYW5kbGUgY2VydGFpbiBndWlkZS1sZXZlbCBmZWF0dXJlcy5cbiAqXG4gKiAgaHRtbDpcbiAqICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxuICogICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbHNfX2dyb3VwIGNvbnRyb2xzX19ncm91cC0tc2FtcGxlLXNpemVcIj5cbiAqICAgICAgICA8aDUgY2xhc3M9XCJjb250cm9sc19fZ3JvdXAtaGVhZGVyXCI+U2FtcGxlIFNpemU8L2g1PlxuICogICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+XG4gKiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJzYW1wbGVTaXplXCIgaWQ9XCJzYW1wbGVTaXplXCI+XG4gKiAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICogICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tLXNtYWxsIGJ1dHRvbi0taXNvbi1waG9uZSBidXR0b24tZ3JvdXBfX2J1dHRvbiBqcy11cGRhdGUtaW5wdXRcIiB2YWx1ZT1cIjMyMFwiPlxuICogICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbl9fdGV4dFwiPjMyMHB4PC9zcGFuPlxuICogICAgICAgICAgPC9idXR0b24+XG4gKiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi0tc21hbGwgYnV0dG9uLS1pc29uLXRhYmxldCBidXR0b24tZ3JvdXBfX2J1dHRvbiBqcy11cGRhdGUtaW5wdXRcIiB2YWx1ZT1cIjc2OFwiPlxuICogICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbl9fdGV4dFwiPjc2OHB4PC9zcGFuPlxuICogICAgICAgICAgPC9idXR0b24+XG4gKiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi0tc21hbGwgYnV0dG9uLS1pc29uLWRlc2t0b3AgYnV0dG9uLWdyb3VwX19idXR0b24ganMtdXBkYXRlLWlucHV0XCIgdmFsdWU9XCIxMjAwXCI+XG4gKiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uX190ZXh0XCI+MTIwMHB4PC9zcGFuPlxuICogICAgICAgICAgPC9idXR0b24+XG4gKiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi0tc21hbGwgYnV0dG9uLWdyb3VwX19idXR0b24ganMtdXBkYXRlLWlucHV0XCIgdmFsdWU9XCJcIj5cbiAqICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b25fX3RleHRcIj5EZWZhdWx0PC9zcGFuPlxuICogICAgICAgICAgPC9idXR0b24+XG4gKiAgICAgICAgPC9kaXY+XG4gKiAgICAgIDwvZGl2PlxuICogICAgPC9kaXY+XG4gKi9cbi5jb250cm9scyB7XG4gIHBhZGRpbmc6ICR2ciAkd3I7XG4gICZfX2dyb3VwIHtcbiAgICAmICsgJiB7XG4gICAgICBtYXJnaW4tdG9wOiAkdnI7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGJvcmRlci1odG1sO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqKlxuICogIENvbnRyb2xzL05hdiBUcmF5XG4gKlxuICogIEEgZm9sZC1hd2F5IHRoaW5neSB3aXRoIHRpZXJzIHRoYXQgY2FuIG9wZW4vY2xvc2UuXG4gKlxuICogIGh0bWw6XG4gKiAgICA8ZGl2IGNsYXNzPVwidHJheVwiPlxuICogICAgICA8ZGl2IGNsYXNzPVwidHJheV9fdGllclwiPlxuICogICAgICAgIDxhIGNsYXNzPVwidHJheV9fb3BlbmVyXCI+PC9hPlxuICogICAgICAgIDxoND5UaWVyIDE8L2g0PlxuICogICAgICA8L2Rpdj5cbiAqICAgICAgPGRpdiBjbGFzcz1cInRyYXlfX3RpZXJcIj5cbiAqICAgICAgICA8YSBjbGFzcz1cInRyYXlfX29wZW5lclwiPjwvYT5cbiAqICAgICAgICA8aDQ+VGllciAyPC9oND5cbiAqICAgICAgPC9kaXY+XG4gKiAgICA8L2Rpdj5cbiAqXG4gKiAgd3JhcDogW3N0eWxlPVwiaGVpZ2h0OiAyMDBweFwiXVxuICovXG4kdHJheS13aWR0aDogbXVsdGlwbGVBYm92ZShweFRvUmVtKDI2MCksICR3cik7XG4udHJheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwOyBsZWZ0OiAwO1xuICB6LWluZGV4OiA5OTk5OTk5O1xuXG4gICYgKyAqIHtcbiAgICB0cmFuc2l0aW9uOiBtYXJnaW4tbGVmdCAkdHJhbnNpdGlvbi10aW1lICogNCAkZWFzZS1zb2Z0O1xuICB9XG5cbiAgJi5pcy1vcGVuICsgKiB7XG4gICAgbWFyZ2luLWxlZnQ6ICR0cmF5LXdpZHRoO1xuICB9XG4gICYuaXMtb3BlbiAudHJheV9fdGllcjpub3QoLmlzLW9wZW4pIC50cmF5X19vcGVuZXIge1xuICAgIGxlZnQ6ICR0cmF5LXdpZHRoICogMjtcbiAgfVxufVxuLnRyYXlfX3RpZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDsgbGVmdDogMDsgYm90dG9tOiAwO1xuICB3aWR0aDogJHRyYXktd2lkdGg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLXRyYXk7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRib3JkZXItdHJheTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtICR0cmFuc2l0aW9uLXRpbWUgKiAzICRlYXNlLXNvZnQ7XG4gIHotaW5kZXg6IDEwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuXG4gICYuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgID4gLnRyYXlfX29wZW5lciB7XG4gICAgICB0ZXh0LWluZGVudDogJHdyICogLS4yNTtcbiAgICAgIGNsaXAtcGF0aDogcG9seWdvbigjeyR3cn0gMCwgI3skd3IgKiAzfSAwLCAjeyR3ciAqIDN9ICN7JHZyICogMS41fSwgI3skd3IgKiAzfSAjeyR2ciAqIDN9LCAjeyR3cn0gI3skdnIgKiAzfSwgMCAjeyR2ciAqIDEuNX0pO1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKCN7JHdyfSArIDFweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCA1IHtcbiAgICAmOm50aC1jaGlsZCgjeyRpfSkge1xuICAgICAgLnRyYXlfX29wZW5lciB7XG4gICAgICAgIHRvcDogJHZyICsgJHZyICogNCAqICgkaSAtIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLnRyYXlfX29wZW5lciB7XG4gIEBpbmNsdWRlIGg0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR2cjsgbGVmdDogMTAwJTtcbiAgd2lkdGg6ICR3ciAqIDQ7XG4gIGhlaWdodDogJHZyICogMztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICR3ciAqIC0xO1xuICBsaW5lLWhlaWdodDogJHZyICogMztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtdHJheTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLXRyYXk7XG4gIGJvcmRlci13aWR0aDogMXB4IDA7XG4gIGNvbG9yOiAkdGV4dC1zdWJ0bGU7XG4gIHRyYW5zaXRpb246IGNvbG9yICR0cmFuc2l0aW9uLXRpbWU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1pbmRlbnQ6ICR3ciAqIC4yNTtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKCN7JHdyfSAwLCAjeyR3ciAqIDN9IDAsICN7JHdyICogNH0gI3skdnIgKiAxLjV9LCAjeyR3ciAqIDN9ICN7JHZyICogM30sICN7JHdyfSAjeyR2ciAqIDN9LCAjeyR3cn0gI3skdnIgKiAxLjV9KTtcbiAgdHJhbnNpdGlvbjogY2xpcC1wYXRoICR0cmFuc2l0aW9uLXRpbWUgKiAzLCB0ZXh0LWluZGVudCAkdHJhbnNpdGlvbi10aW1lICogMywgbGVmdCAkdHJhbnNpdGlvbi10aW1lICogMztcblxuICAmOmhvdmVyLCAudHJheV9fdGllci5pcy1vcGVuICYge1xuICAgIGNvbG9yOiAkdGV4dC1ib2R5O1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwOyBsZWZ0OiAxcHg7XG4gICAgYm9yZGVyLXdpZHRoOiBjYWxjKCN7JHZyICogMS41fSAtIDFweCk7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKCN7JHdyfSAtIDFweCk7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci10cmF5O1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7IHJpZ2h0OiAwO1xuICAgIGJvcmRlci13aWR0aDogY2FsYygjeyR2ciAqIDEuNX0gLSAxcHgpO1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiBjYWxjKCN7JHdyfSAtIDFweCk7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItdHJheTtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLXdpZHRoICR0cmFuc2l0aW9uLXRpbWU7XG4gIH1cbn1cbiIsIi8qKipcbiAqIENvbXBvbmVudFxuICpcbiAqIEFuIGluZGl2aWR1YWwgcGllY2Ugb2YgdGhlIHN0eWxlZ3VpZGUuXG4gKlxuICogaHRtbDpcblRPRE9cbiAqL1xuLmNvbXBvbmVudCB7XG4gIEBpbmNsdWRlIGNsZWFyRml4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6ICR2ciAqIDYgY2FsYygoMTAwJSAtICN7JG1heC13aWR0aH0pIC8gMik7XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCA0IHtcbiAgICAmLS1kZXB0aC0jeyRpfSB7XG4gICAgICBwYWRkaW5nLXRvcDogbWF4KCR2ciAqIDIsICR2ciAqICg4IC0gJGkgKiAyKSk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogbWF4KCR2ciAqIDIsICR2ciAqICg4IC0gJGkgKiAyKSk7XG4gICAgfVxuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAwIDAgJHZyO1xuICAgIC8vIEBpbmNsdWRlIGljb24gKCdyaWdodC1hcnJvdycpO1xuICAgIC8vICY6OmJlZm9yZSB7XG4gICAgLy8gICBAaW5jbHVkZSBoMztcbiAgICAvLyAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyAgIHRvcDogNTAlOyByaWdodDogMTAwJTtcbiAgICAvLyAgIG1hcmdpbi1yaWdodDogJHdyO1xuICAgIC8vICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIC8vIH1cblxuICAgIC5maWxlLXBhdGgge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206ICR2ciAqIC41O1xuICAgIH1cbiAgfVxuXG4gICZfX3N1Yi1lbGVtZW50cyB7XG4gICAgPiAuY29tcG9uZW50IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR3ciAqIDI7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLS1kZXB0aC0xIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGJvcmRlci1odG1sO1xuICB9XG5cbiAgLy8gJi0tZGVwdGgtMSA+IC5jb21wb25lbnRfX2hlYWRlcjo6YmVmb3JlIHtcbiAgLy8gICBAaW5jbHVkZSBoMTtcbiAgLy8gfVxuICAvL1xuICAvLyAmLS10aXRsZS1jb2xvcnMsICYtLWNvbG9yIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnY29sb3JzJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vICYtLXRpdGxlLWZvbnRzLCAmLS1mb250IHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnZm9udHMnKTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgLy8gJi0tdGl0bGUtcXVhcmtzIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgncXVhcmtzJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vICYtLXRpdGxlLWF0b21zIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnYXRvbXMnKTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgLy8gJi0tdGl0bGUtbW9sZWN1bGVzIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnbW9sZWN1bGVzJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vICYtLXRpdGxlLW9yZ2FuaXNtcyB7XG4gIC8vICAgPiAuY29tcG9uZW50X19oZWFkZXIge1xuICAvLyAgICAgQGluY2x1ZGUgaWNvbiAoJ29yZ2FuaXNtcycpO1xuICAvLyAgIH1cbiAgLy8gfVxuICAvLyAmLS10aXRsZS1zZXR0aW5ncyB7XG4gIC8vICAgPiAuY29tcG9uZW50X19oZWFkZXIge1xuICAvLyAgICAgQGluY2x1ZGUgaWNvbiAoJ3NldHRpbmdzJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vICYtLXRpdGxlLXV0aWxpdGllcyB7XG4gIC8vICAgPiAuY29tcG9uZW50X19oZWFkZXIge1xuICAvLyAgICAgQGluY2x1ZGUgaWNvbiAoJ3V0aWxpdGllcycpO1xuICAvLyAgIH1cbiAgLy8gfVxuICAvLyAmLS1odG1sIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnaHRtbCcpO1xuICAvLyAgIH1cbiAgLy8gfVxuICAvLyAmLS1jb2RlIHtcbiAgLy8gICA+IC5jb21wb25lbnRfX2hlYWRlciB7XG4gIC8vICAgICBAaW5jbHVkZSBpY29uICgnY29kZScpO1xuICAvLyAgIH1cbiAgLy8gfVxufVxuIiwiLyoqKlxuICogUGFsZXR0ZVxuICpcbiAqIEp1c3QgYSBjb2xlY3Rpb24gb2YgW2NvbG9yXSgjL21vbGVjdWxlcy9jb2xvcikgZWxlbWVudHMuICBTaXplcyB0aGVtIG1vc3RseVxuICogYmFzZWQgb24gaG93IG1hbnkgYXJlIHByZXNlbnQuICBUaGlzIGlzIGFjaGlldmVkIHRocm91Z2ggdGhlIHV0dGVybHkgaW5nZW5pb3VzXG4gKiBbbW9kIHNlbGVjdG9yXShodHRwOi8vYWxpc3RhcGFydC5jb20vYXJ0aWNsZS91c2luZy1jc3MtbW9kLXF1ZXJpZXMtd2l0aC1yYW5nZS1zZWxlY3RvcnMpLlxuICpcbiAqIFNob3dzIHRoZSBjb2xvcnMgYXMgbGFyZ2VyIGlmIGluIGFuIGVsZW1lbnQgd2l0aCAncHJpbWFyeScgaW4gaXRzIHRpdGxlLlxuICpcbiAqIEBtb2RpZmllciBbaWQqPVwicHJpbWFyeVwiXSAmXG4gKlxuICogaHRtbDpcbiAqICAgPGRpdiBjbGFzcz1cInBhbGV0dGVcIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29sb3IgY29sb3ItLWRhcmtcIj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2ggc3dhdGNoLS0gc3dhdGNoLS1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRkYwMDAwXCI+PC9kaXY+XG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JfX2RldGFpbHNcIj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFyLW5hbWVcIiBkYXRhLWNvcHk9XCIkYzFcIj4kYzE8L3NwYW4+XG4gKiAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3JfX3ZhbHVlIGNvbG9yX192YWx1ZS0taGV4XCIgZGF0YS1jb3B5PVwiI0ZGMDAwMFwiPiNGRjAwMDA8L3NwYW4+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29sb3IgY29sb3ItLWRhcmtcIj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2ggc3dhdGNoLS0gc3dhdGNoLS1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjRUUwMDAwXCI+PC9kaXY+XG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JfX2RldGFpbHNcIj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFyLW5hbWVcIiBkYXRhLWNvcHk9XCIkYzJcIj4kYzI8L3NwYW4+XG4gKiAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3JfX3ZhbHVlIGNvbG9yX192YWx1ZS0taGV4XCIgZGF0YS1jb3B5PVwiI0VFMDAwMFwiPiNFRTAwMDA8L3NwYW4+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29sb3IgY29sb3ItLWRhcmtcIj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2ggc3dhdGNoLS0gc3dhdGNoLS1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjREQwMDAwXCI+PC9kaXY+XG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JfX2RldGFpbHNcIj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFyLW5hbWVcIiBkYXRhLWNvcHk9XCIkYzNcIj4kYzM8L3NwYW4+XG4gKiAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3JfX3ZhbHVlIGNvbG9yX192YWx1ZS0taGV4XCIgZGF0YS1jb3B5PVwiI0REMDAwMFwiPiNERDAwMDA8L3NwYW4+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8ZGl2IGNsYXNzPVwiY29sb3IgY29sb3ItLWRhcmtcIj5cbiAqICAgICAgIDxkaXYgY2xhc3M9XCJzd2F0Y2ggc3dhdGNoLS0gc3dhdGNoLS1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjQ0MwMDAwXCI+PC9kaXY+XG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JfX2RldGFpbHNcIj5cbiAqICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvcl9fdmFyLW5hbWVcIiBkYXRhLWNvcHk9XCIkYzRcIj4kYzQ8L3NwYW4+XG4gKiAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3JfX3ZhbHVlIGNvbG9yX192YWx1ZS0taGV4XCIgZGF0YS1jb3B5PVwiI0NDMDAwMFwiPiNDQzAwMDA8L3NwYW4+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKi9cbi5wYWxldHRlIHtcbiAgQGluY2x1ZGUgZ3JpZENvbnRhaW5lcigwKTtcblxuICAuY29sb3Ige1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAoMTAwJSAvIDMpO1xuICAgIC8vIHNleHkgYXNzIG1vZCBzZWxlY3RvciFcbiAgICBAaW5jbHVkZSBtb2RRdWVyeSg0LDAsJy5jb2xvcicpIHtcbiAgICAgIHdpZHRoOiAoMTAwJSAvIDQpO1xuICAgIH1cbiAgICBAaW5jbHVkZSBtb2RRdWVyeSg0LDMsJy5jb2xvcicpIHtcbiAgICAgIHdpZHRoOiAoMTAwJSAvIDQpO1xuICAgICAgQGluY2x1ZGUgc2VsZWN0UmFuZ2UoMSwzKSB7XG4gICAgICAgIHdpZHRoOiAoMTAwJSAvIDMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtpZCo9XCJwcmltYXJ5XCJdICYsIFtpZCo9XCJicmFuZFwiXSAmIHtcbiAgICBAaW5jbHVkZSBoNDtcbiAgICAuY29sb3Ige1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICAgIGhlaWdodDogJHZyICogMTI7XG4gICAgICBAaW5jbHVkZSBtb2RGaXJzdCgyLDEpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZFF1ZXJ5KDMsMCwnLmNvbG9yJykge1xuICAgICAgICB3aWR0aDogKDEwMCUgLyAzKTtcbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgbW9kUXVlcnkoMywxLCcuY29sb3InKSB7XG4gICAgICAgIHdpZHRoOiAoMTAwJSAvIDMpO1xuICAgICAgfVxuICAgICAgQGluY2x1ZGUgbW9kRmlyc3QoMywxKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RRdWVyeSgyLDAsJy5jb2xvcicpIHtcbiAgICAgICAgd2lkdGg6ICgxMDAlIC8gMik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKioqXG4gKiBIVE1MIFNhbXBsZVxuICpcbiAqIEFuIG91dHB1dCBvZiBhIHNhbXBsZSBlbGVtZW50L2NvbXBvbmVudC4gIEl0IGlzIHR1cm5lZCBpbnRvIGFuIGlmcmFtZSBieVxuICogYXV0b2d1aWRlLmpzLCBhbGxvd2luZyBpdCB0byBrZWVwIGFsbCBvZiBpdHMgc3R5bGluZyBsb2NhbGl6ZWQuXG4gKlxuICogVGl0bGUgYW5kIGRlc2NyaXB0aW9uIGFyZSBvcHRpb25hbCBiYXNlZCBvbiB0aGUgcGFzc2VkIGRhdGEuXG4gKlxuICogaHRtbDpcbiAqICAgPGRpdiBjbGFzcz1cImh0bWwtc2FtcGxlXCI+XG4gKiAgICAgPGg2IGNsYXNzPVwiaHRtbC1zYW1wbGVfX2hlYWRlclwiPkEgU2luZ2xlIFNhbXBsZTwvaDY+XG4gKiAgICAgPGRpdiBjbGFzcz1cImh0bWwtc2FtcGxlX19kZXNjcmlwdGlvblwiPlxuICogICAgICAgPHA+VGhpcyBpcyBhIHNhbXBsZSBvZiB0aGUgc2FtcGxlLiBOZWF0LCByaWdodD88L3A+XG4gKiAgICAgICA8cD5TaWRlIG5vdGUsIGlmcmFtZSBjYW4ndCBiZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0aGluIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBpZnJhbWUuIEl0IGZ1Y2tzIHVwLjwvcD5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8aWZyYW1lIGNsYXNzPVwiaHRtbC1zYW1wbGVfX2lmcmFtZVwiIHNyY2RvYz0nXG4gKiAgICAgICA8aHRtbD5cbiAqICAgICAgICAgPGhlYWQ+XG4gKiAgICAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJhc3NldHMvY3NzL2F1dG9ndWlkZS5jc3NcIj5cbiAqICAgICAgICAgPC9oZWFkPlxuICogICAgICAgICA8Ym9keT48aDU+VGhpcyBpcyBpbiBhbiBpZnJhbWU8L2g1PjwvYm9keT5cbiAqICAgICAgIDwvaHRtbD4nPlxuICogICAgIDwvaWZyYW1lPlxuICogICA8L2Rpdj5cbiAqXG4gKiB3cmFwOiAuY29tcG9uZW50XG4gKi9cbi5odG1sLXNhbXBsZSB7XG4gICZfX2hlYWRlci0tY2xhc3MtbmFtZSB7XG4gICAgQGluY2x1ZGUgZm9udC1tb25vO1xuICB9XG4gICZfX2Rlc2NyaXB0aW9uIHtcbiAgICA6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cbiAgJl9faWZyYW1lIHtcbiAgICBib3JkZXI6ICR2ciAvIDQgc29saWQgJGJvcmRlci1odG1sO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAjeyR2ciAvIDJ9KTtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBvdXRlciBwYWdlIGNvbnRhaW5lclxuICovXG4ucGFnZS1jb250YWluZXIge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIiwiLyoqXG4gKiBIZWxwZXIgc3R5bGVzIGZvciBqcy1jb2xsYXBzYWJsZVxuICovXG4uanMtY29sbGFwc2FibGUge1xuICAmX190b2dnbGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJysnO1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuICB9XG4gICZfX2NvbnRlbnQge1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDA7XG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0ICR0cmFuc2l0aW9uLXRpbWUgKiAyICRlYXNlLXNvZnQ7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIC5qcy1jb2xsYXBzYWJsZV9fdG9nZ2xlOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJy0nO1xuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */
