/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./data/www/templates/asgard/eshop.setos.cz/sass/embla-buttons.scss ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************/
/**
 * Retrieves the next smaller breakpoint from the given breakpoint.
 *
 * @param {String} $breakpoint - The breakpoint for which to find the next smaller breakpoint.
 * @return {String|null} - The next smaller breakpoint, or null if no smaller breakpoint is available.
 */
/**
 * Retrieves the next larger breakpoint from the $grid-breakpoints map.
 *
 * @function get-bigger-breakpoint
 * @param {String} $breakpoint - The current breakpoint to find the next larger one for.
 * @return {String | null} - The next larger breakpoint or null if the current breakpoint is the largest or not found.
 */
/**
 * Reset iSpace custom form input styles to be able to design special inputs more easily
 */
/**
 * Styles to hide the scrollbar but still allow scrolling
 */
/**
 * Special version of the card-box() layout for the B2B shop
 */
/**
 * card-box list layout for the B2B shop
 */
.embla__buttons {
  position: absolute;
  display: flex;
  gap: 1rem;
  align-items: center;
  bottom: clamp(1rem, 2vw, 4rem);
  right: clamp(1rem, 2vw, 4rem);
  background-color: #fff;
  border-radius: 18px;
  z-index: 10;
}
.embla__button {
  position: static;
  height: 3.6rem;
  width: 3rem;
  opacity: 1;
}
.embla__button--prev {
  transform: translateY(0);
  padding-inline-start: 1rem;
}
.embla__button--next {
  transform: scaleX(-1) translateY(0);
  padding-inline-start: 1rem;
}
.embla__button svg {
  stroke-width: 0;
  color: #383838;
}
.embla__button:where([disabled]) {
  cursor: default;
}
.embla__button:where([disabled]) svg {
  color: #b1b1b1;
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./data/www/templates/asgard/default/sass/embla-pagination.scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************/
.embla__pagination {
  margin-top: 3rem;
  display: block;
}
.embla__pagination button {
  width: 2rem;
  height: 2rem;
  position: relative;
}
.embla__pagination button::before, .embla__pagination button::after {
  content: "";
  border-radius: 50%;
  position: absolute;
  inset: 0;
  margin: auto;
}
.embla__pagination button::after {
  width: 0.9rem;
  height: 0.9rem;
  background-color: #dedede;
}
.embla__pagination button.is-active::after {
  background-color: #8ed609;
}
/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./data/www/templates/asgard/eshop.setos.cz/sass/product-card-slider.scss ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************/
/**
 * Retrieves the next smaller breakpoint from the given breakpoint.
 *
 * @param {String} $breakpoint - The breakpoint for which to find the next smaller breakpoint.
 * @return {String|null} - The next smaller breakpoint, or null if no smaller breakpoint is available.
 */
/**
 * Retrieves the next larger breakpoint from the $grid-breakpoints map.
 *
 * @function get-bigger-breakpoint
 * @param {String} $breakpoint - The current breakpoint to find the next larger one for.
 * @return {String | null} - The next larger breakpoint or null if the current breakpoint is the largest or not found.
 */
/**
 * Reset iSpace custom form input styles to be able to design special inputs more easily
 */
/**
 * Styles to hide the scrollbar but still allow scrolling
 */
/**
 * Special version of the card-box() layout for the B2B shop
 */
/**
 * card-box list layout for the B2B shop
 */
.product-card-slider {
  container-name: product-card-slider;
  container-type: inline-size;
}
@media (max-width: 991.98px) {
  .product-card-slider .embla__slide {
    max-width: clamp(30rem, 42vw, 44rem);
  }
}
.product-card-slider .embla__viewport {
  overflow: visible;
  overflow-x: clip;
  z-index: 1;
}
@media (max-width: 991.98px) {
  .product-card-slider .embla__viewport {
    margin-inline: 0;
  }
}
.product-card-slider .embla__container {
  display: grid;
  grid-auto-flow: column;
  grid-auto-rows: var(--product-card-grid-rows);
}
.product-card-slider .embla__container:where(.embla__container--basket) {
  --product-card-grid-rows: max-content;
  grid-auto-columns: clamp(130px, 20vw, 184px);
}
.product-card-slider .embla__container:where(.embla__container--basket) .embla__slide {
  margin-inline-start: 10px;
}
.product-card-slider .embla__container:where(:not(.embla__container--basket)) {
  grid-auto-columns: clamp(31rem, 33vw, 33.7rem);
}
@container product-card-slider (width < 570px) {
  .product-card-slider .embla__container:where(:not(.embla__container--basket)) {
    --product-card-grid-rows: calc(clamp(12rem, 12vh, 16rem) + var(--thumbnail-padding) * 2) auto auto auto auto auto auto auto auto auto auto;
  }
}
.product-card-slider .embla__container:where(:not(.embla__container--basket)) .embla__slide {
  margin-inline-start: 3rem;
  grid-template-rows: subgrid;
}
@supports (grid-template-rows: subgrid) {
  @container product-card-slider (width > 569.999px) {
    .product-card-slider .embla__container:where(:not(.embla__container--basket)) .embla__slide {
      align-items: normal;
    }
  }
  @container product-card-slider (width < 570px) {
    .product-card-slider .embla__container:where(:not(.embla__container--basket)) .embla__slide {
      grid-template-columns: 3fr 4fr;
    }
  }
}
.product-card-slider .embla__slide {
  transition: none !important;
}
.product-card-slider .embla__slide:where(.product-card) {
  margin-block-end: 0;
}

@supports (background: -webkit-named-image(i)) {
  .products-section:has(> .product-card-slider) {
    overflow-x: clip;
  }
  body .embla:where(:not(.embla--full-width)) {
    overflow: visible !important;
  }
}
.products-section__typo .embla__controls {
  display: none;
}
@media (min-width: 992px) {
  .products-section__typo .embla__controls {
    display: block;
  }
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmVzaG9wLnNldG9zLmN6LmFzZ2FyZC5wcm9kdWN0LWNhcmQtc2xpZGVyLjA1OTAzNDA4Mjg3OTc4ZmRjOWU0LmNzcyIsIm1hcHBpbmdzIjoiOzs7QUFHQTs7Ozs7RUFBQTtBQWlCQTs7Ozs7O0VBQUE7QUM4UEE7O0VBQUE7QUErSEE7O0VBQUE7QUFlQTs7RUFBQTtBQW1HQTs7RUFBQTtBQ2hnQkk7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUN1QlI7QURwQkk7RUFDSTtFQUdJO0VBQ0E7RUFDQTtBQ29CWjtBRGpCUTtFQUNJO0VBR0k7QUNpQmhCO0FEYlE7RUFDSTtFQUdJO0FDYWhCO0FEVFE7RUFDSTtFQUNBO0FDV1o7QURSUTtFQUNJO0FDVVo7QURSWTtFQUNJO0FDVWhCLEM7Ozs7QUN4REk7RUFDSTtFQUNBO0FDRlI7QURJUTtFRUZKLFdGR3dCO0VFRnhCLFlGRXdCO0VBRWhCO0FDRlo7QURJWTtFQUVJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUNIaEI7QURNWTtFRWhCUixhRmlCNEI7RUVoQjVCLGNGZ0I0QjtFQUVoQjtBQ0poQjtBRE9ZO0VBQ0k7QUNMaEIsQzs7OztBTHBCQTs7Ozs7RUFBQTtBQWlCQTs7Ozs7O0VBQUE7QUM4UEE7O0VBQUE7QUErSEE7O0VBQUE7QUFlQTs7RUFBQTtBQW1HQTs7RUFBQTtBTTlmQTtFQUNJO0VBQ0E7QUFxQko7QUNnREk7RURqRVE7SUFDSTtFQW9CZDtBQUNGO0FBakJRO0VBQ0k7RUFDQTtFQUNBO0FBbUJaO0FDc0NJO0VENURJO0lBTVE7RUFvQmQ7QUFDRjtBQWpCUTtFQUNJO0VBQ0E7RUFDQTtBQW1CWjtBQWpCWTtFQUNJO0VBRUE7QUFrQmhCO0FBZm9CO0VBQ0k7QUFpQnhCO0FBWlk7RUFDSTtBQWNoQjtBQVpnQjtFQUhKO0lBSVE7RUFlbEI7QUFDRjtBQVpvQjtFQUNJO0VBQ0E7QUFjeEI7QUFad0I7RUFDSTtJQUxSO01BTVk7SUFlNUI7RUFDRjtFQWIwQjtJQVRSO01BVVk7SUFnQjVCO0VBQ0Y7QUFDRjtBQVZRO0VBRUk7QUFXWjtBQVRZO0VBQ0k7QUFXaEI7O0FBSkE7RUFDSTtJQUNJO0VBT047RUFKRTtJQUNJO0VBTU47QUFDRjtBQUFZO0VBQ0k7QUFFaEI7QUFBZ0I7RUFISjtJQUlRO0VBR2xCO0FBQ0YsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nob3Bpby8uL2RhdGEvd3d3L3RlbXBsYXRlcy9hc2dhcmQvZXNob3Auc2V0b3MuY3ovc2Fzcy9hcHAvYWJzdHJhY3RzL19mbnMuc2NzcyIsIndlYnBhY2s6Ly9zaG9waW8vLi9kYXRhL3d3dy90ZW1wbGF0ZXMvYXNnYXJkL2VzaG9wLnNldG9zLmN6L3Nhc3MvYXBwL2Fic3RyYWN0cy9fbWl4aW5zLnNjc3MiLCJ3ZWJwYWNrOi8vc2hvcGlvLy4vZGF0YS93d3cvdGVtcGxhdGVzL2FzZ2FyZC9lc2hvcC5zZXRvcy5jei9zYXNzL2VtYmxhL19idXR0b25zLnNjc3MiLCJ3ZWJwYWNrOi8vc2hvcGlvLy4vZGF0YS93d3cvdGVtcGxhdGVzL2FzZ2FyZC9lc2hvcC5zZXRvcy5jei9zYXNzL2VtYmxhLWJ1dHRvbnMuc2NzcyIsIndlYnBhY2s6Ly9zaG9waW8vLi9kYXRhL3d3dy90ZW1wbGF0ZXMvYXNnYXJkL2RlZmF1bHQvc2Fzcy9lbWJsYS9fcGFnaW5hdGlvbi5zY3NzIiwid2VicGFjazovL3Nob3Bpby8uL2RhdGEvd3d3L3RlbXBsYXRlcy9hc2dhcmQvZGVmYXVsdC9zYXNzL2VtYmxhLXBhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly9zaG9waW8vLi9kYXRhL3d3dy90ZW1wbGF0ZXMvYXNnYXJkL2RlZmF1bHQvc2Fzcy9hcHAvYWJzdHJhY3RzL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly9zaG9waW8vLi9kYXRhL3d3dy90ZW1wbGF0ZXMvYXNnYXJkL2VzaG9wLnNldG9zLmN6L3Nhc3MvcHJvZHVjdC1jYXJkLXNsaWRlci5zY3NzIiwid2VicGFjazovL3Nob3Bpby8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnc2FzczptYXAnO1xuQHVzZSAnc2FzczpsaXN0JztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5leHQgc21hbGxlciBicmVha3BvaW50IGZyb20gdGhlIGdpdmVuIGJyZWFrcG9pbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IC0gVGhlIGJyZWFrcG9pbnQgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIG5leHQgc21hbGxlciBicmVha3BvaW50LlxuICogQHJldHVybiB7U3RyaW5nfG51bGx9IC0gVGhlIG5leHQgc21hbGxlciBicmVha3BvaW50LCBvciBudWxsIGlmIG5vIHNtYWxsZXIgYnJlYWtwb2ludCBpcyBhdmFpbGFibGUuXG4gKi9cbkBmdW5jdGlvbiBnZXQtc21hbGxlci1icmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgJGtleXM6IG1hcC5rZXlzKCRncmlkLWJyZWFrcG9pbnRzKTtcbiAgICAkaW5kZXg6IGxpc3QuaW5kZXgoJGtleXMsICRicmVha3BvaW50KTtcblxuICAgIEBpZiBub3QgJGluZGV4IG9yICRpbmRleCA9PSAxIHtcbiAgICAgICAgQHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIEByZXR1cm4gbGlzdC5udGgoJGtleXMsICRpbmRleCAtIDEpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbmV4dCBsYXJnZXIgYnJlYWtwb2ludCBmcm9tIHRoZSAkZ3JpZC1icmVha3BvaW50cyBtYXAuXG4gKlxuICogQGZ1bmN0aW9uIGdldC1iaWdnZXItYnJlYWtwb2ludFxuICogQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IC0gVGhlIGN1cnJlbnQgYnJlYWtwb2ludCB0byBmaW5kIHRoZSBuZXh0IGxhcmdlciBvbmUgZm9yLlxuICogQHJldHVybiB7U3RyaW5nIHwgbnVsbH0gLSBUaGUgbmV4dCBsYXJnZXIgYnJlYWtwb2ludCBvciBudWxsIGlmIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgaXMgdGhlIGxhcmdlc3Qgb3Igbm90IGZvdW5kLlxuICovXG5AZnVuY3Rpb24gZ2V0LWxhcmdlci1icmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgJGtleXM6IG1hcC5rZXlzKCRncmlkLWJyZWFrcG9pbnRzKTtcbiAgICAkaW5kZXg6IGxpc3QuaW5kZXgoJGtleXMsICRicmVha3BvaW50KTtcblxuICAgIEBpZiBub3QgJGluZGV4IG9yICRpbmRleCA9PSBsaXN0Lmxlbmd0aCgkYnJlYWtwb2ludCkge1xuICAgICAgICBAcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgQHJldHVybiBsaXN0Lm50aCgka2V5cywgJGluZGV4ICsgMSk7XG59XG4iLCJAdXNlICdzYXNzOmNvbG9yJztcbkB1c2UgJ3Nhc3M6bWFwJztcbkB1c2UgJ3Nhc3M6bGlzdCc7XG5cbi8vICogVmlzdWFscyBmb3Igc21hbGwgYmxvY2tzIHdpdGggYSBob3ZlciAvIGZvY3VzLXdpdGhpbiBlZmZlY3QgaW5jbHVkZWRcbi8vICogVG8gbW9kaWZ5IGRlZmF1bHQgdmFsdWVzLCB5b3UgY291bGQgdXNlIEBpbmNsdWRlIHNtYWxsLWJsb2NrLWNvbXBvbmVudChtYXAuc2V0KCRjb25maWcsICdyYWRpdXMnLCAyMHB4KSlcbkBtaXhpbiBzbWFsbC1ibG9jay1jb21wb25lbnQoXG4gICAgJHJhZGl1czogMTBweCxcbiAgICAkYmFja2dyb3VuZC1zdGFydDogY29sb3IuYWRqdXN0KG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgcHJpbWFyeS1saWdodCksICRhbHBoYTogLTEpLFxuICAgICRiYWNrZ3JvdW5kLWVuZDogY29sb3IuYWRqdXN0KG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgcHJpbWFyeS1taWQpLCAkYWxwaGE6IDApLFxuICAgICRib3gtc2hhZG93LXN0YXJ0OiAwIDRweCAyMHB4IDAgIzAwMDAwMDE0LFxuICAgICRib3gtc2hhZG93LWVuZDogMCA0cHggNHB4IDAgIzAwMDAwMDE0LFxuICAgICR0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgMC4xNXMsIGJveC1zaGFkb3cgbGluZWFyIDAuMTVzJ1xuKSB7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1zdGFydDtcbiAgICBib3gtc2hhZG93OiAkYm94LXNoYWRvdy1zdGFydDtcbiAgICB0cmFuc2l0aW9uOiAjeyR0cmFuc2l0aW9ufTtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cy13aXRoaW4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1lbmQ7XG4gICAgICAgIGJveC1zaGFkb3c6ICRib3gtc2hhZG93LWVuZDtcbiAgICB9XG59XG5cbkBtaXhpbiB3aWRlLWNhcmQoJGJyZWFrcG9pbnQ6ICd4bCcpIHtcbiAgICAkc21hbGxlci1icmVha3BvaW50OiBnZXQtbGFyZ2VyLWJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpO1xuXG4gICAgLnByb2R1Y3QtY2FyZCB7XG4gICAgICAgIC0tdGh1bWJuYWlsLXdpZHRoOiAyMDBweDtcbiAgICAgICAgLS1mbGFnLWZvbnQtc2l6ZTogMS4ycmVtO1xuXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgbGlnaHQpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMjBweCAwIHJnYigwLCAwLCAwLCAwLjA3KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuXG4gICAgICAgICZfX2lubmVyIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDNyZW07XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgJHNtYWxsZXItYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRzbWFsbGVyLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAtLXRodW1ibmFpbC13aWR0aDogMjgwcHg7XG4gICAgICAgICAgICAgICAgLS1mbGFnLWZvbnQtc2l6ZTogMS42cmVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xuICAgICAgICAgICAgJl9faW5uZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS10aHVtYm5haWwtd2lkdGgpIDFmciBhdXRvO1xuICAgICAgICAgICAgICAgIGdyaWQtYXV0by1yb3dzOiBhdXRvO1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0cmVtO1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogM3JlbSA0cmVtIDNyZW0gMDtcblxuICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgICAgICBncmlkLXJvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICZfX3ByaW1hcnksXG4gICAgICAgICAgICAmX19zZWNvbmRhcnkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmX19zZWNvbmRhcnkge1xuICAgICAgICAgICAgICAgICYtaW5uZXIge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBjb250ZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICZfX3RodW1ibmFpbCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiB2YXIoLS10aHVtYm5haWwtd2lkdGgpO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzMHB4O1xuICAgICAgICAgICAgICAgIGdyaWQtYXJlYTogYXV0bztcblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjQwcHg7XG4gICAgICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI0MHB4O1xuICAgICAgICAgICAgICAgICAgICBpbnNldDogMDtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJl9fdmFyaWFudHMge1xuICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxO1xuICAgICAgICAgICAgICAgIGdyaWQtcm93OiA2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmX19oZWFkaW5nIHtcbiAgICAgICAgICAgICAgICBncmlkLWNvbHVtbjogMiAvIC0xO1xuICAgICAgICAgICAgICAgIGdyaWQtcm93OiAyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMi4ycmVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmX19wZXJleCB7XG4gICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDIgLyAtMTtcbiAgICAgICAgICAgICAgICBncmlkLXJvdzogMztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJl9fcGFyYW1ldGVycyB7XG4gICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDIgLyAtMTtcbiAgICAgICAgICAgICAgICBncmlkLXJvdzogNDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJl9fYXZhaWxhYmlsaXR5IHtcbiAgICAgICAgICAgICAgICBncmlkLWNvbHVtbjogMiAvIC0xO1xuICAgICAgICAgICAgICAgIGdyaWQtcm93OiA1O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmX19wcmljZSB7XG4gICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDY7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICAgICAgICAgLmNhcmQtcHJpY2Uge1xuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBnYXA6IDAgMS42cmVtO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgICAgICAgICAgICAgICZfX2Z1bGwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyLjJyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogbWFwLmdldCgkdGhlbWUtY29sb3JzLCBkYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICZfX2Rpc2NvdW50LFxuICAgICAgICAgICAgICAgICAgICAmX19zYXZpbmcge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjZyZW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICZfX2ZsYWdzIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgICAgICAgICByaWdodDogLTEzcHg7XG4gICAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgICBwbGFjZS1zZWxmOiBzdGFydCBlbmQ7XG4gICAgICAgICAgICAgICAgZ2FwOiAwLjNyZW07XG5cbiAgICAgICAgICAgICAgICBbY2xhc3MqPSdfX2l0ZW0nXSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMjJlbSAwLjYzZW07XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mbGFnLWZvbnQtc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzKj0nX190ZXh0J10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOiAnd2dodCcgNDAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmX19hZGQge1xuICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAzO1xuICAgICAgICAgICAgICAgIGdyaWQtcm93OiA2O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgICAgICAgICAmLWxpbmsge1xuICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDIwNXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gKiBBZGQgaW52ZXJ0ZWQgYm9yZGVyIHJhZGl1cyBjb3JuZXJzXG4vLyAqIG1hc2sgdmFsdWVzIGFyZSBpbiB0aGUgb3JkZXIgdGwgLyB0ciAvIGJyIC8gYmxcbi8vICogTm90ZSB0aGF0IGFsbCB1bml0cyBzaG91bGQgYmUgaW4gcHhcbi8vICogQHBhcmFtIHtsaXN0fSAtIHNwZWNpZmljIGJvcmRlciBjb3JuZXJzICRjb3JuZXJzIChhbGx8dGx8dHJ8Ymx8YnIpXG5AbWl4aW4gaW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cygkY29ybmVyczogJ2FsbCcpIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAkdmFsaWQtYm9yZGVyLXJhZGl1cy1wYXJhbXM6IFsnYWxsJywgJ3RsJywgJ3RyJywgJ2JsJywgJ2JyJywgJ3QnLCAncicsICdiJywgJ2wnXTtcbiAgICAkaW52ZXJ0ZWQtYm9yZGVyLXJhZGl1czogMTRweDtcbiAgICAkaW52ZXJ0ZWQtYm9yZGVyLXRsOiAwcHg7XG4gICAgJGludmVydGVkLWJvcmRlci10cjogMHB4O1xuICAgICRpbnZlcnRlZC1ib3JkZXItYnI6IDBweDtcbiAgICAkaW52ZXJ0ZWQtYm9yZGVyLWJsOiAwcHg7XG5cbiAgICAtLWludmVydGVkLWJvcmRlci1ncmFkaWVudDogIzAwMDAgOTglLCAjMDAwO1xuICAgIC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1czogI3skaW52ZXJ0ZWQtYm9yZGVyLXJhZGl1c307XG5cbiAgICBAaWYgbm90IGxpc3QuaW5kZXgoJHZhbGlkLWJvcmRlci1yYWRpdXMtcGFyYW1zLCAkY29ybmVycykge1xuICAgICAgICBAZXJyb3IgXCIjeyRjb3JuZXJzfSBpcyBub3QgYSB2YWxpZCBzaWRlLiBFeHBlY3RlZCBvbmUgb2YgI3skdmFsaWQtYm9yZGVyLXJhZGl1cy1wYXJhbXN9LlwiO1xuICAgIH1cblxuICAgIEBpZiAkY29ybmVycyA9PSAnYWxsJyB7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItdGw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgICAgICAkaW52ZXJ0ZWQtYm9yZGVyLXRyOiAkaW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cztcbiAgICAgICAgJGludmVydGVkLWJvcmRlci1icjogJGludmVydGVkLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYmw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ3RsJyB7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItdGw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ3RyJyB7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItdHI6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ2JyJyB7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYnI6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ2JsJyB7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYmw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ3QnIHtcbiAgICAgICAgJGludmVydGVkLWJvcmRlci10bDogJGludmVydGVkLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItdHI6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ3InIHtcbiAgICAgICAgJGludmVydGVkLWJvcmRlci10cjogJGludmVydGVkLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYnI6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ2InIHtcbiAgICAgICAgJGludmVydGVkLWJvcmRlci1icjogJGludmVydGVkLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYmw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH0gQGVsc2UgaWYgJGNvcm5lcnMgPT0gJ2wnIHtcbiAgICAgICAgJGludmVydGVkLWJvcmRlci10bDogJGludmVydGVkLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICRpbnZlcnRlZC1ib3JkZXItYmw6ICRpbnZlcnRlZC1ib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgIC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy10bDogI3skaW52ZXJ0ZWQtYm9yZGVyLXRsfTtcbiAgICAtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHI6ICN7JGludmVydGVkLWJvcmRlci10cn07XG4gICAgLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLWJyOiAjeyRpbnZlcnRlZC1ib3JkZXItYnJ9O1xuICAgIC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy1ibDogI3skaW52ZXJ0ZWQtYm9yZGVyLWJsfTtcblxuICAgIG1hc2s6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCh2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLXRsKSBhdCAwIDAsIHZhcigtLWludmVydGVkLWJvcmRlci1ncmFkaWVudCkpIDAgMCxcbiAgICAgICAgcmFkaWFsLWdyYWRpZW50KHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHIpIGF0IDEwMCUgMCwgdmFyKC0taW52ZXJ0ZWQtYm9yZGVyLWdyYWRpZW50KSkgMTAwJSAwLFxuICAgICAgICByYWRpYWwtZ3JhZGllbnQodmFyKC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy1ibCkgYXQgMCAxMDAlLCB2YXIoLS1pbnZlcnRlZC1ib3JkZXItZ3JhZGllbnQpKSAwIDEwMCUsXG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCh2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLWJyKSBhdCAxMDAlIDEwMCUsIHZhcigtLWludmVydGVkLWJvcmRlci1ncmFkaWVudCkpIDEwMCUgMTAwJTtcbiAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIG1hc2stc2l6ZTogNTElIDUxJTtcblxuICAgIC8vIHN0eWxlbGludC1kaXNhYmxlIG5vLWludmFsaWQtcG9zaXRpb24tZGVjbGFyYXRpb25cbiAgICAvLyBEaXNhYmxlIGZvciBvbGRlciBTYWZhcmkgYnJvd3NlcnMgYXMgdGhlIGxheW91dCBicmVha3MgdGhlcmUgd2l0aCBtYXNrXG4gICAgQHN1cHBvcnRzIChiYWNrZ3JvdW5kOiAtd2Via2l0LW5hbWVkLWltYWdlKGkpKSB7XG4gICAgICAgIG1hc2s6IG5vbmU7XG4gICAgfVxuXG4gICAgLy8gV2UgY2Fubm90IGNoZWNrIGZvciBAc3VwcG9ydHMgKGNsaXAtcGF0aDogc2hhcGUoKSkgYmVjYXVzZSwgd2hpbGUgRmlyZWZveCBzdXBwb3J0cyB0aGUgcnVsZSwgaXQgZG9lcyBub3Qgd29yayAtIHlldCAoaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMDMyOClcbiAgICAvLyBCdXQsIGFzIHNoYXBlKCkgY2FuIGJlIHVzZWQgaW4gYW5pbWF0aW9uIHBhdGhzLCBhbmQgQ2hyb21lIGFuZCBjdXJyZW50IFNhZmFyaSBzdXBwb3J0IHRoaXMgaW1wbGVtZW50YXRpb24uXG4gICAgLy8gTk9URTogV2Ugc2hvdWxkIHN0aWxsIGNoZWNrIHRvIHNlZSB3aGVuIGNsaXAtcGF0aDogc2hhcGUoKSBpcyBmdWxseSBlbmFibGVkIGluIEZpcmVmb3gsIGJ1dCBpbiB0aGUgbWVhbnRpbWUsIG1hc2tpbmcgd29ya3MgbmljZWx5IHRoZXJlXG4gICAgQHN1cHBvcnRzIChvZmZzZXQtcGF0aDogc2hhcGUoZnJvbSB0b3AgbGVmdCwgY3VydmUgdG8gNTAlIDUwJSB3aXRoIDI1JSAxMDAlKSkge1xuICAgICAgICBtYXNrOiBub25lO1xuICAgICAgICBjbGlwLXBhdGg6IHNoYXBlKFxuICAgICAgICAgICAgZnJvbSAwIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdGwpLFxuICAgICAgICAgICAgYXJjIGJ5IHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdGwpIGNhbGModmFyKC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy10bCkgKiAtMSkgb2YgdmFyKC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy10bCksXG4gICAgICAgICAgICBsaW5lIHRvIGNhbGMoMTAwJSAtIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHIpKSAwLFxuICAgICAgICAgICAgYXJjIGJ5IHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHIpIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHIpIG9mIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtdHIpLFxuICAgICAgICAgICAgbGluZSB0byAxMDAlIGNhbGMoMTAwJSAtIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtYnIpKSxcbiAgICAgICAgICAgIGFyYyBieSBjYWxjKHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtYnIpICogLTEpIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtYnIpIG9mIHZhcigtLWludmVydGVkLWJvcmRlci1yYWRpdXMtYnIpLFxuICAgICAgICAgICAgbGluZSB0byB2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLWJsKSAxMDAlLFxuICAgICAgICAgICAgYXJjIGJ5IGNhbGModmFyKC0taW52ZXJ0ZWQtYm9yZGVyLXJhZGl1cy1ibCkgKiAtMSkgY2FsYyh2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLWJsKSAqIC0xKSBvZiB2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLWJsKSxcbiAgICAgICAgICAgIGxpbmUgdG8gMCB2YXIoLS1pbnZlcnRlZC1ib3JkZXItcmFkaXVzLXRsKVxuICAgICAgICApO1xuICAgIH1cbiAgICAvLyBzdHlsZWxpbnQtZW5hYmxlIG5vLWludmFsaWQtcG9zaXRpb24tZGVjbGFyYXRpb25cbn1cblxuLy8gTGFiZWwgaXMgc2hpZnRlZCB3aGVuIC1cbi8vIGlucHV0IGlzIGZvY3VzZWRcbi8vIGhhcyB2YWx1ZSBwcm9wIGJ1dCBub3QgcGxhY2Vob2xkZXIgc2hvd24gKGhhcHBlbmRzIHdoZW4gcHJlZmlsbGVkIGlucHV0IGlzIG1hbnVhbGx5IGNsZWFyZWQpXG4vLyBoYXMgc29tZSB0ZXh0IHBsYWNlaG9sZGVyXG4vLyBpcyBhdXRvZmlsbGVkXG5AbWl4aW4gZm9ybS1pbnB1dC1sYWJlbC1zZWxlY3RvcnMge1xuICAgICY6aGFzKDp3aGVyZShpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSk6bm90KDp3aGVyZSg6cGxhY2Vob2xkZXItc2hvd24pKTppcyg6d2hlcmUoOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKSwgOndoZXJlKDpub3QoW3BsYWNlaG9sZGVyPScnXSwgW3BsYWNlaG9sZGVyPScgJ10pKSwgOm5vdChbdmFsdWU9JyddKSwgOi13ZWJraXQtYXV0b2ZpbGwsIDphdXRvZmlsbCwgOmZvY3VzKSkgOndoZXJlKC5mb3JtLWlucHV0X19sYWJlbCksXG4gICAgJjpoYXMoOndoZXJlKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKTppcyg6d2hlcmUoOnBsYWNlaG9sZGVyLXNob3duOm5vdChbcGxhY2Vob2xkZXI9JyddLCBbcGxhY2Vob2xkZXI9JyAnXSkpKSkgOndoZXJlKC5mb3JtLWlucHV0X19sYWJlbCksXG4gICAgJjpoYXMoOndoZXJlKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKTppcyg6Zm9jdXMpKSA6d2hlcmUoLmZvcm0taW5wdXRfX2xhYmVsKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXNldCBpU3BhY2UgY3VzdG9tIGZvcm0gaW5wdXQgc3R5bGVzIHRvIGJlIGFibGUgdG8gZGVzaWduIHNwZWNpYWwgaW5wdXRzIG1vcmUgZWFzaWx5XG4gKi9cbkBtaXhpbiByZXNldC1mb3JtLWlucHV0IHtcbiAgICAmOmhhcyg6d2hlcmUoaW5wdXQ6bm90KFt0eXBlPSdjaGVja2JveCddLCBbdHlwZT0ncmFkaW8nXSksIHRleHRhcmVhLCBzZWxlY3QpKSB7XG4gICAgICAgIHotaW5kZXg6IGF1dG87XG4gICAgICAgIG1hcmdpbi10b3A6IGluaXRpYWw7XG5cbiAgICAgICAgOndoZXJlKC5mb3JtLWZpZWxkLWNvbnRhaW5lcikge1xuICAgICAgICAgICAgcGFkZGluZzogaW5pdGlhbDtcbiAgICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIDp3aGVyZSguZm9ybS1maWVsZCA+ICopIHtcbiAgICAgICAgICAgICY6bm90KFtkaXNhYmxlZF0pIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgOndoZXJlKC5mb3JtLWZpZWxkX19pbnB1dCkge1xuICAgICAgICAgICAgZm9udC1zaXplOiBpbml0aWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpoYXMoLmVycm9ycykge1xuICAgICAgICAgICAgLS1pbnB1dC1iZzogaW5pdGlhbDtcblxuICAgICAgICAgICAgLmZvcm0tZmllbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogaW5pdGlhbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmZvY3VzLXdpdGhpbiB7XG4gICAgICAgICAgICAgICAgLmZvcm0tZmllbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBpbml0aWFsICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpoYXMoW2Rpc2FibGVkXSkge1xuICAgICAgICAgICAgLmZvcm0tZmllbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogaW5pdGlhbCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgOndoZXJlKC5mb3JtLWlucHV0X19sYWJlbCkge1xuICAgICAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgcGFkZGluZy1pbmxpbmU6IDA7XG4gICAgICAgICAgICBwYWRkaW5nLWJsb2NrOiAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiBpbml0aWFsO1xuICAgICAgICAgICAgY29sb3I6IGluaXRpYWw7XG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICAgICAgICAgICAgei1pbmRleDogYXV0bztcbiAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICAgICAgZm9udC12YXJpYXRpb24tc2V0dGluZ3M6IGluaXRpYWw7XG4gICAgICAgICAgICBtYXJnaW4tYmxvY2stZW5kOiBpbml0aWFsO1xuXG4gICAgICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6aGFzKC5mb3JtLWZpZWxkLS1zbSkge1xuICAgICAgICAgICAgLmZvcm0taW5wdXRfX2xhYmVsIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJsb2NrOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cy13aXRoaW4ge1xuICAgICAgICAgICAgOndoZXJlKC5mb3JtLWZpZWxkLWNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogaW5pdGlhbDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA6d2hlcmUoLmZvcm0taW5wdXRfX2xhYmVsKSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICY6bm90KDp3aGVyZSg6Zm9jdXMtd2l0aGluLCBbZGlzYWJsZWRdKSkge1xuICAgICAgICAgICAgICAgICY6d2hlcmUoOm5vdCg6aGFzKC5lcnJvcnMpKSkge1xuICAgICAgICAgICAgICAgICAgICA6d2hlcmUoLmZvcm0tZmllbGQtY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA6d2hlcmUoLmZvcm0taW5wdXRfX2xhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogaW5pdGlhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICY6aGFzKC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgOndoZXJlKC5mb3JtLWZpZWxkLWNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBpbml0aWFsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgOndoZXJlKC5mb3JtLWlucHV0X19sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWxhYmVsLXNlbGVjdG9ycyB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICBmb250LXNpemU6IGluaXRpYWw7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuXG4gICAgICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogU3R5bGVzIHRvIGhpZGUgdGhlIHNjcm9sbGJhciBidXQgc3RpbGwgYWxsb3cgc2Nyb2xsaW5nXG4gKi9cbkBtaXhpbiBzY3JvbGwtd2l0aG91dC1zY3JvbGxiYXIge1xuICAgIG92ZXJmbG93OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3c6IC1tb3otc2Nyb2xsYmFycy1ub25lOyAvKiBGaXJlZm94ICovXG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyAvKiBJRSBhbmQgRWRnZSAqL1xuICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgLyogRmlyZWZveCAqL1xuXG4gICAgLyogQ2hyb21lLCBTYWZhcmkgYW5kIE9wZXJhICovXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLyoqXG4gKiBTcGVjaWFsIHZlcnNpb24gb2YgdGhlIGNhcmQtYm94KCkgbGF5b3V0IGZvciB0aGUgQjJCIHNob3BcbiAqL1xuQG1peGluIGNhcmQtYm94LWNoZWNrb3V0IHtcbiAgICBAaW5jbHVkZSBjYXJkLWJveDtcblxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIGRhcmspO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgd29yZC1icmVhazogbm9ybWFsO1xuXG4gICAgJjpoYXMoaW5wdXQ6Y2hlY2tlZCksXG4gICAgJi5zZWxlY3RlZC1wYXltZW50LXNoaXBwaW5nLW1ldGhvZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIHByaW1hcnktZGFyayk7XG4gICAgICAgIGNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIHByaW1hcnktZGFyayk7XG5cbiAgICAgICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgnbWQnKSB7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggbWFwLmdldCgkdGhlbWUtY29sb3JzLCBwcmltYXJ5LWRhcmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5mb3JtLWJsb2NrLWRpc2FibGVkIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBAY29udGVudDtcbn1cblxuQG1peGluIGNhcmQtYm94LWNoZWNrb3V0LWNvbXBvbmVudHMoJGlzLW1pbmltYWw6IGZhbHNlKSB7XG4gICAgQGlmICRpcy1taW5pbWFsIHtcbiAgICAgICAgJi1sYWJlbCB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS44O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAgICYtbGFiZWwsXG4gICAgICAgICYtaW5mbyxcbiAgICAgICAgJi1wcmljZSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS44O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi1sYWJlbCB7XG4gICAgICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgICAgICBncmlkLXJvdzogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICBAaWYgJGlzLW1pbmltYWwge1xuICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDE7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhhcyg6Y2hlY2tlZCksXG4gICAgICAgICY6aGFzKFtkaXNhYmxlZF0pIHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnJhZGlvIHtcbiAgICAgICAgICAgICZfX2lucHV0IHtcbiAgICAgICAgICAgICAgICB0b3A6IC0xNnB4OyAvLyBjb25zaWRlciB0aGUgMTRweCBwYWRkaW5nIChleHRyYSAycHggZm9yIGJvcmRlcilcblxuICAgICAgICAgICAgICAgICY6Y2hlY2tlZDpub3QoOmRpc2FibGVkKTo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtdGV4dCB7XG4gICAgICAgICAgICBAaWYgJGlzLW1pbmltYWwge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAY29udGVudDtcbn1cblxuLyoqXG4gKiBjYXJkLWJveCBsaXN0IGxheW91dCBmb3IgdGhlIEIyQiBzaG9wXG4gKi9cbkBtaXhpbiBjYXJkLWJveC1saXN0LWNoZWNrb3V0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZmxvdzogY29sdW1uO1xuICAgIGdhcDogMC44cmVtO1xuICAgIHRyYW5zaXRpb246IGdhcCAwLjNzO1xufVxuXG4vLyBBbHRlcm5hdGl2ZSBkaXNjLWxpa2Ugc3R5bGluZyBmb3IgcmFkaW8gYW5kIGNoZWNrYm94IGlucHV0c1xuQG1peGluIGlucHV0LWRpc2Mge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwIDEwcHggMCBhdXRvO1xuICAgIG1hcmdpbi1ibG9jazogYXV0bztcbiAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIHdpZHRoOiAxNXB4O1xuICAgIGhlaWdodDogMTVweDtcbiAgICBmbGV4OiAwIDAgMTVweDsgLy8gaW4gY2FzZSBpdCdzIHBhcnQgb2YgYSBmbGV4IGxheW91dFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiKDAsIDAsIDAsIDAuMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2UtaW4tb3V0O1xufVxuXG4vLyBjYXJkIGJveGVzIGFyZSB0eXBpY2FsbHkgdXNlZCBvbiBwcm9kdWN0IGRldGFpbCBzZXJ2aWNlcywgY2hlY2tvdXQgdHJhbnNwb3J0L3BheW1lbnQgb3B0aW9ucyxcbi8vIEFORCBwcmUtY2hlY2tvdXQgcGFnZVxuQG1peGluIGNhcmQtYm94IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIGxpZ2h0KTtcbiAgICBjb2xvcjogbWFwLmdldCgkdGhlbWUtY29sb3JzLCAnZ3JheS05MDAnKTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgbWFwLmdldCgkaW5wdXQsIGJvcmRlci1jb2xvcik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAxNHB4IDMwcHggMTRweCAyMHB4O1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IC0xcHg7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgcHJpbWFyeS1kYXJrKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZS1pbi1vdXQ7XG4gICAgfVxuXG4gICAgW3R5cGU9J2NoZWNrYm94J10sXG4gICAgW3R5cGU9J3JhZGlvJ10ge1xuICAgICAgICBAaW5jbHVkZSBpbnB1dC1kaXNjO1xuICAgIH1cblxuICAgICY6aGFzKDpjaGVja2VkKSxcbiAgICAmW2NsYXNzKj0nc2VsZWN0ZWQnXSB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cblxuICAgICAgICBbdHlwZT0nY2hlY2tib3gnXTpub3QoLmZpeC1zcGVjaWZpY2l0eSksXG4gICAgICAgIFt0eXBlPSdyYWRpbyddOm5vdCguZml4LXNwZWNpZmljaXR5KSB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgcHJpbWFyeS1kYXJrKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgcHJpbWFyeS1kYXJrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICY6aG92ZXI6bm90KDpoYXMoW2Rpc2FibGVkXSkpLFxuICAgICY6Zm9jdXMtd2l0aGluOm5vdCg6aGFzKFtkaXNhYmxlZF0pKSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogbWFwLmdldCgkdGhlbWUtY29sb3JzLCBncmF5LTQwMCk7XG5cbiAgICAgICAgW3R5cGU9J2NoZWNrYm94J106bm90KDpjaGVja2VkKSxcbiAgICAgICAgW3R5cGU9J3JhZGlvJ106bm90KDpjaGVja2VkKSB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYigwLCAwLCAwLCAwLjIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJjpoYXMoW2Rpc2FibGVkXSk6bm90KC5maXgtc3BlY2lmaWNpdHkpIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLmdldCgkdGhlbWUtY29sb3JzLCBsaWdodCk7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQHVzZSAnc2FzczptYXAnO1xuXG4uZW1ibGEge1xuICAgICZfX2J1dHRvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgYm90dG9tOiBjbGFtcCgxcmVtLCAydncsIDRyZW0pO1xuICAgICAgICByaWdodDogY2xhbXAoMXJlbSwgMnZ3LCA0cmVtKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMThweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgfVxuXG4gICAgJl9fYnV0dG9uIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcblxuICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCcxcHgnKSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDMuNnJlbTtcbiAgICAgICAgICAgIHdpZHRoOiAzcmVtO1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuXG4gICAgICAgICYtLXByZXYge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCcxcHgnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDFyZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLS1uZXh0IHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKSB0cmFuc2xhdGVZKDApO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCcxcHgnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDFyZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdmcge1xuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoOiAwO1xuICAgICAgICAgICAgY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgJ2dyYXktODAwJyk7XG4gICAgICAgIH1cblxuICAgICAgICAmOndoZXJlKFtkaXNhYmxlZF0pIHtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICAgICAgICAgc3ZnIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogbWFwLmdldCgkdGhlbWUtY29sb3JzLCAnZ3JheS00MDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qKlxuICogUmV0cmlldmVzIHRoZSBuZXh0IHNtYWxsZXIgYnJlYWtwb2ludCBmcm9tIHRoZSBnaXZlbiBicmVha3BvaW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCAtIFRoZSBicmVha3BvaW50IGZvciB3aGljaCB0byBmaW5kIHRoZSBuZXh0IHNtYWxsZXIgYnJlYWtwb2ludC5cbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSAtIFRoZSBuZXh0IHNtYWxsZXIgYnJlYWtwb2ludCwgb3IgbnVsbCBpZiBubyBzbWFsbGVyIGJyZWFrcG9pbnQgaXMgYXZhaWxhYmxlLlxuICovXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbmV4dCBsYXJnZXIgYnJlYWtwb2ludCBmcm9tIHRoZSAkZ3JpZC1icmVha3BvaW50cyBtYXAuXG4gKlxuICogQGZ1bmN0aW9uIGdldC1iaWdnZXItYnJlYWtwb2ludFxuICogQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IC0gVGhlIGN1cnJlbnQgYnJlYWtwb2ludCB0byBmaW5kIHRoZSBuZXh0IGxhcmdlciBvbmUgZm9yLlxuICogQHJldHVybiB7U3RyaW5nIHwgbnVsbH0gLSBUaGUgbmV4dCBsYXJnZXIgYnJlYWtwb2ludCBvciBudWxsIGlmIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgaXMgdGhlIGxhcmdlc3Qgb3Igbm90IGZvdW5kLlxuICovXG4vKipcbiAqIFJlc2V0IGlTcGFjZSBjdXN0b20gZm9ybSBpbnB1dCBzdHlsZXMgdG8gYmUgYWJsZSB0byBkZXNpZ24gc3BlY2lhbCBpbnB1dHMgbW9yZSBlYXNpbHlcbiAqL1xuLyoqXG4gKiBTdHlsZXMgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyIGJ1dCBzdGlsbCBhbGxvdyBzY3JvbGxpbmdcbiAqL1xuLyoqXG4gKiBTcGVjaWFsIHZlcnNpb24gb2YgdGhlIGNhcmQtYm94KCkgbGF5b3V0IGZvciB0aGUgQjJCIHNob3BcbiAqL1xuLyoqXG4gKiBjYXJkLWJveCBsaXN0IGxheW91dCBmb3IgdGhlIEIyQiBzaG9wXG4gKi9cbi5lbWJsYV9fYnV0dG9ucyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxcmVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3R0b206IGNsYW1wKDFyZW0sIDJ2dywgNHJlbSk7XG4gIHJpZ2h0OiBjbGFtcCgxcmVtLCAydncsIDRyZW0pO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICB6LWluZGV4OiAxMDtcbn1cbi5lbWJsYV9fYnV0dG9uIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgaGVpZ2h0OiAzLjZyZW07XG4gIHdpZHRoOiAzcmVtO1xuICBvcGFjaXR5OiAxO1xufVxuLmVtYmxhX19idXR0b24tLXByZXYge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAxcmVtO1xufVxuLmVtYmxhX19idXR0b24tLW5leHQge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSkgdHJhbnNsYXRlWSgwKTtcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDFyZW07XG59XG4uZW1ibGFfX2J1dHRvbiBzdmcge1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGNvbG9yOiAjMzgzODM4O1xufVxuLmVtYmxhX19idXR0b246d2hlcmUoW2Rpc2FibGVkXSkge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4uZW1ibGFfX2J1dHRvbjp3aGVyZShbZGlzYWJsZWRdKSBzdmcge1xuICBjb2xvcjogI2IxYjFiMTtcbn0iLCJAdXNlICdzYXNzOm1hcCc7XG5cbi5lbWJsYSB7XG4gICAgJl9fcGFnaW5hdGlvbiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDNyZW07XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBzcXVhcmUoMnJlbSk7XG5cbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgc3F1YXJlKDAuOXJlbSk7XG5cbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsICdncmF5LTIwMCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmlzLWFjdGl2ZTo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgJ3ByaW1hcnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi5lbWJsYV9fcGFnaW5hdGlvbiB7XG4gIG1hcmdpbi10b3A6IDNyZW07XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmVtYmxhX19wYWdpbmF0aW9uIGJ1dHRvbiB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5lbWJsYV9fcGFnaW5hdGlvbiBidXR0b246OmJlZm9yZSwgLmVtYmxhX19wYWdpbmF0aW9uIGJ1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5lbWJsYV9fcGFnaW5hdGlvbiBidXR0b246OmFmdGVyIHtcbiAgd2lkdGg6IDAuOXJlbTtcbiAgaGVpZ2h0OiAwLjlyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7XG59XG4uZW1ibGFfX3BhZ2luYXRpb24gYnV0dG9uLmlzLWFjdGl2ZTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGVkNjA5O1xufSIsIkB1c2UgJ3Nhc3M6bWF0aCc7XG5AdXNlICdzYXNzOm1hcCc7XG5AdXNlICdzYXNzOm1ldGEnO1xuXG5AbWl4aW4gc3F1YXJlKCRzaXplKSB7XG4gICAgd2lkdGg6ICRzaXplO1xuICAgIGhlaWdodDogJHNpemU7XG59XG5cbkBtaXhpbiBjdXN0b20tc2Nyb2xsYmFyLWNvbnRhaW5lcigkaXMtdmVydGljYWw6IGZhbHNlKSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIEBpZiAkaXMtdmVydGljYWwge1xuICAgICAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgd2lkdGg6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2Nyb2xsYmFyLWNvbG9yO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkc2Nyb2xsYmFyLWNvbG9yO1xuICAgIH1cbn1cblxuQG1peGluIG1vZGFsLXZhcmlhYmxlcyB7XG4gICAgLS1icy1tb2RhbC13aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgLS1icy1tb2RhbC1ib3JkZXItcmFkaXVzOiAwO1xuICAgIC0tYnMtbW9kYWwtbWF4LWhlaWdodDogOThkdmg7XG4gICAgLS1icy1tb2RhbC13aWR0aC1uYXJyb3c6IDUwMHB4O1xuICAgIC0tYnMtbW9kYWwtd2lkdGgtZGVmYXVsdDogODUwcHg7XG4gICAgLS1icy1tb2RhbC13aWR0aC13aWRlOiAxMTAwcHg7XG4gICAgLS1tb2RhbC1wYWRkaW5nLWJsb2NrOiBjbGFtcCgxcmVtLCA0dncsIDIuNXJlbSk7XG4gICAgLS1tb2RhbC1wYWRkaW5nLWlubGluZTogY2xhbXAoMXJlbSwgNXZ3LCAzcmVtKTtcbiAgICAtLWJzLW1vZGFsLXBhZGRpbmc6IHZhcigtLW1vZGFsLXBhZGRpbmctYmxvY2spIHZhcigtLW1vZGFsLXBhZGRpbmctaW5saW5lKTtcbiAgICAtLWJzLW1vZGFsLW1hcmdpbjogMDtcbiAgICAtLWJzLW1vZGFsLWhlYWRlci1mb250LXNpemU6ICN7JGgzLWZvbnQtc2l6ZX07XG4gICAgLS1tb2RhbC1pbi1tb2RhbC1iYWNrZHJvcC1jb2xvcjogI3tyZ2JhKCRtb2RhbC1iYWNrZHJvcC1iZywgJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpfTtcbn1cblxuQG1peGluIGJveGVzKCRxdWFudGl0eTogMywgJGdhcDogMXJlbSwgJGNlbnRlci1nYXA6IGNsYW1wKDFyZW0sIDUlLCA0cmVtKSwgJGNlbnRlci1ibG9jazogZmFsc2UpIHtcbiAgICAkZ2FwLXdpdGgtdW5pdDogaWYobWF0aC5pcy11bml0bGVzcygkZ2FwKSwgJGdhcCAqIDFyZW0sICRnYXApO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICBAaWYgJGNlbnRlci1ibG9jayB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6ICRjZW50ZXItZ2FwO1xuXG4gICAgICAgID4gKjp3aGVyZShpbWcpIHtcbiAgICAgICAgICAgIGhlaWdodDogcmV2ZXJ0LWxheWVyO1xuICAgICAgICAgICAgd2lkdGg6IHJldmVydC1sYXllcjtcbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICBnYXA6ICRnYXAtd2l0aC11bml0O1xuICAgIH1cblxuICAgID4gKiB7XG4gICAgICAgIEBpZiAkcXVhbnRpdHkge1xuICAgICAgICAgICAgLy8gRllJOiBjYWxjdWxhdGUgdGhlICUgd2lkdGggLSAobnVtYmVyIG9mIGdhcHMgLyBxdWFudGl0eSlcbiAgICAgICAgICAgIC0tZmxleC1iYXNpczogY2FsYygje21hdGguZGl2KDEwMCwgJHF1YW50aXR5KSAqIDElfSAtICN7JGdhcC13aXRoLXVuaXQgKiAobWF0aC5kaXYoKCRxdWFudGl0eSAtIDEpLCAkcXVhbnRpdHkpKX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAqIHNjcmVlbi1yZWFkZXIgb25seVxuLy8gKiBAcGFyYW0gY29uZmlnIC0gbnVsbCB8IHN0cmluZyAoJ3VuZG8nKSAtIHJlc2V0cyBhIHByZXZpb3VzIHNyLW9ubHkgcnVsZXNldFxuQG1peGluIHNyLW9ubHkoJGNvbmZpZzogbnVsbCkge1xuICAgIEBpZiAkY29uZmlnID09ICd1bmRvJyB7XG4gICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wZXJ0eS1uby1kZXByZWNhdGVkXG4gICAgICAgIGNsaXA6IHVuc2V0O1xuICAgICAgICBjbGlwLXBhdGg6IHVuc2V0O1xuICAgICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgICBvdmVyZmxvdzogdW5zZXQ7XG4gICAgICAgIHBvc2l0aW9uOiB1bnNldDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHVuc2V0O1xuICAgICAgICB3aWR0aDogdW5zZXQ7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wZXJ0eS1uby1kZXByZWNhdGVkXG4gICAgICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgICAgIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcbiAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICB9XG59XG5cbi8vIE1vZGlmaWVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRlc2t0b3Agc3VibWVudSB3aGVuIHRoZXJlIGFyZSBmZXdlciB0aGFuIC8kbWVudS1zdWJtZW51LXNpbmdsZS1jb2x1bW4tbWluLyBpdGVtcyxcbi8vIEFORCwgd2hlbiB0aGVyZSBhcmUgbm8gc3ViLXN1YmNhdGVnb3J5IGl0ZW1zXG5AbWl4aW4gZGVza3RvcC1uYXZpZ2F0aW9uLW5hcnJvdyB7XG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkaGVhZGVyLW5hdi1icmVha3BvaW50KSB7XG4gICAgICAgIC8vIE5PVEU6IHNsaWdodGx5IG9sZGVyIEZpcmVmb3ggc3VwcG9ydHMgOmhhcyhlbGVtZW50KSBidXQgbm90IDpoYXMoZWxlbWVudCArIGVsZW1lbnQpXG4gICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzY3NzL29wZXJhdG9yLW5vLXVuc3BhY2VkXG4gICAgICAgIEBzdXBwb3J0cyBzZWxlY3Rvcig6aGFzKCsgKikpIHtcbiAgICAgICAgICAgIC5oZWFkZXIgLm5hdiB7XG4gICAgICAgICAgICAgICAgLm1lbnUge1xuICAgICAgICAgICAgICAgICAgICAmX19pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICYtbWFpbjpub3QoOmhhcyguc3VibWVudS0tbWFpbiB1bCB1bCkpOm5vdCg6aGFzKC5zdWJtZW51LS1tYWluID4gLm1lbnUtLW5lc3RlZCA+IC5tZW51X19pdGVtLS1uZXN0ZWQ6bnRoLWNoaWxkKCN7JG1lbnUtc3VibWVudS1zaW5nbGUtY29sdW1uLW1pbn0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWl4aW4gc3RpY2t5LXNpZGViYXIoJG1lZGlhLXF1ZXJ5LW1pbi13aWR0aDogJ2xnJykge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG1lZGlhLXF1ZXJ5LW1pbi13aWR0aCkge1xuICAgICAgICAtLXRvcC1wb3NpdGlvbjogY2FsYygodmFyKC0taGVpZ2h0LWRpZmYsIDBweCkgKiAtMSkgKyAxcmVtKTtcblxuICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICB0b3A6IHZhcigtLXRvcC1wb3NpdGlvbik7XG4gICAgfVxufVxuXG4vLy8gQWRkcyBhIHNjcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQgZGVjbGFyYXRpb24gdG8gdGhlIGN1cnJlbnQgc2VsZWN0b3Jcbi8vLyAoc2Nyb2xsLW1hcmdpbi1ibG9jay1zdGFydCBpcyB0aGUgZGVmYXVsdCBwcm9wZXJ0eSlcbi8vLyAkaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwgdmFsdWVzIGFyZSBzZXQgaW4gdmFyaWFibGVzIGZpbGVcbi8vLyBAcGFyYW0ge1N0cmluZ30gJHR5cGUgLSAnbWFyZ2luJyBvciAncGFkZGluZydcbkBtaXhpbiBzZXQtc2Nyb2xsLWJsb2NrLXN0YXJ0KCR0eXBlOiAnbWFyZ2luJykge1xuICAgIEBpZiBtZXRhLnZhcmlhYmxlLWV4aXN0cygnaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwnKSB7XG4gICAgICAgIEBpZiBtYXAuZ2V0KCRoZWFkZXItZml4ZWQtYWRkaXRpb25hbCwgaGVhZGVyLW1vYmlsZSkgb3IgbWFwLmdldCgkaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwsIHRvcC1iYW5uZXItbW9iaWxlKSB7XG4gICAgICAgICAgICAkc2Nyb2xsLXNpemU6ICcnO1xuXG4gICAgICAgICAgICBAaWYgbWFwLmdldCgkaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwsIGhlYWRlci1tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAkc2Nyb2xsLXNpemU6ICRzY3JvbGwtc2l6ZSArIHZhcigtLWhlYWRlci1oZWlnaHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgbWFwLmdldCgkaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwsIHRvcC1iYW5uZXItbW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgJHNjcm9sbC1zaXplOiBjYWxjKCN7JHNjcm9sbC1zaXplfSArIHZhcigtLXByb21vLWhlaWdodCwgMHB4KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAje21hcC5nZXQoJGhlYWRlci1maXhlZC1hZGRpdGlvbmFsLCBtb2JpbGUtYnJlYWtwb2ludC11cCkgLSAxcHh9KSB7XG4gICAgICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtcG9zaXRpb24tZGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICBzY3JvbGwtI3skdHlwZX0tYmxvY2stc3RhcnQ6ICN7JHNjcm9sbC1zaXplfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiBtYXAuZ2V0KCRoZWFkZXItZml4ZWQtYWRkaXRpb25hbCwgaGVhZGVyLWRlc2t0b3ApIG9yIG1hcC5nZXQoJGhlYWRlci1maXhlZC1hZGRpdGlvbmFsLCB0b3AtYmFubmVyLWRlc2t0b3ApIHtcbiAgICAgICAgICAgICRzY3JvbGwtc2l6ZTogJyc7XG5cbiAgICAgICAgICAgIEBpZiBtYXAuZ2V0KCRoZWFkZXItZml4ZWQtYWRkaXRpb25hbCwgaGVhZGVyLWRlc2t0b3ApIHtcbiAgICAgICAgICAgICAgICAkc2Nyb2xsLXNpemU6ICRzY3JvbGwtc2l6ZSArIHZhcigtLWhlYWRlci1oZWlnaHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgbWFwLmdldCgkaGVhZGVyLWZpeGVkLWFkZGl0aW9uYWwsIHRvcC1iYW5uZXItZGVza3RvcCkge1xuICAgICAgICAgICAgICAgICRzY3JvbGwtc2l6ZTogY2FsYygjeyRzY3JvbGwtc2l6ZX0gKyB2YXIoLS1wcm9tby1oZWlnaHQsIDBweCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogI3ttYXAuZ2V0KCRoZWFkZXItZml4ZWQtYWRkaXRpb25hbCwgbW9iaWxlLWJyZWFrcG9pbnQtdXApfSkge1xuICAgICAgICAgICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXBvc2l0aW9uLWRlY2xhcmF0aW9uXG4gICAgICAgICAgICAgICAgc2Nyb2xsLSN7JHR5cGV9LWJsb2NrLXN0YXJ0OiAjeyRzY3JvbGwtc2l6ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNhcmQgYm94ZXMgYXJlIHR5cGljYWxseSB1c2VkIG9uIHByb2R1Y3QgZGV0YWlsIHNlcnZpY2VzLCBjaGVja291dCB0cmFuc3BvcnQvcGF5bWVudCBvcHRpb25zLFxuLy8gQU5EIHByZS1jaGVja291dCBwYWdlXG5AbWl4aW4gY2FyZC1ib3gge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgbGlnaHQpO1xuICAgIGNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsICdncmF5LTkwMCcpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIG1hcC5nZXQoJGlucHV0LCBib3JkZXItY29sb3IpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogLTFweDtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgbWFwLmdldCgkdGhlbWUtY29sb3JzLCBwcmltYXJ5LWRhcmspO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlLWluLW91dDtcbiAgICB9XG5cbiAgICAmOmhvdmVyOm5vdCg6aGFzKFtkaXNhYmxlZF0pKSxcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhhcyhbZGlzYWJsZWRdKSkge1xuICAgICAgICBib3JkZXItY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgZ3JheS00MDApO1xuXG4gICAgICAgIFt0eXBlPSdjaGVja2JveCddOm5vdCg6Y2hlY2tlZCksXG4gICAgICAgIFt0eXBlPSdyYWRpbyddOm5vdCg6Y2hlY2tlZCkge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICY6aGFzKFtkaXNhYmxlZF0pOm5vdCguZml4LXNwZWNpZmljaXR5KSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgZ3JheS0xMDApO1xuICAgICAgICBib3JkZXItaW5saW5lLWNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIGdyYXktMTAwKTtcbiAgICAgICAgY29sb3I6IG1hcC5nZXQoJHRoZW1lLWNvbG9ycywgZ3JheS02MDApO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgICAgICAgPiAqIHtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBib3JkZXItYmxvY2stZW5kLWNvbG9yOiBtYXAuZ2V0KCR0aGVtZS1jb2xvcnMsIGdyYXktMjAwKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkB1c2UgJ3Nhc3M6bWFwJztcbkBpbXBvcnQgJ3RoZW1lLXZhcmlhYmxlcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZhdWx0L3Nhc3MvYXNnYXJkLXZhcmlhYmxlcyc7XG5AaW1wb3J0ICdhcHAvYWJzdHJhY3RzL2FsbCc7XG5cbi5wcm9kdWN0LWNhcmQtc2xpZGVyIHtcbiAgICBjb250YWluZXItbmFtZTogcHJvZHVjdC1jYXJkLXNsaWRlcjtcbiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG5cbiAgICAuZW1ibGEge1xuICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24obGcpIHtcbiAgICAgICAgICAgICZfX3NsaWRlIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGNsYW1wKDMwcmVtLCA0MnZ3LCA0NHJlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmX192aWV3cG9ydCB7XG4gICAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24obGcpIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4taW5saW5lOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJl9fY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICAgICAgZ3JpZC1hdXRvLXJvd3M6IHZhcigtLXByb2R1Y3QtY2FyZC1ncmlkLXJvd3MpO1xuXG4gICAgICAgICAgICAmOndoZXJlKC5lbWJsYV9fY29udGFpbmVyLS1iYXNrZXQpIHtcbiAgICAgICAgICAgICAgICAtLXByb2R1Y3QtY2FyZC1ncmlkLXJvd3M6IG1heC1jb250ZW50O1xuXG4gICAgICAgICAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IGNsYW1wKDEzMHB4LCAyMHZ3LCAxODRweCk7XG5cbiAgICAgICAgICAgICAgICAuZW1ibGEge1xuICAgICAgICAgICAgICAgICAgICAmX19zbGlkZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOndoZXJlKDpub3QoLmVtYmxhX19jb250YWluZXItLWJhc2tldCkpIHtcbiAgICAgICAgICAgICAgICBncmlkLWF1dG8tY29sdW1uczogY2xhbXAoMzFyZW0sIDMzdncsIDMzLjdyZW0pO1xuXG4gICAgICAgICAgICAgICAgQGNvbnRhaW5lciBwcm9kdWN0LWNhcmQtc2xpZGVyICh3aWR0aCA8IDU3MHB4KSB7XG4gICAgICAgICAgICAgICAgICAgIC0tcHJvZHVjdC1jYXJkLWdyaWQtcm93czogY2FsYyhjbGFtcCgxMnJlbSwgMTJ2aCwgMTZyZW0pICsgdmFyKC0tdGh1bWJuYWlsLXBhZGRpbmcpICogMikgYXV0byBhdXRvIGF1dG8gYXV0byBhdXRvIGF1dG8gYXV0byBhdXRvIGF1dG8gYXV0bztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAuZW1ibGEge1xuICAgICAgICAgICAgICAgICAgICAmX19zbGlkZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAzcmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBzdWJncmlkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBAc3VwcG9ydHMgKGdyaWQtdGVtcGxhdGUtcm93czogc3ViZ3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb250YWluZXIgcHJvZHVjdC1jYXJkLXNsaWRlciAod2lkdGggPiA1NjkuOTk5cHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IG5vcm1hbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29udGFpbmVyIHByb2R1Y3QtY2FyZC1zbGlkZXIgKHdpZHRoIDwgNTcwcHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzZnIgNGZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICZfX3NsaWRlIHtcbiAgICAgICAgICAgIC8vIGhlbHAgcGVyZiAtIHdlIGFyZSBub3QgdXNpbmcgYSB0cmFuc2l0aW9uIGhlcmUgKHVubGlrZSBtYXN0ZXIpXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgICAgICY6d2hlcmUoLnByb2R1Y3QtY2FyZCkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ibG9jay1lbmQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIEZpeCBvdmVyZmxvdyBwcm9ibGVtIHdpdGggb2ZmZXJzIGRyb3Bkb3duIGluIFNhZmFyaVxuQHN1cHBvcnRzIChiYWNrZ3JvdW5kOiAtd2Via2l0LW5hbWVkLWltYWdlKGkpKSB7XG4gICAgLnByb2R1Y3RzLXNlY3Rpb246aGFzKD4gLnByb2R1Y3QtY2FyZC1zbGlkZXIpIHtcbiAgICAgICAgb3ZlcmZsb3cteDogY2xpcDtcbiAgICB9XG5cbiAgICBib2R5IC5lbWJsYTp3aGVyZSg6bm90KC5lbWJsYS0tZnVsbC13aWR0aCkpIHtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5wcm9kdWN0cy1zZWN0aW9uIHtcbiAgICAmX190eXBvIHtcbiAgICAgICAgLmVtYmxhIHtcbiAgICAgICAgICAgICZfX2NvbnRyb2xzIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAgICAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuXG4vL1xuLy8gQnJlYWtwb2ludHMgYXJlIGRlZmluZWQgYXMgYSBtYXAgb2YgKG5hbWU6IG1pbmltdW0gd2lkdGgpLCBvcmRlciBmcm9tIHNtYWxsIHRvIGxhcmdlOlxuLy9cbi8vICAgICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpXG4vL1xuLy8gVGhlIG1hcCBkZWZpbmVkIGluIHRoZSBgJGdyaWQtYnJlYWtwb2ludHNgIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBgJGJyZWFrcG9pbnRzYCBhcmd1bWVudCBieSBkZWZhdWx0LlxuXG4vLyBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4vL1xuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtKVxuLy8gICAgbWRcbi8vICAgID4+IGJyZWFrcG9pbnQtbmV4dChzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4LCB4eGw6IDE0MDBweCkpXG4vLyAgICBtZFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtLCAkYnJlYWtwb2ludC1uYW1lczogKHhzIHNtIG1kIGxnIHhsIHh4bCkpXG4vLyAgICBtZFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcbiAgJG46IGluZGV4KCRicmVha3BvaW50LW5hbWVzLCAkbmFtZSk7XG4gIEBpZiBub3QgJG4ge1xuICAgIEBlcnJvciBcImJyZWFrcG9pbnQgYCN7JG5hbWV9YCBub3QgZm91bmQgaW4gYCN7JGJyZWFrcG9pbnRzfWBcIjtcbiAgfVxuICBAcmV0dXJuIGlmKCRuIDwgbGVuZ3RoKCRicmVha3BvaW50LW5hbWVzKSwgbnRoKCRicmVha3BvaW50LW5hbWVzLCAkbiArIDEpLCBudWxsKTtcbn1cblxuLy8gTWluaW11bSBicmVha3BvaW50IHdpZHRoLiBOdWxsIGZvciB0aGUgc21hbGxlc3QgKGZpcnN0KSBicmVha3BvaW50LlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtbWluKHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgsIHh4bDogMTQwMHB4KSlcbi8vICAgIDU3NnB4XG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xufVxuXG4vLyBNYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguXG4vLyBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2Zcbi8vIGBtaW4tYCBhbmQgYG1heC1gIHByZWZpeGVzIGFuZCB2aWV3cG9ydHMgd2l0aCBmcmFjdGlvbmFsIHdpZHRocy5cbi8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFxdWVyaWVzLTQvI21xLW1pbi1tYXhcbi8vIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS5cbi8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4vL1xuLy8gICAgPj4gYnJlYWtwb2ludC1tYXgobWQsICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpKVxuLy8gICAgNzY3Ljk4cHhcbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtYXggYW5kICRtYXggPiAwLCAkbWF4IC0gLjAyLCBudWxsKTtcbn1cblxuLy8gUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC5cbi8vIFVzZWZ1bCBmb3IgbWFraW5nIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtaW5maXgoeHMsICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpKVxuLy8gICAgXCJcIiAgKFJldHVybnMgYSBibGFuayBzdHJpbmcpXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgsIHh4bDogMTQwMHB4KSlcbi8vICAgIFwiLXNtXCJcbkBmdW5jdGlvbiBicmVha3BvaW50LWluZml4KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEByZXR1cm4gaWYoYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cykgPT0gbnVsbCwgXCJcIiwgXCItI3skbmFtZX1cIik7XG59XG5cbi8vIE1lZGlhIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE5vIHF1ZXJ5IGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludC5cbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSB0byB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBhbmQgd2lkZXIuXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC11cCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtaW4ge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIE1lZGlhIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBsYXJnZXN0IGJyZWFrcG9pbnQuXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQgYW5kIG5hcnJvd2VyLlxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtYXgge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIE1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgYnJlYWtwb2ludCB3aWR0aHMuXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggYnJlYWtwb2ludHNcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LWJldHdlZW4oJGxvd2VyLCAkdXBwZXIsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnJlYWtwb2ludC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiBicmVha3BvaW50LW1heCgkdXBwZXIsICRicmVha3BvaW50cyk7XG5cbiAgQGlmICRtaW4gIT0gbnVsbCBhbmQgJG1heCAhPSBudWxsIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkdXBwZXIsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vIE1lZGlhIGJldHdlZW4gdGhlIGJyZWFrcG9pbnQncyBtaW5pbXVtIGFuZCBtYXhpbXVtIHdpZHRocy5cbi8vIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmQgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IG9ubHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQsIG5vdCB2aWV3cG9ydHMgYW55IHdpZGVyIG9yIG5hcnJvd2VyLlxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtb25seSgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiAgYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gICRuZXh0OiBicmVha3BvaW50LW5leHQoJG5hbWUsICRicmVha3BvaW50cyk7XG4gICRtYXg6ICBicmVha3BvaW50LW1heCgkbmV4dCwgJGJyZWFrcG9pbnRzKTtcblxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkbmFtZSwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJG5leHQsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9*/