/*! sanitize.css | CC0 Public Domain | github.com/jonathantneal/sanitize.css */
/*
 * Normalization
 */
:root {
  -webkit-text-size-adjust: 100%;
      -ms-text-size-adjust: 100%;
          text-size-adjust: 100%;
}

audio:not([controls]) {
  display: none;
}

details {
  display: block;
}

input[type="number"] {
  width: auto;
}

input[type="search"] {
  -webkit-appearance: textfield;
}

input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

main {
  display: block;
}

summary {
  display: block;
}

pre {
  overflow: auto;
}

progress {
  display: inline-block;
}

small {
  font-size: 75%;
}

template {
  display: none;
}

textarea {
  overflow: auto;
}

[hidden] {
  display: none;
}

[unselectable] {
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}

/*
 * Universal inheritance
 */
*,
::after,
::before {
  box-sizing: inherit;
  color: inherit;
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
  text-decoration: inherit;
  vertical-align: inherit;
}

/*
 * Opinionated defaults
 */
*,
*::before,
*::after {
  border-style: solid;
  border-width: 0;
}

* {
  margin: 0;
  padding: 0;
}

:root {
  box-sizing: border-box;
  cursor: default;
  font-family: sans-serif;
  line-height: 1.5em;
  text-rendering: optimizeLegibility;
  vertical-align: top;
}

* {
  cursor: inherit;
}

a,
button,
input,
select,
textarea {
  cursor: initial;
}

button,
input,
select,
textarea {
  background: transparent;
}

code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
}

input {
  min-height: 1.5em;
}

nav ol,
nav ul {
  list-style: none;
}

select {
  -moz-appearance: none;
  -webkit-appearance: none;
}

select::-ms-expand {
  display: none;
}

select::-ms-value {
  color: currentColor;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

textarea {
  resize: vertical;
}

::-moz-selection {
  background-color: #B3D4FC;
  text-shadow: none;
}

::selection {
  background-color: #B3D4FC;
  text-shadow: none;
}

@media screen {
  [hidden~="screen"] {
    display: inherit;
  }
  [hidden~="screen"]:not(:active):not(:focus):not(:target) {
    clip: rect(0 0 0 0) !important;
    position: absolute !important;
  }
}

button {
  padding: 10px;
  margin: 1em 0;
}

button.go {
  background: #00613f;
  color: #e9e9e9;
  box-shadow: 2px 2px 0 #00301f;
}

button.formsubmit {
  padding: gutter();
  color: #e9e9e9;
  background: #396BA0;
  box-shadow: 2px 2px 0 #182c42;
}

button.formsubmit:hover {
  background: #254568;
}

.laurennote {
  font-weight: bold;
  color: orangered !important;
}

body {
  font-size: 100%;
  font-weight: 300;
}

body, h1, h2, h3, h4, h5, h6 {
  font-size-adjust: 0.5;
}

h1, h2, h3, h4, h5, h6 {
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
}

[role="main"] {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 1em;
  line-height: 1.25;
}

@media (min-width: 43.75em) {
  [role="main"] {
    font-size: 1em;
    line-height: 1.375;
  }
}

h1 {
  font-size: 2em;
  line-height: 1.25;
}

@media (min-width: 43.75em) {
  h1 {
    font-size: 2em;
    line-height: 1.25;
  }
}

@media (min-width: 56.25em) {
  h1 {
    font-size: 2.25em;
    line-height: 1.25;
  }
}

h2 {
  font-size: 1.375em;
  line-height: 1.13636364;
  font-weight: normal;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

@media (min-width: 43.75em) {
  h2 {
    font-size: 1.5em;
    line-height: 1.25;
  }
}

@media (min-width: 56.25em) {
  h2 {
    font-size: 1.75em;
    line-height: 1.25;
  }
}

h3 {
  font-size: 1.375em;
  line-height: 1.13636364;
}

@media (min-width: 43.75em) {
  h3 {
    font-size: 1.125em;
    line-height: 1.1111111;
  }
}

@media (min-width: 56.25em) {
  h3 {
    font-size: 1.375em;
    line-height: 1.13636364;
  }
}

h4 {
  font-size: 1.125em;
  line-height: 1.11111111;
}

@media (min-width: 43.75em) {
  h4 {
    line-height: 1.22222222;
  }
}

blockquote {
  font-size: 1.25em;
  line-height: 1.25;
}

@media (min-width: 43.75em) {
  blockquote {
    font-size: 1.5em;
    line-height: 1.45833333;
  }
}

p + p {
  margin-top: 1em;
}

[role="main"] h2.left-heading {
  text-align: left;
}

[role="main"] h2.center-heading {
  text-align: center;
}

[role="main"] h2.right-heading {
  text-align: right;
}

body {
  max-width: 100%;
  margin-left: auto;
  margin-right: auto;
  margin-top: 0;
}

body:after {
  content: " ";
  display: block;
  clear: both;
}

body :first-child {
  opacity: .99;
}

a {
  color: #0F8297;
  cursor: auto;
}

.logo-text {
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  text-transform: uppercase;
}

.skip {
  position: absolute;
  top: -1000px;
  left: -1000px;
  height: 1px;
  width: 1px;
  background: red;
  color: #eee;
  z-index: 1000;
  text-align: left;
  overflow: hidden;
}

a.skip:active,
a.skip:focus,
a.skip:hover {
  left: 0;
  top: 0;
  width: auto;
  height: auto;
  overflow: visible;
}

[role="banner"] {
  box-sizing: content-box;
  margin: -1.69492%;
  padding: 1.69492%;
  padding-top: 1em;
  margin-bottom: 1em;
  background: url(../img/rocky-maine-coast.jpg) no-repeat -50px 0;
  background-size: cover;
}

@media (min-width: 55em) {
  [role="banner"] {
    background-position: 0 0;
  }
  [role="banner"]:after {
    content: "";
    display: table;
    clear: both;
  }
}

[role="banner"] .biglogo {
  margin: .25em 0;
  padding: 0;
}

[role="banner"] .biglogo img {
  margin: .25em auto;
  display: block;
  max-width: 30%;
  height: auto;
}

@media (min-width: 55em) {
  [role="banner"] .biglogo {
    width: 23.72881%;
    float: left;
    margin-right: 1.69492%;
    margin-top: 1rem;
    margin-left: 8.47458%;
  }
  [role="banner"] .biglogo img {
    max-width: 100%;
  }
}

[role="banner"] .tollfree {
  color: #023059;
  text-decoration: none;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  font-size: 1.5em;
  text-align: center;
  display: block;
  margin: .5em auto;
}

@media (min-width: 55em) {
  [role="banner"] .tollfree {
    width: 40.67797%;
    float: left;
    margin-right: 1.69492%;
    text-align: left;
    font-size: 2em;
    margin-top: 1.09em;
  }
}

@media (min-width: 43.75em) {
  [role="banner"] .tollfree:before {
    content: 'Call DRM: ';
  }
}

header.dev-mode {
  border-bottom: 12px solid red;
}

@media (min-width: 55em) {
  [role="navigation"] ul {
    padding: 0.42373%;
    background: #023059;
    width: 100%;
    margin: 0 auto;
    margin-bottom: 6px;
  }
  [role="navigation"] ul:after {
    content: "";
    display: table;
    clear: both;
  }
}

@media (min-width: 55em) {
  [role="navigation"] ul li .subnav {
    display: none;
  }
}

[role="navigation"].section-nav ul {
  background: none;
}

/* Important stuff off-canvas nav stuff */
@media (min-width: 55em) {
  ul.menu {
    width: 40.67797%;
    float: left;
    margin-right: 1.69492%;
  }
}

ul.menu li {
  text-transform: uppercase;
  text-decoration: none;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  list-style-type: none;
  display: block;
  float: left;
  margin: 0;
  /* Fixes Firefox bug */
  box-sizing: border-box;
  width: 20%;
  text-align: center;
}

ul.menu li a {
  display: block;
  padding: .25em 0;
  background: #023059;
  color: #e9e9e9;
}

ul.menu li a:hover {
  background: #0466bd;
}

ul.menu li.support a {
  background: #e9e9e9;
  color: #023059;
}

ul.menu li.support a:hover {
  background: #90cafd;
  color: #023059;
}

@media (min-width: 55em) {
  ul.menu li {
    width: 23.07692%;
    float: left;
    margin-right: 2.5641%;
  }
  ul.menu li:nth-child(4) {
    float: right;
    margin-right: 0;
  }
}

ul.menu li li {
  font-size: 1em;
}

/* Reveal open/close buttons */
a#menu {
  display: block;
  color: #e9e9e9;
  text-align: right;
  margin-right: 1em;
  margin-bottom: 1em;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  font-size: 1.125em;
}

@media (min-width: 55em) {
  a#menu {
    display: none;
  }
}

.close-panel {
  color: #e9e9e9;
  position: relative;
  left: .5em;
}

@media (min-width: 55em) {
  .close-panel {
    display: none;
  }
}

@media only screen and (max-width: 55em) {
  #content {
    padding-top: 0;
  }
  /* Move nav off screen, setup transitions */
  [role="navigation"] {
    width: 300px;
    position: absolute;
    transform: translate(-300px, 0);
    transition: transform 0.3s ease;
    top: 0;
    height: 100%;
    background: #023059;
    z-index: 40;
  }
  [role="navigation"].open {
    transform: translate(0, 0);
  }
  /* Display nav items vertically */
  ul.menu {
    border-top: 1px solid #e9e9e9;
    border-bottom: 1px solid #e9e9e9;
    padding: 0;
    width: 100%;
  }
  ul.menu > li + li {
    margin-top: 1em;
  }
  ul.menu li {
    float: none;
    width: 100%;
    text-align: left;
    box-sizing: border-box;
    background: #023059;
  }
  ul.menu li a {
    padding: .5em 1em;
    color: #e9e9e9;
  }
  ul.menu li > ul > li {
    text-transform: none;
  }
}

[role="main"] {
  clear: both;
  padding: 1.69492%;
}

@media (min-width: 55em) {
  [role="main"] {
    clear: none;
    width: 57.62712%;
    float: left;
    margin-right: 1.69492%;
    padding: 0;
    margin-bottom: 3em;
  }
}

[role="main"] section ul {
  margin-bottom: 1em;
}

[role="main"] ul.fa-ul li {
  list-style-type: none;
}

[role="main"] li {
  list-style: disc outside none;
  display: list-item;
  margin-left: 2em;
}

[role="main"] a {
  text-decoration: underline;
}

[role="main"].home .welcome, [role="main"].resources-page .welcome {
  text-align: center;
}

@media (min-width: 55em) {
  [role="main"].home, [role="main"].resources-page {
    width: 83.05085%;
    float: left;
    margin-right: 1.69492%;
    margin-left: 8.47458%;
  }
  [role="main"].home aside, [role="main"].resources-page aside {
    width: 48.97959%;
    float: left;
    margin-right: 2.04082%;
  }
}

.resources-list {
  padding-left: 1rem;
}

.resources-list h2 {
  margin-top: 6px;
  width: 75%;
  max-width: 60em;
  border-bottom: 1px solid #00301f;
}

.resources-list h2:first-of-type {
  margin-top: 0;
}

.resources-list h2 .number-available {
  margin-top: 6px;
  font-size: 1.125rem;
  display: inline-block;
}

.resources-list h2 .fa-caret-right {
  transition: all .25s ease-out;
}

.resources-list h2 .fa-caret-right.active {
  transform: rotate(90deg);
}

.resources-list article.content {
  margin-top: 2rem;
  margin-bottom: 0;
  max-width: 60em;
}

.accordion-toggle {
  cursor: pointer;
}

.accordion-content {
  display: none;
  margin-bottom: 3rem;
}

.get-help {
  overflow: auto;
  margin-bottom: 1.69492%;
}

.get-help h2 {
  text-transform: uppercase;
  font-size: 1.55em;
  text-align: center;
}

.get-help h2 .ada-red {
  color: #CC3A29;
}

.get-help h2 .ada-blue {
  color: #09639C;
}

@media (min-width: 526px) {
  .get-help h2 {
    font-size: 2em;
  }
}

@media (min-width: 626px) {
  .get-help h2 {
    font-size: 2.25em;
  }
}

@media (min-width: 55em) {
  .get-help h2 {
    font-size: 2em;
  }
}

@media (min-width: 76em) {
  .get-help h2 {
    font-size: 2.75em;
  }
}

.get-help header {
  border-bottom: 0;
}

.get-help header p {
  margin-top: 0;
  padding-top: 0;
  padding-bottom: .5em;
}

.get-help ul {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -ms-flex-pack: center;
      justify-content: center;
  font-size: 1.125em;
  list-style-type: none;
  padding: 0;
  margin: 0;
}

.get-help ul li {
  margin: 5px;
  -ms-flex: 0 1 calc(33.33% - 10px);
      flex: 0 1 calc(33.33% - 10px);
  display: -ms-flexbox;
  display: flex;
  text-align: center;
  box-shadow: inset 0 -4px 4px rgba(0, 0, 0, 0.3);
}

.get-help ul li a {
  padding: 5px;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  -ms-flex-align: center;
      align-items: center;
  display: -ms-flexbox;
  display: flex;
  background: #023059;
  color: #e9e9e9;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  text-decoration: none;
  text-align: center;
}

.get-help ul li a:hover {
  background-color: #0466bd;
}

.get-help ul li a.long-name {
  font-size: 85%;
  letter-spacing: -0.04em;
}

@media (min-width: 43.75em) {
  .get-help ul li a.long-name {
    font-size: 100%;
    letter-spacing: 0;
  }
}

.get-help ul li a span {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  display: block;
}

.get-help p {
  padding: .75em 0 1.5em 0;
}

.heroic {
  display: block;
  margin-bottom: 1.69492%;
}

@media (min-width: 600px) {
  .heroic {
    display: -ms-flexbox;
    display: flex;
    -ms-flex-direction: row;
        flex-direction: row;
    -ms-flex-pack: distribute;
        justify-content: space-around;
  }
}

.hero {
  border: 1px solid #333;
  box-shadow: 1px 1px 10px #333;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -ms-flex-align: center;
      align-items: center;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  margin-bottom: 1em;
  margin-left: 1.69492%;
  margin-right: 1.69492%;
  padding: 1.69492%;
  text-align: center;
}

@media (min-width: 600px) {
  .hero {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
}

.hero a {
  display: block;
  margin-bottom: 0;
  text-decoration: none;
}

.hero a p {
  text-align: center;
}

.hero img {
  max-width: 100%;
  isolation: isolate;
}

.hero img + p {
  margin-top: 10px;
}

.hero img.left {
  float: left;
  margin-right: 1em;
}

.hero img.right {
  float: right;
  margin-left: 1em;
}

.hero .caption {
  margin-top: 1em;
}

.hero.blogpromo {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: column;
      flex-direction: column;
}

.hero.blogpromo .headline {
  padding-bottom: 10px;
}

.hero.blogpromo .teaser {
  padding-top: 10px;
  font-style: italic;
}

.dynamo {
  min-height: 200px;
  clear: both;
  overflow: auto;
  margin-bottom: 1.69492%;
}

@media (min-width: 43.75em) {
  .dynamo {
    display: -ms-flexbox;
    display: flex;
  }
}

.news-briefs {
  padding: 1.69492%;
  margin-bottom: 1em;
  background: #e9e9e9;
  box-shadow: 1px 1px 10px #444;
}

@media (min-width: 43.75em) {
  .news-briefs {
    width: 48.97959%;
    float: left;
    margin-right: 2.04082%;
  }
}

.news-briefs li {
  list-style-type: none;
  margin-bottom: 1em;
}

.news-briefs li:after {
  content: "";
  display: table;
  clear: both;
}

.news-briefs li a {
  color: #222;
  text-decoration: none;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  font-weight: 700;
  font-size: 1.125em;
}

.news-briefs li a .snippet {
  font-weight: 300;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 1rem;
}

.news-briefs .fa-stack {
  line-height: 1.5em;
  width: 16.66667%;
  float: left;
  margin-right: 4.16667%;
  width: 1.5em;
  height: 1.5em;
  vertical-align: middle;
}

.news-briefs .fa-stack .fa-newspaper-o {
  color: #e9e9e9;
}

.news-briefs .fa-stack .fa-flag {
  color: #711E1C;
}

.news-briefs .fa-stack .fa-calendar {
  color: #396BA0;
}

.news-briefs .fa-stack .fa-users {
  color: #00613f;
}

.news-briefs .text {
  width: 79.59184%;
  float: left;
  margin-right: 2.04082%;
}

.news-briefs .text:hover {
  color: #396BA0;
}

.mission {
  background: white;
  box-shadow: 1px 1px 10px #444;
  padding: 1.69492%;
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0;
}

.mission .collage {
  background: orange;
  margin-top: 1em;
  width: 31.81818%;
  float: left;
  margin-right: 2.27273%;
  height: 150px;
  overflow: hidden;
}

.mission .collage:nth-child(3) {
  width: 31.81818%;
  float: right;
  margin-right: 0;
}

.mission .collage img {
  width: 100%;
}

@media (min-width: 43.75em) {
  .mission .collage {
    height: 175px;
  }
}

@media (min-width: 55em) {
  .mission {
    padding: 1.69492%;
  }
  .mission .collage {
    width: 20.45455%;
    float: left;
    margin-right: 2.27273%;
    height: 200px;
  }
  .mission .collage:nth-child(3) {
    width: 20.45455%;
    float: right;
    margin-right: 0;
  }
  .mission p {
    width: 31.81818%;
    float: left;
    margin-right: 2.27273%;
    font-size: 1.25em;
    font-weight: bold;
    font-style: italic;
  }
}

.newsarchive section {
  margin-top: 2em;
}

.newsarchive section h2 {
  border-bottom: 1px solid #00301f;
}

.newsarchive h3 a {
  text-decoration: none;
}

.newsarchive article + article {
  margin-top: 2em;
}

[role="main"] li.newslisting {
  padding: .5em;
  margin-left: 0;
  list-style-type: none;
}

[role="main"] li.newslisting:after {
  content: "";
  display: table;
  clear: both;
}

[role="main"] li.newslisting span.fa-stack {
  float: left;
  margin-top: -.5em;
}

[role="main"] li.newslisting a {
  color: #222;
  text-decoration: none;
}

[role="main"] li.newslisting a:hover {
  color: #396BA0;
}

[role="main"] li.newslisting h4 {
  display: block;
}

.upcoming {
  background: #e9e9e9;
  padding: 1.69492%;
}

@media (min-width: 43.75em) {
  .upcoming {
    width: 48.97959%;
    float: right;
    margin-right: 0;
  }
}

.upcoming {
  margin-bottom: 1em;
  box-shadow: 1px 1px 10px #444;
}

.upcoming ul {
  list-style-type: none;
}

.upcoming ul li {
  margin-bottom: 1em;
  list-style-type: none;
}

.upcoming ul li:after {
  content: "";
  display: table;
  clear: both;
}

.upcoming ul h4 a {
  text-decoration: none;
  color: #222;
}

.upcoming ul h4 a:hover {
  color: #396BA0;
}

.upcoming .calendar {
  width: 48px;
  height: 50px;
  text-align: center;
  border: 1px solid #0F8297;
  float: left;
  margin-right: .5em;
  background-color: #fff;
}

.upcoming .calendar .month {
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  text-transform: uppercase;
  color: #fff;
  background-color: #396BA0;
  width: 100%;
  text-align: center;
  display: inline-block;
}

.upcoming .calendar .day {
  font-size: 1.5em;
  line-height: .95em;
  font-weight: bold;
}

.training {
  margin-bottom: .75em;
}

.training:after {
  content: "";
  display: table;
  clear: both;
}

.training a {
  color: #222;
  text-decoration: none;
}

.training a:hover {
  color: #396BA0;
}

.training h4 {
  display: block;
}

.training .calendar {
  width: 48px;
  height: 50px;
  text-align: center;
  border: 1px solid #0F8297;
  float: left;
  margin-right: .5em;
  background-color: #fff;
}

.training .calendar .month {
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  text-transform: uppercase;
  color: #fff;
  background-color: #396BA0;
  width: 100%;
  text-align: center;
  display: inline-block;
}

.training .calendar .day {
  font-size: 1.5em;
  line-height: .95em;
  font-weight: bold;
}

.logistics {
  margin-bottom: 20px;
}

.logistics dt {
  font-weight: bold;
}

.logistics dd + dt {
  margin-top: 1em;
}

[role="main"].events h1 {
  font-size: 2.5em;
}

@media (min-width: 43.75em) {
  [role="main"].events h1 {
    font-size: 2.5em;
  }
}

@media (min-width: 56.25em) {
  [role="main"].events h1 {
    font-size: 2.5em;
  }
}

.contact ul {
  margin-left: 2em;
}

.contact .question {
  margin-top: 1em;
}

.contact p {
  margin-top: .5em;
}

.contact .googlemap {
  margin: 1em auto;
}

.contact .dsa-info {
  margin-top: 1em;
  padding-top: 1em;
  border-top: 1px solid #64a08d;
}

.contact .ff-form-success {
  background: #0466bd;
  padding: 2rem;
  font-size: 1.25rem;
}

.contact form input, .contact form textarea {
  border: 1px solid #333;
  width: 48.97959%;
  float: left;
  margin-right: 2.04082%;
}

.contact form input:focus, .contact form textarea:focus {
  border: 2px solid #711E1C;
}

.contact form button.submit-button {
  background: #00613f;
  color: #e9e9e9;
}

.contact .officeMap {
  margin-top: 2em;
}

@media (min-width: 55em) {
  [role="main"].intakeform {
    width: 66.10169%;
    float: left;
    margin-right: 1.69492%;
    margin-left: 15.25424%;
    padding: 0;
    margin-bottom: 3em;
  }
}

.contact.intakeform form input, .contact.intakeform form textarea {
  float: none;
}

.intakeform .freeform-column-content-align-left > button:nth-child(1) {
  cursor: pointer;
  padding: .5em;
  border-radius: 0;
  margin-bottom: 1em;
  margin-top: .25em;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  font-size: 1.5rem;
  background: #023059;
  color: #fff;
}

.intakeform .freeform-column-content-align-left > button:nth-child(1):hover {
  background: #0466bd;
  color: #000;
}

section header {
  margin-bottom: .5em;
  border-bottom: 1px solid currentColor;
}

article + article {
  margin-top: 4em;
}

#lightgallery {
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0;
  margin-bottom: 1em;
}

.list-unstyled {
  list-style: none outside none;
  padding-left: 0;
}

.gallery a {
  display: block;
  float: left;
  height: 150px;
  margin-bottom: 6px;
  margin-right: 6px;
  margin-left: 0;
  width: 150px;
  overflow: hidden;
  cursor: pointer;
}

.gallery a img {
  max-width: 150px;
}

.lg-outer .lg-img-wrap:before, .lg-outer .lg-item:before {
  height: 100%;
}

.lg-item ::before {
  vertical-align: middle;
}

.lg-sub-html {
  bottom: 150px;
  font-size: 1.125em;
}

.lg-toolbar {
  display: none;
}

footer {
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0;
  padding: 1.69492% 6.77966%;
  background: #023059;
  color: #e9e9e9;
}

footer a {
  color: #9ee8f5;
}

footer a:hover {
  text-decoration: underline;
}

@media (min-width: 55em) {
  footer .info {
    width: 48.71795%;
    float: left;
    margin-right: 2.5641%;
  }
}

footer .info header {
  margin-bottom: .5em;
}

footer .info p {
  font-size: .85em;
}

footer .info p .maineshare {
  max-width: 35%;
  height: auto;
  background: #fff;
  padding: 1.69492%;
}

@media (min-width: 55em) {
  footer .interact {
    width: 48.71795%;
    float: right;
    margin-right: 0;
  }
}

footer .interact .survey {
  width: 100%;
  float: right;
  margin-right: 0;
  padding: 1.69492%;
  border-left: 1px solid #e9e9e9;
}

footer .interact .survey p {
  margin-top: 0.5em;
  font-weight: bold;
}

footer .interact .social {
  margin-top: 2em;
  width: 100%;
  float: right;
  margin-right: 0;
}

footer .interact .social li {
  display: inline-block;
  list-style-type: none;
  margin-right: 1.69492%;
  line-height: 2.5em;
}

footer .interact .social li.textbutton {
  padding: gutter;
  border-radius: 10px;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
}

footer .interact .social li.textbutton a {
  padding: 10px;
}

footer .interact .social li .fa-square {
  color: #e9e9e9;
}

.section-nav, aside.sidebar.contact[role="complementary"] {
  display: none;
  background: none;
  margin-top: 0.84746%;
}

@media (min-width: 55em) {
  .section-nav, aside.sidebar.contact[role="complementary"] {
    display: block;
    width: 23.72881%;
    float: left;
    margin-right: 1.69492%;
    margin-left: 8.47458%;
  }
}

.section-nav img, aside.sidebar.contact[role="complementary"] img {
  margin-bottom: 6.77966%;
  width: 100%;
  height: auto;
}

.section-nav img.headshot, aside.sidebar.contact[role="complementary"] img.headshot {
  width: 47.36842%;
}

.section-nav ul, aside.sidebar.contact[role="complementary"] ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

.section-nav ul ul, aside.sidebar.contact[role="complementary"] ul ul {
  margin-left: 1em;
  margin-bottom: .5em;
}

.section-nav ul.worksite-info, aside.sidebar.contact[role="complementary"] ul.worksite-info {
  margin-bottom: 1em;
}

.section-nav ul.worksite-info span, aside.sidebar.contact[role="complementary"] ul.worksite-info span {
  font-weight: bold;
}

.sticky {
  position: relative;
  top: 0;
}

.sticky li a {
  padding: 2px;
  cursor: pointer;
}

.sticky .current a {
  background: #00613f;
  color: #e9e9e9;
}

#staff ul {
  padding-left: 0;
}

#staff ul:after {
  content: "";
  display: table;
  clear: both;
}

#staff li {
  width: 47.36842%;
  float: left;
  margin-right: 5.26316%;
  margin-bottom: 1.69492%;
  list-style-type: none;
  margin-left: 0;
}

#staff li:nth-child(2n) {
  width: 47.36842%;
  float: right;
  margin-right: 0;
}

#staff li a {
  text-decoration: none;
}

#staff li a:hover {
  text-decoration: underline;
}

#staff li h3 {
  color: #0F8297;
  padding-top: 3.38983%;
  margin-bottom: 0;
  font-size: 1.125em;
}

#staff li .headshot {
  width: 6.77966%;
  float: left;
  margin-right: 1.69492%;
  margin-right: 1.69492%;
}

#staff li .jobtitle {
  font-style: italic;
  display: block;
}

.person-detail header {
  margin-bottom: 1em;
  padding-bottom: 1em;
  border-bottom: 1px solid #00613f;
}

.person-detail a.email {
  text-decoration: none;
}

.person-detail .bio {
  margin: 1em 0 2em 0;
}

.fa {
  line-height: inherit;
}

#board h3 {
  margin-top: 1em;
}

#board ul {
  overflow: auto;
}

#board li {
  list-style-type: none;
  width: 37.5%;
  float: left;
  margin-right: 4.16667%;
}

.board .board-description {
  margin-bottom: 1rem;
}

.publicationlist li {
  padding-bottom: .25em;
}

.publicationlist li a {
  text-decoration: none;
}

.advocacy section, .news section, .big-section section {
  padding-bottom: 1.69492%;
}

.advocacy section:after, .news section:after, .big-section section:after {
  content: "";
  display: table;
  clear: both;
}

.advocacy section + section, .news section + section, .big-section section + section {
  margin-top: 3.38983%;
  border-top: 1px solid #00613f;
  padding-top: 1.69492%;
}

.advocacy .illustrative, .news .illustrative, .big-section .illustrative {
  margin-top: 0;
  width: 18.36735%;
  float: left;
  margin-right: 2.04082%;
  height: 146px;
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
}

.issueblog {
  margin-top: 20px;
}

.issueblog h3 {
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding-bottom: 0.25em;
  margin-bottom: 0.25em;
  margin-right: 20px;
  border-bottom: 1px solid #00301f;
}

.issueblog ul li {
  margin-bottom: 2em;
}

.issueblog ul ul {
  margin-left: 0;
}

.issueblog ul ul li {
  margin-bottom: 0;
}

h1.pagetitle {
  margin-bottom: .5em;
}

.news li {
  margin-bottom: 2em;
}

#programs h3 {
  margin-top: 2em;
}

#programs h3:first-of-type {
  margin-top: 1em;
}

#funding ul {
  list-style-type: disc;
}

@media (min-width: 55em) {
  .support main img {
    width: 35.89744%;
    float: left;
    margin-right: 2.5641%;
    margin-bottom: 2em;
  }
}

.support main .disclaimer {
  font-style: italic;
}

.advocacy h2 {
  display: block;
  margin-bottom: 10px;
}

.advocacy .fa-globe {
  color: #396BA0;
}

.advocacy .fa-bullhorn {
  color: #711E1C;
}

.advocacy .fa-graduation-cap {
  color: #00301f;
}

.advocacy .fa-wrench {
  color: #00613f;
}

.dsa, .hospital {
  margin-top: 2em;
}

.categoryComplicatedContent {
  margin-bottom: 2em;
}

.categoryComplicatedContent .complicatedButton {
  text-decoration: none;
}

.picturecaption {
  max-width: 300px;
  height: auto;
  float: left;
  margin-right: 1rem;
  margin-bottom: 1rem;
}

.blue-text {
  color: orange;
  font-weight: bold;
}

.redactor-dropdown .redactor-dropdown-indented-text,
.redactor-editor .indented-text {
  text-indent: 3em;
}

.redactor-dropdown .redactor-dropdown-action-button,
.redactor-editor .action-button {
  color: #fff;
  background: #f00;
}

.redactor-editor .action-button {
  display: inline-block;
  padding: 5px 10px;
}

[role="main"].not-found {
  margin: 2em;
}

[role="main"].not-found p {
  margin-top: 2em;
}

[role="main"] .logogallery ul, [role="main"] .logogallery li {
  list-style-type: none;
  margin: 0;
}

[role="main"] .logogallery ul {
  padding: 0;
}

[role="main"] .logogallery ul {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: row;
      flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -ms-flex-pack: distribute;
      justify-content: space-around;
}

[role="main"] .logogallery ul li {
  box-sizing: border-box;
  border: 1px solid #fff;
  -ms-flex-preferred-size: 48%;
      flex-basis: 48%;
  margin-bottom: 12px;
  padding: 6px;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
  text-align: center;
  background: #e9e9e9;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: row;
      flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -ms-flex-pack: center;
      justify-content: center;
  -ms-flex-align: center;
      align-items: center;
}

@media (min-width: 500px) {
  [role="main"] .logogallery ul li {
    -ms-flex-preferred-size: 32%;
        flex-basis: 32%;
  }
}

[role="main"] .logogallery ul li > a, [role="main"] .logogallery ul li > img {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  max-width: 100%;
  text-align: center;
  text-decoration: none;
  font-family: "Montserrat", Helvetica, Arial, sans-serif;
}

[role="main"] .logogallery ul li a img {
  max-width: 100%;
  max-height: 250px;
}

.section-nav.blog h3 {
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding-bottom: 0.25em;
  margin-bottom: 0.25em;
  margin-right: 20px;
  border-bottom: 1px solid #00301f;
}

.section-nav.blog .cat-title {
  font-style: italic;
}

.section-nav.blog ul li {
  margin-bottom: 2em;
}

.section-nav.blog ul ul {
  margin-left: 0;
}

.section-nav.blog ul ul li {
  margin-bottom: 0;
}

header.blog {
  display: -ms-flexbox;
  display: flex;
  margin-bottom: 2em;
}

header.blog .headshot {
  display: block;
  margin-right: 6px;
}

header.blog .meta {
  display: block;
}

header.blog .meta p.author {
  margin-top: 0;
}

header.blog .meta p.author a {
  text-decoration: none;
}

header.blog .meta p.author a:hover {
  text-decoration: underline;
}

.blogarchive a {
  text-decoration: none;
}

.blogarchive a:hover {
  text-decoration: underline;
}

.blogarchive .meta {
  margin-bottom: 12px;
  font-size: .85em;
  color: #333;
}

.blogarchive .teaser {
  font-style: italic;
}

.blogarchive section + section {
  margin-top: 4em;
}

.post-categories {
  border-top: 1px solid #b6b6b6;
  margin-top: 2em;
  padding: 10px 20px;
  background: #e9e9e9;
}

.post-categories h3 {
  margin-bottom: 15px;
}

.post-categories a {
  text-decoration: none;
}

.post-categories a:hover {
  text-decoration: underline;
}

.search-form input[type="search"] {
  border: 1px solid #b6b6b6;
  background-color: #e9e9e9;
  padding: 6px;
}

.search-form .button {
  padding: 6px;
  background: #0466bd;
  border-radius: 4px;
  color: #fff;
}

nav.search-page {
  margin-bottom: 4rem;
}

header .header-search {
  width: 49.15254%;
  margin: 0 0 0 25%;
  height: 3rem;
  display: block;
  overflow: auto;
}

header .search-form {
  margin-top: 6px;
}

.search-page .search-form input[type="search"] {
  width: 49.15254%;
}

.search-page .result + .result {
  margin-top: 1rem;
}

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
  /* IE10+ specific styles go here */
  .get-help ul li {
    -ms-flex-positive: 1;
        flex-grow: 1;
    -ms-flex-preferred-size: calc(33.33% - 10px);
        flex-basis: calc(33.33% - 10px);
  }
  .heroic .hero {
    min-height: 1px;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
  }
  .heroic .hero a {
    margin: 0;
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
  }
  .heroic .hero.blogpromo .headline, .heroic .hero.blogpromo h3, .heroic .hero.blogpromo .teaser {
    max-width: 100%;
  }
  .heroic .hero.blogpromo a {
    max-width: 100%;
  }
}

