/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
@media (min-width: 768px) {
  .bl18-left-rail-blog-container .left-rail-container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex; } }

.bl18-left-rail-blog-container .column {
  min-height: 1px;
  width: 100%;
  float: right;
  margin-right: 0; }

@media (min-width: 768px) {
  .bl18-left-rail-blog-container .column-4 {
    width: 32.20339%;
    float: left;
    margin-right: 1.69492%;
    -webkit-box-ordinal-group: 2;
        -ms-flex-order: 1;
            order: 1; } }

@media (min-width: 768px) {
  .bl18-left-rail-blog-container .column-6 {
    width: 49.15254%;
    float: left;
    margin-right: 1.69492%;
    -webkit-box-ordinal-group: 3;
        -ms-flex-order: 2;
            order: 2; } }

@media (min-width: 768px) {
  .bl18-left-rail-blog-container .column-2 {
    width: 15.25424%;
    float: right;
    margin-right: 0;
    -webkit-box-ordinal-group: 4;
        -ms-flex-order: 3;
            order: 3; } }

.bl18__horizontal-rule {
  margin-left: -6.6vw;
  width: 100vw;
  border-top: solid 1px #AAB8C2; }
  @media (min-width: 768px) {
    .bl18__horizontal-rule {
      display: none; } }
@charset "UTF-8";
/**
 * Here we define styles for text that is imported from another platform
 * and should match the styles from bl13-rich-text-editor despite
 * the provided markup of the import is different and covers some edge cases.
 */
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
/**
 * The styles in this file are shared across bl13-rich-text-editor and
 * bl25-blog-migration-html. If a style is only used by one component,
 * move the appropriate CSS to the component, and remove it from this file.
 */
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
/* Helvetica Neue LT W06_57 Cond */
@font-face {
  font-family: "Helvetica Neue LT Cond";
  src: url("https://fonts.twitter.com/helvetica_neue/897ea951-7ec6-47f4-9da3-7d0619b46d04.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/897ea951-7ec6-47f4-9da3-7d0619b46d04.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/033b54db-b1ce-4da7-861b-61d059c1c9b8.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/d9c842f8-b37a-414f-be86-97ea9c61d3d7.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/84a2cc09-f02d-4c1d-a5a9-2ab456439c73.svg#84a2cc09-f02d-4c1d-a5a9-2ab456439c73") format("svg"); }

/* Helvetica Neue LT W06_75 Bold */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 700;
  font-style: normal;
  src: url("https://fonts.twitter.com/helvetica_neue/3aeaeb1d-1dea-4e9b-9e83-52adc5a87209.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/3aeaeb1d-1dea-4e9b-9e83-52adc5a87209.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/d9122e8d-bf26-4f1c-bab9-c06599397b59.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/db0cec12-a947-40fe-a115-c5ce22ee79f6.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/024411ef-26bf-4536-aea4-ec953846eda7.svg#024411ef-26bf-4536-aea4-ec953846eda7") format("svg"); }

/* Helvetica Neue LT W06_85 Heavy */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 900;
  font-style: normal;
  src: url("https://fonts.twitter.com/helvetica_neue/8a90a2ba-1276-4b3f-bc1c-8526172b27f4.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/8a90a2ba-1276-4b3f-bc1c-8526172b27f4.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/c415f3fd-ff27-40fe-af94-8b4a54b4b4e4.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/a1da20c7-4dc9-4af5-bd6f-9ebe50b6788d.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/acd8d6df-9696-4092-bf23-5370c63ca9fb.svg#acd8d6df-9696-4092-bf23-5370c63ca9fb") format("svg"); }

/* Helvetica Neue LT W06_56 It */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 400;
  font-style: italic;
  src: url("https://fonts.twitter.com/helvetica_neue/7df39325-0e0e-4635-a717-59033a026fc5.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/7df39325-0e0e-4635-a717-59033a026fc5.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/6acb9b26-7e8e-46b4-b68b-631ab07d6ed7.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/2914a90e-d766-4cf8-97b9-04c5fe897f06.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/b85ea5b3-8dc8-4989-a982-f461bc9655f8.svg#b85ea5b3-8dc8-4989-a982-f461bc9655f8") format("svg"); }

/* Helvetica Neue LT W06_45 Light */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 300;
  font-style: normal;
  src: url("https://fonts.twitter.com/helvetica_neue/2023e7d1-9f0a-4cac-8e80-22321db918dd.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/2023e7d1-9f0a-4cac-8e80-22321db918dd.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/198fd78b-3655-4768-89c4-31caf65ea363.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/49631ce8-9201-47a8-8874-45371417c35f.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/9ac3d424-8521-46cf-8878-7324762db7b4.svg#9ac3d424-8521-46cf-8878-7324762db7b4") format("svg"); }

/* Helvetica Neue LT W06_55 Roman */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 400;
  font-style: normal;
  src: url("https://fonts.twitter.com/helvetica_neue/8b3b0133-222d-4ffc-9d6e-565dd879690c.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/8b3b0133-222d-4ffc-9d6e-565dd879690c.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/1a14dcac-7c9e-471c-8039-33c730f871f2.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/558ed534-0c60-42cf-8b94-d0a16eb70d37.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/6513e804-e03e-41a1-8385-d5e0971f2009.svg#6513e804-e03e-41a1-8385-d5e0971f2009") format("svg"); }

/* Helvetica Neue LT W06_35 Thin */
@font-face {
  font-family: "Helvetica Neue LT";
  font-weight: 200;
  font-style: normal;
  src: url("https://fonts.twitter.com/helvetica_neue/2a129142-7c50-4728-9227-1eebf2d9f16d.eot?#iefix");
  src: url("https://fonts.twitter.com/helvetica_neue/2a129142-7c50-4728-9227-1eebf2d9f16d.eot?#iefix") format("eot"), url("https://fonts.twitter.com/helvetica_neue/2192a26c-de1c-4c50-88d1-e5136033c15a.woff2") format("woff2"), url("https://fonts.twitter.com/helvetica_neue/0212d203-ce3f-42e2-862a-edf988621728.woff") format("woff"), url("https://fonts.twitter.com/helvetica_neue/552c43a3-6cc7-47b9-8b81-398b961b5167.svg#552c43a3-6cc7-47b9-8b81-398b961b5167") format("svg"); }