main a {
  cursor: pointer;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlcyI6WyJzdHlsZS5zY3NzIiwiLi4vdmVuZG9ycy9zYW5pdGl6ZS5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvX2JyZWFrcG9pbnQuc2NzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvX3NldHRpbmdzLnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19jb250ZXh0LnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19oZWxwZXJzLnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19wYXJzZXJzLnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3F1ZXJ5LnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3NpbmdsZS5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL3NpbmdsZS9fZGVmYXVsdC5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL19kb3VibGUuc2NzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9kb3VibGUvX2RlZmF1bHQtcGFpci5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZG91YmxlLXN0cmluZy5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZGVmYXVsdC5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL190cmlwbGUuc2NzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy90cmlwbGUvX2RlZmF1bHQuc2NzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9fcmVzb2x1dGlvbi5zY3NzIiwiLi4vYm93ZXJfY29tcG9uZW50cy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL3Jlc29sdXRpb24vX3Jlc29sdXRpb24uc2NzcyIsIi4uL2Jvd2VyX2NvbXBvbmVudHMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvX25vLXF1ZXJ5LnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19yZXNwb25kLXRvLnNjc3MiLCIuLi9ib3dlcl9jb21wb25lbnRzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19sZWdhY3ktc2V0dGluZ3Muc2NzcyIsIl9iaXRzLnNjc3MiLCJfdHlwb2dyYXBoeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL19zdXN5LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX3V0aWxpdGllcy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L19zZXR0aW5ncy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L192YWxpZGF0aW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX2dyaWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX2Zsb2F0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L19zaGFyZWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX3N1cHBvcnQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fc3VwcG9ydC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19wcmVmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fYmFja2dyb3VuZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19ib3gtc2l6aW5nLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3JlbS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19jbGVhcmZpeC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2luc3BlY3Quc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19vdXRwdXQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19kaXJlY3Rpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19iYWNrZ3JvdW5kLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fY29udGFpbmVyLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fbWFyZ2lucy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX3BhZGRpbmcuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvZmxvYXQvX2NvbnRhaW5lci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fc3Bhbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fZW5kLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19pc29sYXRlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L192YWxpZGF0aW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ3JpZHMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ib3gtc2l6aW5nLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fY29udGV4dC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JhY2tncm91bmQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19jb250YWluZXIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zcGFuLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ3V0dGVycy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2lzb2xhdGUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19nYWxsZXJ5LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fcm93cy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX21hcmdpbnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19wYWRkaW5nLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYmxlZWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19icmVha3BvaW50LXBsdWdpbi5zY3NzIiwiX2hlYWRlci5zY3NzIiwiX2dldGhlbHAuc2NzcyIsIl9uZXdzLWJyaWVmcy5zY3NzIiwiX3VwY29taW5nLnNjc3MiLCJfY29udGFjdC5zY3NzIiwiX2dhbGxlcnkuc2NzcyIsIl9mb290ZXIuc2NzcyIsIl93aG8uc2NzcyIsIl9zdXBwb3J0LnNjc3MiLCJfcmVkYWN0b3JTdHlsZUl0LnNjc3MiLCJfYmxvZy5zY3NzIiwiX3NlYXJjaC5zY3NzIiwiX2llLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCBcIi4uL3ZlbmRvcnMvc2FuaXRpemVcIjtcbkBpbXBvcnQgXCJicmVha3BvaW50XCI7XG5AaW1wb3J0IFwiYml0c1wiO1xuQGltcG9ydCBcInR5cG9ncmFwaHlcIjtcbi8vIEBpbXBvcnQgXCJjb21wYXNzXCI7XG5AaW1wb3J0IFwic3VzeVwiO1xuXG5cblxuJHN1c3k6IChcbiAgLy8gZGVidWc6IChpbWFnZTpzaG93KSxcbiAgZ2xvYmFsLWJveC1zaXppbmc6IGJvcmRlci1ib3gsXG4gIGNvbHVtbnM6IDEyLFxuICBndXR0ZXI6IDEvNCxcbiAgY29udGFpbmVyLXBvc2l0aW9uOiBjZW50ZXIsXG4gIHVzZS1jdXN0b206IChcbiAgICBib3gtc2l6aW5nOiBmYWxzZSxcbiAgKSxcbiAgKTtcblxuLy8gQGluY2x1ZGUgYm9yZGVyLWJveC1zaXppbmc7XG5cbmJvZHkge1xuICBAaW5jbHVkZSBjb250YWluZXI7XG4gIG1hcmdpbi10b3A6IDA7XG4gIDpmaXJzdC1jaGlsZCB7XG4gICAgb3BhY2l0eTogLjk5O1xuICB9XG59XG5cbmEge1xuICBjb2xvcjogJGRhcmtibHVlO1xuICBjdXJzb3I6IGF1dG87XG59XG5cbi5sb2dvLXRleHQge1xuICBmb250LWZhbWlseTogJGhlYWRlci1mb250O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG5AaW1wb3J0IFwiaGVhZGVyXCI7XG5cblxuW3JvbGU9XCJtYWluXCJdIHtcblxuICBjbGVhcjogYm90aDtcblxuICBwYWRkaW5nOiBndXR0ZXIoKTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICBjbGVhcjogbm9uZTtcbiAgICBAaW5jbHVkZSBzcGFuKDcgb2YgMTIpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogM2VtO1xuICB9XG5cbiAgc2VjdGlvbiB1bCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICB9XG4gIFxuICB1bC5mYS11bCBsaSB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICB9XG5cbiAgbGkge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2Mgb3V0c2lkZSBub25lO1xuICAgIGRpc3BsYXk6IGxpc3QtaXRlbTtcbiAgICBtYXJnaW4tbGVmdDogMmVtO1xuXG4gIH1cblxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgJi5ob21lLCAmLnJlc291cmNlcy1wYWdlIHtcblxuICAgIC53ZWxjb21lIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMTAgb2YgMTIpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHNwYW4oMSBvZiAxMikgKyBndXR0ZXIoKTtcblxuICAgICAgYXNpZGUge1xuICAgICAgICBAaW5jbHVkZSBzcGFuKDUgb2YgMTApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbi5yZXNvdXJjZXMtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcblxuICBoMiB7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xuICAgIC8vIG1hcmdpbi10b3A6IDRlbTtcbiAgICB3aWR0aDogNzUlO1xuICAgIG1heC13aWR0aDogNjBlbTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGRhcmtkcm07XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAubnVtYmVyLWF2YWlsYWJsZSB7XG4gICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5mYS1jYXJldC1yaWdodCB7XG5cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuMjVzIGVhc2Utb3V0O1xuICAgICAgXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcnRpY2xlLmNvbnRlbnQge1xuICAgIG1hcmdpbi10b3A6IDJyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgIG1heC13aWR0aDogNjBlbTtcbiAgfVxufVxuXG4uYWNjb3JkaW9uLXRvZ2dsZSB7Y3Vyc29yOiBwb2ludGVyO31cbi5hY2NvcmRpb24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDNyZW07XG59XG5cblxuXG5AaW1wb3J0IFwiZ2V0aGVscFwiO1xuXG5AaW1wb3J0IFwibmV3cy1icmllZnNcIjtcblxuQGltcG9ydCBcInVwY29taW5nXCI7XG5cbkBpbXBvcnQgXCJjb250YWN0XCI7XG5cbnNlY3Rpb24gaGVhZGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogLjVlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbn1cblxuYXJ0aWNsZSArIGFydGljbGUge1xuICBtYXJnaW4tdG9wOiA0ZW07XG59XG5cbmFzaWRlIHtcbiAgLy8gYmFja2dyb3VuZDogcmdiYShyZWQsIDAuMjUpO1xuICAvLyBtYXJnaW4tdG9wOiAxZW07XG4gIC8vIHBhZGRpbmc6IGd1dHRlcigpO1xufVxuXG5AaW1wb3J0IFwiZ2FsbGVyeVwiO1xuXG5AaW1wb3J0IFwiZm9vdGVyXCI7XG5cbi5zZWN0aW9uLW5hdiwgYXNpZGUuc2lkZWJhci5jb250YWN0W3JvbGU9XCJjb21wbGVtZW50YXJ5XCJdIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgbWFyZ2luLXRvcDogZ3V0dGVyKCkvMjtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBAaW5jbHVkZSBzcGFuKDMgb2YgMTIpO1xuICAgIG1hcmdpbi1sZWZ0OiBzcGFuKDEgb2YgMTIpICsgZ3V0dGVyKCk7XG4gIH1cblxuICBpbWcge1xuICAgIG1hcmdpbi1ib3R0b206IGd1dHRlcigpICogNDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG5cbiAgICAmLmhlYWRzaG90IHtcbiAgICAgIHdpZHRoOiBzcGFuKDIgb2YgNCk7XG4gICAgfVxuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcblxuICAgIHVsIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIH1cblxuICAgICYud29ya3NpdGUtaW5mbyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcblxuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5zdGlja3kge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcblxuICBsaSBhIHtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmN1cnJlbnQgYSB7XG4gICAgYmFja2dyb3VuZDogJGRybWdyZWVuO1xuICAgIGNvbG9yOiAkcGFsZTtcbiAgfVxufVxuXG5AaW1wb3J0IFwid2hvXCI7XG5cblxuXG4uYWR2b2NhY3ksIC5uZXdzLCAuYmlnLXNlY3Rpb24ge1xuXG4gIHNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgIHBhZGRpbmctYm90dG9tOiBndXR0ZXIoKTtcbiAgfVxuXG4gIHNlY3Rpb24gKyBzZWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiBndXR0ZXIoKSAqIDI7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRkcm1ncmVlbjtcbiAgICBwYWRkaW5nLXRvcDogZ3V0dGVyKCk7XG4gIH1cblxuICAuaWxsdXN0cmF0aXZlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIEBpbmNsdWRlIHNwYW4oMiBvZiAxMCk7XG4gICAgaGVpZ2h0OiAxNDZweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcblxuICB9XG5cbiAgLmNvbnRlbnQge1xuICAgIC8vIEBpbmNsdWRlIHNwYW4oNyBvZiAxMCBsYXN0KTtcbiAgfVxufVxuXG4uaXNzdWVibG9nIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcblxuICBoMyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC4yNWVtO1xuICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGRhcmtkcm07XG4gIH1cblxuICB1bCBsaSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMmVtO1xuICB9XG5cbiAgdWwgdWwge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cbn1cblxuaDEucGFnZXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogLjVlbTtcbn1cblxuLm5ld3Mge1xuXG4gIGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyZW07XG4gIH1cbn1cblxuI3Byb2dyYW1zIHtcblxuICBoMyB7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuXG4gICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgIG1hcmdpbi10b3A6IDFlbTsgIFxuICAgIH1cbiAgfVxufVxuXG4jZnVuZGluZyB7XG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG4gIH1cbn1cblxuQGltcG9ydCBcInN1cHBvcnRcIjtcblxuLmFkdm9jYWN5IHtcblxuICAgIGgyIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG5cbiAgICAuZmEtZ2xvYmUge1xuICAgICAgY29sb3I6ICRjYWxlbmRhcmJsdWU7XG4gICAgfVxuXG4gICAgLmZhLWJ1bGxob3JuIHtcbiAgICAgIGNvbG9yOiAkZGVlcHJlZDtcbiAgICB9XG5cbiAgICAuZmEtZ3JhZHVhdGlvbi1jYXAge1xuICAgICAgY29sb3I6ICRkYXJrZHJtO1xuICAgIH1cblxuICAgIC5mYS13cmVuY2gge1xuICAgICAgY29sb3I6ICRkcm1ncmVlbjtcbiAgICB9XG59XG5cbi5kc2EsIC5ob3NwaXRhbCB7XG4gIG1hcmdpbi10b3A6IDJlbTtcbn1cblxuLmNhdGVnb3J5Q29tcGxpY2F0ZWRDb250ZW50IHtcbiAgbWFyZ2luLWJvdHRvbTogMmVtO1xuXG4gIC5jb21wbGljYXRlZEJ1dHRvbiB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG59XG5cbi5waWN0dXJlY2FwdGlvbiB7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cblxuQGltcG9ydCBcInJlZGFjdG9yU3R5bGVJdFwiO1xuXG5bcm9sZT1cIm1haW5cIl0ubm90LWZvdW5kIHtcbiAgbWFyZ2luOiAyZW07XG5cbiAgcCB7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuICB9XG59XG5cblxuXG5bcm9sZT1cIm1haW5cIl0gLmxvZ29nYWxsZXJ5IHtcblxuICB1bCwgbGkge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gbWFyZ2luLWJvdHRvbTogNnB4O1xuICAgIC8vIHBhZGRpbmc6IDA7XG5cbiAgICAvLyBpbWcge1xuICAgIC8vICAgbWF4LXdpZHRoOiA5OCU7XG4gICAgLy8gICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIC8vIH1cbiAgfVxuXG4gIHVsIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gdWwge1xuICAvLyAgIGRpc3BsYXk6IGZsZXg7XG4gIC8vICAgZmxleC13cmFwOiB3cmFwO1xuICAvLyAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLy8gICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gIC8vICAgbGkge1xuICAvLyAgICAgZGlzcGxheTogZmxleDtcbiAgLy8gICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC8vICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgLy8gICAgIGZsZXgtYmFzaXM6IDQ4JTtcbiAgLy8gICAgIC8vIG1heC1oZWlnaHQ6IDI1MHB4O1xuICAvLyAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgLy8gICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgLy8gICAgIC8vIGJhY2tncm91bmQ6ICRwYWxlO1xuICAvLyAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkO1xuXG4gIC8vICAgICAmOmhvdmVyIHtcbiAgLy8gICAgICAgYm94LXNoYWRvdzogMCAwIDEycHggJGNhbGVuZGFyYmx1ZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1MDBweCkge1xuICAvLyAgICAgICBmbGV4OiAwIDEgY2FsYygzMy4zMyUgLSAxMHB4KTtcbiAgLy8gICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgPmltZyB7XG4gIC8vICAgICAgIGZsZXg6IDAgMSAxMDAlO1xuICAvLyAgICAgfVxuXG5cbiAgLy8gICAgIGEge1xuICAvLyAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIC8vICAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG4gIC8vICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG5cbiAgLy8gICAgICAgaW1nIHtcbiAgLy8gICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuXG4gIC8vICAgICAubm8tbG9nbyB7XG4gIC8vICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAvLyAgICAgICBiYWNrZ3JvdW5kOiAkcGFsZTtcbiAgLy8gICAgICAgcGFkZGluZzogMTJweDtcbiAgLy8gICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuXG4gIHVsIHtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgICBsaSB7XG4gICAgICBcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZmO1xuICAgICAgZmxleC1iYXNpczogNDglO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIHBhZGRpbmc6IDZweDtcbiAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiAkcGFsZTtcblxuICAgICAgLy8gcHJvcHMgZm9yIGNoaWxkcmVuXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1MDBweCkge1xuICAgICAgICBmbGV4LWJhc2lzOiAzMiU7XG4gICAgICB9XG5cbiAgICAgID5hLCA+aW1nIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRoZWFkZXItZm9udDtcbiAgICAgIH1cblxuICAgICAgYSBpbWcge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4O1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cbn1cblxuXG5AaW1wb3J0IFwiYmxvZ1wiO1xuXG5AaW1wb3J0IFwic2VhcmNoXCI7XG5cbkBpbXBvcnQgXCJpZVwiO1xuXG5cbm1haW4ge1xuICBhIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbn0iLCIvKiEgc2FuaXRpemUuY3NzIHwgQ0MwIFB1YmxpYyBEb21haW4gfCBnaXRodWIuY29tL2pvbmF0aGFudG5lYWwvc2FuaXRpemUuY3NzICovXG5cbiRkZWZhdWx0LWJveC1zaXppbmc6IGJvcmRlci1ib3ggIWRlZmF1bHQ7XG4kZGVmYXVsdC1jdXJzb3I6IGRlZmF1bHQgIWRlZmF1bHQ7XG4kZGVmYXVsdC1kaXNhYmxlZC1jb2xvcjogcmdiYSgwLDAsMCwuNikgIWRlZmF1bHQ7XG4kZGVmYXVsdC1mb250LWZhbWlseTogc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRkZWZhdWx0LWlucHV0LWJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuJGRlZmF1bHQtbGluZS1oZWlnaHQ6IDEuNWVtICFkZWZhdWx0O1xuJGRlZmF1bHQtbW9ub3NwYWNlLWZvbnQtZmFtaWx5OiBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZGVmYXVsdC1uYXYtbGlzdC1zdHlsZTogbm9uZSAhZGVmYXVsdDtcbiRkZWZhdWx0LXNlbGVjdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOiAjQjNENEZDICFkZWZhdWx0O1xuJGRlZmF1bHQtc21hbGwtZm9udC1zaXplOiA3NSUgIWRlZmF1bHQ7XG4kZGVmYXVsdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5ICFkZWZhdWx0O1xuJGRlZmF1bHQtdGV4dGFyZWEtcmVzaXplOiB2ZXJ0aWNhbCAhZGVmYXVsdDtcbiRkZWZhdWx0LXZlcnRpY2FsLWFsaWduOiB0b3AgIWRlZmF1bHQ7XG5cblxuXG4vKlxuICogTm9ybWFsaXphdGlvblxuICovXG5cbjpyb290IHtcblx0dGV4dC1zaXplLWFkanVzdDogMTAwJTsgLy8gaU9TIDgrXG59XG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG5cdGRpc3BsYXk6IG5vbmU7IC8vIENocm9tZSA0MCssIGlPUyA4KywgU2FmYXJpIDgrXG59XG5cbmRldGFpbHMge1xuXHRkaXNwbGF5OiBibG9jazsgLy8gRmlyZWZveCAzNSssIEludGVybmV0IEV4cGxvcmVyIDExKywgV2luZG93cyBQaG9uZSA4LjErXG59XG5cbmlucHV0IHtcblx0Jlt0eXBlPVwibnVtYmVyXCJdIHtcblx0XHR3aWR0aDogYXV0bzsgLy8gRmlyZWZveCAzNitcblx0fVxuXG5cdCZbdHlwZT1cInNlYXJjaFwiXSB7XG5cdFx0LXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIFNhZmFyaSA4K1xuXG5cdFx0Jjo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcblx0XHQmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcblx0XHRcdC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gU2FmYXJpIDgrXG5cdFx0fVxuXHR9XG59XG5cbm1haW4ge1xuXHRkaXNwbGF5OiBibG9jazsgLy8gQW5kcm9pZCA0LjMtLCBJbnRlcm5ldCBFeHBsb3JlciAxMSssIFdpbmRvd3MgUGhvbmUgOC4xK1xufVxuXG5zdW1tYXJ5IHtcblx0ZGlzcGxheTogYmxvY2s7IC8vIEZpcmVmb3ggMzUrLCBJbnRlcm5ldCBFeHBsb3JlciAxMSssIFdpbmRvd3MgUGhvbmUgOC4xK1xufVxuXG5wcmUge1xuXHRvdmVyZmxvdzogYXV0bzsgLy8gSW50ZXJuZXQgRXhwbG9yZXIgMTErXG59XG5cbnByb2dyZXNzIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrOyAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMSssIFdpbmRvd3MgUGhvbmUgOC4xK1xufVxuXG5zbWFsbCB7XG5cdGZvbnQtc2l6ZTogJGRlZmF1bHQtc21hbGwtZm9udC1zaXplOyAvLyBBbGwgYnJvd3NlcnNcbn1cblxudGVtcGxhdGUge1xuXHRkaXNwbGF5OiBub25lOyAvLyBBbmRyb2lkIDQuMy0sIEludGVybmV0IEV4cGxvcmVyIDExKywgaU9TIDctLCBTYWZhcmkgNy0sIFdpbmRvd3MgUGhvbmUgOC4xK1xufVxuXG50ZXh0YXJlYSB7XG5cdG92ZXJmbG93OiBhdXRvOyAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMStcbn1cblxuW2hpZGRlbl0ge1xuXHRkaXNwbGF5OiBub25lOyAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMC1cbn1cblxuW3Vuc2VsZWN0YWJsZV0ge1xuXHR1c2VyLXNlbGVjdDogbm9uZTsgLy8gQW5kcm9pZCA0LjQrLCBDaHJvbWUgNDArLCBGaXJlZm94IDM2KywgaU9TIDgrLCBTYWZhcmkgOCtcbn1cblxuXG5cbi8qXG4gKiBVbml2ZXJzYWwgaW5oZXJpdGFuY2VcbiAqL1xuXG4qLFxuOjphZnRlcixcbjo6YmVmb3JlIHtcblx0Ym94LXNpemluZzogaW5oZXJpdDtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRmb250LXNpemU6IGluaGVyaXQ7XG5cdGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuXHR0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7XG5cdHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xufVxuXG5cblxuLypcbiAqIE9waW5pb25hdGVkIGRlZmF1bHRzXG4gKi9cblxuLy8gYWxsb3cgYm9yZGVyIGFzc2lnbm1lbnQgYnkgd2lkdGggYWxvbmVcblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0Ym9yZGVyLXdpZHRoOiAwO1xufVxuXG4vLyByZW1vdmUgbWFyZ2luIGFuZCBwYWRkaW5nIGV2ZXJ5d2hlcmVcblxuKiB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcbn1cblxuLy8gc3BlY2lmeSBkZWZhdWx0IHN0eWxlcyBpbiB0aGUgZG9jdW1lbnRcblxuOnJvb3Qge1xuXHRib3gtc2l6aW5nOiAkZGVmYXVsdC1ib3gtc2l6aW5nO1xuXHRjdXJzb3I6ICRkZWZhdWx0LWN1cnNvcjtcblx0Zm9udC1mYW1pbHk6ICRkZWZhdWx0LWZvbnQtZmFtaWx5O1xuXHRsaW5lLWhlaWdodDogJGRlZmF1bHQtbGluZS1oZWlnaHQ7XG5cdHRleHQtcmVuZGVyaW5nOiAkZGVmYXVsdC10ZXh0LXJlbmRlcmluZztcblx0dmVydGljYWwtYWxpZ246ICRkZWZhdWx0LXZlcnRpY2FsLWFsaWduO1xufVxuXG4vLyBzdHlsZSBjdXJzb3IgdG8gbWF0Y2ggbmF0aXZlIGV4cGVyaWVuY2VcblxuKiB7XG5cdGN1cnNvcjogaW5oZXJpdDtcbn1cblxuYSxcbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuXHRjdXJzb3I6IGluaXRpYWw7XG59XG5cbi8vIHNwZWNpZnkgb3IgcmVtb3ZlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9uIGlucHV0c1xuXG5idXR0b24sXG5pbnB1dCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcblx0YmFja2dyb3VuZDogJGRlZmF1bHQtaW5wdXQtYmFja2dyb3VuZDtcbn1cblxuLy8gc3BlY2lmeSBtb25vc3BhY2UgZm9udFxuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG5cdGZvbnQtZmFtaWx5OiAkZGVmYXVsdC1tb25vc3BhY2UtZm9udC1mYW1pbHksIG1vbm9zcGFjZTtcbn1cblxuLy8gbWF0Y2ggaW5wdXQgaGVpZ2h0IHdpdGggbGluZSBoZWlnaHRcblxuaW5wdXQge1xuXHRtaW4taGVpZ2h0OiAkZGVmYXVsdC1saW5lLWhlaWdodDtcbn1cblxuLy8gc3BlY2lmeSBuYXYgbGlzdCBzdHlsZVxuXG5uYXYgb2wsXG5uYXYgdWwge1xuXHRsaXN0LXN0eWxlOiAkZGVmYXVsdC1uYXYtbGlzdC1zdHlsZTtcbn1cblxuLy8gc3R5bGUgc2VsZWN0IGxpa2UgYSBzdGFuZGFyZCBpbnB1dFxuXG5zZWxlY3Qge1xuXHQtbW96LWFwcGVhcmFuY2U6IG5vbmU7ICAgIC8vIEZpcmVmb3ggMzYrXG5cdC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gQ2hyb21lIDQxK1xuXG5cdCY6Oi1tcy1leHBhbmQge1xuXHRcdGRpc3BsYXk6IG5vbmU7ICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMStcblx0fVxuXG5cdCY6Oi1tcy12YWx1ZSB7XG5cdFx0Y29sb3I6IGN1cnJlbnRDb2xvcjsgIC8vIEludGVybmV0IEV4cGxvcmVyIDExK1xuXHR9XG59XG5cbi8vIHJlbW92ZSB0YWJsZSBzcGFjaW5nXG5cbnRhYmxlIHtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblx0Ym9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbi8vIHNwZWNpZnkgdGV4dGFyZWEgcmVzaXphYmlsaXR5XG5cbnRleHRhcmVhIHtcblx0cmVzaXplOiAkZGVmYXVsdC10ZXh0YXJlYS1yZXNpemU7XG59XG5cbi8vIHNwZWNpZnkgdGV4dCBzZWxlY3Rpb24gYmFja2dyb3VuZCBjb2xvciBhbmQgb21pdCBkcm9wIHNoYWRvd1xuXG46OnNlbGVjdGlvbiB7XG5cdGJhY2tncm91bmQtY29sb3I6ICRkZWZhdWx0LXNlbGVjdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOyAvLyByZXF1aXJlZCB3aGVuIGRlY2xhcmluZyA6OnNlbGVjdGlvblxuXHR0ZXh0LXNoYWRvdzogbm9uZTtcbn1cblxuLy8gaGlkZSBjb250ZW50IGZyb20gc2NyZWVucyBidXQgbm90IHNjcmVlbnJlYWRlcnNcblxuQG1lZGlhIHNjcmVlbiB7XG5cdFtoaWRkZW5+PVwic2NyZWVuXCJdIHtcblx0XHRkaXNwbGF5OiBpbmhlcml0O1xuXHR9XG5cblx0W2hpZGRlbn49XCJzY3JlZW5cIl06bm90KDphY3RpdmUpOm5vdCg6Zm9jdXMpOm5vdCg6dGFyZ2V0KSB7XG5cdFx0Y2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50O1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuXHR9XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIERlZmF1bHQgVmFyaWFibGVzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRCcmVha3BvaW50LVNldHRpbmdzOiAoXG4gICdkZWZhdWx0IG1lZGlhJzogYWxsLFxuICAnZGVmYXVsdCBmZWF0dXJlJzogbWluLXdpZHRoLFxuICAnZGVmYXVsdCBwYWlyJzogd2lkdGgsXG5cbiAgJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJzogZmFsc2UsXG4gICd0byBlbXMnOiBmYWxzZSxcbiAgJ3RyYW5zZm9ybSByZXNvbHV0aW9ucyc6IHRydWUsXG5cbiAgJ25vIHF1ZXJpZXMnOiBmYWxzZSxcbiAgJ25vIHF1ZXJ5IGZhbGxiYWNrcyc6IGZhbHNlLFxuXG4gICdiYXNlIGZvbnQgc2l6ZSc6IDE2cHgsXG5cbiAgJ2xlZ2FjeSBzeW50YXgnOiBmYWxzZVxuKTtcblxuJGJyZWFrcG9pbnQ6ICgpICFkZWZhdWx0O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEltcG9ydHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGltcG9ydCBcImJyZWFrcG9pbnQvc2V0dGluZ3NcIjtcbkBpbXBvcnQgJ2JyZWFrcG9pbnQvY29udGV4dCc7XG5AaW1wb3J0ICdicmVha3BvaW50L2hlbHBlcnMnO1xuQGltcG9ydCAnYnJlYWtwb2ludC9wYXJzZXJzJztcbkBpbXBvcnQgJ2JyZWFrcG9pbnQvbm8tcXVlcnknO1xuXG5AaW1wb3J0ICdicmVha3BvaW50L3Jlc3BvbmQtdG8nO1xuXG5AaW1wb3J0IFwiYnJlYWtwb2ludC9sZWdhY3ktc2V0dGluZ3NcIjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBCcmVha3BvaW50IE1peGluXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQG1peGluIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnk6IGZhbHNlKSB7XG4gIEBpbmNsdWRlIGxlZ2FjeS1zZXR0aW5ncy13YXJuaW5nO1xuXG4gIC8vIFJlc2V0IGNvbnRleHRzXG4gIEBpbmNsdWRlIHByaXZhdGUtYnJlYWtwb2ludC1yZXNldC1jb250ZXh0cygpO1xuXG4gICRicmVha3BvaW50OiBicmVha3BvaW50KCRxdWVyeSwgZmFsc2UpO1xuXG4gICRxdWVyeS1zdHJpbmc6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdxdWVyeScpO1xuICAkcXVlcnktZmFsbGJhY2s6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdmYWxsYmFjaycpO1xuXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdjb250ZXh0IGhvbGRlcicpICFnbG9iYWw7XG4gICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdxdWVyeSBjb3VudCcpICFnbG9iYWw7XG5cbiAgLy8gQWxsb3cgZm9yIGFuIGFzLW5lZWRlZCBvdmVycmlkZSBvciB1c2FnZSBvZiBubyBxdWVyeSBmYWxsYmFjay5cbiAgQGlmICRuby1xdWVyeSAhPSBmYWxzZSB7XG4gICAgJHF1ZXJ5LWZhbGxiYWNrOiAkbm8tcXVlcnk7XG4gIH1cblxuICBAaWYgJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlIHtcbiAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgnbm8tcXVlcnknLCAkcXVlcnktZmFsbGJhY2spO1xuICB9XG5cbiAgLy8gUHJpbnQgT3V0IFF1ZXJ5IFN0cmluZ1xuICBAaWYgbm90IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyaWVzJykge1xuICAgIEBtZWRpYSAjeyRxdWVyeS1zdHJpbmd9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxuXG4gIEBpZiBicmVha3BvaW50LWdldCgnbm8gcXVlcnkgZmFsbGJhY2tzJykgIT0gZmFsc2Ugb3IgYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJpZXMnKSA9PSB0cnVlIHtcblxuICAgICR0eXBlOiB0eXBlLW9mKGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSk7XG4gICAgJHByaW50OiBmYWxzZTtcblxuICAgIEBpZiAoJHR5cGUgPT0gJ2Jvb2wnKSB7XG4gICAgICAkcHJpbnQ6IHRydWU7XG4gICAgfVxuICAgIEBlbHNlIGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgQGlmICRxdWVyeS1mYWxsYmFjayA9PSBicmVha3BvaW50LWdldCgnbm8gcXVlcnkgZmFsbGJhY2tzJykge1xuICAgICAgICAkcHJpbnQ6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIGlmICgkdHlwZSA9PSAnbGlzdCcpIHtcbiAgICAgIEBlYWNoICR3cmFwcGVyIGluIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XG4gICAgICAgIEBpZiAkcXVlcnktZmFsbGJhY2sgPT0gJHdyYXBwZXIge1xuICAgICAgICAgICRwcmludDogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdyaXRlIEZhbGxiYWNrXG4gICAgQGlmICgkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2UpIGFuZCAoJHByaW50ID09IHRydWUpIHtcbiAgICAgICR0eXBlLWZhbGxiYWNrOiB0eXBlLW9mKCRxdWVyeS1mYWxsYmFjayk7XG5cbiAgICAgIEBpZiAoJHR5cGUtZmFsbGJhY2sgIT0gJ2Jvb2wnKSB7XG4gICAgICAgICN7JHF1ZXJ5LWZhbGxiYWNrfSAmIHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBwcml2YXRlLWJyZWFrcG9pbnQtcmVzZXQtY29udGV4dHMoKTtcbn1cblxuXG5AbWl4aW4gbXEoJHF1ZXJ5LCAkbm8tcXVlcnk6IGZhbHNlKSB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBIYXMgU2V0dGluZ1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1oYXMoJHNldHRpbmcpIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50LCAkc2V0dGluZykge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdldCBTZXR0aW5nc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1nZXQoJHNldHRpbmcpIHtcbiAgQGlmIGJyZWFrcG9pbnQtaGFzKCRzZXR0aW5nKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRicmVha3BvaW50LCAkc2V0dGluZyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gbWFwLWdldCgkQnJlYWtwb2ludC1TZXR0aW5ncywgJHNldHRpbmcpO1xuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU2V0IFNldHRpbmdzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LXNldCgkc2V0dGluZywgJHZhbHVlKSB7XG4gIEBpZiAoc3RyLWluZGV4KCRzZXR0aW5nLCAnLScpIG9yIHN0ci1pbmRleCgkc2V0dGluZywgJ18nKSkgYW5kIHN0ci1pbmRleCgkc2V0dGluZywgJyAnKSA9PSBudWxsIHtcbiAgICBAd2FybiBcIldvcmRzIGluIEJyZWFrcG9pbnQgc2V0dGluZ3Mgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIG5vdCBkYXNoZXMgb3IgdW5kZXJzY29yZXMuIFBsZWFzZSByZXBsYWNlIGRhc2hlcyBhbmQgdW5kZXJzY29yZXMgYmV0d2VlbiB3b3JkcyB3aXRoIHNwYWNlcy4gU2V0dGluZ3Mgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCB1bnRpbCBjaGFuZ2VkLlwiO1xuICB9XG4gICRicmVha3BvaW50OiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnQsICgkc2V0dGluZzogJHZhbHVlKSkgIWdsb2JhbDtcbiAgQHJldHVybiB0cnVlO1xufVxuXG5AbWl4aW4gYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSkge1xuICAkYnJlYWtwb2ludC1jaGFuZ2U6IGJyZWFrcG9pbnQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpO1xufVxuXG5AbWl4aW4gYnJlYWtwb2ludC1zZXQoJHNldHRpbmcsICR2YWx1ZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcbn1cblxuQG1peGluIGJrcHQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSk7XG59XG5AbWl4aW4gYmtwdC1zZXQoJHNldHRpbmcsICR2YWx1ZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZW1vdmUgU2V0dGluZ1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcbiAgQGlmIGxlbmd0aCgkc2V0dGluZ3MpID09IDEge1xuICAgICRzZXR0aW5nczogbnRoKCRzZXR0aW5ncywgMSk7XG4gIH1cblxuICBAZWFjaCAkc2V0dGluZyBpbiAkc2V0dGluZ3Mge1xuICAgICRicmVha3BvaW50OiBtYXAtcmVtb3ZlKCRicmVha3BvaW50LCAkc2V0dGluZykgIWdsb2JhbDtcbiAgfVxuICBAcmV0dXJuIHRydWU7XG59XG5cbkBtaXhpbiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncy4uLikge1xuICAkYnJlYWtwb2ludC1yZXNldDogYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MpO1xufVxuXG5AbWl4aW4gYmtwdC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcbiAgJGJyZWFrcG9pbnQtcmVzZXQ6IGJyZWFrcG9pbnQtcmVzZXQoJHNldHRpbmdzKTtcbn0iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFByaXZhdGUgQnJlYWtwb2ludCBWYXJpYWJsZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogKCk7XG4kcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFkZWZhdWx0O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEJyZWFrcG9pbnQgSGFzIENvbnRleHRcbi8vIFJldHVybnMgd2hldGhlciBvciBub3QgeW91IGFyZSBpbnNpZGUgYSBCcmVha3BvaW50IHF1ZXJ5XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LWhhcy1jb250ZXh0KCkge1xuICBAaWYgbGVuZ3RoKCRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQpIHtcbiAgICBAcmV0dXJuIHRydWU7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBCcmVha3BvaW50IEdldCBDb250ZXh0XG4vLyAkZmVhdHVyZTogSW5wdXQgZmVhdHVyZSB0byBnZXQgaXQncyBjdXJyZW50IE1RIGNvbnRleHQuIFJldHVybnMgZmFsc2UgaWYgbm8gY29udGV4dFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1nZXQtY29udGV4dCgkZmVhdHVyZSkge1xuICBAaWYgbWFwLWhhcy1rZXkoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpIHtcbiAgICAkZ2V0OiBtYXAtZ2V0KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKTtcbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIG5vLXF1ZXJ5IGZyb20gZ2V0IHNpZGUgc28gL2ZhbHNlLyBwcmVwZW5kcyBhcmVuJ3QgcmV0dXJuZWRcbiAgICBAaWYgJGZlYXR1cmUgPT0gJ25vLXF1ZXJ5JyB7XG4gICAgICBAaWYgdHlwZS1vZigkZ2V0KSA9PSAnbGlzdCcgYW5kIGxlbmd0aCgkZ2V0KSA+IDEgYW5kIG50aCgkZ2V0LCAxKSA9PSBmYWxzZSB7XG4gICAgICAgICRnZXQ6IG50aCgkZ2V0LCBsZW5ndGgoJGdldCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBAcmV0dXJuICRnZXQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpZiBicmVha3BvaW50LWhhcy1jb250ZXh0KCkgYW5kICRmZWF0dXJlID09ICdtZWRpYScge1xuICAgICAgQHJldHVybiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFByaXZhdGUgZnVuY3Rpb24gdG8gc2V0IGNvbnRleHRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZmVhdHVyZSwgJHZhbHVlKSB7XG4gIEBpZiAkdmFsdWUgPT0gJ21vbm9jaHJvbWUnIHtcbiAgICAkZmVhdHVyZTogJ21vbm9jaHJvbWUnO1xuICB9XG5cbiAgJGN1cnJlbnQ6IG1hcC1nZXQoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpO1xuICBAaWYgJGN1cnJlbnQgYW5kIGxlbmd0aCgkY3VycmVudCkgPT0gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XG4gICAgQHdhcm4gXCJZb3UgaGF2ZSBhbHJlYWR5IHF1ZXJpZWQgYWdhaW5zdCBgI3skZmVhdHVyZX1gLiBVbmV4cGVjdGVkIHRoaW5ncyBtYXkgaGFwcGVuIGlmIHlvdSBxdWVyeSBhZ2FpbnN0IHRoZSBzYW1lIGZlYXR1cmUgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgYGFuZGAgcXVlcnkuIEJyZWFrcG9pbnQgaXMgb3ZlcndyaXRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCB3aXRoIGAjeyR2YWx1ZX1gXCI7XG4gIH1cblxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKSB7XG4gICAgJHYtaG9sZGVyOiAoKTtcbiAgICBAZm9yICRpIGZyb20gMSB0byAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcbiAgICAgIEBpZiAkZmVhdHVyZSA9PSAnbWVkaWEnIHtcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgJHZhbHVlKTtcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtbWVyZ2UoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgKCRmZWF0dXJlOiAkdi1ob2xkZXIpKSAhZ2xvYmFsO1xuICB9XG4gIEBlbHNlIHtcbiAgICAkdi1ob2xkZXI6IG1hcC1nZXQoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpO1xuICAgICRsZW5ndGg6IGxlbmd0aCgkdi1ob2xkZXIpO1xuICAgIEBmb3IgJGkgZnJvbSAkbGVuZ3RoIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQgLSAxIHtcbiAgICAgIEBpZiAkZmVhdHVyZSA9PSAnbWVkaWEnIHtcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgJHZhbHVlKTtcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtbWVyZ2UoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgKCRmZWF0dXJlOiAkdi1ob2xkZXIpKSAhZ2xvYmFsO1xuICB9XG5cbiAgQHJldHVybiB0cnVlO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFByaXZhdGUgZnVuY3Rpb24gdG8gcmVzZXQgY29udGV4dFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AbWl4aW4gcHJpdmF0ZS1icmVha3BvaW50LXJlc2V0LWNvbnRleHRzIHtcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogKCkgIWdsb2JhbDtcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydHMgdGhlIGlucHV0IHZhbHVlIHRvIEJhc2UgRU1zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LXRvLWJhc2UtZW0oJHZhbHVlKSB7XG4gICR2YWx1ZS11bml0OiB1bml0KCR2YWx1ZSk7XG5cbiAgLy8gV2lsbCBjb252ZXJ0IHJlbGF0aXZlIEVNcyBpbnRvIHJvb3QgRU1zLlxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykgYW5kIHR5cGUtb2YoYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykpID09ICdudW1iZXInIGFuZCAkdmFsdWUtdW5pdCA9PSAnZW0nIHtcbiAgICAkYmFzZS11bml0OiB1bml0KGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKTtcblxuICAgIEBpZiAkYmFzZS11bml0ID09ICdweCcgb3IgJGJhc2UtdW5pdCA9PSAnJScgb3IgJGJhc2UtdW5pdCA9PSAnZW0nIG9yICRiYXNlLXVuaXQgPT0gJ3B0JyB7XG4gICAgICBAcmV0dXJuIGJhc2UtY29udmVyc2lvbigkdmFsdWUpIC8gYmFzZS1jb252ZXJzaW9uKGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKSAqIDFlbTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHdhcm4gJyN7YnJlYWtwb2ludC1nZXQoXFwnYmFzZSBmb250IHNpemVcXCcpfSBpcyBub3Qgc2V0IGluIHZhbGlkIHVuaXRzIGZvciBmb250IHNpemUhJztcbiAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIGJhc2UtY29udmVyc2lvbigkdmFsdWUpO1xuICB9XG59XG5cbkBmdW5jdGlvbiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKSB7XG4gICR1bml0OiB1bml0KCR2YWx1ZSk7XG5cbiAgQGlmICR1bml0ID09ICdweCcge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gMTZweCAqIDFlbTtcbiAgfVxuICBAZWxzZSBpZiAkdW5pdCA9PSAnJScge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gMTAwJSAqIDFlbTtcbiAgfVxuICBAZWxzZSBpZiAkdW5pdCA9PSAnZW0nIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuICBAZWxzZSBpZiAkdW5pdCA9PSAncHQnIHtcbiAgICBAcmV0dXJuICR2YWx1ZSAvIDEycHQgKiAxZW07XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gJHZhbHVlO1xuLy8gICAgQHdhcm4gJ0V2ZXJ5dGhpbmcgaXMgdGVycmlibGUhIFdoYXQgaGF2ZSB5b3UgZG9uZT8hJztcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gaGF2ZSBhIG1pbi9tYXggcGFpclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kYnJlYWtwb2ludC1taW4tbWF4LWZlYXR1cmVzOiAnY29sb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yLWluZGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3BlY3QtcmF0aW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS1oZWlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS13aWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb25vY2hyb21lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNvbHV0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LW1pbi1tYXgoJGZlYXR1cmUpIHtcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtbWluLW1heC1mZWF0dXJlcyB7XG4gICAgQGlmICRmZWF0dXJlID09ICRpdGVtIHtcbiAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiBmYWxzZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgY2FuIGhhdmUgYSBzdHJpbmcgdmFsdWVcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJGJyZWFrcG9pbnQtc3RyaW5nLWZlYXR1cmVzOiAgJ29yaWVudGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2FuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNwZWN0LXJhdGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdW1pbm9zaXR5JztcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc3RyaW5nLXZhbHVlKCRmZWF0dXJlKSB7XG4gIEBlYWNoICRpdGVtIGluICRicmVha3BvaW50LXN0cmluZy1mZWF0dXJlcyB7XG4gICAgQGlmIGJyZWFrcG9pbnQtbWluLW1heCgkaXRlbSkge1xuICAgICAgQGlmICRmZWF0dXJlID09ICdtaW4tI3skaXRlbX0nIG9yICRmZWF0dXJlID09ICdtYXgtI3skaXRlbX0nIHtcbiAgICAgICAgQHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSBpZiAkZmVhdHVyZSA9PSAkaXRlbSB7XG4gICAgICBAcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gZmFsc2U7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIGEgbWVkaWEgdHlwZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kYnJlYWtwb2ludC1tZWRpYS10eXBlczogICdhbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJhaWxsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdlbWJvc3NlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kaGVsZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9qZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmVlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVlY2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAndHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R2JztcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaXMtbWVkaWEoJGZlYXR1cmUpIHtcbiAgQGVhY2ggJG1lZGlhIGluICRicmVha3BvaW50LW1lZGlhLXR5cGVzIHtcbiAgICBAaWYgKCRmZWF0dXJlID09ICRtZWRpYSkgb3IgKCRmZWF0dXJlID09ICdub3QgI3skbWVkaWF9Jykgb3IgKCRmZWF0dXJlID09ICdvbmx5ICN7JG1lZGlhfScpIHtcbiAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIGZhbHNlO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gc3RhbmQgYWxvbmVcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZy1mZWF0dXJlczogJ2NvbG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvci1pbmRleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9ub2Nocm9tZSc7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGZlYXR1cmUpIHtcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZy1mZWF0dXJlcyB7XG4gICAgQGlmICRmZWF0dXJlID09ICRpdGVtIHtcbiAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiBmYWxzZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmVcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaXMtcmVzb2x1dGlvbigkZmVhdHVyZSkge1xuICAkcmVzb2x1dGlvbnM6ICdkZXZpY2UtcGl4ZWwtcmF0aW8nLCAnZHByJztcblxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycpIHtcbiAgICAkcmVzb2x1dGlvbnM6IGFwcGVuZCgkcmVzb2x1dGlvbnMsICdyZXNvbHV0aW9uJyk7XG4gIH1cblxuICBAZWFjaCAkcmVzbyBpbiAkcmVzb2x1dGlvbnMge1xuICAgIEBpZiBpbmRleCgkZmVhdHVyZSwgJHJlc28pIG9yIGluZGV4KCRmZWF0dXJlLCAnbWluLSN7JHJlc299Jykgb3IgaW5kZXgoJGZlYXR1cmUsICdtYXgtI3skcmVzb30nKSB7XG4gICAgICBAcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBmYWxzZTtcbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW1wb3J0IFBhcnNlciBQaWVjZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGltcG9ydCBcInBhcnNlcnMvcXVlcnlcIjtcbkBpbXBvcnQgXCJwYXJzZXJzL3NpbmdsZVwiO1xuQGltcG9ydCBcInBhcnNlcnMvZG91YmxlXCI7XG5AaW1wb3J0IFwicGFyc2Vycy90cmlwbGVcIjtcbkBpbXBvcnQgXCJwYXJzZXJzL3Jlc29sdXRpb25cIjtcblxuJE1lbW8tRXhpc3RzOiBmdW5jdGlvbi1leGlzdHMobWVtby1nZXQpIGFuZCBmdW5jdGlvbi1leGlzdHMobWVtby1zZXQpO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEJyZWFrcG9pbnQgRnVuY3Rpb25cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkY29udGV4dHMuLi4pIHtcbiAgJHJ1bjogdHJ1ZTtcbiAgJHJldHVybjogKCk7XG5cbiAgLy8gR3JhYiB0aGUgTWVtbyBPdXRwdXQgaWYgTWVtb2l6YXRpb24gY2FuIGJlIGEgdGhpbmdcbiAgQGlmICRNZW1vLUV4aXN0cyB7XG4gICAgJHJldHVybjogbWVtby1nZXQoYnJlYWtwb2ludCwgYnJlYWtwb2ludCAkcXVlcnkgJGNvbnRleHRzKTtcblxuICAgIEBpZiAkcmV0dXJuICE9IG51bGwge1xuICAgICAgJHJ1bjogZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGlmIG5vdCAkTWVtby1FeGlzdHMgb3IgJHJ1biB7XG4gICAgLy8gSW50ZXJuYWwgVmFyaWFibGVzXG4gICAgJHF1ZXJ5LXN0cmluZzogJyc7XG4gICAgJHF1ZXJ5LWZhbGxiYWNrOiBmYWxzZTtcbiAgICAkcmV0dXJuOiAoKTtcblxuICAgIC8vIFJlc2VydmUgR2xvYmFsIFByaXZhdGUgQnJlYWtwb2ludCBDb250ZXh0XG4gICAgJGhvbGRlci1jb250ZXh0OiAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyO1xuICAgICRob2xkZXItcXVlcnktY291bnQ6ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ7XG5cbiAgICAvLyBSZXNldCBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWdsb2JhbDtcblxuXG4gICAgLy8gVGVzdCB0byBzZWUgaWYgaXQncyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0XG4gICAgJG9yLWxpc3Q6IGlmKGxpc3Qtc2VwYXJhdG9yKCRxdWVyeSkgPT0gJ2NvbW1hJywgdHJ1ZSwgZmFsc2UpO1xuXG5cbiAgICBAaWYgKCRvci1saXN0ID09IGZhbHNlIGFuZCBicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpID09IGZhbHNlKSB7XG4gICAgICAkcXVlcnktc3RyaW5nOiBicmVha3BvaW50LXBhcnNlKCRxdWVyeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICRsZW5ndGg6IGxlbmd0aCgkcXVlcnkpO1xuXG4gICAgICAkbGFzdDogbnRoKCRxdWVyeSwgJGxlbmd0aCk7XG4gICAgICAkcXVlcnktZmFsbGJhY2s6IGJyZWFrcG9pbnQtbm8tcXVlcnkoJGxhc3QpO1xuXG4gICAgICBAaWYgKCRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSkge1xuICAgICAgICAkbGVuZ3RoOiAkbGVuZ3RoIC0gMTtcbiAgICAgIH1cblxuICAgICAgQGlmIChicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpID09IHRydWUpIHtcbiAgICAgICAgJG1xOiAoKTtcblxuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgICAgICRtcTogYXBwZW5kKCRtcSwgbnRoKCRxdWVyeSwgJGkpLCBjb21tYSk7XG4gICAgICAgIH1cblxuICAgICAgICAkcXVlcnktc3RyaW5nOiBicmVha3BvaW50LXBhcnNlKCRtcSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRxdWVyeS1zdHJpbmc6ICcnO1xuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgICAgICRxdWVyeS1zdHJpbmc6ICRxdWVyeS1zdHJpbmcgKyBpZigkaSA9PSAxLCAnJywgJywgJykgKyBicmVha3BvaW50LXBhcnNlKG50aCgkcXVlcnksICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkcmV0dXJuOiAoJ3F1ZXJ5JzogJHF1ZXJ5LXN0cmluZyxcbiAgICAgICAgJ2ZhbGxiYWNrJzogJHF1ZXJ5LWZhbGxiYWNrLFxuICAgICAgICAnY29udGV4dCBob2xkZXInOiAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLFxuICAgICAgICAncXVlcnkgY291bnQnOiAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50XG4gICAgKTtcbiAgICBAaWYgbGVuZ3RoKCRjb250ZXh0cykgPiAwIGFuZCBudGgoJGNvbnRleHRzLCAxKSAhPSBmYWxzZSB7XG4gICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlIHtcbiAgICAgICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJ25vLXF1ZXJ5JywgJHF1ZXJ5LWZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgICRjb250ZXh0LW1hcDogKCk7XG4gICAgICBAZWFjaCAkY29udGV4dCBpbiAkY29udGV4dHMge1xuICAgICAgICAkY29udGV4dC1tYXA6IG1hcC1tZXJnZSgkY29udGV4dC1tYXAsICgkY29udGV4dDogYnJlYWtwb2ludC1nZXQtY29udGV4dCgkY29udGV4dCkpKTtcbiAgICAgIH1cbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoY29udGV4dDogJGNvbnRleHQtbWFwKSk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgR2xvYmFsIFByaXZhdGUgQnJlYWtwb2ludCBDb250ZXh0XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogKCkgIWdsb2JhbDtcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFnbG9iYWw7XG5cbiAgICBAaWYgJE1lbW8tRXhpc3RzIHtcbiAgICAgICRob2xkZXI6IG1lbW8tc2V0KGJyZWFrcG9pbnQsIGJyZWFrcG9pbnQgJHF1ZXJ5ICRjb250ZXh0cywgJHJldHVybik7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEdlbmVyYWwgQnJlYWtwb2ludCBQYXJzZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UoJHF1ZXJ5KSB7XG4gIC8vIEluY3JlYXNlIG51bWJlciBvZiAnYW5kJyBxdWVyaWVzXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQgKyAxICFnbG9iYWw7XG5cbiAgLy8gU2V0IHVwIE1lZGlhIFR5cGVcbiAgJHF1ZXJ5LXByaW50OiAnJztcblxuICAkZm9yY2UtYWxsOiAoKGJyZWFrcG9pbnQtZ2V0KCdmb3JjZSBhbGwgbWVkaWEgdHlwZScpID09IHRydWUpIGFuZCAoYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSA9PSAnYWxsJykpO1xuICAkZW1wdHktbWVkaWE6IHRydWU7XG4gIEBpZiAoJGZvcmNlLWFsbCA9PSB0cnVlKSBvciAoYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSAhPSAnYWxsJykge1xuICAgIC8vIEZvcmNlIHRoZSBwcmludCBvZiB0aGUgZGVmYXVsdCBtZWRpYSB0eXBlIGlmIChmb3JjZSBhbGwgaXMgdHJ1ZSBhbmQgZGVmYXVsdCBtZWRpYSB0eXBlIGlzIGFsbCkgb3IgKGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBub3QgYWxsKVxuICAgICRxdWVyeS1wcmludDogYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKTtcbiAgICAkZW1wdHktbWVkaWE6IGZhbHNlO1xuICB9XG5cblxuICAkcXVlcnktcmVzb2x1dGlvbjogZmFsc2U7XG5cbiAgJHF1ZXJ5LWhvbGRlcjogYnJlYWtwb2ludC1wYXJzZS1xdWVyeSgkcXVlcnkpO1xuXG5cblxuICAvLyBMb29wIG92ZXIgZWFjaCBwYXJzZWQgb3V0IHF1ZXJ5IGFuZCB3cml0ZSBpdCB0byAkcXVlcnktcHJpbnRcbiAgJGZpcnN0OiB0cnVlO1xuXG4gIEBlYWNoICRmZWF0dXJlIGluICRxdWVyeS1ob2xkZXIge1xuICAgICRsZW5ndGg6IGxlbmd0aCgkZmVhdHVyZSk7XG5cbiAgICAvLyBQYXJzZSBhIHNpbmdsZSBmZWF0dXJlXG4gICAgQGlmICgkbGVuZ3RoID09IDEpIHtcbiAgICAgIC8vIEZlYXR1cmUgaXMgY3VycmVudGx5IGEgbGlzdCwgZ3JhYiB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICAkZmVhdHVyZTogbnRoKCRmZWF0dXJlLCAxKTtcblxuICAgICAgLy8gTWVkaWEgVHlwZSBtdXN0IGJ5IGNvbnZlbnRpb24gYmUgdGhlIGZpcnN0IGl0ZW0sIHNvIGl0J3Mgc2FmZSB0byBmbGF0IG92ZXJyaWRlICRxdWVyeS1wcmludCwgd2hpY2ggcmlnaHQgbm93IHNob3VsZCBvbmx5IGJlIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGVcbiAgICAgIEBpZiAoYnJlYWtwb2ludC1pcy1tZWRpYSgkZmVhdHVyZSkpIHtcbiAgICAgICAgQGlmICgkZm9yY2UtYWxsID09IHRydWUpIG9yICgkZmVhdHVyZSAhPSAnYWxsJykge1xuICAgICAgICAgIC8vIEZvcmNlIHRoZSBwcmludCBvZiB0aGUgZGVmYXVsdCBtZWRpYSB0eXBlIGlmIChmb3JjZSBhbGwgaXMgdHJ1ZSBhbmQgZGVmYXVsdCBtZWRpYSB0eXBlIGlzIGFsbCkgb3IgKGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBub3QgYWxsKVxuICAgICAgICAgICRxdWVyeS1wcmludDogJGZlYXR1cmU7XG4gICAgICAgICAgJGVtcHR5LW1lZGlhOiBmYWxzZTtcblxuICAgICAgICAgIC8vIFNldCBDb250ZXh0XG4gICAgICAgICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWVkaWEsICRxdWVyeS1wcmludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xuICAgICAgICAkZmlyc3Q6IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQYXJzZSBhIGRvdWJsZSBmZWF0dXJlXG4gICAgQGVsc2UgaWYgKCRsZW5ndGggPT0gMikge1xuICAgICAgQGlmIChicmVha3BvaW50LWlzLXJlc29sdXRpb24oJGZlYXR1cmUpICE9IGZhbHNlKSB7XG4gICAgICAgICRxdWVyeS1yZXNvbHV0aW9uOiAkZmVhdHVyZTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHBhcnNlZDogbnVsbDtcbiAgICAgICAgLy8gSWYgaXQncyBhIHN0cmluZy9udW1iZXIgcGFpcixcbiAgICAgICAgLy8gd2UgY2hlY2sgdG8gc2VlIGlmIG9uZSBpcyBhIHNpbmdsZS1zdHJpbmcgdmFsdWUsXG4gICAgICAgIC8vIHRoZW4gd2UgcGFyc2UgaXQgYXMgYSBub3JtYWwgZG91YmxlXG4gICAgICAgICRhbHBoYTogbnRoKCRmZWF0dXJlLCAxKTtcbiAgICAgICAgJGJldGE6IG50aCgkZmVhdHVyZSwgMik7XG4gICAgICAgIEBpZiBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGFscGhhKSBvciBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGJldGEpIHtcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkYWxwaGEsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XG4gICAgICAgICAgJGZpcnN0OiBmYWxzZTtcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkYmV0YSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICAgICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kb3VibGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XG4gICAgICAgICAgJGZpcnN0OiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBQYXJzZSBhIHRyaXBsZSBmZWF0dXJlXG4gICAgQGVsc2UgaWYgKCRsZW5ndGggPT0gMykge1xuICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS10cmlwbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcbiAgICAgICRmaXJzdDogZmFsc2U7XG4gICAgfVxuXG4gIH1cblxuICBAaWYgKCRxdWVyeS1yZXNvbHV0aW9uICE9IGZhbHNlKSB7XG4gICAgJHF1ZXJ5LXByaW50OiBicmVha3BvaW50LWJ1aWxkLXJlc29sdXRpb24oJHF1ZXJ5LXByaW50LCAkcXVlcnktcmVzb2x1dGlvbiwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICB9XG5cbiAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZmVhdHVyZSB0aGF0J3MgYmVlbiBkZXRlY3RlZCBzbyBmYXIgYW5kIGFwcGVuZCAnZmFsc2UnIHRvIHRoZSB0aGUgdmFsdWUgbGlzdCB0byBpbmNyZW1lbnQgdGhlaXIgY291bnRlcnNcbiAgQGVhY2ggJGYsICR2IGluICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIge1xuICAgICR2LWhvbGRlcjogJHY7XG4gICAgJGxlbmd0aDogbGVuZ3RoKCR2LWhvbGRlcik7XG4gICAgQGlmIGxlbmd0aCgkdi1ob2xkZXIpIDwgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XG4gICAgICBAZm9yICRpIGZyb20gJGxlbmd0aCB0byAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcbiAgICAgICAgQGlmICRmID09ICdtZWRpYScge1xuICAgICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSk7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1tZXJnZSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAoJGY6ICR2LWhvbGRlcikpICFnbG9iYWw7XG4gIH1cblxuICBAcmV0dXJuICRxdWVyeS1wcmludDtcbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXF1ZXJ5KCRxdWVyeSkge1xuICAvLyBQYXJzZSBmZWF0dXJlcyBvdXQgb2YgYW4gaW5kaXZpZHVhbCBxdWVyeVxuICAkZmVhdHVyZS1ob2xkZXI6ICgpO1xuICAkcXVlcnktaG9sZGVyOiAoKTtcbiAgJGxlbmd0aDogbGVuZ3RoKCRxdWVyeSk7XG5cbiAgQGlmICRsZW5ndGggPT0gMiB7XG4gICAgLy8gSWYgd2UndmUgZ290IGEgc3RyaW5nL251bWJlciwgbnVtYmVyL3N0cmluZywgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYSB2YWxpZCBzdHJpbmcvbnVtYmVyIHBhaXIgb3IgdHdvIHNpbmdsZXNcbiAgICBAaWYgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdzdHJpbmcnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnbnVtYmVyJykgb3IgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdudW1iZXInIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnc3RyaW5nJykge1xuXG4gICAgICAkbnVtYmVyOiAnJztcbiAgICAgICR2YWx1ZTogJyc7XG5cbiAgICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnc3RyaW5nJyB7XG4gICAgICAgICRudW1iZXI6IG50aCgkcXVlcnksIDIpO1xuICAgICAgICAkdmFsdWU6IG50aCgkcXVlcnksIDEpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkbnVtYmVyOiBudGgoJHF1ZXJ5LCAxKTtcbiAgICAgICAgJHZhbHVlOiBudGgoJHF1ZXJ5LCAyKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHN0cmluZyB2YWx1ZSBjYW4gYmUgYSBzaW5nbGUgdmFsdWUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgbnVtYmVyIHBhc3NlZCBpbiBpcyBhIHZhbGlkIGlucHV0IGZvciBzYWlkIHNpbmdsZSB2YWx1ZS4gRm9ydHVuYXRlbHksIGFsbCBjdXJyZW50IHNpbmdsZS12YWx1ZSBvcHRpb25zIG9ubHkgYWNjZXB0IHVuaXRsZXNzIG51bWJlcnMsIHNvIHRoaXMgY2hlY2sgaXMgZWFzeS5cbiAgICAgIEBpZiBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJHZhbHVlKSB7XG4gICAgICAgIEBpZiB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQoJHZhbHVlLCAkbnVtYmVyLCBzcGFjZSk7XG4gICAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xuICAgICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIG1lZGlhIHR5cGUsIHNwbGl0IHRoZSBxdWVyeVxuICAgICAgQGlmIGJyZWFrcG9pbnQtaXMtbWVkaWEoJHZhbHVlKSB7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAxKSk7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAyKSk7XG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgIH1cbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgc2luZ2xlIGZlYXR1cmUsIHdlJ3JlIGp1c3QgZ29pbmcgdG8gYXNzdW1lIGl0J3MgYSBwcm9wZXIgc3RyaW5nL3ZhbHVlIHBhaXIsIGFuZCByb2xsIHdpdGggaXQuXG4gICAgICBAZWxzZSB7XG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCR2YWx1ZSwgJG51bWJlciwgc3BhY2UpO1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgIH1cblxuICAgIH1cbiAgICAvLyBJZiB0aGV5J3JlIGJvdGggbnVtYmVycywgd2UgYXNzdW1lIGl0J3MgYSBkb3VibGUgYW5kIHJvbGwgd2l0aCB0aGF0XG4gICAgQGVsc2UgaWYgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdudW1iZXInIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnbnVtYmVyJykge1xuICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMSksIG50aCgkcXVlcnksIDIpLCBzcGFjZSk7XG4gICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XG4gICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgfVxuICAgIC8vIElmIHRoZXkncmUgYm90aCBzdHJpbmdzIGFuZCBuZWl0aGVyIGFyZSBzaW5nbGVzLCB3ZSByb2xsIHdpdGggdGhhdC5cbiAgICBAZWxzZSBpZiAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ3N0cmluZycgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdzdHJpbmcnKSB7XG4gICAgICBAaWYgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAxKSkgYW5kIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMikpIHtcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMSksIG50aCgkcXVlcnksIDIpLCBzcGFjZSk7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkbGVuZ3RoID09IDMge1xuICAgIC8vIElmIHdlJ3ZlIGdvdCB0aHJlZSBpdGVtcyBhbmQgbm9uZSBpcyBhIGxpc3QsIHdlIGNoZWNrIHRvIHNlZVxuICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSAhPSAnbGlzdCcgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpICE9ICdsaXN0JyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAzKSkgIT0gJ2xpc3QnIHtcbiAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGl0ZW1zIGFyZSBzaW5nbGUgc3RyaW5nIHZhbHVlcyBhbmQgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSBtZWRpYSB2YWx1ZXMsIHdlJ3JlIGdvb2QuXG4gICAgICBAaWYgKG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMSkpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDIpKSBhbmQgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAzKSkpIGFuZCAgKChub3QgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAxKSkgYW5kIG5vdCBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDIpKSBhbmQgbm90IGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMykpKSkge1xuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAxKSwgbnRoKCRxdWVyeSwgMiksIHNwYWNlKTtcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQoJGZlYXR1cmUtaG9sZGVyLCBudGgoJHF1ZXJ5LCAzKSwgc3BhY2UpO1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgIH1cbiAgICAgIC8vIGxldCdzIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3QgaXRlbSBpcyBhIG1lZGlhIHR5cGVcbiAgICAgIEBlbHNlIGlmIGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMSkpIHtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsIG50aCgkcXVlcnksIDEpKTtcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMiksIG50aCgkcXVlcnksIDMpLCBzcGFjZSk7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIpO1xuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgaXQncyBhIHNpbmdsZSBpdGVtLCBvciBpZiBpdCdzIG5vdCBhIHNwZWNpYWwgY2FzZSBkb3VibGUgb3IgdHJpcGxlLCB3ZSBjYW4gc2ltcGx5IHJldHVybiB0aGUgcXVlcnkuXG4gIEByZXR1cm4gJHF1ZXJ5O1xufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbXBvcnQgUGllY2VzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBpbXBvcnQgXCJzaW5nbGUvZGVmYXVsdFwiO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XG4gICRwYXJzZWQ6ICcnO1xuICAkbGVhZGVyOiAnJztcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XG4gICAgJGxlYWRlcjogJ2FuZCAnO1xuICB9XG5cbiAgLy8gSWYgaXQncyBhIHNpbmdsZSBmZWF0dXJlIHRoYXQgY2FuIHN0YW5kIGFsb25lLCB3ZSBsZXQgaXRcbiAgQGlmIChicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGZlYXR1cmUpKSB7XG4gICAgJHBhcnNlZDogJGZlYXR1cmU7XG4gICAgLy8gU2V0IENvbnRleHRcbiAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZmVhdHVyZSwgJGZlYXR1cmUpO1xuICB9XG4gIC8vIElmIGl0J3Mgbm90IGEgc3RhbmQgYWxvbmUgZmVhdHVyZSwgd2UgcGFzcyBpdCBvZmYgdG8gdGhlIGRlZmF1bHQgaGFuZGxlci5cbiAgQGVsc2Uge1xuICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdCgkZmVhdHVyZSk7XG4gIH1cblxuICBAcmV0dXJuICRsZWFkZXIgKyAnKCcgKyAkcGFyc2VkICsgJyknO1xufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdCgkZmVhdHVyZSkge1xuICAkZGVmYXVsdDogYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgZmVhdHVyZScpO1xuXG4gIC8vIFNldCBDb250ZXh0XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRkZWZhdWx0LCAkZmVhdHVyZSk7XG5cbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkgYW5kICh0eXBlLW9mKCRmZWF0dXJlKSA9PSAnbnVtYmVyJykge1xuICAgIEByZXR1cm4gJyN7JGRlZmF1bHR9OiAje2JyZWFrcG9pbnQtdG8tYmFzZS1lbSgkZmVhdHVyZSl9JztcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiAnI3skZGVmYXVsdH06ICN7JGZlYXR1cmV9JztcbiAgfVxufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbXBvcnQgUGllY2VzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBpbXBvcnQgXCJkb3VibGUvZGVmYXVsdC1wYWlyXCI7XG5AaW1wb3J0IFwiZG91YmxlL2RvdWJsZS1zdHJpbmdcIjtcbkBpbXBvcnQgXCJkb3VibGUvZGVmYXVsdFwiO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kb3VibGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XG4gICRwYXJzZWQ6ICcnO1xuICAkbGVhZGVyOiAnJztcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XG4gICAgJGxlYWRlcjogJ2FuZCAnO1xuICB9XG5cbiAgJGZpcnN0OiBudGgoJGZlYXR1cmUsIDEpO1xuICAkc2Vjb25kOiBudGgoJGZlYXR1cmUsIDIpO1xuXG4gIC8vIElmIHdlJ3ZlIGdvdCB0d28gbnVtYmVycywgd2Uga25vdyB3ZSBuZWVkIHRvIHVzZSB0aGUgZGVmYXVsdCBwYWlyIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1lZGlhIHF1ZXJpZXMgdGhhdCBoYXMgYSBtZWRpYSBmZWF0dXJlIHRoYXQgaXMgYSBudW1iZXJcbiAgQGlmIHR5cGUtb2YoJGZpcnN0KSA9PSAnbnVtYmVyJyBhbmQgdHlwZS1vZigkc2Vjb25kKSA9PSAnbnVtYmVyJyB7XG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0LXBhaXIoJGZpcnN0LCAkc2Vjb25kKTtcbiAgfVxuICAvLyBJZiB0aGV5IGFyZSBib3RoIHN0cmluZ3MsIHdlIHNlbmQgaXQgdGhyb3VnaCB0aGUgc3RyaW5nIHBhcnNlclxuICBAZWxzZSBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ3N0cmluZycgYW5kIHR5cGUtb2YoJHNlY29uZCkgPT0gJ3N0cmluZycge1xuICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLXN0cmluZygkZmlyc3QsICRzZWNvbmQpO1xuICB9XG4gIC8vIElmIGl0J3MgYSBzdHJpbmcvbnVtYmVyIHBhaXIsIHdlIHBhcnNlIGl0IGFzIGEgbm9ybWFsIGRvdWJsZVxuICBAZWxzZSB7XG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtZGVmYXVsdCgkZmlyc3QsICRzZWNvbmQpO1xuICB9XG5cbiAgQHJldHVybiAkbGVhZGVyICsgJHBhcnNlZDtcbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQtcGFpcigkZmlyc3QsICRzZWNvbmQpIHtcbiAgJGRlZmF1bHQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IHBhaXInKTtcbiAgJG1pbjogJyc7XG4gICRtYXg6ICcnO1xuXG4gIC8vIFNvcnQgaW50byBtaW4gYW5kIG1heFxuICAkbWluOiBtaW4oJGZpcnN0LCAkc2Vjb25kKTtcbiAgJG1heDogbWF4KCRmaXJzdCwgJHNlY29uZCk7XG5cbiAgLy8gU2V0IENvbnRleHRcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWluLSN7JGRlZmF1bHR9LCAkbWluKTtcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWF4LSN7JGRlZmF1bHR9LCAkbWF4KTtcblxuICAvLyBNYWtlIHRoZW0gRU1zIGlmIG5lZWQgYmVcbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkge1xuICAgICRtaW46IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWluKTtcbiAgICAkbWF4OiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1heCk7XG4gIH1cblxuICBAcmV0dXJuICcobWluLSN7JGRlZmF1bHR9OiAjeyRtaW59KSBhbmQgKG1heC0jeyRkZWZhdWx0fTogI3skbWF4fSknO1xufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLXN0cmluZygkZmlyc3QsICRzZWNvbmQpIHtcbiAgJGZlYXR1cmU6ICcnO1xuICAkdmFsdWU6ICcnO1xuXG4gIC8vIFRlc3QgdG8gc2VlIHdoaWNoIGlzIHRoZSBmZWF0dXJlIGFuZCB3aGljaCBpcyB0aGUgdmFsdWVcbiAgQGlmIChicmVha3BvaW50LXN0cmluZy12YWx1ZSgkZmlyc3QpID09IHRydWUpIHtcbiAgICAkZmVhdHVyZTogJGZpcnN0O1xuICAgICR2YWx1ZTogJHNlY29uZDtcbiAgfVxuICBAZWxzZSBpZiAoYnJlYWtwb2ludC1zdHJpbmctdmFsdWUoJHNlY29uZCkgPT0gdHJ1ZSkge1xuICAgICRmZWF0dXJlOiAkc2Vjb25kO1xuICAgICR2YWx1ZTogJGZpcnN0O1xuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiBcIk5laXRoZXIgI3skZmlyc3R9IG5vciAjeyRzZWNvbmR9IGlzIGEgdmFsaWQgbWVkaWEgcXVlcnkgbmFtZS5cIjtcbiAgfVxuXG4gIC8vIFNldCBDb250ZXh0XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpO1xuXG4gIEByZXR1cm4gJygjeyRmZWF0dXJlfTogI3skdmFsdWV9KSc7XG59IiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLWRlZmF1bHQoJGZpcnN0LCAkc2Vjb25kKSB7XG4gICRmZWF0dXJlOiAnJztcbiAgJHZhbHVlOiAnJztcblxuICBAaWYgdHlwZS1vZigkZmlyc3QpID09ICdzdHJpbmcnIHtcbiAgICAkZmVhdHVyZTogJGZpcnN0O1xuICAgICR2YWx1ZTogJHNlY29uZDtcbiAgfVxuICBAZWxzZSB7XG4gICAgJGZlYXR1cmU6ICRzZWNvbmQ7XG4gICAgJHZhbHVlOiAkZmlyc3Q7XG4gIH1cblxuICAvLyBTZXQgQ29udGV4dFxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZmVhdHVyZSwgJHZhbHVlKTtcblxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XG4gICAgJHZhbHVlOiBicmVha3BvaW50LXRvLWJhc2UtZW0oJHZhbHVlKTtcbiAgfVxuXG4gIEByZXR1cm4gJygjeyRmZWF0dXJlfTogI3skdmFsdWV9KSdcbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW1wb3J0IFBpZWNlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AaW1wb3J0IFwidHJpcGxlL2RlZmF1bHRcIjtcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xuICAkcGFyc2VkOiAnJztcbiAgJGxlYWRlcjogJyc7XG5cbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XG4gICAgJGxlYWRlcjogJ2FuZCAnO1xuICB9XG5cbiAgLy8gc2VwYXJhdGUgdGhlIHN0cmluZyBmZWF0dXJlcyBmcm9tIHRoZSB2YWx1ZSBudW1iZXJzXG4gICRzdHJpbmc6IG51bGw7XG4gICRudW1iZXJzOiBudWxsO1xuICBAZWFjaCAkdmFsIGluICRmZWF0dXJlIHtcbiAgICBAaWYgdHlwZS1vZigkdmFsKSA9PSBzdHJpbmcge1xuICAgICAgJHN0cmluZzogJHZhbDtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGlmIHR5cGUtb2YoJG51bWJlcnMpID09ICdudWxsJyB7XG4gICAgICAgICRudW1iZXJzOiAkdmFsO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkbnVtYmVyczogYXBwZW5kKCRudW1iZXJzLCAkdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXRyaXBsZS1kZWZhdWx0KCRzdHJpbmcsIG50aCgkbnVtYmVycywgMSksIG50aCgkbnVtYmVycywgMikpO1xuXG4gIEByZXR1cm4gJGxlYWRlciArICRwYXJzZWQ7XG5cbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXRyaXBsZS1kZWZhdWx0KCRmZWF0dXJlLCAkZmlyc3QsICRzZWNvbmQpIHtcblxuICAvLyBTb3J0IGludG8gbWluIGFuZCBtYXhcbiAgJG1pbjogbWluKCRmaXJzdCwgJHNlY29uZCk7XG4gICRtYXg6IG1heCgkZmlyc3QsICRzZWNvbmQpO1xuXG4gIC8vIFNldCBDb250ZXh0XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1pbi0jeyRmZWF0dXJlfSwgJG1pbik7XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1heC0jeyRmZWF0dXJlfSwgJG1heCk7XG5cbiAgLy8gTWFrZSB0aGVtIEVNcyBpZiBuZWVkIGJlXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIHtcbiAgICAkbWluOiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1pbik7XG4gICAgJG1heDogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtYXgpO1xuICB9XG5cbiAgQHJldHVybiAnKG1pbi0jeyRmZWF0dXJlfTogI3skbWlufSkgYW5kIChtYXgtI3skZmVhdHVyZX06ICN7JG1heH0pJztcbn1cbiIsIkBpbXBvcnQgXCJyZXNvbHV0aW9uL3Jlc29sdXRpb25cIjtcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtYnVpbGQtcmVzb2x1dGlvbigkcXVlcnktcHJpbnQsICRxdWVyeS1yZXNvbHV0aW9uLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xuICAkbGVhZGVyOiAnJztcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XG4gICAgJGxlYWRlcjogJ2FuZCAnO1xuICB9XG5cbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSBhbmQgJHF1ZXJ5LXJlc29sdXRpb24ge1xuICAgICRyZXNvbHV0aW9uczogYnJlYWtwb2ludC1tYWtlLXJlc29sdXRpb25zKCRxdWVyeS1yZXNvbHV0aW9uKTtcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHJlc29sdXRpb25zKTtcbiAgICAkcXVlcnktaG9sZGVyOiAnJztcblxuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICAkcXVlcnk6ICcjeyRxdWVyeS1wcmludH0gI3skbGVhZGVyfSN7bnRoKCRyZXNvbHV0aW9ucywgJGkpfSc7XG4gICAgICBAaWYgJGkgPT0gMSB7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6ICRxdWVyeTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogJyN7JHF1ZXJ5LWhvbGRlcn0sICN7JHF1ZXJ5fSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBSZXR1cm4gd2l0aCBhdHRhY2hlZCByZXNvbHV0aW9uXG4gICAgQHJldHVybiAkcXVlcnktcHJpbnQ7XG4gIH1cbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LW1ha2UtcmVzb2x1dGlvbnMoJHJlc29sdXRpb24pIHtcbiAgJGxlbmd0aDogbGVuZ3RoKCRyZXNvbHV0aW9uKTtcblxuICAkb3V0cHV0OiAoKTtcblxuICBAaWYgJGxlbmd0aCA9PSAyIHtcbiAgICAkZmVhdHVyZTogJyc7XG4gICAgJHZhbHVlOiAnJztcblxuICAgIC8vIEZpbmQgd2hpY2ggaXMgbnVtYmVyXG4gICAgQGlmIHR5cGUtb2YobnRoKCRyZXNvbHV0aW9uLCAxKSkgPT0gJ251bWJlcicge1xuICAgICAgJHZhbHVlOiBudGgoJHJlc29sdXRpb24sIDEpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkdmFsdWU6IG50aCgkcmVzb2x1dGlvbiwgMik7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIG1pbi9tYXgvc3RhbmRhcmRcbiAgICBAaWYgaW5kZXgoJHJlc29sdXRpb24sICdtaW4tcmVzb2x1dGlvbicpIHtcbiAgICAgICRmZWF0dXJlOiAnbWluLSc7XG4gICAgfVxuICAgIEBlbHNlIGlmIGluZGV4KCRyZXNvbHV0aW9uLCAnbWF4LXJlc29sdXRpb24nKSB7XG4gICAgICAkZmVhdHVyZTogJ21heC0nO1xuICAgIH1cblxuICAgICRzdGFuZGFyZDogJygjeyRmZWF0dXJlfXJlc29sdXRpb246ICN7JHZhbHVlfSknO1xuXG4gICAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBkcHB4LFxuICAgIEBpZiB1bml0KCR2YWx1ZSkgIT0gJ2RwcHgnIHtcbiAgICAgICRiYXNlOiA5NmRwaTtcbiAgICAgIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2RwY20nIHtcbiAgICAgICAgJGJhc2U6IDI0My44NGRwY207XG4gICAgICB9XG4gICAgICAvLyBXcml0ZSBvdXQgZmVhdHVyZSB0ZXN0c1xuICAgICAgJHdlYmtpdDogJyc7XG4gICAgICAkbW96OiAnJztcbiAgICAgICR3ZWJraXQ6ICcoLXdlYmtpdC0jeyRmZWF0dXJlfWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAkYmFzZX0pJztcbiAgICAgICRtb3o6ICcoI3skZmVhdHVyZX0tbW96LWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAkYmFzZX0pJztcbiAgICAgIC8vIEFwcGVuZCB0byBvdXRwdXRcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkc3RhbmRhcmQsIHNwYWNlKTtcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkd2Via2l0LCBzcGFjZSk7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJG1veiwgc3BhY2UpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkd2Via2l0OiAnJztcbiAgICAgICRtb3o6ICcnO1xuICAgICAgJHdlYmtpdDogJygtd2Via2l0LSN7JGZlYXR1cmV9ZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvIDFkcHB4fSknO1xuICAgICAgJG1vejogJygjeyRmZWF0dXJlfS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvIDFkcHB4fSknO1xuICAgICAgJGZhbGxiYWNrOiAnKCN7JGZlYXR1cmV9cmVzb2x1dGlvbjogI3skdmFsdWUgLyAxZHBweCAqIDk2ZHBpfSknO1xuICAgICAgLy8gQXBwZW5kIHRvIG91dHB1dFxuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRzdGFuZGFyZCwgc3BhY2UpO1xuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICR3ZWJraXQsIHNwYWNlKTtcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkbW96LCBzcGFjZSk7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJGZhbGxiYWNrLCBzcGFjZSk7XG4gICAgfVxuXG4gIH1cblxuICBAcmV0dXJuICRvdXRwdXQ7XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1uby1xdWVyeSgkcXVlcnkpIHtcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSAnbGlzdCcge1xuICAgICRrZXl3b3JkOiBudGgoJHF1ZXJ5LCAxKTtcblxuICAgIEBpZiB0eXBlLW9mKCRrZXl3b3JkKSA9PSAnc3RyaW5nJyBhbmQgKCRrZXl3b3JkID09ICduby1xdWVyeScgb3IgJGtleXdvcmQgPT0gJ25vIHF1ZXJ5JyBvciAka2V5d29yZCA9PSAnZmFsbGJhY2snKSB7XG4gICAgICBAcmV0dXJuIG50aCgkcXVlcnksIDIpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBEZWZhdWx0IHRoZSBCcmVha3BvaW50cyB2YXJpYWJsZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kYnJlYWtwb2ludHM6ICgpICFkZWZhdWx0O1xuJEJSRUFLUE9JTlRTOiAoKSAhZGVmYXVsdDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXNwb25kLXRvIEFQSSBNaXhpblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AbWl4aW4gcmVzcG9uZC10bygkY29udGV4dCwgJG5vLXF1ZXJ5OiBmYWxzZSkge1xuICBAaWYgbGVuZ3RoKCRicmVha3BvaW50cykgPiAwIGFuZCBsZW5ndGgoJEJSRUFLUE9JTlRTKSA9PSAwIHtcbiAgICBAd2FybiBcIkluIG9yZGVyIHRvIGF2b2lkIHZhcmlhYmxlIG5hbWVzcGFjZSBjb2xsaXNpb25zLCB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHdheSB0byBhZGQgYnJlYWtwb2ludHMgZm9yIHJlc3BvbmQtdG8uIFBsZWFzZSBjaGFuZ2UgYWxsIGluc3RhbmNlcyBvZiBgJGJyZWFrcG9pbnRzOiBhZGQtYnJlYWtwb2ludCgpYCB0byBgQGluY2x1ZGUgYWRkLWJyZWFrcG9pbnQoKWAuIFRoZSBgYWRkLWJyZWFrcG9pbnQoKWAgZnVuY3Rpb24gd2lsbCBiZSBkZXByZWNhdGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuXCI7XG4gICAgJEJSRUFLUE9JTlRTOiAkYnJlYWtwb2ludHMgIWdsb2JhbDtcbiAgICAkYnJlYWtwb2ludHM6ICgpICFnbG9iYWw7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkQlJFQUtQT0lOVFMpICE9ICdtYXAnIHtcbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZW9uZSB3cml0ZXMgZ2liYmVyaXNoIHRvIHRoZSAkYnJlYWtwb2ludHMgdmFyaWFibGUuXG4gICAgQHdhcm4gXCJZb3VyIGJyZWFrcG9pbnRzIGFyZW4ndCBhIG1hcCEgYHJlc3BvbmQtdG9gIGV4cGVjdHMgYSBtYXAuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgb2YgJEJSRUFLUE9JTlRTIHZhcmlhYmxlLlwiO1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJGNvbnRleHQpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1hcC1nZXQoJEJSRUFLUE9JTlRTLCAkY29udGV4dCksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmIG5vdCBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRjb250ZXh0KSB7XG4gICAgQHdhcm4gXCJgI3skY29udGV4dH1gIGlzbid0IGEgZGVmaW5lZCBicmVha3BvaW50ISBQbGVhc2UgYWRkIGl0IHVzaW5nIGAkYnJlYWtwb2ludHM6IGFkZC1icmVha3BvaW50KGAjeyRjb250ZXh0fWAsICR2YWx1ZSk7YFwiO1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiBcIllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGJyZWFrcG9pbnRzIHlldCEgTWFrZSBzb21lIGFscmVhZHkhIGBAaW5jbHVkZSBhZGQtYnJlYWtwb2ludCgkbmFtZSwgJGJrcHQpYFwiO1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQWRkIEJyZWFrcG9pbnQgdG8gQnJlYWtwb2ludHNcbi8vIFRPRE86IFJlbW92ZSBmdW5jdGlvbiBpbiBuZXh0IHJlbGVhc2Vcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGFkZC1icmVha3BvaW50KCRuYW1lLCAkYmtwdCwgJG92ZXJ3cml0ZTogZmFsc2UpIHtcbiAgJG91dHB1dDogKCRuYW1lOiAkYmtwdCk7XG5cbiAgQGlmIGxlbmd0aCgkYnJlYWtwb2ludHMpID09IDAge1xuICAgIEByZXR1cm4gJG91dHB1dDtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJG5hbWUpIGFuZCAkb3ZlcndyaXRlICE9IHRydWUge1xuICAgICAgQHdhcm4gXCJZb3UgYWxyZWFkeSBoYXZlIGEgYnJlYWtwb2ludCBuYW1lZCBgI3skbmFtZX1gLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgYnJlYWtwb2ludCBuYW1lLCBvciBwYXNzIGluIGAkb3ZlcndyaXRlOiB0cnVlYCB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGJyZWFrcG9pbnQuXCI7XG4gICAgICBAcmV0dXJuICRicmVha3BvaW50cztcbiAgICB9XG4gICAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJG5hbWUpIG9yICRvdmVyd3JpdGUgPT0gdHJ1ZSB7XG4gICAgICBAcmV0dXJuIG1hcC1tZXJnZSgkYnJlYWtwb2ludHMsICRvdXRwdXQpO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gYWRkLWJyZWFrcG9pbnQoJG5hbWUsICRia3B0LCAkb3ZlcndyaXRlOiBmYWxzZSkge1xuICAkb3V0cHV0OiAoJG5hbWU6ICRia3B0KTtcblxuICBAaWYgbGVuZ3RoKCRCUkVBS1BPSU5UUykgPT0gMCB7XG4gICAgJEJSRUFLUE9JTlRTOiAkb3V0cHV0ICFnbG9iYWw7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRuYW1lKSBhbmQgJG92ZXJ3cml0ZSAhPSB0cnVlIHtcbiAgICAgIEB3YXJuIFwiWW91IGFscmVhZHkgaGF2ZSBhIGJyZWFrcG9pbnQgbmFtZWQgYCN7JG5hbWV9YCwgcGxlYXNlIGNob29zZSBhbm90aGVyIGJyZWFrcG9pbnQgbmFtZSwgb3IgcGFzcyBpbiBgJG92ZXJ3cml0ZTogdHJ1ZWAgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBicmVha3BvaW50LlwiO1xuICAgICAgJEJSRUFLUE9JTlRTOiAkQlJFQUtQT0lOVFMgIWdsb2JhbDtcbiAgICB9XG4gICAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJG5hbWUpIG9yICRvdmVyd3JpdGUgPT0gdHJ1ZSB7XG4gICAgICAkQlJFQUtQT0lOVFM6IG1hcC1tZXJnZSgkQlJFQUtQT0lOVFMsICRvdXRwdXQpICFnbG9iYWw7XG4gICAgfVxuICB9XG59XG5cbkBmdW5jdGlvbiBnZXQtYnJlYWtwb2ludCgkbmFtZTogZmFsc2UpIHtcbiAgQGlmICRuYW1lID09IGZhbHNlIHtcbiAgICBAcmV0dXJuICRCUkVBS1BPSU5UUztcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRCUkVBS1BPSU5UUywgJG5hbWUpO1xuICB9XG59XG4iLCJAbWl4aW4gbGVnYWN5LXNldHRpbmdzLXdhcm5pbmcge1xuICAkbGVnYWN5VmFyczogKFxuICAgICdkZWZhdWx0LW1lZGlhJzogJ2RlZmF1bHQgbWVkaWEnLFxuICAgICdkZWZhdWx0LWZlYXR1cmUnOiAnZGVmYXVsdCBmZWF0dXJlJyxcbiAgICAnZm9yY2UtbWVkaWEtYWxsJzogJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJyxcbiAgICAndG8tZW1zJzogJ3RvIGVtcycsXG4gICAgJ3Jlc29sdXRpb25zJzogJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycsXG4gICAgJ25vLXF1ZXJpZXMnOiAnbm8gcXVlcmllcycsXG4gICAgJ25vLXF1ZXJ5LWZhbGxiYWNrcyc6ICdubyBxdWVyeSBmYWxsYmFja3MnLFxuICAgICdiYXNlLWZvbnQtc2l6ZSc6ICdiYXNlIGZvbnQgc2l6ZScsXG4gICAgJ2xlZ2FjeS1zeW50YXgnOiAnbGVnYWN5IHN5bnRheCdcbiAgKTtcblxuICBAZWFjaCAkbGVnYWN5LCAkbmV3IGluICRsZWdhY3lWYXJzIHtcbiAgICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC0nICsgJGxlZ2FjeSkge1xuICAgICAgQHdhcm4gXCJJbiBvcmRlciB0byBhdm9pZCB2YXJpYWJsZSBuYW1zcGFjZSBjb2xsaXNpb25zLCB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHdheSB0byBjaGFuZ2Ugc2V0dGluZ3MgZm9yIEJyZWFrcG9pbnQuIFBsZWFzZSBjaGFuZ2UgYWxsIGluc3RhbmNlcyBvZiBgJGJyZWFrcG9pbnQtI3skbGVnYWN5fToge3tzZXR0aW5nfX1gIHRvIGBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnI3skbmV3fScsIHt7c2V0dGluZ319KWAuIFZhcmlhYmxlIHNldHRpbmdzLCBhcyB3ZWxsIGFzIHRoaXMgd2FybmluZyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgIH1cbiAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gSGFuZCBjb3JyZWN0IGVhY2ggc2V0dGluZ1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZGVmYXVsdC1tZWRpYScpIGFuZCAkYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhICE9IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdkZWZhdWx0IG1lZGlhJywgJGJyZWFrcG9pbnQtZGVmYXVsdC1tZWRpYSk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlJykgYW5kICRicmVha3BvaW50LWRlZmF1bHQtZmVhdHVyZSAhPSBicmVha3BvaW50LWdldCgnZGVmYXVsdCBmZWF0dXJlJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdkZWZhdWx0IGZlYXR1cmUnLCAkYnJlYWtwb2ludC1kZWZhdWx0LWZlYXR1cmUpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWZvcmNlLW1lZGlhLWFsbCcpIGFuZCAkYnJlYWtwb2ludC1mb3JjZS1tZWRpYS1hbGwgIT0gYnJlYWtwb2ludC1nZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdmb3JjZSBhbGwgbWVkaWEgdHlwZScsICRicmVha3BvaW50LWZvcmNlLW1lZGlhLWFsbCk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtdG8tZW1zJykgYW5kICRicmVha3BvaW50LXRvLWVtcyAhPSBicmVha3BvaW50LWdldCgndG8gZW1zJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCd0byBlbXMnLCAkYnJlYWtwb2ludC10by1lbXMpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LXJlc29sdXRpb25zJykgYW5kICRicmVha3BvaW50LXJlc29sdXRpb25zICE9IGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycsICRicmVha3BvaW50LXJlc29sdXRpb25zKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1uby1xdWVyaWVzJykgYW5kICRicmVha3BvaW50LW5vLXF1ZXJpZXMgIT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJpZXMnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ25vIHF1ZXJpZXMnLCAkYnJlYWtwb2ludC1uby1xdWVyaWVzKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MnKSBhbmQgJGJyZWFrcG9pbnQtbm8tcXVlcnktZmFsbGJhY2tzICE9IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycsICRicmVha3BvaW50LW5vLXF1ZXJ5LWZhbGxiYWNrcyk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtYmFzZS1mb250LXNpemUnKSBhbmQgJGJyZWFrcG9pbnQtYmFzZS1mb250LXNpemUgIT0gYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdiYXNlIGZvbnQgc2l6ZScsICRicmVha3BvaW50LWJhc2UtZm9udC1zaXplKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1sZWdhY3ktc3ludGF4JykgYW5kICRicmVha3BvaW50LWxlZ2FjeS1zeW50YXggIT0gYnJlYWtwb2ludC1nZXQoJ2xlZ2FjeSBzeW50YXgnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2xlZ2FjeSBzeW50YXgnLCAkYnJlYWtwb2ludC1sZWdhY3ktc3ludGF4KTtcbiAgfVxufSIsIi8vIEBpbXBvcnQgXCJjb21wYXNzXCI7XG5AaW1wb3J0IFwiYnJlYWtwb2ludFwiO1xuXG4vLyBjb2xvcnMhXG4kZHJtZ3JlZW46IGhzbCgxNTksMTAwLDE5KTtcbiRkcm1saWdodGdyZWVuOiBoc2woMTYxLDI0LDUxKTtcbiRkYXJrZHJtOiBtaXgoYmxhY2ssICRkcm1ncmVlbiwgNTAlKTtcblxuJHByaW1hcnlncmVlbjogIzAwNjQzQztcbiRkYXJrYmx1ZTogIzBGODI5NztcbiRob3ZlcmJsdWU6ICMwNDY2YmQ7XG4kbGlnaHRibHVlOiAjNTFCN0NBO1xuJGRlZXByZWQ6ICM3MTFFMUM7XG4kbWFnZW50YTogIzk3MEY0QjtcbiRwYWxlOiAjZTllOWU5O1xuJG1lZGl1bWdyYXk6ICNiNmI2YjY7XG4kY2FsZW5kYXJibHVlOiAjMzk2QkEwO1xuXG4kc2RtYmx1ZTogcmdiKDIsIDQ4LCA4OSk7XG4kcGFsZXNkbWJsdWU6ICNhMWQxZmQ7XG5cbi8vIGFjY2Vzc2libGUgY29udHJhc3QgY29sb3IgZnVuY3Rpb25zXG4vLyBmcm9tIGh0dHA6Ly9tYWRlYnltaWtlLmNvbS5hdS93cml0aW5nL2FjY2Vzc2libGUtY29udHJhc3Qtd2l0aC1sZXNzLWFuZC1zYXNzL1xuQGZ1bmN0aW9uIGx1bWEoJGNvbG9yKXsgIFxuICAgIC8vIFRoYW5rcyB2b3hwZWxsaSBmb3IgYSB2ZXJ5IGNvbmNpc2UgaW1wbGVtZW50YXRpb24gb2YgbHVtaW5hbmNlIG1lYXN1cmUgaW4gc2Fzc1xuICAgIC8vIEFkYXB0ZWQgZnJvbTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdm94cGVsbGkvNjMwNDgxMlxuICAgICRyZ2JhOiByZWQoJGNvbG9yKSwgZ3JlZW4oJGNvbG9yKSwgYmx1ZSgkY29sb3IpO1xuICAgICRyZ2JhMjogKCk7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAzIHtcbiAgICAgICRyZ2I6IG50aCgkcmdiYSwgJGkpO1xuICAgICAgJHJnYjogJHJnYiAvIDI1NTtcbiAgICAgICRyZ2I6IGlmKCRyZ2IgPCAuMDM5MjgsICRyZ2IgLyAxMi45MiwgcG93KCgkcmdiICsgLjA1NSkgLyAxLjA1NSwgMi40KSk7XG4gICAgICAkcmdiYTI6IGFwcGVuZCgkcmdiYTIsICRyZ2IpO1xuICAgIH1cbiAgICBAcmV0dXJuICguMjEyNiAqIG50aCgkcmdiYTIsIDEpICsgLjcxNTIgKiBudGgoJHJnYmEyLCAyKSArIDAuMDcyMiAqIG50aCgkcmdiYTIsIDMpKSoxMDA7XG4gIH1cbiAgQGZ1bmN0aW9uIGNvbnRyYXN0X3JhdGlvKCRjb2xvcjEsICRjb2xvcjIpIHtcbiAgICAkbHVtYTE6IGx1bWEoJGNvbG9yMSkgKyA1O1xuICAgICRsdW1hMjogbHVtYSgkY29sb3IyKSArIDU7XG4gICAgJHJhdGlvOiAkbHVtYTEgLyAkbHVtYTI7XG4gICAgQGlmICRsdW1hMSA8ICRsdW1hMiB7XG4gICAgICAkcmF0aW86IDEgLyAkcmF0aW87XG4gICAgfSBcbiAgICBAcmV0dXJuICRyYXRpbztcbiAgfVxuIFxuICBAZnVuY3Rpb24gdGV4dC1jb250cmFzdCgkY29sb3IsICRiZ2NvbG9yOiAkY29sb3IpIHtcbiAgICAkdGhyZXNob2xkOiA0LjU7IC8vIDQuNSA9IFdDQUcgQUEsNz0gV0NBRyBBQUFcbiAgICAkbGlzdDogMjAgMzAgNDAgNTAgNjAgNzAgODAgOTAgMTAwO1xuICAgIEBlYWNoICRwZXJjZW50IGluICRsaXN0IHtcbiAgICAgICRsaWdodGVyOiBsaWdodGVuKCRiZ2NvbG9yLCAkcGVyY2VudCk7XG4gICAgICAkZGFya2VyOiBkYXJrZW4oJGJnY29sb3IsICRwZXJjZW50KTtcbiAgICAgICRkYXJrZXItcmF0aW86IGNvbnRyYXN0X3JhdGlvKCRjb2xvciwgJGRhcmtlcik7XG4gICAgICAkbGlnaHRlci1yYXRpbzogY29udHJhc3RfcmF0aW8oJGNvbG9yLCAkbGlnaHRlcik7XG4gICAgICBAaWYoJGxpZ2h0ZXItcmF0aW8gPiAkZGFya2VyLXJhdGlvKXtcbiAgICAgICAgQGlmICgkbGlnaHRlci1yYXRpbyA+ICR0aHJlc2hvbGQpe1xuICAgICAgICAgIEByZXR1cm4gJGxpZ2h0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZigkZGFya2VyLXJhdGlvID4gJGxpZ2h0ZXItcmF0aW8pe1xuICAgICAgICBAaWYgKCRkYXJrZXItcmF0aW8gPiAkdGhyZXNob2xkKXtcbiAgICAgICAgICBAcmV0dXJuICRkYXJrZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQHJldHVybiBpZihsaWdodG5lc3MoJGNvbG9yKSA8IDUxLCAjRkZGLCAjMDAwKVxuICB9XG5cblxuJG9mZi1jYW52YXMtd2lkdGg6IDUwJTtcblxuQG1peGluIGNsZWFyZml4IHtcbiAgJjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG5AbWl4aW4gYm94LXNoYWRvdygkdG9wLCAkbGVmdCwgJGJsdXIsICRjb2xvciwgJGluc2V0OiBmYWxzZSkge1xuICBAaWYgJGluc2V0IHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgJHRvcCAkbGVmdCAkYmx1ciAkY29sb3I7XG4gICAgLW1vei1ib3gtc2hhZG93Omluc2V0ICR0b3AgJGxlZnQgJGJsdXIgJGNvbG9yO1xuICAgIGJveC1zaGFkb3c6aW5zZXQgJHRvcCAkbGVmdCAkYmx1ciAkY29sb3I7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogJHRvcCAkbGVmdCAkYmx1ciAkY29sb3I7XG4gICAgLW1vei1ib3gtc2hhZG93OiAkdG9wICRsZWZ0ICRibHVyICRjb2xvcjtcbiAgICBib3gtc2hhZG93OiAkdG9wICRsZWZ0ICRibHVyICRjb2xvcjtcbiAgfVxufVxuXG4vLyBicmVha3BvaW50IHN0dWZmXG4kYmlnOiA0My43NWVtO1xuJGJpZ2dlcjogNTYuMjVlbTtcblxuXG4vL1Jlc29sdXRpb24gbWVkaWEgcXVlcmllcyBhcmUgYSBwYWluLiBCcmVha3BvaW50IG1ha2VzIHRoZW0gZWFzeS4gV2UgdXNlIHRoZSBzdGFuZGFyZCBEUFBYIHVuaXRzLlxuJGhpZHBpOiBtaW4tcmVzb2x1dGlvbiAxLjVkcHB4O1xuJGNyb3NzLXJlc286IG1heC1yZXNvbHV0aW9uIDE0M2RwaTtcblxuLy8gLnRvbGxmcmVlIHtcbi8vICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkaGlkcGkpIHtcbi8vICAgICBiYWNrZ3JvdW5kOiBwdXJwbGU7XG4vLyAgICAgY29udGVudDogJ0RldmljZSBQaXhlbCBSYXRpbyBvZiBhdCBsZWFzdCAxLjUnO1xuLy8gICB9XG5cbi8vICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkY3Jvc3MtcmVzbykge1xuLy8gICAgIGJhY2tncm91bmQ6IHllbGxvdztcbi8vICAgICBjb250ZW50OiAnQ3Jvc3MgQnJvd3NlciBSZXNvbHV0aW9uIFF1ZXJ5Jztcbi8vICAgfVxuLy8gfVxuXG5cbi8vIGZpeCBkZXByZWNhdGlvbiBlcnJvcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lcmljYW0vc3VzeS9pc3N1ZXMvNDI1XG5AbWl4aW4gYm94LXNpemluZygkdmFsdWUpIHtcbiAgICAtbW96LWJveC1zaXppbmc6ICR2YWx1ZTtcbiAgICAgICAgIGJveC1zaXppbmc6ICR2YWx1ZTtcbn1cblxuXG4vLyBidXR0b24gY2xhc3Nlc1xuXG5idXR0b24ge1xuICBwYWRkaW5nOiAxMHB4O1xuICBtYXJnaW46IDFlbSAwO1xuXG4gICYuZ28ge1xuICAgIGJhY2tncm91bmQ6ICRkcm1ncmVlbjtcbiAgICBjb2xvcjogJHBhbGU7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdygycHgsIDJweCwgMCwgJGRhcmtkcm0pO1xuICB9XG5cbiAgJi5mb3Jtc3VibWl0IHtcbiAgICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgICBjb2xvcjogJHBhbGU7XG4gICAgYmFja2dyb3VuZDogJGNhbGVuZGFyYmx1ZTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KDJweCwgMnB4LCAwLCBkYXJrZW4oJGNhbGVuZGFyYmx1ZSwgMjUlKSk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY2FsZW5kYXJibHVlLCAxNSUpO1xuICAgIH1cbiAgfVxufVxuXG4ubGF1cmVubm90ZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogb3JhbmdlcmVkICFpbXBvcnRhbnQ7XG59XG4iLCJcbiRoZWx2ZXRpY2EgICAgIDogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmcmFua2xpbiAgICAgIDogJ0ZyYW5rbGluIEdvdGhpYyBNZWRpdW0nLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRtb250c2VycmF0ICAgIDogJ01vbnRzZXJyYXQnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG5cbi8vIFNldHRpbmdzXG5cbiRib2R5LWZvbnQgICAgICAgICAgOiAkaGVsdmV0aWNhO1xuJGJvZHktZm9udC13ZWlnaHQgICA6IDMwMDtcbiRib2R5LWNvbG9yICAgICAgICAgOiAjNjY2O1xuJGhlYWRlci1mb250ICAgICAgICA6ICRtb250c2VycmF0O1xuJGhlYWRlci1mb250LXdlaWdodCA6IDcwMDtcbiRoZWFkZXItY29sb3IgICAgICAgOiAjMTExO1xuXG5cbmJvZHkge1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiAkYm9keS1mb250LXdlaWdodDtcbn1cblxuYm9keSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gIGZvbnQtc2l6ZS1hZGp1c3Q6IDAuNTtcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG59XG5cbltyb2xlPVwibWFpblwiXSB7XG4gIGZvbnQtZmFtaWx5OiAkYm9keS1mb250O1xuICBmb250LXNpemU6IDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMzc1O1xuICB9XG59XG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI1O1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJpZykge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICB9XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnZ2VyKXtcbiAgICBmb250LXNpemU6IDIuMjVlbTtcbiAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgfVxufVxuXG5oMiB7XG4gIGZvbnQtc2l6ZTogMS4zNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMTM2MzYzNjQ7XG4gIC8vIGZvbnQtc2l6ZTogMS42MjVlbTtcbiAgLy8gbGluZS1oZWlnaHQ6IDEuMTUzODQ2MTU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgfVxuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJpZ2dlcikge1xuICAgIGZvbnQtc2l6ZTogMS43NWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICB9XG59XG5cbmgzIHtcbiAgZm9udC1zaXplOiAxLjM3NWVtO1xuICBsaW5lLWhlaWdodDogMS4xMzYzNjM2NDtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRiaWcpIHtcbiAgICBmb250LXNpemU6IDEuMTI1ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTExMTExMTtcbiAgfVxuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJpZ2dlcikge1xuICBmb250LXNpemU6IDEuMzc1ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjEzNjM2MzY0O1xuICB9XG59XG5cbmg0IHtcbiAgZm9udC1zaXplOiAxLjEyNWVtO1xuICBsaW5lLWhlaWdodDogMS4xMTExMTExMTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRiaWcpIHtcbiAgICBsaW5lLWhlaWdodDogMS4yMjIyMjIyMjtcbiAgfVxufVxuXG5cbmJsb2NrcXVvdGUge1xuICBmb250LXNpemU6IDEuMjVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICBsaW5lLWhlaWdodDogMS40NTgzMzMzMztcbiAgfVxufVxuXG5wICsgcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cblxuXG5bcm9sZT1cIm1haW5cIl0ge1xuICBoMiB7XG4gICAgJi5sZWZ0LWhlYWRpbmcge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICAmLmNlbnRlci1oZWFkaW5nIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmLnJpZ2h0LWhlYWRpbmcge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG59XG5cbiIsIi8vIFN1c3lcbi8vID09PT1cblxuQGltcG9ydCAnc3VzeS9sYW5ndWFnZS9zdXN5JztcbiIsIi8vIFN1c3kgTmV4dCBTeW50YXhcbi8vID09PT09PT09PT09PT09PT1cblxuJHN1c3ktdmVyc2lvbjogMi4xO1xuXG5AaW1wb3J0IFwiLi4vc3VcIjtcbkBpbXBvcnQgXCIuLi9vdXRwdXQvZmxvYXRcIjtcblxuQGltcG9ydCBcInN1c3kvc2V0dGluZ3NcIjtcbkBpbXBvcnQgXCJzdXN5L3ZhbGlkYXRpb25cIjtcbkBpbXBvcnQgXCJzdXN5L2dyaWRzXCI7XG5AaW1wb3J0IFwic3VzeS9ib3gtc2l6aW5nXCI7XG5AaW1wb3J0IFwic3VzeS9jb250ZXh0XCI7XG5AaW1wb3J0IFwic3VzeS9iYWNrZ3JvdW5kXCI7XG5AaW1wb3J0IFwic3VzeS9jb250YWluZXJcIjtcbkBpbXBvcnQgXCJzdXN5L3NwYW5cIjtcbkBpbXBvcnQgXCJzdXN5L2d1dHRlcnNcIjtcbkBpbXBvcnQgXCJzdXN5L2lzb2xhdGVcIjtcbkBpbXBvcnQgXCJzdXN5L2dhbGxlcnlcIjtcbkBpbXBvcnQgXCJzdXN5L3Jvd3NcIjtcbkBpbXBvcnQgXCJzdXN5L21hcmdpbnNcIjtcbkBpbXBvcnQgXCJzdXN5L3BhZGRpbmdcIjtcbkBpbXBvcnQgXCJzdXN5L2JsZWVkXCI7XG5AaW1wb3J0IFwic3VzeS9icmVha3BvaW50LXBsdWdpblwiO1xuIiwiLy8gU3Vcbi8vID09XG5cbkBpbXBvcnQgXCJzdS91dGlsaXRpZXNcIjtcbkBpbXBvcnQgXCJzdS9zZXR0aW5nc1wiO1xuQGltcG9ydCBcInN1L3ZhbGlkYXRpb25cIjtcbkBpbXBvcnQgXCJzdS9ncmlkXCI7XG4iLCIvLyBNYXAgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gVHJ1bmNhdGUgTGlzdFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gLSBSZXR1cm4gYSBsaXN0LCB0cnVuY2F0ZWQgdG8gYSBnaXZlbiBsZW5ndGhcbkBmdW5jdGlvbiBfc3VzeS10cnVuY2F0ZS1saXN0KFxuICAkbGlzdCxcbiAgJGxlbmd0aFxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkbGlzdCkge1xuICAgICRfcmV0dXJuOiBpZigkaSA8PSAkbGVuZ3RoLCBhcHBlbmQoJF9yZXR1cm4sIG50aCgkbGlzdCwgJGkpKSwgJF9yZXR1cm4pO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBEZWVwIEdldFxuLy8gLS0tLS0tLS1cbi8vIC0gUmV0dXJuIGEgdmFsdWUgZGVlcCBpbiBuZXN0ZWQgbWFwc1xuQGZ1bmN0aW9uIF9zdXN5LWRlZXAtZ2V0KFxuICAkbWFwLFxuICAka2V5cy4uLlxuKSB7XG4gICRfcmV0dXJuOiAkbWFwO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiB0eXBlLW9mKCRfcmV0dXJuKSA9PSBtYXAge1xuICAgICAgJF9yZXR1cm46IG1hcC1nZXQoJF9yZXR1cm4sICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gRGVlcCBTZXRcbi8vIC0tLS0tLS0tXG4vLyAtIFNldCBhIHZhbHVlIGRlZXAgaW4gbmVzdGVkIG1hcHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLXNldChcbiAgJG1hcCxcbiAgJGtleXMtdmFsdWUuLi5cbikge1xuICAkX3ZhbHVlOiBudGgoJGtleXMtdmFsdWUsIC0xKTtcbiAgJF9rZXlzOiBfc3VzeS10cnVuY2F0ZS1saXN0KCRrZXlzLXZhbHVlLCBsZW5ndGgoJGtleXMtdmFsdWUpIC0gMSk7XG4gICRfbGVuZ3RoOiBsZW5ndGgoJF9rZXlzKTtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJF9sZW5ndGgge1xuICAgICRfbjogMCAtICRpO1xuICAgICRfbGV2ZWw6IF9zdXN5LXRydW5jYXRlLWxpc3QoJF9rZXlzLCAkX2xlbmd0aCArICRfbik7XG4gICAgJF9sZXZlbDogX3N1c3ktZGVlcC1nZXQoJG1hcCwgJF9sZXZlbC4uLik7XG4gICAgJF9tZXJnZTogbnRoKCRfa2V5cywgJF9uKTtcbiAgICAkX21lcmdlOiAoJF9tZXJnZTogJF92YWx1ZSk7XG4gICAgJF9yZXR1cm46IGlmKCRfbGV2ZWwsIG1hcC1tZXJnZSgkX2xldmVsLCAkX21lcmdlKSwgJF9tZXJnZSk7XG4gICAgJF92YWx1ZTogJF9yZXR1cm47XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIERlZXAgTWVyZ2Vcbi8vIC0tLS0tLS0tLS1cbi8vIFJldHVybiAyIG9iamVjdHMgb2YgYW55IGRlcHRoLCBtZXJnZWRcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLW1lcmdlKFxuICAkbWFwMSxcbiAgJG1hcDJcbikge1xuXG4gIEBpZiB0eXBlLW9mKCRtYXAxKSAhPSBtYXAgb3IgdHlwZS1vZigkbWFwMikgIT0gbWFwIHtcbiAgICAkbWFwMTogJG1hcDI7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkbWFwMiB7XG4gICAgICAkX25ldzogKCRrZXk6IF9zdXN5X2RlZXAtbWVyZ2UobWFwLWdldCgkbWFwMSwgJGtleSksICR2YWx1ZSkpO1xuICAgICAgJG1hcDE6IG1hcC1tZXJnZSgkbWFwMSwgJF9uZXcpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG1hcDE7XG59XG5cblxuLy8gRGVlcCBIYXMtS2V5XG4vLyAtLS0tLS0tLS0tLS1cbi8vIC0gUmV0dXJuIHRydWUgaWYgYSBkZWVwIGtleSBleGlzdHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLWhhcy1rZXkoXG4gICRtYXAsXG4gICRrZXlzLi4uXG4pIHtcbiAgJF9yZXR1cm46IG51bGw7XG4gICRfc3RvcDogZmFsc2U7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmIG5vdCgkX3N0b3ApIHtcbiAgICAgICRfcmV0dXJuOiBtYXAtaGFzLWtleSgkbWFwLCAka2V5KTtcbiAgICB9XG5cbiAgICBAaWYgJF9yZXR1cm4ge1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfc3RvcDogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gU2V0dGluZ3Ncbi8vID09PT09PT09XG5cbi8vIFZlcnNpb25cbi8vIC0tLS0tLS1cbiRzdS12ZXJzaW9uOiAxLjE7XG5cblxuLy8gRGVmYXVsdCBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogVGhlIGJhc2ljIHNldHRpbmdzXG4kc3VzeS1kZWZhdWx0czogKFxuICBjb2x1bW5zOiA0LFxuICBndXR0ZXJzOiAuMjUsXG4pO1xuXG5cbi8vIFVzZXIgU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gRGVmaW5lIHRoZSAkc3VzeSB2YXJpYWJsZSB3aXRoIGEgbWFwIG9mIHlvdXIgb3duIHNldHRpbmdzLlxuLy8gLSBTZXQgRUlUSEVSICRjb2x1bW4td2lkdGggT1IgJGNvbnRhaW5lclxuLy8gLSBVc2UgJGNvbHVtbi13aWR0aCBmb3Igc3RhdGljIGxheW91dHNcbiRzdXN5OiAoKSAhZGVmYXVsdDtcblxuXG4vLyBTdXN5IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBQUklWQVRFOiBBZGQgZGVmYXVsdHMgdG8gU3VzeVxuQG1peGluIHN1c3ktZGVmYXVsdHMoXG4gICRkZWZhdWx0c1xuKSB7XG4gICRzdXN5LWRlZmF1bHRzOiBtYXAtbWVyZ2UoJHN1c3ktZGVmYXVsdHMsICRkZWZhdWx0cykgIWdsb2JhbDtcbn1cblxuXG4vLyBTdXN5IFNldFxuLy8gLS0tLS0tLS1cbi8vIENoYW5nZSBvbmUgc2V0dGluZ1xuLy8gLSAka2V5ICAgOiBzZXR0aW5nIG5hbWVcbi8vIC0gJHZhbHVlIDogc2V0dGluZyB2YWx1ZVxuQG1peGluIHN1c3ktc2V0KFxuICAka2V5LXZhbHVlLi4uXG4pIHtcbiAgJHN1c3k6IF9zdXN5LWRlZXAtc2V0KCRzdXN5LCAka2V5LXZhbHVlLi4uKSAhZ2xvYmFsO1xufVxuXG5cbi8vIFN1c3kgR2V0XG4vLyAtLS0tLS0tLVxuLy8gUmV0dXJuIG9uZSBzZXR0aW5nIGZyb20gYSBncmlkXG4vLyAtICRrZXkgICAgIDogPGtleXdvcmQ+XG4vLyAtICRsYXlvdXQgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIHN1c3ktZ2V0KFxuICAka2V5LFxuICAkbGF5b3V0OiBtYXAtbWVyZ2UoJHN1c3ktZGVmYXVsdHMsICRzdXN5KVxuKSB7XG4gICRsYXlvdXQ6IHBhcnNlLWdyaWQoJGxheW91dCk7XG4gICRfb3B0aW9uczogJGxheW91dCAkc3VzeSAkc3VzeS1kZWZhdWx0cztcbiAgJF9icmVhazogZmFsc2U7XG4gICRfcmV0dXJuOiBudWxsO1xuXG4gIEBlYWNoICRvcHQgaW4gJF9vcHRpb25zIHtcbiAgICBAaWYgdHlwZS1vZigkb3B0KSA9PSBtYXAgYW5kIG5vdCgkX2JyZWFrKSB7XG4gICAgICAkX2tleXNldDogX3N1c3ktZGVlcC1oYXMta2V5KCRvcHQsICRrZXkuLi4pO1xuICAgICAgQGlmICRfa2V5c2V0IHtcbiAgICAgICAgJF9yZXR1cm46IF9zdXN5LWRlZXAtZ2V0KCRvcHQsICRrZXkuLi4pO1xuICAgICAgICAkX2JyZWFrOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG4iLCIvLyBNYXRoIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PVxuXG5cbi8vIFZhbGlkIENvbHVtbnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIHRoYXQgYSBjb2x1bW4gc2V0dGluZyBpcyB2YWxpZC5cbkBmdW5jdGlvbiB2YWxpZC1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJHNpbGVudDogZmFsc2Vcbikge1xuICAkdHlwZTogdHlwZS1vZigkY29sdW1ucyk7XG4gICRyZXR1cm46IG51bGw7XG5cbiAgQGlmICR0eXBlID09IG51bWJlciBhbmQgdW5pdGxlc3MoJGNvbHVtbnMpIHtcbiAgICAkcmV0dXJuOiAkY29sdW1ucztcbiAgfSBAZWxzZSBpZiAkdHlwZSA9PSBsaXN0IHtcbiAgICAkZmFpbDogbnVsbDtcbiAgICBAZWFjaCAkY29sIGluICRjb2x1bW5zIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRjb2wpID09IG51bWJlciB7XG4gICAgICAgICRmYWlsOiAkZmFpbCBvciBpZih1bml0bGVzcygkY29sKSwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJGZhaWw6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgICRyZXR1cm46IGlmKCRmYWlsLCAkcmV0dXJuLCAkY29sdW1ucyk7XG4gIH1cblxuICBAaWYgJHJldHVybiAhPSAkY29sdW1ucyBhbmQgbm90KCRzaWxlbnQpIHtcbiAgICAkcmV0dXJuOiBudWxsO1xuICAgICR3YXJuOiAnJGNvbHVtbnMgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlciBvciBsaXN0IG9mIHVuaXRsZXNzIG51bWJlcnMuJztcbiAgICBAd2FybiAkd2FybiArICcgQ3VycmVudCB2YWx1ZSBbI3skdHlwZX1dOiAjeyRjb2x1bW5zfSc7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cblxuLy8gVmFsaWQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgdGhhdCBhIGd1dHRlciBzZXR0aW5nIGlzIHZhbGlkLlxuQGZ1bmN0aW9uIHZhbGlkLWd1dHRlcnMoXG4gICRndXR0ZXJzLFxuICAkc2lsZW50OiBmYWxzZVxuKSB7XG4gICR0eXBlOiB0eXBlLW9mKCRndXR0ZXJzKTtcbiAgJHJldHVybjogbnVsbDtcblxuICBAaWYgJHR5cGUgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkZ3V0dGVycykge1xuICAgICRyZXR1cm46ICRndXR0ZXJzO1xuICB9IEBlbHNlIGlmIG5vdCgkc2lsZW50KSB7XG4gICAgJHdhcm46ICckZ3V0dGVycyBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyLic7XG4gICAgQHdhcm4gJHdhcm4gKyAnIEN1cnJlbnQgdmFsdWUgWyN7JHR5cGV9XTogI3skZ3V0dGVyc30nO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuIiwiLy8gQ29sdW1uIG1hdGhcbi8vID09PT09PT09PT09XG5cblxuLy8gSXMgU3ltbWV0cmljYWxcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgYSBncmlkIGlzIHN5bW1ldHJpY2FsLlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuQGZ1bmN0aW9uIGlzLXN5bW1ldHJpY2FsKFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gIEByZXR1cm4gaWYodHlwZS1vZigkY29sdW1ucykgPT0gbnVtYmVyLCAkY29sdW1ucywgbnVsbCk7XG59XG5cblxuLy8gU3VzeSBDb3VudFxuLy8gLS0tLS0tLS0tLVxuLy8gRmluZCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBnaXZlbiBsYXlvdXRcbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBzdXN5LWNvdW50KFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gIEByZXR1cm4gaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpIG9yIGxlbmd0aCgkY29sdW1ucyk7XG59XG5cblxuLy8gU3VzeSBTdW1cbi8vIC0tLS0tLS0tXG4vLyBGaW5kIHRoZSB0b3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgbGF5b3V0XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG4vLyAtIFskZ3V0dGVyc10gICA6IDxyYXRpbz5cbi8vIC0gWyRzcHJlYWRdICAgIDogZmFsc2UvbmFycm93IHwgd2lkZSB8IHdpZGVyXG5AZnVuY3Rpb24gc3VzeS1zdW0oXG4gICRjb2x1bW5zICA6IHN1c3ktZ2V0KGNvbHVtbnMpLFxuICAkZ3V0dGVycyAgOiBzdXN5LWdldChndXR0ZXJzKSxcbiAgJHNwcmVhZCAgIDogZmFsc2Vcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRndXR0ZXJzOiB2YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcblxuICAkc3ByZWFkOiBpZigkc3ByZWFkID09IHdpZGUsIDAsIGlmKCRzcHJlYWQgPT0gd2lkZXIsIDEsIC0xKSk7XG4gICRndXR0ZXItc3VtOiAoc3VzeS1jb3VudCgkY29sdW1ucykgKyAkc3ByZWFkKSAqICRndXR0ZXJzO1xuICAkY29sdW1uLXN1bTogaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpO1xuXG4gIEBpZiBub3QoJGNvbHVtbi1zdW0pIHtcbiAgICBAZWFjaCAkY29sdW1uIGluICRjb2x1bW5zIHtcbiAgICAgICRjb2x1bW4tc3VtOiAoJGNvbHVtbi1zdW0gb3IgMCkgKyAkY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbi1zdW0gKyAkZ3V0dGVyLXN1bTtcbn1cblxuXG4vLyBTdXN5IFNsaWNlXG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBzdWJzZXQgb2YgY29sdW1ucyBhdCBhIGdpdmVuIGxvY2F0aW9uLlxuLy8gLSAkc3BhbiAgICAgICAgOiA8bnVtYmVyPlxuLy8gLSAkbG9jYXRpb24gICAgOiA8bnVtYmVyPlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuQGZ1bmN0aW9uIHN1c3ktc2xpY2UoXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zOiBzdXN5LWdldChjb2x1bW5zKVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJHN1Yi1jb2x1bW5zOiAkc3BhbjtcblxuICBAaWYgbm90KGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKSkge1xuICAgICRsb2NhdGlvbjogJGxvY2F0aW9uIG9yIDE7XG4gICAgJHN1Yi1jb2x1bW5zOiAoKTtcbiAgICBAZm9yICRpIGZyb20gJGxvY2F0aW9uIHRvICgkbG9jYXRpb24gKyAkc3Bhbikge1xuICAgICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRpKSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkc3ViLWNvbHVtbnM7XG59XG5cblxuLy8gU3VzeVxuLy8gLS0tLVxuLy8gRmluZCB0aGUgc3VtIG9mIGEgY29sdW1uLXNwYW4uXG4vLyAtICRzcGFuICAgICAgICA6IDxudW1iZXI+XG4vLyAtICRsb2NhdGlvbiAgICA6IDxudW1iZXI+XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG4vLyAtIFskZ3V0dGVyc10gICA6IDxyYXRpbz5cbi8vIC0gWyRzcHJlYWRdICAgIDogZmFsc2UvbmFycm93IHwgd2lkZSB8IHdpZGVyXG5AZnVuY3Rpb24gc3VzeShcbiAgJHNwYW4sXG4gICRsb2NhdGlvbiAgICAgOiBmYWxzZSxcbiAgJGNvbHVtbnMgICAgICA6IHN1c3ktZ2V0KGNvbHVtbnMpLFxuICAkZ3V0dGVycyAgICAgIDogc3VzeS1nZXQoZ3V0dGVycyksXG4gICRzcHJlYWQgICAgICAgOiBmYWxzZVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAkc3Bhbjogc3VzeS1zbGljZSgkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG5cbiAgQHJldHVybiBzdXN5LXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQpO1xufVxuIiwiLy8gRmxvYXQgQVBJXG4vLyA9PT09PT09PT1cblxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5AaW1wb3J0IFwiZmxvYXQvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwiZmxvYXQvc3BhblwiO1xuQGltcG9ydCBcImZsb2F0L2VuZFwiO1xuQGltcG9ydCBcImZsb2F0L2lzb2xhdGVcIjtcbiIsIi8vIFNoYXJlZCBBUElcbi8vID09PT09PT09PT1cblxuQGltcG9ydCBcInN1cHBvcnRcIjtcblxuQGltcG9ydCBcInNoYXJlZC9pbnNwZWN0XCI7XG5AaW1wb3J0IFwic2hhcmVkL291dHB1dFwiO1xuQGltcG9ydCBcInNoYXJlZC9kaXJlY3Rpb25cIjtcbkBpbXBvcnQgXCJzaGFyZWQvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInNoYXJlZC9jb250YWluZXJcIjtcbkBpbXBvcnQgXCJzaGFyZWQvbWFyZ2luc1wiO1xuQGltcG9ydCBcInNoYXJlZC9wYWRkaW5nXCI7XG5cblxuXG4iLCIvLyBTdXN5IEJyb3dzZXIgU3VwcG9ydFxuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuQGltcG9ydCBcInN1cHBvcnQvc3VwcG9ydFwiO1xuQGltcG9ydCBcInN1cHBvcnQvcHJlZml4XCI7XG5AaW1wb3J0IFwic3VwcG9ydC9iYWNrZ3JvdW5kXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9ib3gtc2l6aW5nXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9yZW1cIjtcbkBpbXBvcnQgXCJzdXBwb3J0L2NsZWFyZml4XCI7XG4iLCIvLyBCcm93c2VyIFN1cHBvcnRcbi8vID09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IFN1cHBvcnQgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIHVzZS1jdXN0b206IChcbiAgICBjbGVhcmZpeDogZmFsc2UsXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kLW9wdGlvbnM6IGZhbHNlLFxuICAgIGJyZWFrcG9pbnQ6IHRydWUsXG4gICAgYm94LXNpemluZzogdHJ1ZSxcbiAgICByZW06IHRydWUsXG4gICksXG4pKTtcblxuXG4vLyBTdXN5IFN1cHBvcnQgW21peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlbmQgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8gdGhlIHByb3BlciBzdXBwb3J0IG1vZHVsZXMuXG4vLyAtICRwcm9wICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICA6IDxjc3MgdmFsdWU+XG5AbWl4aW4gc3VzeS1zdXBwb3J0KFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gIC8vIEJhY2tncm91bmQgU3VwcG9ydFxuICBAaWYgJHByb3AgPT0gYmFja2dyb3VuZC1pbWFnZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLWltYWdlKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtc2l6ZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLXNpemUoJHZhbCk7XG4gIH0gQGVsc2UgaWYgJHByb3AgPT0gYmFja2dyb3VuZC1vcmlnaW4ge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1vcmlnaW4oJHZhbCk7XG4gIH0gQGVsc2UgaWYgJHByb3AgPT0gYmFja2dyb3VuZC1jbGlwIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtY2xpcCgkdmFsKTtcbiAgfVxuXG4gIC8vIEJveC1TaXppbmcgU3VwcG9ydFxuICBAZWxzZSBpZiAkcHJvcCA9PSBib3gtc2l6aW5nIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJveC1zaXppbmcoJHZhbCk7XG4gIH1cblxuICAvLyBSZW0gU3VwcG9ydFxuICBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1yZW0oJHByb3AsICR2YWwpO1xuICB9XG59XG5cblxuLy8gU3VzeSBTdXBwb3J0IFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3Igc3VwcG9ydCBvZiBhIGZlYXR1cmUuXG4vLyAtICRmZWF0dXJlICAgICAgIDogPHN0cmluZz5cbi8vICAgICAgICAgICAgICAgICAgICAtIGUuZyBcInJlbVwiIG9yIFwiYm94LXNpemluZ1wiXG4vLyAtICRyZXF1aXJlbWVudHMgIDogPG1hcD5cbi8vICAgICAgICAgICAgICAgICAgICAtIGUuZyAodmFyaWFibGU6IHJlbS13aXRoLXB4LWZhbGxiYWNrLCBtaXhpbjogcmVtKVxuLy8gLSAkd2FybiAgICAgICAgICA6IDxib29sPlxuQGZ1bmN0aW9uIHN1c3ktc3VwcG9ydChcbiAgJGZlYXR1cmUsXG4gICRyZXF1aXJlbWVudHM6ICgpLFxuICAkd2FybjogdHJ1ZVxuKSB7XG4gICRfc3VwcG9ydDogc3VzeS1nZXQodXNlLWN1c3RvbSAkZmVhdHVyZSk7XG5cbiAgQGlmICRfc3VwcG9ydCB7XG4gICAgJF9mYWlsOiBmYWxzZTtcblxuICAgIEBlYWNoICRfdHlwZSwgJF9yZXEgaW4gJHJlcXVpcmVtZW50cyB7XG4gICAgICBAZWFjaCAkX2kgaW4gJF9yZXEge1xuXG4gICAgICAgICRfcGFzcyA6IG51bGw7XG5cbiAgICAgICAgLy8gc2FzcyAzLjUgb3IgZ3JlYXRlclxuICAgICAgICBAaWYgZnVuY3Rpb24tZXhpc3RzKCdnZXQtZnVuY3Rpb24nKSB7XG4gICAgICAgICAgJF9wYXNzOiBjYWxsKGdldC1mdW5jdGlvbih1bnF1b3RlKFwiI3skX3R5cGV9LWV4aXN0c1wiKSksICRfaSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2FzcyAzLjQgb3IgbGVzc1xuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgJF9wYXNzOiBjYWxsKHVucXVvdGUoXCIjeyRfdHlwZX0tZXhpc3RzXCIpLCAkX2kpO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmIG5vdCgkX3Bhc3MpIHtcbiAgICAgICAgICAkX2ZhaWw6IHRydWU7XG4gICAgICAgICAgQGlmICR3YXJuIHtcbiAgICAgICAgICAgIEB3YXJuIFwiWW91IHJlcXVlc3RlZCBjdXN0b20gc3VwcG9ydCBvZiAjeyRmZWF0dXJlfSwgYnV0IHRoZSAjeyRfaX0gI3skX3R5cGV9IGlzIG5vdCBhdmFpbGFibGUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJF9zdXBwb3J0OiBpZigkX2ZhaWwsIGZhbHNlLCAkX3N1cHBvcnQpO1xuICB9XG5cbiAgQHJldHVybiAkX3N1cHBvcnQ7XG59XG4iLCIvLyBTdXN5IFByZWZpeFxuLy8gPT09PT09PT09PT1cblxuLy8gUHJlZml4XG4vLyAtLS0tLS1cbi8vIE91dHB1dCBzaW1wbGUgcHJlZml4ZWQgcHJvcGVydGllcy5cbi8vIC0gJHByb3AgICAgICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICAgICAgOiA8Y3NzIHZhbHVlPlxuLy8gLSBbJHByZWZpeF0gIDogPGJyb3dzZXIgcHJlZml4IGxpc3Q+XG5AbWl4aW4gc3VzeS1wcmVmaXgoXG4gICRwcm9wLFxuICAkdmFsLFxuICAkcHJlZml4OiBvZmZpY2lhbFxuKSB7XG4gIEBlYWNoICRmaXggaW4gJHByZWZpeCB7XG4gICAgJGZpeDogaWYoJGZpeCA9PSBvZmZpY2lhbCBvciBub3QoJGZpeCksICRwcm9wLCAnLSN7JGZpeH0tI3skcHJvcH0nKTtcbiAgICBAaW5jbHVkZSBzdXN5LXJlbSgkZml4LCAkdmFsKTtcbiAgfVxufVxuIiwiLy8gQmFja2dyb3VuZCBQcm9wZXJ0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIEltYWdlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLWltYWdlPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1pbWFnZShcbiAgJGltYWdlXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLWltYWdlLCAobWl4aW46IGJhY2tncm91bmQtaW1hZ2UpLCAkd2FybjogZmFsc2UpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWltYWdlKCRpbWFnZS4uLik7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6ICRpbWFnZTtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgU2l6ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1zaXplPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1zaXplKFxuICAkc2l6ZVxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1vcHRpb25zLCAobWl4aW46IGJhY2tncm91bmQtc2l6ZSkpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXNpemUoJHNpemUpO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICRzaXplO1xuICB9XG59XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBPcmlnaW5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLW9yaWdpbj5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtb3JpZ2luKFxuICAkb3JpZ2luXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLW9wdGlvbnMsIChtaXhpbjogYmFja2dyb3VuZC1vcmlnaW4pKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1vcmlnaW4oJG9yaWdpbik7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiAkb3JpZ2luO1xuICB9XG59XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBDbGlwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtY2xpcD5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtY2xpcChcbiAgJGNsaXBcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtb3B0aW9ucywgKG1peGluOiBiYWNrZ3JvdW5kLWNsaXApKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1jbGlwKCRjbGlwKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1jbGlwOiAkY2xpcDtcbiAgfVxufVxuIiwiLy8gQm94IFNpemluZ1xuLy8gPT09PT09PT09PVxuXG4vLyBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJG1vZGVsOiA8Ym94LXNpemluZz5cbkBtaXhpbiBzdXN5LWJveC1zaXppbmcoXG4gICRtb2RlbDogY29udGVudC1ib3hcbikge1xuICBAaWYgJG1vZGVsIHtcbiAgICBAaWYgc3VzeS1zdXBwb3J0KGJveC1zaXppbmcsIChtaXhpbjogYm94LXNpemluZyksICR3YXJuOiBmYWxzZSkge1xuICAgICAgQGluY2x1ZGUgYm94LXNpemluZygkbW9kZWwpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHByZWZpeDogKG1veiwgd2Via2l0LCBvZmZpY2lhbCk7XG4gICAgICBAaW5jbHVkZSBzdXN5LXByZWZpeChib3gtc2l6aW5nLCAkbW9kZWwsICRwcmVmaXgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gcmVtIFN1cHBvcnRcbi8vID09PT09PT09PT09XG5cbi8vIHJlbVxuLy8gLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3Igb3V0cHV0IGRpcmVjdGx5LlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktcmVtKFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gICRfcmVxczogKFxuICAgIHZhcmlhYmxlOiByaHl0aG0tdW5pdCByZW0td2l0aC1weC1mYWxsYmFjayxcbiAgICBtaXhpbjogcmVtLFxuICApO1xuICBAaWYgc3VzeS1zdXBwb3J0KHJlbSwgJF9yZXFzLCAkd2FybjogZmFsc2UpIGFuZCAkcmh5dGhtLXVuaXQgPT0gcmVtIHtcbiAgICBAaW5jbHVkZSByZW0oJHByb3AsICR2YWwpO1xuICB9IEBlbHNlIHtcbiAgICAjeyRwcm9wfTogJHZhbDtcbiAgfVxufVxuIiwiLy8gU3VzeSBGYWxsYmFjayBDbGVhcmZpeFxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG5cbi8vIENsZWFyZml4XG4vLyAtLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG5AbWl4aW4gc3VzeS1jbGVhcmZpeCB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoY2xlYXJmaXgsIChtaXhpbjogY2xlYXJmaXgpKSB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH0gQGVsc2Uge1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRGVidWdnaW5nXG4vLyA9PT09PT09PT1cblxuLy8gU3VzeSBJbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS1cbi8vIE91dHB1dCBhcmd1bWVudHMgcGFzc2VkIHRvIGEgaW5zcGVjdC5cbi8vIC0gJG1peGluICA6IDxzdXN5IG1peGluPlxuLy8gLSAkaW5zcGVjICAgOiA8bWl4aW4gYXJndW1lbnRzPlxuXG5AbWl4aW4gc3VzeS1pbnNwZWN0KFxuICAkbWl4aW4sXG4gICRpbnNwZWN0XG4pIHtcbiAgJHNob3c6IGZhbHNlO1xuXG4gIEBlYWNoICRpdGVtIGluICRpbnNwZWN0IHtcbiAgICBAaWYgaW5kZXgoJGl0ZW0sIGluc3BlY3QpIHtcbiAgICAgICRzaG93OiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkc2hvdyBvciBzdXN5LWdldChkZWJ1ZyBpbnNwZWN0KSB7XG4gICAgLXN1c3ktI3skbWl4aW59OiBpbnNwZWN0KCRpbnNwZWN0KTtcbiAgfVxufVxuIiwiLy8gT3V0cHV0XG4vLyA9PT09PT1cblxuLy8gT3V0cHV0XG4vLyAtLS0tLS1cbi8vIE91dHB1dCBDU1Mgd2l0aCBwcm9wZXIgYnJvd3NlciBzdXBwb3J0LlxuLy8gLSAkc3R5bGVzICA6IDxtYXAgb2YgY3NzIHByb3BlcnR5LXZhbHVlIHBhaXJzPlxuQG1peGluIG91dHB1dChcbiAgJHN0eWxlc1xuKSB7XG4gIEBlYWNoICRwcm9wLCAkdmFsIGluICRzdHlsZXMge1xuICAgIEBpbmNsdWRlIHN1c3ktc3VwcG9ydCgkcHJvcCwgJHZhbCk7XG4gIH1cbn1cbiIsIi8vIERpcmVjdGlvbiBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEZsb3cgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgZmxvdzogbHRyLFxuKSk7XG5cbi8vIEdldCBEaXJlY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIG9yICd0bycgZGlyZWN0aW9uIG9mIGEgbHRyIG9yIHJ0bCBmbG93LlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuLy8gLSBbJGtleV0gICA6IGZyb20gfCB0b1xuQGZ1bmN0aW9uIGdldC1kaXJlY3Rpb24oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KSxcbiAgJGtleTogZnJvbVxuKSB7XG4gICRyZXR1cm46IGlmKCRmbG93ID09IHJ0bCwgKGZyb206IHJpZ2h0LCB0bzogbGVmdCksIChmcm9tOiBsZWZ0LCB0bzogcmlnaHQpKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyZXR1cm4sICRrZXkpO1xufVxuXG4vLyBUb1xuLy8gLS1cbi8vIFJldHVybiB0aGUgJ3RvJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gdG8oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgdG8pO1xufVxuXG4vLyBGcm9tXG4vLyAtLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gZnJvbShcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCBmcm9tKTtcbn1cbiIsIi8vIEdyaWQgQmFja2dyb3VuZCBBUElcbi8vID09PT09PT09PT09PT09PT09PT1cbi8vIC0gU3ViLXBpeGVsIHJvdW5kaW5nIGNhbiBsZWFkIHRvIHNldmVyYWwgcGl4ZWxzIHZhcmlhdGlvbiBiZXR3ZWVuIGJyb3dzZXJzLlxuXG4vLyBHcmlkIEJhY2tncm91bmQgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRpbWFnZTogYmFja2dyb3VuZC1pbWFnZVxuLy8gLSAkc2l6ZTogYmFja2dyb3VuZC1zaXplXG4vLyAtICRjbGlwOiBiYWNrZ3JvdW5kLWNsaXBcbi8vIC0gWyRmbG93XTogbHRyIHwgcnRsXG5AbWl4aW4gYmFja2dyb3VuZC1ncmlkLW91dHB1dCAoXG4gICRpbWFnZSxcbiAgJHNpemU6IG51bGwsXG4gICRjbGlwOiBudWxsLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkb3V0cHV0OiAoXG4gICAgYmFja2dyb3VuZC1pbWFnZTogJGltYWdlLFxuICAgIGJhY2tncm91bmQtc2l6ZTogJHNpemUsXG4gICAgYmFja2dyb3VuZC1vcmlnaW46ICRjbGlwLFxuICAgIGJhY2tncm91bmQtY2xpcDogJGNsaXAsXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogZnJvbSgkZmxvdykgdG9wLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIFNoYXJlZCBDb250YWluZXIgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PVxuXG4vLyBDb250YWluZXIgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFskd2lkdGhdICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGp1c3RpZnldICAgICAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0XG4vLyAtIFskbWF0aF0gICAgICAgICAgOiBmbHVpZCB8IHN0YXRpY1xuQG1peGluIGNvbnRhaW5lci1vdXRwdXQoXG4gICR3aWR0aCxcbiAgJGp1c3RpZnk6IGF1dG8gYXV0byxcbiAgJHByb3BlcnR5OiBtYXgtd2lkdGhcbikge1xuICAkb3V0cHV0OiAoXG4gICAgI3skcHJvcGVydHl9OiAkd2lkdGggb3IgMTAwJSxcbiAgICBtYXJnaW4tbGVmdDogbnRoKCRqdXN0aWZ5LCAxKSxcbiAgICBtYXJnaW4tcmlnaHQ6IG50aCgkanVzdGlmeSwgMiksXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gTWFyZ2lucyBBUElcbi8vID09PT09PT09PT09XG5cbi8vIE1hcmdpbiBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gJGJlZm9yZSAgOiA8bGVuZ3RoPlxuLy8gLSAkYWZ0ZXIgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gbWFyZ2luLW91dHB1dChcbiAgJGJlZm9yZSxcbiAgJGFmdGVyLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG86IHRvKCRmbG93KTtcbiAgJGZyb206IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBtYXJnaW4tI3skZnJvbX06ICRiZWZvcmUsXG4gICAgbWFyZ2luLSN7JHRvfTogJGFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIFBhZGRpbmcgQVBJXG4vLyA9PT09PT09PT09PVxuXG4vLyBQYWRkaW5nIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGJlZm9yZSAgOiA8bGVuZ3RoPlxuLy8gLSAkYWZ0ZXIgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gcGFkZGluZy1vdXRwdXQoXG4gICRiZWZvcmUsXG4gICRhZnRlcixcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgcGFkZGluZy0jeyRmcm9tfTogJGJlZm9yZSxcbiAgICBwYWRkaW5nLSN7JHRvfTogJGFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIEZsb2F0IENvbnRhaW5lciBBUElcbi8vID09PT09PT09PT09PT09PT09PT1cblxuLy8gRmxvYXQgQ29udGFpbmVyXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIC0gWyR3aWR0aF0gICAgICAgICA6IDxsZW5ndGg+XG4vLyAtIFskanVzdGlmeV0gICAgICAgOiBsZWZ0IHwgY2VudGVyIHwgcmlnaHRcbi8vIC0gWyRtYXRoXSAgIDogZmx1aWQgfCBzdGF0aWNcbkBtaXhpbiBmbG9hdC1jb250YWluZXIoXG4gICR3aWR0aCxcbiAgJGp1c3RpZnk6IGF1dG8gYXV0byxcbiAgJHByb3BlcnR5OiBtYXgtd2lkdGhcbikge1xuICBAaW5jbHVkZSBzdXN5LWNsZWFyZml4O1xuICBAaW5jbHVkZSBjb250YWluZXItb3V0cHV0KCR3aWR0aCwgJGp1c3RpZnksICRwcm9wZXJ0eSk7XG59XG4iLCIvLyBGbG9hdCBTcGFuIEFQSVxuLy8gPT09PT09PT09PT09PT1cblxuLy8gRmxvYXQgU3BhbiBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICR3aWR0aCAgICAgICAgICAgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvYXRdICAgICAgICAgICA6IGZyb20gfCB0b1xuLy8gLSBbJG1hcmdpbi1iZWZvcmVdICAgOiA8bGVuZ3RoPlxuLy8gLSBbJG1hcmdpbi1hZnRlcl0gICAgOiA8bGVuZ3RoPlxuLy8gLSBbJHBhZGRpbmctYmVmb3JlXSAgOiA8bGVuZ3RoPlxuLy8gLSBbJHBhZGRpbmctYWZ0ZXJdICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICAgICAgICAgICAgOiBsdHIgfCBydGxcbkBtaXhpbiBmbG9hdC1zcGFuLW91dHB1dChcbiAgJHdpZHRoLFxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb20sXG4gICRtYXJnaW4tYmVmb3JlICAgIDogbnVsbCxcbiAgJG1hcmdpbi1hZnRlciAgICAgOiBudWxsLFxuICAkcGFkZGluZy1iZWZvcmUgICA6IG51bGwsXG4gICRwYWRkaW5nLWFmdGVyICAgIDogbnVsbCxcbiAgJGZsb3cgICAgICAgICAgICAgOiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0byAgICAgOiB0bygkZmxvdyk7XG4gICRmcm9tICAgOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgd2lkdGg6ICR3aWR0aCxcbiAgICBmbG9hdDogaWYoJGZsb2F0ID09IHRvLCAkdG8sIG51bGwpIG9yIGlmKCRmbG9hdCA9PSBmcm9tLCAkZnJvbSwgbnVsbCksXG4gICAgbWFyZ2luLSN7JGZyb219OiAkbWFyZ2luLWJlZm9yZSxcbiAgICBtYXJnaW4tI3skdG99OiAkbWFyZ2luLWFmdGVyLFxuICAgIHBhZGRpbmctI3skZnJvbX06ICRwYWRkaW5nLWJlZm9yZSxcbiAgICBwYWRkaW5nLSN7JHRvfTogJHBhZGRpbmctYWZ0ZXIsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gRmxvYXQgRW5kcyBBUElcbi8vID09PT09PT09PT09PT09XG5cbi8vIFN1c3kgRW5kIERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgbGFzdC1mbG93OiB0byxcbikpO1xuXG4vLyBGbG9hdCBMYXN0XG4vLyAtLS0tLS0tLS0tXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtbGFzdChcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpLFxuICAkbGFzdC1mbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBsYXN0LWZsb3cpLFxuICAkbWFyZ2luOiAwXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb2F0OiBpZigkbGFzdC1mbG93ID09IHRvLCAkdG8sIG51bGwpLFxuICAgIG1hcmdpbi0jeyR0b306ICRtYXJnaW4sXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuXG4vLyBGbG9hdCBGaXJzdFxuLy8gLS0tLS0tLS0tLS1cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBmbG9hdC1maXJzdChcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJG91dHB1dDogKFxuICAgIG1hcmdpbi0je2Zyb20oJGZsb3cpfTogMCxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBGbG9hdCBJc29sYXRpb24gQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG5cbi8vIElzb2xhdGUgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gLSAkcHVzaCAgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gaXNvbGF0ZS1vdXRwdXQoXG4gICRwdXNoLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG86IHRvKCRmbG93KTtcbiAgJGZyb206IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBmbG9hdDogJGZyb20sXG4gICAgbWFyZ2luLSN7JGZyb219OiAkcHVzaCxcbiAgICBtYXJnaW4tI3skdG99OiAtMTAwJSxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBTdXN5IFNldHRpbmdzXG4vLyA9PT09PT09PT09PT09XG5cbi8vIFN1c3kgTGFuZ3VhZ2UgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGNvbnRhaW5lcjogYXV0byxcbiAgbWF0aDogZmx1aWQsXG4gIG91dHB1dDogZmxvYXQsXG4gIGNvbnRhaW5lci1wb3NpdGlvbjogY2VudGVyLFxuICBndXR0ZXItcG9zaXRpb246IGFmdGVyLFxuICBnbG9iYWwtYm94LXNpemluZzogY29udGVudC1ib3gsXG4gIGRlYnVnOiAoXG4gICAgaW1hZ2U6IGhpZGUsXG4gICAgY29sb3I6IHJnYmEoIzY2ZiwgLjI1KSxcbiAgICBvdXRwdXQ6IGJhY2tncm91bmQsXG4gICAgdG9nZ2xlOiB0b3AgcmlnaHQsXG4gICksXG4pKTtcblxuXG4vLyBWYWxpZCBLZXl3b3JkIFZhbHVlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURTogRE9OVCdUIFRPVUNIXG4kc3VzeS1rZXl3b3JkczogKFxuICBjb250YWluZXI6IGF1dG8sXG4gIG1hdGg6IHN0YXRpYyBmbHVpZCxcbiAgb3V0cHV0OiBpc29sYXRlIGZsb2F0LFxuICBjb250YWluZXItcG9zaXRpb246IGxlZnQgY2VudGVyIHJpZ2h0LFxuICBmbG93OiBsdHIgcnRsLFxuICBndXR0ZXItcG9zaXRpb246IGJlZm9yZSBhZnRlciBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYyxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveCBjb250ZW50LWJveCxcbiAgc3BhbjogZnVsbCxcbiAgZWRnZTogZmlyc3QgYWxwaGEgbGFzdCBvbWVnYSBmdWxsLFxuICBzcHJlYWQ6IG5hcnJvdyB3aWRlIHdpZGVyLFxuICBndXR0ZXItb3ZlcnJpZGU6IG5vLWd1dHRlcnMgbm8tZ3V0dGVyLFxuICByb2xlOiBuZXN0LFxuICBjbGVhcjogYnJlYWsgbm9icmVhayxcbiAgZGVidWcgaW1hZ2U6IHNob3cgaGlkZSBzaG93LWNvbHVtbnMgc2hvdy1iYXNlbGluZSxcbiAgZGVidWcgb3V0cHV0OiBiYWNrZ3JvdW5kIG92ZXJsYXksXG4pO1xuXG5cbi8vIFBhcnNlIFN1c3kgS2V5d29yZHMgYW5kIE1hcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1zZXR0aW5ncyhcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgQGVhY2ggJGl0ZW0gaW4gJHNob3J0IHtcbiAgICAgIC8vIHN0cmluZ3NcbiAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBzdHJpbmcge1xuICAgICAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJHN1c3kta2V5d29yZHMge1xuICAgICAgICAgIEBpZiBpbmRleCgkdmFsdWUsICRpdGVtKSB7XG4gICAgICAgICAgICAkX2tleS12YWx1ZTogYXBwZW5kKCRrZXksICRpdGVtKTtcbiAgICAgICAgICAgICRfcmV0dXJuOiBfc3VzeS1kZWVwLXNldCgkX3JldHVybiwgJF9rZXktdmFsdWUuLi4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgLy8gbWFwc1xuICAgICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRpdGVtKSA9PSBtYXAge1xuICAgICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBQYXJzZSBDb2x1bW5zICYgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1sYXlvdXQoXG4gICRzaG9ydFxuKSB7XG4gICRfcmV0dXJuOiAoKTtcbiAgJF9jb2x1bW5zOiAoKTtcbiAgJF9ndXR0ZXJzOiBudWxsO1xuXG4gIEBpZiBub3QodW5pdGxlc3MobnRoKG50aCgkc2hvcnQsIDEpLCAxKSkpIHtcbiAgICAkX2d1dHRlcnM6IG50aCgkc2hvcnQsIDEpO1xuICB9IEBlbHNlIHtcbiAgICAkX2NvbHVtbnM6IChjb2x1bW5zOiBudGgoJHNob3J0LCAxKSk7XG4gICAgJF9ndXR0ZXJzOiBpZihsZW5ndGgoJHNob3J0KSA+IDEsIG50aCgkc2hvcnQsIDIpLCAkX2d1dHRlcnMpO1xuICB9XG5cbiAgQGlmIHR5cGUtb2YoJF9ndXR0ZXJzKSA9PSBsaXN0IGFuZCBsZW5ndGgoJF9ndXR0ZXJzKSA+IDAge1xuICAgICRfZ3V0dGVyczogKFxuICAgICAgZ3V0dGVyczogbnRoKCRfZ3V0dGVycywgMikgLyBudGgoJF9ndXR0ZXJzLCAxKSxcbiAgICAgIGNvbHVtbi13aWR0aDogbnRoKCRfZ3V0dGVycywgMSksXG4gICAgKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9ndXR0ZXJzOiBpZigkX2d1dHRlcnMsIChndXR0ZXJzOiAkX2d1dHRlcnMpLCAoKSk7XG4gIH1cblxuICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2NvbHVtbnMpO1xuICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2d1dHRlcnMpO1xuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gUGFyc2UgR3JpZC9Db250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1ncmlkKFxuICAkc2hvcnQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm46IHBhcnNlLXNldHRpbmdzKCRzaG9ydCk7XG4gICRfbGF5b3V0OiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgQGVhY2ggJGl0ZW0gaW4gJHNob3J0IHtcbiAgICAgIC8vIG51bWJlciBvciBsaXN0XG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbnVtYmVyIG9yIHR5cGUtb2YoJGl0ZW0pID09IGxpc3Qge1xuICAgICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbGlzdCBvciB1bml0bGVzcygkaXRlbSkge1xuICAgICAgICAgICRfbGF5b3V0OiBhcHBlbmQoJF9sYXlvdXQsICRpdGVtKTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGNvbnRhaW5lcjogJGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRfbGF5b3V0OiBpZihsZW5ndGgoJF9sYXlvdXQpID4gMCwgcGFyc2UtbGF5b3V0KCRfbGF5b3V0KSwgJF9sYXlvdXQpO1xuICB9XG5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJF9yZXR1cm4sICRfbGF5b3V0KTtcbn1cblxuXG4vLyBQYXJzZSBTcGFuXG4vLyAtLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2Utc3BhbihcbiAgJHNob3J0LFxuICAka2V5OiBzcGFuXG4pIHtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBpZiB0eXBlLW9mKCRzaG9ydCkgPT0gbWFwIHtcbiAgICAkX3JldHVybjogJHNob3J0O1xuICB9IEBlbHNlIHtcbiAgICAkX2F0OiBpbmRleCgkc2hvcnQsIGF0KTtcblxuICAgIEBpZiAkX2F0IHtcbiAgICAgICRfbG9jaTogJF9hdCArIDE7XG4gICAgICAkX2xvY2F0aW9uOiBudGgoJHNob3J0LCAkX2xvY2kpO1xuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGxvY2F0aW9uOiAkX2xvY2F0aW9uKSk7XG4gICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2F0LCBudWxsKTtcbiAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfbG9jaSwgbnVsbCk7XG4gICAgfVxuXG4gICAgJF9pOiAxO1xuICAgICRfc3BhbjogKCk7XG5cbiAgICBAd2hpbGUgJF9pIDw9IGxlbmd0aCgkc2hvcnQpIHtcbiAgICAgICRfdGhpczogbnRoKCRzaG9ydCwgJF9pKTtcblxuICAgICAgQGlmIHR5cGUtb2YoJF90aGlzKSA9PSBudW1iZXIge1xuICAgICAgICAkX3NwYW46IGFwcGVuZCgkX3NwYW4sICRfdGhpcyk7XG4gICAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfaSwgbnVsbCk7XG4gICAgICB9IEBlbHNlIGlmICRfdGhpcyA9PSBvZiB7XG4gICAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfaSwgbnVsbCk7XG4gICAgICAgICRfaTogbGVuZ3RoKCRzaG9ydCkgKyAxO1xuICAgICAgfVxuXG4gICAgICAkX2k6ICRfaSArIDE7XG4gICAgfVxuXG4gICAgQGlmIGxlbmd0aCgkX3NwYW4pID4gMCB7XG4gICAgICAkX3NwYW46IGlmKGxlbmd0aCgkX3NwYW4pID09IDEsIG50aCgkX3NwYW4sIDEpLCAkX3NwYW4pO1xuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKCRrZXk6ICRfc3BhbikpO1xuICAgIH1cblxuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIHBhcnNlLWdyaWQoJHNob3J0KSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIFBhcnNlIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1ndXR0ZXJzKFxuICAkc2hvcnQ6ICRzdXN5XG4pIHtcbiAgJF9ndXR0ZXJzOiBwYXJzZS1zcGFuKCRzaG9ydCwgZ3V0dGVyLW92ZXJyaWRlKTtcbiAgJF9zcGFuOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRfZ3V0dGVycyk7XG5cbiAgQGlmICRfc3BhbiBhbmQgbm90KG1hcC1nZXQoJF9ndXR0ZXJzLCBjb2x1bW5zKSkge1xuICAgICRfY29udGV4dDogKCk7XG4gICAgJF9uZXc6ICgpO1xuXG4gICAgQGVhY2ggJGl0ZW0gaW4gJF9zcGFuIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRpdGVtKSB7XG4gICAgICAgICRfY29udGV4dDogYXBwZW5kKCRfY29udGV4dCwgJGl0ZW0pO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRfbmV3OiBhcHBlbmQoJF9uZXcsICRpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkX2NvbnRleHQ6IHBhcnNlLWdyaWQoJF9jb250ZXh0KTtcbiAgICAkX25ldzogaWYobGVuZ3RoKCRfbmV3KSA9PSAwLCBudWxsLCAkX25ldyk7XG4gICAgJF9uZXc6IGlmKGxlbmd0aCgkX25ldykgPT0gMSwgbnRoKCRfbmV3LCAxKSwgJF9uZXcpO1xuICAgICRfbmV3OiAoZ3V0dGVyLW92ZXJyaWRlOiBpZigkX25ldyAhPSAkX3NwYW4sICRfbmV3LCAkX3NwYW4pKTtcblxuICAgICRfZ3V0dGVyczogbWFwLW1lcmdlKCRfZ3V0dGVycywgJF9uZXcpO1xuICAgICRfZ3V0dGVyczogbWFwLW1lcmdlKCRfZ3V0dGVycywgJF9jb250ZXh0KTtcbiAgfVxuXG4gIEByZXR1cm4gJF9ndXR0ZXJzO1xufVxuIiwiLy8gVmFsaWRhdGlvblxuLy8gPT09PT09PT09PVxuXG5cbi8vIFZhbGlkYXRlIENvbHVtbiBNYXRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHZhbGlkLWNvbHVtbi1tYXRoKFxuICAkbWF0aCxcbiAgJGNvbHVtbi13aWR0aFxuKSB7XG4gIEBpZiAkbWF0aCA9PSBzdGF0aWMgYW5kIG5vdCgkY29sdW1uLXdpZHRoKSB7XG4gICAgQGVycm9yICdTdGF0aWMgbWF0aCByZXF1aXJlcyBhIHZhbGlkIGNvbHVtbi13aWR0aCBzZXR0aW5nLic7XG4gIH1cblxuICBAcmV0dXJuICRjb2x1bW4td2lkdGg7XG59XG4iLCIvLyBHcmlkIFN5bnRheFxuLy8gPT09PT09PT09PT1cblxuXG4vLyBMYXlvdXRcbi8vIC0tLS0tLVxuLy8gU2V0IGEgbmV3IGxheW91dCB1c2luZyBhIHNob3J0aGFuZFxuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG4vLyAtICRjbGVhbjogYm9vbGVhblxuQG1peGluIGxheW91dChcbiAgJGxheW91dCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICA6ICRsYXlvdXQ7XG4gICRzdXN5ICAgICA6IF9nZXQtbGF5b3V0KCRsYXlvdXQsICRjbGVhbikgIWdsb2JhbDtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QobGF5b3V0LCAkaW5zcGVjdCk7XG59XG5cblxuLy8gVXNlIEdyaWRcbi8vIC0tLS0tLS0tXG4vLyBVc2UgYW4gYXJiaXRyYXJ5IGxheW91dCBmb3IgYSBzZWN0aW9uIG9mIGNvZGVcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuLy8gLSAkY2xlYW46IGJvb2xlYW5cbkBtaXhpbiB3aXRoLWxheW91dChcbiAgJGxheW91dCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICA6ICRsYXlvdXQ7XG4gICRvbGQgICAgICA6ICRzdXN5O1xuICAkc3VzeSAgICAgOiBfZ2V0LWxheW91dCgkbGF5b3V0LCAkY2xlYW4pICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHdpdGgtbGF5b3V0LCAkaW5zcGVjdCk7XG5cbiAgQGNvbnRlbnQ7XG5cbiAgJHN1c3k6ICRvbGQgIWdsb2JhbDtcbn1cblxuXG4vLyBMYXlvdXRcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIGEgcGFyc2VkIGxheW91dCBtYXAgYmFzZWQgb24gc2hvcnRoYW5kIHN5bnRheFxuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gbGF5b3V0KFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gIEByZXR1cm4gcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbn1cblxuXG4vLyBHZXQgTGF5b3V0XG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuZXcgbGF5b3V0IGJhc2VkIG9uIGN1cnJlbnQgYW5kIGdpdmVuIHNldHRpbmdzXG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbi8vIC0gJGNsZWFuOiBib29sZWFuXG5AZnVuY3Rpb24gX2dldC1sYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkbGF5b3V0OiBsYXlvdXQoJGxheW91dCk7XG4gIEByZXR1cm4gaWYoJGNsZWFuLCAkbGF5b3V0LCBfc3VzeS1kZWVwLW1lcmdlKCRzdXN5LCAkbGF5b3V0KSk7XG59XG4iLCIvLyBTdXN5IEJveCBTaXppbmdcbi8vID09PT09PT09PT09PT09PT09XG5cbi8vIEdsb2JhbCBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgYm94IG1vZGVsIGdsb2JhbGx5IG9uIGFsbCBlbGVtZW50cy5cbi8vIC0gWyRib3hdOiBib3JkZXItYm94IHwgY29udGVudC1ib3hcbi8vIC0gWyRpbmhlcml0XTogdHJ1ZSB8IGZhbHNlXG5AbWl4aW4gZ2xvYmFsLWJveC1zaXppbmcoXG4gICRib3g6IHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSxcbiAgJGluaGVyaXQ6IGZhbHNlXG4pIHtcbiAgJGluc3BlY3Q6ICRib3g7XG5cbiAgQGlmICRpbmhlcml0IHtcbiAgICBAYXQtcm9vdCB7XG4gICAgICAgaHRtbCB7IEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJGJveCkpOyB9XG4gICAgICAgKiwgKjpiZWZvcmUsICo6YWZ0ZXIgeyBib3gtc2l6aW5nOiBpbmhlcml0OyB9XG4gICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgKiwgKjpiZWZvcmUsICo6YWZ0ZXIgeyBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTsgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGdsb2JhbC1ib3gtc2l6aW5nLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHVwZGF0ZS1ib3gtbW9kZWwoJGJveCk7XG59XG5cbi8vIEJvcmRlciBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gQSBsZWdhY3kgc2hvcnRjdXQuLi5cbi8vIC0gWyRpbmhlcml0XTogdHJ1ZSB8IGZhbHNlXG5AbWl4aW4gYm9yZGVyLWJveC1zaXppbmcoXG4gICRpbmhlcml0OiBmYWxzZVxuKSB7XG4gIEBpbmNsdWRlIGdsb2JhbC1ib3gtc2l6aW5nKGJvcmRlci1ib3gsICRpbmhlcml0KTtcbn1cblxuLy8gVXBkYXRlIEJveCBNb2RlbFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogVXBkYXRlcyBnbG9iYWwgYm94IG1vZGVsIHNldHRpbmdcbkBtaXhpbiB1cGRhdGUtYm94LW1vZGVsKFxuICAkYm94XG4pIHtcbiAgQGlmICRib3ggIT0gc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpIHtcbiAgQGluY2x1ZGUgc3VzeS1zZXQoZ2xvYmFsLWJveC1zaXppbmcsICRib3gpO1xuICB9XG59XG4iLCIvLyBDb250ZXh0IFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gTmVzdGVkIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBzdWJzZXQgZ3JpZCBmb3IgbmVzdGVkIGNvbnRleHQuXG4vLyAtICRjb250ZXh0ICAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBuZXN0ZWQoXG4gICRjb250ZXh0XG4pIHtcbiAgJGNvbnRleHQgICAgOiBwYXJzZS1zcGFuKCRjb250ZXh0KTtcbiAgJHNwYW4gICAgICAgOiBzdXN5LWdldChzcGFuLCAkY29udGV4dCk7XG4gICRsb2NhdGlvbiAgIDogZ2V0LWxvY2F0aW9uKCRjb250ZXh0KTtcbiAgJGNvbHVtbnMgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBzdXN5LXNsaWNlKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbn1cblxuLy8gTmVzdGVkIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBVc2UgYSBzdWJzZXQgZ3JpZCBmb3IgYSBuZXN0ZWQgY29udGV4dFxuLy8gLSAkY29udGV4dCAgIDogPHNwYW4+XG4vLyAtIEBjb250ZW50ICAgOiA8Y29udGVudD5cbkBtaXhpbiBuZXN0ZWQoXG4gICRjb250ZXh0XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLXNwYW4oJGNvbnRleHQpO1xuICAkb2xkICAgICAgOiBzdXN5LWdldChjb2x1bW5zKTtcbiAgJHN1c3kgICAgIDogbWFwLW1lcmdlKCRzdXN5LCAoY29sdW1uczogbmVzdGVkKCRjb250ZXh0KSkpICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KG5lc3RlZCwgJGluc3BlY3QpO1xuICBAY29udGVudDtcblxuICAkc3VzeSAgICAgOiBtYXAtbWVyZ2UoJHN1c3ksIChjb2x1bW5zOiAkb2xkKSkgIWdsb2JhbDtcbn1cbiIsIi8vIEJhY2tncm91bmQgR3JpZCBTeW50YXhcbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzOiBmYWxzZTtcblxuXG4vLyBTaG93IEdyaWQvc1xuLy8gLS0tLS0tLS0tLS1cbi8vIFNob3cgZ3JpZCBvbiBhbnkgZWxlbWVudCB1c2luZyBlaXRoZXIgYmFja2dyb3VuZCBvciBvdmVybGF5LlxuLy8gLSBbJGdyaWRdICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBzaG93LWdyaWQoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0OiAkZ3JpZDtcbiAgJF9vdXRwdXQ6IGRlYnVnLWdldChvdXRwdXQsICRncmlkKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc2hvdy1ncmlkLCAkaW5zcGVjdCk7XG4gIEBpZiAkX291dHB1dCA9PSBvdmVybGF5IGFuZCBzdXN5LWdldChkZWJ1ZyBpbWFnZSwgJGdyaWQpICE9IGhpZGUge1xuICAgIEBpbmNsdWRlIG92ZXJsYXktZ3JpZCgkZ3JpZCk7XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtZ3JpZCgkZ3JpZCk7XG4gIH1cbn1cblxuQG1peGluIHNob3ctZ3JpZHMoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIHNob3ctZ3JpZCgkZ3JpZCk7XG59XG5cbi8vIEJhY2tncm91bmQgR3JpZFxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBTaG93IGEgZ3JpZCBiYWNrZ3JvdW5kIG9uIGFueSBlbGVtZW50LlxuLy8gLSBbJGdyaWRdICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBiYWNrZ3JvdW5kLWdyaWQoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRncmlkO1xuICAkX291dHB1dCAgOiBnZXQtYmFja2dyb3VuZCgkZ3JpZCk7XG5cbiAgQGlmIGxlbmd0aCgkX291dHB1dCkgPiAwIHtcbiAgICAkX2Zsb3c6IHN1c3ktZ2V0KGZsb3csICRncmlkKTtcblxuICAgICRfaW1hZ2U6ICgpO1xuICAgIEBlYWNoICRuYW1lLCAkbGF5ZXIgaW4gbWFwLWdldCgkX291dHB1dCwgaW1hZ2UpIHtcbiAgICAgICRfZGlyZWN0aW9uOiBpZigkbmFtZSA9PSBiYXNlbGluZSwgdG8gYm90dG9tLCB0byB0bygkX2Zsb3cpKTtcbiAgICAgICRfaW1hZ2U6IGFwcGVuZCgkX2ltYWdlLCBsaW5lYXItZ3JhZGllbnQoJF9kaXJlY3Rpb24sICRsYXllciksIGNvbW1hKTtcbiAgICB9XG4gICAgJF9vdXRwdXQ6IG1hcC1tZXJnZSgkX291dHB1dCwgKGltYWdlOiAkX2ltYWdlKSk7XG5cbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQtb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoYmFja2dyb3VuZC1ncmlkLCAkaW5zcGVjdCk7XG4gIH1cbn1cblxuXG4vLyBPdmVybGF5IEdyaWRcbi8vIC0tLS0tLS0tLS0tLVxuLy8gR2VuZXJhdGUgYW4gaWNvbiB0byB0cmlnZ2VyIGdyaWQtb3ZlcmxheXMgb24gYW55IGdpdmVuIGVsZW1lbnRzLlxuLy8gJGdyaWRzLi4uICA6IDxzZWxlY3Rvcj4gWzxzZXR0aW5ncz5dIFssIDxzZWxlY3Rvcj5dKlxuQG1peGluIG92ZXJsYXktZ3JpZCAoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gIEBpZiBub3QoJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzKSB7XG4gICAgQGF0LXJvb3QgaGVhZCB7IEBpbmNsdWRlIG92ZXJsYXktaGVhZCgkZ3JpZCk7IH1cbiAgICBAYXQtcm9vdCBoZWFkOmJlZm9yZSB7IEBpbmNsdWRlIG92ZXJsYXktdHJpZ2dlcjsgfVxuICAgIEBhdC1yb290IGhlYWQ6aG92ZXIgeyBAaW5jbHVkZSBvdmVybGF5LXRyaWdnZXItaG92ZXI7IH1cbiAgICAkc3VzeS1vdmVybGF5LWdyaWQtaGVhZC1leGlzdHM6IHRydWUgIWdsb2JhbDtcbiAgfVxuXG4gIGhlYWQ6aG92ZXIgfiAmLFxuICBoZWFkOmhvdmVyIH4gYm9keSAmIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgZ3JpZC1vdmVybGF5LWJhc2U7XG4gICAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQoJGdyaWQpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFtQcml2YXRlXSBPdmVybGF5IFRyaWdnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBtaXhpbiBvdmVybGF5LXRyaWdnZXIge1xuICBjb250ZW50OiBcInx8fFwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQ6IHtcbiAgICBmYW1pbHk6IHNhbnMtc2VyaWY7XG4gICAgc2l6ZTogMTZweDtcbiAgICB3ZWlnaHQ6IGJvbGQ7XG4gIH1cbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBUcmlnZ2VyIEhvdmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gb3ZlcmxheS10cmlnZ2VyLWhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSh3aGl0ZSwgLjUpO1xuICBjb2xvcjogcmVkO1xufVxuXG5cbi8vIFtQcml2YXRlXSBPdmVybGF5IEhlYWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxoZWFkPiBzdHlsZXMgdG8gY3JlYXRlIGdyaWQgb3ZlcmxheSB0b2dnbGVcbkBtaXhpbiBvdmVybGF5LWhlYWQgKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkX3RvZ2dsZTogZGVidWctZ2V0KHRvZ2dsZSwgJGdyaWQpO1xuICAkX2hvcno6IG51bGw7XG4gICRfdmVydDogbnVsbDtcblxuICBAZWFjaCAkc2lkZSBpbiAkX3RvZ2dsZSB7XG4gICAgJF9ob3J6OiBpZigkc2lkZSA9PSBsZWZ0IG9yICRzaWRlID09IHJpZ2h0LCAkc2lkZSwgJF9ob3J6KTtcbiAgICAkX3ZlcnQ6IGlmKCRzaWRlID09IHRvcCBvciAkc2lkZSA9PSBib3R0b20sICRzaWRlLCAkX3ZlcnQpO1xuICB9XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgI3skX2hvcnp9OiAxMHB4O1xuICAjeyRfdmVydH06IDEwcHg7XG4gIHotaW5kZXg6IDk5OTtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6IHJnYmEod2hpdGUsIC4yNSk7XG59XG5cblxuLy8gW1ByaXZhdGVdIEdyaWQgT3ZlcmxheSBCYXNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJhc2Ugc3R5bGVzIGZvciBnZW5lcmF0aW5nIGEgZ3JpZCBvdmVybGF5XG5AbWl4aW4gZ3JpZC1vdmVybGF5LWJhc2UoKSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBjb250ZW50OiBcIiBcIjtcbiAgei1pbmRleDogOTk4O1xufVxuXG5cbi8vIEdldCBTeW1tZXRyaWNhbCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPG1hcD5cbkBmdW5jdGlvbiBnZXQtYmFja2dyb3VuZC1zeW0oXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgICAgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfZ3V0dGVycyAgICAgICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRncmlkKTtcbiAgJF9jb2x1bW4td2lkdGggIDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkZ3JpZCk7XG4gICRfbWF0aCAgICAgICAgICA6IHN1c3ktZ2V0KG1hdGgsICRncmlkKTtcblxuICAkX2NvbG9yICAgICAgICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX3RyYW5zICAgICAgICAgOiB0cmFuc3BhcmVudDtcbiAgJF9saWdodCAgICAgICAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuXG4gICRfZW5kICAgICAgICAgICA6IDEgKyAkX2d1dHRlcnM7XG4gICRfYWZ0ZXIgICAgICAgICA6IHBlcmNlbnRhZ2UoMS8kX2VuZCk7XG4gICRfc3RvcHMgICAgICAgICA6ICgpO1xuICAkX3NpemUgICAgICAgICAgOiBzcGFuKDEgJGdyaWQgd2lkZSk7XG5cbiAgQGlmIGlzLWluc2lkZSgkZ3JpZCkge1xuICAgICRfc3RvcHM6ICRfY29sb3IsICRfbGlnaHQ7XG4gIH0gQGVsc2UgaWYgaXMtc3BsaXQoJGdyaWQpIHtcbiAgICAkX3NwbGl0OiAkX2d1dHRlcnMvMjtcbiAgICAkX2JlZm9yZTogcGVyY2VudGFnZSgkX3NwbGl0LyRfZW5kKTtcbiAgICAkX2FmdGVyOiBwZXJjZW50YWdlKCgxICsgJF9zcGxpdCkvJF9lbmQpO1xuICAgICRfc3RvcHM6ICRfdHJhbnMgJF9iZWZvcmUsICRfY29sb3IgJF9iZWZvcmUsICRfbGlnaHQgJF9hZnRlciwgJF90cmFucyAkX2FmdGVyO1xuICB9IEBlbHNlIHtcbiAgICAkX3N0b3BzOiAkX2NvbG9yLCAkX2xpZ2h0ICRfYWZ0ZXIsICRfdHJhbnMgJF9hZnRlcjtcbiAgfVxuXG4gIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAkX3NpemU6IHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpICogJF9lbmQ7XG4gIH1cblxuICAkX291dHB1dDogKFxuICAgIGltYWdlOiAoY29sdW1uczogJF9zdG9wcyksXG4gICAgc2l6ZTogJF9zaXplLFxuICApO1xuXG4gIEByZXR1cm4gJF9vdXRwdXQ7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBJbnNpZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0taW5zaWRlKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3N0b3BzICAgOiAoKTtcblxuICBAZm9yICRsb2NhdGlvbiBmcm9tIDEgdGhyb3VnaCBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICR0aGlzLXN0b3A6ICgpO1xuXG4gICAgQGlmICRsb2NhdGlvbiA9PSAxIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yLCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkc3RhcnQ6IHBhcnNlLXNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICAgJHN0YXJ0OiBnZXQtaXNvbGF0aW9uKCRzdGFydCk7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciAkc3RhcnQsIGNvbW1hKTtcbiAgICB9XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF9lbmQ6IHBhcnNlLXNwYW4oMSBhdCAoJGxvY2F0aW9uICsgMSkgJGdyaWQpO1xuICAgICAgJF9lbmQ6IGdldC1pc29sYXRpb24oJF9lbmQpO1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQgJF9lbmQsIGNvbW1hKTtcbiAgICB9XG5cbiAgICAkX3N0b3BzOiBqb2luKCRfc3RvcHMsICR0aGlzLXN0b3AsIGNvbW1hKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdG9wcztcbn1cblxuXG4vLyBHZXQgQXN5bW1ldHJpY2FsIFNwbGl0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0tc3BsaXQoXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAkX2NvbG9yICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX2xpZ2h0ICAgOiBsaWdodGVuKCRfY29sb3IsIDE1JSk7XG4gICRfc3RvcHMgICA6ICgpO1xuXG4gIEBmb3IgJGxvY2F0aW9uIGZyb20gMSB0aHJvdWdoIHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgJHRoaXMtc3RvcDogKCk7XG5cbiAgICAkc3RhcnQ6IHBhcnNlLXNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICRzdGFydDogZ2V0LWlzb2xhdGlvbigkc3RhcnQpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCB0cmFuc3BhcmVudCAkc3RhcnQsIGNvbW1hKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciAkc3RhcnQsIGNvbW1hKTtcblxuICAgICRfZW5kOiAkc3RhcnQgKyBzcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCAkX2VuZCwgY29tbWEpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCB0cmFuc3BhcmVudCAkX2VuZCwgY29tbWEpO1xuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBPdXRzaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYXN5bS1vdXRzaWRlKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3RyYW5zICAgOiB0cmFuc3BhcmVudDtcbiAgJF9zdG9wcyAgIDogKCk7XG5cbiAgQGZvciAkbG9jYXRpb24gZnJvbSAxIHRocm91Z2ggc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAkdGhpcy1zdG9wOiAoKTtcblxuICAgIEBpZiAkbG9jYXRpb24gPT0gMSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0YXJ0OiBwYXJzZS1zcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAgICRzdGFydDogZ2V0LWlzb2xhdGlvbigkc3RhcnQpO1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IgJHN0YXJ0LCBjb21tYSk7XG4gICAgfVxuXG4gICAgQGlmICRsb2NhdGlvbiA9PSBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRndXR0ZXI6IGdldC1zcGFuLXdpZHRoKGZpcnN0ICRsb2NhdGlvbiAkZ3JpZCk7XG5cbiAgICAgICRfZW5kOiBwYXJzZS1zcGFuKDEgYXQgKCRsb2NhdGlvbiArIDEpICRncmlkKTtcbiAgICAgICRfZW5kOiBnZXQtaXNvbGF0aW9uKCRfZW5kKTtcblxuICAgICAgJGd1dHRlcjogJF9saWdodCAkZ3V0dGVyLCAkX3RyYW5zICRndXR0ZXIsICRfdHJhbnMgJF9lbmQ7XG4gICAgICAkdGhpcy1zdG9wOiBqb2luKCR0aGlzLXN0b3AsICRndXR0ZXIsIGNvbW1hKTtcbiAgICB9XG5cbiAgICAkX3N0b3BzOiBqb2luKCRfc3RvcHMsICR0aGlzLXN0b3AsIGNvbW1hKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdG9wcztcbn1cblxuXG4vLyBHZXQgQXN5bW1ldHJpY2FsIEJhY2tncm91bmRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1iYWNrZ3JvdW5kLWFzeW0oXG4gICRncmlkXG4pIHtcbiAgJF9zdG9wczogKCk7XG5cbiAgQGlmIGlzLWluc2lkZSgkZ3JpZCkge1xuICAgICRfc3RvcHM6IGdldC1hc3ltLWluc2lkZSgkZ3JpZCk7XG4gIH0gQGVsc2UgaWYgaXMtc3BsaXQoJGdyaWQpIHtcbiAgICAkX3N0b3BzOiBnZXQtYXN5bS1zcGxpdCgkZ3JpZCk7XG4gIH0gQGVsc2Uge1xuICAgICRfc3RvcHM6IGdldC1hc3ltLW91dHNpZGUoJGdyaWQpO1xuICB9XG5cbiAgQHJldHVybiAoaW1hZ2U6IChjb2x1bW5zOiAkX3N0b3BzKSk7XG59XG5cblxuLy8gR2V0IEJhY2tncm91bmRcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWJhY2tncm91bmQoXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfc2hvdyAgICA6IHN1c3ktZ2V0KGRlYnVnIGltYWdlLCAkZ3JpZCk7XG4gICRfcmV0dXJuICA6ICgpO1xuXG4gIEBpZiAkX3Nob3cgYW5kICRfc2hvdyAhPSAnaGlkZScge1xuICAgICRfY29sdW1uczogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICAgQGlmICRfc2hvdyAhPSAnc2hvdy1iYXNlbGluZScge1xuICAgICAgJF9zeW06IGlzLXN5bW1ldHJpY2FsKCRfY29sdW1ucyk7XG4gICAgICAkX3JldHVybjogaWYoJF9zeW0sIGdldC1iYWNrZ3JvdW5kLXN5bSgkZ3JpZCksIGdldC1iYWNrZ3JvdW5kLWFzeW0oJGdyaWQpKTtcbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChjbGlwOiBjb250ZW50LWJveCkpO1xuICAgIH1cblxuICAgIEBpZiAkX3Nob3cgIT0gJ3Nob3ctY29sdW1ucydcbiAgICAgIGFuZCBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKGJhc2UtbGluZS1oZWlnaHQpXG4gICAgICBhbmQgdHlwZS1vZigkYmFzZS1saW5lLWhlaWdodCkgPT0gJ251bWJlcidcbiAgICAgIGFuZCBub3QgdW5pdGxlc3MoJGJhc2UtbGluZS1oZWlnaHQpIHtcbiAgICAgICRfY29sb3I6IHZhcmlhYmxlLWV4aXN0cygnZ3JpZC1iYWNrZ3JvdW5kLWJhc2VsaW5lLWNvbG9yJyk7XG4gICAgICAkX2NvbG9yOiBpZigkX2NvbG9yLCAkZ3JpZC1iYWNrZ3JvdW5kLWJhc2VsaW5lLWNvbG9yLCAjMDAwKTtcblxuICAgICAgJF9pbWFnZTogbWFwLWdldCgkX3JldHVybiwgaW1hZ2UpO1xuICAgICAgJF9zaXplOiBtYXAtZ2V0KCRfcmV0dXJuLCBzaXplKTtcbiAgICAgICRfYmFzZWxpbmU6IChiYXNlbGluZTogKCRfY29sb3IgMXB4LCB0cmFuc3BhcmVudCAxcHgpKTtcbiAgICAgICRfYmFzZWxpbmUtc2l6ZTogMTAwJSAkYmFzZS1saW5lLWhlaWdodDtcblxuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKFxuICAgICAgICBpbWFnZTogaWYoJF9pbWFnZSwgbWFwLW1lcmdlKCRfaW1hZ2UsICRfYmFzZWxpbmUpLCAkX2Jhc2VsaW5lKSxcbiAgICAgICAgc2l6ZTogaWYoJF9zaXplLCAoJF9zaXplLCAkX2Jhc2VsaW5lLXNpemUpLCAkX2Jhc2VsaW5lLXNpemUpLFxuICAgICAgKSk7XG5cbiAgICAgIEBpZiAkX3Nob3cgPT0gJ3Nob3cnIHtcbiAgICAgICAgJF9jbGlwOiBtYXAtZ2V0KCRfcmV0dXJuLCBjbGlwKTtcbiAgICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGNsaXA6IGpvaW4oJF9jbGlwLCBib3JkZXItYm94LCBjb21tYSkpKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRfc2hvdyA9PSAnc2hvdy1iYXNlbGluZScge1xuICAgICAgQHdhcm4gJ1BsZWFzZSBwcm92aWRlIGEgJGJhc2UtbGluZS1oZWlnaHQgd2l0aCB0aGUgZGVzaXJlZCBoZWlnaHQgYW5kIHVuaXRzJztcbiAgICB9XG4gIH1cblxuICBAaWYgbWFwLWdldCgkX3JldHVybiwgaW1hZ2UpIHtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoZmxvdzogc3VzeS1nZXQoZmxvdywgJGdyaWQpKSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIEdldCBEZWJ1Z1xuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgZGVidWcgc2V0dGluZ1xuLy8gLSAka2V5OiA8c2V0dGluZz5cbkBmdW5jdGlvbiBkZWJ1Zy1nZXQoXG4gICRrZXksXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRrZXk6IGpvaW4oZGVidWcsICRrZXksIHNwYWNlKTtcbiAgQHJldHVybiBzdXN5LWdldCgka2V5LCAkZ3JpZCk7XG59XG4iLCIvLyBDb250YWluZXIgU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09XG5cbi8vIENvbnRhaW5lciBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgY29udGFpbmVyIGVsZW1lbnRcbi8vIC0gWyRsYXlvdXRdICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBjb250YWluZXIoXG4gICRsYXlvdXQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgICAgOiAkbGF5b3V0O1xuICAkbGF5b3V0ICAgICA6IHBhcnNlLWdyaWQoJGxheW91dCk7XG5cbiAgJF93aWR0aCAgICAgOiBnZXQtY29udGFpbmVyLXdpZHRoKCRsYXlvdXQpO1xuICAkX2p1c3RpZnkgICA6IHBhcnNlLWNvbnRhaW5lci1wb3NpdGlvbihzdXN5LWdldChjb250YWluZXItcG9zaXRpb24sICRsYXlvdXQpKTtcbiAgJF9wcm9wZXJ0eSAgOiBpZihzdXN5LWdldChtYXRoLCAkbGF5b3V0KSA9PSBzdGF0aWMsIHdpZHRoLCBtYXgtd2lkdGgpO1xuXG4gICRfYm94ICAgICAgIDogc3VzeS1nZXQoYm94LXNpemluZywgJGxheW91dCk7XG5cbiAgQGlmICRfYm94IHtcbiAgICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRfYm94KSk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoY29udGFpbmVyLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIGZsb2F0LWNvbnRhaW5lcigkX3dpZHRoLCAkX2p1c3RpZnksICRfcHJvcGVydHkpO1xuICBAaW5jbHVkZSBzaG93LWdyaWQoJGxheW91dCk7XG59XG5cbi8vIENvbnRhaW5lciBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGNvbnRhaW5lciB3aWR0aFxuLy8gLSBbJGxheW91dF0gIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGNvbnRhaW5lcihcbiAgJGxheW91dDogJHN1c3lcbikge1xuICAkbGF5b3V0OiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuICBAcmV0dXJuIGdldC1jb250YWluZXItd2lkdGgoJGxheW91dCk7XG59XG5cbi8vIEdldCBDb250YWluZXIgV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENhbGN1bGF0ZSB0aGUgY29udGFpbmVyIHdpZHRoXG4vLyAtIFskbGF5b3V0XTogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1jb250YWluZXItd2lkdGgoXG4gICRsYXlvdXQ6ICRzdXN5XG4pIHtcbiAgJGxheW91dCAgICAgICAgIDogcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbiAgJF93aWR0aCAgICAgICAgIDogc3VzeS1nZXQoY29udGFpbmVyLCAkbGF5b3V0KTtcbiAgJF9jb2x1bW4td2lkdGggIDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkbGF5b3V0KTtcbiAgJF9tYXRoICAgICAgICAgIDogc3VzeS1nZXQobWF0aCwgJGxheW91dCk7XG5cbiAgQGlmIG5vdCgkX3dpZHRoKSBvciAkX3dpZHRoID09IGF1dG8ge1xuICAgIEBpZiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKSB7XG4gICAgICAkX2NvbHVtbnMgICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRsYXlvdXQpO1xuICAgICAgJF9ndXR0ZXJzICAgOiBzdXN5LWdldChndXR0ZXJzLCAkbGF5b3V0KTtcbiAgICAgICRfc3ByZWFkICAgIDogaWYoaXMtc3BsaXQoJGxheW91dCksIHdpZGUsIG5hcnJvdyk7XG4gICAgICAkX3dpZHRoICAgICA6IHN1c3ktc3VtKCRfY29sdW1ucywgJF9ndXR0ZXJzLCAkX3NwcmVhZCkgKiAkX2NvbHVtbi13aWR0aDtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3dpZHRoO1xufVxuXG4vLyBQYXJzZSBDb250YWluZXIgUG9zaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGFyc2UgdGhlICRjb250YWluZXItcG9zaXRpb24gaW50byBtYXJnaW4gdmFsdWVzLlxuLy8gLSBbJGp1c3RpZnldICAgOiBsZWZ0IHwgY2VudGVyIHwgcmlnaHQgfCA8bGVuZ3RoPiBbPGxlbmd0aD5dXG5AZnVuY3Rpb24gcGFyc2UtY29udGFpbmVyLXBvc2l0aW9uKFxuICAkanVzdGlmeTogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgY29udGFpbmVyLXBvc2l0aW9uKVxuKSB7XG4gICRfcmV0dXJuOiBpZigkanVzdGlmeSA9PSBsZWZ0LCAwLCBhdXRvKSBpZigkanVzdGlmeSA9PSByaWdodCwgMCwgYXV0byk7XG5cbiAgQGlmIG5vdChpbmRleChsZWZ0IHJpZ2h0IGNlbnRlciwgJGp1c3RpZnkpKSB7XG4gICAgJF9yZXR1cm46IG50aCgkanVzdGlmeSwgMSk7XG4gICAgJF9yZXR1cm46ICRfcmV0dXJuIGlmKGxlbmd0aCgkanVzdGlmeSkgPiAxLCBudGgoJGp1c3RpZnksIDIpLCAkX3JldHVybik7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gU3BhbiBTeW50YXhcbi8vID09PT09PT09PT09XG5cbi8vIFNwYW4gW21peGluXVxuLy8gLS0tLS0tLS0tLS0tXG4vLyBTZXQgYSBzcGFubmluZyBlbGVtZW50IHVzaW5nIHNob3J0aGFuZCBzeW50YXguXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3Q6ICRzcGFuO1xuICAkc3BhbjogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRvdXRwdXQ6IHNwYW4tbWF0aCgkc3Bhbik7XG4gICRuZXN0aW5nOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRjbGVhcjogc3VzeS1nZXQoY2xlYXIsICRzcGFuKTtcblxuICAkYm94OiBzdXN5LWdldChib3gtc2l6aW5nLCAkc3Bhbik7XG4gICRjb250ZW50LWJveDogaWYoc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpICE9ICdib3JkZXItYm94JywgdHJ1ZSwgZmFsc2UpO1xuICAkYm94OiAkYm94IG9yIGlmKGlzLWluc2lkZSgkc3BhbikgYW5kICRjb250ZW50LWJveCwgYm9yZGVyLWJveCwgbnVsbCk7XG5cbiAgQGlmICRjbGVhciA9PSBicmVhayB7XG4gICAgQGluY2x1ZGUgYnJlYWs7XG4gIH0gQGVsc2UgaWYgJGNsZWFyID09IG5vYnJlYWsge1xuICAgIEBpbmNsdWRlIG5vYnJlYWs7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3BhbiwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTtcbiAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgQGlmIHZhbGlkLWNvbHVtbnMoJG5lc3RpbmcsIHNpbGVudCkge1xuICAgIEBpbmNsdWRlIG5lc3RlZCgkc3BhbikgeyBAY29udGVudDsgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBTcGFuIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4uXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQGZ1bmN0aW9uIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgQHJldHVybiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG59XG5cbi8vIFNwYW4gTWF0aFxuLy8gLS0tLS0tLS0tXG4vLyBHZXQgYWxsIHRoZSBzcGFuIHJlc3VsdHMuXG4vLyAtICRzcGFuOiA8bWFwPlxuQGZ1bmN0aW9uIHNwYW4tbWF0aChcbiAgJHNwYW5cbikge1xuICAkbmVzdCAgICAgICAgICAgICA6IGlmKHN1c3ktZ2V0KHJvbGUsICRzcGFuKSA9PSBuZXN0LCB0cnVlLCBmYWxzZSk7XG4gICRzcGxpdC1uZXN0ICAgICAgIDogaWYoaXMtc3BsaXQoJHNwYW4pIGFuZCAkbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkZWRnZSAgICAgICAgICAgICA6IGdldC1lZGdlKCRzcGFuKTtcbiAgJGxvY2F0aW9uICAgICAgICAgOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuXG4gICRmbG9hdCAgICAgICAgICAgIDogZnJvbTtcbiAgJHBhZGRpbmctYmVmb3JlICAgOiBudWxsO1xuICAkcGFkZGluZy1hZnRlciAgICA6IG51bGw7XG4gICRtYXJnaW4tYmVmb3JlICAgIDogbnVsbDtcbiAgJG1hcmdpbi1hZnRlciAgICAgOiBudWxsO1xuXG4gIC8vIGNhbGN1bGF0ZSB3aWR0aHNcbiAgJHNwcmVhZDogaW5kZXgobWFwLXZhbHVlcygkc3BhbiksIHNwcmVhZCk7XG4gICRzcGFuOiBpZigkc3BsaXQtbmVzdCBhbmQgbm90KCRzcHJlYWQpLCBtYXAtbWVyZ2UoJHNwYW4sIChzcHJlYWQ6IHdpZGUpKSwgJHNwYW4pO1xuICAkd2lkdGg6IGdldC1zcGFuLXdpZHRoKCRzcGFuKTtcbiAgJGd1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcblxuICAvLyBhcHBseSBndXR0ZXJzXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaWYgbm90KHN1c3ktZ2V0KHJvbGUsICRzcGFuKSkge1xuICAgICAgJHBhZGRpbmctYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJHBhZGRpbmctYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBpZiBub3QoJHNwbGl0LW5lc3QpIHtcbiAgICAgICRtYXJnaW4tYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJG1hcmdpbi1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNwZWNpYWwgbWFyZ2luIGhhbmRsaW5nXG4gIEBpZiBzdXN5LWdldChvdXRwdXQsICRzcGFuKSA9PSBpc29sYXRlIGFuZCAkbG9jYXRpb24ge1xuICAgICRtYXJnaW4tYmVmb3JlOiBnZXQtaXNvbGF0aW9uKCRzcGFuKTtcbiAgICAkbWFyZ2luLWFmdGVyOiAtMTAwJTtcbiAgfSBAZWxzZSBpZiAkZWRnZSB7XG4gICAgJGlzLXNwbGl0OiBpcy1zcGxpdCgkc3Bhbik7XG4gICAgJHBvczogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3Bhbik7XG5cbiAgICBAaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkZmxvYXQ6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJHNwYW4pO1xuICAgIH1cblxuICAgIEBpZiBub3QoJGlzLXNwbGl0KSB7XG4gICAgICBAaWYgJGVkZ2UgPT0gZnVsbCBvciAoJGVkZ2UgPT0gZmlyc3QgYW5kICRwb3MgPT0gYmVmb3JlKSB7XG4gICAgICAgICRtYXJnaW4tYmVmb3JlOiAwO1xuICAgICAgfVxuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGxhc3QgYW5kICRwb3MgPT0gYWZ0ZXIpIHtcbiAgICAgICAgJG1hcmdpbi1hZnRlcjogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIEByZXR1cm4gKFxuICAgIHdpZHRoICAgICAgICAgICA6ICR3aWR0aCxcbiAgICBmbG9hdCAgICAgICAgICAgOiAkZmxvYXQsXG4gICAgbWFyZ2luLWJlZm9yZSAgIDogJG1hcmdpbi1iZWZvcmUsXG4gICAgbWFyZ2luLWFmdGVyICAgIDogJG1hcmdpbi1hZnRlcixcbiAgICBwYWRkaW5nLWJlZm9yZSAgOiAkcGFkZGluZy1iZWZvcmUsXG4gICAgcGFkZGluZy1hZnRlciAgIDogJHBhZGRpbmctYWZ0ZXIsXG4gICAgZmxvdyAgICAgICAgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pLFxuICApO1xufVxuXG4vLyBHZXQgU3BhbiBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBzcGFuIHdpZHRoLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBnZXQtc3Bhbi13aWR0aChcbiAgJHNwYW5cbikge1xuICAkc3BhbiAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcblxuICAkbiAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRsb2NhdGlvbiA6IGdldC1sb2NhdGlvbigkc3Bhbik7XG4gICRjb2x1bW5zICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKTtcbiAgJGd1dHRlcnMgIDogc3VzeS1nZXQoZ3V0dGVycywgJHNwYW4pO1xuICAkc3ByZWFkICAgOiBzdXN5LWdldChzcHJlYWQsICRzcGFuKTtcblxuICAkY29udGV4dCAgOiBudWxsO1xuICAkc3Bhbi1zdW0gOiBudWxsO1xuICAkd2lkdGggICAgOiBudWxsO1xuXG4gIEBpZiAkbiA9PSAnZnVsbCcge1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuICAgICRyb2xlOiBzdXN5LWdldChyb2xlLCAkc3Bhbik7XG4gICAgJG46IGlmKCRwb3MgPT0gc3BsaXQgYW5kICRyb2xlICE9IG5lc3QsIHN1c3ktY291bnQoJGNvbHVtbnMpLCAxMDAlKTtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRuKSAhPSBudW1iZXIge1xuICAgIEB3YXJuIFwiKCN7dHlwZS1vZigkbil9KSAjeyRufSBpcyBub3QgYSB2YWxpZCBzcGFuLlwiO1xuICB9IEBlbHNlIGlmIHVuaXRsZXNzKCRuKSB7XG4gICAgJGNvbnRleHQ6IHN1c3ktc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgaWYoaXMtc3BsaXQoJHNwYW4pLCB3aWRlLCBuYXJyb3cpKTtcbiAgICAkc3ByZWFkOiBpZihpcy1pbnNpZGUoJHNwYW4pLCAkc3ByZWFkIG9yIHdpZGUsICRzcHJlYWQpO1xuICAgICRzcGFuLXN1bTogc3VzeSgkbiwgJGxvY2F0aW9uLCAkY29sdW1ucywgJGd1dHRlcnMsICRzcHJlYWQpO1xuXG4gICAgJF9tYXRoOiBzdXN5LWdldChtYXRoLCAkc3Bhbik7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJHNwYW4pO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICR3aWR0aDogJHNwYW4tc3VtICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkd2lkdGg6IHBlcmNlbnRhZ2UoJHNwYW4tc3VtIC8gJGNvbnRleHQpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJHdpZHRoOiAkbjtcbiAgfVxuXG4gIEByZXR1cm4gJHdpZHRoO1xufVxuIiwiLy8gR3V0dGVyIFN5bnRheFxuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIEd1dHRlcnNcbi8vIC0tLS0tLS1cbi8vIFNldCBndXR0ZXJzIG9uIGFuIGVsZW1lbnQuXG4vLyAtIFskc3Bhbl0gICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogcGFyc2UtZ3V0dGVycygkc3Bhbik7XG4gICRfZ3V0dGVycyA6IGdldC1ndXR0ZXJzKCRzcGFuKTtcblxuICAkX291dHB1dDogKFxuICAgIGJlZm9yZTogbWFwLWdldCgkX2d1dHRlcnMsIGJlZm9yZSksXG4gICAgYWZ0ZXI6IG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlciksXG4gICAgZmxvdzogc3VzeS1nZXQoZmxvdywgJHNwYW4pLFxuICApO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChndXR0ZXJzLCAkaW5zcGVjdCk7XG5cbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgIEBpbmNsdWRlIHBhZGRpbmctb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dCgkX291dHB1dC4uLik7XG4gIH1cbn1cblxuQG1peGluIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgQGluY2x1ZGUgZ3V0dGVycygkc3Bhbik7XG59XG5cblxuLy8gR3V0dGVyXG4vLyAtLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBndXR0ZXIuXG4vLyAtIFskc3Bhbl0gICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBndXR0ZXIoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRzcGFuOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcblxuICAkX2d1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSBvciBtYXAtZ2V0KCRfZ3V0dGVycywgYWZ0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXJzO1xufVxuXG5AZnVuY3Rpb24gZ3V0dGVycyhcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgQHJldHVybiBndXR0ZXIoJHNwYW4pO1xufVxuXG5cbi8vIEdldCBHdXR0ZXIgV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBndXR0ZXIgd2lkdGguXG4vLyAtIFskY29udGV4dF06IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGdldC1ndXR0ZXItd2lkdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRjb250ZXh0ICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVycyA6IHN1c3ktZ2V0KGd1dHRlcnMsICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgIDogc3VzeS1nZXQoZ3V0dGVyLW92ZXJyaWRlLCAkY29udGV4dCk7XG5cbiAgQGlmICRfZ3V0dGVycyBhbmQgKCRfZ3V0dGVycyA+IDApIGFuZCBub3QoJF9ndXR0ZXIpIHtcbiAgICAkX2NvbHVtbi13aWR0aDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkY29udGV4dCk7XG4gICAgJF9tYXRoOiBndXR0ZXItbWF0aCgkY29udGV4dCk7XG4gICAgQGlmICRfbWF0aCA9PSBzdGF0aWMge1xuICAgICAgJF9ndXR0ZXI6ICRfZ3V0dGVycyAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGNvbnRleHQpO1xuICAgICAgJF9zcHJlYWQgIDogaWYoaXMtc3BsaXQoJGNvbnRleHQpLCB3aWRlLCBzdXN5LWdldChzcHJlYWQsICRjb250ZXh0KSk7XG4gICAgICAkX2d1dHRlciAgOiBwZXJjZW50YWdlKCRfZ3V0dGVycyAvIHN1c3ktc3VtKCRfY29sdW1ucywgJF9ndXR0ZXJzLCAkX3NwcmVhZCkpO1xuICAgIH1cbiAgfVxuXG4gICRfZ3V0dGVyOiBpZigkX2d1dHRlciA9PSAnbm8tZ3V0dGVycycgb3IgJF9ndXR0ZXIgPT0gJ25vLWd1dHRlcicsIG51bGwsICRfZ3V0dGVyKTtcblxuICBAcmV0dXJuICRfZ3V0dGVyO1xufVxuXG5cbi8vIEdldCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGJlZm9yZSBhbmQgYWZ0ZXIgZ3V0dGVyIHZhbHVlcy5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlcnMoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRjb250ZXh0ICAgICAgICAgICAgOiBwYXJzZS1ndXR0ZXJzKCRjb250ZXh0KTtcblxuICAkX2d1dHRlci1wb3NpdGlvbiAgIDogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG4gICRfZ3V0dGVyICAgICAgICAgICAgOiBnZXQtZ3V0dGVyLXdpZHRoKCRjb250ZXh0KTtcblxuICAkX3JldHVybiAgICAgICAgICAgIDogKGJlZm9yZTogbnVsbCwgYWZ0ZXI6IG51bGwpO1xuXG4gIEBpZiBpcy1zcGxpdCgkY29udGV4dCkgYW5kICRfZ3V0dGVyIHtcbiAgICAkX2d1dHRlcjogJF9ndXR0ZXIgLyAyO1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChiZWZvcmU6ICRfZ3V0dGVyLCBhZnRlcjogJF9ndXR0ZXIpKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKCRfZ3V0dGVyLXBvc2l0aW9uOiAkX2d1dHRlcikpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBJcyBJbnNpZGVcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGd1dHRlcnMgYXJlIGluc2lkZS5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1pbnNpZGUoXG4gICRjb250ZXh0XG4pIHtcbiAgJF9pbnNpZGU6IGluc2lkZSBpbnNpZGUtc3RhdGljO1xuICAkX2d1dHRlci1wb3NpdGlvbjogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBpZihpbmRleCgkX2luc2lkZSwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gSXMgU3BsaXRcbi8vIC0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgc3BsaXQuXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gaXMtc3BsaXQoXG4gICRjb250ZXh0XG4pIHtcbiAgJF9zcGxpdDogc3BsaXQgaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfc3BsaXQsICRfZ3V0dGVyLXBvc2l0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xufVxuXG5cbi8vIEd1dHRlciBNYXRoXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBtYXRoIHRvIHVzZSBmb3IgZ3V0dGVyIGNhbGN1bGF0aW9uc1xuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGd1dHRlci1tYXRoKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkX3JldHVybiAgOiBzdXN5LWdldChtYXRoLCAkY29udGV4dCk7XG4gICRfcmV0dXJuICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpID09IGluc2lkZS1zdGF0aWMsIHN0YXRpYywgJF9yZXR1cm4pO1xuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG4iLCIvLyBJc29sYXRpb24gU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09XG5cblxuLy8gSXNvbGF0ZSBbTWl4aW5dXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFNldCBpc29sYXRpb24gYXMgYW4gb3ZlcnJpZGUuXG4vLyAtICRsb2NhdGlvbjogPHNwYW4+XG5AbWl4aW4gaXNvbGF0ZShcbiAgJGlzb2xhdGU6IDFcbikge1xuICAkaW5zcGVjdDogJGlzb2xhdGU7XG5cbiAgJG91dHB1dDogKFxuICAgIHB1c2g6IGlzb2xhdGUoJGlzb2xhdGUpLFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRpc29sYXRlKSxcbiAgKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoaXNvbGF0ZSwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBpc29sYXRlLW91dHB1dCgkb3V0cHV0Li4uKTtcbn1cblxuXG4vLyBJc29sYXRlIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGFuIGlzb2xhdGlvbiBvZmZzZXQgd2lkdGguXG4vLyAtICRsb2NhdGlvbjogPHNwYW4+XG5AZnVuY3Rpb24gaXNvbGF0ZShcbiAgJGlzb2xhdGU6IDFcbikge1xuICAkaXNvbGF0ZTogcGFyc2Utc3BhbigkaXNvbGF0ZSk7XG4gICRpc29sYXRpb246IHN1c3ktZ2V0KHNwYW4sICRpc29sYXRlKTtcblxuICBAaWYgJGlzb2xhdGlvbiBhbmQgbm90KGdldC1sb2NhdGlvbigkaXNvbGF0ZSkpIHtcbiAgICAkbmV3OiAoXG4gICAgICBzcGFuOiBudWxsLFxuICAgICAgbG9jYXRpb246ICRpc29sYXRpb24sXG4gICAgKTtcbiAgICAkaXNvbGF0ZTogbWFwLW1lcmdlKCRpc29sYXRlLCAkbmV3KTtcbiAgfVxuXG4gIEByZXR1cm4gZ2V0LWlzb2xhdGlvbigkaXNvbGF0ZSk7XG59XG5cblxuLy8gR2V0IElzb2xhdGlvblxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBpc29sYXRpb24gb2Zmc2V0IHdpZHRoXG4vLyAtICRpbnB1dDogPG1hcD5cbkBmdW5jdGlvbiBnZXQtaXNvbGF0aW9uKFxuICAkaW5wdXRcbikge1xuICAkbG9jYXRpb24gICA6IGdldC1sb2NhdGlvbigkaW5wdXQpO1xuICAkY29sdW1ucyAgICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRpbnB1dCk7XG4gICR3aWR0aCAgICAgIDogbnVsbDtcblxuICBAaWYgdHlwZS1vZigkbG9jYXRpb24pID09IG51bWJlciBhbmQgbm90KHVuaXRsZXNzKCRsb2NhdGlvbikpIHtcbiAgICAkd2lkdGg6ICRsb2NhdGlvbjtcbiAgfSBAZWxzZSBpZiAkbG9jYXRpb24ge1xuICAgICRwdXNoOiAkbG9jYXRpb24gLSAxO1xuICAgIEBpZiAkcHVzaCA+IDAge1xuICAgICAgJHB1c2g6IG1hcC1tZXJnZSgkaW5wdXQsIChcbiAgICAgICAgc3BhbjogJHB1c2gsXG4gICAgICAgIGxvY2F0aW9uOiAxLFxuICAgICAgICBzcHJlYWQ6IHdpZGUsXG4gICAgICApKTtcbiAgICAgICR3aWR0aDogZ2V0LXNwYW4td2lkdGgoJHB1c2gpO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRpbnB1dCkgPT0gc3BsaXRcbiAgICAgIGFuZCBzdXN5LWdldChndXR0ZXJzLCAkaW5wdXQpID4gMCB7XG4gICAgJHdpZHRoOiBpZigkd2lkdGggPT0gbnVsbCwgZ3V0dGVycygkaW5wdXQpLCAkd2lkdGggKyBndXR0ZXJzKCRpbnB1dCkpO1xuICB9XG5cbiAgQHJldHVybiAkd2lkdGggb3IgMDtcbn1cbiIsIi8vIEdhbGxlcnkgU3ludGF4XG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBHYWxsZXJ5XG4vLyAtLS0tLS0tXG4vLyBDcmVhdGUgYW4gaXNvbGF0ZWQgZ2FsbGVyeVxuLy8gLSAkc3BhbiAgICAgICAgOiA8c3Bhbj5cbi8vIC0gWyRzZWxlY3Rvcl0gIDogY2hpbGQgfCBvZi10eXBlXG5AbWl4aW4gZ2FsbGVyeShcbiAgJHNwYW4sXG4gICRzZWxlY3RvcjogY2hpbGRcbikge1xuICAkaW5zcGVjdCAgICA6ICRzcGFuO1xuICAkc3BhbiAgICAgICA6IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkc3BhbiAgICAgICA6IG1hcC1tZXJnZSgkc3BhbiwgKGxvY2F0aW9uOiAxKSk7XG5cbiAgJG4gICAgICAgICAgICA6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcbiAgJGNvbHVtbnMgICAgICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKTtcbiAgJGNvbnRleHQgICAgICA6IHN1c3ktY291bnQoJGNvbHVtbnMpO1xuICAkZmxvdyAgICAgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuXG4gICRpbnNpZGUgICAgICAgOiBpcy1pbnNpZGUoJHNwYW4pO1xuICAkZnJvbSAgICAgICAgIDogZnJvbSgkZmxvdyk7XG4gICRsaW5lICAgICAgICAgOiBmbG9vcigkY29udGV4dCAvICRuKTtcbiAgJHN5bW1ldHJpY2FsICA6IGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKTtcblxuICAkb3V0cHV0OiAoXG4gICAgd2lkdGggICAgICAgICAgICAgOiBudWxsLFxuICAgIGZsb2F0ICAgICAgICAgICAgIDogZnJvbSxcbiAgICBtYXJnaW4tYmVmb3JlICAgICA6IG51bGwsXG4gICAgbWFyZ2luLWFmdGVyICAgICAgOiBudWxsLFxuICAgIHBhZGRpbmctYmVmb3JlICAgIDogbnVsbCxcbiAgICBwYWRkaW5nLWFmdGVyICAgICA6IG51bGwsXG4gICAgZmxvdyAgICAgICAgICAgICAgOiAkZmxvdyxcbiAgKTtcblxuICBAaWYgJGluc2lkZSB7XG4gICAgJGd1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcbiAgICAkb3V0cHV0OiBtYXAtbWVyZ2UoJG91dHB1dCwgKFxuICAgICAgcGFkZGluZy1iZWZvcmU6IG1hcC1nZXQoJGd1dHRlcnMsIGJlZm9yZSksXG4gICAgICBwYWRkaW5nLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlciksXG4gICAgKSk7XG4gIH1cblxuICBAaWYgJHN5bW1ldHJpY2FsIHtcbiAgICAkb3V0cHV0OiBtYXAtbWVyZ2UoJG91dHB1dCwgKHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkc3BhbikpKTtcbiAgfVxuXG4gICRib3ggICAgICAgICAgOiBzdXN5LWdldChib3gtc2l6aW5nLCAkc3Bhbik7XG4gICRnbG9iYWwtYm94ICAgOiBpZihzdXN5LWdldChnbG9iYWwtYm94LXNpemluZykgPT0gJ2JvcmRlci1ib3gnLCB0cnVlLCBmYWxzZSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGdhbGxlcnksICRpbnNwZWN0KTtcblxuICAvLyBDb2xsZWN0aXZlIE91dHB1dFxuICBAaWYgJGJveCA9PSBib3JkZXItYm94IG9yICgkaW5zaWRlIGFuZCBub3QoJGJveCkgYW5kIG5vdCgkZ2xvYmFsLWJveCkpIHtcbiAgICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6IGJvcmRlci1ib3gpKTtcbiAgfSBAZWxzZSBpZiAkYm94ID09IGNvbnRlbnQtYm94IHtcbiAgICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6IGNvbnRlbnQtYm94KSk7XG4gIH1cblxuICBAaW5jbHVkZSBmbG9hdC1zcGFuLW91dHB1dCgkb3V0cHV0Li4uKTtcblxuICAvLyBJbmRpdmlkdWFsIExvb3BcbiAgQGZvciAkaXRlbSBmcm9tIDEgdGhyb3VnaCAkbGluZSB7XG4gICAgJG50aDogJyN7JGxpbmV9biArICN7JGl0ZW19JztcbiAgICAmOm50aC0jeyRzZWxlY3Rvcn0oI3skbnRofSkge1xuICAgICAgLy8gSW5kaXZpZHVhbCBQcmVwXG4gICAgICAkb3V0cHV0OiAoXG4gICAgICAgIHdpZHRoICAgICAgICAgICAgIDogaWYoJHN5bW1ldHJpY2FsLCBudWxsLCBnZXQtc3Bhbi13aWR0aCgkc3BhbikpLFxuICAgICAgICBmbG9hdCAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIG1hcmdpbi1iZWZvcmUgICAgIDogZ2V0LWlzb2xhdGlvbigkc3BhbiksXG4gICAgICAgIG1hcmdpbi1hZnRlciAgICAgIDogLTEwMCUsXG4gICAgICAgIHBhZGRpbmctYmVmb3JlICAgIDogbnVsbCxcbiAgICAgICAgcGFkZGluZy1hZnRlciAgICAgOiBudWxsLFxuICAgICAgICBmbG93ICAgICAgICAgICAgICA6ICRmbG93LFxuICAgICAgKTtcblxuICAgICAgLy8gSW5kaXZpZHVhbCBPdXRwdXRcbiAgICAgIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gICAgICBAaWYgZ2V0LWVkZ2UoJHNwYW4pID09IGZpcnN0IHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWs7XG4gICAgICAgIEBpbmNsdWRlIGZpcnN0KCRzcGFuKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBub2JyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmRpdmlkdWFsIExvY2F0aW9uIEluY3JlbWVudFxuICAgICAgJGxvY2F0aW9uOiBnZXQtbG9jYXRpb24oJHNwYW4pICsgJG47XG4gICAgICAkbG9jYXRpb246IGlmKCRsb2NhdGlvbiA+ICRjb250ZXh0LCAxLCAkbG9jYXRpb24pO1xuICAgICAgJHNwYW46IG1hcC1tZXJnZSgkc3BhbiwgKGxvY2F0aW9uOiAkbG9jYXRpb24pKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFJvdyBTdGFydCAmIEVuZFxuLy8gPT09PT09PT09PT09PT09XG5cbi8vIEJyZWFrXG4vLyAtLS0tLVxuLy8gQXBwbHkgdG8gYW55IGVsZW1lbnQgdGhhdCBzaG91bGQgZm9yY2UgYSBsaW5lIGJyZWFrLlxuQG1peGluIGJyZWFrIHtcbiAgQGluY2x1ZGUgb3V0cHV0KChjbGVhcjogYm90aCkpO1xufVxuXG5cbi8vIE5vQnJlYWtcbi8vIC0tLS0tLS1cbi8vIENhbmNlbCB0aGUgYnJlYWsoKSBlZmZlY3QsIGUuZy4gd2hlbiB1c2luZyBtZWRpYSBxdWVyaWVzLlxuQG1peGluIG5vYnJlYWsge1xuICBAaW5jbHVkZSBvdXRwdXQoKGNsZWFyOiBub25lKSk7XG59XG5cblxuLy8gRnVsbFxuLy8gLS0tLVxuLy8gLSBbJGNvbnRleHRdOiA8bGF5b3V0IHNob3J0aGFuZD5cbkBtaXhpbiBmdWxsKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCA6ICRjb250ZXh0O1xuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZnVsbCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBzcGFuKGZ1bGwgb2YgcGFyc2UtZ3JpZCgkY29udGV4dCkgYnJlYWspO1xufVxuXG5cbi8vIEZpcnN0XG4vLyAtLS0tLVxuLy8gLSBbJGNvbnRleHRdOiA8c2V0dGluZ3M+XG5AbWl4aW4gZmlyc3QoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRjb250ZXh0O1xuICAkY29udGV4dCAgOiBwYXJzZS1ncmlkKCRjb250ZXh0KTtcbiAgJGZsb3cgICAgIDogc3VzeS1nZXQoZmxvdywgJGNvbnRleHQpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChmaXJzdCwgJGluc3BlY3QpO1xuICBAaWYgbm90KGlzLXNwbGl0KCRjb250ZXh0KSkge1xuICAgIEBpbmNsdWRlIGZsb2F0LWZpcnN0KCRmbG93KTtcbiAgfVxufVxuXG5AbWl4aW4gYWxwaGEoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGZpcnN0KCRjb250ZXh0KTtcbn1cblxuXG4vLyBMYXN0XG4vLyAtLS0tXG4vLyAtIFskY29udGV4dF06IDxzZXR0aW5ncz5cbkBtaXhpbiBsYXN0KFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkY29udGV4dDtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3JpZCgkY29udGV4dCk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGxhc3QsICRpbnNwZWN0KTtcblxuICAkb3V0cHV0OiAoXG4gICAgZmxvdzogc3VzeS1nZXQoZmxvdywgJGNvbnRleHQpLFxuICAgIGxhc3QtZmxvdzogc3VzeS1nZXQobGFzdC1mbG93LCAkY29udGV4dCksXG4gICAgbWFyZ2luOiBpZihpcy1zcGxpdCgkY29udGV4dCksIG51bGwsIDApLFxuICApO1xuXG4gIEBpbmNsdWRlIGZsb2F0LWxhc3QoJG91dHB1dC4uLik7XG59XG5cbkBtaXhpbiBvbWVnYShcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgQGluY2x1ZGUgbGFzdCgkY29udGV4dCk7XG59XG5cblxuLy8gR2V0IEVkZ2Vcbi8vIC0tLS0tLS0tXG4vLyBDYWxjdWxhdGUgZWRnZSB2YWx1ZSBiYXNlZCBvbiBsb2NhdGlvbiwgaWYgcG9zc2libGVcbkBmdW5jdGlvbiBnZXQtZWRnZShcbiAgJHNwYW5cbikge1xuICAkc3BhbiAgICAgICA6IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkZWRnZSAgICAgICA6IHN1c3ktZ2V0KGVkZ2UsICRzcGFuKTtcblxuICBAaWYgbm90KCRlZGdlKSB7XG4gICAgJGNvdW50OiBzdXN5LWNvdW50KHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKSk7XG4gICAgJGxvY2F0aW9uOiBzdXN5LWdldChsb2NhdGlvbiwgJHNwYW4pO1xuICAgICRuOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG5cbiAgICAkbnVtYmVyOiBpZih0eXBlLW9mKCRsb2NhdGlvbikgPT0gbnVtYmVyLCB0cnVlLCBmYWxzZSk7XG4gICAgJGluZGV4OiBpZigkbnVtYmVyIGFuZCB1bml0bGVzcygkbG9jYXRpb24pLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBAaWYgJG4gPT0gJGNvdW50IHtcbiAgICAgICRlZGdlOiBmdWxsO1xuICAgIH0gQGVsc2UgaWYgJGxvY2F0aW9uIGFuZCAkbiBhbmQgJGluZGV4IHtcbiAgICAgIEBpZiAkbG9jYXRpb24gPT0gMSB7XG4gICAgICAgICRlZGdlOiBpZigkbiA9PSAkY291bnQsIGZ1bGwsIGZpcnN0KTtcbiAgICAgIH0gQGVsc2UgaWYgJGxvY2F0aW9uICsgJG4gLSAxID09ICRjb3VudCB7XG4gICAgICAgICRlZGdlOiBsYXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkZWRnZSA9PSBhbHBoYSBvciAkZWRnZSA9PSBvbWVnYSB7XG4gICAgJGVkZ2U6IGlmKCRlZGdlID09IGFscGhhLCBmaXJzdCwgbGFzdCk7XG4gIH1cblxuICBAcmV0dXJuICRlZGdlO1xufVxuXG5cbi8vIEdldCBMb2NhdGlvblxuLy8gLS0tLS0tLS0tLS0tXG4vLyBDYWxjdWxhdGUgbG9jYXRpb24gdmFsdWUgYmFzZWQgb24gZWRnZSwgaWYgcG9zc2libGVcbkBmdW5jdGlvbiBnZXQtbG9jYXRpb24oXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJGxvY2F0aW9uICAgOiBzdXN5LWdldChsb2NhdGlvbiwgJHNwYW4pO1xuICAkZWRnZSAgICAgICA6IGdldC1lZGdlKCRzcGFuKTtcbiAgJG4gICAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG5cbiAgQGlmICRlZGdlIGFuZCBub3QoJGxvY2F0aW9uKSBhbmQgdHlwZS1vZigkbikgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkbikge1xuICAgIEBpZiAkZWRnZSA9PSBmaXJzdCB7XG4gICAgICAkbG9jYXRpb246IDE7XG4gICAgfSBAZWxzZSBpZiAkZWRnZSA9PSBsYXN0IHtcbiAgICAgICRsb2NhdGlvbjogc3VzeS1jb3VudChzdXN5LWdldChjb2x1bW5zLCAkc3BhbikpIC0gJG4gKyAxO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxvY2F0aW9uXG59XG4iLCIvLyBNYXJnaW4gU3ludGF4XG4vLyA9PT09PT09PT09PT09XG5cbi8vIFByZVxuLy8gLS0tXG4vLyBBZGQgc3Bhbm5pbmctbWFyZ2lucyBiZWZvcmUgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHJlKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0OiAkc3BhbjtcbiAgJHNwYW4gICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuICAkc3BsaXQgIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3BhbikgPT0gc3BsaXQsIHRydWUsIGZhbHNlKTtcbiAgJGd1dHRlciA6IGd1dHRlcigkc3Bhbik7XG4gICRzcGFuICAgOiBzcGFuKCRzcGFuKTtcbiAgJHdpZHRoICA6IGlmKCRzcGxpdCBhbmQgJGd1dHRlciwgJHNwYW4gKyAkZ3V0dGVyLCAkc3Bhbik7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHByZSwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCR3aWR0aCwgbnVsbCwgJGZsb3cpO1xufVxuXG4vLyBQb3N0XG4vLyAtLS0tXG4vLyBBZGQgc3Bhbm5pbmctbWFyZ2lucyBhZnRlciBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwb3N0KFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuICAkc3BsaXQgICAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKSA9PSBzcGxpdCwgdHJ1ZSwgZmFsc2UpO1xuICAkd2lkdGggICAgOiBpZigkc3BsaXQsIHNwYW4oJHNwYW4pICsgZ3V0dGVyKCRzcGFuKSwgc3Bhbigkc3BhbikpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwb3N0LCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQobnVsbCwgJHdpZHRoLCAkZmxvdyk7XG59XG5cbi8vIFB1c2hcbi8vIC0tLS1cbi8vIFNpbXBsZSBzeW5vbnltbiBmb3IgcHJlLlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwdXNoKFxuICAkc3BhblxuKSB7XG4gIEBpbmNsdWRlIHByZSgkc3Bhbik7XG59XG5cbi8vIFB1bGxcbi8vIC0tLS1cbi8vIEFkZCBuZWdhdGl2ZSBzcGFubmluZy1tYXJnaW5zIGJlZm9yZSBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwdWxsKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuICAkc3BsaXQgICAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKSA9PSBzcGxpdCwgdHJ1ZSwgZmFsc2UpO1xuICAkd2lkdGggICAgOiBpZigkc3BsaXQsIDAgLSBzcGFuKCRzcGFuKSArIGd1dHRlcigkc3BhbiksIDAgLSBzcGFuKCRzcGFuKSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHB1bGwsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dCgkd2lkdGgsIG51bGwsICRmbG93KTtcbn1cblxuLy8gU3F1aXNoXG4vLyAtLS0tLS1cbi8vIEFkZCBzcGFubmluZy1tYXJnaW5zIGJlZm9yZSBhbmQgYWZ0ZXIgYW4gZWxlbWVudC5cbi8vIC0gJHByZSAgICAgOiA8c3Bhbj5cbi8vIC0gWyRwb3N0XSAgOiA8c3Bhbj5cbkBtaXhpbiBzcXVpc2goXG4gICRwcmUsXG4gICRwb3N0OiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICAgICAgOiAoJHByZSwgJHBvc3QpO1xuICAkcHJlICAgICAgICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwcmUpKTtcblxuICBAaWYgJHBvc3Qge1xuICAgICRwb3N0OiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHBvc3QpKTtcbiAgfSBAZWxzZSB7XG4gICAgJHNwYW46IHN1c3ktZ2V0KHNwYW4sICRwcmUpO1xuICAgIEBpZiBsZW5ndGgoJHNwYW4pID4gMSB7XG4gICAgICAkcHJlOiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMSkpKTtcbiAgICAgICRwb3N0OiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMikpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRwb3N0OiAkcHJlO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChzcXVpc2gsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgcHJlKCRwcmUpO1xuICBAaW5jbHVkZSBwb3N0KCRwb3N0KTtcbn1cbiIsIi8vIFBhZGRpbmcgU3ludGF4XG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBQcmVmaXhcbi8vIC0tLS0tLVxuLy8gQWRkIHNwYW5uaW5nLXBhZGRpbmcgYmVmb3JlIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHByZWZpeChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHdpZHRoICAgIDogc3Bhbigkc3Bhbik7XG5cbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgICRndXR0ZXI6IGd1dHRlcigkc3Bhbik7XG4gICAgJHdpZHRoOiBpZigkZ3V0dGVyIGFuZCBjb21wYXJhYmxlKCR3aWR0aCwgJGd1dHRlciksICR3aWR0aCArICRndXR0ZXIsICR3aWR0aCk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocHJlZml4LCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHBhZGRpbmctb3V0cHV0KCR3aWR0aCwgbnVsbCwgJGZsb3cpO1xufVxuXG4vLyBTdWZmaXhcbi8vIC0tLS0tLVxuLy8gQWRkIHNwYW5uaW5nLXBhZGRpbmcgYWZ0ZXIgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gc3VmZml4KFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuICAkd2lkdGggICAgOiBzcGFuKCRzcGFuKTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgJGd1dHRlcjogZ3V0dGVyKCRzcGFuKTtcbiAgICAkd2lkdGg6IGlmKCRndXR0ZXIgYW5kIGNvbXBhcmFibGUoJHdpZHRoLCAkZ3V0dGVyKSwgJHdpZHRoICsgJGd1dHRlciwgJHdpZHRoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChzdWZmaXgsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQobnVsbCwgJHdpZHRoLCAkZmxvdyk7XG59XG5cbi8vIFBhZFxuLy8gLS0tXG4vLyBBZGQgc3Bhbm5pbmctcGFkZGluZyBiZWZvcmUgYW5kIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRwcmUgICAgIDogPHNwYW4+XG4vLyAtIFskcG9zdF0gIDogPHNwYW4+XG5AbWl4aW4gcGFkKFxuICAkcHJlLFxuICAkcG9zdDogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgOiAoJHByZSwgJHBvc3QpO1xuICAkcHJlICAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHByZSkpO1xuXG4gIEBpZiAkcG9zdCB7XG4gICAgJHBvc3Q6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkcG9zdCkpO1xuICB9IEBlbHNlIHtcbiAgICAkc3Bhbjogc3VzeS1nZXQoc3BhbiwgJHByZSk7XG4gICAgQGlmIGxlbmd0aCgkc3BhbikgPiAxIHtcbiAgICAgICRwcmU6IG1hcC1tZXJnZSgkcHJlLCAoc3BhbjogbnRoKCRzcGFuLCAxKSkpO1xuICAgICAgJHBvc3Q6IG1hcC1tZXJnZSgkcHJlLCAoc3BhbjogbnRoKCRzcGFuLCAyKSkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHBvc3Q6ICRwcmU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHBhZCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBwcmVmaXgoJHByZSk7XG4gIEBpbmNsdWRlIHN1ZmZpeCgkcG9zdCk7XG5cbn1cbiIsIi8vIEJsZWVkIFN5bnRheFxuLy8gPT09PT09PT09PT09XG5cbi8vIEJsZWVkXG4vLyAtLS0tLVxuLy8gQWRkIG5lZ2F0aXZlIG1hcmdpbnMsIGFuZCBlcXVhbCBwb3NpdGl2ZSBwYWRkaW5nIHRvIGNyZWF0ZSBibGVlZC5cbi8vIC0gJGJsZWVkICA6IDxzcGFuPlxuQG1peGluIGJsZWVkKFxuICAkYmxlZWQ6IDAgZ3V0dGVyKClcbikge1xuICAkaW5zcGVjdCAgOiAkYmxlZWQ7XG4gICRvdXRwdXQgICA6IGdldC1ibGVlZCgkYmxlZWQpO1xuXG4gIEBpZiBzdXN5LWdldChnbG9iYWwtYm94LXNpemluZykgIT0gY29udGVudC1ib3gge1xuICAgICRvdXRwdXQ6IG1hcC1tZXJnZSgoYm94LXNpemluZzogY29udGVudC1ib3gpLCAkb3V0cHV0KTtcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChibGVlZCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG5cblxuLy8gQmxlZWQteFxuLy8gLS0tLS0tLVxuLy8gU2hvcnRjdXQgZm9yIGhvcml6b250YWwgYmxlZWQuXG4vLyAtICRibGVlZCAgOiA8c3Bhbj5cbkBtaXhpbiBibGVlZC14KFxuICAkYmxlZWQ6IGd1dHRlcigpXG4pIHtcbiAgJGJsZWVkICA6IHBhcnNlLXNwYW4oJGJsZWVkKTtcbiAgJHRyYmwgICA6IHN1c3ktZ2V0KHNwYW4sICRibGVlZCk7XG5cbiAgQGlmIGxlbmd0aCgkdHJibCkgPT0gMSB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogMCBudGgoJHRyYmwsIDEpKSk7XG4gIH0gQGVsc2UgaWYgbGVuZ3RoKCR0cmJsKSA9PSAyIHtcbiAgICAkYmxlZWQ6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiAwIG50aCgkdHJibCwgMikgMCBudGgoJHRyYmwsIDEpKSk7XG4gIH0gQGVsc2Uge1xuICAgIEB3YXJuICdibGVlZC14IG9ubHkgdGFrZXMgMiBsZW5ndGhzLCBidXQgI3tsZW5ndGgoJHRyYmwpfSB3ZXJlIHBhc3NlZC4nO1xuICB9XG5cbiAgQGluY2x1ZGUgYmxlZWQoJGJsZWVkKTtcbn1cblxuXG4vLyBCbGVlZC15XG4vLyAtLS0tLS0tXG4vLyBTaG9ydGN1dCBmb3IgdmVydGljYWwgYmxlZWQuXG4vLyAtICRibGVlZCAgOiA8c3Bhbj5cbkBtaXhpbiBibGVlZC15KFxuICAkYmxlZWQ6IGlmKGZ1bmN0aW9uLWV4aXN0cyhyaHl0aG0pLCByaHl0aG0oMSksIDFlbSlcbikge1xuICAkYmxlZWQgIDogcGFyc2Utc3BhbigkYmxlZWQpO1xuICAkdHJibCAgIDogc3VzeS1nZXQoc3BhbiwgJGJsZWVkKTtcblxuICBAaWYgbGVuZ3RoKCR0cmJsKSA9PSAxIHtcbiAgICAkYmxlZWQ6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiBudGgoJHRyYmwsIDEpIDApKTtcbiAgfSBAZWxzZSBpZiBsZW5ndGgoJHRyYmwpID09IDIge1xuICAgICRibGVlZDogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46IG50aCgkdHJibCwgMSkgMCBudGgoJHRyYmwsIDIpIDApKTtcbiAgfSBAZWxzZSB7XG4gICAgQHdhcm4gJ2JsZWVkLXkgb25seSB0YWtlcyAyIGxlbmd0aHMsIGJ1dCAje2xlbmd0aCgkdHJibCl9IHdlcmUgcGFzc2VkLic7XG4gIH1cblxuICBAaW5jbHVkZSBibGVlZCgkYmxlZWQpO1xufVxuXG5cbi8vIEdldCBCbGVlZFxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gYmxlZWQgb3V0cHV0IHZhbHVlc1xuLy8gLSAkYmxlZWQ6IDxzcGFuPlxuQGZ1bmN0aW9uIGdldC1ibGVlZChcbiAgJGJsZWVkXG4pIHtcbiAgJGJsZWVkICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRibGVlZCkpO1xuICAkdHJibCAgICAgOiBzdXN5LWdldChzcGFuLCAkYmxlZWQpO1xuICAkc2hvcnQgICAgOiBudWxsO1xuICAkb3V0cHV0ICAgOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkdHJibCkge1xuICAgICR0aGlzOiBudGgoJHRyYmwsICRpKTtcbiAgICAkbmV3OiAoKTtcbiAgICAkbWFyZ2luOiBudWxsO1xuICAgICRwYWRkaW5nOiBudWxsO1xuICAgICRwYWRkaW5nLXg6IG51bGw7XG5cbiAgICBAaWYgJHRoaXMgPiAwIHtcbiAgICAgICR0aGlzOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogJHRoaXMpKTtcbiAgICAgICRtYXJnaW46IHNwYW4oJHRoaXMpO1xuICAgICAgJHBhZGRpbmc6ICRtYXJnaW47XG4gICAgICAkcGFkZGluZy14OiAkcGFkZGluZztcbiAgICB9XG5cbiAgICBAaWYgJG1hcmdpbiBhbmQgJG1hcmdpbiA+IDAge1xuICAgICAgJG1hcmdpbjogLSAkbWFyZ2luO1xuXG4gICAgICBAaWYgaXMtaW5zaWRlKCR0aGlzKSB7XG4gICAgICAgICRndXR0ZXI6IGd1dHRlcigkdGhpcyk7XG4gICAgICAgICRqb2luOiBpZigkZ3V0dGVyIGFuZCBjb21wYXJhYmxlKCRwYWRkaW5nLCAkZ3V0dGVyKSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAkcGFkZGluZy14OiBpZigkam9pbiBhbmQgJHBhZGRpbmcgPiAwLCAkcGFkZGluZyArICRndXR0ZXIsICRwYWRkaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGkgPT0gMSB7XG4gICAgICAkbmV3OiAoXG4gICAgICAgIG1hcmdpbi10b3A6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctdG9wOiAkcGFkZGluZyxcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy14LFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmcsXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLXgsXG4gICAgICApO1xuICAgIH0gQGVsc2UgaWYgJGkgPT0gMiB7XG4gICAgICAkbmV3OiAoXG4gICAgICAgIG1hcmdpbi1yaWdodDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHBhZGRpbmcteCxcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmcteCxcbiAgICAgICk7XG4gICAgfSBAZWxzZSBpZiAkaSA9PSAzIHtcbiAgICAgICRuZXc6IChcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1ib3R0b206ICRwYWRkaW5nLFxuICAgICAgKTtcbiAgICB9IEBlbHNlIGlmICRpID09IDQge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tbGVmdDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZy14LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAkb3V0cHV0OiBtYXAtbWVyZ2UoJG91dHB1dCwgJG5ldyk7XG4gIH1cblxuICBAZWFjaCAkcHJvcCwgJHZhbHVlIGluICRvdXRwdXQge1xuICAgICRvdXRwdXQ6IGlmKCR2YWx1ZSA9PSAwLCBtYXAtbWVyZ2UoJG91dHB1dCwgKCRwcm9wOiBudWxsKSksICRvdXRwdXQpO1xuICB9XG5cbiAgQHJldHVybiBibGVlZC1zaG9ydGhhbmQoJG91dHB1dCk7XG59XG5cbi8vIEJsZWVkIFNob3J0aGFuZFxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBDb252ZXJ0IGJsZWVkIG91dHB1dCBpbnRvIHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLlxuLy8gLSAkYmxlZWQ6IDxvdXRwdXQgbWFwPlxuQGZ1bmN0aW9uIGJsZWVkLXNob3J0aGFuZChcbiAgJGJsZWVkXG4pIHtcbiAgJG1hcmdpbjogKCk7XG4gICRwYWRkaW5nOiAoKTtcbiAgJHJldHVybjogKCk7XG5cbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRibGVlZCB7XG4gICAgQGlmIHN0ci1pbmRleCgka2V5LCBtYXJnaW4pIHtcbiAgICAgICRtYXJnaW46IG1hcC1tZXJnZSgkbWFyZ2luLCAoJGtleTogJHZhbHVlKSk7XG4gICAgfSBAZWxzZSBpZiBzdHItaW5kZXgoJGtleSwgcGFkZGluZykgPiAwIHtcbiAgICAgICRwYWRkaW5nOiBtYXAtbWVyZ2UoJHBhZGRpbmcsICgka2V5OiAkdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAkcHJvcHM6IChcbiAgICBtYXJnaW46ICRtYXJnaW4sXG4gICAgcGFkZGluZzogJHBhZGRpbmcsXG4gICk7XG5cbiAgQGVhY2ggJG5hbWUsICRtYXAgaW4gJHByb3BzIHtcbiAgICAkZm91cjogaWYobGVuZ3RoKG1hcC1rZXlzKCRtYXApKSA9PSA0LCB0cnVlLCBmYWxzZSk7XG4gICAgJG51bGw6IGlmKGluZGV4KG1hcC12YWx1ZXMoJG1hcCksIG51bGwpLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBAaWYgJGZvdXIgYW5kIG5vdCgkbnVsbCkge1xuICAgICAgJHRvcDogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tdG9wJyk7XG4gICAgICAkcmlnaHQ6IG1hcC1nZXQoJG1hcCwgJyN7JG5hbWV9LXJpZ2h0Jyk7XG4gICAgICAkYm90dG9tOiBtYXAtZ2V0KCRtYXAsICcjeyRuYW1lfS1ib3R0b20nKTtcbiAgICAgICRsZWZ0OiBtYXAtZ2V0KCRtYXAsICcjeyRuYW1lfS1sZWZ0Jyk7XG5cbiAgICAgICR0YjogaWYoJHRvcCA9PSAkYm90dG9tLCAkdG9wLCBudWxsKTtcbiAgICAgICRybDogaWYoJHJpZ2h0ID09ICRsZWZ0LCAkcmlnaHQsIG51bGwpO1xuICAgICAgJGFsbDogaWYoJHRiID09ICRybCwgJHRiLCBudWxsKTtcblxuICAgICAgJG5ldzogaWYoJGFsbCwgJGFsbCwgbnVsbCk7XG5cbiAgICAgIEBpZiBub3QoJG5ldykge1xuICAgICAgICBAaWYgJHRiIGFuZCAkcmwge1xuICAgICAgICAgICRuZXc6ICR0YiAkcmw7XG4gICAgICAgIH0gQGVsc2UgaWYgJHJsIHtcbiAgICAgICAgICAkbmV3OiAkdG9wICRybCAkYm90dG9tO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkbmV3OiAkdG9wICRyaWdodCAkYm90dG9tICRsZWZ0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJG5hbWU6ICRuZXcpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAkbWFwKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG4iLCIvLyBCcmVha3BvaW50IEludGVncmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiRzdXN5LW1lZGlhOiAoKSAhZGVmYXVsdDtcbiRzdXN5LW1lZGlhLWZhbGxiYWNrOiBmYWxzZSAhZGVmYXVsdDtcblxuJF9zdXN5LW1lZGlhLWNvbnRleHQ6ICgpO1xuXG5cbi8vIFN1c3kgQnJlYWtwb2ludFxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGFuZ2UgZ3JpZHMgYXQgZGlmZmVyZW50IG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRzLlxuLy8gLSAkcXVlcnkgICAgIDogPG1pbi13aWR0aD4gWzxtYXgtd2lkdGg+XSB8IDxwcm9wZXJ0eT4gPHZhbHVlPiB8IDxtYXA+XG4vLyAtICRsYXlvdXQgICAgOiA8c2V0dGluZ3M+XG4vLyAtICRuby1xdWVyeSAgOiA8Ym9vbGVhbj4gfCA8c2VsZWN0b3I+XG5AbWl4aW4gc3VzeS1icmVha3BvaW50KFxuICAkcXVlcnksXG4gICRsYXlvdXQ6IGZhbHNlLFxuICAkbm8tcXVlcnk6ICRzdXN5LW1lZGlhLWZhbGxiYWNrXG4pIHtcbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1yb3V0ZXIoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICBAaWYgJGxheW91dCB7XG4gICAgICBAaW5jbHVkZSB3aXRoLWxheW91dCgkbGF5b3V0KSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3VzeSBNZWRpYVxuLy8gLS0tLS0tLS0tLVxuLy8gLSAkcXVlcnk6IDxtaW4td2lkdGg+IFs8bWF4LXdpZHRoPl0gfCA8cHJvcGVydHk+IDx2YWx1ZT5cbi8vIC0gJG5vLXF1ZXJ5OiA8Ym9vbGVhbj4gfCA8c2VsZWN0b3I+XG5AbWl4aW4gc3VzeS1tZWRpYShcbiAgJHF1ZXJ5LFxuICAkbm8tcXVlcnk6ICRzdXN5LW1lZGlhLWZhbGxiYWNrXG4pIHtcbiAgJG9sZC1jb250ZXh0OiAkX3N1c3ktbWVkaWEtY29udGV4dDtcbiAgJG5hbWU6IGlmKG1hcC1oYXMta2V5KCRzdXN5LW1lZGlhLCAkcXVlcnkpLCAkcXVlcnksIG51bGwpO1xuICAkcXVlcnk6IHN1c3ktZ2V0LW1lZGlhKCRxdWVyeSk7XG4gICRxdWVyeTogc3VzeS1wYXJzZS1tZWRpYSgkcXVlcnkpO1xuXG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtY29udGV4dCgkcXVlcnksICRuYW1lKTtcblxuICBAaWYgJG5vLXF1ZXJ5IGFuZCB0eXBlLW9mKCRuby1xdWVyeSkgIT0gc3RyaW5nIHtcbiAgICBAY29udGVudDtcbiAgfSBAZWxzZSB7XG4gICAgQG1lZGlhICN7c3VzeS1yZW5kZXItbWVkaWEoJHF1ZXJ5KX0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgQGlmIHR5cGUtb2YoJG5vLXF1ZXJ5KSA9PSBzdHJpbmcge1xuICAgICAgI3skbm8tcXVlcnl9ICYge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LW1lZGlhLWNvbnRleHQoJG9sZC1jb250ZXh0LCAkY2xlYW46IHRydWUpO1xufVxuXG5cbi8vIE1lZGlhIFJvdXRlclxuLy8gLS0tLS0tLS0tLS0tXG4vLyBSb3V0IG1lZGlhIGFyZ3VtZW50cyB0byB0aGUgY29ycmVjdCBtaXhpbi5cbkBtaXhpbiBzdXN5LW1lZGlhLXJvdXRlcihcbiAgJHF1ZXJ5LFxuICAkbm8tcXVlcnk6ICRzdXN5LW1lZGlhLWZhbGxiYWNrXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChicmVha3BvaW50LCAobWl4aW46IGJyZWFrcG9pbnQpLCAkd2FybjogZmFsc2UpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIHN1c3ktbWVkaWEoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFVwZGF0ZSBDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBTZXQgdGhlIG5ldyBtZWRpYSBjb250ZXh0XG5AbWl4aW4gc3VzeS1tZWRpYS1jb250ZXh0KFxuICAkcXVlcnksXG4gICRuYW1lOiBudWxsLFxuICAkY2xlYW46IGZhbHNlXG4pIHtcbiAgJHF1ZXJ5OiBtYXAtbWVyZ2UoKG5hbWU6ICRuYW1lKSwgJHF1ZXJ5KTtcblxuICBAaWYgJGNsZWFuIHtcbiAgICAkX3N1c3ktbWVkaWEtY29udGV4dDogJHF1ZXJ5ICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRfc3VzeS1tZWRpYS1jb250ZXh0OiBtYXAtbWVyZ2UoJF9zdXN5LW1lZGlhLWNvbnRleHQsICRxdWVyeSkgIWdsb2JhbDtcbiAgfVxufVxuXG5cbi8vIE1lZGlhIENvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgZnVsbCBtZWRpYSBjb250ZXh0LCBvciBhIHNpbmdsZSBtZWRpYSBwcm9wZXJ0eSAoZS5nLiBtaW4td2lkdGgpXG5AZnVuY3Rpb24gc3VzeS1tZWRpYS1jb250ZXh0KFxuICAkcHJvcGVydHk6IGZhbHNlXG4pIHtcbiAgQGlmICRwcm9wZXJ0eSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRfc3VzeS1tZWRpYS1jb250ZXh0LCAkcHJvcGVydHkpO1xuICB9IEBlbHNlIHtcbiAgICBAcmV0dXJuICRfc3VzeS1tZWRpYS1jb250ZXh0O1xuICB9XG59XG5cblxuLy8gR2V0IE1lZGlhXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybiBhIG5hbWVkIG1lZGlhLXF1ZXJ5IGZyb20gJHN1c3ktbWVkaWEuXG4vLyAtICRuYW1lOiA8a2V5PlxuQGZ1bmN0aW9uIHN1c3ktZ2V0LW1lZGlhKFxuICAkbmFtZVxuKSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkc3VzeS1tZWRpYSwgJG5hbWUpIHtcbiAgICAkbWFwLXZhbHVlOiBtYXAtZ2V0KCRzdXN5LW1lZGlhLCAkbmFtZSk7XG4gICAgQGlmICgkbmFtZSA9PSAkbWFwLXZhbHVlKSB7XG4gICAgICAkbmFtZTogJG1hcC12YWx1ZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRuYW1lOiBzdXN5LWdldC1tZWRpYSgkbWFwLXZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRuYW1lO1xufVxuXG5cbi8vIFJlbmRlciBNZWRpYVxuLy8gLS0tLS0tLS0tLS0tXG4vLyBCdWlsZCBhIG1lZGlhLXF1ZXJ5IHN0cmluZyBmcm9tIHZhcmlvdXMgbWVkaWEgc2V0dGluZ3NcbkBmdW5jdGlvbiBzdXN5LXJlbmRlci1tZWRpYShcbiAgJHF1ZXJ5XG4pIHtcbiAgJG91dHB1dDogbnVsbDtcbiAgQGVhY2ggJHByb3BlcnR5LCAkdmFsdWUgaW4gJHF1ZXJ5IHtcbiAgICAkc3RyaW5nOiBudWxsO1xuXG4gICAgQGlmICRwcm9wZXJ0eSA9PSBtZWRpYSB7XG4gICAgICAkc3RyaW5nOiAkdmFsdWU7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkc3RyaW5nOiAnKCN7JHByb3BlcnR5fTogI3skdmFsdWV9KSc7XG4gICAgfVxuXG4gICAgJG91dHB1dDogaWYoJG91dHB1dCwgJyN7JG91dHB1dH0gYW5kICN7JHN0cmluZ30nLCAkc3RyaW5nKTtcbiAgfVxuXG4gIEByZXR1cm4gJG91dHB1dDtcbn1cblxuXG4vLyBQYXJzZSBNZWRpYVxuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiBwYXJzZWQgbWVkaWEtcXVlcnkgc2V0dGluZ3MgYmFzZWQgb24gc2hvcnRoYW5kXG5AZnVuY3Rpb24gc3VzeS1wYXJzZS1tZWRpYShcbiAgJHF1ZXJ5XG4pIHtcbiAgJG1xOiBudWxsO1xuICBAaWYgdHlwZS1vZigkcXVlcnkpID09IG1hcCB7XG4gICAgJG1xOiAkcXVlcnk7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkcXVlcnkpID09IG51bWJlciB7XG4gICAgJG1xOiAobWluLXdpZHRoOiAkcXVlcnkpO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBsaXN0IGFuZCBsZW5ndGgoJHF1ZXJ5KSA9PSAyIHtcbiAgICBAaWYgdHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gbnVtYmVyIHtcbiAgICAgICRtcTogKFxuICAgICAgICBtaW4td2lkdGg6IG1pbigkcXVlcnkuLi4pLFxuICAgICAgICBtYXgtd2lkdGg6IG1heCgkcXVlcnkuLi4pLFxuICAgICAgKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRtcTogKG50aCgkcXVlcnksIDEpOiBudGgoJHF1ZXJ5LCAyKSk7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICAkbXE6IChtZWRpYTogJyN7JHF1ZXJ5fScpO1xuICB9XG5cbiAgQHJldHVybiAkbXE7XG59XG4iLCIuc2tpcCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtMTAwMHB4O1xuICAgICAgICBsZWZ0OiAtMTAwMHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmVkO1xuICAgICAgICBjb2xvcjogI2VlZTtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgXG5hLnNraXA6YWN0aXZlLCBcbmEuc2tpcDpmb2N1cywgXG5hLnNraXA6aG92ZXIge1xuICAgIGxlZnQ6IDA7IFxuICAgIHRvcDogMDtcbiAgICB3aWR0aDogYXV0bzsgXG4gICAgaGVpZ2h0OiBhdXRvOyBcbiAgICBvdmVyZmxvdzogdmlzaWJsZTsgXG59IFxuXG5bcm9sZT1cImJhbm5lclwiXSB7XG4gICAgQGluY2x1ZGUgYmxlZWQoZ3V0dGVyKCkpO1xuICAgIHBhZGRpbmctdG9wOiAxZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvcm9ja3ktbWFpbmUtY29hc3QuanBnKSBuby1yZXBlYXQgLTUwcHggMDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1NWVtKSB7XG5cbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICAgICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICB9XG5cbiAgICAuYmlnbG9nbyB7XG4gICAgICAgIG1hcmdpbjogLjI1ZW0gMDtcbiAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWFyZ2luOiAuMjVlbSBhdXRvO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7ICBcbiAgICAgICAgICAgIG1heC13aWR0aDogMzAlO1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOyAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgICAgICAgICAgQGluY2x1ZGUgc3BhbigzIG9mIDEyKTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFyZW07XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogc3BhbigxIG9mIDEyKSArIGd1dHRlcigpO1xuXG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC50b2xsZnJlZSB7XG4gICAgICAgIGNvbG9yOiAkc2RtYmx1ZTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBmb250LWZhbWlseTogJGhlYWRlci1mb250O1xuICAgICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IC41ZW0gYXV0bztcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNwYW4oNSBvZiAxMik7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgZm9udC1zaXplOiAyZW07XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxLjA5ZW07XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRiaWcpIHtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnQ2FsbCBEUk06ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59IFxuXG5oZWFkZXIuZGV2LW1vZGUge1xuICAgIGJvcmRlci1ib3R0b206IDEycHggc29saWQgcmVkO1xufVxuXG5bcm9sZT1cIm5hdmlnYXRpb25cIl0ge1xuICAgIC8vIG1hcmdpbjogZ3V0dGVyKCk7XG5cbiAgICB1bCB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgICAgICAgICAgcGFkZGluZzogZ3V0dGVyKCkvNDtcbiAgICAgICAgICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHNkbWJsdWU7XG5cbiAgICAgICAgICAgIHdpZHRoOiBzcGFuKGZ1bGwpO1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gICAgICAgIH1cblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgICAgICAgICAgLy8gICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIC8vIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGhpZHBpKSB7XG4gICAgICAgICAgICAvLyAgICAgZm9udC1zaXplOiAyZW07XG5cbiAgICAgICAgICAgIC8vICAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgZm9udC1zaXplOiAxLjEyNWVtO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICAuc3VibmF2IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLnNlY3Rpb24tbmF2IHtcbiAgICAgICAgdWwge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyogSW1wb3J0YW50IHN0dWZmIG9mZi1jYW52YXMgbmF2IHN0dWZmICovXG5cbnVsLm1lbnUge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1NWVtKSB7XG4gICAgICAgIEBpbmNsdWRlIHNwYW4oNSBvZiAxMik7XG5cbiAgICB9XG5cbiAgXG4gIGxpIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBmb250LWZhbWlseTogJGhlYWRlci1mb250O1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogRml4ZXMgRmlyZWZveCBidWcgKi9cbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAyMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAuMjVlbSAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2RtYmx1ZTtcbiAgICAgICAgY29sb3I6ICRwYWxlO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHNkbWJsdWUsIDIwJSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN1cHBvcnQge1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwYWxlO1xuICAgICAgICAgICAgY29sb3I6ICRzZG1ibHVlO1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRzZG1ibHVlLCA2MCUpO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkc2RtYmx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgICAgICBAaW5jbHVkZSBzcGFuKDIgb2YgOCk7XG5cbiAgICAgICAgLy8gJjpudGgtY2hpbGQoMykge1xuICAgICAgICAvLyAgICAgQGluY2x1ZGUgc3BhbigzIG9mIDExKSA7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAmOm50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBsYXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXG5cbiAgICBsaSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMWVtO1xuXG4gICAgfVxuICB9XG59XG5cbiAgLyogUmV2ZWFsIG9wZW4vY2xvc2UgYnV0dG9ucyAqL1xuICBhI21lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiAkcGFsZTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgZm9udC1mYW1pbHk6ICRoZWFkZXItZm9udDtcbiAgICBmb250LXNpemU6IDEuMTI1ZW07XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cbiAgXG4gIC5jbG9zZS1wYW5lbCB7XG4gICAgY29sb3I6ICRwYWxlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiAuNWVtO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1NWVtKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTVlbSkge1xuICBcbiAgI2NvbnRlbnQge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG4gIFxuIC8qIE1vdmUgbmF2IG9mZiBzY3JlZW4sIHNldHVwIHRyYW5zaXRpb25zICovXG4gW3JvbGU9XCJuYXZpZ2F0aW9uXCJdIHtcbiAgICB3aWR0aDogMzAwcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwMHB4LCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMzAwcHgsIDApO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG4gICAgdG9wOiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiAkc2RtYmx1ZTtcbiAgICB6LWluZGV4OiA0MDtcblxuICAgICYub3BlbiB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwwKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwwKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qIERpc3BsYXkgbmF2IGl0ZW1zIHZlcnRpY2FsbHkgKi9cbiAgdWwubWVudSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRwYWxlO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkcGFsZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgPmxpK2xpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbiAgICBcbiAgICBsaSB7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkc2RtYmx1ZTtcblxuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6IC41ZW0gMWVtO1xuICAgICAgICBjb2xvcjogJHBhbGU7XG4gICAgICB9XG5cbiAgICAgID51bD5saSB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgfSBcblxuICAgIH1cbiAgfVxuXG59IiwiLmdldC1oZWxwIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIG1hcmdpbi1ib3R0b206IGd1dHRlcigpO1xuXG4gIC8vIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAvLyAgIEBpbmNsdWRlIHNwYW4oMTAgb2YgMTApO1xuICAvLyB9XG5cbiAgaDIge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxLjU1ZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgLmFkYS1yZWQge1xuICAgICAgICBjb2xvcjogI0NDM0EyOTtcbiAgICB9XG5cbiAgICAuYWRhLWJsdWUge1xuICAgICAgICBjb2xvcjogIzA5NjM5QztcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KDUyNnB4KSB7XG4gICAgICBmb250LXNpemU6IDJlbTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KDYyNnB4KSB7XG4gICAgICBmb250LXNpemU6IDIuMjVlbTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIH1cblxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCg3NmVtKSB7XG4gICAgICBmb250LXNpemU6IDIuNzVlbTtcbiAgICB9XG4gIH1cblxuICBoZWFkZXIge1xuICAgIGJvcmRlci1ib3R0b206IDA7IFxuICB9XG5cbiAgaGVhZGVyIHAge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IC41ZW07XG4gIH1cblxuICB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxLjEyNWVtO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbjogNXB4O1xuICAgICAgZmxleDogMCAxIGNhbGMoMzMuMzMlIC0gMTBweCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygwLCAtNHB4LCA0cHgsIHJnYmEoMCwwLDAsMC4zKSwgaW5zZXQpO1xuXG4gICAgICBhIHtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2RtYmx1ZTsgIFxuICAgICAgICBjb2xvcjogJHBhbGU7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGhvdmVyYmx1ZTtcbiAgICAgICAgICAgIC8vIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbXVsdGlwbHk7XG4gICAgICAgIH1cbiAgICAgICAgJi5sb25nLW5hbWUge1xuICAgICAgICAgICAgZm9udC1zaXplOiA4NSU7XG4gICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTtcbiAgICAgICAgICBcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRiaWcpIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuIFxuICAgIH1cblxuICB9XG5cbiAgcCB7XG4gICAgcGFkZGluZzogLjc1ZW0gMCAxLjVlbSAwO1xuICB9XG5cbn1cblxuLmhlcm9pYyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICAvLyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAvLyBAaW5jbHVkZSBzcGFuKGZ1bGwpO1xuICBtYXJnaW4tYm90dG9tOiBndXR0ZXIoKTtcbiAgXG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCg2MDBweCkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgfVxufVxuXG5cbi5oZXJvIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMzMztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygxcHgsIDFweCwgMTBweCwgIzMzMyk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAvLyBoZWlnaHQ6IDI0MHB4O1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICAvLyBAaW5jbHVkZSBzcGFuKGZ1bGwpO1xuICAvLyBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgbWFyZ2luLWxlZnQ6IGd1dHRlcigpO1xuICBtYXJnaW4tcmlnaHQ6IGd1dHRlcigpO1xuICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoNjAwcHgpIHtcbiAgICBmbGV4LWJhc2lzOiA1MCU7XG4gICAgLy8gQGluY2x1ZGUgc3Bhbig2IG9mIDEyKTsgICAgXG4gIH1cblxuXG5cbiAgYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgLy8gbWl4LWJsZW5kLW1vZGU6IGRpZmZlcmVuY2U7XG5cbiAgICBwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBpc29sYXRpb246IGlzb2xhdGU7XG5cbiAgICAmK3Age1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICB9XG5cbiAgICAmLmxlZnQge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmLnJpZ2h0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW07XG4gICAgfVxuICB9XG5cbiAgLmNhcHRpb24ge1xuICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgfVxuXG4gICYuYmxvZ3Byb21vIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAuaGVhZGxpbmUge1xuICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgfVxuXG4gICAgLnRlYXNlciB7XG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG4gIH1cbn0iLCIuZHluYW1vIHtcbiAgbWluLWhlaWdodDogMjAwcHg7XG4gIGNsZWFyOiBib3RoO1xuICBvdmVyZmxvdzogYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogZ3V0dGVyKCk7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxufVxuXG4ubmV3cy1icmllZnMge1xuICAgLy8gaGVpZ2h0OiAyNTRweDtcbiAgcGFkZGluZzogZ3V0dGVyKCk7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgYmFja2dyb3VuZDogI2U5ZTllOTtcbiAgLy8gYmFja2dyb3VuZDogIzcxQURGMDtcblxuICBAaW5jbHVkZSBib3gtc2hhZG93KDFweCwgMXB4LCAxMHB4LCAjNDQ0KTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRiaWcpIHtcbiAgICBAaW5jbHVkZSBzcGFuKDUgb2YgMTApOyAgICBcbiAgfVxuXG4gIGxpIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICBcbiAgICBhIHtcbiAgICAgIGNvbG9yOiAjMjIyO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgLy8gbGluZS1oZWlnaHQ6IDJlbTtcbiAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxLjEyNWVtO1xuXG4gICAgICAuc25pcHBldCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkYm9keS1mb250O1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmZhLXN0YWNrIHtcbiAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgQGluY2x1ZGUgc3BhbigxIG9mIDUpO1xuICAgIHdpZHRoOiAxLjVlbTtcbiAgICBoZWlnaHQ6IDEuNWVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAuZmEtbmV3c3BhcGVyLW8ge1xuICAgICAgY29sb3I6ICRwYWxlO1xuICAgIH1cblxuICAgIC5mYS1mbGFnIHtcbiAgICAgIGNvbG9yOiAkZGVlcHJlZDtcbiAgICB9XG5cbiAgICAuZmEtY2FsZW5kYXIge1xuICAgICAgY29sb3I6ICRjYWxlbmRhcmJsdWU7XG4gICAgfVxuXG4gICAgLmZhLXVzZXJzIHtcbiAgICAgIGNvbG9yOiAkZHJtZ3JlZW47XG4gICAgfVxuICB9XG5cbiAgLnRleHQge1xuICAgIEBpbmNsdWRlIHNwYW4oOCBvZiAxMCk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY2FsZW5kYXJibHVlO1xuICAgIH1cbiAgfVxufVxuXG5cbi5taXNzaW9uIHtcblxuICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRkcm1saWdodGdyZWVuLCA1MCUpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KDFweCwgMXB4LCAxMHB4LCAjNDQ0KTtcbiAgLy8gYm9yZGVyOiAxcHggc29saWQgcmVkO1xuICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgQGluY2x1ZGUgc3Bhbig5IG9mIDkpO1xuXG4gIC5jb2xsYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgXG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIEBpbmNsdWRlIHNwYW4oMyBvZiA5KTtcbiAgICBoZWlnaHQ6IDE1MHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDMgb2YgOSBsYXN0KTtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgLy8gaGVpZ2h0OiBhdXRvO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgLmNvbGxhZ2Uge1xuICAgICAgaGVpZ2h0OiAxNzVweDtcbiAgICB9XG4gIH1cblxuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgIHBhZGRpbmc6IGd1dHRlcigpO1xuXG4gICAgLy8gLnNxdWFyZXMge1xuICAgIC8vICAgZGlzcGxheTogZmxleDtcbiAgICAvLyB9XG4gICAgXG4gICAgLmNvbGxhZ2Uge1xuICAgICAgQGluY2x1ZGUgc3BhbigyIG9mIDkpO1xuICAgICAgaGVpZ2h0OiAyMDBweDtcblxuICAgICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgICBAaW5jbHVkZSBzcGFuKDIgb2YgOSBsYXN0KTtcbiAgICAgIH1cblxuICAgIH1cbiAgICBcblxuICAgIHAge1xuICAgICAgQGluY2x1ZGUgc3BhbigzIG9mIDkpO1xuICAgICAgZm9udC1zaXplOiAxLjI1ZW07XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIH1cbiAgfVxufVxuXG4ubmV3c2FyY2hpdmUge1xuXG4gIHNlY3Rpb24ge1xuICAgIG1hcmdpbi10b3A6IDJlbTtcblxuICAgIGgyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZGFya2RybTtcbiAgICB9XG4gIH1cblxuICBoMyBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICBhcnRpY2xlICsgYXJ0aWNsZSB7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuICB9XG59XG5cbltyb2xlPVwibWFpblwiXSBsaS5uZXdzbGlzdGluZyB7XG5cbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIHBhZGRpbmc6IC41ZW07XG5cbiAgc3Bhbi5mYS1zdGFjayB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXRvcDogLS41ZW07XG4gIH1cblxuICBtYXJnaW4tbGVmdDogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG4gIGEge1xuICAgIGNvbG9yOiAjMjIyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjYWxlbmRhcmJsdWU7XG4gICAgfVxuICB9XG5cbiAgaDQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4iLCIudXBjb21pbmcge1xuICBiYWNrZ3JvdW5kOiAkcGFsZTtcbiAgcGFkZGluZzogZ3V0dGVyKCk7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgLy8gbWFyZ2luLXRvcDogZ3V0dGVyKCk7XG4gICAgQGluY2x1ZGUgc3Bhbig1IG9mIDEwIGxhc3QpO1xuICB9XG59XG5cblxuXG4udXBjb21pbmcge1xuICAvLyBoZWlnaHQ6IDEwMCU7XG4gIC8vIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KDFweCwgMXB4LCAxMHB4LCAjNDQ0KTtcblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6bm9uZTtcbiAgICB9XG5cbiAgICBoNCBhIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGNvbG9yOiAjMjIyO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjYWxlbmRhcmJsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5jYWxlbmRhciB7XG4gICAgd2lkdGg6IDQ4cHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZGFya2JsdWU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAuNWVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cblxuICAgIC5tb250aCB7XG4gICAgICBmb250LWZhbWlseTogJGhlYWRlci1mb250O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNhbGVuZGFyYmx1ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5kYXkge1xuICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAuOTVlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIH1cbiAgfVxuXG59XG5cbi50cmFpbmluZyB7XG5cbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbi1ib3R0b206IC43NWVtO1xuXG4gIGEge1xuICAgIGNvbG9yOiAjMjIyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjYWxlbmRhcmJsdWU7XG4gICAgfVxuICB9XG5cbiAgaDQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLmNhbGVuZGFyIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRkYXJrYmx1ZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IC41ZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblxuXG4gICAgLm1vbnRoIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FsZW5kYXJibHVlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgLmRheSB7XG4gICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgbGluZS1oZWlnaHQ6IC45NWVtO1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuICB9XG59XG5cblxuLmxvZ2lzdGljcyB7XG5cbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcblxuICBkdCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBkZCArIGR0IHtcbiAgICBtYXJnaW4tdG9wOiAxZW07XG4gIH1cbn1cblxuXG5bcm9sZT1cIm1haW5cIl0ge1xuICAmLmV2ZW50cyB7XG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAyLjVlbTtcbiAgICAgIFxuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYmlnKSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41ZW07XG4gICAgICB9XG5cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJpZ2dlcikge1xuICAgICAgICBmb250LXNpemU6IDIuNWVtO1xuICAgICAgfVxuXG4gICAgfVxuICB9ICBcbn1cbiIsIi5jb250YWN0IHtcblxuICB1bCB7XG4gICAgbWFyZ2luLWxlZnQ6IDJlbTtcbiAgfVxuXG4gIC5xdWVzdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICB9XG5cbiAgcCB7XG4gICAgbWFyZ2luLXRvcDogLjVlbTtcbiAgfVxuXG4gIC5nb29nbGVtYXAge1xuICAgIG1hcmdpbjogMWVtIGF1dG87XG5cbiAgfVxuXG4gIC5kc2EtaW5mbyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIHBhZGRpbmctdG9wOiAxZW07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRkcm1saWdodGdyZWVuO1xuICB9XG5cblxuICAuZmYtZm9ybS1zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRzZG1ibHVlLCAyMCUpO1xuICAgIHBhZGRpbmc6IDJyZW07XG4gICAgZm9udC1zaXplOiAxLjI1cmVtOyBcbiAgfVxuXG4gIGZvcm0ge1xuICAgICAgICBpbnB1dCwgdGV4dGFyZWEge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMztcbiAgICAgIEBpbmNsdWRlIHNwYW4oNSBvZiAxMCk7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAkZGVlcHJlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBidXR0b24uc3VibWl0LWJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkZHJtZ3JlZW47XG4gICAgICBjb2xvcjogJHBhbGU7XG4gICAgICAvLyBtYXJnaW4tdG9wOiAxZW07XG4gICAgICAvLyBtYXJnaW4tbGVmdDogc3Bhbig1IG9mIDEwKTtcbiAgICAgIC8vIEBpbmNsdWRlIHNwYW4oMiBvZiAxMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9ybSB7XG5cbiAgLy8gICAjbW9uc3RlcnNhdWNlIHtcbiAgLy8gICAgIGRpc3BsYXk6IG5vbmU7XG4gIC8vICAgfVxuXG4gIC8vICAgbWFyZ2luLXRvcDogMWVtO1xuXG4gIC8vICAgZGl2IHtcbiAgLy8gICAgIG92ZXJmbG93OiBhdXRvO1xuICAvLyAgIH1cblxuICAvLyAgIGRpdiArIGRpdiB7XG4gIC8vICAgICBtYXJnaW4tdG9wOiAxZW07XG4gIC8vICAgfVxuXG4gIC8vICAgbGFiZWwge1xuICAvLyAgICAgQGluY2x1ZGUgc3BhbigyIG9mIDEwKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpbnB1dCwgdGV4dGFyZWEge1xuICAvLyAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMztcbiAgLy8gICAgIEBpbmNsdWRlIHNwYW4oNSBvZiAxMCk7XG5cbiAgLy8gICAgICY6Zm9jdXMge1xuICAvLyAgICAgICBib3JkZXI6IDJweCBzb2xpZCAkZGVlcHJlZDtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgJi5zdWJtaXQge1xuICAvLyAgICAgICBiYWNrZ3JvdW5kOiAkZHJtZ3JlZW47XG4gIC8vICAgICAgIGNvbG9yOiAkcGFsZTtcbiAgLy8gICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAvLyAgICAgICBtYXJnaW4tbGVmdDogc3Bhbig1IG9mIDEwKTtcbiAgLy8gICAgICAgQGluY2x1ZGUgc3BhbigyIG9mIDEwKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG5cbiAgLy8gICBzZWxlY3Qge1xuICAvLyAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMztcbiAgLy8gICAgIGJhY2tncm91bmQ6ICNlZWU7XG4gIC8vICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgLy8gICB9XG5cbiAgLy8gICBidXR0b24ge1xuICAgICAgXG4gIC8vICAgICBtYXJnaW4tbGVmdDogc3Bhbig0IG9mIDgpICsgZ3V0dGVyKCk7XG4gIC8vICAgICBAaW5jbHVkZSBzcGFuKDIgb2YgOCk7XG5cbiAgLy8gICB9XG4gIC8vIH1cblxuXG4gIC5vZmZpY2VNYXAge1xuICAgIG1hcmdpbi10b3A6IDJlbTtcbiAgfVxufVxuXG5cbltyb2xlPVwibWFpblwiXS5pbnRha2Vmb3JtIHtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KDU1ZW0pIHtcbiAgICBAaW5jbHVkZSBzcGFuKDggb2YgMTIpO1xuICAgIG1hcmdpbi1sZWZ0OiBzcGFuKDIpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogM2VtO1xuICB9XG5cblxufVxuXG5cbi5jb250YWN0LmludGFrZWZvcm0gZm9ybSBpbnB1dCwgLmNvbnRhY3QuaW50YWtlZm9ybSBmb3JtIHRleHRhcmVhIHtcbiAgZmxvYXQ6IG5vbmU7XG59XG5cblxuLmludGFrZWZvcm0gLmZyZWVmb3JtLWNvbHVtbi1jb250ZW50LWFsaWduLWxlZnQgPiBidXR0b246bnRoLWNoaWxkKDEpIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAuNWVtO1xuICBib3JkZXItcmFkaXVzOiAwOyBcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICBtYXJnaW4tdG9wOiAuMjVlbTtcbiAgZm9udC1mYW1pbHk6ICRoZWFkZXItZm9udDtcbiAgZm9udC1zaXplOiAxLjVyZW07XG4gIGJhY2tncm91bmQ6ICRzZG1ibHVlO1xuICBjb2xvcjogI2ZmZjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkaG92ZXJibHVlO1xuICAgIGNvbG9yOiAjMDAwO1xuICB9XG59IiwiI2xpZ2h0Z2FsbGVyeSB7XG4gQGluY2x1ZGUgc3BhbigxMiBvZiAxMik7XG4gbWFyZ2luLWJvdHRvbTogMWVtO1xuIFxufVxuXG4ubGlzdC11bnN0eWxlZCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZSBvdXRzaWRlIG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xufVxuXG4uZ2FsbGVyeSBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbGVmdDtcbiAgICBoZWlnaHQ6IDE1MHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB3aWR0aDogMTUwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4vLyAuZ2FsbGVyeSBsaSBhIHtcbi8vICAgICBoZWlnaHQ6IDE1MHB4O1xuLy8gICAgIHdpZHRoOiAxNTBweDtcbi8vIH1cblxuLmdhbGxlcnkgYSBpbWcge1xuICAgIG1heC13aWR0aDogMTUwcHg7XG59XG5cbi5sZy1vdXRlciAubGctaW1nLXdyYXA6YmVmb3JlLCAubGctb3V0ZXIgLmxnLWl0ZW06YmVmb3JlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5sZy1pdGVtIDo6YmVmb3JlIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ubGctc3ViLWh0bWwge1xuICAgIGJvdHRvbTogMTUwcHg7XG4gICAgZm9udC1zaXplOiAxLjEyNWVtO1xufVxuXG4ubGctdG9vbGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLy8gYm9vZ2EgYm9vZ2Fcbi8vIFxuLy8gcmVmdWdlZXMgZnJvbSBtaXNzaW5nIGZpbGVcbi8vIC5oZXJvIGltZy5sZWZ0IHtcbi8vICAgZmxvYXQ6IGxlZnQ7XG4vLyAgIG1hcmdpbi1yaWdodDogMWVtO1xuLy8gfVxuXG4vLyAuaGVybyBpbWcucmlnaHQge1xuLy8gICBmbG9hdDogcmlnaHQ7XG4vLyAgIG1hcmdpbi1sZWZ0OiAxZW07XG4vLyB9IiwiZm9vdGVyIHtcbiAgQGluY2x1ZGUgc3BhbihmdWxsKTtcbiAgcGFkZGluZzogZ3V0dGVyKCkgc3BhbigxKSA7XG4gIGJhY2tncm91bmQ6ICRzZG1ibHVlO1xuICBjb2xvcjogJHBhbGU7XG5cbiAgYSB7XG4gICAgY29sb3I6IHJnYigxNTgsMjMyLDI0NSk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgfVxuXG4gIC5pbmZvIHtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig0IG9mIDgpO1xuICAgIH1cblxuICAgIGhlYWRlciB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAuNWVtO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAuODVlbTtcblxuICAgICAgLm1haW5lc2hhcmUge1xuICAgICAgICBtYXgtd2lkdGg6IDM1JTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaW50ZXJhY3Qge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCg1NWVtKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDQgb2YgOCBsYXN0KTtcbiAgICB9XG5cbiAgICAvLyAubWFpbGluZ2xpc3Qge1xuICAgIC8vICAgYmFja2dyb3VuZDogIzMzOTkwMDtcbiAgICAvLyAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cbiAgICAvLyAgIGEge1xuICAgIC8vICAgICBmb250LWZhbWlseTogJGhlYWRlci1mb250O1xuICAgIC8vICAgICBjb2xvcjogJGRhcmtkcm07XG4gICAgLy8gICB9XG5cbiAgICAvLyAgIGltZyB7XG4gICAgLy8gICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyAgICAgaGVpZ2h0OiBhdXRvO1xuICAgIC8vICAgfVxuXG4gICAgLy8gICBAaW5jbHVkZSBzcGFuKDEgb2YgNCk7XG4gICAgLy8gICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgICAvLyB9XG5cbiAgICAuc3VydmV5IHtcblxuICAgICAgQGluY2x1ZGUgc3Bhbig0IG9mIDQgbGFzdCk7XG4gICAgICBwYWRkaW5nOiBndXR0ZXIoKTtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHBhbGU7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNvY2lhbCB7XG4gICAgICBtYXJnaW4tdG9wOiAyZW07XG4gICAgICBAaW5jbHVkZSBzcGFuKDQgb2YgNCBsYXN0KTtcbiAgICAgIC8vIGJhY2tncm91bmQ6ICRwYWxlO1xuICAgICAgLy8gcGFkZGluZzogZ3V0dGVyKCk7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogZ3V0dGVyKCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyLjVlbTtcblxuICAgICAgICAmLnRleHRidXR0b24ge1xuICAgICAgICAgIHBhZGRpbmc6IGd1dHRlcjtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQ7XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmZhLXNxdWFyZSB7XG4gICAgICAgICAgY29sb3I6ICRwYWxlO1xuICAgICAgICB9XG5cblxuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIlxuI3N0YWZmIHtcblxuICB1bCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG5cbiAgbGkge1xuICAgIC8vIEBpbmNsdWRlIGdhbGxlcnkoNSBvZiAxMCk7XG4gICAgQGluY2x1ZGUgc3BhbigyIG9mIDQpO1xuICAgIG1hcmdpbi1ib3R0b206IGd1dHRlcigpO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDIgb2YgNCBsYXN0KTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgzIHtcbiAgICAgIGNvbG9yOiAkZGFya2JsdWU7XG4gICAgICBwYWRkaW5nLXRvcDogZ3V0dGVyKCkgKiAyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIGZvbnQtc2l6ZTogMS4xMjVlbTtcbiAgICB9XG5cbiAgICAuaGVhZHNob3Qge1xuICAgICAgQGluY2x1ZGUgc3BhbigxIG9mIDEyKTtcbiAgICAgIG1hcmdpbi1yaWdodDogZ3V0dGVyKCk7XG4gICAgfVxuXG4gICAgLmpvYnRpdGxlIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuXG4ucGVyc29uLWRldGFpbCB7XG5cbiAgaGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgcGFkZGluZy1ib3R0b206IDFlbTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGRybWdyZWVuO1xuICB9XG5cbiAgYS5lbWFpbCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgLmJpbyB7XG4gICAgbWFyZ2luOiAxZW0gMCAyZW0gMDtcbiAgfVxufVxuXG5cbi5mYSB7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG4jYm9hcmQge1xuXG4gIGgzIHtcbiAgICBtYXJnaW4tdG9wOiAxZW07XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cbiAgbGkge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBAaW5jbHVkZSBzcGFuKDIgb2YgNSk7XG4gIH1cblxufVxuXG4uYm9hcmQgIC5ib2FyZC1kZXNjcmlwdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgfVxuXG4ucHVibGljYXRpb25saXN0IHtcbiAgbGkge1xuXG4gICAgYSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICAgIHBhZGRpbmctYm90dG9tOiAuMjVlbTtcbiAgfVxufSIsIi5zdXBwb3J0IG1haW4ge1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoNTVlbSkge1xuICAgIGltZyB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDMgb2YgOCk7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyZW07XG4gICAgfVxuICB9XG5cbiAgLmRpc2NsYWltZXIge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxufSIsIlxuLmJsdWUtdGV4dCB7IGNvbG9yOiBvcmFuZ2U7IGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5yZWRhY3Rvci1kcm9wZG93biAucmVkYWN0b3ItZHJvcGRvd24taW5kZW50ZWQtdGV4dCwgXG4ucmVkYWN0b3ItZWRpdG9yIC5pbmRlbnRlZC10ZXh0IHsgdGV4dC1pbmRlbnQ6IDNlbTsgfVxuXG4ucmVkYWN0b3ItZHJvcGRvd24gLnJlZGFjdG9yLWRyb3Bkb3duLWFjdGlvbi1idXR0b24sXG4ucmVkYWN0b3ItZWRpdG9yIC5hY3Rpb24tYnV0dG9uIHsgY29sb3I6ICNmZmY7IGJhY2tncm91bmQ6ICNmMDA7IH1cbi5yZWRhY3Rvci1lZGl0b3IgLmFjdGlvbi1idXR0b24geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDVweCAxMHB4OyB9IiwiLnNlY3Rpb24tbmF2LmJsb2cge1xuICBcbiAgaDMge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRkYXJrZHJtO1xuICB9XG5cbiAgLmNhdC10aXRsZSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbiAgdWwgbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDJlbTtcbiAgfVxuXG4gIHVsIHVsIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbn1cblxuaGVhZGVyLmJsb2cge1xuICAvLyBAaW5jbHVkZSBzcGFuKGZ1bGwpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tYm90dG9tOiAyZW07XG5cbiAgLmhlYWRzaG90IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgIHAuYXV0aG9yIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG5cbiAgICAgIGEge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmJsb2dhcmNoaXZlIHtcbiAgXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG5cbiAgLm1ldGEge1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgZm9udC1zaXplOiAuODVlbTtcbiAgICBjb2xvcjogIzMzMztcbiAgfVxuXG4gIC50ZWFzZXIge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuXG4gIHNlY3Rpb24gKyBzZWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiA0ZW07XG4gIH1cblxufVxuXG5cbi5wb3N0LWNhdGVnb3JpZXMge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJG1lZGl1bWdyYXk7XG4gIG1hcmdpbi10b3A6IDJlbTtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBiYWNrZ3JvdW5kOiAkcGFsZTtcblxuICBoMyB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgfVxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59IiwiXG4uc2VhcmNoLWZvcm0ge1xuXG5cdGlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW1ncmF5O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRwYWxlO1xuXHRcdHBhZGRpbmc6IDZweDtcblx0fVxuXG5cdC5idXR0b24ge1xuXHRcdHBhZGRpbmc6IDZweDtcblx0XHRiYWNrZ3JvdW5kOiAkaG92ZXJibHVlO1xuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRjb2xvcjogI2ZmZjtcblx0fVxufVxuXG5uYXYuc2VhcmNoLXBhZ2Uge1xuXHRtYXJnaW4tYm90dG9tOiA0cmVtO1xuXG59XG5cbmhlYWRlciB7XG5cdFxuXHQuaGVhZGVyLXNlYXJjaCB7XG5cdFx0d2lkdGg6IHNwYW4oNiBvZiAxMik7XG5cdFx0Ly8gYm9yZGVyOiAxcHggc29saWQgcmVkO1xuXHRcdG1hcmdpbjogMCAwIDAgMjUlO1xuXHRcdGhlaWdodDogM3JlbTtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRvdmVyZmxvdzogYXV0bztcblx0fVxuXG5cdC5zZWFyY2gtZm9ybSB7XG5cdFx0bWFyZ2luLXRvcDogNnB4O1xuXHRcdC8vIGJvcmRlcjogMXB4IHNvbGlkIHB1cnBsZTtcblx0fVxufVxuXG4uc2VhcmNoLXBhZ2Uge1xuXG5cdC5zZWFyY2gtZm9ybSB7XG5cblx0XHRpbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcblx0XHRcdHdpZHRoOiBzcGFuKDYgb2YgMTIpO1xuXG5cdFx0fVxuXHR9XG5cblx0LnJlc3VsdCArIC5yZXN1bHQge1xuXHRcdG1hcmdpbi10b3A6IDFyZW07XG5cdH1cbn0iLCJcblxuXG5AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSkgeyAgXG4gICAvKiBJRTEwKyBzcGVjaWZpYyBzdHlsZXMgZ28gaGVyZSAqLyAgXG4gICAgLmdldC1oZWxwIHtcbiAgICAgIHVsIHtcbiAgICAgICAgXG4gICAgICAgIGxpIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgZmxleC1iYXNpczogY2FsYygzMy4zMyUgLSAxMHB4KTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhlcm9pYyB7XG4gICAgICBcbiAgICAgIC5oZXJvIHtcblxuICAgICAgICBtaW4taGVpZ2h0OiAxcHg7XG5cbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuXG5cbiAgICAgICAgLy8gcGFkZGluZzogMDtcblxuICAgICAgICBhIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuYmxvZ3Byb21vIHtcblxuICAgICAgICAgIC5oZWFkbGluZSwgaDMsIC50ZWFzZXIge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGEge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbn1cblxuXG4vLyAuZ2V0LWhlbHAge1xuXG4vLyAgIHVsIHtcbi8vICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbi8vICAgICBmb250LXNpemU6IDEuMTI1ZW07XG4vLyAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuLy8gICAgIHBhZGRpbmc6IDA7XG4vLyAgICAgbWFyZ2luOiAwO1xuXG4vLyAgICAgbGkge1xuLy8gICAgICAgQGluY2x1ZGUgZ2FsbGVyeSgzIG9mIDkpO1xuLy8gICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIC00cHggNHB4IHJnYmEoMCwwLDAsMC4zKSk7XG4vLyAgICAgICBiYWNrZ3JvdW5kOiAkZGFya2RybTtcbi8vICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuLy8gICAgICAgbWFyZ2luLWJvdHRvbTogZ3V0dGVyKCk7XG5cbi8vICAgICB9XG5cbi8vICAgICBsaSArIGxpIHtcbi8vICAgICAgIG1hcmdpbi1ib3R0b206IGd1dHRlcigpO1xuLy8gICAgIH1cbi8vICAgfVxuLy8gfSJdLCJtYXBwaW5ncyI6IkFDQUEsK0VBQStFO0FBa0IvRTs7R0FFRztBQUVILEFBQUEsS0FBSyxDQUFDO0VBQ0wsZ0JBQWdCLEVBQUUsSUFBSztDQUN2Qjs7QUFFRCxBQUFvQixLQUFmLEFBQUEsSUFBSyxFQUFBLEFBQUEsQUFBUyxRQUFSLEFBQUEsR0FBVztFQUNyQixPQUFPLEVBQUUsSUFBSztDQUNkOztBQUVELEFBQUEsT0FBTyxDQUFDO0VBQ1AsT0FBTyxFQUFFLEtBQU07Q0FDZjs7QUFFRCxBQUFBLEtBQUssQ0FDSCxBQUFBLElBQUMsQ0FBSyxRQUFRLEFBQWIsRUFBZTtF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 */