.theme--orange .bl25 a {
  color: #F45D22;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--orange .bl25 a:active,
.theme--orange .bl25 a:hover {
  color: #D82E18;
  cursor: pointer; }

.theme--orange .bl25 ol li::before,
.theme--orange .bl25 ul li::before {
  color: #F45D22; }

.theme--orange .bl25 *::-moz-selection {
  background-color: #FFBE78;
  color: inherit; }

.theme--orange .bl25 *::selection {
  background-color: #FFBE78;
  color: inherit; }

.theme--yellow .bl25 a {
  color: #FFAD1F;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--yellow .bl25 a:active,
.theme--yellow .bl25 a:hover {
  color: #F98E00;
  cursor: pointer; }

.theme--yellow .bl25 ol li::before,
.theme--yellow .bl25 ul li::before {
  color: #FFAD1F; }

.theme--yellow .bl25 *::-moz-selection {
  background-color: #FFE76E;
  color: inherit; }

.theme--yellow .bl25 *::selection {
  background-color: #FFE76E;
  color: inherit; }

.theme--green .bl25 a {
  color: #1FB650;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--green .bl25 a:active,
.theme--green .bl25 a:hover {
  color: #008951;
  cursor: pointer; }

.theme--green .bl25 ol li::before,
.theme--green .bl25 ul li::before {
  color: #1FB650; }

.theme--green .bl25 *::-moz-selection {
  background-color: #A5F2AA;
  color: inherit; }

.theme--green .bl25 *::selection {
  background-color: #A5F2AA;
  color: inherit; }

.theme--blue .bl25 a {
  color: #1DA1F2;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--blue .bl25 a:active,
.theme--blue .bl25 a:hover {
  color: #005FD1;
  cursor: pointer; }

.theme--blue .bl25 ol li::before,
.theme--blue .bl25 ul li::before {
  color: #1DA1F2; }

.theme--blue .bl25 *::-moz-selection {
  background-color: #97E3FF;
  color: inherit; }

.theme--blue .bl25 *::selection {
  background-color: #97E3FF;
  color: inherit; }

.theme--purple .bl25 a {
  color: #794BC4;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--purple .bl25 a:active,
.theme--purple .bl25 a:hover {
  color: #4F0299;
  cursor: pointer; }

.theme--purple .bl25 ol li::before,
.theme--purple .bl25 ul li::before {
  color: #794BC4; }

.theme--purple .bl25 *::-moz-selection {
  background-color: #C7B4FA;
  color: inherit; }

.theme--purple .bl25 *::selection {
  background-color: #C7B4FA;
  color: inherit; }

.theme--pink .bl25 a {
  color: #E0245E;
  text-decoration: none;
  transition: color 0.3s ease-in-out; }

.theme--pink .bl25 a:active,
.theme--pink .bl25 a:hover {
  color: #A01744;
  cursor: pointer; }

.theme--pink .bl25 ol li::before,
.theme--pink .bl25 ul li::before {
  color: #E0245E; }

.theme--pink .bl25 *::-moz-selection {
  background-color: #FFB8C2;
  color: inherit; }

.theme--pink .bl25 *::selection {
  background-color: #FFB8C2;
  color: inherit; }

.bl25 {
  /**
      Style changes to ".code-inline" and ".footnote" should be reflected here as well:
      core-twitter-project/core-twitter-jcr-modules/core-twitter-view/src/content/jcr_root/etc/designs/core-twitter/clientlib-editor/css/bl13-rich-text-editor.css
      So the styles will be applied in full screen editing mode as well.
    */ }
  .bl25 h2 {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.5rem;
    letter-spacing: 0rem;
    margin: 0;
    padding: 0 0 0rem 0;
    color: #14171A;
    margin-left: -1px;
    padding-bottom: 2.25rem;
    padding-top: 2.25rem; }
  .bl25 h3 {
    color: #14171A; }
  .bl25 h3 + ol,
  .bl25 h3 + ul {
    padding-top: 0.75rem; }
  .bl25 p {
    padding-bottom: 1.5rem; }
  .bl25 p + ol,
  .bl25 p + ul {
    padding-top: 1.5rem; }
  .bl25 p + h3 {
    padding-top: 0.75rem; }
  .bl25 ol,
  .bl25 ul {
    list-style: none;
    padding-bottom: 3rem; }
  .bl25 ol + h2,
  .bl25 ul + h2 {
    padding-top: 1.5rem; }
  .bl25 ol li,
  .bl25 ul li {
    padding-bottom: 0.75rem; }
    .bl25 ol li:last-child,
    .bl25 ul li:last-child {
      padding-bottom: 0; }
  .bl25 ol {
    counter-reset: item; }
    .bl25 ol li {
      padding-left: 2.25rem; }
    .bl25 ol li::before {
      content: counter(item);
      counter-increment: item;
      display: inline-block;
      font-size: 1.35rem;
      font-weight: 300;
      line-height: 0.75rem;
      margin-left: -2.25rem;
      position: relative;
      top: -4px;
      vertical-align: text-bottom;
      width: 2.25rem; }
  .bl25 ul li {
    padding-left: 1.4rem; }
    .bl25 ul li::before {
      content: "\2022";
      display: inline-block;
      font-size: 1.125rem;
      line-height: 0.75rem;
      margin-left: -1.5rem;
      width: 1.5rem; }
  .bl25 > *:last-child {
    padding-bottom: 3.75rem; }
  .bl25 i {
    font-style: italic; }
  .bl25 u {
    text-decoration: underline; }
  .bl25 b {
    font-weight: 700; }
  .bl25 .code-inline {
    -webkit-box-decoration-break: clone;
            box-decoration-break: clone;
    background-color: #657786;
    border-radius: 0.24975rem;
    color: #FFFFFF;
    font-size: 0.95em;
    letter-spacing: 0.75px;
    padding-bottom: 0.1875rem;
    padding-left: 0.24975rem;
    padding-top: 0.1245rem;
    padding-right: 0.24975rem; }
  .bl25 .footnote {
    font-size: 0.75rem; }

/* Archive post type styles */
.bl25 h4,
.bl25 h5 {
  color: #14171A; }

.bl25 p:empty {
  padding: 0; }

.bl25 .align-left {
  text-align: left; }

.bl25 .align-center {
  text-align: center; }

.bl25 .align-right {
  text-align: right; }

.bl25 img {
  width: 100%;
  height: auto; }

.bl25 pre {
  margin-bottom: 1.5rem;
  word-wrap: break-word;
  word-break: break-word;
  white-space: normal; }

.bl25 img.align-center,
.bl25 img.align-right {
  display: block;
  margin-left: auto;
  margin-right: auto; }

.bl25 em {
  font-style: italic; }

.bl25 iframe.twitter-tweet-rendered {
  margin-left: auto;
  margin-right: auto; }

.bl25 .video-youtube {
  height: 0;
  margin-bottom: 1.5rem;
  padding-bottom: 56.25%;
  position: relative; }
  .bl25 .video-youtube iframe {
    height: 100%;
    position: absolute; }

.bl25 .g-timeline,
.bl25 .g-tweet {
  font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: 400;
  font-size: 1.5rem;
  line-height: 1.5rem;
  letter-spacing: 0.015rem;
  margin: 0;
  padding: 0 0 0rem 0;
  padding-bottom: 1.5rem; }
  @media (min-width: 768px) {
    .bl25 .g-timeline,
    .bl25 .g-tweet {
      font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-weight: 400;
      font-size: 1.5rem;
      line-height: 1.5rem;
      letter-spacing: 0.015rem;
      margin: 0;
      padding: 0 0 0rem 0; } }
  @media (min-width: 768px) {
    .bl25 .g-timeline,
    .bl25 .g-tweet {
      padding-bottom: 1.5rem; } }

.bl25 blockquote {
  padding-bottom: 3rem;
  position: relative;
  padding-left: 30px; }
  @media (min-width: 480px) and (max-width: 767px) {
    .bl25 blockquote {
      padding-left: 0; } }
  @media (max-width: 479px) {
    .bl25 blockquote {
      padding-left: 0; } }
  .bl25 blockquote > p {
    font-size: 1.5rem;
    font-weight: 400;
    line-height: 1.5em;
    letter-spacing: 0.015rem;
    padding-bottom: 3rem;
    position: relative; }
    @media (max-width: 479px) {
      .bl25 blockquote > p {
        line-height: 1.25em;
        padding-left: 0; } }
    .bl25 blockquote > p::before, .bl25 blockquote > p::after {
      font-weight: 700;
      font-size: 6rem;
      line-height: 6rem;
      color: #CCD6DD; }
    .bl25 blockquote > p::before {
      content: "\201C";
      position: absolute;
      left: -4px;
      top: -30px;
      -webkit-transform: translateX(-100%);
              transform: translateX(-100%); }
      @media (min-width: 480px) and (max-width: 767px) {
        .bl25 blockquote > p::before {
          left: -5px;
          top: -54px;
          -webkit-transform: inherit;
                  transform: inherit; } }
      @media (max-width: 479px) {
        .bl25 blockquote > p::before {
          left: -5px;
          top: -54px;
          -webkit-transform: inherit;
                  transform: inherit; } }
    .bl25 blockquote > p::after {
      content: "\201D";
      margin-left: 4px;
      position: absolute; }
      @media (min-width: 480px) and (max-width: 767px) {
        .bl25 blockquote > p::after {
          right: 10px;
          top: calc(100% - 3.25rem); } }
      @media (max-width: 479px) {
        .bl25 blockquote > p::after {
          right: 10px;
          top: calc(100% - 3.25rem); } }
  .bl25 blockquote p + small {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.5rem;
    letter-spacing: 0rem;
    margin: 0;
    padding: 0 0 0rem 0;
    padding-bottom: 0.75rem; }
    @media (min-width: 768px) {
      .bl25 blockquote p + small {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 1.5rem;
        line-height: 1.5rem;
        letter-spacing: 0rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
    @media (max-width: 479px) {
      .bl25 blockquote p + small {
        padding-left: 30px; } }
    .bl25 blockquote p + small::before {
      content: "\2014";
      position: absolute;
      left: 0; }
  .bl25 blockquote p + small cite {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 400;
    font-size: 0.87rem;
    line-height: 1.5rem;
    letter-spacing: 0.025rem;
    margin: 0;
    padding: 0 0 0rem 0;
    display: block;
    padding-top: 0.75rem; }
    @media (min-width: 768px) {
      .bl25 blockquote p + small cite {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 400;
        font-size: 0.87rem;
        line-height: 1.5rem;
        letter-spacing: 0.025rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
    @media (min-width: 768px) and (max-width: 1279px) {
      .bl25 blockquote p + small cite {
        padding-top: 0.75rem; } }
    @media (max-width: 479px) {
      .bl25 blockquote p + small cite {
        padding-left: 30px; } }

.bl25 p + blockquote {
  padding-top: 3rem; }
  @media (max-width: 479px) {
    .bl25 p + blockquote > p::before {
      padding-top: 0; } }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.c15-column-container .column {
  min-height: 1px;
  width: 100%;
  float: right;
  margin-right: 0; }
  .c15-column-container .column.last {
    float: right;
    margin-right: 0; }

@media (min-width: 768px) {
  .c15-column-container .column-1 {
    width: 6.77966%;
    float: left;
    margin-right: 1.69492%; } }

.c15-column-container .column-2 {
  width: 15.25424%;
  float: left;
  margin-right: 1.69492%; }

@media (min-width: 768px) {
  .c15-column-container .column-3 {
    width: 23.72881%;
    float: left;
    margin-right: 1.69492%; } }

@media (min-width: 768px) {
  .c15-column-container .column-4 {
    width: 32.20339%;
    float: left;
    margin-right: 1.69492%; } }

.c15-column-container .column-5 {
  width: 40.67797%;
  float: left;
  margin-right: 1.69492%; }

@media (min-width: 768px) {
  .c15-column-container .column-6 {
    width: 49.15254%;
    float: left;
    margin-right: 1.69492%; }
    .c15-column-container .column-6 .container {
      margin: 0; } }

.c15-column-container .column-7 {
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0; }
  @media (min-width: 768px) {
    .c15-column-container .column-7 {
      width: 57.62712%;
      float: left;
      margin-right: 1.69492%; }
      .c15-column-container .column-7 .container {
        margin: 0; } }

.c15-column-container .column-8 {
  width: 66.10169%;
  float: left;
  margin-right: 1.69492%; }

.c15-column-container .column-9 {
  width: 74.57627%;
  float: left;
  margin-right: 1.69492%; }

.c15-column-container .column-10 {
  width: 83.05085%;
  float: left;
  margin-right: 1.69492%; }

.c15-column-container .column-11 {
  width: 91.52542%;
  float: left;
  margin-right: 1.69492%; }

.c15-column-container .column-12 {
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0; }

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX21peGluLnNjc3M/ZDI4NCoqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2Nzcz8zZjQ4KioqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9zdHJ1Y3R1cmUvYmwxOC1sZWZ0LXJhaWwtYmxvZy1jb250YWluZXIvd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcmVtLnNjc3M/Y2Y3MSoqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzP2IyMGUqKioiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2RpcmVjdGlvbi5zY3NzPzE4ZWMqKioiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2Nzcz8yODVjKioqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvY29sb3JzLmpzb24/YmRlYioqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvc3RydWN0dXJlL2JsMjUtYmxvZy1taWdyYXRpb24taHRtbC93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL3N0cnVjdHVyZS9ibDI1LWJsb2ctbWlncmF0aW9uLWh0bWwvd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svY29yZS9jb21wb25lbnRzL2Jsb2ctYm9keS5zY3NzPzdiMGYiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9jb3JlL3N0eWxlL190eXBlLnNjc3M/MzE3NSIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb3JlL3ZhcmlhYmxlcy9tb3Rpb24uanNvbj85YzFkKioqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvdHlwb2dyYXBoeS5qc29uPzBmNjcqKioiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL3N0cnVjdHVyZS9jMTUtY29sdW1uLWNvbnRhaW5lci93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3Jvd3Muc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBeUJGOzs7OztFQUtFO0FBYUY7O0VBRUU7QUFPRjs7Ozs7Ozs7Ozs7OztFQWFFO0FDbkVFO0VDNUNKO0lBR00scUJBQWM7SUFBZCxxQkFBYztJQUFkLGNBQWMsRUFFakI7O0FBTEg7RUFPSSxnQkFBZ0I7RUNNaEIsWUN3SW9CO0VEeElwQixhRUF1RTtFRkF2RSxnQkNrRm9CLEVGdEZyQjs7QURtQ0M7RUM1Q0o7SUNhSSxpQkN3SW9CO0lEeElwQixZRUE0RDtJRkE1RCx1Qkc0RHdCO0lKNUR0Qiw2QkFBUztRQUFULGtCQUFTO1lBQVQsU0FBUyxFQUVaOztBRDZCQztFQzVDSjtJQ2FJLGlCQ3dJb0I7SUR4SXBCLFlFQTREO0lGQTVELHVCRzREd0I7SUp0RHRCLDZCQUNEO1FBREMsa0JBQ0Q7WUFEQyxTQUNELEVBQ0Y7O0FEdUJDO0VDNUNKO0lDYUksaUJDd0lvQjtJRHhJcEIsYUVBdUU7SUZBdkUsZ0JDa0ZvQjtJRnRFbEIsNkJBQVM7UUFBVCxrQkFBUztZQUFULFNBQVMsRUFFWjs7QUFHSDtFQUNFLG9CQUFvQjtFQUNwQixhQUFhO0VBQ2IsOEJLdkNpZSxFTDRDbGU7RURNRztJQ2RKO01BTU0sY0FBYyxFQUVuQjtBTTVDRCxpQkFBaUI7QUNBakI7Ozs7R0FJRztBVCtCSDs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUF5QkY7Ozs7O0VBS0U7QUFhRjs7RUFFRTtBQU9GOzs7Ozs7Ozs7Ozs7O0VBYUU7QVVySEY7Ozs7R0FJRztBVitCSDs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUF5QkY7Ozs7O0VBS0U7QUFhRjs7RUFFRTtBQU9GOzs7Ozs7Ozs7Ozs7O0VBYUU7QUFsRkY7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBeUJGOzs7OztFQUtFO0FBYUY7O0VBRUU7QUFPRjs7Ozs7Ozs7Ozs7OztFQWFFO0FXakhGLG1DQUFtQztBQUNuQztFQUNFLHNDQUFzQztFQUN0QyxxR0FBTztFQUNQLHNkQUc4Rzs7QUFFaEgsbUNBQW1DO0FBQ25DO0VBQ0UsaUNBQWlDO0VBQ2pDLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIscUdBQU87RUFDUCxzZEFHMEc7O0FBRTVHLG9DQUFvQztBQUNwQztFQUNFLGlDQUFpQztFQUNqQyxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHFHQUFRO0VBQ1Isc2RBRytHOztBQUVqSCxpQ0FBaUM7QUFDakM7RUFDRSxpQ0FBaUM7RUFDakMsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixxR0FBTztFQUNQLHNkQUc4Rzs7QUFFaEgsb0NBQW9DO0FBQ3BDO0VBQ0UsaUNBQWlDO0VBQ2pDLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIscUdBQU87RUFDUCxzZEFHOEc7O0FBRWhILG9DQUFvQztBQUNwQztFQUNFLGlDQUFpQztFQUNqQyxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHFHQUFPO0VBQ1Asc2RBRzhHOztBQUVoSCxtQ0FBbUM7QUFDbkM7RUFDRSxpQ0FBaUM7RUFDakMsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixxR0FBTztFQUNQLHNkQUc4Rzs7QUQ1RDVHO0VBRUksZUFBTztFQUNQLHNCQUFzQjtFQUN0QixtQ0VyQm1ELEVGc0JwRDs7QUFMSDs7RUFRSSxlSHpCOEI7RUcwQjlCLGdCQUFnQixFQUNqQjs7QUFWSDs7RUFjSSxlQUFPLEVBQ1I7O0FBZkg7RUFpQkksMEJIbEMrVTtFR21DL1UsZUFBZSxFQUNoQjs7QUFuQkg7RUFpQkksMEJIbEMrVTtFR21DL1UsZUFBZSxFQUNoQjs7QUFuQkg7RUFFSSxlQUFPO0VBQ1Asc0JBQXNCO0VBQ3RCLG1DRXJCbUQsRUZzQnBEOztBQUxIOztFQVFJLGVIekI4QztFRzBCOUMsZ0JBQWdCLEVBQ2pCOztBQVZIOztFQWNJLGVBQU8sRUFDUjs7QUFmSDtFQWlCSSwwQkhsQytWO0VHbUMvVixlQUFlLEVBQ2hCOztBQW5CSDtFQWlCSSwwQkhsQytWO0VHbUMvVixlQUFlLEVBQ2hCOztBQW5CSDtFQUVJLGVBQU87RUFDUCxzQkFBc0I7RUFDdEIsbUNFckJtRCxFRnNCcEQ7O0FBTEg7O0VBUUksZUh6QjZEO0VHMEI3RCxnQkFBZ0IsRUFDakI7O0FBVkg7O0VBY0ksZUFBTyxFQUNSOztBQWZIO0VBaUJJLDBCSGxDOFc7RUdtQzlXLGVBQWUsRUFDaEI7O0FBbkJIO0VBaUJJLDBCSGxDOFc7RUdtQzlXLGVBQWUsRUFDaEI7O0FBbkJIO0VBRUksZUFBTztFQUNQLHNCQUFzQjtFQUN0QixtQ0VyQm1ELEVGc0JwRDs7QUFMSDs7RUFRSSxlSHpCMkU7RUcwQjNFLGdCQUFnQixFQUNqQjs7QUFWSDs7RUFjSSxlQUFPLEVBQ1I7O0FBZkg7RUFpQkksMEJIbEM0WDtFR21DNVgsZUFBZSxFQUNoQjs7QUFuQkg7RUFpQkksMEJIbEM0WDtFR21DNVgsZUFBZSxFQUNoQjs7QUFuQkg7RUFFSSxlQUFPO0VBQ1Asc0JBQXNCO0VBQ3RCLG1DRXJCbUQsRUZzQnBEOztBQUxIOztFQVFJLGVIekIyRjtFRzBCM0YsZ0JBQWdCLEVBQ2pCOztBQVZIOztFQWNJLGVBQU8sRUFDUjs7QUFmSDtFQWlCSSwwQkhsQzRZO0VHbUM1WSxlQUFlLEVBQ2hCOztBQW5CSDtFQWlCSSwwQkhsQzRZO0VHbUM1WSxlQUFlLEVBQ2hCOztBQW5CSDtFQUVJLGVBQU87RUFDUCxzQkFBc0I7RUFDdEIsbUNFckJtRCxFRnNCcEQ7O0FBTEg7O0VBUUksZUh6QnlHO0VHMEJ6RyxnQkFBZ0IsRUFDakI7O0FBVkg7O0VBY0ksZUFBTyxFQUNSOztBQWZIO0VBaUJJLDBCSGxDMFo7RUdtQzFaLGVBQWUsRUFDaEI7O0FBbkJIO0VBaUJJLDBCSGxDMFo7RUdtQzFaLGVBQWUsRUFDaEI7O0FBSUw7RUEyR0U7Ozs7TUFJRSxFQWlCSDtFQWhJRDtJVmRBLGlGQUFpRjtJQUNqRixpQmEzQnVwQjtJYjRCdnBCLGtCQU5xQjtJQU9yQixvQkFQcUI7SUFRckIscUJBQWdCO0lBQ2hCLFVBQVU7SUFDVixvQkFBMEQ7SVVjdEQsZUg5Q3NiO0lHK0N0YixrQkFBa0I7SUFDbEIsd0JWMUJpQjtJVTJCakIscUJWM0JpQixFVTRCbEI7RUFWSDtJQWFJLGVIckRzYixFR3NEdmI7RUFkSDs7SUFrQkkscUJWcENpQixFVXFDbEI7RUFuQkg7SUFzQkksdUJWeENpQixFVXlDbEI7RUF2Qkg7O0lBMkJJLG9CVjdDaUIsRVU4Q2xCO0VBNUJIO0lBK0JJLHFCVmpEaUIsRVVrRGxCO0VBaENIOztJQW9DSSxpQkFBaUI7SUFDakIscUJWdkRpQixFVXdEbEI7RUF0Q0g7O0lBMENJLG9CVjVEaUIsRVU2RGxCO0VBM0NIOztJQStDSSx3QlZqRWlCLEVVc0VsQjtJQXBESDs7TUFrRE0sa0JBQWtCLEVBQ25CO0VBbkRMO0lBdURJLG9CQUFvQixFQW1CckI7SUExRUg7TUEwRE0sc0JWNUVlLEVVNkVoQjtJQTNETDtNQThETSx1QkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLHNCQUFzQjtNQUN0QixtQlZuRmU7TVVvRmYsaUJBQWlCO01BQ2pCLHFCVnJGZTtNVXNGZixzQlZ0RmU7TVV1RmYsbUJBQW1CO01BQ25CLFVBQVU7TUFDViw0QkFBNEI7TUFDNUIsZVYxRmUsRVUyRmhCO0VBekVMO0lBK0VJLHFCQUFxQixFQVV0QjtJQXpGSDtNQWtGTSxpQkFBUztNQUNULHNCQUFzQjtNQUN0QixvQlZ0R2U7TVV1R2YscUJWdkdlO01Vd0dmLHFCQUFxQjtNQUNyQixjVnpHZSxFVTBHaEI7RUF4Rkw7SUE0Rkksd0JWOUdpQixFVStHbEI7RUE3Rkg7SUFnR0ksbUJBQW1CLEVBQ3BCO0VBakdIO0lBb0dJLDJCQUEyQixFQUM1QjtFQXJHSDtJQXdHSSxpQkFBaUIsRUFDbEI7RUF6R0g7SUFpSEksb0NBQTRCO1lBQTVCLDRCQUE0QjtJQUM1QiwwQkgxSnljO0lHMkp6YywwQlZySWlCO0lVc0lqQixlSDVKc2lCO0lHNkp0aUIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQlZ6SWlCO0lVMElqQix5QlYxSWlCO0lVMklqQix1QlYzSWlCO0lVNElqQiwwQlY1SWlCLEVVNklsQjtFQTNISDtJQThISSxtQlZoSmlCLEVVaUpsQjs7QUR6SkwsOEJBQThCO0FBRTlCOztFQUdJLGVGbkJ3YixFRW9CemI7O0FBSkg7RUFPSSxXQUFXLEVBQ1o7O0FBUkg7RUFXSSxpQkFBaUIsRUFDbEI7O0FBWkg7RUFlSSxtQkFBbUIsRUFDcEI7O0FBaEJIO0VBbUJJLGtCQUFrQixFQUNuQjs7QUFwQkg7RUF1QkksWUFBWTtFQUNaLGFBQWEsRUFDZDs7QUF6Qkg7RUE2Qkksc0JUdkJtQjtFU3dCbkIsc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2QixvQkFBb0IsRUFDckI7O0FBakNIOztFQXNDSSxlQUFlO0VBQ2Ysa0JBQWtCO0VBQ2xCLG1CQUFtQixFQUNwQjs7QUF6Q0g7RUE0Q0ksbUJBQW1CLEVBQ3BCOztBQTdDSDtFQWdESSxrQkFBa0I7RUFDbEIsbUJBQW1CLEVBQ3BCOztBQWxESDtFQXFESSxVQUFVO0VBQ1Ysc0JUaERtQjtFU2lEbkIsdUJBQXVCO0VBQ3ZCLG1CQUFtQixFQU1wQjtFQTlESDtJQTJETSxhQUFhO0lBQ2IsbUJBQW1CLEVBQ3BCOztBQTdETDs7RVRVRSxpRkFBaUY7RUFDakYsaUJhM0JtdUI7RWI0Qm51QixrQkFOcUI7RUFPckIsb0JBUHFCO0VBUXJCLHlCQUFnQjtFQUNoQixVQUFVO0VBQ1Ysb0JBQTBEO0VTbUR4RCx1QlQ3RG1CLEVTa0VwQjtFUnRDQztJUWxDSjs7TVRVRSxpRkFBaUY7TUFDakYsaUJhM0I2ekQ7TWI0Qjd6RCxrQkFOcUI7TUFPckIsb0JBUHFCO01BUXJCLHlCQUFnQjtNQUNoQixVQUFVO01BQ1Ysb0JBQTBELEVTd0R6RDtFUnRDQztJUWxDSjs7TUFzRU0sdUJUaEVpQixFU2tFcEI7O0FBeEVIO0VBNEVJLHFCVHRFbUI7RVN1RW5CLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFnR3BCO0VSNUlDO0lRbENKO01BaUZNLGdCQUFnQixFQTZGbkI7RVI1SUM7SVFsQ0o7TUFxRk0sZ0JBQWdCLEVBeUZuQjtFQTlLSDtJQXlGTSxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQix5QkFBeUI7SUFDekIscUJUdkZpQjtJU3dGakIsbUJBQW1CLEVBa0RwQjtJUjlHRDtNUWxDSjtRQWlHUSxvQkFBb0I7UUFDcEIsZ0JBQWdCLEVBOENuQjtJQWhKTDtNQXVHUSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixlRjFIcWYsRUUySHRmO0lBM0dQO01BOEdRLGlCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsV0FBVztNQUNYLFdBQVc7TUFDWCxxQ0FBcUI7Y0FBckIsNkJBQXFCLEVBYXRCO01SN0ZIO1FRbENKO1VBcUhVLFdBQVc7VUFDWCxXQUFXO1VBQ1gsMkJBQW1CO2tCQUFuQixtQkFBbUIsRUFRdEI7TVI3Rkg7UVFsQ0o7VUEySFUsV0FBVztVQUNYLFdBQVc7VUFDWCwyQkFBbUI7a0JBQW5CLG1CQUFtQixFQUV0QjtJQS9IUDtNQWtJUSxpQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLG1CQUFtQixFQVdwQjtNUjdHSDtRUWxDSjtVQXVJVSxZQUFZO1VBQ1osMEJBQVMsRUFPWjtNUjdHSDtRUWxDSjtVQTRJVSxZQUFZO1VBQ1osMEJBQVMsRUFFWjtFQS9JUDtJVFVFLGlGQUFpRjtJQUNqRixpQmEzQnVwQjtJYjRCdnBCLGtCQU5xQjtJQU9yQixvQkFQcUI7SUFRckIscUJBQWdCO0lBQ2hCLFVBQVU7SUFDVixvQkFBMEQ7SVNvSXRELHdCVDlJaUIsRVN5SmxCO0lSN0hEO01RbENKO1FUVUUsaUZBQWlGO1FBQ2pGLGlCYTNCaXZEO1FiNEJqdkQsa0JBTnFCO1FBT3JCLG9CQVBxQjtRQVFyQixxQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLG9CQUEwRCxFUytJdkQ7SVI3SEQ7TVFsQ0o7UUF1SlEsbUJBQW1CLEVBUXRCO0lBL0pMO01BMkpRLGlCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsUUFBUSxFQUNUO0VBOUpQO0lUVUUsaUZBQWlGO0lBQ2pGLGlCYTNCOGhDO0liNEI5aEMsbUJBTnFCO0lBT3JCLG9CQVBxQjtJQVFyQix5QkFBZ0I7SUFDaEIsVUFBVTtJQUNWLG9CQUEwRDtJU21KdEQsZUFBZTtJQUNmLHFCVDlKaUIsRVN1S2xCO0lSM0lEO01RbENKO1FUVUUsaUZBQWlGO1FBQ2pGLGlCYTNCd25FO1FiNEJ4bkUsbUJBTnFCO1FBT3JCLG9CQVBxQjtRQVFyQix5QkFBZ0I7UUFDaEIsVUFBVTtRQUNWLG9CQUEwRCxFUzZKdkQ7SVIzSUQ7TVFsQ0o7UUF1S1EscUJUaktlLEVTdUtsQjtJUjNJRDtNUWxDSjtRQTJLUSxtQkFBbUIsRUFFdEI7O0FBN0tMO0VBaUxJLGtCVDNLbUIsRVNtTHBCO0VSdkpDO0lRbENKO01Bc0xRLGVBQWUsRUFFbEI7QVRyS0w7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBeUJGOzs7OztFQUtFO0FBYUY7O0VBRUU7QUFPRjs7Ozs7Ozs7Ozs7OztFQWFFO0FjaEhGO0VBRUksZ0JBQWdCO0VYWWhCLFlDd0lvQjtFRHhJcEIsYUVBdUU7RUZBdkUsZ0JDa0ZvQixFVXpGckI7RUFQSDtJWGNJLGFFQXVFO0lGQXZFLGdCWWlEc0MsRUR6RHJDOztBYnVDRDtFYTdDSjtJWGNJLGdCQ3dJb0I7SUR4SXBCLFlFQTREO0lGQTVELHVCRzREd0IsRVE5RHpCOztBQVpIO0VYY0ksaUJDd0lvQjtFRHhJcEIsWUVBNEQ7RUZBNUQsdUJHNER3QixFUTNEekI7O0FiOEJDO0VhN0NKO0lYY0ksaUJDd0lvQjtJRHhJcEIsWUVBNEQ7SUZBNUQsdUJHNER3QixFUXREekI7O0FieUJDO0VhN0NKO0lYY0ksaUJDd0lvQjtJRHhJcEIsWUVBNEQ7SUZBNUQsdUJHNER3QixFUWpEekI7O0FBekJIO0VYY0ksaUJDd0lvQjtFRHhJcEIsWUVBNEQ7RUZBNUQsdUJHNER3QixFUTlDekI7O0FiaUJDO0VhN0NKO0lYY0ksaUJDd0lvQjtJRHhJcEIsWUVBNEQ7SUZBNUQsdUJHNER3QixFUXRDekI7SUFwQ0g7TUFpQ1EsVUFBVSxFQUNYOztBQWxDUDtFWGNJLFlDd0lvQjtFRHhJcEIsWUVBNEQ7RUZBNUQsZUMrRXFCO0VEL0VyQixnQkNrRm9CLEVVbkRyQjtFYkFDO0lhN0NKO01YY0ksaUJDd0lvQjtNRHhJcEIsWUVBNEQ7TUZBNUQsdUJHNER3QixFUTdCekI7TUE3Q0g7UUEwQ1EsVUFBVSxFQUNYOztBQTNDUDtFWGNJLGlCQ3dJb0I7RUR4SXBCLFlFQTREO0VGQTVELHVCRzREd0IsRVExQnpCOztBQWhESDtFWGNJLGlCQ3dJb0I7RUR4SXBCLFlFQTREO0VGQTVELHVCRzREd0IsRVF2QnpCOztBQW5ESDtFWGNJLGlCQ3dJb0I7RUR4SXBCLFlFQTREO0VGQTVELHVCRzREd0IsRVFwQnpCOztBQXRESDtFWGNJLGlCQ3dJb0I7RUR4SXBCLFlFQTREO0VGQTVELHVCRzREd0IsRVFqQnpCOztBQXpESDtFWGNJLFlDd0lvQjtFRHhJcEIsWUVBNEQ7RUZBNUQsZUMrRXFCO0VEL0VyQixnQkNrRm9CLEVVcENyQiIsImZpbGUiOiJjc3Mvc3RydWN0dXJlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb24nO1xuQGltcG9ydCAnLi4vdmFyaWFibGVzL2NvbG9ycy5qc29uJztcblxuQGltcG9ydCAnLi9ncmlkJztcblxuLy8kYmFzZWxpbmVVbml0OiBtYXAtZ2V0KG1hcC1nZXQoJGdyaWQsIGRlc2t0b3ApLCBiYXNlbGluZSk7XG4kYmFzZWxpbmVVbml0OiAwLjc1cmVtOyAvLyAxMnB4XG5cbkBtaXhpbiByZXNwb25kLXRvKCRzaXplKSB7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgJHNpemUpKSB7XG4gICAgQGNvbnRlbnRcbiAgfVxufVxuXG5AbWl4aW4gdmVydGljYWwtYWxpZ24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbkBmdW5jdGlvbiBiYXNlbGluZSgkbXVsdGlwbGllcjogMSkge1xuICBAcmV0dXJuICRiYXNlbGluZVVuaXQgKiAkbXVsdGlwbGllcjtcbn1cblxuQG1peGluIHR5cGVTdHlsZXMoJHR5cGVmYWNlKSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IG1hcC1nZXQoJHR5cGVmYWNlLCB3ZWlnaHQpO1xuICBmb250LXNpemU6IGJhc2VsaW5lKG1hcC1nZXQoJHR5cGVmYWNlLCBzaXplKSk7XG4gIGxpbmUtaGVpZ2h0OiBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgbGluZS1oZWlnaHQpKTtcbiAgbGV0dGVyLXNwYWNpbmc6ICN7bWFwLWdldCgkdHlwZWZhY2UsIHRyYWNraW5nKSAvIDEwMDB9cmVtO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMCBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgbWFyZ2luLWJvdHRvbSkpIDA7XG59XG5cbi8qXG5cbmZvbnQgbWl4aW5cbiRrZXk6IHR5cGUgc3R5bGUga2V5IChleC4gYm9sZC0yNCBvciByb21hbi0yNCkuIFNlZSB0eXBvZ3JhcGh5Lmpzb24gZm9yIG9wdGlvbnMuXG4kYnJlYWtwb2ludDogKG9wdGlvbmFsKSBicmVha3BvaW50IGtleSAoZXguIGZ1bGwgb3IgdGFibGV0KS4gU2VlIGJyZWFrcG9pbnRzLmpzb24gZm9yIG9wdGlvbnMuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG5cbldoZW4gdXNlZCB3aXRob3V0IGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgdGhpcyBtaXhpbiB3aWxsIHByb2R1Y2UgZm9udCBwcm9wZXJ0aWVzXG53cmFwcGVkIGluIG1lZGlhIHF1ZXJpZXMuIEl0J3MgYSBzaW1wbGUgd2F5IHRvIGFwcGx5IGZ1bGx5IHJlc3BvbnNpdmUgdHlwZSBzdHlsZXNcbnRvIGEgY2xhc3Mgb3IgZWxlbWVudC5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0LCBmdWxsKTtcblxuSWYgYSBicmVha3BvaW50IGlzIHNwZWNpZmllZCB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgc2V0IG9mIGZvbnQgcHJvcGVydGllc1xudGhhdCBhcmUgTk9UIHdyYXBwZWQgaW4gYW55IG1lZGlhIHF1ZXJpZXMuXG5cbiovXG5cbkBtaXhpbiBmb250KCRrZXksICRicmVha3BvaW50OiBudWxsKSB7XG4gIEBpZiAkYnJlYWtwb2ludCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludCkge1xuICAgICAgJHJlc3BvbnNpdmVUeXBlOiBtYXAtZ2V0KG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50KSwgJGtleSk7XG4gICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCRyZXNwb25zaXZlVHlwZSk7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdHlwZWZhY2U6IG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksICRrZXkpO1xuICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMoJHR5cGVmYWNlKTtcbiAgICBAZWFjaCAkYnJlYWtwb2ludEtleSwgJGJyZWFrcG9pbnRWYWwgaW4gJGJyZWFrcG9pbnRzIHtcbiAgICAgIEBpZiBtYXAtaGFzLWtleShtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnRLZXkpIHtcblxuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQoJGJyZWFrcG9pbnRWYWwpIHtcbiAgICAgICAgICAkcmVzcG9uc2l2ZVR5cGU6IG1hcC1nZXQobWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnRLZXkpLCAka2V5KTtcbiAgICAgICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCRyZXNwb25zaXZlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKlxuXG4gIGNvbG9yKHllbGxvdykgc2luZ2xlIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGRhcmsgY29sb3JzXG4gIGNvbG9yKGxpZ2h0LCB5ZWxsb3cpIHJldHVybnMgbGlnaHQgeWVsbG93XG5cbiovXG5AZnVuY3Rpb24gY29sb3IoJGNvbG9yLWNhdGVnb3J5LCAkY29sb3ItbmFtZTpudWxsKSB7XG4gIC8vIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbnVsbCB0aGVyZSBzaG91bGQgYmUgYSBjb2xvciBhcyB0aGUgZmlyc3QgYXJndW1lbnRcbiAgQGlmICgkY29sb3ItbmFtZSAhPSBudWxsKSB7XG4gICAgLy8gbWFwIGluY2VwdGlvblxuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRjb2xvci1jYXRlZ29yeSksICRjb2xvci1uYW1lKTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgZGFyayksICRjb2xvci1uYW1lKTtcbiAgfVxuXG4gIEB3YXJuIFwiQ29sb3IgJyN7JGNvbG9yLWNhdGVnb3J5fScgJyN7JGNvbG9yLW5hbWV9JyBub3QgZm91bmQgaW4gJGNvbG9yc1wiO1xufVxuXG4vKiByb3VuZGVkIGNvcm5lcnNcbiAgdXNhZ2U6IGJvcmRlci1yYWRpdXMoIGJhc2VsaW5lKCBuICkgKVxuKi9cbkBtaXhpbiBib3JkZXItcmFkaXVzKCRyYWRpdXMpIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgLyogc3RvcHMgYmcgY29sb3IgZnJvbSBsZWFraW5nIG91dHNpZGUgdGhlIGJvcmRlcjogKi9cbn1cblxuLypcblxuaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9zYXNzL21haW50YWluLWFzcGVjdC1yYXRpby1taXhpbi9cblxuVGhlIG1peGluIGFzc3VtZXMgeW91J2xsIGJlIG5lc3RpbmcgYW4gZWxlbWVudCB3aXRoIHRoZSBjbGFzcyBvZiBjb250ZW50IGluc2lkZSB5b3VyIGluaXRpYWwgYmxvY2tcblxuPGRpdiBjbGFzcz1cInNpeHRlZW4tbmluZVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgIGluc2VydCBjb250ZW50IGhlcmVcbiAgICB0aGlzIHdpbGwgbWFpbnRhaW4gYSAxNjo5IGFzcGVjdCByYXRpb1xuICA8L2Rpdj5cbjwvZGl2PlxuXG4qL1xuXG5AbWl4aW4gYXNwZWN0LXJhdGlvKCR3aWR0aCwgJGhlaWdodCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICY6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctdG9wOiAoJGhlaWdodCAvICR3aWR0aCkgKiAxMDAlO1xuICB9XG4gID4gLmNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9jb3JlL3N0eWxlL19taXhpbi5zY3NzXG4gKiovIiwiLy8gQnJlYWtwb2ludCBJbnRlZ3JhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4kc3VzeS1tZWRpYTogKCkgIWRlZmF1bHQ7XG4kc3VzeS1tZWRpYS1mYWxsYmFjazogZmFsc2UgIWRlZmF1bHQ7XG5cbiRfc3VzeS1tZWRpYS1jb250ZXh0OiAoKTtcblxuXG4vLyBTdXN5IEJyZWFrcG9pbnRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hhbmdlIGdyaWRzIGF0IGRpZmZlcmVudCBtZWRpYSBxdWVyeSBicmVha3BvaW50cy5cbi8vIC0gJHF1ZXJ5ICAgICA6IDxtaW4td2lkdGg+IFs8bWF4LXdpZHRoPl0gfCA8cHJvcGVydHk+IDx2YWx1ZT4gfCA8bWFwPlxuLy8gLSAkbGF5b3V0ICAgIDogPHNldHRpbmdzPlxuLy8gLSAkbm8tcXVlcnkgIDogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktYnJlYWtwb2ludChcbiAgJHF1ZXJ5LFxuICAkbGF5b3V0OiBmYWxzZSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtcm91dGVyKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgQGlmICRsYXlvdXQge1xuICAgICAgQGluY2x1ZGUgd2l0aC1sYXlvdXQoJGxheW91dCkge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN1c3kgTWVkaWFcbi8vIC0tLS0tLS0tLS1cbi8vIC0gJHF1ZXJ5OiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+XG4vLyAtICRuby1xdWVyeTogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktbWVkaWEoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gICRvbGQtY29udGV4dDogJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gICRuYW1lOiBpZihtYXAtaGFzLWtleSgkc3VzeS1tZWRpYSwgJHF1ZXJ5KSwgJHF1ZXJ5LCBudWxsKTtcbiAgJHF1ZXJ5OiBzdXN5LWdldC1tZWRpYSgkcXVlcnkpO1xuICAkcXVlcnk6IHN1c3ktcGFyc2UtbWVkaWEoJHF1ZXJ5KTtcblxuICBAaW5jbHVkZSBzdXN5LW1lZGlhLWNvbnRleHQoJHF1ZXJ5LCAkbmFtZSk7XG5cbiAgQGlmICRuby1xdWVyeSBhbmQgdHlwZS1vZigkbm8tcXVlcnkpICE9IHN0cmluZyB7XG4gICAgQGNvbnRlbnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBtZWRpYSAje3N1c3ktcmVuZGVyLW1lZGlhKCRxdWVyeSl9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgIEBpZiB0eXBlLW9mKCRuby1xdWVyeSkgPT0gc3RyaW5nIHtcbiAgICAgICN7JG5vLXF1ZXJ5fSAmIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRvbGQtY29udGV4dCwgJGNsZWFuOiB0cnVlKTtcbn1cblxuXG4vLyBNZWRpYSBSb3V0ZXJcbi8vIC0tLS0tLS0tLS0tLVxuLy8gUm91dCBtZWRpYSBhcmd1bWVudHMgdG8gdGhlIGNvcnJlY3QgbWl4aW4uXG5AbWl4aW4gc3VzeS1tZWRpYS1yb3V0ZXIoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYnJlYWtwb2ludCwgKG1peGluOiBicmVha3BvaW50KSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBzdXN5LW1lZGlhKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBVcGRhdGUgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gU2V0IHRoZSBuZXcgbWVkaWEgY29udGV4dFxuQG1peGluIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHF1ZXJ5LFxuICAkbmFtZTogbnVsbCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRxdWVyeTogbWFwLW1lcmdlKChuYW1lOiAkbmFtZSksICRxdWVyeSk7XG5cbiAgQGlmICRjbGVhbiB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6ICRxdWVyeSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkX3N1c3ktbWVkaWEtY29udGV4dDogbWFwLW1lcmdlKCRfc3VzeS1tZWRpYS1jb250ZXh0LCAkcXVlcnkpICFnbG9iYWw7XG4gIH1cbn1cblxuXG4vLyBNZWRpYSBDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIGZ1bGwgbWVkaWEgY29udGV4dCwgb3IgYSBzaW5nbGUgbWVkaWEgcHJvcGVydHkgKGUuZy4gbWluLXdpZHRoKVxuQGZ1bmN0aW9uIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHByb3BlcnR5OiBmYWxzZVxuKSB7XG4gIEBpZiAkcHJvcGVydHkge1xuICAgIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHByb3BlcnR5KTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiAkX3N1c3ktbWVkaWEtY29udGV4dDtcbiAgfVxufVxuXG5cbi8vIEdldCBNZWRpYVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuYW1lZCBtZWRpYS1xdWVyeSBmcm9tICRzdXN5LW1lZGlhLlxuLy8gLSAkbmFtZTogPGtleT5cbkBmdW5jdGlvbiBzdXN5LWdldC1tZWRpYShcbiAgJG5hbWVcbikge1xuICBAaWYgbWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRuYW1lKSB7XG4gICAgJG1hcC12YWx1ZTogbWFwLWdldCgkc3VzeS1tZWRpYSwgJG5hbWUpO1xuICAgIEBpZiAoJG5hbWUgPT0gJG1hcC12YWx1ZSkge1xuICAgICAgJG5hbWU6ICRtYXAtdmFsdWU7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbmFtZTogc3VzeS1nZXQtbWVkaWEoJG1hcC12YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmFtZTtcbn1cblxuXG4vLyBSZW5kZXIgTWVkaWFcbi8vIC0tLS0tLS0tLS0tLVxuLy8gQnVpbGQgYSBtZWRpYS1xdWVyeSBzdHJpbmcgZnJvbSB2YXJpb3VzIG1lZGlhIHNldHRpbmdzXG5AZnVuY3Rpb24gc3VzeS1yZW5kZXItbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRvdXRwdXQ6IG51bGw7XG4gIEBlYWNoICRwcm9wZXJ0eSwgJHZhbHVlIGluICRxdWVyeSB7XG4gICAgJHN0cmluZzogbnVsbDtcblxuICAgIEBpZiAkcHJvcGVydHkgPT0gbWVkaWEge1xuICAgICAgJHN0cmluZzogJHZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0cmluZzogJygjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfSknO1xuICAgIH1cblxuICAgICRvdXRwdXQ6IGlmKCRvdXRwdXQsICcjeyRvdXRwdXR9IGFuZCAjeyRzdHJpbmd9JywgJHN0cmluZyk7XG4gIH1cblxuICBAcmV0dXJuICRvdXRwdXQ7XG59XG5cblxuLy8gUGFyc2UgTWVkaWFcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gcGFyc2VkIG1lZGlhLXF1ZXJ5IHNldHRpbmdzIGJhc2VkIG9uIHNob3J0aGFuZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UtbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRtcTogbnVsbDtcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBtYXAge1xuICAgICRtcTogJHF1ZXJ5O1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBudW1iZXIge1xuICAgICRtcTogKG1pbi13aWR0aDogJHF1ZXJ5KTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbGlzdCBhbmQgbGVuZ3RoKCRxdWVyeSkgPT0gMiB7XG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09IG51bWJlciB7XG4gICAgICAkbXE6IChcbiAgICAgICAgbWluLXdpZHRoOiBtaW4oJHF1ZXJ5Li4uKSxcbiAgICAgICAgbWF4LXdpZHRoOiBtYXgoJHF1ZXJ5Li4uKSxcbiAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbXE6IChudGgoJHF1ZXJ5LCAxKTogbnRoKCRxdWVyeSwgMikpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJG1xOiAobWVkaWE6ICcjeyRxdWVyeX0nKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1xO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2Nzc1xuICoqLyIsIkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvZ3JpZC5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4uYmwxOC1sZWZ0LXJhaWwtYmxvZy1jb250YWluZXIge1xuICAubGVmdC1yYWlsLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gIH1cbiAgLmNvbHVtbiB7XG4gICAgbWluLWhlaWdodDogMXB4O1xuICAgIEBpbmNsdWRlIHNwYW4oMTIgbGFzdCk7XG4gIH1cbiAgLmNvbHVtbi00IHtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDQpO1xuICAgICAgb3JkZXI6IDE7XG4gICAgfVxuICB9XG4gIC5jb2x1bW4tNiB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig2KTtcbiAgICAgIG9yZGVyOiAyXG4gICAgfVxuICB9XG4gIC5jb2x1bW4tMiB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3BhbigyIGxhc3QpO1xuICAgICAgb3JkZXI6IDM7XG4gICAgfVxuICB9XG59XG5cbi5ibDE4X19ob3Jpem9udGFsLXJ1bGUge1xuICBtYXJnaW4tbGVmdDogLTYuNnZ3O1xuICB3aWR0aDogMTAwdnc7XG4gIGJvcmRlci10b3A6IHNvbGlkIDFweCBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcblxuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9zdHJ1Y3R1cmUvYmwxOC1sZWZ0LXJhaWwtYmxvZy1jb250YWluZXIvd2VicGFjay9pbmRleC5zY3NzXG4gKiovIiwiLy8gcmVtIFN1cHBvcnRcbi8vID09PT09PT09PT09XG5cbi8vIHJlbVxuLy8gLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3Igb3V0cHV0IGRpcmVjdGx5LlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktcmVtKFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gICRfcmVxczogKFxuICAgIHZhcmlhYmxlOiByaHl0aG0tdW5pdCByZW0td2l0aC1weC1mYWxsYmFjayxcbiAgICBtaXhpbjogcmVtLFxuICApO1xuICBAaWYgc3VzeS1zdXBwb3J0KHJlbSwgJF9yZXFzLCAkd2FybjogZmFsc2UpIGFuZCAkcmh5dGhtLXVuaXQgPT0gcmVtIHtcbiAgICBAaW5jbHVkZSByZW0oJHByb3AsICR2YWwpO1xuICB9IEBlbHNlIHtcbiAgICAjeyRwcm9wfTogJHZhbDtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3JlbS5zY3NzXG4gKiovIiwiLy8gU3BhbiBTeW50YXhcbi8vID09PT09PT09PT09XG5cbi8vIFNwYW4gW21peGluXVxuLy8gLS0tLS0tLS0tLS0tXG4vLyBTZXQgYSBzcGFubmluZyBlbGVtZW50IHVzaW5nIHNob3J0aGFuZCBzeW50YXguXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3Q6ICRzcGFuO1xuICAkc3BhbjogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRvdXRwdXQ6IHNwYW4tbWF0aCgkc3Bhbik7XG4gICRuZXN0aW5nOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRjbGVhcjogc3VzeS1nZXQoY2xlYXIsICRzcGFuKTtcblxuICAkYm94OiBzdXN5LWdldChib3gtc2l6aW5nLCAkc3Bhbik7XG4gICRjb250ZW50LWJveDogaWYoc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpICE9ICdib3JkZXItYm94JywgdHJ1ZSwgZmFsc2UpO1xuICAkYm94OiAkYm94IG9yIGlmKGlzLWluc2lkZSgkc3BhbikgYW5kICRjb250ZW50LWJveCwgYm9yZGVyLWJveCwgbnVsbCk7XG5cbiAgQGlmICRjbGVhciA9PSBicmVhayB7XG4gICAgQGluY2x1ZGUgYnJlYWs7XG4gIH0gQGVsc2UgaWYgJGNsZWFyID09IG5vYnJlYWsge1xuICAgIEBpbmNsdWRlIG5vYnJlYWs7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3BhbiwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTtcbiAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgQGlmIHZhbGlkLWNvbHVtbnMoJG5lc3RpbmcsIHNpbGVudCkge1xuICAgIEBpbmNsdWRlIG5lc3RlZCgkc3BhbikgeyBAY29udGVudDsgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBTcGFuIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4uXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQGZ1bmN0aW9uIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgQHJldHVybiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG59XG5cbi8vIFNwYW4gTWF0aFxuLy8gLS0tLS0tLS0tXG4vLyBHZXQgYWxsIHRoZSBzcGFuIHJlc3VsdHMuXG4vLyAtICRzcGFuOiA8bWFwPlxuQGZ1bmN0aW9uIHNwYW4tbWF0aChcbiAgJHNwYW5cbikge1xuICAkbmVzdCAgICAgICAgICAgICA6IGlmKHN1c3ktZ2V0KHJvbGUsICRzcGFuKSA9PSBuZXN0LCB0cnVlLCBmYWxzZSk7XG4gICRzcGxpdC1uZXN0ICAgICAgIDogaWYoaXMtc3BsaXQoJHNwYW4pIGFuZCAkbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkZWRnZSAgICAgICAgICAgICA6IGdldC1lZGdlKCRzcGFuKTtcbiAgJGxvY2F0aW9uICAgICAgICAgOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuXG4gICRmbG9hdCAgICAgICAgICAgIDogZnJvbTtcbiAgJHBhZGRpbmctYmVmb3JlICAgOiBudWxsO1xuICAkcGFkZGluZy1hZnRlciAgICA6IG51bGw7XG4gICRtYXJnaW4tYmVmb3JlICAgIDogbnVsbDtcbiAgJG1hcmdpbi1hZnRlciAgICAgOiBudWxsO1xuXG4gIC8vIGNhbGN1bGF0ZSB3aWR0aHNcbiAgJHNwcmVhZDogaW5kZXgobWFwLXZhbHVlcygkc3BhbiksIHNwcmVhZCk7XG4gICRzcGFuOiBpZigkc3BsaXQtbmVzdCBhbmQgbm90KCRzcHJlYWQpLCBtYXAtbWVyZ2UoJHNwYW4sIChzcHJlYWQ6IHdpZGUpKSwgJHNwYW4pO1xuICAkd2lkdGg6IGdldC1zcGFuLXdpZHRoKCRzcGFuKTtcbiAgJGd1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcblxuICAvLyBhcHBseSBndXR0ZXJzXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaWYgbm90KHN1c3ktZ2V0KHJvbGUsICRzcGFuKSkge1xuICAgICAgJHBhZGRpbmctYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJHBhZGRpbmctYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBpZiBub3QoJHNwbGl0LW5lc3QpIHtcbiAgICAgICRtYXJnaW4tYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJG1hcmdpbi1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNwZWNpYWwgbWFyZ2luIGhhbmRsaW5nXG4gIEBpZiBzdXN5LWdldChvdXRwdXQsICRzcGFuKSA9PSBpc29sYXRlIGFuZCAkbG9jYXRpb24ge1xuICAgICRtYXJnaW4tYmVmb3JlOiBnZXQtaXNvbGF0aW9uKCRzcGFuKTtcbiAgICAkbWFyZ2luLWFmdGVyOiAtMTAwJTtcbiAgfSBAZWxzZSBpZiAkZWRnZSB7XG4gICAgJGlzLXNwbGl0OiBpcy1zcGxpdCgkc3Bhbik7XG4gICAgJHBvczogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3Bhbik7XG5cbiAgICBAaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkZmxvYXQ6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJHNwYW4pO1xuICAgIH1cblxuICAgIEBpZiBub3QoJGlzLXNwbGl0KSB7XG4gICAgICBAaWYgJGVkZ2UgPT0gZnVsbCBvciAoJGVkZ2UgPT0gZmlyc3QgYW5kICRwb3MgPT0gYmVmb3JlKSB7XG4gICAgICAgICRtYXJnaW4tYmVmb3JlOiAwO1xuICAgICAgfVxuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGxhc3QgYW5kICRwb3MgPT0gYWZ0ZXIpIHtcbiAgICAgICAgJG1hcmdpbi1hZnRlcjogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIEByZXR1cm4gKFxuICAgIHdpZHRoICAgICAgICAgICA6ICR3aWR0aCxcbiAgICBmbG9hdCAgICAgICAgICAgOiAkZmxvYXQsXG4gICAgbWFyZ2luLWJlZm9yZSAgIDogJG1hcmdpbi1iZWZvcmUsXG4gICAgbWFyZ2luLWFmdGVyICAgIDogJG1hcmdpbi1hZnRlcixcbiAgICBwYWRkaW5nLWJlZm9yZSAgOiAkcGFkZGluZy1iZWZvcmUsXG4gICAgcGFkZGluZy1hZnRlciAgIDogJHBhZGRpbmctYWZ0ZXIsXG4gICAgZmxvdyAgICAgICAgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pLFxuICApO1xufVxuXG4vLyBHZXQgU3BhbiBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBzcGFuIHdpZHRoLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBnZXQtc3Bhbi13aWR0aChcbiAgJHNwYW5cbikge1xuICAkc3BhbiAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcblxuICAkbiAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRsb2NhdGlvbiA6IGdldC1sb2NhdGlvbigkc3Bhbik7XG4gICRjb2x1bW5zICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKTtcbiAgJGd1dHRlcnMgIDogc3VzeS1nZXQoZ3V0dGVycywgJHNwYW4pO1xuICAkc3ByZWFkICAgOiBzdXN5LWdldChzcHJlYWQsICRzcGFuKTtcblxuICAkY29udGV4dCAgOiBudWxsO1xuICAkc3Bhbi1zdW0gOiBudWxsO1xuICAkd2lkdGggICAgOiBudWxsO1xuXG4gIEBpZiAkbiA9PSAnZnVsbCcge1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuICAgICRyb2xlOiBzdXN5LWdldChyb2xlLCAkc3Bhbik7XG4gICAgJG46IGlmKCRwb3MgPT0gc3BsaXQgYW5kICRyb2xlICE9IG5lc3QsIHN1c3ktY291bnQoJGNvbHVtbnMpLCAxMDAlKTtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRuKSAhPSBudW1iZXIge1xuICAgIEB3YXJuIFwiKCN7dHlwZS1vZigkbil9KSAjeyRufSBpcyBub3QgYSB2YWxpZCBzcGFuLlwiO1xuICB9IEBlbHNlIGlmIHVuaXRsZXNzKCRuKSB7XG4gICAgJGNvbnRleHQ6IHN1c3ktc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgaWYoaXMtc3BsaXQoJHNwYW4pLCB3aWRlLCBuYXJyb3cpKTtcbiAgICAkc3ByZWFkOiBpZihpcy1pbnNpZGUoJHNwYW4pLCAkc3ByZWFkIG9yIHdpZGUsICRzcHJlYWQpO1xuICAgICRzcGFuLXN1bTogc3VzeSgkbiwgJGxvY2F0aW9uLCAkY29sdW1ucywgJGd1dHRlcnMsICRzcHJlYWQpO1xuXG4gICAgJF9tYXRoOiBzdXN5LWdldChtYXRoLCAkc3Bhbik7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJHNwYW4pO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICR3aWR0aDogJHNwYW4tc3VtICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkd2lkdGg6IHBlcmNlbnRhZ2UoJHNwYW4tc3VtIC8gJGNvbnRleHQpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJHdpZHRoOiAkbjtcbiAgfVxuXG4gIEByZXR1cm4gJHdpZHRoO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzXG4gKiovIiwiLy8gRGlyZWN0aW9uIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgRmxvdyBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBmbG93OiBsdHIsXG4pKTtcblxuLy8gR2V0IERpcmVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgb3IgJ3RvJyBkaXJlY3Rpb24gb2YgYSBsdHIgb3IgcnRsIGZsb3cuXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG4vLyAtIFska2V5XSAgIDogZnJvbSB8IHRvXG5AZnVuY3Rpb24gZ2V0LWRpcmVjdGlvbihcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpLFxuICAka2V5OiBmcm9tXG4pIHtcbiAgJHJldHVybjogaWYoJGZsb3cgPT0gcnRsLCAoZnJvbTogcmlnaHQsIHRvOiBsZWZ0KSwgKGZyb206IGxlZnQsIHRvOiByaWdodCkpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHJldHVybiwgJGtleSk7XG59XG5cbi8vIFRvXG4vLyAtLVxuLy8gUmV0dXJuIHRoZSAndG8nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiB0byhcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCB0byk7XG59XG5cbi8vIEZyb21cbi8vIC0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiBmcm9tKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIGZyb20pO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3NcbiAqKi8iLCIvLyBHdXR0ZXIgU3ludGF4XG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gR3V0dGVyc1xuLy8gLS0tLS0tLVxuLy8gU2V0IGd1dHRlcnMgb24gYW4gZWxlbWVudC5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQG1peGluIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzIDogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfb3V0cHV0OiAoXG4gICAgYmVmb3JlOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSxcbiAgICBhZnRlcjogbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGd1dHRlcnMsICRpbnNwZWN0KTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfVxufVxuXG5AbWl4aW4gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAaW5jbHVkZSBndXR0ZXJzKCRzcGFuKTtcbn1cblxuXG4vLyBHdXR0ZXJcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIGd1dHRlci5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJHNwYW46IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnM6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpIG9yIG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcnM7XG59XG5cbkBmdW5jdGlvbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAcmV0dXJuIGd1dHRlcigkc3Bhbik7XG59XG5cblxuLy8gR2V0IEd1dHRlciBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGd1dHRlciB3aWR0aC5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlci13aWR0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXJzIDogc3VzeS1nZXQoZ3V0dGVycywgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRjb250ZXh0KTtcblxuICBAaWYgJF9ndXR0ZXJzIGFuZCAoJF9ndXR0ZXJzID4gMCkgYW5kIG5vdCgkX2d1dHRlcikge1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRjb250ZXh0KTtcbiAgICAkX21hdGg6IGd1dHRlci1tYXRoKCRjb250ZXh0KTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkX2d1dHRlcjogJF9ndXR0ZXJzICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG4gICAgICAkX3NwcmVhZCAgOiBpZihpcy1zcGxpdCgkY29udGV4dCksIHdpZGUsIHN1c3ktZ2V0KHNwcmVhZCwgJGNvbnRleHQpKTtcbiAgICAgICRfZ3V0dGVyICA6IHBlcmNlbnRhZ2UoJF9ndXR0ZXJzIC8gc3VzeS1zdW0oJF9jb2x1bW5zLCAkX2d1dHRlcnMsICRfc3ByZWFkKSk7XG4gICAgfVxuICB9XG5cbiAgJF9ndXR0ZXI6IGlmKCRfZ3V0dGVyID09ICduby1ndXR0ZXJzJyBvciAkX2d1dHRlciA9PSAnbm8tZ3V0dGVyJywgbnVsbCwgJF9ndXR0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXI7XG59XG5cblxuLy8gR2V0IEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYmVmb3JlIGFuZCBhZnRlciBndXR0ZXIgdmFsdWVzLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVycyhcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgICAgICAgICAgICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVyLXBvc2l0aW9uICAgOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgICAgICAgICAgICA6IGdldC1ndXR0ZXItd2lkdGgoJGNvbnRleHQpO1xuXG4gICRfcmV0dXJuICAgICAgICAgICAgOiAoYmVmb3JlOiBudWxsLCBhZnRlcjogbnVsbCk7XG5cbiAgQGlmIGlzLXNwbGl0KCRjb250ZXh0KSBhbmQgJF9ndXR0ZXIge1xuICAgICRfZ3V0dGVyOiAkX2d1dHRlciAvIDI7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGJlZm9yZTogJF9ndXR0ZXIsIGFmdGVyOiAkX2d1dHRlcikpO1xuICB9IEBlbHNlIHtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoJF9ndXR0ZXItcG9zaXRpb246ICRfZ3V0dGVyKSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIElzIEluc2lkZVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgaW5zaWRlLlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLWluc2lkZShcbiAgJGNvbnRleHRcbikge1xuICAkX2luc2lkZTogaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfaW5zaWRlLCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBJcyBTcGxpdFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBzcGxpdC5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1zcGxpdChcbiAgJGNvbnRleHRcbikge1xuICAkX3NwbGl0OiBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9zcGxpdCwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gR3V0dGVyIE1hdGhcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIG1hdGggdG8gdXNlIGZvciBndXR0ZXIgY2FsY3VsYXRpb25zXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ3V0dGVyLW1hdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuICA6IHN1c3ktZ2V0KG1hdGgsICRjb250ZXh0KTtcbiAgJF9yZXR1cm4gIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCkgPT0gaW5zaWRlLXN0YXRpYywgc3RhdGljLCAkX3JldHVybik7XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2Nzc1xuICoqLyIsIiRjb2xvcnM6IChleHRyYS1kYXJrOiAob3JhbmdlOiAjRDgyRTE4LHllbGxvdzogI0Y5OEUwMCxncmVlbjogIzAwODk1MSxibHVlOiAjMDA1RkQxLHB1cnBsZTogIzRGMDI5OSxwaW5rOiAjQTAxNzQ0KSxkYXJrOiAob3JhbmdlOiAjRjQ1RDIyLHllbGxvdzogI0ZGQUQxRixncmVlbjogIzFGQjY1MCxibHVlOiAjMURBMUYyLHB1cnBsZTogIzc5NEJDNCxwaW5rOiAjRTAyNDVFKSxsaWdodDogKG9yYW5nZTogI0ZGOEQ1Nyx5ZWxsb3c6ICNGRkQwM0YsZ3JlZW46ICM2OEUwOTAsYmx1ZTogIzcxQzlGOCxwdXJwbGU6ICNBMzdDRUQscGluazogI0Y2ODA5QSksZXh0cmEtbGlnaHQ6IChvcmFuZ2U6ICNGRkJFNzgseWVsbG93OiAjRkZFNzZFLGdyZWVuOiAjQTVGMkFBLGJsdWU6ICM5N0UzRkYscHVycGxlOiAjQzdCNEZBLHBpbms6ICNGRkI4QzIpLG5ldXRyYWw6IChibGFjazogIzE0MTcxQSxkYXJrLWdyYXk6ICM2NTc3ODYsbGlnaHQtZ3JheTogI0FBQjhDMixleHRyYS1saWdodC1ncmF5OiAjQ0NENkRELGV4dHJhLWV4dHJhLWxpZ2h0LWdyYXk6ICNGNUY4RkEsd2hpdGU6ICNGRkZGRkYpKTtcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvY29sb3JzLmpzb25cbiAqKi8iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIEhlcmUgd2UgZGVmaW5lIHN0eWxlcyBmb3IgdGV4dCB0aGF0IGlzIGltcG9ydGVkIGZyb20gYW5vdGhlciBwbGF0Zm9ybVxuICogYW5kIHNob3VsZCBtYXRjaCB0aGUgc3R5bGVzIGZyb20gYmwxMy1yaWNoLXRleHQtZWRpdG9yIGRlc3BpdGVcbiAqIHRoZSBwcm92aWRlZCBtYXJrdXAgb2YgdGhlIGltcG9ydCBpcyBkaWZmZXJlbnQgYW5kIGNvdmVycyBzb21lIGVkZ2UgY2FzZXMuXG4gKi9cbi8qXG5cbmZvbnQgbWl4aW5cbiRrZXk6IHR5cGUgc3R5bGUga2V5IChleC4gYm9sZC0yNCBvciByb21hbi0yNCkuIFNlZSB0eXBvZ3JhcGh5Lmpzb24gZm9yIG9wdGlvbnMuXG4kYnJlYWtwb2ludDogKG9wdGlvbmFsKSBicmVha3BvaW50IGtleSAoZXguIGZ1bGwgb3IgdGFibGV0KS4gU2VlIGJyZWFrcG9pbnRzLmpzb24gZm9yIG9wdGlvbnMuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG5cbldoZW4gdXNlZCB3aXRob3V0IGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgdGhpcyBtaXhpbiB3aWxsIHByb2R1Y2UgZm9udCBwcm9wZXJ0aWVzXG53cmFwcGVkIGluIG1lZGlhIHF1ZXJpZXMuIEl0J3MgYSBzaW1wbGUgd2F5IHRvIGFwcGx5IGZ1bGx5IHJlc3BvbnNpdmUgdHlwZSBzdHlsZXNcbnRvIGEgY2xhc3Mgb3IgZWxlbWVudC5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0LCBmdWxsKTtcblxuSWYgYSBicmVha3BvaW50IGlzIHNwZWNpZmllZCB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgc2V0IG9mIGZvbnQgcHJvcGVydGllc1xudGhhdCBhcmUgTk9UIHdyYXBwZWQgaW4gYW55IG1lZGlhIHF1ZXJpZXMuXG5cbiovXG4vKlxuXG4gIGNvbG9yKHllbGxvdykgc2luZ2xlIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGRhcmsgY29sb3JzXG4gIGNvbG9yKGxpZ2h0LCB5ZWxsb3cpIHJldHVybnMgbGlnaHQgeWVsbG93XG5cbiovXG4vKiByb3VuZGVkIGNvcm5lcnNcbiAgdXNhZ2U6IGJvcmRlci1yYWRpdXMoIGJhc2VsaW5lKCBuICkgKVxuKi9cbi8qXG5cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvc2Fzcy9tYWludGFpbi1hc3BlY3QtcmF0aW8tbWl4aW4vXG5cblRoZSBtaXhpbiBhc3N1bWVzIHlvdSdsbCBiZSBuZXN0aW5nIGFuIGVsZW1lbnQgd2l0aCB0aGUgY2xhc3Mgb2YgY29udGVudCBpbnNpZGUgeW91ciBpbml0aWFsIGJsb2NrXG5cbjxkaXYgY2xhc3M9XCJzaXh0ZWVuLW5pbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICBpbnNlcnQgY29udGVudCBoZXJlXG4gICAgdGhpcyB3aWxsIG1haW50YWluIGEgMTY6OSBhc3BlY3QgcmF0aW9cbiAgPC9kaXY+XG48L2Rpdj5cblxuKi9cbi8qKlxuICogVGhlIHN0eWxlcyBpbiB0aGlzIGZpbGUgYXJlIHNoYXJlZCBhY3Jvc3MgYmwxMy1yaWNoLXRleHQtZWRpdG9yIGFuZFxuICogYmwyNS1ibG9nLW1pZ3JhdGlvbi1odG1sLiBJZiBhIHN0eWxlIGlzIG9ubHkgdXNlZCBieSBvbmUgY29tcG9uZW50LFxuICogbW92ZSB0aGUgYXBwcm9wcmlhdGUgQ1NTIHRvIHRoZSBjb21wb25lbnQsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGlzIGZpbGUuXG4gKi9cbi8qXG5cbmZvbnQgbWl4aW5cbiRrZXk6IHR5cGUgc3R5bGUga2V5IChleC4gYm9sZC0yNCBvciByb21hbi0yNCkuIFNlZSB0eXBvZ3JhcGh5Lmpzb24gZm9yIG9wdGlvbnMuXG4kYnJlYWtwb2ludDogKG9wdGlvbmFsKSBicmVha3BvaW50IGtleSAoZXguIGZ1bGwgb3IgdGFibGV0KS4gU2VlIGJyZWFrcG9pbnRzLmpzb24gZm9yIG9wdGlvbnMuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG5cbldoZW4gdXNlZCB3aXRob3V0IGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgdGhpcyBtaXhpbiB3aWxsIHByb2R1Y2UgZm9udCBwcm9wZXJ0aWVzXG53cmFwcGVkIGluIG1lZGlhIHF1ZXJpZXMuIEl0J3MgYSBzaW1wbGUgd2F5IHRvIGFwcGx5IGZ1bGx5IHJlc3BvbnNpdmUgdHlwZSBzdHlsZXNcbnRvIGEgY2xhc3Mgb3IgZWxlbWVudC5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0LCBmdWxsKTtcblxuSWYgYSBicmVha3BvaW50IGlzIHNwZWNpZmllZCB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgc2V0IG9mIGZvbnQgcHJvcGVydGllc1xudGhhdCBhcmUgTk9UIHdyYXBwZWQgaW4gYW55IG1lZGlhIHF1ZXJpZXMuXG5cbiovXG4vKlxuXG4gIGNvbG9yKHllbGxvdykgc2luZ2xlIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGRhcmsgY29sb3JzXG4gIGNvbG9yKGxpZ2h0LCB5ZWxsb3cpIHJldHVybnMgbGlnaHQgeWVsbG93XG5cbiovXG4vKiByb3VuZGVkIGNvcm5lcnNcbiAgdXNhZ2U6IGJvcmRlci1yYWRpdXMoIGJhc2VsaW5lKCBuICkgKVxuKi9cbi8qXG5cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvc2Fzcy9tYWludGFpbi1hc3BlY3QtcmF0aW8tbWl4aW4vXG5cblRoZSBtaXhpbiBhc3N1bWVzIHlvdSdsbCBiZSBuZXN0aW5nIGFuIGVsZW1lbnQgd2l0aCB0aGUgY2xhc3Mgb2YgY29udGVudCBpbnNpZGUgeW91ciBpbml0aWFsIGJsb2NrXG5cbjxkaXYgY2xhc3M9XCJzaXh0ZWVuLW5pbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICBpbnNlcnQgY29udGVudCBoZXJlXG4gICAgdGhpcyB3aWxsIG1haW50YWluIGEgMTY6OSBhc3BlY3QgcmF0aW9cbiAgPC9kaXY+XG48L2Rpdj5cblxuKi9cbi8qXG5cbmZvbnQgbWl4aW5cbiRrZXk6IHR5cGUgc3R5bGUga2V5IChleC4gYm9sZC0yNCBvciByb21hbi0yNCkuIFNlZSB0eXBvZ3JhcGh5Lmpzb24gZm9yIG9wdGlvbnMuXG4kYnJlYWtwb2ludDogKG9wdGlvbmFsKSBicmVha3BvaW50IGtleSAoZXguIGZ1bGwgb3IgdGFibGV0KS4gU2VlIGJyZWFrcG9pbnRzLmpzb24gZm9yIG9wdGlvbnMuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG5cbldoZW4gdXNlZCB3aXRob3V0IGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgdGhpcyBtaXhpbiB3aWxsIHByb2R1Y2UgZm9udCBwcm9wZXJ0aWVzXG53cmFwcGVkIGluIG1lZGlhIHF1ZXJpZXMuIEl0J3MgYSBzaW1wbGUgd2F5IHRvIGFwcGx5IGZ1bGx5IHJlc3BvbnNpdmUgdHlwZSBzdHlsZXNcbnRvIGEgY2xhc3Mgb3IgZWxlbWVudC5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0LCBmdWxsKTtcblxuSWYgYSBicmVha3BvaW50IGlzIHNwZWNpZmllZCB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgc2V0IG9mIGZvbnQgcHJvcGVydGllc1xudGhhdCBhcmUgTk9UIHdyYXBwZWQgaW4gYW55IG1lZGlhIHF1ZXJpZXMuXG5cbiovXG4vKlxuXG4gIGNvbG9yKHllbGxvdykgc2luZ2xlIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGRhcmsgY29sb3JzXG4gIGNvbG9yKGxpZ2h0LCB5ZWxsb3cpIHJldHVybnMgbGlnaHQgeWVsbG93XG5cbiovXG4vKiByb3VuZGVkIGNvcm5lcnNcbiAgdXNhZ2U6IGJvcmRlci1yYWRpdXMoIGJhc2VsaW5lKCBuICkgKVxuKi9cbi8qXG5cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvc2Fzcy9tYWludGFpbi1hc3BlY3QtcmF0aW8tbWl4aW4vXG5cblRoZSBtaXhpbiBhc3N1bWVzIHlvdSdsbCBiZSBuZXN0aW5nIGFuIGVsZW1lbnQgd2l0aCB0aGUgY2xhc3Mgb2YgY29udGVudCBpbnNpZGUgeW91ciBpbml0aWFsIGJsb2NrXG5cbjxkaXYgY2xhc3M9XCJzaXh0ZWVuLW5pbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICBpbnNlcnQgY29udGVudCBoZXJlXG4gICAgdGhpcyB3aWxsIG1haW50YWluIGEgMTY6OSBhc3BlY3QgcmF0aW9cbiAgPC9kaXY+XG48L2Rpdj5cblxuKi9cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl81NyBDb25kICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFQgQ29uZFwiO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvODk3ZWE5NTEtN2VjNi00N2Y0LTlkYTMtN2QwNjE5YjQ2ZDA0LmVvdD8jaWVmaXhcIik7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS84OTdlYTk1MS03ZWM2LTQ3ZjQtOWRhMy03ZDA2MTliNDZkMDQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMDMzYjU0ZGItYjFjZS00ZGE3LTg2MWItNjFkMDU5YzFjOWI4LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlL2Q5Yzg0MmY4LWIzN2EtNDE0Zi1iZTg2LTk3ZWE5YzYxZDNkNy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvODRhMmNjMDktZjAyZC00YzFkLWE1YTktMmFiNDU2NDM5YzczLnN2ZyM4NGEyY2MwOS1mMDJkLTRjMWQtYTVhOS0yYWI0NTY0MzljNzNcIikgZm9ybWF0KFwic3ZnXCIpOyB9XG5cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl83NSBCb2xkICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFRcIjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvM2FlYWViMWQtMWRlYS00ZTliLTllODMtNTJhZGM1YTg3MjA5LmVvdD8jaWVmaXhcIik7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS8zYWVhZWIxZC0xZGVhLTRlOWItOWU4My01MmFkYzVhODcyMDkuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvZDkxMjJlOGQtYmYyNi00ZjFjLWJhYjktYzA2NTk5Mzk3YjU5LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlL2RiMGNlYzEyLWE5NDctNDBmZS1hMTE1LWM1Y2UyMmVlNzlmNi53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMDI0NDExZWYtMjZiZi00NTM2LWFlYTQtZWM5NTM4NDZlZGE3LnN2ZyMwMjQ0MTFlZi0yNmJmLTQ1MzYtYWVhNC1lYzk1Mzg0NmVkYTdcIikgZm9ybWF0KFwic3ZnXCIpOyB9XG5cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl84NSBIZWF2eSAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiA5MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgc3JjOiB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzhhOTBhMmJhLTEyNzYtNGIzZi1iYzFjLTg1MjYxNzJiMjdmNC5lb3Q/I2llZml4XCIpO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvOGE5MGEyYmEtMTI3Ni00YjNmLWJjMWMtODUyNjE3MmIyN2Y0LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlL2M0MTVmM2ZkLWZmMjctNDBmZS1hZjk0LThiNGE1NGI0YjRlNC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS9hMWRhMjBjNy00ZGM5LTRhZjUtYmQ2Zi05ZWJlNTBiNjc4OGQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlL2FjZDhkNmRmLTk2OTYtNDA5Mi1iZjIzLTUzNzBjNjNjYTlmYi5zdmcjYWNkOGQ2ZGYtOTY5Ni00MDkyLWJmMjMtNTM3MGM2M2NhOWZiXCIpIGZvcm1hdChcInN2Z1wiKTsgfVxuXG4vKiBIZWx2ZXRpY2EgTmV1ZSBMVCBXMDZfNTYgSXQgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS83ZGYzOTMyNS0wZTBlLTQ2MzUtYTcxNy01OTAzM2EwMjZmYzUuZW90PyNpZWZpeFwiKTtcbiAgc3JjOiB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzdkZjM5MzI1LTBlMGUtNDYzNS1hNzE3LTU5MDMzYTAyNmZjNS5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVvdFwiKSwgdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS82YWNiOWIyNi03ZThlLTQ2YjQtYjY4Yi02MzFhYjA3ZDZlZDcud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMjkxNGE5MGUtZDc2Ni00Y2Y4LTk3YjktMDRjNWZlODk3ZjA2LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS9iODVlYTViMy04ZGM4LTQ5ODktYTk4Mi1mNDYxYmM5NjU1Zjguc3ZnI2I4NWVhNWIzLThkYzgtNDk4OS1hOTgyLWY0NjFiYzk2NTVmOFwiKSBmb3JtYXQoXCJzdmdcIik7IH1cblxuLyogSGVsdmV0aWNhIE5ldWUgTFQgVzA2XzQ1IExpZ2h0ICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFRcIjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMjAyM2U3ZDEtOWYwYS00Y2FjLThlODAtMjIzMjFkYjkxOGRkLmVvdD8jaWVmaXhcIik7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS8yMDIzZTdkMS05ZjBhLTRjYWMtOGU4MC0yMjMyMWRiOTE4ZGQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMTk4ZmQ3OGItMzY1NS00NzY4LTg5YzQtMzFjYWY2NWVhMzYzLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzQ5NjMxY2U4LTkyMDEtNDdhOC04ODc0LTQ1MzcxNDE3YzM1Zi53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvOWFjM2Q0MjQtODUyMS00NmNmLTg4NzgtNzMyNDc2MmRiN2I0LnN2ZyM5YWMzZDQyNC04NTIxLTQ2Y2YtODg3OC03MzI0NzYyZGI3YjRcIikgZm9ybWF0KFwic3ZnXCIpOyB9XG5cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl81NSBSb21hbiAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgc3JjOiB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzhiM2IwMTMzLTIyMmQtNGZmYy05ZDZlLTU2NWRkODc5NjkwYy5lb3Q/I2llZml4XCIpO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvOGIzYjAxMzMtMjIyZC00ZmZjLTlkNmUtNTY1ZGQ4Nzk2OTBjLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzFhMTRkY2FjLTdjOWUtNDcxYy04MDM5LTMzYzczMGY4NzFmMi53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS81NThlZDUzNC0wYzYwLTQyY2YtOGI5NC1kMGExNmViNzBkMzcud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzY1MTNlODA0LWUwM2UtNDFhMS04Mzg1LWQ1ZTA5NzFmMjAwOS5zdmcjNjUxM2U4MDQtZTAzZS00MWExLTgzODUtZDVlMDk3MWYyMDA5XCIpIGZvcm1hdChcInN2Z1wiKTsgfVxuXG4vKiBIZWx2ZXRpY2EgTmV1ZSBMVCBXMDZfMzUgVGhpbiAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgc3JjOiB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzJhMTI5MTQyLTdjNTAtNDcyOC05MjI3LTFlZWJmMmQ5ZjE2ZC5lb3Q/I2llZml4XCIpO1xuICBzcmM6IHVybChcImh0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUvMmExMjkxNDItN2M1MC00NzI4LTkyMjctMWVlYmYyZDlmMTZkLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzIxOTJhMjZjLWRlMWMtNGM1MC04OGQxLWU1MTM2MDMzYzE1YS53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9mb250cy50d2l0dGVyLmNvbS9oZWx2ZXRpY2FfbmV1ZS8wMjEyZDIwMy1jZTNmLTQyZTItODYyYS1lZGY5ODg2MjE3Mjgud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCJodHRwczovL2ZvbnRzLnR3aXR0ZXIuY29tL2hlbHZldGljYV9uZXVlLzU1MmM0M2EzLTZjYzctNDdiOS04YjgxLTM5OGI5NjFiNTE2Ny5zdmcjNTUyYzQzYTMtNmNjNy00N2I5LThiODEtMzk4Yjk2MWI1MTY3XCIpIGZvcm1hdChcInN2Z1wiKTsgfVxuXG4udGhlbWUtLW9yYW5nZSAuYmwyNSBhIHtcbiAgY29sb3I6ICNGNDVEMjI7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlLWluLW91dDsgfVxuXG4udGhlbWUtLW9yYW5nZSAuYmwyNSBhOmFjdGl2ZSxcbi50aGVtZS0tb3JhbmdlIC5ibDI1IGE6aG92ZXIge1xuICBjb2xvcjogI0Q4MkUxODtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbi50aGVtZS0tb3JhbmdlIC5ibDI1IG9sIGxpOjpiZWZvcmUsXG4udGhlbWUtLW9yYW5nZSAuYmwyNSB1bCBsaTo6YmVmb3JlIHtcbiAgY29sb3I6ICNGNDVEMjI7IH1cblxuLnRoZW1lLS1vcmFuZ2UgLmJsMjUgKjo6c2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGQkU3ODtcbiAgY29sb3I6IGluaGVyaXQ7IH1cblxuLnRoZW1lLS15ZWxsb3cgLmJsMjUgYSB7XG4gIGNvbG9yOiAjRkZBRDFGO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZS1pbi1vdXQ7IH1cblxuLnRoZW1lLS15ZWxsb3cgLmJsMjUgYTphY3RpdmUsXG4udGhlbWUtLXllbGxvdyAuYmwyNSBhOmhvdmVyIHtcbiAgY29sb3I6ICNGOThFMDA7XG4gIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4udGhlbWUtLXllbGxvdyAuYmwyNSBvbCBsaTo6YmVmb3JlLFxuLnRoZW1lLS15ZWxsb3cgLmJsMjUgdWwgbGk6OmJlZm9yZSB7XG4gIGNvbG9yOiAjRkZBRDFGOyB9XG5cbi50aGVtZS0teWVsbG93IC5ibDI1ICo6OnNlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkU3NkU7XG4gIGNvbG9yOiBpbmhlcml0OyB9XG5cbi50aGVtZS0tZ3JlZW4gLmJsMjUgYSB7XG4gIGNvbG9yOiAjMUZCNjUwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZS1pbi1vdXQ7IH1cblxuLnRoZW1lLS1ncmVlbiAuYmwyNSBhOmFjdGl2ZSxcbi50aGVtZS0tZ3JlZW4gLmJsMjUgYTpob3ZlciB7XG4gIGNvbG9yOiAjMDA4OTUxO1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cblxuLnRoZW1lLS1ncmVlbiAuYmwyNSBvbCBsaTo6YmVmb3JlLFxuLnRoZW1lLS1ncmVlbiAuYmwyNSB1bCBsaTo6YmVmb3JlIHtcbiAgY29sb3I6ICMxRkI2NTA7IH1cblxuLnRoZW1lLS1ncmVlbiAuYmwyNSAqOjpzZWxlY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQTVGMkFBO1xuICBjb2xvcjogaW5oZXJpdDsgfVxuXG4udGhlbWUtLWJsdWUgLmJsMjUgYSB7XG4gIGNvbG9yOiAjMURBMUYyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZS1pbi1vdXQ7IH1cblxuLnRoZW1lLS1ibHVlIC5ibDI1IGE6YWN0aXZlLFxuLnRoZW1lLS1ibHVlIC5ibDI1IGE6aG92ZXIge1xuICBjb2xvcjogIzAwNUZEMTtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbi50aGVtZS0tYmx1ZSAuYmwyNSBvbCBsaTo6YmVmb3JlLFxuLnRoZW1lLS1ibHVlIC5ibDI1IHVsIGxpOjpiZWZvcmUge1xuICBjb2xvcjogIzFEQTFGMjsgfVxuXG4udGhlbWUtLWJsdWUgLmJsMjUgKjo6c2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzk3RTNGRjtcbiAgY29sb3I6IGluaGVyaXQ7IH1cblxuLnRoZW1lLS1wdXJwbGUgLmJsMjUgYSB7XG4gIGNvbG9yOiAjNzk0QkM0O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZS1pbi1vdXQ7IH1cblxuLnRoZW1lLS1wdXJwbGUgLmJsMjUgYTphY3RpdmUsXG4udGhlbWUtLXB1cnBsZSAuYmwyNSBhOmhvdmVyIHtcbiAgY29sb3I6ICM0RjAyOTk7XG4gIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4udGhlbWUtLXB1cnBsZSAuYmwyNSBvbCBsaTo6YmVmb3JlLFxuLnRoZW1lLS1wdXJwbGUgLmJsMjUgdWwgbGk6OmJlZm9yZSB7XG4gIGNvbG9yOiAjNzk0QkM0OyB9XG5cbi50aGVtZS0tcHVycGxlIC5ibDI1ICo6OnNlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNDN0I0RkE7XG4gIGNvbG9yOiBpbmhlcml0OyB9XG5cbi50aGVtZS0tcGluayAuYmwyNSBhIHtcbiAgY29sb3I6ICNFMDI0NUU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlLWluLW91dDsgfVxuXG4udGhlbWUtLXBpbmsgLmJsMjUgYTphY3RpdmUsXG4udGhlbWUtLXBpbmsgLmJsMjUgYTpob3ZlciB7XG4gIGNvbG9yOiAjQTAxNzQ0O1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cblxuLnRoZW1lLS1waW5rIC5ibDI1IG9sIGxpOjpiZWZvcmUsXG4udGhlbWUtLXBpbmsgLmJsMjUgdWwgbGk6OmJlZm9yZSB7XG4gIGNvbG9yOiAjRTAyNDVFOyB9XG5cbi50aGVtZS0tcGluayAuYmwyNSAqOjpzZWxlY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZCOEMyO1xuICBjb2xvcjogaW5oZXJpdDsgfVxuXG4uYmwyNSB7XG4gIC8qKlxuICAgICAgU3R5bGUgY2hhbmdlcyB0byBcIi5jb2RlLWlubGluZVwiIGFuZCBcIi5mb290bm90ZVwiIHNob3VsZCBiZSByZWZsZWN0ZWQgaGVyZSBhcyB3ZWxsOlxuICAgICAgY29yZS10d2l0dGVyLXByb2plY3QvY29yZS10d2l0dGVyLWpjci1tb2R1bGVzL2NvcmUtdHdpdHRlci12aWV3L3NyYy9jb250ZW50L2pjcl9yb290L2V0Yy9kZXNpZ25zL2NvcmUtdHdpdHRlci9jbGllbnRsaWItZWRpdG9yL2Nzcy9ibDEzLXJpY2gtdGV4dC1lZGl0b3IuY3NzXG4gICAgICBTbyB0aGUgc3R5bGVzIHdpbGwgYmUgYXBwbGllZCBpbiBmdWxsIHNjcmVlbiBlZGl0aW5nIG1vZGUgYXMgd2VsbC5cbiAgICAqLyB9XG4gIC5ibDI1IGgyIHtcbiAgICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwcmVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwIDAgMHJlbSAwO1xuICAgIGNvbG9yOiAjMTQxNzFBO1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAyLjI1cmVtO1xuICAgIHBhZGRpbmctdG9wOiAyLjI1cmVtOyB9XG4gIC5ibDI1IGgzIHtcbiAgICBjb2xvcjogIzE0MTcxQTsgfVxuICAuYmwyNSBoMyArIG9sLFxuICAuYmwyNSBoMyArIHVsIHtcbiAgICBwYWRkaW5nLXRvcDogMC43NXJlbTsgfVxuICAuYmwyNSBwIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMS41cmVtOyB9XG4gIC5ibDI1IHAgKyBvbCxcbiAgLmJsMjUgcCArIHVsIHtcbiAgICBwYWRkaW5nLXRvcDogMS41cmVtOyB9XG4gIC5ibDI1IHAgKyBoMyB7XG4gICAgcGFkZGluZy10b3A6IDAuNzVyZW07IH1cbiAgLmJsMjUgb2wsXG4gIC5ibDI1IHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctYm90dG9tOiAzcmVtOyB9XG4gIC5ibDI1IG9sICsgaDIsXG4gIC5ibDI1IHVsICsgaDIge1xuICAgIHBhZGRpbmctdG9wOiAxLjVyZW07IH1cbiAgLmJsMjUgb2wgbGksXG4gIC5ibDI1IHVsIGxpIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC43NXJlbTsgfVxuICAgIC5ibDI1IG9sIGxpOmxhc3QtY2hpbGQsXG4gICAgLmJsMjUgdWwgbGk6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDsgfVxuICAuYmwyNSBvbCB7XG4gICAgY291bnRlci1yZXNldDogaXRlbTsgfVxuICAgIC5ibDI1IG9sIGxpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMi4yNXJlbTsgfVxuICAgIC5ibDI1IG9sIGxpOjpiZWZvcmUge1xuICAgICAgY29udGVudDogY291bnRlcihpdGVtKTtcbiAgICAgIGNvdW50ZXItaW5jcmVtZW50OiBpdGVtO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwLjc1cmVtO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0yLjI1cmVtO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAtNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xuICAgICAgd2lkdGg6IDIuMjVyZW07IH1cbiAgLmJsMjUgdWwgbGkge1xuICAgIHBhZGRpbmctbGVmdDogMS40cmVtOyB9XG4gICAgLmJsMjUgdWwgbGk6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIuKAolwiO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwLjc1cmVtO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW07XG4gICAgICB3aWR0aDogMS41cmVtOyB9XG4gIC5ibDI1ID4gKjpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMy43NXJlbTsgfVxuICAuYmwyNSBpIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7IH1cbiAgLmJsMjUgdSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cbiAgLmJsMjUgYiB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAuYmwyNSAuY29kZS1pbmxpbmUge1xuICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjU3Nzg2O1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMjQ5NzVyZW07XG4gICAgY29sb3I6ICNGRkZGRkY7XG4gICAgZm9udC1zaXplOiAwLjk1ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuNzVweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4xODc1cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMC4yNDk3NXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMC4xMjQ1cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjQ5NzVyZW07IH1cbiAgLmJsMjUgLmZvb3Rub3RlIHtcbiAgICBmb250LXNpemU6IDAuNzVyZW07IH1cblxuLyogQXJjaGl2ZSBwb3N0IHR5cGUgc3R5bGVzICovXG4uYmwyNSBoNCxcbi5ibDI1IGg1IHtcbiAgY29sb3I6ICMxNDE3MUE7IH1cblxuLmJsMjUgcDplbXB0eSB7XG4gIHBhZGRpbmc6IDA7IH1cblxuLmJsMjUgLmFsaWduLWxlZnQge1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG5cbi5ibDI1IC5hbGlnbi1jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuLmJsMjUgLmFsaWduLXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cblxuLmJsMjUgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uYmwyNSBwcmUge1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfVxuXG4uYmwyNSBpbWcuYWxpZ24tY2VudGVyLFxuLmJsMjUgaW1nLmFsaWduLXJpZ2h0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cblxuLmJsMjUgZW0ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLmJsMjUgaWZyYW1lLnR3aXR0ZXItdHdlZXQtcmVuZGVyZWQge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG5cbi5ibDI1IC52aWRlby15b3V0dWJlIHtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuYmwyNSAudmlkZW8teW91dHViZSBpZnJhbWUge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cblxuLmJsMjUgLmctdGltZWxpbmUsXG4uYmwyNSAuZy10d2VldCB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxNXJlbTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDAgMHJlbSAwO1xuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtOyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5ibDI1IC5nLXRpbWVsaW5lLFxuICAgIC5ibDI1IC5nLXR3ZWV0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVyZW07XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAwIDAgMHJlbSAwOyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLmJsMjUgLmctdGltZWxpbmUsXG4gICAgLmJsMjUgLmctdHdlZXQge1xuICAgICAgcGFkZGluZy1ib3R0b206IDEuNXJlbTsgfSB9XG5cbi5ibDI1IGJsb2NrcXVvdGUge1xuICBwYWRkaW5nLWJvdHRvbTogM3JlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDMwcHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDQ4MHB4KSBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuYmwyNSBibG9ja3F1b3RlIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAgIC5ibDI1IGJsb2NrcXVvdGUge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9IH1cbiAgLmJsMjUgYmxvY2txdW90ZSA+IHAge1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDc5cHgpIHtcbiAgICAgIC5ibDI1IGJsb2NrcXVvdGUgPiBwIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjVlbTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9IH1cbiAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YmVmb3JlLCAuYmwyNSBibG9ja3F1b3RlID4gcDo6YWZ0ZXIge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogNnJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiA2cmVtO1xuICAgICAgY29sb3I6ICNDQ0Q2REQ7IH1cbiAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXFwwMjAxQ1wiO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogLTRweDtcbiAgICAgIHRvcDogLTMwcHg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogNDgwcHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiAtNXB4O1xuICAgICAgICAgIHRvcDogLTU0cHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiBpbmhlcml0OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAgICAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiAtNXB4O1xuICAgICAgICAgIHRvcDogLTU0cHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiBpbmhlcml0OyB9IH1cbiAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCJcXDAyMDFEXCI7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogNDgwcHgpIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAuYmwyNSBibG9ja3F1b3RlID4gcDo6YWZ0ZXIge1xuICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgIHRvcDogY2FsYygxMDAlIC0gMy4yNXJlbSk7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gICAgICAgIC5ibDI1IGJsb2NrcXVvdGUgPiBwOjphZnRlciB7XG4gICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgdG9wOiBjYWxjKDEwMCUgLSAzLjI1cmVtKTsgfSB9XG4gIC5ibDI1IGJsb2NrcXVvdGUgcCArIHNtYWxsIHtcbiAgICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwcmVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwIDAgMHJlbSAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjc1cmVtOyB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICAuYmwyNSBibG9ja3F1b3RlIHAgKyBzbWFsbCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwcmVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDAgMCAwcmVtIDA7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAgICAgLmJsMjUgYmxvY2txdW90ZSBwICsgc21hbGwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7IH0gfVxuICAgIC5ibDI1IGJsb2NrcXVvdGUgcCArIHNtYWxsOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcXDAyMDE0XCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwOyB9XG4gIC5ibDI1IGJsb2NrcXVvdGUgcCArIHNtYWxsIGNpdGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc2l6ZTogMC44N3JlbTtcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAyNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMCAwIDByZW0gMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXRvcDogMC43NXJlbTsgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLmJsMjUgYmxvY2txdW90ZSBwICsgc21hbGwgY2l0ZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41cmVtO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMjVyZW07XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMCAwIDByZW0gMDsgfSB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSB7XG4gICAgICAuYmwyNSBibG9ja3F1b3RlIHAgKyBzbWFsbCBjaXRlIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDAuNzVyZW07IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAgICAgLmJsMjUgYmxvY2txdW90ZSBwICsgc21hbGwgY2l0ZSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzBweDsgfSB9XG5cbi5ibDI1IHAgKyBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy10b3A6IDNyZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gICAgLmJsMjUgcCArIGJsb2NrcXVvdGUgPiBwOjpiZWZvcmUge1xuICAgICAgcGFkZGluZy10b3A6IDA7IH0gfVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvc3RydWN0dXJlL2JsMjUtYmxvZy1taWdyYXRpb24taHRtbC93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCIvKipcbiAqIEhlcmUgd2UgZGVmaW5lIHN0eWxlcyBmb3IgdGV4dCB0aGF0IGlzIGltcG9ydGVkIGZyb20gYW5vdGhlciBwbGF0Zm9ybVxuICogYW5kIHNob3VsZCBtYXRjaCB0aGUgc3R5bGVzIGZyb20gYmwxMy1yaWNoLXRleHQtZWRpdG9yIGRlc3BpdGVcbiAqIHRoZSBwcm92aWRlZCBtYXJrdXAgb2YgdGhlIGltcG9ydCBpcyBkaWZmZXJlbnQgYW5kIGNvdmVycyBzb21lIGVkZ2UgY2FzZXMuXG4gKi9cblxuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvZ3JpZC5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL21peGluJztcbkBpbXBvcnQgJ2NvcmUvY29tcG9uZW50cy9ibG9nLWJvZHknO1xuXG5AaW5jbHVkZSBjb21wb25lbnRCbG9nQm9keShcIi5ibDI1XCIpO1xuXG4vKiBBcmNoaXZlIHBvc3QgdHlwZSBzdHlsZXMgKi9cblxuLmJsMjUge1xuICBoNCxcbiAgaDUge1xuICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCBibGFjayk7XG4gIH1cblxuICBwOmVtcHR5IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmFsaWduLWxlZnQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICAuYWxpZ24tY2VudGVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuYWxpZ24tcmlnaHQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICB9XG5cbiAgaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cblxuICAvLyBhcmNoaXZlIGJsb2cgcG9zdHMgaGF2ZSA8cHJlPiB0YWdzIHdpdGggY29kZS4gV2UgbmVlZCB0byB3cmFwIHRoZXNlIHNvIHRoZXkgZG9uJ3Qgb3ZlcmZsb3cgb2ZmIHRoZSBzY3JlZW4uXG4gIHByZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgfVxuXG4gIC8vIENlbnRlciBhbGwgaW1hZ2VzIHRvIHNpbXBsaWZ5LCBubyBtYXR0ZXIgaWYgdGhleSB3ZXJlIHJpZ2h0LWFsaWduZWRcbiAgaW1nLmFsaWduLWNlbnRlcixcbiAgaW1nLmFsaWduLXJpZ2h0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cblxuICBlbSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbiAgaWZyYW1lLnR3aXR0ZXItdHdlZXQtcmVuZGVyZWQge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgfVxuXG4gIC52aWRlby15b3V0dWJlIHtcbiAgICBoZWlnaHQ6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG4gICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpZnJhbWUge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxuXG4gIC5nLXRpbWVsaW5lLFxuICAuZy10d2VldCB7XG4gICAgQGluY2x1ZGUgZm9udChyb21hbi0yNCk7XG4gICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuXG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJhc2VkIG9uIGNvbXBvbmVudCBibDE2LXF1b3RlXG4gIGJsb2NrcXVvdGUge1xuICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg0KTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuXG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBtaW5pKSkge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgbW9iaWxlKSkge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cblxuICAgID4gcCB7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVyZW07XG4gICAgICBwYWRkaW5nLWJvdHRvbTogYmFzZWxpbmUoNCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgbW9iaWxlKSkge1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNWVtO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgZm9udC1zaXplOiA2cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGV4dHJhLWxpZ2h0LWdyYXkpO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIlxcMDIwMUNcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAtNHB4O1xuICAgICAgICB0b3A6IC0zMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuXG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgbWluaSkpIHtcbiAgICAgICAgICBsZWZ0OiAtNXB4O1xuICAgICAgICAgIHRvcDogLTU0cHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiBpbmhlcml0O1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBtb2JpbGUpKSB7XG4gICAgICAgICAgbGVmdDogLTVweDtcbiAgICAgICAgICB0b3A6IC01NHB4O1xuICAgICAgICAgIHRyYW5zZm9ybTogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFwwMjAxRFwiO1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBtaW5pKSkge1xuICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgIHRvcDogY2FsYygxMDAlIC0gMy4yNXJlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIG1vYmlsZSkpIHtcbiAgICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgICB0b3A6IGNhbGMoMTAwJSAtIDMuMjVyZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcCArIHNtYWxsIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogYmFzZWxpbmUoMSk7XG5cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgbW9iaWxlKSkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFwwMjAxNFwiO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcCArIHNtYWxsIGNpdGUge1xuICAgICAgQGluY2x1ZGUgZm9udChyb21hbi0xNCk7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSgxKTtcblxuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCB0YWJsZXQpKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSgxKTtcbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBtb2JpbGUpKSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwICsgYmxvY2txdW90ZSB7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDQpO1xuXG4gICAgPiBwOjpiZWZvcmUge1xuXG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIG1vYmlsZSkpIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9zdHJ1Y3R1cmUvYmwyNS1ibG9nLW1pZ3JhdGlvbi1odG1sL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIi8qKlxuICogVGhlIHN0eWxlcyBpbiB0aGlzIGZpbGUgYXJlIHNoYXJlZCBhY3Jvc3MgYmwxMy1yaWNoLXRleHQtZWRpdG9yIGFuZFxuICogYmwyNS1ibG9nLW1pZ3JhdGlvbi1odG1sLiBJZiBhIHN0eWxlIGlzIG9ubHkgdXNlZCBieSBvbmUgY29tcG9uZW50LFxuICogbW92ZSB0aGUgYXBwcm9wcmlhdGUgQ1NTIHRvIHRoZSBjb21wb25lbnQsIGFuZCByZW1vdmUgaXQgZnJvbSB0aGlzIGZpbGUuXG4gKi9cblxuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb24nO1xuQGltcG9ydCAnY29yZS9zdHlsZS9ncmlkJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuQGltcG9ydCAnY29yZS9zdHlsZS90eXBlJztcblxuQG1peGluIGNvbXBvbmVudEJsb2dCb2R5KCRjb21wb25lbnRDbGFzcykge1xuICAkdHJhbnNpdGlvbkVhc2luZzogbWFwLWdldCgkdHJhbnNpdGlvbnMsIGhvdmVyLWVhc2luZyk7XG4gICR0cmFuc2l0aW9uVGltaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItdGltaW5nKTtcblxuICBAZWFjaCAkY29sb3JLZXksICRjb2xvciBpbiBtYXAtZ2V0KCRjb2xvcnMsIGRhcmspIHtcbiAgICAudGhlbWUtLSN7JGNvbG9yS2V5fSAjeyRjb21wb25lbnRDbGFzc30ge1xuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiAjeyRjb2xvcn07XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG4gICAgICB9XG4gICAgICBhOmFjdGl2ZSxcbiAgICAgIGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsIGV4dHJhLWRhcmspLCAkY29sb3JLZXkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIG9sIGxpOjpiZWZvcmUsXG4gICAgICB1bCBsaTo6YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICN7JGNvbG9yfTtcbiAgICAgIH1cbiAgICAgICo6OnNlbGVjdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCBleHRyYS1saWdodCksICRjb2xvcktleSk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN7JGNvbXBvbmVudENsYXNzfSB7XG4gICAgaDIge1xuICAgICAgJGtleTogXCJib2xkLTI0XCI7XG4gICAgICAkdHlwZWZhY2U6IG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksICRrZXkpO1xuICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkdHlwZWZhY2UpO1xuXG4gICAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgYmxhY2spO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7ICAvLyBNb3ZpbmcgaGVhZGluZyBieSAxcHggdG8gaW1wcm92ZSBhbGlnbm1lbnQgd2l0aCB0ZXh0IHZpc3VhbGx5XG4gICAgICBwYWRkaW5nLWJvdHRvbTogYmFzZWxpbmUoMyk7XG4gICAgICBwYWRkaW5nLXRvcDogYmFzZWxpbmUoMyk7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcbiAgICB9XG5cbiAgICBoMyArIG9sLFxuICAgIGgzICsgdWwge1xuICAgICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDEpO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgIH1cblxuICAgIHAgKyBvbCxcbiAgICBwICsgdWwge1xuICAgICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDIpO1xuICAgIH1cblxuICAgIHAgKyBoMyB7XG4gICAgICBwYWRkaW5nLXRvcDogYmFzZWxpbmUoMSk7XG4gICAgfVxuXG4gICAgb2wsXG4gICAgdWwge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg0KTtcbiAgICB9XG5cbiAgICBvbCArIGgyLFxuICAgIHVsICsgaDIge1xuICAgICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDIpO1xuICAgIH1cblxuICAgIG9sIGxpLFxuICAgIHVsIGxpIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSgxKTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb2wge1xuICAgICAgY291bnRlci1yZXNldDogaXRlbTtcblxuICAgICAgbGkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGJhc2VsaW5lKDMpO1xuICAgICAgfVxuXG4gICAgICBsaTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogY291bnRlcihpdGVtKTtcbiAgICAgICAgY291bnRlci1pbmNyZW1lbnQ6IGl0ZW07XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiBiYXNlbGluZSgxLjgpO1xuICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogYmFzZWxpbmUoMSk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBiYXNlbGluZSgtMyk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XG4gICAgICAgIHdpZHRoOiBiYXNlbGluZSgzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCBsaSB7XG4gICAgICAvLyBUaGlzIHBhZGRpbmcgbXVzdCBiZSBmaW5lLXR1bmVkIHRvIGxvb2sgZ29vZCB3aXRoIHRoZSBtYXJnaW4tcmlnaHQgcHJvcGVydHkgb2YgdGhlIDo6YmVmb3JlIHBzZXVkby1lbGVtZW50LlxuICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzLCBtYWtlIHN1cmUgdG8gYWxzbyB0ZXN0IHRoZSBjaGFuZ2Ugd2l0aCBhbiBsaSBlbGVtZW50IHRoYXQgaGFzIHNldmVyYWwgbGluZXMgb2YgdGV4dCFcbiAgICAgIHBhZGRpbmctbGVmdDogMS40cmVtO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIuKAolwiO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogYmFzZWxpbmUoMS41KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IGJhc2VsaW5lKDEpO1xuICAgICAgICBtYXJnaW4tbGVmdDogLTEuNXJlbTtcbiAgICAgICAgd2lkdGg6IGJhc2VsaW5lKDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gKjpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg1KTtcbiAgICB9XG5cbiAgICBpIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICB1IHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgICBcbiAgICBiIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICBTdHlsZSBjaGFuZ2VzIHRvIFwiLmNvZGUtaW5saW5lXCIgYW5kIFwiLmZvb3Rub3RlXCIgc2hvdWxkIGJlIHJlZmxlY3RlZCBoZXJlIGFzIHdlbGw6XG4gICAgICBjb3JlLXR3aXR0ZXItcHJvamVjdC9jb3JlLXR3aXR0ZXItamNyLW1vZHVsZXMvY29yZS10d2l0dGVyLXZpZXcvc3JjL2NvbnRlbnQvamNyX3Jvb3QvZXRjL2Rlc2lnbnMvY29yZS10d2l0dGVyL2NsaWVudGxpYi1lZGl0b3IvY3NzL2JsMTMtcmljaC10ZXh0LWVkaXRvci5jc3NcbiAgICAgIFNvIHRoZSBzdHlsZXMgd2lsbCBiZSBhcHBsaWVkIGluIGZ1bGwgc2NyZWVuIGVkaXRpbmcgbW9kZSBhcyB3ZWxsLlxuICAgICovXG4gICAgLmNvZGUtaW5saW5lIHtcbiAgICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKG5ldXRyYWwsIGRhcmstZ3JheSk7XG4gICAgICBib3JkZXItcmFkaXVzOiBiYXNlbGluZSgwLjMzMyk7XG4gICAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgd2hpdGUpO1xuICAgICAgZm9udC1zaXplOiAwLjk1ZW07XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC43NXB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDAuMjUpO1xuICAgICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSgwLjMzMyk7XG4gICAgICBwYWRkaW5nLXRvcDogYmFzZWxpbmUoMC4xNjYpO1xuICAgICAgcGFkZGluZy1yaWdodDogYmFzZWxpbmUoMC4zMzMpO1xuICAgIH1cblxuICAgIC5mb290bm90ZSB7XG4gICAgICBmb250LXNpemU6IGJhc2VsaW5lKDEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvY29tcG9uZW50cy9ibG9nLWJvZHkuc2Nzc1xuICoqLyIsIkBpbXBvcnQgJy4vbWl4aW4nO1xuXG4kZm9udFNlcnZlcjogJ2h0dHBzOi8vZm9udHMudHdpdHRlci5jb20vaGVsdmV0aWNhX25ldWUnO1xuXG4vKiBIZWx2ZXRpY2EgTmV1ZSBMVCBXMDZfNTcgQ29uZCAqL1xuQGZvbnQtZmFjZXtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFQgQ29uZFwiO1xuICBzcmM6dXJsKFwiI3skZm9udFNlcnZlcn0vODk3ZWE5NTEtN2VjNi00N2Y0LTlkYTMtN2QwNjE5YjQ2ZDA0LmVvdD8jaWVmaXhcIik7XG4gIHNyYzp1cmwoXCIjeyRmb250U2VydmVyfS84OTdlYTk1MS03ZWM2LTQ3ZjQtOWRhMy03ZDA2MTliNDZkMDQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS8wMzNiNTRkYi1iMWNlLTRkYTctODYxYi02MWQwNTljMWM5Yjgud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS9kOWM4NDJmOC1iMzdhLTQxNGYtYmU4Ni05N2VhOWM2MWQzZDcud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLFxuICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vODRhMmNjMDktZjAyZC00YzFkLWE1YTktMmFiNDU2NDM5YzczLnN2ZyM4NGEyY2MwOS1mMDJkLTRjMWQtYTVhOS0yYWI0NTY0MzljNzNcIikgZm9ybWF0KFwic3ZnXCIpO1xufVxuLyogSGVsdmV0aWNhIE5ldWUgTFQgVzA2Xzc1IEJvbGQgKi9cbkBmb250LWZhY2V7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgc3JjOnVybChcIiN7JGZvbnRTZXJ2ZXJ9LzNhZWFlYjFkLTFkZWEtNGU5Yi05ZTgzLTUyYWRjNWE4NzIwOS5lb3Q/I2llZml4XCIpO1xuICBzcmM6dXJsKFwiI3skZm9udFNlcnZlcn0vM2FlYWViMWQtMWRlYS00ZTliLTllODMtNTJhZGM1YTg3MjA5LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLFxuICB1cmwoXCIjeyRmb250U2VydmVyfS9kOTEyMmU4ZC1iZjI2LTRmMWMtYmFiOS1jMDY1OTkzOTdiNTkud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gIHVybChcIiN7JGZvbnRTZXJ2ZXJ9L2RiMGNlYzEyLWE5NDctNDBmZS1hMTE1LWM1Y2UyMmVlNzlmNi53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksXG4gIHVybChcIiN7JGZvbnRTZXJ2ZXJ9LzAyNDQxMWVmLTI2YmYtNDUzNi1hZWE0LWVjOTUzODQ2ZWRhNy5zdmcjMDI0NDExZWYtMjZiZi00NTM2LWFlYTQtZWM5NTM4NDZlZGE3XCIpIGZvcm1hdChcInN2Z1wiKTtcbn1cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl84NSBIZWF2eSAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiA5MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgc3JjOiB1cmwoXCIjeyRmb250U2VydmVyfS84YTkwYTJiYS0xMjc2LTRiM2YtYmMxYy04NTI2MTcyYjI3ZjQuZW90PyNpZWZpeFwiKTtcbiAgc3JjOiB1cmwoXCIjeyRmb250U2VydmVyfS84YTkwYTJiYS0xMjc2LTRiM2YtYmMxYy04NTI2MTcyYjI3ZjQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS9jNDE1ZjNmZC1mZjI3LTQwZmUtYWY5NC04YjRhNTRiNGI0ZTQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vYTFkYTIwYzctNGRjOS00YWY1LWJkNmYtOWViZTUwYjY3ODhkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSxcbiAgICAgICB1cmwoXCIjeyRmb250U2VydmVyfS9hY2Q4ZDZkZi05Njk2LTQwOTItYmYyMy01MzcwYzYzY2E5ZmIuc3ZnI2FjZDhkNmRmLTk2OTYtNDA5Mi1iZjIzLTUzNzBjNjNjYTlmYlwiKSBmb3JtYXQoXCJzdmdcIik7XG59XG4vKiBIZWx2ZXRpY2EgTmV1ZSBMVCBXMDZfNTYgSXQgKi9cbkBmb250LWZhY2V7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgc3JjOnVybChcIiN7JGZvbnRTZXJ2ZXJ9LzdkZjM5MzI1LTBlMGUtNDYzNS1hNzE3LTU5MDMzYTAyNmZjNS5lb3Q/I2llZml4XCIpO1xuICBzcmM6dXJsKFwiI3skZm9udFNlcnZlcn0vN2RmMzkzMjUtMGUwZS00NjM1LWE3MTctNTkwMzNhMDI2ZmM1LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLFxuICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vNmFjYjliMjYtN2U4ZS00NmI0LWI2OGItNjMxYWIwN2Q2ZWQ3LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vMjkxNGE5MGUtZDc2Ni00Y2Y4LTk3YjktMDRjNWZlODk3ZjA2LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSxcbiAgICAgIHVybChcIiN7JGZvbnRTZXJ2ZXJ9L2I4NWVhNWIzLThkYzgtNDk4OS1hOTgyLWY0NjFiYzk2NTVmOC5zdmcjYjg1ZWE1YjMtOGRjOC00OTg5LWE5ODItZjQ2MWJjOTY1NWY4XCIpIGZvcm1hdChcInN2Z1wiKTtcbn1cbi8qIEhlbHZldGljYSBOZXVlIExUIFcwNl80NSBMaWdodCAqL1xuQGZvbnQtZmFjZXtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFRcIjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBzcmM6dXJsKFwiI3skZm9udFNlcnZlcn0vMjAyM2U3ZDEtOWYwYS00Y2FjLThlODAtMjIzMjFkYjkxOGRkLmVvdD8jaWVmaXhcIik7XG4gIHNyYzp1cmwoXCIjeyRmb250U2VydmVyfS8yMDIzZTdkMS05ZjBhLTRjYWMtOGU4MC0yMjMyMWRiOTE4ZGQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS8xOThmZDc4Yi0zNjU1LTQ3NjgtODljNC0zMWNhZjY1ZWEzNjMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS80OTYzMWNlOC05MjAxLTQ3YTgtODg3NC00NTM3MTQxN2MzNWYud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLFxuICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vOWFjM2Q0MjQtODUyMS00NmNmLTg4NzgtNzMyNDc2MmRiN2I0LnN2ZyM5YWMzZDQyNC04NTIxLTQ2Y2YtODg3OC03MzI0NzYyZGI3YjRcIikgZm9ybWF0KFwic3ZnXCIpO1xufVxuLyogSGVsdmV0aWNhIE5ldWUgTFQgVzA2XzU1IFJvbWFuICovXG5AZm9udC1mYWNle1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIHNyYzp1cmwoXCIjeyRmb250U2VydmVyfS84YjNiMDEzMy0yMjJkLTRmZmMtOWQ2ZS01NjVkZDg3OTY5MGMuZW90PyNpZWZpeFwiKTtcbiAgc3JjOnVybChcIiN7JGZvbnRTZXJ2ZXJ9LzhiM2IwMTMzLTIyMmQtNGZmYy05ZDZlLTU2NWRkODc5NjkwYy5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVvdFwiKSxcbiAgICAgIHVybChcIiN7JGZvbnRTZXJ2ZXJ9LzFhMTRkY2FjLTdjOWUtNDcxYy04MDM5LTMzYzczMGY4NzFmMi53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSxcbiAgICAgIHVybChcIiN7JGZvbnRTZXJ2ZXJ9LzU1OGVkNTM0LTBjNjAtNDJjZi04Yjk0LWQwYTE2ZWI3MGQzNy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS82NTEzZTgwNC1lMDNlLTQxYTEtODM4NS1kNWUwOTcxZjIwMDkuc3ZnIzY1MTNlODA0LWUwM2UtNDFhMS04Mzg1LWQ1ZTA5NzFmMjAwOVwiKSBmb3JtYXQoXCJzdmdcIik7XG59XG4vKiBIZWx2ZXRpY2EgTmV1ZSBMVCBXMDZfMzUgVGhpbiAqL1xuQGZvbnQtZmFjZXtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFRcIjtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBzcmM6dXJsKFwiI3skZm9udFNlcnZlcn0vMmExMjkxNDItN2M1MC00NzI4LTkyMjctMWVlYmYyZDlmMTZkLmVvdD8jaWVmaXhcIik7XG4gIHNyYzp1cmwoXCIjeyRmb250U2VydmVyfS8yYTEyOTE0Mi03YzUwLTQ3MjgtOTIyNy0xZWViZjJkOWYxNmQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS8yMTkyYTI2Yy1kZTFjLTRjNTAtODhkMS1lNTEzNjAzM2MxNWEud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICB1cmwoXCIjeyRmb250U2VydmVyfS8wMjEyZDIwMy1jZTNmLTQyZTItODYyYS1lZGY5ODg2MjE3Mjgud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLFxuICAgICAgdXJsKFwiI3skZm9udFNlcnZlcn0vNTUyYzQzYTMtNmNjNy00N2I5LThiODEtMzk4Yjk2MWI1MTY3LnN2ZyM1NTJjNDNhMy02Y2M3LTQ3YjktOGI4MS0zOThiOTYxYjUxNjdcIikgZm9ybWF0KFwic3ZnXCIpO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX3R5cGUuc2Nzc1xuICoqLyIsIiR0cmFuc2l0aW9uczogKGhvdmVyLXRpbWluZzogMC4zcyxob3Zlci1lYXNpbmc6IGVhc2UtaW4tb3V0LGNvbG9yLWNoYW5nZS10aW1pbmc6IDFzLGNvbG9yLWNoYW5nZS1lYXNpbmc6IGVhc2UtaW4tb3V0LGxvYWRlci1iaXJkLXRpbWluZzogMC4zcyxsb2FkZXItYmlyZC1lYXNpbmc6IGVhc2UtaW4pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb25cbiAqKi8iLCIkdHlwb2dyYXBoeTogKGRlZmF1bHQ6IChib2xkLTE0NDogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTk2OiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNzI6ICh3ZWlnaHQ6IDcwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNzI6ICh3ZWlnaHQ6IDQwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC00ODogKHdlaWdodDogNzAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi00ODogKHdlaWdodDogNDAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTM2OiAod2VpZ2h0OiA3MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTM2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMjQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAyLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTI0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMTUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNjogKHdlaWdodDogNzAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4zMyxsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNDogKHdlaWdodDogNzAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDMwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4xNixsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCkpLHJlc3BvbnNpdmU6IChmdWxsOiAoYm9sZC0xNDQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxMixsaW5lLWhlaWdodDogMTIsdHJhY2tpbmc6IC0yMDAsbWFyZ2luLWJvdHRvbTogMCksYm9sZC05NjogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTcyOiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTcyOiAod2VpZ2h0OiA0MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNDg6ICh3ZWlnaHQ6IDcwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNDg6ICh3ZWlnaHQ6IDQwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0zNjogKHdlaWdodDogNzAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0zNjogKHdlaWdodDogNDAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTI0OiAod2VpZ2h0OiA3MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0yNDogKHdlaWdodDogNDAwLHNpemU6IDIsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDE1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTY6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjMzLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAyNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNjogKHdlaWdodDogNDAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjE2LGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAzMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNDogKHdlaWdodDogNDAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApKSkpO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb25cbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2dyaWQuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5cbi5jMTUtY29sdW1uLWNvbnRhaW5lciB7XG4gIC5jb2x1bW4ge1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICBAaW5jbHVkZSBzcGFuKDEyIGxhc3QpO1xuICAgICYubGFzdCB7XG4gICAgICBAaW5jbHVkZSBsYXN0O1xuICAgIH1cbiAgfVxuICAuY29sdW1uLTEge1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMSk7XG4gICAgfVxuICB9XG4gIC5jb2x1bW4tMiB7XG4gICAgQGluY2x1ZGUgc3BhbigyKTtcbiAgfVxuICAuY29sdW1uLTMge1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMyk7XG4gICAgfVxuICB9XG4gIC5jb2x1bW4tNCB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig0KTtcbiAgICB9XG4gIH1cbiAgLmNvbHVtbi01IHtcbiAgICBAaW5jbHVkZSBzcGFuKDUpO1xuICB9XG4gIC5jb2x1bW4tNiB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig2KTtcbiAgICAgIC5jb250YWluZXIge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5jb2x1bW4tNyB7XG4gICAgQGluY2x1ZGUgc3BhbigxMik7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig3KTtcbiAgICAgIC5jb250YWluZXIge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5jb2x1bW4tOCB7XG4gICAgQGluY2x1ZGUgc3Bhbig4KTtcbiAgfVxuICAuY29sdW1uLTkge1xuICAgIEBpbmNsdWRlIHNwYW4oOSk7XG4gIH1cbiAgLmNvbHVtbi0xMCB7XG4gICAgQGluY2x1ZGUgc3BhbigxMCk7XG4gIH1cbiAgLmNvbHVtbi0xMSB7XG4gICAgQGluY2x1ZGUgc3BhbigxMSk7XG4gIH1cbiAgLmNvbHVtbi0xMiB7XG4gICAgQGluY2x1ZGUgc3BhbigxMik7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL3N0cnVjdHVyZS9jMTUtY29sdW1uLWNvbnRhaW5lci93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCIvLyBSb3cgU3RhcnQgJiBFbmRcbi8vID09PT09PT09PT09PT09PVxuXG4vLyBCcmVha1xuLy8gLS0tLS1cbi8vIEFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQgc2hvdWxkIGZvcmNlIGEgbGluZSBicmVhay5cbkBtaXhpbiBicmVhayB7XG4gIEBpbmNsdWRlIG91dHB1dCgoY2xlYXI6IGJvdGgpKTtcbn1cblxuXG4vLyBOb0JyZWFrXG4vLyAtLS0tLS0tXG4vLyBDYW5jZWwgdGhlIGJyZWFrKCkgZWZmZWN0LCBlLmcuIHdoZW4gdXNpbmcgbWVkaWEgcXVlcmllcy5cbkBtaXhpbiBub2JyZWFrIHtcbiAgQGluY2x1ZGUgb3V0cHV0KChjbGVhcjogbm9uZSkpO1xufVxuXG5cbi8vIEZ1bGxcbi8vIC0tLS1cbi8vIC0gWyRjb250ZXh0XTogPGxheW91dCBzaG9ydGhhbmQ+XG5AbWl4aW4gZnVsbChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgOiAkY29udGV4dDtcbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGZ1bGwsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgc3BhbihmdWxsIG9mIHBhcnNlLWdyaWQoJGNvbnRleHQpIGJyZWFrKTtcbn1cblxuXG4vLyBGaXJzdFxuLy8gLS0tLS1cbi8vIC0gWyRjb250ZXh0XTogPHNldHRpbmdzPlxuQG1peGluIGZpcnN0KFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkY29udGV4dDtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3JpZCgkY29udGV4dCk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZmlyc3QsICRpbnNwZWN0KTtcbiAgQGlmIG5vdChpcy1zcGxpdCgkY29udGV4dCkpIHtcbiAgICBAaW5jbHVkZSBmbG9hdC1maXJzdCgkZmxvdyk7XG4gIH1cbn1cblxuQG1peGluIGFscGhhKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBmaXJzdCgkY29udGV4dCk7XG59XG5cblxuLy8gTGFzdFxuLy8gLS0tLVxuLy8gLSBbJGNvbnRleHRdOiA8c2V0dGluZ3M+XG5AbWl4aW4gbGFzdChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLWdyaWQoJGNvbnRleHQpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChsYXN0LCAkaW5zcGVjdCk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KSxcbiAgICBsYXN0LWZsb3c6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJGNvbnRleHQpLFxuICAgIG1hcmdpbjogaWYoaXMtc3BsaXQoJGNvbnRleHQpLCBudWxsLCAwKSxcbiAgKTtcblxuICBAaW5jbHVkZSBmbG9hdC1sYXN0KCRvdXRwdXQuLi4pO1xufVxuXG5AbWl4aW4gb21lZ2EoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGxhc3QoJGNvbnRleHQpO1xufVxuXG5cbi8vIEdldCBFZGdlXG4vLyAtLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGVkZ2UgdmFsdWUgYmFzZWQgb24gbG9jYXRpb24sIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWVkZ2UoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBzdXN5LWdldChlZGdlLCAkc3Bhbik7XG5cbiAgQGlmIG5vdCgkZWRnZSkge1xuICAgICRjb3VudDogc3VzeS1jb3VudChzdXN5LWdldChjb2x1bW5zLCAkc3BhbikpO1xuICAgICRsb2NhdGlvbjogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgICAkbjogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gICAgJG51bWJlcjogaWYodHlwZS1vZigkbG9jYXRpb24pID09IG51bWJlciwgdHJ1ZSwgZmFsc2UpO1xuICAgICRpbmRleDogaWYoJG51bWJlciBhbmQgdW5pdGxlc3MoJGxvY2F0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgQGlmICRuID09ICRjb3VudCB7XG4gICAgICAkZWRnZTogZnVsbDtcbiAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiBhbmQgJG4gYW5kICRpbmRleCB7XG4gICAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgICAkZWRnZTogaWYoJG4gPT0gJGNvdW50LCBmdWxsLCBmaXJzdCk7XG4gICAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiArICRuIC0gMSA9PSAkY291bnQge1xuICAgICAgICAkZWRnZTogbGFzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJGVkZ2UgPT0gYWxwaGEgb3IgJGVkZ2UgPT0gb21lZ2Ege1xuICAgICRlZGdlOiBpZigkZWRnZSA9PSBhbHBoYSwgZmlyc3QsIGxhc3QpO1xuICB9XG5cbiAgQHJldHVybiAkZWRnZTtcbn1cblxuXG4vLyBHZXQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGxvY2F0aW9uIHZhbHVlIGJhc2VkIG9uIGVkZ2UsIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWxvY2F0aW9uKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRsb2NhdGlvbiAgIDogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRuICAgICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gIEBpZiAkZWRnZSBhbmQgbm90KCRsb2NhdGlvbikgYW5kIHR5cGUtb2YoJG4pID09IG51bWJlciBhbmQgdW5pdGxlc3MoJG4pIHtcbiAgICBAaWYgJGVkZ2UgPT0gZmlyc3Qge1xuICAgICAgJGxvY2F0aW9uOiAxO1xuICAgIH0gQGVsc2UgaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkbG9jYXRpb246IHN1c3ktY291bnQoc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pKSAtICRuICsgMTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRsb2NhdGlvblxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fcm93cy5zY3NzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==*/