/*!
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
  position: absolute;
  overflow: hidden;
  width: 100%;
  height: 100%;
  background: #1B1B1B;
  text-align: left; }
  .pesdk-react-editor html, .pesdk-react-editor body, .pesdk-react-editor div, .pesdk-react-editor span, .pesdk-react-editor applet, .pesdk-react-editor object, .pesdk-react-editor iframe,
  .pesdk-react-editor h1, .pesdk-react-editor h2, .pesdk-react-editor h3, .pesdk-react-editor h4, .pesdk-react-editor h5, .pesdk-react-editor h6, .pesdk-react-editor p, .pesdk-react-editor blockquote, .pesdk-react-editor pre,
  .pesdk-react-editor a, .pesdk-react-editor abbr, .pesdk-react-editor acronym, .pesdk-react-editor address, .pesdk-react-editor big, .pesdk-react-editor cite, .pesdk-react-editor code,
  .pesdk-react-editor del, .pesdk-react-editor dfn, .pesdk-react-editor em, .pesdk-react-editor img, .pesdk-react-editor ins, .pesdk-react-editor kbd, .pesdk-react-editor q, .pesdk-react-editor s, .pesdk-react-editor samp,
  .pesdk-react-editor small, .pesdk-react-editor strike, .pesdk-react-editor strong, .pesdk-react-editor sub, .pesdk-react-editor sup, .pesdk-react-editor tt, .pesdk-react-editor var,
  .pesdk-react-editor b, .pesdk-react-editor u, .pesdk-react-editor i, .pesdk-react-editor center,
  .pesdk-react-editor dl, .pesdk-react-editor dt, .pesdk-react-editor dd, .pesdk-react-editor ol, .pesdk-react-editor ul, .pesdk-react-editor li,
  .pesdk-react-editor fieldset, .pesdk-react-editor form, .pesdk-react-editor label, .pesdk-react-editor legend,
  .pesdk-react-editor table, .pesdk-react-editor caption, .pesdk-react-editor tbody, .pesdk-react-editor tfoot, .pesdk-react-editor thead, .pesdk-react-editor tr, .pesdk-react-editor th, .pesdk-react-editor td,
  .pesdk-react-editor article, .pesdk-react-editor aside, .pesdk-react-editor canvas, .pesdk-react-editor details, .pesdk-react-editor embed,
  .pesdk-react-editor figure, .pesdk-react-editor figcaption, .pesdk-react-editor footer, .pesdk-react-editor header, .pesdk-react-editor hgroup,
  .pesdk-react-editor menu, .pesdk-react-editor nav, .pesdk-react-editor output, .pesdk-react-editor ruby, .pesdk-react-editor section, .pesdk-react-editor summary,
  .pesdk-react-editor time, .pesdk-react-editor mark, .pesdk-react-editor audio, .pesdk-react-editor video {
    margin: 0;
    padding: 0;
    border: 0;
    font: inherit;
    font-size: 100%;
    vertical-align: baseline; }
  .pesdk-react-editor html {
    line-height: 1; }
  .pesdk-react-editor ol, .pesdk-react-editor ul {
    list-style: none; }
  .pesdk-react-editor table {
    border-collapse: collapse;
    border-spacing: 0; }
  .pesdk-react-editor caption, .pesdk-react-editor th, .pesdk-react-editor td {
    text-align: left;
    font-weight: normal;
    vertical-align: middle; }
  .pesdk-react-editor q, .pesdk-react-editor blockquote {
    quotes: none; }
    .pesdk-react-editor q:before, .pesdk-react-editor q:after, .pesdk-react-editor blockquote:before, .pesdk-react-editor blockquote:after {
      content: "";
      content: none; }
  .pesdk-react-editor a img {
    border: none; }
  .pesdk-react-editor article, .pesdk-react-editor aside, .pesdk-react-editor details, .pesdk-react-editor figcaption, .pesdk-react-editor figure, .pesdk-react-editor footer, .pesdk-react-editor header, .pesdk-react-editor hgroup, .pesdk-react-editor main, .pesdk-react-editor menu, .pesdk-react-editor nav, .pesdk-react-editor section, .pesdk-react-editor summary {
    display: block; }
  @media only screen and (min-width: 768px) {
    .pesdk-react-editor {
      -webkit-border-radius: 5px;
      -moz-border-radius: 5px;
      -ms-border-radius: 5px;
      -o-border-radius: 5px;
      border-radius: 5px; } }
  .pesdk-react-editor, .pesdk-react-editor * {
    box-sizing: border-box; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 30px;
  background: #1B1B1B;
  text-align: center; }
  .pesdk-react-editor .pesdk-react-header__label {
    font-family: "Roboto";
    font-weight: normal;
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
    opacity: 0.5;
    font-size: 11px;
    line-height: 30px;
    color: white; }
  .pesdk-react-editor .pesdk-react-header__close {
    position: absolute;
    top: 10px;
    left: 15px;
    cursor: pointer; }
    .pesdk-react-editor .pesdk-react-header__close__image {
      width: 11px;
      height: 11px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-screen {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  position: absolute;
  z-index: 0;
  width: 100%;
  height: 100%;
  padding-top: 30px;
  background: #2B2B2B; }
  .pesdk-react-editor .pesdk-react-screen--noHeader {
    padding-top: 0; }
  .pesdk-react-editor .pesdk-react-screen.is-hidden {
    z-index: -1; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-button {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  font-family: "Roboto";
  font-weight: normal;
  -webkit-transition: all 0.3s ease-out;
  -moz-transition: all 0.3s ease-out;
  -o-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
  border: none;
  padding: 10px 15px;
  background: #43ADEB;
  cursor: pointer;
  font-size: 14px;
  color: white; }
  .pesdk-react-editor .pesdk-react-button:focus {
    outline: none; }
  .pesdk-react-editor .pesdk-react-button:hover {
    background: #71c1f0; }
  .pesdk-react-editor .pesdk-react-button--inline {
    display: inline-block; }
  .pesdk-react-editor .pesdk-react-button--uppercase {
    text-transform: uppercase;
    letter-spacing: 1px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-topBar__row {
  display: table-row;
  height: 50px;
  background: #2B2B2B;
  text-align: center; }

.pesdk-react-editor .pesdk-react-topBar__table {
  display: table;
  width: 100%; }

.pesdk-react-editor .pesdk-react-topBar__cell {
  position: relative;
  display: table-cell;
  vertical-align: middle;
  white-space: nowrap; }
  .pesdk-react-editor .pesdk-react-topBar__cell--left, .pesdk-react-editor .pesdk-react-topBar__cell--right {
    padding: 0 20px; }
  .pesdk-react-editor .pesdk-react-topBar__cell--left {
    text-align: left; }
  .pesdk-react-editor .pesdk-react-topBar__cell--right {
    text-align: right; }
  .pesdk-react-editor .pesdk-react-topBar__cell--fullWidth {
    width: 100%; }

.pesdk-react-editor .pesdk-react-topBar__label {
  font-family: "Roboto";
  font-weight: normal;
  font-size: 15px;
  line-height: 50px;
  color: white; }

.pesdk-react-editor .pesdk-react-topBar__left, .pesdk-react-editor .pesdk-react-topBar__right {
  position: absolute;
  top: 10px; }

.pesdk-react-editor .pesdk-react-topBar__left {
  left: 15px; }

.pesdk-react-editor .pesdk-react-topBar__right {
  right: 15px; }

.pesdk-react-editor .pesdk-react-topBar__backButton {
  overflow: hidden;
  *zoom: 1;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-topBar__backButton__icon, .pesdk-react-editor .pesdk-react-topBar__backButton__label {
    display: inline-block;
    vertical-align: middle; }
  .pesdk-react-editor .pesdk-react-topBar__backButton__icon {
    margin-right: 15px;
    width: 16px;
    height: 16px; }
  .pesdk-react-editor .pesdk-react-topBar__backButton__label {
    font-family: "Roboto";
    font-weight: normal;
    display: none;
    font-size: 14px;
    color: white; }
    @media only screen and (min-width: 768px) {
      .pesdk-react-editor .pesdk-react-topBar__backButton__label {
        display: inline-block; } }

.pesdk-react-editor .pesdk-react-topBar__cancelButton {
  font-family: "Roboto";
  font-weight: normal;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
  opacity: 0.5;
  position: absolute;
  left: 20px;
  cursor: pointer;
  font-size: 15px;
  line-height: 50px;
  color: white; }
  .pesdk-react-editor .pesdk-react-topBar__cancelButton:hover {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
    opacity: 1; }

.pesdk-react-editor .pesdk-react-topBar__space {
  display: inline-block;
  width: 10px; }

.pesdk-react-editor .pesdk-react-topBar__iconButton {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
  opacity: 0.7;
  -webkit-transition: all 0.3s ease-out;
  -moz-transition: all 0.3s ease-out;
  -o-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
  display: inline-block;
  margin: 0 14px;
  padding-top: 1px;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-topBar__iconButton:hover {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
    opacity: 1; }
  .pesdk-react-editor .pesdk-react-topBar__iconButton__icon {
    width: 20px;
    height: 20px; }

.pesdk-react-editor .pesdk-react-topBar__button {
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
  position: relative;
  display: inline-block;
  margin: 0 5px;
  height: 30px;
  padding: 0 6px 0 9px;
  background: #1B1B1B;
  cursor: pointer; }
  @media only screen and (min-width: 768px) {
    .pesdk-react-editor .pesdk-react-topBar__button {
      padding-right: 12px; } }
  .pesdk-react-editor .pesdk-react-topBar__button--blue {
    background: #43ADEB; }
  .pesdk-react-editor .pesdk-react-topBar__button--withIcon {
    padding-left: 32px; }
  .pesdk-react-editor .pesdk-react-topBar__button__label {
    font-family: "Roboto";
    font-weight: normal;
    display: none;
    font-size: 12px;
    line-height: 30px;
    color: white; }
    @media only screen and (min-width: 768px) {
      .pesdk-react-editor .pesdk-react-topBar__button__label {
        display: inline-block; } }
  .pesdk-react-editor .pesdk-react-topBar__button__icon {
    position: absolute;
    top: 9px;
    left: 11px;
    width: 14px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-canvas__container__row {
  display: table-row;
  background: #1B1B1B; }

.pesdk-react-editor .pesdk-react-canvas__container__cell {
  position: relative;
  display: table-cell;
  overflow: hidden; }

.pesdk-react-editor .pesdk-react-canvas__innerContainer, .pesdk-react-editor .pesdk-react-canvas__canvas {
  position: absolute;
  width: 100%;
  height: 100%; }
  .pesdk-react-editor .pesdk-react-canvas__innerContainer.is-draggable, .pesdk-react-editor .pesdk-react-canvas__canvas.is-draggable {
    cursor: move; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-controls {
  position: relative; }
  .pesdk-react-editor .pesdk-react-controls__container__row {
    display: table-row;
    height: 84px;
    background: #2B2B2B; }
  .pesdk-react-editor .pesdk-react-controls__container__cell {
    display: table-cell;
    height: 84px;
    text-align: center; }
  .pesdk-react-editor .pesdk-react-controls__table {
    position: absolute;
    display: table;
    width: 100%;
    height: 84px;
    table-layout: fixed; }
  .pesdk-react-editor .pesdk-react-controls__overlay {
    position: absolute;
    z-index: 3;
    bottom: 100%;
    left: 0;
    width: 100%; }
    .pesdk-react-editor .pesdk-react-controls__overlay--large {
      padding: 15px 0 10px 0; }
    .pesdk-react-editor .pesdk-react-controls__overlay--dark {
      background: rgba(43, 43, 43, 0.7); }
  .pesdk-react-editor .pesdk-react-controls__cell {
    position: relative;
    display: table-cell;
    vertical-align: top; }
    .pesdk-react-editor .pesdk-react-controls__cell--button, .pesdk-react-editor .pesdk-react-controls__cell--colorPicker {
      width: 74px; }
    .pesdk-react-editor .pesdk-react-controls__cell--categoryDropdown {
      width: 84px;
      background: #393939; }
    .pesdk-react-editor .pesdk-react-controls__cell--largeButton {
      width: 57px; }
    .pesdk-react-editor .pesdk-react-controls__cell--veryLargeButton {
      width: 74px; }
    .pesdk-react-editor .pesdk-react-controls__cell--slider {
      padding-top: 30px;
      padding-right: 10px;
      padding-left: 10px; }
    .pesdk-react-editor .pesdk-react-controls__cell--withBorderRight {
      border-right: 2px solid #1B1B1B; }
    .pesdk-react-editor .pesdk-react-controls__cell--withBorderLeft {
      border-left: 2px solid #1B1B1B; }
    .pesdk-react-editor .pesdk-react-controls__cell--empty {
      width: 0; }
  .pesdk-react-editor .pesdk-react-controls__largeButton, .pesdk-react-editor .pesdk-react-controls__veryLargeButton {
    position: relative;
    display: inline-block;
    width: 57px;
    height: 84px;
    background: #393939;
    cursor: pointer;
    line-height: 84px; }
    .pesdk-react-editor .pesdk-react-controls__largeButton__icon, .pesdk-react-editor .pesdk-react-controls__veryLargeButton__icon {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
      opacity: 0.8;
      vertical-align: middle;
      width: 36px; }
  .pesdk-react-editor .pesdk-react-controls__veryLargeButton {
    width: 74px; }
    .pesdk-react-editor .pesdk-react-controls__veryLargeButton__icon {
      width: 48px; }
  .pesdk-react-editor .pesdk-react-controls__button {
    -webkit-border-radius: 1px;
    -moz-border-radius: 1px;
    -ms-border-radius: 1px;
    -o-border-radius: 1px;
    border-radius: 1px;
    position: relative;
    display: inline-block;
    width: 64px;
    height: 60px;
    cursor: pointer;
    line-height: 60px; }
    .pesdk-react-editor .pesdk-react-controls__button__inlineLabel {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%; }
      .pesdk-react-editor .pesdk-react-controls__button__inlineLabel.is-active {
        background: rgba(67, 173, 235, 0.8); }
      .pesdk-react-editor .pesdk-react-controls__button__inlineLabel__label {
        background: -owg-linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
        background: -webkit-linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
        background: -moz-linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
        background: -o-linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
        background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
        font-family: "Roboto";
        font-weight: 100;
        position: absolute;
        bottom: 0;
        width: 100%;
        padding: 5px 0;
        font-size: 10px;
        color: white; }
    .pesdk-react-editor .pesdk-react-controls__button.is-active {
      background: #43ADEB; }
    .pesdk-react-editor .pesdk-react-controls__button * {
      line-height: 1; }
    .pesdk-react-editor .pesdk-react-controls__button--narrow {
      width: 57px; }
    .pesdk-react-editor .pesdk-react-controls__button__icon {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
      opacity: 0.8;
      width: 36px; }
    .pesdk-react-editor .pesdk-react-controls__button__canvas {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
      opacity: 0.8;
      width: 36px;
      height: 36px; }
      .pesdk-react-editor .pesdk-react-controls__button__canvas:hover {
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
        opacity: 1; }
      .pesdk-react-editor .pesdk-react-controls__button__canvas--large {
        width: 64px;
        height: 60px; }
    .pesdk-react-editor .pesdk-react-controls__button__label {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
      opacity: 0.8;
      font-family: "Roboto";
      font-weight: normal;
      -webkit-transform: translateX(-50%);
      -moz-transform: translateX(-50%);
      -ms-transform: translateX(-50%);
      -o-transform: translateX(-50%);
      transform: translateX(-50%);
      position: absolute;
      bottom: 9px;
      left: 50%;
      width: 100%;
      font-size: 10px;
      color: white; }
  .pesdk-react-editor .pesdk-react-controls__list {
    position: absolute;
    overflow-x: auto;
    overflow-y: hidden;
    width: 100%;
    height: 84px;
    padding: 12px 0;
    white-space: nowrap; }
    .pesdk-react-editor .pesdk-react-controls__list__item {
      position: relative;
      display: inline-block;
      vertical-align: middle;
      padding: 0 5px; }
      .pesdk-react-editor .pesdk-react-controls__list__item--gap {
        width: 20px; }
    .pesdk-react-editor .pesdk-react-controls__list__separator {
      position: relative;
      display: inline-block;
      vertical-align: middle;
      margin: 0 5px;
      width: 1px;
      height: 64px;
      background: #464646; }

.pesdk-react-controls__button:hover .pesdk-react-controls__button__icon, .pesdk-react-controls__button:hover .pesdk-react-controls__button__label {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

.pesdk-react-controls__largeButton:hover .pesdk-react-controls__largeButton__icon, .pesdk-react-controls__largeButton:hover .pesdk-react-controls__largeButton__label {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

.pesdk-react-controls__veryLargeButton:hover .pesdk-react-controls__veryLargeButton__icon, .pesdk-react-controls__veryLargeButton:hover .pesdk-react-controls__veryLargeButton__label {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

.pesdk-react-controls__button--withInlineLabel .pesdk-react-controls__button__icon {
  -webkit-border-radius: 1px;
  -moz-border-radius: 1px;
  -ms-border-radius: 1px;
  -o-border-radius: 1px;
  border-radius: 1px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 64px;
  height: 60px; }

.pesdk-react-controls__button--withInlineLabel .pesdk-react-controls__button__label {
  -moz-border-radius-bottomleft: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-bottom-left-radius: 4px;
  -moz-border-radius-bottomright: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-bottom-right-radius: 4px;
  position: absolute;
  bottom: 0;
  left: 0;
  transform: none;
  width: 100%;
  background: #1B1B1B;
  line-height: 20px;
  text-align: center; }

.pesdk-react-controls__button--withInlineLabel.is-active .pesdk-react-controls__button__label {
  background: #43ADEB; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-canvasControls__innerContainer {
  position: absolute; }

.pesdk-react-editor .pesdk-react-canvasControls__container {
  position: absolute; }
  .pesdk-react-editor .pesdk-react-canvasControls__container--full {
    top: 0;
    left: 0;
    width: 100%;
    height: 100%; }
  .pesdk-react-editor .pesdk-react-canvasControls__container--bottom {
    bottom: 0;
    left: 0;
    width: 100%;
    padding: 15px 0 10px 0; }
  .pesdk-react-editor .pesdk-react-canvasControls__container--dark {
    background: rgba(43, 43, 43, 0.7); }

.pesdk-react-editor .pesdk-react-canvasControls__table {
  position: absolute;
  top: 0;
  left: 0;
  display: table;
  table-layout: fixed;
  width: 100%;
  height: 100%; }

.pesdk-react-editor .pesdk-react-canvasControls__row {
  display: table-row; }

.pesdk-react-editor .pesdk-react-canvasControls__cell {
  display: table-cell; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-webcam {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  width: 100%;
  height: 100%;
  padding: 25px; }
  .pesdk-react-editor .pesdk-react-webcam__video {
    display: block;
    margin: auto; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-scrollbar {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
  opacity: 0.3;
  position: absolute;
  width: 100%;
  height: 12px;
  padding: 4px;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-scrollbar--vertical {
    right: 5px;
    width: 12px;
    height: 100%; }
  .pesdk-react-editor .pesdk-react-scrollbar--visible {
    display: block; }
  .pesdk-react-editor .pesdk-react-scrollbar--invisible {
    display: none; }
  .pesdk-react-editor .pesdk-react-scrollbar__bar {
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 100%;
    height: 12px;
    padding: 4px; }
    .pesdk-react-editor .pesdk-react-scrollbar__bar:before {
      -webkit-border-radius: 4px;
      -moz-border-radius: 4px;
      -ms-border-radius: 4px;
      -o-border-radius: 4px;
      border-radius: 4px;
      display: block;
      width: 100%;
      height: 4px;
      background: white;
      content: ''; }
  .pesdk-react-editor .pesdk-react-scrollbar:hover {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
    opacity: 0.5; }

.pesdk-react-scrollbar--vertical .pesdk-react-scrollbar__bar {
  width: 12px;
  height: 100%; }
  .pesdk-react-scrollbar--vertical .pesdk-react-scrollbar__bar:before {
    width: 4px;
    height: 100%; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-slider {
  margin: auto;
  width: 280px; }
  .pesdk-react-editor .pesdk-react-slider--large {
    width: 100%;
    max-width: 600px; }
  .pesdk-react-editor .pesdk-react-slider__bar {
    position: relative;
    width: 100%;
    height: 6px; }
    .pesdk-react-editor .pesdk-react-slider__bar__background, .pesdk-react-editor .pesdk-react-slider__bar__foreground {
      -webkit-border-radius: 3px;
      -moz-border-radius: 3px;
      -ms-border-radius: 3px;
      -o-border-radius: 3px;
      border-radius: 3px;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%; }
    .pesdk-react-editor .pesdk-react-slider__bar__background {
      background: -owg-linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.7));
      background: -webkit-linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.7));
      background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.7));
      background: -o-linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.7));
      background: linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.7));
      cursor: pointer; }
    .pesdk-react-editor .pesdk-react-slider__bar__foreground {
      width: 0;
      background: #43ADEB; }
    .pesdk-react-editor .pesdk-react-slider__bar__knob {
      position: absolute;
      z-index: 2; }
    .pesdk-react-editor .pesdk-react-slider__bar__middleDot {
      -webkit-border-radius: 50%;
      -moz-border-radius: 50%;
      -ms-border-radius: 50%;
      -o-border-radius: 50%;
      border-radius: 50%;
      position: absolute;
      left: 50%;
      margin: -3px 0 0 -6px;
      width: 12px;
      height: 12px;
      background: #43ADEB;
      cursor: pointer; }
  .pesdk-react-editor .pesdk-react-slider__labels {
    display: table;
    padding-top: 15px;
    table-layout: fixed;
    width: 100%; }
    .pesdk-react-editor .pesdk-react-slider__labels__label {
      font-family: "Roboto";
      font-weight: 100;
      display: table-cell;
      font-size: 10px;
      text-transform: uppercase;
      color: white; }
      .pesdk-react-editor .pesdk-react-slider__labels__label--lowerBoundary {
        text-align: left; }
      .pesdk-react-editor .pesdk-react-slider__labels__label--upperBoundary {
        text-align: right; }
      .pesdk-react-editor .pesdk-react-slider__labels__label--upperBoundary, .pesdk-react-editor .pesdk-react-slider__labels__label--lowerBoundary {
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
        opacity: 0.5;
        width: 40px; }
      .pesdk-react-editor .pesdk-react-slider__labels__label--value {
        text-align: center; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-miniSlider {
  margin: auto;
  width: 44px; }
  .pesdk-react-editor .pesdk-react-miniSlider__bar {
    position: relative;
    width: 100%;
    height: 2px; }
    .pesdk-react-editor .pesdk-react-miniSlider__bar__background, .pesdk-react-editor .pesdk-react-miniSlider__bar__foreground {
      -webkit-border-radius: 3px;
      -moz-border-radius: 3px;
      -ms-border-radius: 3px;
      -o-border-radius: 3px;
      border-radius: 3px;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%; }
    .pesdk-react-editor .pesdk-react-miniSlider__bar__background {
      background: rgba(255, 255, 255, 0.3); }
    .pesdk-react-editor .pesdk-react-miniSlider__bar__foreground {
      width: 0;
      background: #43ADEB; }
    .pesdk-react-editor .pesdk-react-miniSlider__bar__knob {
      position: absolute;
      z-index: 2;
      bottom: 0;
      width: 2px;
      height: 4px;
      background: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-knob {
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  -ms-border-radius: 50%;
  -o-border-radius: 50%;
  border-radius: 50%;
  margin: -10px 0 0 -10px;
  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.5);
  width: 20px;
  height: 20px;
  background: white;
  cursor: pointer;
  line-height: 20px;
  text-align: center; }
  .pesdk-react-editor .pesdk-react-knob--transparent {
    border: 2px solid white;
    background: transparent; }
  .pesdk-react-editor .pesdk-react-knob--slider {
    margin: -7px 0 0 -7px;
    padding: 4px 0; }
    .pesdk-react-editor .pesdk-react-knob--slider:before {
      -webkit-border-radius: 50%;
      -moz-border-radius: 50%;
      -ms-border-radius: 50%;
      -o-border-radius: 50%;
      border-radius: 50%;
      display: block;
      margin: auto;
      border: 2px solid #43ADEB;
      width: 8px;
      height: 8px;
      content: ''; }
  .pesdk-react-editor .pesdk-react-knob__icon {
    width: 8px;
    -webkit-touch-callout: none !important;
    -webkit-user-select: none !important; }
    .pesdk-react-editor .pesdk-react-knob__icon--larger {
      margin-top: 4px;
      width: 10px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-colorPicker {
  height: 84px;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-colorPicker.is-active {
    background: #1B1B1B; }
  .pesdk-react-editor .pesdk-react-colorPicker__preview {
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    -ms-border-radius: 2px;
    -o-border-radius: 2px;
    border-radius: 2px;
    margin-top: 15px;
    width: 30px;
    height: 30px; }
  .pesdk-react-editor .pesdk-react-colorPicker__label {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
    opacity: 0.8;
    font-family: "Roboto";
    font-weight: normal;
    -webkit-transform: translateX(-50%);
    -moz-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%);
    position: absolute;
    bottom: 19px;
    left: 50%;
    width: 100%;
    font-size: 10px;
    color: white; }
  .pesdk-react-editor .pesdk-react-colorPicker__overlay {
    -moz-border-radius-topleft: 4px;
    -webkit-border-top-left-radius: 4px;
    border-top-left-radius: 4px;
    -moz-border-radius-topright: 4px;
    -webkit-border-top-right-radius: 4px;
    border-top-right-radius: 4px;
    position: absolute;
    z-index: 4;
    bottom: 100%;
    right: 0;
    display: table;
    width: 220px;
    padding: 10px;
    background: #1B1B1B;
    cursor: default; }
    .pesdk-react-editor .pesdk-react-colorPicker__overlay__bottom {
      overflow: hidden;
      *zoom: 1;
      overflow: visible;
      margin-top: 10px; }
  .pesdk-react-editor .pesdk-react-colorPicker__saturation, .pesdk-react-editor .pesdk-react-colorPicker__hue, .pesdk-react-editor .pesdk-react-colorPicker__alpha {
    position: relative; }
    .pesdk-react-editor .pesdk-react-colorPicker__saturation__knob, .pesdk-react-editor .pesdk-react-colorPicker__hue__knob, .pesdk-react-editor .pesdk-react-colorPicker__alpha__knob {
      position: absolute; }
    .pesdk-react-editor .pesdk-react-colorPicker__saturation__canvas, .pesdk-react-editor .pesdk-react-colorPicker__hue__canvas, .pesdk-react-editor .pesdk-react-colorPicker__alpha__canvas {
      cursor: pointer; }
  .pesdk-react-editor .pesdk-react-colorPicker__saturation {
    float: left;
    width: 160px;
    height: 160px; }
    .pesdk-react-editor .pesdk-react-colorPicker__saturation__canvas {
      width: 100%;
      height: 160px; }
  .pesdk-react-editor .pesdk-react-colorPicker__hue {
    float: right;
    width: 30px;
    height: 160px; }
    .pesdk-react-editor .pesdk-react-colorPicker__hue__canvas {
      width: 100%;
      height: 160px; }
  .pesdk-react-editor .pesdk-react-colorPicker__alpha {
    width: 100%;
    height: 30px; }
    .pesdk-react-editor .pesdk-react-colorPicker__alpha__canvas {
      width: 100%;
      height: 30px; }

.pesdk-react-colorPicker:hover .pesdk-react-colorPicker__icon, .pesdk-react-colorPicker:hover .pesdk-react-colorPicker__label {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-controls__categoryDropdown {
  position: relative;
  height: 84px;
  background: #393939;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-controls__categoryDropdown.is-active {
    background: #1B1B1B; }
  .pesdk-react-editor .pesdk-react-controls__categoryDropdown__label {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
    opacity: 0.8;
    font-family: "Roboto";
    font-weight: normal;
    -webkit-transform: translateX(-50%);
    -moz-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%);
    position: absolute;
    bottom: 19px;
    left: 50%;
    width: 100%;
    font-size: 10px;
    color: white; }
  .pesdk-react-editor .pesdk-react-controls__categoryDropdown__icon {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
    opacity: 0.8;
    margin-top: 13px;
    width: 36px;
    height: 36px; }

.pesdk-react-editor .pesdk-react-categoryDropdown__overlay {
  -moz-border-radius-topleft: 4px;
  -webkit-border-top-left-radius: 4px;
  border-top-left-radius: 4px;
  -moz-border-radius-topright: 4px;
  -webkit-border-top-right-radius: 4px;
  border-top-right-radius: 4px;
  position: absolute;
  z-index: 4;
  bottom: 100%;
  left: 0;
  display: table;
  width: 220px;
  padding: 10px;
  background: rgba(27, 27, 27, 0.9);
  cursor: default; }
  .pesdk-react-editor .pesdk-react-categoryDropdown__overlay__list__item {
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    -ms-border-radius: 2px;
    -o-border-radius: 2px;
    border-radius: 2px;
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);
    opacity: 0.9;
    margin-bottom: 2px;
    height: 48px;
    cursor: pointer; }
    .pesdk-react-editor .pesdk-react-categoryDropdown__overlay__list__item:hover {
      background: #1B1B1B; }
    .pesdk-react-editor .pesdk-react-categoryDropdown__overlay__list__item.is-active {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
      opacity: 1;
      background: #43ADEB; }
    .pesdk-react-editor .pesdk-react-categoryDropdown__overlay__list__item__label {
      font-family: "Roboto";
      font-weight: normal;
      padding: 0 15px;
      font-size: 13px;
      line-height: 48px;
      text-align: left;
      color: white; }
    .pesdk-react-editor .pesdk-react-categoryDropdown__overlay__list__item__icon {
      float: left;
      margin: 6px 10px 0 6px;
      width: 36px; }

.pesdk-react-controls__categoryDropdown:hover .pesdk-react-controls__categoryDropdown__icon, .pesdk-react-controls__categoryDropdown:hover .pesdk-react-controls__categoryDropdown__label {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-hiddenFileInput {
  position: absolute;
  top: 0;
  left: 0;
  visibility: hidden;
  width: 0;
  height: 0; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-modals__modal {
  -webkit-transform: translateX(-50%) translateY(-50%);
  -moz-transform: translateX(-50%) translateY(-50%);
  -ms-transform: translateX(-50%) translateY(-50%);
  -o-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  position: absolute;
  z-index: 6;
  top: 50%;
  left: 50%;
  border-top: 2px solid grey;
  border-radius: 5px;
  max-width: 90%;
  padding: 20px;
  background: rgba(43, 43, 43, 0.9);
  text-align: center; }
  .pesdk-react-editor .pesdk-react-modals__modal--error {
    border-color: #FF3E3E; }
  .pesdk-react-editor .pesdk-react-modals__modal--warning {
    border-color: #FFBF3E; }

.pesdk-react-editor .pesdk-react-modals__overlay {
  position: absolute;
  z-index: 5;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(27, 27, 27, 0.8); }

.pesdk-react-editor .pesdk-react-modals__button {
  margin-top: 0.5em; }

.pesdk-react-editor .pesdk-react-modals__title, .pesdk-react-editor .pesdk-react-modals__text {
  font-family: "Roboto";
  font-weight: normal;
  display: block;
  font-size: 15px;
  color: white; }

.pesdk-react-editor .pesdk-react-modals__title {
  margin-bottom: 0.5em; }

.pesdk-react-editor .pesdk-react-modals__text {
  font-size: 13px;
  color: rgba(255, 255, 255, 0.5); }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-loadingModal__progressBar {
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  -ms-border-radius: 3px;
  -o-border-radius: 3px;
  border-radius: 3px;
  overflow: hidden;
  margin: 10px auto 0;
  height: 5px;
  background: #313131; }
  .pesdk-react-editor .pesdk-react-loadingModal__progressBar__progress {
    height: 5px;
    background: rgba(255, 255, 255, 0.5); }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-photoRoll__row {
  display: table-row; }
  .pesdk-react-editor .pesdk-react-photoRoll__row--fullHeight {
    height: 100%; }

.pesdk-react-editor .pesdk-react-photoRoll__cell {
  position: relative;
  display: table-cell; }

.pesdk-react-editor .pesdk-react-photoRoll__container {
  position: absolute;
  top: 0;
  left: 0;
  overflow-y: auto;
  width: 100%;
  height: 100%;
  text-align: center; }
  @media only screen and (min-width: 768px) {
    .pesdk-react-editor .pesdk-react-photoRoll__container {
      text-align: left; } }

.pesdk-react-editor .pesdk-react-photoRoll__headline {
  font-family: "Roboto";
  font-weight: normal;
  margin-bottom: 24px;
  font-size: 14px;
  text-align: left;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: rgba(255, 255, 255, 0.5); }

.pesdk-react-editor .pesdk-react-photoRoll__innerContainer {
  margin: auto;
  max-width: 770px;
  padding: 30px 10px; }

.pesdk-react-editor .pesdk-react-photoRoll__groupList__item {
  margin: 30px 0 60px 0; }

.pesdk-react-editor .pesdk-react-photoRoll__libraryList {
  -webkit-box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.33);
  -moz-box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.33);
  box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.33);
  display: table;
  table-layout: fixed;
  width: 100%; }
  .pesdk-react-editor .pesdk-react-photoRoll__libraryList__item {
    filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='grayscale'><feColorMatrix type='saturate' values='0.79'/></filter></svg>#grayscale");
    filter: gray alpha(opacity=round(79));
    -webkit-filter: grayscale(79%);
    filter: grayscale(79%);
    position: relative;
    display: table-cell;
    height: 215px;
    background-repeat: no-repeat;
    background-position: center center;
    background-size: cover;
    cursor: pointer; }
  .pesdk-react-editor .pesdk-react-photoRoll__libraryList__overlay {
    -webkit-transition: all 0.3s ease-out;
    -moz-transition: all 0.3s ease-out;
    -o-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.35); }
  .pesdk-react-editor .pesdk-react-photoRoll__libraryList__name {
    font-family: "Roboto";
    font-weight: normal;
    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
    position: absolute;
    bottom: 22px;
    width: 100%;
    font-size: 16px;
    text-align: center;
    color: white; }

.pesdk-react-editor .pesdk-react-photoRoll__photoList__list {
  display: inline-block;
  vertical-align: top;
  margin-right: 15px;
  width: 240px; }
  .pesdk-react-editor .pesdk-react-photoRoll__photoList__list:last-child {
    margin-right: 0; }

.pesdk-react-editor .pesdk-react-photoRoll__photoList__item {
  position: relative;
  margin: 0 0 15px;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-photoRoll__photoList__item__image {
    width: 240px; }
  .pesdk-react-editor .pesdk-react-photoRoll__photoList__item__title, .pesdk-react-editor .pesdk-react-photoRoll__photoList__item__overlay {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
    opacity: 0;
    -webkit-transition: all 0.3s ease-out;
    -moz-transition: all 0.3s ease-out;
    -o-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out; }
  .pesdk-react-editor .pesdk-react-photoRoll__photoList__item__title {
    font-family: "Roboto";
    font-weight: normal;
    position: absolute;
    bottom: 0;
    display: table;
    width: 100%;
    height: 13px;
    padding: 15px 20px;
    color: white; }
  .pesdk-react-editor .pesdk-react-photoRoll__photoList__item__overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: black; }

.pesdk-react-editor .pesdk-react-photoRoll__noSearchResults {
  font-family: "Roboto";
  font-weight: 100;
  padding: 50px 0;
  font-size: 18px;
  line-height: 31px;
  text-align: center;
  color: rgba(255, 255, 255, 0.5); }
  .pesdk-react-editor .pesdk-react-photoRoll__noSearchResults strong {
    font-family: "Roboto";
    font-weight: normal; }

.pesdk-react-photoRoll__libraryList__item:hover {
  filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='grayscale'><feColorMatrix type='matrix' values='1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0'/></filter></svg>#grayscale");
  -webkit-filter: grayscale(0%);
  filter: grayscale(0); }
  .pesdk-react-photoRoll__libraryList__item:hover .pesdk-react-photoRoll__libraryList__overlay {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
    opacity: 0; }

.pesdk-react-photoRoll__photoList__item:hover .pesdk-react-photoRoll__photoList__item__overlay {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=37);
  opacity: 0.37; }

.pesdk-react-photoRoll__photoList__item:hover .pesdk-react-photoRoll__photoList__item__title {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-cropCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  display: table;
  width: 100%;
  height: 100%;
  table-layout: fixed; }
  .pesdk-react-editor .pesdk-react-cropCanvasControls__knob {
    position: absolute;
    z-index: 2; }
    .pesdk-react-editor .pesdk-react-cropCanvasControls__knob--topLeft {
      top: 0;
      left: 0;
      margin: -10px 0 0 -10px; }
    .pesdk-react-editor .pesdk-react-cropCanvasControls__knob--bottomRight {
      bottom: 0;
      right: 0;
      margin: 0 -10px -10px 0; }
  .pesdk-react-editor .pesdk-react-cropCanvasControls__row {
    display: table-row; }
  .pesdk-react-editor .pesdk-react-cropCanvasControls__cell {
    position: relative;
    display: table-cell;
    cursor: move; }
    .pesdk-react-editor .pesdk-react-cropCanvasControls__cell--dark {
      background: rgba(27, 27, 27, 0.8);
      cursor: default;
      font-size: 0px; }
    .pesdk-react-editor .pesdk-react-cropCanvasControls__cell--bordered {
      -webkit-box-shadow: 0px 1px 2px 0px black;
      -moz-box-shadow: 0px 1px 2px 0px black;
      box-shadow: 0px 1px 2px 0px black; }
  .pesdk-react-editor .pesdk-react-cropCanvasControls__dimensions {
    font-family: "Roboto";
    font-weight: 100;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    -ms-border-radius: 4px;
    -o-border-radius: 4px;
    border-radius: 4px;
    -webkit-transform: translateX(-50%) translateY(-50%);
    -moz-transform: translateX(-50%) translateY(-50%);
    -ms-transform: translateX(-50%) translateY(-50%);
    -o-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
    position: absolute;
    top: 50%;
    left: 50%;
    padding: 0 10px;
    background: rgba(27, 27, 27, 0.7);
    font-size: 10px;
    line-height: 24px;
    white-space: nowrap;
    color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-straightenCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  display: table;
  width: 100%;
  height: 100%;
  table-layout: fixed; }
  .pesdk-react-editor .pesdk-react-straightenCanvasControls__knob {
    position: absolute;
    z-index: 2; }
    .pesdk-react-editor .pesdk-react-straightenCanvasControls__knob--topLeft {
      top: 0;
      left: 0;
      margin: -10px 0 0 -10px; }
    .pesdk-react-editor .pesdk-react-straightenCanvasControls__knob--bottomRight {
      bottom: 0;
      right: 0;
      margin: 0 -10px -10px 0; }
  .pesdk-react-editor .pesdk-react-straightenCanvasControls__row {
    display: table-row; }
  .pesdk-react-editor .pesdk-react-straightenCanvasControls__cell {
    position: relative;
    display: table-cell;
    cursor: move; }
    .pesdk-react-editor .pesdk-react-straightenCanvasControls__cell--dark {
      background: rgba(27, 27, 27, 0.8);
      cursor: default;
      font-size: 0px; }
    .pesdk-react-editor .pesdk-react-straightenCanvasControls__cell--bordered {
      -webkit-box-shadow: 0px 1px 2px 0px black;
      -moz-box-shadow: 0px 1px 2px 0px black;
      box-shadow: 0px 1px 2px 0px black; }
  .pesdk-react-editor .pesdk-react-straightenCanvasControls__dimensions {
    font-family: "Roboto";
    font-weight: 100;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    -ms-border-radius: 4px;
    -o-border-radius: 4px;
    border-radius: 4px;
    -webkit-transform: translateX(-50%) translateY(-50%);
    -moz-transform: translateX(-50%) translateY(-50%);
    -ms-transform: translateX(-50%) translateY(-50%);
    -o-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
    position: absolute;
    top: 50%;
    left: 50%;
    padding: 0 10px;
    background: rgba(27, 27, 27, 0.7);
    font-size: 10px;
    line-height: 24px;
    white-space: nowrap;
    color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-linearFocusCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 100%; }
  .pesdk-react-editor .pesdk-react-linearFocusCanvasControls__knob {
    position: absolute;
    z-index: 2;
    margin: -10px 0 0 -10px; }
  .pesdk-react-editor .pesdk-react-linearFocusCanvasControls__area {
    -webkit-box-shadow: 0px 1px 2px 0px black;
    -moz-box-shadow: 0px 1px 2px 0px black;
    box-shadow: 0px 1px 2px 0px black;
    position: absolute;
    border: 1px solid white;
    cursor: move; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-radialFocusCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 100%; }
  .pesdk-react-editor .pesdk-react-radialFocusCanvasControls__knob {
    position: absolute;
    z-index: 2;
    margin: -10px 0 0 -10px; }
  .pesdk-react-editor .pesdk-react-radialFocusCanvasControls__area {
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    -ms-border-radius: 50%;
    -o-border-radius: 50%;
    border-radius: 50%;
    -webkit-box-shadow: 0px 1px 2px 0px black;
    -moz-box-shadow: 0px 1px 2px 0px black;
    box-shadow: 0px 1px 2px 0px black;
    position: absolute;
    border: 1px solid white;
    cursor: move; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-stickersControls__tooltip {
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
  position: absolute;
  border-color: #2B2B2B;
  position: absolute;
  bottom: 100%;
  left: 0;
  margin: 0 0 20px -80px;
  width: 130px;
  height: 200px;
  padding: 10px;
  background: #2B2B2B; }
  .pesdk-react-editor .pesdk-react-stickersControls__tooltip:before {
    position: absolute;
    border-color: #2B2B2B;
    width: 0;
    height: 0;
    content: "";
    top: 100%;
    left: 50%;
    margin-top: -1px;
    margin-left: -10px;
    border-top: 10px solid #2B2B2B;
    border-right: 10px solid transparent;
    border-left: 10px solid transparent;
    border-top-color: inherit; }
  .pesdk-react-editor .pesdk-react-stickersControls__tooltip__canvas {
    width: 100%;
    height: 100%; }

.pesdk-react-editor .pesdk-react-stickersControls__item {
  display: inline-block;
  margin: 0 4px;
  width: 84px;
  height: 60px;
  padding: 5px;
  background: #313131;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-stickersControls__item:first-child, .pesdk-react-editor .pesdk-react-stickersControls__item:last-child {
    margin-left: 8px; }
  .pesdk-react-editor .pesdk-react-stickersControls__item__canvas {
    width: 100%;
    height: 100%; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-spritesCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 100%;
  cursor: default; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__knob {
    position: absolute;
    z-index: 3; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__container {
    position: absolute; }
    .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__container--full {
      width: 100%;
      height: 100%; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__text, .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__sticker, .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__knob {
    position: absolute; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__text, .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__sticker {
    cursor: pointer; }
    .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__text.is-selected, .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__sticker.is-selected {
      -webkit-box-shadow: 0px 1px 2px 0px black;
      -moz-box-shadow: 0px 1px 2px 0px black;
      box-shadow: 0px 1px 2px 0px black;
      outline: 1px solid white;
      cursor: move; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__text__disabledOverlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__text__content {
    overflow: hidden;
    border: none;
    width: 100%;
    resize: none; }
  .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__brush {
    position: absolute;
    width: 100%;
    height: 100%; }
    .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__brush.is-selected {
      cursor: none; }
    .pesdk-react-editor .pesdk-react-spritesCanvasControls__item__brush canvas {
      position: absolute;
      width: 100%;
      height: 100%; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-spritesControlsOverlay {
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: 0 4px 9px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: 0 4px 9px rgba(0, 0, 0, 0.2);
  box-shadow: 0 4px 9px rgba(0, 0, 0, 0.2);
  -webkit-transform: translateX(-50%);
  -moz-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  -o-transform: translateX(-50%);
  transform: translateX(-50%);
  position: absolute;
  top: 20px;
  left: 50%;
  height: 31px;
  background: #43ADEB; }
  .pesdk-react-editor .pesdk-react-spritesControlsOverlay__item, .pesdk-react-editor .pesdk-react-spritesControlsOverlay__separator {
    display: inline-block; }
  .pesdk-react-editor .pesdk-react-spritesControlsOverlay__item {
    width: 35px;
    cursor: pointer;
    line-height: 31px;
    text-align: center; }
    .pesdk-react-editor .pesdk-react-spritesControlsOverlay__item:hover {
      background: rgba(0, 0, 0, 0.1); }
    .pesdk-react-editor .pesdk-react-spritesControlsOverlay__item__icon {
      vertical-align: middle;
      width: 30px;
      height: 30px; }
  .pesdk-react-editor .pesdk-react-spritesControlsOverlay__separator {
    width: 1px;
    height: 19px;
    background: rgba(0, 0, 0, 0.1);
    vertical-align: middle; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-adjustmentsControls__miniSlider {
  position: absolute;
  bottom: 0;
  left: 50%;
  margin-left: -22px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-textFontSizeControls {
  display: inline-block;
  width: 110px;
  height: 60px; }
  .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons {
    float: left;
    margin: 9px 0 0 15px; }
    .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons__button {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20);
      opacity: 0.2;
      width: 20px;
      height: 20px;
      background: white;
      cursor: pointer;
      line-height: 20px; }
      .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons__button:hover {
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
        opacity: 0.5; }
      .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons__button--plus {
        -moz-border-radius-topleft: 2px;
        -webkit-border-top-left-radius: 2px;
        border-top-left-radius: 2px;
        -moz-border-radius-topright: 2px;
        -webkit-border-top-right-radius: 2px;
        border-top-right-radius: 2px;
        margin-bottom: 1px; }
      .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons__button--minus {
        -moz-border-radius-bottomleft: 2px;
        -webkit-border-bottom-left-radius: 2px;
        border-bottom-left-radius: 2px;
        -moz-border-radius-bottomright: 2px;
        -webkit-border-bottom-right-radius: 2px;
        border-bottom-right-radius: 2px; }
      .pesdk-react-editor .pesdk-react-textFontSizeControls__buttons__button__icon {
        width: 10px;
        vertical-align: middle; }
  .pesdk-react-editor .pesdk-react-textFontSizeControls__right {
    float: right;
    margin-top: 7px;
    width: 60px;
    text-align: left; }
    .pesdk-react-editor .pesdk-react-textFontSizeControls__right__size {
      font-family: "Roboto";
      font-weight: normal;
      font-size: 24px;
      color: white; }
    .pesdk-react-editor .pesdk-react-textFontSizeControls__right__label {
      font-family: "Roboto";
      font-weight: normal;
      font-size: 10px;
      color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-fontSize__text {
  font-family: "Roboto";
  font-weight: normal;
  margin-top: 10px;
  font-size: 24px;
  color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-fontFamily__canvas {
  width: 60px;
  height: 42px; }

.pesdk-react-editor .pesdk-react-fontFamily__list {
  overflow-x: auto;
  overflow-y: hidden;
  width: 100%;
  padding: 5px 0 10px 0;
  white-space: nowrap; }

.pesdk-react-editor .pesdk-react-fontFamily__item {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 60px;
  vertical-align: middle;
  margin: 0 2px;
  border: 1px solid transparent;
  padding-bottom: 5px;
  cursor: pointer; }
  .pesdk-react-editor .pesdk-react-fontFamily__item.is-active {
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    -ms-border-radius: 3px;
    -o-border-radius: 3px;
    border-radius: 3px;
    border: 1px solid white; }

.pesdk-react-editor .pesdk-react-fontFamily__label {
  font-family: "Roboto";
  font-weight: normal;
  position: absolute;
  bottom: 5px;
  text-overflow: ellipsis;
  overflow: hidden;
  width: 100%;
  padding: 0 5px;
  font-size: 10px;
  color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-brushCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 100%;
  cursor: none; }
  .pesdk-react-editor .pesdk-react-brushCanvasControls__cursor {
    -webkit-box-shadow: 0px 1px 2px 0px black;
    -moz-box-shadow: 0px 1px 2px 0px black;
    box-shadow: 0px 1px 2px 0px black;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    -ms-border-radius: 50%;
    -o-border-radius: 50%;
    border-radius: 50%;
    position: absolute;
    display: none;
    border: 2px solid white;
    cursor: none; }
    .pesdk-react-editor .pesdk-react-brushCanvasControls__cursor.is-visible {
      display: block; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-selectiveBlurCanvasControls {
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
  width: 100%;
  height: 100%;
  cursor: none; }
  .pesdk-react-editor .pesdk-react-selectiveBlurCanvasControls__cursor {
    -webkit-box-shadow: 0px 1px 2px 0px black;
    -moz-box-shadow: 0px 1px 2px 0px black;
    box-shadow: 0px 1px 2px 0px black;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    -ms-border-radius: 50%;
    -o-border-radius: 50%;
    border-radius: 50%;
    position: absolute;
    display: none;
    border: 2px solid white;
    cursor: none; }
    .pesdk-react-editor .pesdk-react-selectiveBlurCanvasControls__cursor.is-visible {
      display: block; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-loadingScreen {
  position: relative;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #1B1B1B; }
  .pesdk-react-editor .pesdk-react-loadingScreen__container {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%; }
  .pesdk-react-editor .pesdk-react-loadingScreen__canvas {
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -53px;
    margin-left: -53px;
    width: 106px;
    height: 106px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-splashScreen {
  position: relative;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #1B1B1B; }
  .pesdk-react-editor .pesdk-react-splashScreen__container {
    -webkit-transform: translateX(-50%) translateY(-50%);
    -moz-transform: translateX(-50%) translateY(-50%);
    -ms-transform: translateX(-50%) translateY(-50%);
    -o-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
    -webkit-backface-visibility: hidden !important;
    position: absolute;
    top: 50%;
    left: 50%;
    width: 100%;
    max-width: 750px;
    height: 100%;
    max-height: 600px; }
  .pesdk-react-editor .pesdk-react-splashScreen__row {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    position: relative;
    vertical-align: middle;
    border: 6px solid transparent;
    width: 100%;
    height: 100%;
    text-align: center; }
    .pesdk-react-editor .pesdk-react-splashScreen__row--row-2 {
      height: 50%; }
    .pesdk-react-editor .pesdk-react-splashScreen__row--row-3 {
      height: 33.333333%; }
    .pesdk-react-editor .pesdk-react-splashScreen__row__contentWrapper {
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      display: table;
      width: 100%;
      height: 100%;
      table-layout: fixed;
      cursor: pointer; }
    .pesdk-react-editor .pesdk-react-splashScreen__row__contentRow {
      display: table-row; }
    .pesdk-react-editor .pesdk-react-splashScreen__row__overlay {
      -webkit-transition: all ease-out;
      -webkit-transition-delay: 0.1s;
      -moz-transition: all ease-out 0.1s;
      -o-transition: all ease-out 0.1s;
      transition: all ease-out 0.1s;
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
      opacity: 1;
      position: absolute;
      z-index: 0;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: rgba(0, 0, 0, 0.5); }
    .pesdk-react-editor .pesdk-react-splashScreen__row__contentCell {
      -webkit-border-radius: 5px;
      -moz-border-radius: 5px;
      -ms-border-radius: 5px;
      -o-border-radius: 5px;
      border-radius: 5px;
      position: relative;
      display: table-cell;
      vertical-align: middle;
      background-position: center center;
      background-size: cover; }
      .pesdk-react-editor .pesdk-react-splashScreen__row__contentCell--withBorder {
        -webkit-transition: all 0.3s ease-out;
        -moz-transition: all 0.3s ease-out;
        -o-transition: all 0.3s ease-out;
        transition: all 0.3s ease-out;
        border: 1px dashed rgba(255, 255, 255, 0.2); }
        .pesdk-react-editor .pesdk-react-splashScreen__row__contentCell--withBorder:hover {
          border-color: rgba(255, 255, 255, 0.5); }
    .pesdk-react-editor .pesdk-react-splashScreen__row__headline, .pesdk-react-editor .pesdk-react-splashScreen__row__description {
      text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
      position: relative;
      z-index: 1;
      margin: auto; }
    .pesdk-react-editor .pesdk-react-splashScreen__row__headline {
      font-family: "Roboto";
      font-weight: normal;
      font-size: 14px;
      text-transform: uppercase;
      letter-spacing: 1px;
      color: #FFFFFF; }
    .pesdk-react-editor .pesdk-react-splashScreen__row__description {
      font-family: "Roboto";
      font-weight: 100;
      max-width: 255px;
      padding-top: 13px;
      font-size: 14px;
      line-height: 1.5;
      color: #C5C5C5; }

.pesdk-react-splashScreen__row__contentWrapper:hover .pesdk-react-splashScreen__row__overlay {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
  opacity: 0; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-webcamScreen {
  position: relative;
  top: 0;
  left: 0;
  display: table;
  table-layout: fixed;
  width: 100%;
  height: 100%; }
  .pesdk-react-editor .pesdk-react-webcamScreen__row {
    display: table-row; }
  .pesdk-react-editor .pesdk-react-webcamScreen__cell {
    position: relative;
    display: table-cell; }
  .pesdk-react-editor .pesdk-react-webcamScreen__shutterButton {
    -webkit-border-radius: 26px;
    -moz-border-radius: 26px;
    -ms-border-radius: 26px;
    -o-border-radius: 26px;
    border-radius: 26px;
    display: inline-block;
    vertical-align: middle;
    margin: 15px auto auto auto;
    width: 115px;
    height: 53px;
    background: #979797;
    cursor: pointer; }
    .pesdk-react-editor .pesdk-react-webcamScreen__shutterButton.is-active {
      background: #43ADEB; }
    .pesdk-react-editor .pesdk-react-webcamScreen__shutterButton__icon {
      margin-top: 8px;
      width: 39px;
      height: 39px; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-editorScreen {
  position: relative;
  top: 0;
  left: 0;
  display: table;
  table-layout: fixed;
  width: 100%;
  height: 100%; }
  .pesdk-react-editor .pesdk-react-editorScreen__zoom {
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
    opacity: 0.7;
    display: table;
    margin: auto;
    width: auto;
    height: 100%;
    table-layout: fixed; }
    .pesdk-react-editor .pesdk-react-editorScreen__zoom__button {
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
      opacity: 0.5;
      display: table-cell;
      cursor: pointer;
      vertical-align: middle;
      padding: 0 17px; }
      .pesdk-react-editor .pesdk-react-editorScreen__zoom__button:hover {
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
        opacity: 1; }
      .pesdk-react-editor .pesdk-react-editorScreen__zoom__button.is-disabled {
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=10);
        opacity: 0.1; }
      .pesdk-react-editor .pesdk-react-editorScreen__zoom__button__image {
        width: 20px;
        height: 20px;
        vertical-align: middle; }
    .pesdk-react-editor .pesdk-react-editorScreen__zoom__label {
      font-family: "Roboto";
      font-weight: 100;
      display: table-cell;
      vertical-align: middle;
      font-size: 11px;
      color: white; }

/*
 * This file is part of PhotoEditorSDK.
 *
 * Copyright (C) 2016 9elements GmbH <contact@9elements.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without
 * modification, are permitted provided that the following license agreement
 * is approved and a legal/financial contract was signed by the user.
 * The license agreement can be found under following link:
 *
 * https://www.photoeditorsdk.com/LICENSE.txt
 */
.pesdk-react-editor .pesdk-react-photoRollScreen {
  position: relative;
  top: 0;
  left: 0;
  display: table;
  width: 100%;
  height: 100%;
  background: #1B1B1B;
  table-layout: fixed; }
  .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar {
    -webkit-border-radius: 15px;
    -moz-border-radius: 15px;
    -ms-border-radius: 15px;
    -o-border-radius: 15px;
    border-radius: 15px;
    position: relative;
    display: table;
    margin: auto;
    width: 100%;
    max-width: 400px;
    height: 30px;
    background: rgba(255, 255, 255, 0.2);
    text-align: center; }
    .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__content {
      -webkit-transform: translateX(-50%);
      -moz-transform: translateX(-50%);
      -ms-transform: translateX(-50%);
      -o-transform: translateX(-50%);
      transform: translateX(-50%);
      -webkit-transition: all 0.3s ease-out;
      -moz-transition: all 0.3s ease-out;
      -o-transition: all 0.3s ease-out;
      transition: all 0.3s ease-out;
      position: absolute;
      left: 50%;
      display: table; }
    .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar--active {
      background: white; }
    .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__icon {
      display: table-cell;
      vertical-align: middle;
      margin-right: 5px;
      width: 30px;
      height: 30px;
      padding-top: 1px; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__icon__image {
        width: 14px;
        height: 14px; }
    .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__inputContainer {
      display: table-cell; }
    .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input {
      font-family: "Roboto";
      font-weight: 100;
      -webkit-transition: all 0.3s ease-out;
      -moz-transition: all 0.3s ease-out;
      -o-transition: all 0.3s ease-out;
      transition: all 0.3s ease-out;
      display: inline-block;
      vertical-align: middle;
      border-width: 0;
      background: transparent;
      font-size: 13px;
      line-height: 30px;
      vertical-align: top; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:-ms-input-placeholder {
        color: #A8A8A8; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:-moz-placeholder {
        color: #A8A8A8; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input::-moz-placeholder {
        color: #A8A8A8; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input::-webkit-input-placeholder {
        color: #A8A8A8; }
      .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:focus {
        outline: none; }
        .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:focus:-ms-input-placeholder {
          color: #A8A8A8; }
        .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:focus:-moz-placeholder {
          color: #A8A8A8; }
        .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:focus::-moz-placeholder {
          color: #A8A8A8; }
        .pesdk-react-editor .pesdk-react-photoRollScreen__searchBar__input:focus::-webkit-input-placeholder {
          color: #A8A8A8; }

.pesdk-react-photoRollScreen__searchBar--active .pesdk-react-photoRollScreen__searchBar__content {
  -webkit-transition: all 0.3s ease-out;
  -moz-transition: all 0.3s ease-out;
  -o-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
  -webkit-transform: translateX(0);
  -moz-transform: translateX(0);
  -ms-transform: translateX(0);
  -o-transform: translateX(0);
  transform: translateX(0);
  left: 0;
  width: 400px; }

.pesdk-react-photoRollScreen__searchBar--active .pesdk-react-photoRollScreen__searchBar__input {
  width: 370px !important; }

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhvdG9FZGl0b3JSZWFjdFVJLmNzcyIsInNvdXJjZXMiOlsiUGhvdG9FZGl0b3JSZWFjdFVJLnNhc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL19jb21wYXNzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvX2Z1bmN0aW9ucy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2Z1bmN0aW9ucy9fbGlzdHMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9mdW5jdGlvbnMvX2Nyb3NzX2Jyb3dzZXJfc3VwcG9ydC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2Z1bmN0aW9ucy9fZ3JhZGllbnRfc3VwcG9ydC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2Z1bmN0aW9ucy9fY29uc3RhbnRzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19kaXNwbGF5LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19jb2xvcnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL19jb2xvci5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3V0aWxpdGllcy9jb2xvci9fY29udHJhc3Quc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvX2dlbmVyYWwuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvZ2VuZXJhbC9fcmVzZXQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL2dlbmVyYWwvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL2dlbmVyYWwvX2hhY2tzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvX3N1cHBvcnQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvZ2VuZXJhbC9fZmxvYXQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvZ2VuZXJhbC9fdGFnLWNsb3VkLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL2dlbmVyYWwvX21pbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3V0aWxpdGllcy9fc3ByaXRlcy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3V0aWxpdGllcy9zcHJpdGVzL19iYXNlLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL3Nwcml0ZXMvX3Nwcml0ZS1pbWcuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvX3RhYmxlcy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3V0aWxpdGllcy90YWJsZXMvX2FsdGVybmF0aW5nLXJvd3MtYW5kLWNvbHVtbnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy91dGlsaXRpZXMvdGFibGVzL19ib3JkZXJzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdXRpbGl0aWVzL3RhYmxlcy9fc2NhZmZvbGRpbmcuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L19saW5rcy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvbGlua3MvX2hvdmVyLWxpbmsuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L2xpbmtzL19saW5rLWNvbG9ycy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvbGlua3MvX3Vuc3R5bGVkLWxpbmsuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L19saXN0cy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvbGlzdHMvX2hvcml6b250YWwtbGlzdC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvbGlzdHMvX2J1bGxldHMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L2xpc3RzL19pbmxpbmUtbGlzdC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvbGlzdHMvX2lubGluZS1ibG9jay1saXN0LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9faW5saW5lLWJsb2NrLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fc2hhcmVkLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvdHlwb2dyYXBoeS9fdGV4dC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvdGV4dC9fZWxsaXBzaXMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L3RleHQvX25vd3JhcC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvdGV4dC9fcmVwbGFjZW1lbnQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy90eXBvZ3JhcGh5L3RleHQvX2ZvcmNlLXdyYXAuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9fdHlwb2dyYXBoeS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL3R5cG9ncmFwaHkvX3ZlcnRpY2FsX3JoeXRobS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2xheW91dC9fZ3JpZC1iYWNrZ3JvdW5kLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9faW1hZ2VzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fYmFja2dyb3VuZC1zaXplLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvX2NzczMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19ib3JkZXItcmFkaXVzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fb3BhY2l0eS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX2JveC1zaGFkb3cuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL190ZXh0LXNoYWRvdy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX2NvbHVtbnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19ib3gtc2l6aW5nLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fYm94LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fYmFja2dyb3VuZC1jbGlwLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fYmFja2dyb3VuZC1vcmlnaW4uc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19mb250LWZhY2Uuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL190cmFuc2Zvcm0uc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL190cmFuc2l0aW9uLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fYXBwZWFyYW5jZS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3JlZ2lvbnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19oeXBoZW5hdGlvbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX2ZpbHRlci5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3BpZS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3VzZXItaW50ZXJmYWNlLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fZmxleGJveC5zY3NzIiwicmVhY3QtdWkvX3ZhcmlhYmxlcy5zYXNzIiwicmVhY3QtdWkvbWl4aW5zL19iZW0uc2FzcyIsInJlYWN0LXVpL21peGlucy9fZm9udHMuc2FzcyIsInJlYWN0LXVpL21peGlucy9fcmVzcG9uc2l2ZS5zYXNzIiwicmVhY3QtdWkvbWl4aW5zL19hcnJvdy5zYXNzIiwicmVhY3QtdWkvbWl4aW5zL19wbGFjZWhvbGRlci5zYXNzIiwicmVhY3QtdWkvbWl4aW5zL19ncmF5c2NhbGUuc2NzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX2VkaXRvci5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9faGVhZGVyLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL19zY3JlZW4uc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX2J1dHRvbi5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fdG9wQmFyLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL19jYW52YXMuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX2NvbnRyb2xzLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL19jYW52YXNDb250cm9scy5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fd2ViY2FtLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL19zY3JvbGxiYXIuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX3NsaWRlci5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fbWluaVNsaWRlci5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fa25vYi5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fY29sb3JQaWNrZXIuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX2NhdGVnb3J5RHJvcGRvd24uc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX2hpZGRlbkZpbGVJbnB1dC5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9fbW9kYWxzLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL19sb2FkaW5nTW9kYWwuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvX3Bob3RvUm9sbC5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy9jcm9wL19jcm9wQ2FudmFzQ29udHJvbHMuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvc3RyYWlnaHRlbi9fc3RyYWlnaHRlbkNhbnZhc0NvbnRyb2xzLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL2xpbmVhci1mb2N1cy9fbGluZWFyRm9jdXNDYW52YXNDb250cm9scy5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy9yYWRpYWwtZm9jdXMvX3JhZGlhbEZvY3VzQ2FudmFzQ29udHJvbHMuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvc3RpY2tlcnMvX3N0aWNrZXJzQ29udHJvbHMuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvc3ByaXRlcy9fc3ByaXRlc0NhbnZhc0NvbnRyb2xzLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3Nwcml0ZXMvX3Nwcml0ZXNDb250cm9sc092ZXJsYXkuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvYWRqdXN0bWVudHMvYWRqdXN0bWVudHNDb250cm9scy5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy90ZXh0L190ZXh0Rm9udFNpemVDb250cm9scy5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy90ZXh0L19mb250U2l6ZS5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy90ZXh0L19mb250RmFtaWx5LnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL2JydXNoL19icnVzaENhbnZhc0NvbnRyb2xzLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3NlbGVjdGl2ZS1ibHVyL19zZWxlY3RpdmVCbHVyQ2FudmFzQ29udHJvbHMuc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvc2NyZWVucy9fbG9hZGluZ1NjcmVlbi5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9zY3JlZW5zL19zcGxhc2hTY3JlZW4uc2FzcyIsInJlYWN0LXVpL2NvbXBvbmVudHMvc2NyZWVucy9fd2ViY2FtU2NyZWVuLnNhc3MiLCJyZWFjdC11aS9jb21wb25lbnRzL3NjcmVlbnMvX2VkaXRvclNjcmVlbi5zYXNzIiwicmVhY3QtdWkvY29tcG9uZW50cy9zY3JlZW5zL19waG90b1JvbGxTY3JlZW4uc2FzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGltcG9ydCBcImNvbXBhc3NcIjtcblxuQGltcG9ydCBcInJlYWN0LXVpL3ZhcmlhYmxlc1wiO1xuXG4vLyBNaXhpbnNcbkBpbXBvcnQgXCJyZWFjdC11aS9taXhpbnMvYmVtXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvbWl4aW5zL2ZvbnRzXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvbWl4aW5zL3Jlc3BvbnNpdmVcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9taXhpbnMvYXJyb3dcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9taXhpbnMvcGxhY2Vob2xkZXJcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9taXhpbnMvZ3JheXNjYWxlXCI7XG5cbi8vIENvbXBvbmVudHNcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2VkaXRvclwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvaGVhZGVyXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9zY3JlZW5cIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2J1dHRvblwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvdG9wQmFyXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9jYW52YXNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9jYW52YXNDb250cm9sc1wiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvd2ViY2FtXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9zY3JvbGxiYXJcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL3NsaWRlclwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvbWluaVNsaWRlclwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMva25vYlwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvY29sb3JQaWNrZXJcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NhdGVnb3J5RHJvcGRvd25cIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2hpZGRlbkZpbGVJbnB1dFwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvbW9kYWxzXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9sb2FkaW5nTW9kYWxcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL3Bob3RvUm9sbFwiO1xuXG4vLyBDb250cm9sc1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvY3JvcC9jcm9wQ2FudmFzQ29udHJvbHNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3N0cmFpZ2h0ZW4vc3RyYWlnaHRlbkNhbnZhc0NvbnRyb2xzXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy9saW5lYXItZm9jdXMvbGluZWFyRm9jdXNDYW52YXNDb250cm9sc1wiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvcmFkaWFsLWZvY3VzL3JhZGlhbEZvY3VzQ2FudmFzQ29udHJvbHNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3N0aWNrZXJzL3N0aWNrZXJzQ29udHJvbHNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3Nwcml0ZXMvc3ByaXRlc0NhbnZhc0NvbnRyb2xzXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9jb250cm9scy9zcHJpdGVzL3Nwcml0ZXNDb250cm9sc092ZXJsYXlcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL2FkanVzdG1lbnRzL2FkanVzdG1lbnRzQ29udHJvbHNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3RleHQvdGV4dEZvbnRTaXplQ29udHJvbHNcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3RleHQvZm9udFNpemVcIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL2NvbnRyb2xzL3RleHQvZm9udEZhbWlseVwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvYnJ1c2gvYnJ1c2hDYW52YXNDb250cm9sc1wiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvY29udHJvbHMvc2VsZWN0aXZlLWJsdXIvc2VsZWN0aXZlQmx1ckNhbnZhc0NvbnRyb2xzXCI7XG5cbi8vIFNjcmVlbnNcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL3NjcmVlbnMvbG9hZGluZ1NjcmVlblwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvc2NyZWVucy9zcGxhc2hTY3JlZW5cIjtcbkBpbXBvcnQgXCJyZWFjdC11aS9jb21wb25lbnRzL3NjcmVlbnMvd2ViY2FtU2NyZWVuXCI7XG5AaW1wb3J0IFwicmVhY3QtdWkvY29tcG9uZW50cy9zY3JlZW5zL2VkaXRvclNjcmVlblwiO1xuQGltcG9ydCBcInJlYWN0LXVpL2NvbXBvbmVudHMvc2NyZWVucy9waG90b1JvbGxTY3JlZW5cIjtcbiIsIkBpbXBvcnQgXCJjb21wYXNzL2Z1bmN0aW9uc1wiO1xuQGltcG9ydCBcImNvbXBhc3MvdXRpbGl0aWVzXCI7XG5AaW1wb3J0IFwiY29tcGFzcy90eXBvZ3JhcGh5XCI7XG5AaW1wb3J0IFwiY29tcGFzcy9jc3MzXCI7XG4iLCJAaW1wb3J0IFwiZnVuY3Rpb25zL2xpc3RzXCI7XG5AaW1wb3J0IFwiZnVuY3Rpb25zL2Nyb3NzX2Jyb3dzZXJfc3VwcG9ydFwiO1xuQGltcG9ydCBcImZ1bmN0aW9ucy9ncmFkaWVudF9zdXBwb3J0XCI7XG5AaW1wb3J0IFwiZnVuY3Rpb25zL2NvbnN0YW50c1wiO1xuQGltcG9ydCBcImZ1bmN0aW9ucy9kaXNwbGF5XCI7XG5AaW1wb3J0IFwiZnVuY3Rpb25zL2NvbG9yc1wiO1xuIiwiLy9cbi8vIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBsaXN0IGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvbGlzdHMucmJcbi8vXG5cblxuLy8gY29tcGFjdCBpcyBwYXJ0IG9mIGxpYnNhc3NcblxuQGZ1bmN0aW9uIC1jb21wYXNzLW50aCgkbGlzdCwgJHBsYWNlKSB7XG4gIC8vIFllcCwgU2Fzcy1saXN0cyBhcmUgMS1pbmRleGVkLlxuICBAaWYgJHBsYWNlID09IFwiZmlyc3RcIiB7XG4gICAgJHBsYWNlOiAxO1xuICB9XG4gIEBpZiAkcGxhY2UgPT0gXCJsYXN0XCIge1xuICAgICRwbGFjZTogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICBAcmV0dXJuIG50aCgkbGlzdCwgJHBsYWNlKTtcbn1cblxuLy8gY29tcGFzc19saXN0IGNhbid0IGJlIGltcGxlbWVudGVkIGluIHNhc3Mgc2NyaXB0XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1zcGFjZS1saXN0KCRpdGVtMSwgJGl0ZW0yOm51bGwsICRpdGVtMzpudWxsLCAkaXRlbTQ6bnVsbCwgJGl0ZW01Om51bGwsICRpdGVtNjpudWxsLCAkaXRlbTc6bnVsbCwgJGl0ZW04Om51bGwsICRpdGVtOTpudWxsKSB7XG4gICRpdGVtczogKCk7XG4gIC8vIFN1cHBvcnQgZm9yIHBvbHltb3JwaGlzbS5cbiAgQGlmIHR5cGUtb2YoJGl0ZW0xKSA9PSAnbGlzdCcge1xuICAgIC8vIFBhc3NpbmcgYSBzaW5nbGUgYXJyYXkgb2YgcHJvcGVydGllcy5cbiAgICAkaXRlbXM6ICRpdGVtMTtcbiAgfSBAZWxzZSB7XG4gICAgJGl0ZW1zOiAkaXRlbTEgJGl0ZW0yICRpdGVtMyAkaXRlbTQgJGl0ZW01ICRpdGVtNiAkaXRlbTcgJGl0ZW04ICRpdGVtOTtcbiAgfVxuXG4gICRmdWxsOiBmaXJzdC12YWx1ZS1vZigkaXRlbXMpO1xuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRpdGVtcykge1xuICAgICRpdGVtOiBudGgoJGl0ZW1zLCAkaSk7XG4gICAgQGlmICRpdGVtICE9IG51bGwge1xuICAgICAgJGZ1bGw6ICRmdWxsICRpdGVtO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZ1bGw7XG59XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1saXN0LXNpemUoJGxpc3QpIHtcbiAgQHJldHVybiBsZW5ndGgoJGxpc3QpO1xufVxuXG5AZnVuY3Rpb24gLWNvbXBhc3Mtc2xpY2UoJGxpc3QsICRzdGFydCwgJGVuZDogZmFsc2UpIHtcbiAgQGlmICRlbmQgPT0gZmFsc2Uge1xuICAgICRlbmQ6IGxlbmd0aCgkbGlzdCk7XG4gIH1cbiAgJGZ1bGw6IG50aCgkbGlzdCwgJHN0YXJ0KTtcbiAgQGZvciAkaSBmcm9tICRzdGFydCArIDEgdGhyb3VnaCAkZW5kIHtcbiAgICAkZnVsbDogJGZ1bGwsIG50aCgkbGlzdCwgJGkpO1xuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59XG5cbkBmdW5jdGlvbiByZWplY3QoJGxpc3QsICRyZWplY3QxLCAkcmVqZWN0MjpudWxsLCAkcmVqZWN0MzpudWxsLCAkcmVqZWN0NDpudWxsLCAkcmVqZWN0NTpudWxsLCAkcmVqZWN0NjpudWxsLCAkcmVqZWN0NzpudWxsLCAkcmVqZWN0ODpudWxsLCAkcmVqZWN0OTpudWxsKSB7XG4gICRyZWplY3RzOiAkcmVqZWN0MSwgJHJlamVjdDIsICRyZWplY3QzLCAkcmVqZWN0NCwgJHJlamVjdDUsICRyZWplY3Q2LCAkcmVqZWN0NywgJHJlamVjdDgsICRyZWplY3Q5O1xuXG4gICRmdWxsOiBmYWxzZTtcbiAgQGVhY2ggJGl0ZW0gaW4gJGxpc3Qge1xuICAgIEBpZiBpbmRleCgkcmVqZWN0cywgJGl0ZW0pIHt9XG4gICAgQGVsc2Uge1xuICAgICAgQGlmICRmdWxsIHtcbiAgICAgICAgJGZ1bGw6ICRmdWxsLCAkaXRlbTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJGZ1bGw6ICRpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAcmV0dXJuICRmdWxsO1xufVxuXG5AZnVuY3Rpb24gZmlyc3QtdmFsdWUtb2YoJGxpc3QpIHtcbiAgQHJldHVybiBudGgoJGxpc3QsIDEpO1xufVxuXG5AZnVuY3Rpb24gY29tcGFjdCgkdmFycy4uLikge1xuICAkc2VwYXJhdG9yOiBsaXN0LXNlcGFyYXRvcigkdmFycyk7XG4gICRsaXN0OiAoKTtcbiAgQGVhY2ggJHZhciBpbiAkdmFycyB7XG4gICAgICBAaWYgJHZhciB7XG4gICAgICAgICAgJGxpc3Q6IGFwcGVuZCgkbGlzdCwgJHZhciwgJHNlcGFyYXRvcik7XG4gICAgICB9XG4gIH1cbiAgQHJldHVybiAkbGlzdDtcbn1cbiIsIi8vIFxuLy8gQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNyb3NzIGJyb3dzZXIgc3VwcG9ydCBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2Nyb3NzX2Jyb3dzZXJfc3VwcG9ydC5yYlxuLy8gXG5cbkBmdW5jdGlvbiBwcmVmaXhlZCgkcHJlZml4LCAkcHJvcGVydHkxLCAkcHJvcGVydHkyOm51bGwsICRwcm9wZXJ0eTM6bnVsbCwgJHByb3BlcnR5NDpudWxsLCAkcHJvcGVydHk1Om51bGwsICRwcm9wZXJ0eTY6bnVsbCwgJHByb3BlcnR5NzpudWxsLCAkcHJvcGVydHk4Om51bGwsICRwcm9wZXJ0eTk6bnVsbCkge1xuICAkcHJvcGVydGllczogJHByb3BlcnR5MSwgJHByb3BlcnR5MiwgJHByb3BlcnR5MywgJHByb3BlcnR5NCwgJHByb3BlcnR5NSwgJHByb3BlcnR5NiwgJHByb3BlcnR5NywgJHByb3BlcnR5OCwgJHByb3BlcnR5OTtcbiAgJHByZWZpeGVkOiBmYWxzZTtcbiAgQGVhY2ggJGl0ZW0gaW4gJHByb3BlcnRpZXMge1xuICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSAnc3RyaW5nJyB7XG4gICAgICAkcHJlZml4ZWQ6ICRwcmVmaXhlZCBvciBzdHItaW5kZXgoJGl0ZW0sICd1cmwnKSAhPSAxIGFuZCBzdHItaW5kZXgoJGl0ZW0sICdyZ2InKSAhPSAxIGFuZCBzdHItaW5kZXgoJGl0ZW0sICcjJykgIT0gMTtcbiAgICB9IEBlbHNlaWYgdHlwZS1vZigkaXRlbSkgPT0gJ2NvbG9yJyB7XG4gICAgfSBAZWxzZWlmICRpdGVtICE9IG51bGwge1xuICAgICAgJHByZWZpeGVkOiB0cnVlO1xuICAgIH1cbiAgfVxuICBAcmV0dXJuICRwcmVmaXhlZDtcbn1cblxuQGZ1bmN0aW9uIHByZWZpeCgkcHJlZml4LCAkcHJvcGVydHkxLCAkcHJvcGVydHkyOm51bGwsICRwcm9wZXJ0eTM6bnVsbCwgJHByb3BlcnR5NDpudWxsLCAkcHJvcGVydHk1Om51bGwsICRwcm9wZXJ0eTY6bnVsbCwgJHByb3BlcnR5NzpudWxsLCAkcHJvcGVydHk4Om51bGwsICRwcm9wZXJ0eTk6bnVsbCkge1xuICAkcHJvcGVydGllczogXCJcIjtcblxuICAvLyBTdXBwb3J0IGZvciBwb2x5bW9ycGhpc20uXG4gIEBpZiB0eXBlLW9mKCRwcm9wZXJ0eTEpID09ICdsaXN0JyB7XG4gICAgLy8gUGFzc2luZyBhIHNpbmdsZSBhcnJheSBvZiBwcm9wZXJ0aWVzLlxuICAgICRwcm9wZXJ0aWVzOiAkcHJvcGVydHkxO1xuICB9IEBlbHNlIHtcbiAgICAvLyBQYXNzaW5nIG11bHRpcGxlIHByb3BlcnRpZXMuXG4gICAgJHByb3BlcnRpZXM6ICRwcm9wZXJ0eTEsICRwcm9wZXJ0eTIsICRwcm9wZXJ0eTMsICRwcm9wZXJ0eTQsICRwcm9wZXJ0eTUsICRwcm9wZXJ0eTYsICRwcm9wZXJ0eTcsICRwcm9wZXJ0eTgsICRwcm9wZXJ0eTk7XG4gIH1cblxuICAkcHJvcHM6IGZhbHNlO1xuICBAZWFjaCAkaXRlbSBpbiAkcHJvcGVydGllcyB7XG4gICAgQGlmICRpdGVtID09IG51bGwge31cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgcHJlZml4ZWQoJHByZWZpeCwgJGl0ZW0pIHtcbiAgICAgICAgJGl0ZW06ICN7JHByZWZpeH0tI3skaXRlbX07XG4gICAgICB9XG4gICAgICBAaWYgJHByb3BzIHtcbiAgICAgICAgJHByb3BzOiAkcHJvcHMsICRpdGVtO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkcHJvcHM6ICRpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAcmV0dXJuICRwcm9wcztcbn1cblxuQGZ1bmN0aW9uIC1zdmcoJHByb3BlcnR5MSwgJHByb3BlcnR5MjpudWxsLCAkcHJvcGVydHkzOm51bGwsICRwcm9wZXJ0eTQ6bnVsbCwgJHByb3BlcnR5NTpudWxsLCAkcHJvcGVydHk2Om51bGwsICRwcm9wZXJ0eTc6bnVsbCwgJHByb3BlcnR5ODpudWxsLCAkcHJvcGVydHk5Om51bGwpIHtcbiAgQHJldHVybiBwcmVmaXgoJy1zdmcnLCAkcHJvcGVydHkxLCAkcHJvcGVydHkyLCAkcHJvcGVydHkzLCAkcHJvcGVydHk0LCAkcHJvcGVydHk1LCAkcHJvcGVydHk2LCAkcHJvcGVydHk3LCAkcHJvcGVydHk4LCAkcHJvcGVydHk5KTtcbn1cblxuQGZ1bmN0aW9uIC1vd2coJHByb3BlcnR5MSwgJHByb3BlcnR5MjpudWxsLCAkcHJvcGVydHkzOm51bGwsICRwcm9wZXJ0eTQ6bnVsbCwgJHByb3BlcnR5NTpudWxsLCAkcHJvcGVydHk2Om51bGwsICRwcm9wZXJ0eTc6bnVsbCwgJHByb3BlcnR5ODpudWxsLCAkcHJvcGVydHk5Om51bGwpIHtcbiAgQHJldHVybiBwcmVmaXgoJy1vd2cnLCAkcHJvcGVydHkxLCAkcHJvcGVydHkyLCAkcHJvcGVydHkzLCAkcHJvcGVydHk0LCAkcHJvcGVydHk1LCAkcHJvcGVydHk2LCAkcHJvcGVydHk3LCAkcHJvcGVydHk4LCAkcHJvcGVydHk5KTtcbn1cblxuQGZ1bmN0aW9uIC13ZWJraXQoJHByb3BlcnR5MSwgJHByb3BlcnR5MjpudWxsLCAkcHJvcGVydHkzOm51bGwsICRwcm9wZXJ0eTQ6bnVsbCwgJHByb3BlcnR5NTpudWxsLCAkcHJvcGVydHk2Om51bGwsICRwcm9wZXJ0eTc6bnVsbCwgJHByb3BlcnR5ODpudWxsLCAkcHJvcGVydHk5Om51bGwpIHtcbiAgQHJldHVybiBwcmVmaXgoJy13ZWJraXQnLCAkcHJvcGVydHkxLCAkcHJvcGVydHkyLCAkcHJvcGVydHkzLCAkcHJvcGVydHk0LCAkcHJvcGVydHk1LCAkcHJvcGVydHk2LCAkcHJvcGVydHk3LCAkcHJvcGVydHk4LCAkcHJvcGVydHk5KTtcbn1cblxuQGZ1bmN0aW9uIC1tb3ooJHByb3BlcnR5MSwgJHByb3BlcnR5MjpudWxsLCAkcHJvcGVydHkzOm51bGwsICRwcm9wZXJ0eTQ6bnVsbCwgJHByb3BlcnR5NTpudWxsLCAkcHJvcGVydHk2Om51bGwsICRwcm9wZXJ0eTc6bnVsbCwgJHByb3BlcnR5ODpudWxsLCAkcHJvcGVydHk5Om51bGwpIHtcbiAgQHJldHVybiBwcmVmaXgoJy1tb3onLCAkcHJvcGVydHkxLCAkcHJvcGVydHkyLCAkcHJvcGVydHkzLCAkcHJvcGVydHk0LCAkcHJvcGVydHk1LCAkcHJvcGVydHk2LCAkcHJvcGVydHk3LCAkcHJvcGVydHk4LCAkcHJvcGVydHk5KTtcbn1cblxuQGZ1bmN0aW9uIC1vKCRwcm9wZXJ0eTEsICRwcm9wZXJ0eTI6bnVsbCwgJHByb3BlcnR5MzpudWxsLCAkcHJvcGVydHk0Om51bGwsICRwcm9wZXJ0eTU6bnVsbCwgJHByb3BlcnR5NjpudWxsLCAkcHJvcGVydHk3Om51bGwsICRwcm9wZXJ0eTg6bnVsbCwgJHByb3BlcnR5OTpudWxsKSB7XG4gIEByZXR1cm4gcHJlZml4KCctbycsICRwcm9wZXJ0eTEsICRwcm9wZXJ0eTIsICRwcm9wZXJ0eTMsICRwcm9wZXJ0eTQsICRwcm9wZXJ0eTUsICRwcm9wZXJ0eTYsICRwcm9wZXJ0eTcsICRwcm9wZXJ0eTgsICRwcm9wZXJ0eTkpO1xufVxuXG5AZnVuY3Rpb24gLXBpZSgkcHJvcGVydHkxLCAkcHJvcGVydHkyOm51bGwsICRwcm9wZXJ0eTM6bnVsbCwgJHByb3BlcnR5NDpudWxsLCAkcHJvcGVydHk1Om51bGwsICRwcm9wZXJ0eTY6bnVsbCwgJHByb3BlcnR5NzpudWxsLCAkcHJvcGVydHk4Om51bGwsICRwcm9wZXJ0eTk6bnVsbCkge1xuICBAcmV0dXJuIHByZWZpeCgnLXBpZScsICRwcm9wZXJ0eTEsICRwcm9wZXJ0eTIsICRwcm9wZXJ0eTMsICRwcm9wZXJ0eTQsICRwcm9wZXJ0eTUsICRwcm9wZXJ0eTYsICRwcm9wZXJ0eTcsICRwcm9wZXJ0eTgsICRwcm9wZXJ0eTkpO1xufVxuIiwiLy8gXG4vLyBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgZ3JhZGllbnQgc3VwcG9ydCBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3YwLjEyLjIvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9ncmFkaWVudF9zdXBwb3J0LnJiXG4vLyBcblxuQGZ1bmN0aW9uIGNvbG9yLXN0b3BzKCRpdGVtMSwgJGl0ZW0yOm51bGwsICRpdGVtMzpudWxsLCAkaXRlbTQ6bnVsbCwgJGl0ZW01Om51bGwsICRpdGVtNjpudWxsLCAkaXRlbTc6bnVsbCwgJGl0ZW04Om51bGwsICRpdGVtOTpudWxsKSB7XG4gICRpdGVtczogJGl0ZW0yLCAkaXRlbTMsICRpdGVtNCwgJGl0ZW01LCAkaXRlbTYsICRpdGVtNywgJGl0ZW04LCAkaXRlbTk7XG4gICRmdWxsOiAkaXRlbTE7XG4gIEBlYWNoICRpdGVtIGluICRpdGVtcyB7XG4gICAgQGlmICRpdGVtICE9IG51bGwge1xuICAgICAgJGZ1bGw6ICRmdWxsLCAkaXRlbTtcbiAgICB9ICAgIFxuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59IiwiLy8gXG4vLyBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgY29uc3RhbnRzIGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvY29uc3RhbnRzLnJiXG4vLyBcblxuQGZ1bmN0aW9uIG9wcG9zaXRlLXBvc2l0aW9uKCRmcm9tKSB7XG4gICAgQGlmICgkZnJvbSA9PSB0b3ApIHtcbiAgICAgICAgQHJldHVybiBib3R0b207XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gYm90dG9tKSB7XG4gICAgICAgIEByZXR1cm4gdG9wO1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGxlZnQpIHtcbiAgICAgICAgQHJldHVybiByaWdodDtcbiAgICB9IEBlbHNlIGlmICgkZnJvbSA9PSByaWdodCkge1xuICAgICAgICBAcmV0dXJuIGxlZnQ7XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gY2VudGVyKSB7XG4gICAgICAgIEByZXR1cm4gY2VudGVyO1xuICAgIH1cbn1cbiIsIi8vIFxuLy8gQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGRpc3BsYXkgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvY29yZS9saWIvY29tcGFzcy9jb3JlL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvZGlzcGxheS5yYlxuLy8gXG5cbkBmdW5jdGlvbiBlbGVtZW50cy1vZi10eXBlKCR0eXBlKXtcbiAgICBAaWYgKCR0eXBlID09IGJsb2NrKXtcbiAgICAgICAgQHJldHVybiBhZGRyZXNzLCBhcnRpY2xlLCBhc2lkZSwgYmxvY2txdW90ZSwgY2VudGVyLCBkaXIsIGRpdiwgZGQsIGRldGFpbHMsIGRsLCBkdCwgZmllbGRzZXQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9ybSwgZm9vdGVyLCBmcmFtZXNldCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaHIsIGhlYWRlciwgaGdyb3VwLCBpc2luZGV4LCBtYWluLCBtZW51LCBuYXYsIG5vZnJhbWVzLCBub3NjcmlwdCwgb2wsIHAsIHByZSwgc2VjdGlvbiwgc3VtbWFyeSwgdWw7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaW5saW5lKXtcbiAgICAgICAgQHJldHVybiBhLCBhYmJyLCBhY3JvbnltLCBhdWRpbywgYiwgYmFzZWZvbnQsIGJkbywgYmlnLCBiciwgY2FudmFzLCBjaXRlLCBjb2RlLCBjb21tYW5kLCBkYXRhbGlzdCwgZGZuLCBlbSwgZW1iZWQsIGZvbnQsIGksIGltZywgaW5wdXQsIGtleWdlbiwga2JkLCBsYWJlbCwgbWFyaywgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHEsIHJwLCBydCwgcnVieSwgcywgc2FtcCwgc2VsZWN0LCBzbWFsbCwgc3Bhbiwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0ZXh0YXJlYSwgdGltZSwgdHQsIHUsIHZhciwgdmlkZW8sIHdicjtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBpbmxpbmUtYmxvY2spe1xuICAgICAgICBAcmV0dXJuIGltZztcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZSl7XG4gICAgICAgIEByZXR1cm4gdGFibGU7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gbGlzdC1pdGVtKXtcbiAgICAgICAgQHJldHVybiBsaTtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3ctZ3JvdXApe1xuICAgICAgICBAcmV0dXJuIHRib2R5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWhlYWRlci1ncm91cCl7XG4gICAgICAgIEByZXR1cm4gdGhlYWQ7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGFibGUtZm9vdGVyLWdyb3VwKXtcbiAgICAgICAgQHJldHVybiB0Zm9vdDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3cpe1xuICAgICAgICBAcmV0dXJuIHRyO1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWNlbGwpe1xuICAgICAgICBAcmV0dXJuIHRoLCB0ZDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBodG1sNS1ibG9jayl7XG4gICAgICAgIEByZXR1cm4gYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IGh0bWw1LWlubGluZSl7XG4gICAgICAgIEByZXR1cm4gYXVkaW8sIGNhbnZhcywgY29tbWFuZCwgZGF0YWxpc3QsIGVtYmVkLCBrZXlnZW4sIG1hcmssIG1ldGVyLCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaHRtbDUpe1xuICAgICAgICBAcmV0dXJuIGFydGljbGUsIGFzaWRlLCBhdWRpbywgY2FudmFzLCBjb21tYW5kLCBkYXRhbGlzdCwgZGV0YWlscywgZW1iZWQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwga2V5Z2VuLCBtYWluLCBtYXJrLCBtZW51LCBtZXRlciwgbmF2LCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGV4dC1pbnB1dCl7XG4gICAgICAgIEByZXR1cm4gaW5wdXQsIHRleHRhcmVhO1xuICAgIH1cbn1cbiIsIi8vIFxuLy8gQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNvbG9ycyBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9jb3JlL2xpYi9jb21wYXNzL2NvcmUvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9jb2xvcnMucmJcbi8vXG5cbi8vIGEgZ2VuZXJpY2l6ZWQgdmVyc2lvbiBvZiBsaWdodGVuL2RhcmtlbiBzbyB0aGF0IG5lZ2F0aXZlIHZhbHVlcyBjYW4gYmUgdXNlZC5cbkBmdW5jdGlvbiBhZGp1c3QtbGlnaHRuZXNzKCRjb2xvciwgJGFtb3VudCkge1xuICAgIEByZXR1cm4gYWRqdXN0LWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGFtb3VudCk7XG59XG5cbi8vIFNjYWxlcyBhIGNvbG9yJ3MgbGlnaHRuZXNzIGJ5IHNvbWUgcGVyY2VudGFnZS5cbi8vIElmIHRoZSBhbW91bnQgaXMgbmVnYXRpdmUsIHRoZSBjb2xvciBpcyBzY2FsZWQgZGFya2VyLCBpZiBwb3NpdGl2ZSwgaXQgaXMgc2NhbGVkIGxpZ2h0ZXIuXG4vLyBUaGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGEgcHVyZSBsaWdodCBvciBkYXJrIGNvbG9yIHVubGVzcyB0aGUgYW1vdW50IGlzIDEwMCUuXG5AZnVuY3Rpb24gc2NhbGUtbGlnaHRuZXNzKCRjb2xvciwgJGFtb3VudCkge1xuICAgIEByZXR1cm4gc2NhbGUtY29sb3IoJGNvbG9yLCAkbGlnaHRuZXNzOiAkYW1vdW50KTtcbn1cblxuLy8gYSBnZW5lcmljaXplZCB2ZXJzaW9uIG9mIHNhdHVyYXRlL2Rlc2F0dXJhdGUgc28gdGhhdCBuZWdhdGl2ZSB2YWx1ZXMgY2FuIGJlIHVzZWQuXG5AZnVuY3Rpb24gYWRqdXN0LXNhdHVyYXRpb24oJGNvbG9yLCAkYW1vdW50KSB7XG4gICAgQHJldHVybiBhZGp1c3QtY29sb3IoJGNvbG9yLCAkc2F0dXJhdGlvbjogJGFtb3VudCk7XG59XG5cbi8vIFNjYWxlcyBhIGNvbG9yJ3Mgc2F0dXJhdGlvbiBieSBzb21lIHBlcmNlbnRhZ2UuXG4vLyBJZiB0aGUgYW1vdW50IGlzIG5lZ2F0aXZlLCB0aGUgY29sb3IgaXMgZGVzYXR1cmF0ZWQsIGlmIHBvc2l0aXZlLCBpdCBpcyBzYXR1cmF0ZWQuXG4vLyBUaGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGEgcHVyZSBzYXR1cmF0ZWQgb3IgZGVzYXR1cmF0ZWQgY29sb3IgdW5sZXNzIHRoZSBhbW91bnQgaXMgMTAwJS5cbkBmdW5jdGlvbiBzY2FsZS1zYXR1cmF0aW9uKCRjb2xvciwgJGFtb3VudCkge1xuICAgIEByZXR1cm4gc2NhbGUtY29sb3IoJGNvbG9yLCAkc2F0dXJhdGlvbjogJGFtb3VudCk7XG59XG5cbkBmdW5jdGlvbiBzaGFkZSgkY29sb3IsICRwZXJjZW50YWdlKSB7XG4gICAgQHJldHVybiBtaXgoIzAwMDAwMCwgJGNvbG9yLCAkcGVyY2VudGFnZSk7XG59XG5cbkBmdW5jdGlvbiB0aW50KCRjb2xvciwgJHBlcmNlbnRhZ2UpIHtcbiAgICBAcmV0dXJuIG1peCgjZmZmZmZmLCAkY29sb3IsICRwZXJjZW50YWdlKTtcbn1cblxuIiwiQGltcG9ydCBcInV0aWxpdGllcy9jb2xvclwiO1xuQGltcG9ydCBcInV0aWxpdGllcy9nZW5lcmFsXCI7XG5AaW1wb3J0IFwidXRpbGl0aWVzL3Nwcml0ZXNcIjtcbkBpbXBvcnQgXCJ1dGlsaXRpZXMvdGFibGVzXCI7XG5cbi8vIGRlcHJlY2F0ZWRcbkBpbXBvcnQgXCJ0eXBvZ3JhcGh5L2xpbmtzXCI7XG5AaW1wb3J0IFwidHlwb2dyYXBoeS9saXN0c1wiO1xuQGltcG9ydCBcInR5cG9ncmFwaHkvdGV4dFwiO1xuIiwiQGltcG9ydCBcImNvbG9yL2NvbnRyYXN0XCI7IiwiJGNvbnRyYXN0ZWQtZGFyay1kZWZhdWx0OiAgICMwMDAgIWRlZmF1bHQ7XG4kY29udHJhc3RlZC1saWdodC1kZWZhdWx0OiAgI2ZmZiAhZGVmYXVsdDtcbiRjb250cmFzdGVkLWxpZ2h0bmVzcy10aHJlc2hvbGQ6IDMwJSAhZGVmYXVsdDtcblxuLy8gUmV0dXJucyB0aGUgYCRsaWdodGAgY29sb3Igd2hlbiB0aGUgYCRjb2xvcmAgaXMgZGFya1xuLy8gYW5kIHRoZSBgJGRhcmtgIGNvbG9yIHdoZW4gdGhlIGAkY29sb3JgIGlzIGxpZ2h0LlxuLy8gVGhlIGAkdGhyZXNob2xkYCBpcyBhIHBlcmNlbnQgYmV0d2VlbiBgMCVgIGFuZCBgMTAwJWAgYW5kIGl0IGRldGVybWluZXNcbi8vIHdoZW4gdGhlIGxpZ2h0bmVzcyBvZiBgJGNvbG9yYCBjaGFuZ2VzIGZyb20gXCJkYXJrXCIgdG8gXCJsaWdodFwiLlxuQGZ1bmN0aW9uIGNvbnRyYXN0LWNvbG9yKFxuICAkY29sb3IsXG4gICRkYXJrOiAkY29udHJhc3RlZC1kYXJrLWRlZmF1bHQsXG4gICRsaWdodDogJGNvbnRyYXN0ZWQtbGlnaHQtZGVmYXVsdCxcbiAgJHRocmVzaG9sZDogJGNvbnRyYXN0ZWQtbGlnaHRuZXNzLXRocmVzaG9sZFxuKSB7XG4gIEByZXR1cm4gaWYobGlnaHRuZXNzKCRjb2xvcikgPCAkdGhyZXNob2xkLCAkbGlnaHQsICRkYXJrKVxufVxuXG4vLyBTZXRzIHRoZSBzcGVjaWZpZWQgYmFja2dyb3VuZCBjb2xvciBhbmQgY2FsY3VsYXRlcyBhIGRhcmsgb3IgbGlnaHQgY29udHJhc3RlZCB0ZXh0IGNvbG9yLlxuLy8gVGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIFtjb250cmFzdC1jb2xvciBmdW5jdGlvbl0oI2Z1bmN0aW9uLWNvbnRyYXN0LWNvbG9yKS5cbkBtaXhpbiBjb250cmFzdGVkKFxuICAkYmFja2dyb3VuZC1jb2xvcixcbiAgJGRhcms6ICRjb250cmFzdGVkLWRhcmstZGVmYXVsdCxcbiAgJGxpZ2h0OiAkY29udHJhc3RlZC1saWdodC1kZWZhdWx0LFxuICAkdGhyZXNob2xkOiAkY29udHJhc3RlZC1saWdodG5lc3MtdGhyZXNob2xkXG4pIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIGNvbG9yOiBjb250cmFzdC1jb2xvcigkYmFja2dyb3VuZC1jb2xvciwgJGRhcmssICRsaWdodCwgJHRocmVzaG9sZCk7XG59IiwiQGltcG9ydCBcImdlbmVyYWwvcmVzZXRcIjtcbkBpbXBvcnQgXCJnZW5lcmFsL2NsZWFyZml4XCI7XG5AaW1wb3J0IFwiZ2VuZXJhbC9mbG9hdFwiO1xuQGltcG9ydCBcImdlbmVyYWwvdGFnLWNsb3VkXCI7XG5AaW1wb3J0IFwiZ2VuZXJhbC9oYWNrc1wiO1xuQGltcG9ydCBcImdlbmVyYWwvbWluXCI7XG4iLCIvLyBUaGlzIG1vZHVsZSBoYXMgbW92ZWQuXG5AaW1wb3J0IFwiLi4vLi4vcmVzZXQvdXRpbGl0aWVzXCI7XG4iLCIvLyBCYXNlZCBvbiBbRXJpYyBNZXllcidzIHJlc2V0IDIuMF0oaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC9pbmRleC5odG1sKVxuLy8gR2xvYmFsIHJlc2V0IHJ1bGVzLlxuLy8gRm9yIG1vcmUgc3BlY2lmaWMgcmVzZXRzLCB1c2UgdGhlIHJlc2V0IG1peGlucyBwcm92aWRlZCBiZWxvd1xuQG1peGluIGdsb2JhbC1yZXNldCB7XG4gIGh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcbiAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuICBhLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXG4gIGRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcbiAgc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbiAgYiwgdSwgaSwgY2VudGVyLFxuICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxuICBmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbiAgdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXG4gIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLCBcbiAgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBcbiAgbWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXG4gIHRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XG4gICAgQGluY2x1ZGUgcmVzZXQtYm94LW1vZGVsO1xuICAgIEBpbmNsdWRlIHJlc2V0LWZvbnQ7IH1cbiAgLy8gVW5saWtlIEVyaWMncyBvcmlnaW5hbCByZXNldCwgd2UgcmVzZXQgdGhlIGh0bWwgZWxlbWVudCB0byBiZSBjb21wYXRpYmxlXG4gIC8vIHdpdGggdGhlIHZlcnRpY2FsIHJoeXRobSBtaXhpbnMuXG4gIGh0bWwge1xuICAgIEBpbmNsdWRlIHJlc2V0LWJvZHk7IH1cbiAgb2wsIHVsIHtcbiAgICBAaW5jbHVkZSByZXNldC1saXN0LXN0eWxlOyB9XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSByZXNldC10YWJsZTsgfVxuICBjYXB0aW9uLCB0aCwgdGQge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlLWNlbGw7IH1cbiAgcSwgYmxvY2txdW90ZSB7XG4gICAgQGluY2x1ZGUgcmVzZXQtcXVvdGF0aW9uOyB9XG4gIGEgaW1nIHtcbiAgICBAaW5jbHVkZSByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyOyB9XG4gIEBpbmNsdWRlIHJlc2V0LWh0bWw1OyB9XG5cbi8vIFJlc2V0IGFsbCBlbGVtZW50cyB3aXRoaW4gc29tZSBzZWxlY3RvciBzY29wZS4gVG8gcmVzZXQgdGhlIHNlbGVjdG9yIGl0c2VsZixcbi8vIG1peGluIHRoZSBhcHByb3ByaWF0ZSByZXNldCBtaXhpbiBmb3IgdGhhdCBlbGVtZW50IHR5cGUgYXMgd2VsbC4gVGhpcyBjb3VsZCBiZVxuLy8gdXNlZnVsIGlmIHlvdSB3YW50IHRvIHN0eWxlIGEgcGFydCBvZiB5b3VyIHBhZ2UgaW4gYSBkcmFtYXRpY2FsbHkgZGlmZmVyZW50IHdheS5cbkBtaXhpbiBuZXN0ZWQtcmVzZXQge1xuICBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXG4gIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcbiAgYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuICBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXG4gIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXG4gIGIsIHUsIGksIGNlbnRlcixcbiAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcbiAgZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXG4gIHRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuICBhcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCwgXG4gIGZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgXG4gIG1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxuICB0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuICAgIEBpbmNsdWRlIHJlc2V0LWJveC1tb2RlbDtcbiAgICBAaW5jbHVkZSByZXNldC1mb250OyB9XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSByZXNldC10YWJsZTsgfVxuICBjYXB0aW9uLCB0aCwgdGQge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlLWNlbGw7IH1cbiAgcSwgYmxvY2txdW90ZSB7XG4gICAgQGluY2x1ZGUgcmVzZXQtcXVvdGF0aW9uOyB9XG4gIGEgaW1nIHtcbiAgICBAaW5jbHVkZSByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyOyB9IH1cblxuLy8gUmVzZXQgdGhlIGJveCBtb2RlbCBtZWFzdXJlbWVudHMuXG5AbWl4aW4gcmVzZXQtYm94LW1vZGVsIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7IH1cblxuLy8gUmVzZXQgdGhlIGZvbnQgYW5kIHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiByZXNldC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH1cblxuLy8gUmVzZXRzIHRoZSBvdXRsaW5lIHdoZW4gZm9jdXMuXG4vLyBGb3IgYWNjZXNzaWJpbGl0eSB5b3UgbmVlZCB0byBhcHBseSBzb21lIHN0eWxpbmcgaW4gaXRzIHBsYWNlLlxuQG1peGluIHJlc2V0LWZvY3VzIHtcbiAgb3V0bGluZTogMDsgfVxuXG4vLyBSZXNldCBhIGJvZHkgZWxlbWVudC5cbkBtaXhpbiByZXNldC1ib2R5IHtcbiAgbGluZS1oZWlnaHQ6IDE7IH1cblxuLy8gUmVzZXQgdGhlIGxpc3Qgc3R5bGUgb2YgYW4gZWxlbWVudC5cbkBtaXhpbiByZXNldC1saXN0LXN0eWxlIHtcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4vLyBSZXNldCBhIHRhYmxlXG5AbWl4aW4gcmVzZXQtdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG4vLyBSZXNldCBhIHRhYmxlIGNlbGwgKGB0aGAsIGB0ZGApXG5AbWl4aW4gcmVzZXQtdGFibGUtY2VsbCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLy8gUmVzZXQgYSBxdW90YXRpb24gKGBxYCwgYGJsb2NrcXVvdGVgKVxuQG1peGluIHJlc2V0LXF1b3RhdGlvbiB7XG4gIHF1b3Rlczogbm9uZTtcbiAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7IFxuICAgIGNvbnRlbnQ6IG5vbmU7IH0gfVxuXG4vLyBSZXNldHMgdGhlIGJvcmRlci5cbkBtaXhpbiByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyIHtcbiAgYm9yZGVyOiBub25lOyB9XG5cbi8vIFVucmVjb2duaXplZCBlbGVtZW50cyBhcmUgZGlzcGxheWVkIGlubGluZS5cbi8vIFRoaXMgcmVzZXQgcHJvdmlkZXMgYSBiYXNpYyByZXNldCBmb3IgYmxvY2sgaHRtbDUgZWxlbWVudHNcbi8vIHNvIHRoZXkgYXJlIHJlbmRlcmVkIGNvcnJlY3RseSBpbiBicm93c2VycyB0aGF0IGRvbid0IHJlY29nbml6ZSB0aGVtXG4vLyBhbmQgcmVzZXQgaW4gYnJvd3NlcnMgdGhhdCBoYXZlIGRlZmF1bHQgc3R5bGVzIGZvciB0aGVtLlxuQG1peGluIHJlc2V0LWh0bWw1IHtcbiAgI3tlbGVtZW50cy1vZi10eXBlKGh0bWw1LWJsb2NrKX0ge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cblxuLy8gUmVzZXRzIHRoZSBkaXNwbGF5IG9mIGlubGluZSBhbmQgYmxvY2sgZWxlbWVudHMgdG8gdGhlaXIgZGVmYXVsdCBkaXNwbGF5XG4vLyBhY2NvcmRpbmcgdG8gdGhlaXIgdGFnIHR5cGUuIEVsZW1lbnRzIHRoYXQgaGF2ZSBhIGRlZmF1bHQgZGlzcGxheSB0aGF0IHZhcmllcyBhY3Jvc3Ncbi8vIHZlcnNpb25zIG9mIGh0bWwgb3IgYnJvd3NlciBhcmUgbm90IGhhbmRsZWQgaGVyZSwgYnV0IHRoaXMgY292ZXJzIHRoZSA5MCUgdXNlIGNhc2UuXG4vLyBVc2FnZSBFeGFtcGxlOlxuLy9cbi8vICAgICAvLyBUdXJuIG9mZiB0aGUgZGlzcGxheSBmb3IgYm90aCBvZiB0aGVzZSBjbGFzc2VzXG4vLyAgICAgLnVucmVnaXN0ZXJlZC1vbmx5LCAucmVnaXN0ZXJlZC1vbmx5XG4vLyAgICAgICBkaXNwbGF5OiBub25lXG4vLyAgICAgLy8gTm93IHR1cm4gb25seSBvbmUgb2YgdGhlbSBiYWNrIG9uIGRlcGVuZGluZyBvbiBzb21lIG90aGVyIGNvbnRleHQuXG4vLyAgICAgYm9keS5yZWdpc3RlcmVkXG4vLyAgICAgICArcmVzZXQtZGlzcGxheShcIi5yZWdpc3RlcmVkLW9ubHlcIilcbi8vICAgICBib2R5LnVucmVnaXN0ZXJlZFxuLy8gICAgICAgK3Jlc2V0LWRpc3BsYXkoXCIudW5yZWdpc3RlcmVkLW9ubHlcIilcbkBtaXhpbiByZXNldC1kaXNwbGF5KCRzZWxlY3RvcjogXCJcIiwgJGltcG9ydGFudDogZmFsc2UpIHtcbiAgI3thcHBlbmQtc2VsZWN0b3IoZWxlbWVudHMtb2YtdHlwZShcImlubGluZVwiKSwgJHNlbGVjdG9yKX0ge1xuICAgIEBpZiAkaW1wb3J0YW50IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogaW5saW5lOyB9IH1cbiAgI3thcHBlbmQtc2VsZWN0b3IoZWxlbWVudHMtb2YtdHlwZShcImJsb2NrXCIpLCAkc2VsZWN0b3IpfSB7XG4gICAgQGlmICRpbXBvcnRhbnQge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuICAgIEBlbHNlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH0gfVxuIiwiLy8gQGRvYyBvZmZcbi8vIEV4dGVuZHMgdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudCB0byBlbmNsb3NlIGFueSBmbG9hdHMgaXQgY29udGFpbnMuXG4vLyBAZG9jIG9uXG5cbkBpbXBvcnQgXCJoYWNrc1wiO1xuXG4vLyBUaGlzIGJhc2ljIG1ldGhvZCBpcyBwcmVmZXJyZWQgZm9yIHRoZSB1c3VhbCBjYXNlLCB3aGVuIHBvc2l0aW9uZWRcbi8vIGNvbnRlbnQgd2lsbCBub3Qgc2hvdyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRhaW5lci5cbi8vXG4vLyBSZWNvbW1lbmRhdGlvbnMgaW5jbHVkZSB1c2luZyB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYSB3aWR0aC5cbi8vIENyZWRpdDogW3F1aXJrc21vZGUub3JnXShodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAwNS8wMy9jbGVhcmluZ19mbG9hdHMuaHRtbClcbkBtaXhpbiBjbGVhcmZpeCB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIEBpbmNsdWRlIGhhcy1sYXlvdXQ7XG59XG5cbi8vIFRoaXMgb2xkZXIgbWV0aG9kIGZyb20gUG9zaXRpb24gSXMgRXZlcnl0aGluZyBjYWxsZWRcbi8vIFtFYXN5IENsZWFyaW5nXShodHRwOi8vd3d3LnBvc2l0aW9uaXNldmVyeXRoaW5nLm5ldC9lYXN5Y2xlYXJpbmcuaHRtbClcbi8vIGhhcyB0aGUgYWR2YW50YWdlIG9mIGFsbG93aW5nIHBvc2l0aW9uZWQgZWxlbWVudHMgdG8gaGFuZ1xuLy8gb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjb250YWluZXIgYXQgdGhlIGV4cGVuc2Ugb2YgbW9yZSB0cmlja3kgQ1NTLlxuQG1peGluIGxlZ2FjeS1waWUtY2xlYXJmaXgge1xuICAmOmFmdGVyIHtcbiAgICBjb250ZW50ICAgIDogXCJcXDAwMjBcIjtcbiAgICBkaXNwbGF5ICAgIDogYmxvY2s7XG4gICAgaGVpZ2h0ICAgICA6IDA7XG4gICAgY2xlYXIgICAgICA6IGJvdGg7XG4gICAgb3ZlcmZsb3cgICA6IGhpZGRlbjtcbiAgICB2aXNpYmlsaXR5IDogaGlkZGVuO1xuICB9XG4gIEBpbmNsdWRlIGhhcy1sYXlvdXQ7XG59XG5cbi8vIFRoaXMgaXMgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBQSUUgY2xlYXJmaXggbWV0aG9kIHRoYXQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIENTUyBvdXRwdXQuXG4vLyBJZiB5b3UgbmVlZCB0byBzdXBwb3J0IEZpcmVmb3ggYmVmb3JlIDMuNSB5b3UgbmVlZCB0byB1c2UgYGxlZ2FjeS1waWUtY2xlYXJmaXhgIGluc3RlYWQuXG4vL1xuLy8gQWRhcHRlZCBmcm9tOiBbQSBuZXcgbWljcm8gY2xlYXJmaXggaGFja10oaHR0cDovL25pY29sYXNnYWxsYWdoZXIuY29tL21pY3JvLWNsZWFyZml4LWhhY2svKVxuQG1peGluIHBpZS1jbGVhcmZpeCB7XG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbiAgQGluY2x1ZGUgaGFzLWxheW91dDtcbn1cbiIsIkBpbXBvcnQgXCIuLi8uLi9zdXBwb3J0XCI7XG5cbi8vIFRoZSBgem9vbWAgYXBwcm9hY2ggZ2VuZXJhdGVzIGxlc3MgQ1NTIGJ1dCBkb2VzIG5vdCB2YWxpZGF0ZS5cbi8vIFNldCB0aGlzIHRvIGBibG9ja2AgdG8gdXNlIHRoZSBkaXNwbGF5LXByb3BlcnR5IHRvIGhhY2sgdGhlXG4vLyBlbGVtZW50IHRvIGdhaW4gbGF5b3V0LlxuJGRlZmF1bHQtaGFzLWxheW91dC1hcHByb2FjaDogem9vbSAhZGVmYXVsdDtcblxuLy8gVGhpcyBtaXhpbiBjYXVzZXMgYW4gZWxlbWVudCBtYXRjaGluZyB0aGUgc2VsZWN0b3Jcbi8vIHRvIGdhaW4gdGhlIFwiaGFzTGF5b3V0XCIgcHJvcGVydHkgaW4gaW50ZXJuZXQgZXhwbG9yZXIuXG4vLyBNb3JlIGluZm9ybWF0aW9uIG9uIFtoYXNMYXlvdXRdKGh0dHA6Ly9yZWZlcmVuY2Uuc2l0ZXBvaW50LmNvbS9jc3MvaGFzbGF5b3V0KS5cbkBtaXhpbiBoYXMtbGF5b3V0KCRhcHByb2FjaDogJGRlZmF1bHQtaGFzLWxheW91dC1hcHByb2FjaCkge1xuICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZSB7XG4gICAgQGlmICRhcHByb2FjaCA9PSB6b29tIHtcbiAgICAgIEBpbmNsdWRlIGhhcy1sYXlvdXQtem9vbTtcbiAgICB9IEBlbHNlIGlmICRhcHByb2FjaCA9PSBibG9jayB7XG4gICAgICBAaW5jbHVkZSBoYXMtbGF5b3V0LWJsb2NrO1xuICAgIH0gQGVsc2Uge1xuICAgICAgQHdhcm4gXCJVbmtub3duIGhhcy1sYXlvdXQgYXBwcm9hY2g6ICN7JGFwcHJvYWNofVwiO1xuICAgICAgQGluY2x1ZGUgaGFzLWxheW91dC16b29tO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gaGFzLWxheW91dC16b29tIHtcbiAgQGlmICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU2IG9yICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU3IHtcbiAgICAqem9vbTogMTtcbiAgfVxufVxuXG5AbWl4aW4gaGFzLWxheW91dC1ibG9jayB7XG4gIEBpZiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllIHtcbiAgICAvLyBUaGlzIG1ha2VzIGllNiBnZXQgbGF5b3V0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIC8vIGFuZCB0aGlzIHB1dHMgaXQgYmFjayB0byBibG9ja1xuICAgICYgeyBkaXNwbGF5OiBibG9jazsgfVxuICB9XG59XG5cbi8vIEEgaGFjayB0byBzdXBwbHkgSUU2IChhbmQgYmVsb3cpIHdpdGggYSBkaWZmZXJlbnQgcHJvcGVydHkgdmFsdWUuXG4vLyBbUmVhZCBtb3JlXShodHRwOi8vd3d3LmNzc3BvcnRhbC5jb20vY3NzLWhhY2tzLyNpbl9jc3MtaW1wb3J0YW50KS5cbkBtaXhpbiBiYW5nLWhhY2soJHByb3BlcnR5LCAkdmFsdWUsICRpZTYtdmFsdWUpIHtcbiAgQGlmICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU2IHtcbiAgICAjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfSAhaW1wb3J0YW50O1xuICAgICN7JHByb3BlcnR5fTogI3skaWU2LXZhbHVlfTtcbiAgfVxufVxuIiwiLy8gVXN1YWxseSBjb21wYXNzIGhhY2tzIGFwcGx5IHRvIGJvdGggaWU2ICYgNyAtLSBzZXQgdGhpcyB0byBmYWxzZSB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIGJvdGguXG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBTZXR0aW5nIHRoaXMgdG8gZmFsc2Ugd2lsbCByZXN1bHQgaW4gc21hbGxlciBvdXRwdXQsIGJ1dCBubyBzdXBwb3J0IGZvciBpZTYgaGFja3NcbiRsZWdhY3ktc3VwcG9ydC1mb3ItaWU2OiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllICFkZWZhdWx0O1xuXG4vLyBTZXR0aW5nIHRoaXMgdG8gZmFsc2Ugd2lsbCByZXN1bHQgaW4gc21hbGxlciBvdXRwdXQsIGJ1dCBubyBzdXBwb3J0IGZvciBpZTcgaGFja3NcbiRsZWdhY3ktc3VwcG9ydC1mb3ItaWU3OiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllICFkZWZhdWx0O1xuXG4vLyBTZXR0aW5nIHRoaXMgdG8gZmFsc2Ugd2lsbCByZXN1bHQgaW4gc21hbGxlciBvdXRwdXQsIGJ1dCBubyBzdXBwb3J0IGZvciBsZWdhY3kgaWU4IGhhY2tzXG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllODogJGxlZ2FjeS1zdXBwb3J0LWZvci1pZSAhZGVmYXVsdDtcblxuLy8gQHByaXZhdGVcbi8vIFRoZSB1c2VyIGNhbiBzaW1wbHkgc2V0ICRsZWdhY3ktc3VwcG9ydC1mb3ItaWUgYW5kIDYsIDcsIGFuZCA4IHdpbGwgYmUgc2V0IGFjY29yZGluZ2x5LFxuLy8gQnV0IGluIGNhc2UgdGhlIHVzZXIgc2V0IGVhY2ggb2YgdGhvc2UgZXhwbGljaXRseSwgd2UgbmVlZCB0byBzeW5jIHRoZSB2YWx1ZSBvZlxuLy8gdGhpcyBjb21iaW5lZCB2YXJpYWJsZS5cbiRsZWdhY3ktc3VwcG9ydC1mb3ItaWU6ICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU2IG9yICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU3IG9yICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU4O1xuXG4vLyBXaGV0aGVyIHRvIG91dHB1dCBsZWdhY3kgc3VwcG9ydCBmb3IgbW96aWxsYS5cbi8vIFVzdWFsbHkgdGhpcyBtZWFucyBoYWNrcyB0byBzdXBwb3J0IEZpcmVmb3ggMy42IG9yIGVhcmxpZXIuXG4kbGVnYWN5LXN1cHBvcnQtZm9yLW1vemlsbGE6IHRydWU7XG5cbi8vIFN1cHBvcnQgZm9yIG1vemlsbGEgaW4gZXhwZXJpbWVudGFsIGNzczMgcHJvcGVydGllcyAoLW1veikuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICAgICA6IHRydWUgIWRlZmF1bHQ7XG4vLyBTdXBwb3J0IGZvciB3ZWJraXQgaW4gZXhwZXJpbWVudGFsIGNzczMgcHJvcGVydGllcyAoLXdlYmtpdCkuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICAgICA6IHRydWUgIWRlZmF1bHQ7XG4vLyBTdXBwb3J0IGZvciB3ZWJraXQncyBvcmlnaW5hbCAobm9uLXN0YW5kYXJkKSBncmFkaWVudCBzeW50YXguXG4kc3VwcG9ydC1mb3Itb3JpZ2luYWwtd2Via2l0LWdyYWRpZW50cyA6IHRydWUgIWRlZmF1bHQ7XG4vLyBTdXBwb3J0IGZvciBvcGVyYSBpbiBleHBlcmltZW50YWwgY3NzMyBwcm9wZXJ0aWVzICgtbykuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICAgICA6IHRydWUgIWRlZmF1bHQ7XG4vLyBTdXBwb3J0IGZvciBtaWNyb3NvZnQgaW4gZXhwZXJpbWVudGFsIGNzczMgcHJvcGVydGllcyAoLW1zKS5cbiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0ICAgIDogdHJ1ZSAhZGVmYXVsdDtcbi8vIFN1cHBvcnQgZm9yIGtodG1sIGluIGV4cGVyaW1lbnRhbCBjc3MzIHByb3BlcnRpZXMgKC1raHRtbCkuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sICAgICAgICA6IGZhbHNlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3Igc3ZnIGluIGV4cGVyaW1lbnRhbCBjc3MzIHByb3BlcnRpZXMuXG4vLyBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSBtaWdodCBhZGQgc2lnbmlmaWNhbnQgc2l6ZSB0byB5b3VyXG4vLyBnZW5lcmF0ZWQgc3R5bGVzaGVldHMuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXN2ZyAgICAgICAgICA6IGZhbHNlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3IgQ1NTIFBJRSBpbiBleHBlcmltZW50YWwgY3NzMyBwcm9wZXJ0aWVzICgtcGllKS5cbiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItcGllICAgICAgICAgIDogZmFsc2UgIWRlZmF1bHQ7XG4iLCIvLyBJbXBsZW1lbnRhdGlvbiBvZiBmbG9hdDpsZWZ0IHdpdGggZml4IGZvciB0aGVcbi8vIFtkb3VibGUtbWFyZ2luIGJ1ZyBpbiBJRTUvNl0oaHR0cDovL3d3dy5wb3NpdGlvbmlzZXZlcnl0aGluZy5uZXQvZXhwbG9yZXIvZG91YmxlZC1tYXJnaW4uaHRtbClcbkBtaXhpbiBmbG9hdC1sZWZ0IHtcbiAgQGluY2x1ZGUgZmxvYXQobGVmdCk7IH1cblxuLy8gSW1wbGVtZW50YXRpb24gb2YgZmxvYXQ6cmlnaHQgd2l0aCBmaXggZm9yIHRoZVxuLy8gW2RvdWJsZS1tYXJnaW4gYnVnIGluIElFNS82XShodHRwOi8vd3d3LnBvc2l0aW9uaXNldmVyeXRoaW5nLm5ldC9leHBsb3Jlci9kb3VibGVkLW1hcmdpbi5odG1sKVxuQG1peGluIGZsb2F0LXJpZ2h0IHtcbiAgQGluY2x1ZGUgZmxvYXQocmlnaHQpOyB9XG5cbi8vIERpcmVjdGlvbiBpbmRlcGVuZGVudCBmbG9hdCBtaXhpbiB0aGF0IGZpeGVzIHRoZVxuLy8gW2RvdWJsZS1tYXJnaW4gYnVnIGluIElFNS82XShodHRwOi8vd3d3LnBvc2l0aW9uaXNldmVyeXRoaW5nLm5ldC9leHBsb3Jlci9kb3VibGVkLW1hcmdpbi5odG1sKVxuQG1peGluIGZsb2F0KCRzaWRlOiBsZWZ0KSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgZmxvYXQ6IHVucXVvdGUoJHNpZGUpOyB9XG5cbi8vIFJlc2V0cyBmbG9hdGVkIGVsZW1lbnRzIGJhY2sgdG8gdGhlaXIgZGVmYXVsdCBvZiBgZmxvYXQ6IG5vbmVgIGFuZCBkZWZhdWx0c1xuLy8gdG8gYGRpc3BsYXk6IGJsb2NrYCB1bmxlc3MgeW91IHBhc3MgYGlubGluZWAgYXMgYW4gYXJndW1lbnRcbi8vXG4vLyBVc2FnZSBFeGFtcGxlOlxuLy9cbi8vICAgICBib2R5LmhvbWVwYWdlXG4vLyAgICAgICAjZm9vdGVyIGxpXG4vLyAgICAgICAgICtmbG9hdC1sZWZ0XG4vLyAgICAgYm9keS5zaWdudXBcbi8vICAgICAgICNmb290ZXIgbGlcbi8vICAgICAgICAgK3Jlc2V0LWZsb2F0XG5AbWl4aW4gcmVzZXQtZmxvYXQoJGRpc3BsYXk6IGJsb2NrKSB7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiAkZGlzcGxheTsgfSIsIi8vIEVtaXRzIHN0eWxlcyBmb3IgYSB0YWcgY2xvdWRcbkBtaXhpbiB0YWctY2xvdWQoJGJhc2Utc2l6ZTogMWVtKSB7XG4gIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZTtcbiAgbGluZS1oZWlnaHQ6IDEuMiAqICRiYXNlLXNpemU7XG4gIC54eHMsIC54cywgLnMsIC5sLCAueGwsIC54eGwge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjIgKiAkYmFzZS1zaXplOyB9XG4gIC54eHMge1xuICAgIGZvbnQtc2l6ZTogJGJhc2Utc2l6ZSAvIDI7IH1cbiAgLnhzIHtcbiAgICBmb250LXNpemU6IDIgKiAkYmFzZS1zaXplIC8gMzsgfVxuICAucyB7XG4gICAgZm9udC1zaXplOiAzICogJGJhc2Utc2l6ZSAvIDQ7IH1cbiAgLmwge1xuICAgIGZvbnQtc2l6ZTogNCAqICRiYXNlLXNpemUgLyAzOyB9XG4gIC54bCB7XG4gICAgZm9udC1zaXplOiAzICogJGJhc2Utc2l6ZSAvIDI7IH1cbiAgLnh4bCB7XG4gICAgZm9udC1zaXplOiAyICogJGJhc2Utc2l6ZTsgfSB9XG4iLCJAaW1wb3J0IFwiaGFja3NcIjtcblxuLy8qKlxuLy8gQ3Jvc3MgYnJvd3NlciBtaW4taGVpZ2h0IG1peGluLlxuQG1peGluIG1pbi1oZWlnaHQoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIGhhY2tlZC1taW5pbXVtKGhlaWdodCwgJHZhbHVlKTsgfVxuXG4vLyoqXG4vLyBDcm9zcyBicm93c2VyIG1pbi13aWR0aCBtaXhpbi5cbkBtaXhpbiBtaW4td2lkdGgoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIGhhY2tlZC1taW5pbXVtKHdpZHRoLCAkdmFsdWUpOyB9XG5cbi8vIEBwcml2YXRlIFRoaXMgbWl4aW4gaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHkuXG5AbWl4aW4gaGFja2VkLW1pbmltdW0oJHByb3BlcnR5LCAkdmFsdWUpIHtcbiAgbWluLSN7JHByb3BlcnR5fTogJHZhbHVlO1xuICBAaW5jbHVkZSBiYW5nLWhhY2soJHByb3BlcnR5LCBhdXRvLCAkdmFsdWUpOyB9XG4iLCJAaW1wb3J0IFwic3ByaXRlcy9iYXNlXCI7XG5AaW1wb3J0IFwic3ByaXRlcy9zcHJpdGUtaW1nXCI7XG4iLCIvLyBEZXRlcm1pbmVzIHRob3NlIHN0YXRlcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZW5hYmxlIG1hZ2ljIHNwcml0ZSBzZWxlY3RvcnNcbiRzcHJpdGUtc2VsZWN0b3JzOiBob3ZlciwgdGFyZ2V0LCBhY3RpdmUgIWRlZmF1bHQ7XG5cbi8vIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhbiBlbGVtZW50IHRvIHRoZSBvcmlnaW5hbFxuLy8gZGltZW5zaW9ucyBvZiBhbiBpbWFnZSBiZWZvcmUgaXQgd2FzIGluY2x1ZGVkIGluIHRoZSBzcHJpdGUuXG5AbWl4aW4gc3ByaXRlLWRpbWVuc2lvbnMoJG1hcCwgJHNwcml0ZSkge1xuICBoZWlnaHQ6IGltYWdlLWhlaWdodChzcHJpdGUtZmlsZSgkbWFwLCAkc3ByaXRlKSk7XG4gIHdpZHRoOiBpbWFnZS13aWR0aChzcHJpdGUtZmlsZSgkbWFwLCAkc3ByaXRlKSk7XG59XG5cbi8vIFNldCB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gc3ByaXRlIGAkbWFwYCB0byBkaXNwbGF5IHRoZVxuLy8gc3ByaXRlIG9mIHRoZSBnaXZlbiBgJHNwcml0ZWAgbmFtZS4gWW91IGNhbiBtb3ZlIHRoZSBpbWFnZSByZWxhdGl2ZSB0byBpdHNcbi8vIG5hdHVyYWwgcG9zaXRpb24gYnkgcGFzc2luZyBgJG9mZnNldC14YCBhbmQgYCRvZmZzZXQteWAuXG5AbWl4aW4gc3ByaXRlLWJhY2tncm91bmQtcG9zaXRpb24oJG1hcCwgJHNwcml0ZSwgJG9mZnNldC14OiAwLCAkb2Zmc2V0LXk6IDApIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogc3ByaXRlLXBvc2l0aW9uKCRtYXAsICRzcHJpdGUsICRvZmZzZXQteCwgJG9mZnNldC15KTsgIFxufVxuXG5cbi8vIERldGVybWluZXMgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBtYWdpYyBzZWxlY3RvcnMgaW4geW91ciBzcHJpdGVzXG4kZGlzYWJsZS1tYWdpYy1zcHJpdGUtc2VsZWN0b3JzOmZhbHNlICFkZWZhdWx0O1xuXG4vLyBJbmNsdWRlIHRoZSBwb3NpdGlvbiBhbmQgKG9wdGlvbmFsbHkpIGRpbWVuc2lvbnMgb2YgdGhpcyBgJHNwcml0ZWBcbi8vIGluIHRoZSBnaXZlbiBzcHJpdGUgYCRtYXBgLiBUaGUgc3ByaXRlIHVybCBzaG91bGQgY29tZSBmcm9tIGVpdGhlciBhIGJhc2Vcbi8vIGNsYXNzIG9yIHlvdSBjYW4gc3BlY2lmeSB0aGUgYHNwcml0ZS11cmxgIGV4cGxpY2l0bHkgbGlrZSB0aGlzOlxuLy9cbi8vICAgICBiYWNrZ3JvdW5kOiAkbWFwIG5vLXJlcGVhdDtcbkBtaXhpbiBzcHJpdGUoJG1hcCwgJHNwcml0ZSwgJGRpbWVuc2lvbnM6IGZhbHNlLCAkb2Zmc2V0LXg6IDAsICRvZmZzZXQteTogMCkge1xuICBAaW5jbHVkZSBzcHJpdGUtYmFja2dyb3VuZC1wb3NpdGlvbigkbWFwLCAkc3ByaXRlLCAkb2Zmc2V0LXgsICRvZmZzZXQteSk7XG4gIEBpZiAkZGltZW5zaW9ucyB7XG4gICAgQGluY2x1ZGUgc3ByaXRlLWRpbWVuc2lvbnMoJG1hcCwgJHNwcml0ZSk7XG4gIH1cbiAgQGlmIG5vdCgkZGlzYWJsZS1tYWdpYy1zcHJpdGUtc2VsZWN0b3JzKSB7XG4gICAgQGluY2x1ZGUgc3ByaXRlLXNlbGVjdG9ycygkbWFwLCAkc3ByaXRlLCAkc3ByaXRlLCAkb2Zmc2V0LXgsICRvZmZzZXQteSk7XG4gIH1cbn1cblxuLy8gSW5jbHVkZSB0aGUgc2VsZWN0b3JzIGZvciB0aGUgYCRzcHJpdGVgIGdpdmVuIHRoZSBgJG1hcGAgYW5kIHRoZSBcbi8vIGAkZnVsbC1zcHJpdGUtbmFtZWBcbi8vIEBwcml2YXRlXG5AbWl4aW4gc3ByaXRlLXNlbGVjdG9ycygkbWFwLCAkc3ByaXRlLW5hbWUsICRmdWxsLXNwcml0ZS1uYW1lLCAkb2Zmc2V0LXg6IDAsICRvZmZzZXQteTogMCkge1xuICBAZWFjaCAkc2VsZWN0b3IgaW4gJHNwcml0ZS1zZWxlY3RvcnMge1xuICAgIEBpZiBzcHJpdGVfaGFzX3NlbGVjdG9yKCRtYXAsICRzcHJpdGUtbmFtZSwgJHNlbGVjdG9yKSB7XG4gICAgICAmOiN7JHNlbGVjdG9yfSwgJi4jeyRmdWxsLXNwcml0ZS1uYW1lfV8jeyRzZWxlY3Rvcn0sICYuI3skZnVsbC1zcHJpdGUtbmFtZX0tI3skc2VsZWN0b3J9IHtcbiAgICAgICAgICBAaW5jbHVkZSBzcHJpdGUtYmFja2dyb3VuZC1wb3NpdGlvbigkbWFwLCBcIiN7JHNwcml0ZS1uYW1lfV8jeyRzZWxlY3Rvcn1cIiwgJG9mZnNldC14LCAkb2Zmc2V0LXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBHZW5lcmF0ZXMgYSBjbGFzcyBmb3IgZWFjaCBzcGFjZSBzZXBhcmF0ZWQgbmFtZSBpbiBgJHNwcml0ZS1uYW1lc2AuXG4vLyBUaGUgY2xhc3Mgd2lsbCBiZSBvZiB0aGUgZm9ybSAuPG1hcC1uYW1lPi08c3ByaXRlLW5hbWU+LlxuLy9cbi8vIElmIGEgYmFzZSBjbGFzcyBpcyBwcm92aWRlZCwgdGhlbiBlYWNoIGNsYXNzIHdpbGwgZXh0ZW5kIGl0LlxuLy9cbi8vIElmIGAkZGltZW5zaW9uc2AgaXMgYHRydWVgLCB0aGUgc3ByaXRlIGRpbWVuc2lvbnMgd2lsbCBzcGVjaWZpZWQuXG5AbWl4aW4gc3ByaXRlcygkbWFwLCAkc3ByaXRlLW5hbWVzLCAkYmFzZS1jbGFzczogZmFsc2UsICRkaW1lbnNpb25zOiBmYWxzZSwgJHByZWZpeDogc3ByaXRlLW1hcC1uYW1lKCRtYXApLCAkb2Zmc2V0LXg6IDAsICRvZmZzZXQteTogMCkge1xuICBAZWFjaCAkc3ByaXRlLW5hbWUgaW4gJHNwcml0ZS1uYW1lcyB7XG4gICAgQGlmIHNwcml0ZV9kb2VzX25vdF9oYXZlX3BhcmVudCgkbWFwLCAkc3ByaXRlLW5hbWUpIHtcbiAgICAgICRmdWxsLXNwcml0ZS1uYW1lOiBcIiN7JHByZWZpeH0tI3skc3ByaXRlLW5hbWV9XCI7XG4gICAgICAuI3skZnVsbC1zcHJpdGUtbmFtZX0ge1xuICAgICAgICBAaWYgJGJhc2UtY2xhc3MgeyBAZXh0ZW5kICN7JGJhc2UtY2xhc3N9OyB9XG4gICAgICAgIEBpbmNsdWRlIHNwcml0ZSgkbWFwLCAkc3ByaXRlLW5hbWUsICRkaW1lbnNpb25zLCAkb2Zmc2V0LXgsICRvZmZzZXQteSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiLy8gQGRvYyBvZmZcbi8vIEV4YW1wbGUgMTpcbi8vXG4vLyAgICAgYS50d2l0dGVyXG4vLyAgICAgICArc3ByaXRlLWltZyhcImljb25zLTMyLnBuZ1wiLCAxKVxuLy8gICAgIGEuZmFjZWJvb2tcbi8vICAgICAgICtzcHJpdGUtaW1nKFwiaWNvbnMtMzJwbmdcIiwgMilcbi8vXG4vLyBFeGFtcGxlIDI6XG4vL1xuLy8gICAgIGFcbi8vICAgICAgICtzcHJpdGUtYmFja2dyb3VuZChcImljb25zLTMyLnBuZ1wiKVxuLy8gICAgICAgYS50d2l0dGVyXG4vLyAgICAgICAgICtzcHJpdGUtY29sdW1uKDEpXG4vLyAgICAgICBhLmZhY2Vib29rXG4vLyAgICAgICAgICtzcHJpdGUtcm93KDIpXG4vLyBAZG9jIG9uXG5cbiRzcHJpdGUtZGVmYXVsdC1zaXplOiAzMnB4ICFkZWZhdWx0O1xuXG4kc3ByaXRlLWRlZmF1bHQtbWFyZ2luOiAwcHggIWRlZmF1bHQ7XG5cbiRzcHJpdGUtaW1hZ2UtZGVmYXVsdC13aWR0aDogJHNwcml0ZS1kZWZhdWx0LXNpemUgIWRlZmF1bHQ7XG5cbiRzcHJpdGUtaW1hZ2UtZGVmYXVsdC1oZWlnaHQ6ICRzcHJpdGUtZGVmYXVsdC1zaXplICFkZWZhdWx0O1xuXG4vLyBTZXRzIGFsbCB0aGUgcnVsZXMgZm9yIGEgc3ByaXRlIGZyb20gYSBnaXZlbiBzcHJpdGUgaW1hZ2UgdG8gc2hvdyBqdXN0IG9uZSBvZiB0aGUgc3ByaXRlcy5cbi8vIFRvIHJlZHVjZSBkdXBsaWNhdGlvbiB1c2UgYSBzcHJpdGUtYmcgbWl4aW4gZm9yIGNvbW1vbiBwcm9wZXJ0aWVzIGFuZCBhIHNwcml0ZS1zZWxlY3QgbWl4aW4gZm9yIHBvc2l0aW9uaW5nLlxuQG1peGluIHNwcml0ZS1pbWcoJGltZywgJGNvbCwgJHJvdzogMSwgJHdpZHRoOiAkc3ByaXRlLWltYWdlLWRlZmF1bHQtd2lkdGgsICRoZWlnaHQ6ICRzcHJpdGUtaW1hZ2UtZGVmYXVsdC1oZWlnaHQsICRtYXJnaW46ICRzcHJpdGUtZGVmYXVsdC1tYXJnaW4pIHtcbiAgQGluY2x1ZGUgc3ByaXRlLWJhY2tncm91bmQoJGltZywgJHdpZHRoLCAkaGVpZ2h0KTtcbiAgQGluY2x1ZGUgc3ByaXRlLXBvc2l0aW9uKCRjb2wsICRyb3csICR3aWR0aCwgJGhlaWdodCwgJG1hcmdpbik7IFxufVxuXG4vLyBTZXRzIHJ1bGVzIGNvbW1vbiBmb3IgYWxsIHNwcml0ZXMsIGFzc3VtZXMgeW91IHdhbnQgYSBzcXVhcmUsIGJ1dCBhbGxvd3MgYSByZWN0YW5ndWxhciByZWdpb24uXG5AbWl4aW4gc3ByaXRlLWJhY2tncm91bmQoJGltZywgJHdpZHRoOiAkc3ByaXRlLWRlZmF1bHQtc2l6ZSwgJGhlaWdodDogJHdpZHRoKSB7XG4gIEBpbmNsdWRlIHNwcml0ZS1iYWNrZ3JvdW5kLXJlY3RhbmdsZSgkaW1nLCAkd2lkdGgsICRoZWlnaHQpOyBcbn1cblxuLy8gU2V0cyBydWxlcyBjb21tb24gZm9yIGFsbCBzcHJpdGVzLCBhc3N1bWVzIGEgcmVjdGFuZ3VsYXIgcmVnaW9uLlxuQG1peGluIHNwcml0ZS1iYWNrZ3JvdW5kLXJlY3RhbmdsZSgkaW1nLCAkd2lkdGg6ICRzcHJpdGUtaW1hZ2UtZGVmYXVsdC13aWR0aCwgJGhlaWdodDogJHNwcml0ZS1pbWFnZS1kZWZhdWx0LWhlaWdodCkge1xuICBiYWNrZ3JvdW5kOiBpbWFnZS11cmwoJGltZykgbm8tcmVwZWF0O1xuICB3aWR0aDogJHdpZHRoO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG92ZXJmbG93OiBoaWRkZW47IFxufVxuXG4vLyBBbGxvd3MgaG9yaXpvbnRhbCBzcHJpdGUgcG9zaXRpb25pbmcgb3B0aW1pemVkIGZvciBhIHNpbmdsZSByb3cgb2Ygc3ByaXRlcy5cbkBtaXhpbiBzcHJpdGUtY29sdW1uKCRjb2wsICR3aWR0aDogJHNwcml0ZS1pbWFnZS1kZWZhdWx0LXdpZHRoLCAkbWFyZ2luOiAkc3ByaXRlLWRlZmF1bHQtbWFyZ2luKSB7XG4gIEBpbmNsdWRlIHNwcml0ZS1wb3NpdGlvbigkY29sLCAxLCAkd2lkdGgsIDBweCwgJG1hcmdpbik7IFxufVxuXG4vLyBBbGxvd3MgdmVydGljYWwgc3ByaXRlIHBvc2l0aW9uaW5nIG9wdGltaXplZCBmb3IgYSBzaW5nbGUgY29sdW1uIG9mIHNwcml0ZXMuXG5AbWl4aW4gc3ByaXRlLXJvdygkcm93LCAkaGVpZ2h0OiAkc3ByaXRlLWltYWdlLWRlZmF1bHQtaGVpZ2h0LCAkbWFyZ2luOiAkc3ByaXRlLWRlZmF1bHQtbWFyZ2luKSB7XG4gIEBpbmNsdWRlIHNwcml0ZS1wb3NpdGlvbigxLCAkcm93LCAwcHgsICRoZWlnaHQsICRtYXJnaW4pOyBcbn1cblxuLy8gQWxsb3dzIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNwcml0ZSBwb3NpdGlvbmluZyBmcm9tIGEgZ3JpZCBvZiBlcXVhbCBkaW1lbnNpb25lZCBzcHJpdGVzLlxuQG1peGluIHNwcml0ZS1wb3NpdGlvbigkY29sLCAkcm93OiAxLCAkd2lkdGg6ICRzcHJpdGUtaW1hZ2UtZGVmYXVsdC13aWR0aCwgJGhlaWdodDogJHNwcml0ZS1pbWFnZS1kZWZhdWx0LWhlaWdodCwgJG1hcmdpbjogJHNwcml0ZS1kZWZhdWx0LW1hcmdpbikge1xuICAkeDogKCRjb2wgLSAxKSAqIC0kd2lkdGggLSAoJGNvbCAtIDEpICogJG1hcmdpbjtcbiAgJHk6ICgkcm93IC0gMSkgKiAtJGhlaWdodCAtICgkcm93IC0gMSkgKiAkbWFyZ2luO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkeCAkeTsgXG59XG5cblxuXG4vLyBTaW1pbGFyIHRvICdzcHJpdGUtcmVwbGFjZS10ZXh0LXdpdGgtZGltZW5zaW9ucycgYnV0IGRvZXMgbm90IGF1dG1hdGljbHkgc2V0IHRoZSBkZW1lbnNpb25zXG5AbWl4aW4gc3ByaXRlLXJlcGxhY2UtdGV4dCAoJG1hcCwgJHNwcml0ZSwgJGRpbWVuc2lvbnM6IGZhbHNlLCAkb2Zmc2V0LXg6IDAsICRvZmZzZXQteTogMCkgeyAgICBcbiAgQGluY2x1ZGUgaGlkZS10ZXh0O1xuICBAaW5jbHVkZSBzcHJpdGUoJG1hcCwgJHNwcml0ZSwgJGRpbWVuc2lvbnMsICRvZmZzZXQteCwgJG9mZnNldC15KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogJG1hcDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuLy8gU2ltaWxhciB0byAncmVwbGFjZS10ZXh0LXdpdGgtZGltZW5zaW9ucycgYnV0IHdpdGggc3ByaXRlc1xuLy8gVG8gdXNlLCBjcmVhdGUgeW91ciBzcHJpdGUgYW5kIHRoZW4gcGFzcyBpdCBpbiB0aGUgYCRtYXBgIHBhcmFtXG4vLyBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgaW4gdGhlIHNwcml0ZSBmb2xkZXIgc2hvdWxkIGJlIGAkaW1nLW5hbWVgXG5AbWl4aW4gc3ByaXRlLXJlcGxhY2UtdGV4dC13aXRoLWRpbWVuc2lvbnMgKCRtYXAsICRzcHJpdGUsICRvZmZzZXQteDogMCwgJG9mZnNldC15OiAwKXsgICAgXG4gIEBpbmNsdWRlIHNwcml0ZS1yZXBsYWNlLXRleHQgKCRtYXAsICRzcHJpdGUsIHRydWUsICRvZmZzZXQteCwgJG9mZnNldC15KTtcbn0iLCJAaW1wb3J0IFwidGFibGVzL2FsdGVybmF0aW5nLXJvd3MtYW5kLWNvbHVtbnNcIjtcbkBpbXBvcnQgXCJ0YWJsZXMvYm9yZGVyc1wiO1xuQGltcG9ydCBcInRhYmxlcy9zY2FmZm9sZGluZ1wiO1xuIiwiQG1peGluIGFsdGVybmF0aW5nLXJvd3MtYW5kLWNvbHVtbnMoJGV2ZW4tcm93LWNvbG9yLCAkb2RkLXJvdy1jb2xvciwgJGRhcmstaW50ZXJzZWN0aW9uLCAkaGVhZGVyLWNvbG9yOiB3aGl0ZSwgJGZvb3Rlci1jb2xvcjogd2hpdGUpIHtcbiAgdGgge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItY29sb3I7XG4gICAgJi5ldmVuLCAmOm50aC1jaGlsZCgybikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1jb2xvciAtICRkYXJrLWludGVyc2VjdGlvbjsgfSB9XG4gIHRyIHtcbiAgICAmLm9kZCwgJjpudGgtY2hpbGQoMm4rMSkge1xuICAgICAgdGQge1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvZGQtcm93LWNvbG9yO1xuICAgICAgICYuZXZlbiwgJjpudGgtY2hpbGQoMm4pIHtcbiAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvZGQtcm93LWNvbG9yIC0gJGRhcmstaW50ZXJzZWN0aW9uOyB9IH0gfVxuICAgIH1cbiAgdHIuZXZlbiB7XG4gICAgdGQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGV2ZW4tcm93LWNvbG9yO1xuICAgICAgJi5ldmVuLCAmOm50aC1jaGlsZCgybikge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZXZlbi1yb3ctY29sb3IgLSAkZGFyay1pbnRlcnNlY3Rpb247IH0gfSB9XG4gIHRmb290IHtcbiAgICB0aCwgdGQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvb3Rlci1jb2xvcjtcbiAgICAgICYuZXZlbiwgJjpudGgtY2hpbGQoMm4pIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvb3Rlci1jb2xvciAtICRkYXJrLWludGVyc2VjdGlvbjsgfSB9IH0gfVxuIiwiQG1peGluIG91dGVyLXRhYmxlLWJvcmRlcnMoJHdpZHRoOiAycHgsICRjb2xvcjogYmxhY2spIHtcbiAgYm9yZGVyOiAkd2lkdGggc29saWQgJGNvbG9yO1xuICB0aGVhZCB7XG4gICAgdGgge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJHdpZHRoIHNvbGlkICRjb2xvcjsgfSB9XG4gIHRmb290IHtcbiAgICB0aCwgdGQge1xuICAgICAgYm9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRjb2xvcjsgfSB9XG4gIHRoIHtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRjb2xvcjsgfSB9IH1cblxuQG1peGluIGlubmVyLXRhYmxlLWJvcmRlcnMoJHdpZHRoOiAycHgsICRjb2xvcjogYmxhY2spIHtcbiAgdGgsIHRkIHtcbiAgICBib3JkZXI6IHtcbiAgICAgIHJpZ2h0OiAkd2lkdGggc29saWQgJGNvbG9yO1xuICAgICAgYm90dG9tOiAkd2lkdGggc29saWQgJGNvbG9yO1xuICAgICAgbGVmdC13aWR0aDogMHB4O1xuICAgICAgdG9wLXdpZHRoOiAwcHg7IH07XG4gICAgJjpsYXN0LWNoaWxkLFxuICAgICYubGFzdCB7XG4gICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDBweDsgfSB9XG5cbi8vIElFOCBpZ25vcmVzIHJ1bGVzIHRoYXQgYXJlIGluY2x1ZGVkIG9uIHRoZSBzYW1lIGxpbmUgYXMgOmxhc3QtY2hpbGRcbi8vIHNlZSBodHRwOi8vd3d3LnJpY2hhcmRzY2Fycm90dC5jby51ay9wb3N0cy92aWV3L2llOC1sYXN0LWNoaWxkLWJ1ZyBmb3IgZGV0YWlsc1xuXG4gIHRib2R5LCB0Zm9vdCB7XG4gICAgdHI6bGFzdC1jaGlsZCB7XG4gICAgICB0aCwgdGQge1xuICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7IH0gfVxuICAgIHRyLmxhc3Qge1xuICAgICAgdGgsIHRkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMHB4OyB9IH0gfSB9XG4iLCJAbWl4aW4gdGFibGUtc2NhZmZvbGRpbmcge1xuICB0aCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG4gIHRkLFxuICB0aCB7XG4gICAgcGFkZGluZzogMnB4O1xuICAgICYubnVtZXJpYyB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDsgfSB9IH1cbiIsIkBpbXBvcnQgXCJsaW5rcy9ob3Zlci1saW5rXCI7XG5AaW1wb3J0IFwibGlua3MvbGluay1jb2xvcnNcIjtcbkBpbXBvcnQgXCJsaW5rcy91bnN0eWxlZC1saW5rXCI7XG4iLCIvLyBhIGxpbmsgdGhhdCBvbmx5IGhhcyBhbiB1bmRlcmxpbmUgd2hlbiB5b3UgaG92ZXIgb3ZlciBpdFxuQG1peGluIGhvdmVyLWxpbmsge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9IH1cbiIsIi8vIFNldCBhbGwgdGhlIGNvbG9ycyBmb3IgYSBsaW5rIHdpdGggb25lIG1peGluIGNhbGwuXG4vLyBPcmRlciBvZiBhcmd1bWVudHMgaXM6XG4vL1xuLy8gMS4gbm9ybWFsXG4vLyAyLiBob3ZlclxuLy8gMy4gYWN0aXZlXG4vLyA0LiB2aXNpdGVkXG4vLyA1LiBmb2N1c1xuLy9cbi8vIFRob3NlIHN0YXRlcyBub3Qgc3BlY2lmaWVkIHdpbGwgaW5oZXJpdC5cbi8vIE1peGluIHRvIGFuIGFuY2hvciBsaW5rIGxpa2Ugc286XG4vLyAgICAgYVxuLy8gICAgICAgK2xpbmstY29sb3JzKCMwMGMsICMwY2MsICNjMGMsICNjY2MsICNjYzApXG5cbkBtaXhpbiBsaW5rLWNvbG9ycygkbm9ybWFsLCAkaG92ZXI6IGZhbHNlLCAkYWN0aXZlOiBmYWxzZSwgJHZpc2l0ZWQ6IGZhbHNlLCAkZm9jdXM6IGZhbHNlKSB7XG4gIGNvbG9yOiAkbm9ybWFsO1xuICBAaWYgJHZpc2l0ZWQge1xuICAgICY6dmlzaXRlZCB7XG4gICAgICBjb2xvcjogJHZpc2l0ZWQ7IH0gfVxuICBAaWYgJGZvY3VzIHtcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkZm9jdXM7IH0gfVxuICBAaWYgJGhvdmVyIHtcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkaG92ZXI7IH0gfVxuICBAaWYgJGFjdGl2ZSB7XG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6ICRhY3RpdmU7IH0gfSB9XG4iLCIvLyBBIGxpbmsgdGhhdCBsb29rcyBhbmQgYWN0cyBsaWtlIHRoZSB0ZXh0IGl0IGlzIGNvbnRhaW5lZCB3aXRoaW5cbkBtaXhpbiB1bnN0eWxlZC1saW5rIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgY3Vyc29yOiBpbmhlcml0O1xuICAmOmFjdGl2ZSwgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTsgfSB9XG4iLCJAaW1wb3J0IFwibGlzdHMvaG9yaXpvbnRhbC1saXN0XCI7XG5AaW1wb3J0IFwibGlzdHMvaW5saW5lLWxpc3RcIjtcbkBpbXBvcnQgXCJsaXN0cy9pbmxpbmUtYmxvY2stbGlzdFwiO1xuQGltcG9ydCBcImxpc3RzL2J1bGxldHNcIjtcbiIsIi8vIEhvcml6b250YWwgbGlzdCBsYXlvdXQgbW9kdWxlLlxuLy9cbi8vIEVhc3kgbW9kZSB1c2luZyBzaW1wbGUgZGVzY2VuZGFudCBsaSBzZWxlY3RvcnM6XG4vL1xuLy8gICB1bC5uYXZcbi8vICAgICAraG9yaXpvbnRhbC1saXN0XG4vL1xuLy8gQWR2YW5jZWQgbW9kZTpcbi8vIElmIHlvdSBuZWVkIHRvIHRhcmdldCB0aGUgbGlzdCBpdGVtcyB1c2luZyBhIGRpZmZlcmVudCBzZWxlY3RvciB0aGVuIHVzZVxuLy8gK2hvcml6b250YWwtbGlzdC1jb250YWluZXIgb24geW91ciB1bC9vbCBhbmQgK2hvcml6b250YWwtbGlzdC1pdGVtIG9uIHlvdXIgbGkuXG4vLyBUaGlzIG1heSBoZWxwIHdoZW4gd29ya2luZyBvbiBsYXlvdXRzIGludm9sdmluZyBuZXN0ZWQgbGlzdHMuIEZvciBleGFtcGxlOlxuLy9cbi8vICAgdWwubmF2XG4vLyAgICAgK2hvcml6b250YWwtbGlzdC1jb250YWluZXJcbi8vICAgICA+IGxpXG4vLyAgICAgICAraG9yaXpvbnRhbC1saXN0LWl0ZW1cblxuQGltcG9ydCBcImJ1bGxldHNcIjtcbkBpbXBvcnQgXCIuLi8uLi91dGlsaXRpZXMvZ2VuZXJhbC9jbGVhcmZpeFwiO1xuQGltcG9ydCBcIi4uLy4uL3V0aWxpdGllcy9nZW5lcmFsL3Jlc2V0XCI7XG5AaW1wb3J0IFwiLi4vLi4vdXRpbGl0aWVzL2dlbmVyYWwvZmxvYXRcIjtcblxuLy8gQ2FuIGJlIG1peGVkIGludG8gYW55IHNlbGVjdG9yIHRoYXQgdGFyZ2V0IGEgdWwgb3Igb2wgdGhhdCBpcyBtZWFudFxuLy8gdG8gaGF2ZSBhIGhvcml6b250YWwgbGF5b3V0LiBVc2VkIHRvIGltcGxlbWVudCAraG9yaXpvbnRhbC1saXN0LlxuQG1peGluIGhvcml6b250YWwtbGlzdC1jb250YWluZXIge1xuICBAaW5jbHVkZSByZXNldC1ib3gtbW9kZWw7XG4gIEBpbmNsdWRlIGNsZWFyZml4OyB9XG5cbi8vIENhbiBiZSBtaXhlZCBpbnRvIGFueSBsaSBzZWxlY3RvciB0aGF0IGlzIG1lYW50IHRvIHBhcnRpY2lwYXRlIGluIGEgaG9yaXpvbnRhbCBsYXlvdXQuXG4vLyBVc2VkIHRvIGltcGxlbWVudCAraG9yaXpvbnRhbC1saXN0LlxuLy9cbi8vIDpsYXN0LWNoaWxkIGlzIG5vdCBmdWxseSBzdXBwb3J0ZWRcbi8vIHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Nzcy9jb250ZW50cy5odG1sI3QyOSBmb3IgdGhlIHN1cHBvcnQgbWF0cml4XG4vL1xuLy8gSUU4IGlnbm9yZXMgcnVsZXMgdGhhdCBhcmUgaW5jbHVkZWQgb24gdGhlIHNhbWUgbGluZSBhcyA6bGFzdC1jaGlsZFxuLy8gc2VlIGh0dHA6Ly93d3cucmljaGFyZHNjYXJyb3R0LmNvLnVrL3Bvc3RzL3ZpZXcvaWU4LWxhc3QtY2hpbGQtYnVnIGZvciBkZXRhaWxzXG4vL1xuLy8gU2V0dGluZyBgJHBhZGRpbmdgIHRvIGBmYWxzZWAgZGlzYWJsZXMgdGhlIHBhZGRpbmcgYmV0d2VlbiBsaXN0IGVsZW1lbnRzXG5AbWl4aW4gaG9yaXpvbnRhbC1saXN0LWl0ZW0oJHBhZGRpbmc6IDRweCwgJGRpcmVjdGlvbjogbGVmdCkge1xuICBAaW5jbHVkZSBuby1idWxsZXQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIEBpbmNsdWRlIGZsb2F0KCRkaXJlY3Rpb24pO1xuICBAaWYgJHBhZGRpbmcge1xuICAgIHBhZGRpbmc6IHtcbiAgICAgIGxlZnQ6ICRwYWRkaW5nO1xuICAgICAgcmlnaHQ6ICRwYWRkaW5nO1xuICAgIH1cbiAgICAmOmZpcnN0LWNoaWxkLCAmLmZpcnN0IHsgcGFkZGluZy0jeyRkaXJlY3Rpb259OiAwOyB9XG4gICAgJjpsYXN0LWNoaWxkIHsgcGFkZGluZy0je29wcG9zaXRlLXBvc2l0aW9uKCRkaXJlY3Rpb24pfTogMDsgfVxuICAgICYubGFzdCB7IHBhZGRpbmctI3tvcHBvc2l0ZS1wb3NpdGlvbigkZGlyZWN0aW9uKX06IDA7IH1cbiAgfVxufVxuXG4vLyBBIGxpc3Qob2wsdWwpIHRoYXQgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgZWxlbWVudHMgYXJlIGZsb2F0ZWQgbGVmdCBhbmQgd29uJ3Qgd3JhcC5cbi8vIFRoaXMgaXMgbm90IGFuIGlubGluZSBsaXN0LlxuLy9cbi8vIFNldHRpbmcgYCRwYWRkaW5nYCB0byBgZmFsc2VgIGRpc2FibGVzIHRoZSBwYWRkaW5nIGJldHdlZW4gbGlzdCBlbGVtZW50c1xuQG1peGluIGhvcml6b250YWwtbGlzdCgkcGFkZGluZzogNHB4LCAkZGlyZWN0aW9uOiBsZWZ0KSB7XG4gIEBpbmNsdWRlIGhvcml6b250YWwtbGlzdC1jb250YWluZXI7XG4gIGxpIHtcbiAgICBAaW5jbHVkZSBob3Jpem9udGFsLWxpc3QtaXRlbSgkcGFkZGluZywgJGRpcmVjdGlvbik7IH0gfVxuIiwiLy8gVHVybiBvZmYgdGhlIGJ1bGxldCBmb3IgYW4gZWxlbWVudCBvZiBhIGxpc3RcbkBtaXhpbiBuby1idWxsZXQge1xuICBsaXN0LXN0eWxlLWltYWdlIDogbm9uZTtcbiAgbGlzdC1zdHlsZS10eXBlICA6IG5vbmU7XG4gIG1hcmdpbi1sZWZ0ICAgICAgOiAwO1xufVxuXG4vLyB0dXJucyBvZmYgdGhlIGJ1bGxldHMgZm9yIGFuIGVudGlyZSBsaXN0XG5AbWl4aW4gbm8tYnVsbGV0cyB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpIHsgQGluY2x1ZGUgbm8tYnVsbGV0OyB9XG59XG5cbi8vIE1ha2UgYSBsaXN0KHVsL29sKSBoYXZlIGFuIGltYWdlIGJ1bGxldC5cbi8vXG4vLyBUaGUgbWl4aW4gc2hvdWxkIGJlIHVzZWQgbGlrZSB0aGlzIGZvciBhbiBpY29uIHRoYXQgaXMgNXg3OlxuLy9cbi8vICAgICB1bC5wcmV0dHlcbi8vICAgICAgICtwcmV0dHktYnVsbGV0cyhcIm15LWljb24ucG5nXCIsIDVweCwgN3B4KVxuLy9cbi8vIEFkZGl0aW9uYWxseSwgaWYgdGhlIGltYWdlIGRpbWVuc2lvbnMgYXJlIG5vdCBwcm92aWRlZCxcbi8vIFRoZSBpbWFnZSBkaW1lbnNpb25zIHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGltYWdlIGl0c2VsZi5cbi8vXG4vLyAgICAgdWwucHJldHR5XG4vLyAgICAgICArcHJldHR5LWJ1bGxldHMoXCJteS1pY29uLnBuZ1wiKVxuLy9cbkBtaXhpbiBwcmV0dHktYnVsbGV0cygkYnVsbGV0LWljb24sICR3aWR0aDogaW1hZ2Utd2lkdGgoJGJ1bGxldC1pY29uKSwgJGhlaWdodDogaW1hZ2UtaGVpZ2h0KCRidWxsZXQtaWNvbiksICRsaW5lLWhlaWdodDogMThweCwgJHBhZGRpbmc6IDE0cHgpIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIGxpIHtcbiAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6IGltYWdlLXVybCgkYnVsbGV0LWljb24pIG5vLXJlcGVhdCAoJHBhZGRpbmcgLSAkd2lkdGgpIC8gMiAoJGxpbmUtaGVpZ2h0IC0gJGhlaWdodCkgLyAyO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgfVxufVxuIiwiLy8gbWFrZXMgYSBsaXN0IGlubGluZS5cblxuQG1peGluIGlubGluZS1saXN0IHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAmLCAmIGxpIHtcbiAgICBtYXJnaW46IDBweDtcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICB9XG59XG5cbi8vIG1ha2VzIGFuIGlubGluZSBsaXN0IGRlbGltaXRlZCB3aXRoIHRoZSBwYXNzZWQgc3RyaW5nLlxuLy8gRGVmYXVsdHMgdG8gbWFraW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuXG4vL1xuLy8gUGxlYXNlIG1ha2Ugbm90ZSBvZiB0aGUgYnJvd3NlciBzdXBwb3J0IGlzc3VlcyBiZWZvcmUgdXNpbmcgdGhpcyBtaXhpbjpcbi8vXG4vLyB1c2Ugb2YgYGNvbnRlbnRgIGFuZCBgOmFmdGVyYCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIGFsbCBicm93c2Vycy5cbi8vIFNlZSBxdWlya3Ntb2RlIGZvciB0aGUgW3N1cHBvcnQgbWF0cml4XShodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Nzcy9jb250ZW50cy5odG1sI3QxNSlcbi8vXG4vLyBgOmxhc3QtY2hpbGRgIGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQuXG4vLyBzZWUgcXVpcmtzbW9kZSBmb3IgdGhlIFtzdXBwb3J0IG1hdHJpeF0oaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9jc3MvY29udGVudHMuaHRtbCN0MjkpLlxuLy9cbi8vIElFOCBpZ25vcmVzIHJ1bGVzIHRoYXQgYXJlIGluY2x1ZGVkIG9uIHRoZSBzYW1lIGxpbmUgYXMgOmxhc3QtY2hpbGRcbi8vIHNlZSBodHRwOi8vd3d3LnJpY2hhcmRzY2Fycm90dC5jby51ay9wb3N0cy92aWV3L2llOC1sYXN0LWNoaWxkLWJ1ZyBmb3IgZGV0YWlsc1xuXG5AbWl4aW4gZGVsaW1pdGVkLWxpc3QoJHNlcGFyYXRvcjogXCIsIFwiKSB7XG4gIEBpbmNsdWRlIGlubGluZS1saXN0O1xuICBsaSB7XG4gICAgJjphZnRlciB7IGNvbnRlbnQ6ICRzZXBhcmF0b3I7IH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgJjphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IH1cbiAgICB9XG4gICAgJi5sYXN0IHtcbiAgICAgICY6YWZ0ZXIgeyBjb250ZW50OiBcIlwiOyB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNlZSBbZGVsaW1pdGVkLWxpc3RdKCNtaXhpbi1kZWxpbWl0ZWQtbGlzdClcbi8vIEBkZXByZWNhdGVkXG5AbWl4aW4gY29tbWEtZGVsaW1pdGVkLWxpc3Qge1xuICBAd2FybiBcImNvbW1hLWRlbGltaXRlZC1saXN0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgZGVsaW1pdGVkLWxpc3QgaW5zdGVhZC5cIjtcbiAgQGluY2x1ZGUgZGVsaW1pdGVkLWxpc3Q7XG59XG4iLCIvLyBJbmxpbmUtQmxvY2sgbGlzdCBsYXlvdXQgbW9kdWxlLlxuLy9cbi8vIEVhc3kgbW9kZSB1c2luZyBzaW1wbGUgZGVzY2VuZGFudCBsaSBzZWxlY3RvcnM6XG4vL1xuLy8gICAgIHVsLm5hdiB7XG4vLyAgICAgICBAaW1wb3J0IGlubGluZS1ibG9jay1saXN0O1xuLy8gICAgIH1cbi8vXG4vLyBBZHZhbmNlZCBtb2RlOlxuLy8gSWYgeW91IG5lZWQgdG8gdGFyZ2V0IHRoZSBsaXN0IGl0ZW1zIHVzaW5nIGEgZGlmZmVyZW50IHNlbGVjdG9yIHRoZW4gdXNlXG4vLyBgQGluY2x1ZGUgaW5saW5lLWJsb2NrLWxpc3QtY29udGFpbmVyYCBvbiB5b3VyIHVsL29sIGFuZFxuLy8gYEBpbmNsdWRlIGlubGluZS1ibG9jay1saXN0LWl0ZW1gIG9uIHlvdXIgbGkuIFRoaXMgbWF5IGhlbHAgd2hlbiB3b3JraW5nXG4vLyBvbiBsYXlvdXRzIGludm9sdmluZyBuZXN0ZWQgbGlzdHMuIEZvciBleGFtcGxlOlxuLy9cbi8vICAgICB1bC5uYXYge1xuLy8gICAgICAgQGluY2x1ZGUgaW5saW5lLWJsb2NrLWxpc3QtY29udGFpbmVyO1xuLy8gICAgICAgPiBsaSB7XG4vLyAgICAgICAgIEBpbmNsdWRlIGlubGluZS1ibG9jay1saXN0LWl0ZW07XG4vLyAgICAgICB9XG4vLyAgICAgfVxuXG5AaW1wb3J0IFwiYnVsbGV0c1wiO1xuQGltcG9ydCBcImhvcml6b250YWwtbGlzdFwiO1xuQGltcG9ydCBcIi4uLy4uL3V0aWxpdGllcy9nZW5lcmFsL2Zsb2F0XCI7XG5AaW1wb3J0IFwiLi4vLi4vY3NzMy9pbmxpbmUtYmxvY2tcIjtcblxuLy8gQ2FuIGJlIG1peGVkIGludG8gYW55IHNlbGVjdG9yIHRoYXQgdGFyZ2V0IGEgdWwgb3Igb2wgdGhhdCBpcyBtZWFudFxuLy8gdG8gaGF2ZSBhbiBpbmxpbmUtYmxvY2sgbGF5b3V0LiBVc2VkIHRvIGltcGxlbWVudCBgaW5saW5lLWJsb2NrLWxpc3RgLlxuQG1peGluIGlubGluZS1ibG9jay1saXN0LWNvbnRhaW5lciB7XG4gIEBpbmNsdWRlIGhvcml6b250YWwtbGlzdC1jb250YWluZXI7IH1cblxuLy8gQ2FuIGJlIG1peGVkIGludG8gYW55IGxpIHNlbGVjdG9yIHRoYXQgaXMgbWVhbnQgdG8gcGFydGljaXBhdGUgaW4gYSBob3Jpem9udGFsIGxheW91dC5cbi8vIFVzZWQgdG8gaW1wbGVtZW50IGBpbmxpbmUtYmxvY2stbGlzdGAuXG5AbWl4aW4gaW5saW5lLWJsb2NrLWxpc3QtaXRlbSgkcGFkZGluZzogZmFsc2UpIHtcbiAgQGluY2x1ZGUgbm8tYnVsbGV0O1xuICBAaW5jbHVkZSBpbmxpbmUtYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIEBpZiAkcGFkZGluZyB7XG4gICAgcGFkZGluZzoge1xuICAgICAgbGVmdDogJHBhZGRpbmc7XG4gICAgICByaWdodDogJHBhZGRpbmc7XG4gICAgfTtcbiAgfVxufVxuXG4vLyBBIGxpc3Qob2wsdWwpIHRoYXQgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgZWxlbWVudHMgYXJlIGlubGluZS1ibG9jayBhbmQgd29uJ3Qgd3JhcC5cbkBtaXhpbiBpbmxpbmUtYmxvY2stbGlzdCgkcGFkZGluZzogZmFsc2UpIHtcbiAgQGluY2x1ZGUgaW5saW5lLWJsb2NrLWxpc3QtY29udGFpbmVyO1xuICBsaSB7XG4gICAgQGluY2x1ZGUgaW5saW5lLWJsb2NrLWxpc3QtaXRlbSgkcGFkZGluZyk7IH0gfVxuIiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBTZXQgYCRpbmxpbmUtYmxvY2stYWxpZ25tZW50YCB0byBgbm9uZWAgb3IgYGZhbHNlYCB0byBkaXNhYmxlIHRoZSBvdXRwdXRcbi8vIG9mIGEgdmVydGljYWwtYWxpZ24gcHJvcGVydHkgaW4gdGhlIGlubGluZS1ibG9jayBtaXhpbi5cbi8vIE9yIHNldCBpdCB0byBhIGxlZ2FsIHZhbHVlIGZvciBgdmVydGljYWwtYWxpZ25gIHRvIGNoYW5nZSB0aGUgZGVmYXVsdC5cbiRpbmxpbmUtYmxvY2stYWxpZ25tZW50OiBtaWRkbGUgIWRlZmF1bHQ7XG5cbi8vIFByb3ZpZGVzIGEgY3Jvc3MtYnJvd3NlciBtZXRob2QgdG8gaW1wbGVtZW50IGBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7YFxuQG1peGluIGlubGluZS1ibG9jaygkYWxpZ25tZW50OiAkaW5saW5lLWJsb2NrLWFsaWdubWVudCkge1xuICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1tb3ppbGxhIHtcbiAgICBkaXNwbGF5OiAtbW96LWlubGluZS1zdGFjaztcbiAgfVxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIEBpZiAkYWxpZ25tZW50IGFuZCAkYWxpZ25tZW50ICE9IG5vbmUge1xuICAgIHZlcnRpY2FsLWFsaWduOiAkYWxpZ25tZW50O1xuICB9XG4gIEBpZiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllIHtcbiAgICAqdmVydGljYWwtYWxpZ246IGF1dG87XG4gICAgem9vbTogMTtcbiAgICAqZGlzcGxheTogaW5saW5lO1xuICB9XG59XG4iLCJAaW1wb3J0IFwiLi4vc3VwcG9ydFwiO1xuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2ljIHN1cHBvcnQgZm9yIENTUzMgcHJvcGVydGllcyBhbmRcbi8vIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXhwZXJpbWVudGFsIENTUzIgcHJvcGVydGllcyB3aGVuXG4vLyB0aGUgaW1wbGVtZW50YXRpb25zIGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUgcHJvcGVydHlcbi8vIHByZWZpeC5cbkBtaXhpbiBleHBlcmltZW50YWwoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7IC13ZWJraXQtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAgLWtodG1sLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgICAgLW1vei0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICAgICAtbXMtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAgICAgIC1vLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAjeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbn1cblxuLy8gU2FtZSBhcyBleHBlcmltZW50YWwoKSwgYnV0IGZvciBjYXNlcyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGUgc2FtZSBhbmQgdGhlIHZhbHVlIGlzIHZlbmRvcml6ZWRcbkBtaXhpbiBleHBlcmltZW50YWwtdmFsdWUoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7ICN7JHByb3BlcnR5fSA6IC13ZWJraXQtI3skdmFsdWV9OyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgLWtodG1sLSN7JHZhbHVlfTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgI3skcHJvcGVydHl9IDogICAgLW1vei0jeyR2YWx1ZX07IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICN7JHByb3BlcnR5fSA6ICAgICAtbXMtI3skdmFsdWV9OyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgICAgIC1vLSN7JHZhbHVlfTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAgICAjeyR2YWx1ZX07IH1cbn1cbiIsIkBpbXBvcnQgXCJ0ZXh0L2VsbGlwc2lzXCI7XG5AaW1wb3J0IFwidGV4dC9ub3dyYXBcIjtcbkBpbXBvcnQgXCJ0ZXh0L3JlcGxhY2VtZW50XCI7XG5AaW1wb3J0IFwidGV4dC9mb3JjZS13cmFwXCI7XG4iLCJAaW1wb3J0IFwiLi4vLi4vY3NzMy9zaGFyZWRcIjtcblxuLy8gVG8gZ2V0IGZ1bGwgZmlyZWZveCBzdXBwb3J0LCB5b3UgbXVzdCBpbnN0YWxsIHRoZSBlbGxpcHNpcyBwYXR0ZXJuOlxuLy9cbi8vICAgICBjb21wYXNzIGluc3RhbGwgY29tcGFzcy9lbGxpcHNpc1xuJHVzZS1tb3ppbGxhLWVsbGlwc2lzLWJpbmRpbmc6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyBUaGlzIHRlY2huaXF1ZSwgYnkgW0p1c3RpbiBNYXh3ZWxsXShodHRwOi8vY29kZTQwNC5jb20vKSwgd2FzIG9yaWdpbmFsbHlcbi8vIHB1Ymxpc2hlZCBbaGVyZV0oaHR0cDovL21hdHRzbmlkZXIuY29tL2Nzcy9jc3Mtc3RyaW5nLXRydW5jYXRpb24td2l0aC1lbGxpcHNpcy8pLlxuLy8gRmlyZWZveCBpbXBsZW1lbnRhdGlvbiBieSBbUmlra2VydCBLb3BwZXNdKGh0dHA6Ly93d3cucmlra2VydGtvcHBlcy5jb20vdGhvdWdodHMvMjAwOC82LykuXG5AbWl4aW4gZWxsaXBzaXMoJG5vLXdyYXA6IHRydWUpIHtcbiAgQGlmICRuby13cmFwIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodGV4dC1vdmVyZmxvdywgZWxsaXBzaXMsXG4gICAgbm90KC1tb3opLFxuICAgIG5vdCgtd2Via2l0KSxcbiAgICAtbyxcbiAgICAtbXMsXG4gICAgbm90KC1raHRtbCksXG4gICAgb2ZmaWNpYWxcbiAgKTtcbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSBhbmQgJHVzZS1tb3ppbGxhLWVsbGlwc2lzLWJpbmRpbmcge1xuICAgIC1tb3otYmluZGluZzogc3R5bGVzaGVldC11cmwodW5xdW90ZShcInhtbC9lbGxpcHNpcy54bWwjZWxsaXBzaXNcIikpO1xuICB9XG59XG4iLCIvLyBXaGVuIHJlbWVtYmVyaW5nIHdoZXRoZXIgb3Igbm90IHRoZXJlJ3MgYSBoeXBoZW4gaW4gd2hpdGUtc3BhY2UgaXMgdG9vIGhhcmRcbkBtaXhpbiBub3dyYXAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG4iLCIvLyBJbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB5b3UgcHJlZmVyIHRvIG1vdmUgeW91ciB0ZXh0XG4vLyB3aGVuIGhpZGluZyBpdC5cbi8vXG4vLyBgbGVmdGAgaXMgbW9yZSByb2J1c3QsIGVzcGVjaWFsbHkgaW4gb2xkZXIgYnJvd3NlcnMuXG4vLyBgcmlnaHRgIHNlZW1zIGhhdmUgYmV0dGVyIHJ1bnRpbWUgcGVyZm9ybWFuY2UuXG4kaGlkZS10ZXh0LWRpcmVjdGlvbjogbGVmdCAhZGVmYXVsdDtcblxuLy8gSGlkZXMgaHRtbCB0ZXh0IGFuZCByZXBsYWNlcyBpdCB3aXRoIGFuIGltYWdlLlxuLy8gSWYgeW91IHVzZSB0aGlzIG9uIGFuIGlubGluZSBlbGVtZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgZGlzcGxheSB0byBibG9jayBvciBpbmxpbmUtYmxvY2suXG4vLyBBbHNvLCBpZiB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgZGlmZmVycyBzaWduaWZpY2FudGx5IGZyb20gdGhlIGZvbnQgc2l6ZSwgeW91J2xsIG5lZWQgdG8gc2V0IHRoZSB3aWR0aCBhbmQvb3IgaGVpZ2h0LlxuLy9cbi8vIFBhcmFtZXRlcnM6XG4vL1xuLy8gKiBgaW1nYCAtLSB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBwcm9qZWN0IGltYWdlIGRpcmVjdG9yeSB0byB0aGUgaW1hZ2UsIG9yIGEgdXJsIGxpdGVyYWwuXG4vLyAqIGB4YCAtLSB0aGUgeCBwb3NpdGlvbiBvZiB0aGUgYmFja2dyb3VuZCBpbWFnZS5cbi8vICogYHlgIC0tIHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBiYWNrZ3JvdW5kIGltYWdlLlxuQG1peGluIHJlcGxhY2UtdGV4dCgkaW1nLCAkeDogNTAlLCAkeTogNTAlKSB7XG4gIEBpbmNsdWRlIGhpZGUtdGV4dDtcbiAgYmFja2dyb3VuZDoge1xuICAgIEBpZiBpcy11cmwoJGltZykge1xuICAgICAgaW1hZ2U6IHVybCgkaW1nKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIGltYWdlOiBpbWFnZS11cmwoJGltZyk7XG4gICAgfVxuICAgIHJlcGVhdDogbm8tcmVwZWF0O1xuICAgIHBvc2l0aW9uOiAkeCAkeTtcbiAgfTtcbn1cblxuLy8gTGlrZSB0aGUgYHJlcGxhY2UtdGV4dGAgbWl4aW4sIGJ1dCBhbHNvIHNldHMgdGhlIHdpZHRoXG4vLyBhbmQgaGVpZ2h0IG9mIHRoZSBlbGVtZW50IGFjY29yZGluZyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UuXG4vL1xuLy8gSWYgeW91IHNldCBgJGlubGluZWAgdG8gdHJ1ZSwgdGhlbiBhbiBpbmxpbmUgaW1hZ2UgKGRhdGEgdXJpKSB3aWxsIGJlIHVzZWQuXG5AbWl4aW4gcmVwbGFjZS10ZXh0LXdpdGgtZGltZW5zaW9ucygkaW1nLCAkeDogNTAlLCAkeTogNTAlLCAkaW5saW5lOiBmYWxzZSkge1xuICBAaW5jbHVkZSByZXBsYWNlLXRleHQoaWYoJGlubGluZSwgaW5saW5lLWltYWdlKCRpbWcpLCAkaW1nKSwgJHgsICR5KTtcbiAgd2lkdGg6IGltYWdlLXdpZHRoKCRpbWcpO1xuICBoZWlnaHQ6IGltYWdlLWhlaWdodCgkaW1nKTtcbn1cblxuLy8gSGlkZXMgdGV4dCBpbiBhbiBlbGVtZW50IHNvIHlvdSBjYW4gc2VlIHRoZSBiYWNrZ3JvdW5kLlxuLy9cbi8vIFRoZSBkaXJlY3Rpb24gaW5kaWNhdGVzIGhvdyB0aGUgdGV4dCBzaG91bGQgYmUgbW92ZWQgb3V0IG9mIHZpZXcuXG4vL1xuLy8gU2VlIGAkaGlkZS10ZXh0LWRpcmVjdGlvbmAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHRvIHNldCB0aGlzIGdsb2JhbGx5XG4vLyBmb3IgeW91ciBhcHBsaWNhdGlvbi5cbkBtaXhpbiBoaWRlLXRleHQoJGRpcmVjdGlvbjogJGhpZGUtdGV4dC1kaXJlY3Rpb24pIHtcbiAgQGlmICRkaXJlY3Rpb24gPT0gbGVmdCB7XG4gICAgJGFwcHJveGltYXRlLWVtLXZhbHVlOiAxMnB4O1xuICAgICR3aWRlci10aGFuLWFueS1zY3JlZW46IC05OTk5O1xuICAgIHRleHQtaW5kZW50OiAkd2lkZXItdGhhbi1hbnktc2NyZWVuICogJGFwcHJveGltYXRlLWVtLXZhbHVlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfSBAZWxzZSB7XG4gICAgLy8gc2xpZ2h0bHkgd2lkZXIgdGhhbiB0aGUgYm94IHByZXZlbnRzIGlzc3VlcyB3aXRoIGlubGluZS1ibG9jayBlbGVtZW50c1xuICAgIHRleHQtaW5kZW50OiAxMTAlO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuXG4vLyBIaWRlcyB0ZXh0IGluIGFuIGVsZW1lbnQgYnkgc3F1aXNoaW5nIHRoZSB0ZXh0IGludG8gb2JsaXZpb24uXG4vLyBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBoaWRlIHRleHQgY29udGFpbmVkIGluIGFuIGlubGluZSBlbGVtZW50XG4vLyBidXQgc3RpbGwgaGF2ZSBpdCByZWFkIGJ5IGEgc2NyZWVuIHJlYWRlci5cbkBtaXhpbiBzcXVpc2gtdGV4dCB7XG4gIGZvbnQ6IDAvMCBzZXJpZjtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbiIsIi8vIFByZXZlbnQgbG9uZyB1cmxzIGFuZCB0ZXh0IGZyb20gYnJlYWtpbmcgbGF5b3V0c1xuLy8gW29yaWdpbmFsbHkgZnJvbSBwZXJpc2hhYmxlcHJlc3MuY29tXShodHRwOi8vcGVyaXNoYWJsZXByZXNzLmNvbS9wcmVzcy8yMDEwLzA2LzAxL3dyYXBwaW5nLWNvbnRlbnQvKVxuQG1peGluIGZvcmNlLXdyYXAge1xuICB3aGl0ZS1zcGFjZTogcHJlOyAgICAgICAgICAgLy8gQ1NTIDIuMFxuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgICAgLy8gQ1NTIDIuMVxuICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7ICAgICAgLy8gQ1NTIDMuMFxuICB3aGl0ZS1zcGFjZTogLXByZS13cmFwOyAgICAgLy8gT3BlcmEgNC02XG4gIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAvLyBPcGVyYSA3XG4gIHdoaXRlLXNwYWNlOiAtbW96LXByZS13cmFwOyAvLyBNb3ppbGxhXG4gIHdoaXRlLXNwYWNlOiAtaHAtcHJlLXdyYXA7ICAvLyBIUCBQcmludGVyc1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7ICAgICAgLy8gSUUgNStcbn1cbiIsIkBpbXBvcnQgXCJ0eXBvZ3JhcGh5L2xpbmtzXCI7XG5AaW1wb3J0IFwidHlwb2dyYXBoeS9saXN0c1wiO1xuQGltcG9ydCBcInR5cG9ncmFwaHkvdGV4dFwiO1xuQGltcG9ydCBcInR5cG9ncmFwaHkvdmVydGljYWxfcmh5dGhtXCI7XG4iLCJAaW1wb3J0IFwiLi4vbGF5b3V0L2dyaWQtYmFja2dyb3VuZFwiO1xuXG4vLyBUaGUgYmFzZSBmb250IHNpemUuXG4kYmFzZS1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XG5cbi8vIFRoZSBiYXNlIGxpbmUgaGVpZ2h0IGRldGVybWluZXMgdGhlIGJhc2ljIHVuaXQgb2YgdmVydGljYWwgcmh5dGhtLlxuJGJhc2UtbGluZS1oZWlnaHQ6IDI0cHggIWRlZmF1bHQ7XG5cbi8vIFNldCB0aGUgZGVmYXVsdCBib3JkZXIgc3R5bGUgZm9yIHJoeXRobSBib3JkZXJzLlxuJGRlZmF1bHQtcmh5dGhtLWJvcmRlci1zdHlsZTogc29saWQgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4kYnJvd3Nlci1kZWZhdWx0LWZvbnQtc2l6ZTogMTZweDtcblxuLy8gU2V0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHVzZSBhYnNvbHV0ZSBwaXhlbHMgaW4gc2l6aW5nIHlvdXIgdHlwb2dyYXBoeS5cbiRyZWxhdGl2ZS1mb250LXNpemluZzogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gQWxsb3dzIHRoZSBgYWRqdXN0LWZvbnQtc2l6ZS10b2AgbWl4aW4gYW5kIHRoZSBgbGluZXMtZm9yLWZvbnQtc2l6ZWAgZnVuY3Rpb25cbi8vIHRvIHJvdW5kIHRoZSBsaW5lIGhlaWdodCB0byB0aGUgbmVhcmVzdCBoYWxmIGxpbmUgaGVpZ2h0IGluc3RlYWQgb2YgdGhlXG4vLyBuZWFyZXN0IGludGVncmFsIGxpbmUgaGVpZ2h0IHRvIGF2b2lkIGxhcmdlIHNwYWNpbmcgYmV0d2VlbiBsaW5lcy5cbiRyb3VuZC10by1uZWFyZXN0LWhhbGYtbGluZTogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIEVuc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCB0aGlzIG1hbnkgcGl4ZWxzXG4vLyBvZiB2ZXJ0aWNhbCBwYWRkaW5nIGFib3ZlIGFuZCBiZWxvdyB0aGUgdGV4dC5cbiRtaW4tbGluZS1wYWRkaW5nOiAycHggIWRlZmF1bHQ7XG5cbi8vICRiYXNlLWZvbnQtc2l6ZSBidXQgaW4geW91ciBvdXRwdXQgdW5pdCBvZiBjaG9pY2UuXG4vLyBEZWZhdWx0cyB0byAxZW0gd2hlbiBgJHJlbGF0aXZlLWZvbnQtc2l6aW5nYCBpcyB0cnVlLlxuJGZvbnQtdW5pdDogaWYoJHJlbGF0aXZlLWZvbnQtc2l6aW5nLCAxZW0sICRiYXNlLWZvbnQtc2l6ZSkgIWRlZmF1bHQ7XG5cbi8vIFRoZSBiYXNpYyB1bml0IG9mIGZvbnQgcmh5dGhtLlxuJGJhc2Utcmh5dGhtLXVuaXQ6ICRiYXNlLWxpbmUtaGVpZ2h0IC8gJGJhc2UtZm9udC1zaXplICogJGZvbnQtdW5pdDtcblxuLy8gVGhlIGxlYWRlciBpcyB0aGUgYW1vdW50IG9mIHdoaXRlc3BhY2UgaW4gYSBsaW5lLlxuLy8gSXQgbWlnaHQgYmUgdXNlZnVsIGluIHlvdXIgY2FsY3VsYXRpb25zLlxuJGJhc2UtbGVhZGVyOiAoJGJhc2UtbGluZS1oZWlnaHQgLSAkYmFzZS1mb250LXNpemUpICogJGZvbnQtdW5pdCAvICRiYXNlLWZvbnQtc2l6ZTtcblxuLy8gVGhlIGhhbGYtbGVhZGVyIGlzIHRoZSBhbW91bnQgb2Ygd2hpdGVzcGFjZSBhYm92ZSBhbmQgYmVsb3cgYSBsaW5lLlxuLy8gSXQgbWlnaHQgYmUgdXNlZnVsIGluIHlvdXIgY2FsY3VsYXRpb25zLlxuJGJhc2UtaGFsZi1sZWFkZXI6ICRiYXNlLWxlYWRlciAvIDI7XG5cbi8vIFRydWUgaWYgYSBudW1iZXIgaGFzIGEgcmVsYXRpdmUgdW5pdC5cbkBmdW5jdGlvbiByZWxhdGl2ZS11bml0KCRudW1iZXIpIHtcbiAgQHJldHVybiB1bml0KCRudW1iZXIpID09IFwiJVwiIG9yIHVuaXQoJG51bWJlcikgPT0gXCJlbVwiIG9yIHVuaXQoJG51bWJlcikgPT0gXCJyZW1cIlxufVxuXG4vLyBUcnVlIGlmIGEgbnVtYmVyIGhhcyBhbiBhYnNvbHV0ZSB1bml0LlxuQGZ1bmN0aW9uIGFic29sdXRlLXVuaXQoJG51bWJlcikge1xuICBAcmV0dXJuIG5vdChyZWxhdGl2ZS11bml0KCRudW1iZXIpIG9yIHVuaXRsZXNzKCRudW1iZXIpKTtcbn1cblxuQGlmICRyZWxhdGl2ZS1mb250LXNpemluZyBhbmQgbm90KHJlbGF0aXZlLXVuaXQoJGZvbnQtdW5pdCkpIHtcbiAgQHdhcm4gXCIkcmVsYXRpdmUtZm9udC1zaXppbmcgaXMgdHJ1ZSBidXQgJGZvbnQtdW5pdCBpcyBzZXQgdG8gI3skZm9udC11bml0fSB3aGljaCBpcyBub3QgYSByZWxhdGl2ZSB1bml0LlwiO1xufVxuXG4vLyBFc3RhYmxpc2hlcyBhIGZvbnQgYmFzZWxpbmUgZm9yIHRoZSBnaXZlbiBmb250LXNpemUuXG5AbWl4aW4gZXN0YWJsaXNoLWJhc2VsaW5lKCRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICAvLyBJRSA2IHJlZnVzZXMgdG8gcmVzaXplIGZvbnRzIHNldCBpbiBwaXhlbHMgYW5kIGl0IHdlaXJkbHkgcmVzaXplcyBmb250c1xuICAvLyB3aG9zZSByb290IGlzIHNldCBpbiBlbXMuIFNvIHdlIHNldCB0aGUgcm9vdCBmb250IHNpemUgaW4gcGVyY2VudGFnZXMgb2ZcbiAgLy8gdGhlIGRlZmF1bHQgZm9udCBzaXplLlxuICAqIGh0bWwge1xuICAgIGZvbnQtc2l6ZTogMTAwJSAqICgkZm9udC1zaXplIC8gJGJyb3dzZXItZGVmYXVsdC1mb250LXNpemUpO1xuICB9XG4gIGh0bWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBAaW5jbHVkZSBhZGp1c3QtbGVhZGluZy10bygxLCBpZigkcmVsYXRpdmUtZm9udC1zaXppbmcsICRmb250LXNpemUsICRiYXNlLWZvbnQtc2l6ZSkpO1xuICB9XG59XG5cbi8vIFJlc2V0cyB0aGUgbGluZS1oZWlnaHQgdG8gMSB2ZXJ0aWNhbCByaHl0aG0gdW5pdC5cbi8vIERvZXMgbm90IHdvcmsgb24gZWxlbWVudHMgd2hvc2UgZm9udC1zaXplIGlzIGRpZmZlcmVudCBmcm9tICRiYXNlLWZvbnQtc2l6ZS5cbi8vXG4vLyBAZGVwcmVjYXRlZCBUaGlzIG1peGluIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLlxuLy8gUGxlYXNlIHVzZSB0aGUgYGFkanVzdC1sZWFkaW5nLXRvYCBtaXhpbiBpbnN0ZWFkLlxuQG1peGluIHJlc2V0LWJhc2VsaW5lIHtcbiAgQGluY2x1ZGUgYWRqdXN0LWxlYWRpbmctdG8oMSwgaWYoJHJlbGF0aXZlLWZvbnQtc2l6aW5nLCAkYmFzZS1mb250LXNpemUsICRiYXNlLWZvbnQtc2l6ZSkpO1xufVxuXG4vLyBTaG93IGEgYmFja2dyb3VuZCBpbWFnZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlYnVnIHlvdXIgYWxpZ25tZW50cy5cbi8vIEluY2x1ZGUgdGhlICRpbWcgYXJndW1lbnQgaWYgeW91IHdvdWxkIHJhdGhlciB1c2UgeW91ciBvd24gaW1hZ2UgdGhhbiB0aGVcbi8vIENvbXBhc3MgZGVmYXVsdCBncmFkaWVudCBpbWFnZS5cbkBtaXhpbiBkZWJ1Zy12ZXJ0aWNhbC1hbGlnbm1lbnQoJGltZzogZmFsc2UpIHtcbiAgQGlmICRpbWcge1xuICAgIGJhY2tncm91bmQ6IGltYWdlLXVybCgkaW1nKTtcbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgYmFzZWxpbmUtZ3JpZC1iYWNrZ3JvdW5kKCRiYXNlLXJoeXRobS11bml0KTtcbiAgfVxufVxuXG4vLyBBZGp1c3QgYSBibG9jayB0byBoYXZlIGEgZGlmZmVyZW50IGZvbnQgc2l6ZSBhbmQgbGluZSBoZWlnaHQgdG8gbWFpbnRhaW4gdGhlXG4vLyByaHl0aG0uICRsaW5lcyBzcGVjaWZpZXMgaG93IG1hbnkgbXVsdGlwbGVzIG9mIHRoZSBiYXNlbGluZSByaHl0aG0gZWFjaCBsaW5lXG4vLyBvZiB0aGlzIGZvbnQgc2hvdWxkIHVzZSB1cC4gSXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhbiBpbnRlZ2VyLCBidXQgaXRcbi8vIGRlZmF1bHRzIHRvIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGUgZm9udC5cbi8vIFVzZSAkZnJvbS1zaXplIHRvIGFkanVzdCBmcm9tIGEgZm9udC1zaXplIG90aGVyIHRoYW4gdGhlIGJhc2UgZm9udC1zaXplLlxuQG1peGluIGFkanVzdC1mb250LXNpemUtdG8oJHRvLXNpemUsICRsaW5lczogbGluZXMtZm9yLWZvbnQtc2l6ZSgkdG8tc2l6ZSksICRmcm9tLXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBAaWYgbm90KCRyZWxhdGl2ZS1mb250LXNpemluZykgYW5kICRmcm9tLXNpemUgIT0gJGJhc2UtZm9udC1zaXplIHtcbiAgICBAd2FybiBcIiRyZWxhdGl2ZS1mb250LXNpemluZyBpcyBmYWxzZSBidXQgYSByZWxhdGl2ZSBmb250IHNpemUgd2FzIHBhc3NlZCB0byBhZGp1c3QtZm9udC1zaXplLXRvXCI7XG4gIH1cbiAgZm9udC1zaXplOiAkZm9udC11bml0ICogJHRvLXNpemUgLyAkZnJvbS1zaXplO1xuICBAaW5jbHVkZSBhZGp1c3QtbGVhZGluZy10bygkbGluZXMsIGlmKCRyZWxhdGl2ZS1mb250LXNpemluZywgJHRvLXNpemUsICRiYXNlLWZvbnQtc2l6ZSkpO1xufVxuXG4vLyBBZGp1c3QgYSBibG9jayB0byBoYXZlIGRpZmZlcmVudCBsaW5lIGhlaWdodCB0byBtYWludGFpbiB0aGUgcmh5dGhtLlxuLy8gJGxpbmVzIHNwZWNpZmllcyBob3cgbWFueSBtdWx0aXBsZXMgb2YgdGhlIGJhc2VsaW5lIHJoeXRobSBlYWNoIGxpbmUgb2YgdGhpc1xuLy8gZm9udCBzaG91bGQgdXNlIHVwLiBJdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGJ1dCBpdCBkZWZhdWx0cyB0byB0aGVcbi8vIHNtYWxsZXN0IGludGVnZXIgdGhhdCBpcyBsYXJnZSBlbm91Z2ggdG8gZml0IHRoZSBmb250LlxuQG1peGluIGFkanVzdC1sZWFkaW5nLXRvKCRsaW5lcywgJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplKSB7XG4gIGxpbmUtaGVpZ2h0OiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplKTtcbn1cblxuLy8gQ2FsY3VsYXRlIHJoeXRobSB1bml0cy5cbkBmdW5jdGlvbiByaHl0aG0oXG4gICRsaW5lczogMSxcbiAgJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplLFxuICAkb2Zmc2V0OiAwXG4pIHtcbiAgQGlmIG5vdCgkcmVsYXRpdmUtZm9udC1zaXppbmcpIGFuZCAkZm9udC1zaXplICE9ICRiYXNlLWZvbnQtc2l6ZSB7XG4gICAgQHdhcm4gXCIkcmVsYXRpdmUtZm9udC1zaXppbmcgaXMgZmFsc2UgYnV0IGEgcmVsYXRpdmUgZm9udCBzaXplIHdhcyBwYXNzZWQgdG8gdGhlIHJoeXRobSBmdW5jdGlvblwiO1xuICB9XG4gICRyaHl0aG06ICRmb250LXVuaXQgKiAoJGxpbmVzICogJGJhc2UtbGluZS1oZWlnaHQgLSAkb2Zmc2V0KSAvICRmb250LXNpemU7XG4gIC8vIFJvdW5kIHRoZSBwaXhlbHMgZG93biB0byBuZWFyZXN0IGludGVnZXIuXG4gIEBpZiB1bml0KCRyaHl0aG0pID09IHB4IHtcbiAgICAkcmh5dGhtOiBmbG9vcigkcmh5dGhtKTtcbiAgfVxuICBAcmV0dXJuICRyaHl0aG07XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBtdWx0aXBsZSBvZiByaHl0aG0gdW5pdHMgbmVlZGVkIHRvIGNvbnRhaW4gdGhlIGZvbnQtc2l6ZS5cbkBmdW5jdGlvbiBsaW5lcy1mb3ItZm9udC1zaXplKCRmb250LXNpemUpIHtcbiAgJGxpbmVzOiBpZigkcm91bmQtdG8tbmVhcmVzdC1oYWxmLWxpbmUsXG4gICAgICAgICAgICAgIGNlaWwoMiAqICRmb250LXNpemUgLyAkYmFzZS1saW5lLWhlaWdodCkgLyAyLFxuICAgICAgICAgICAgICBjZWlsKCRmb250LXNpemUgLyAkYmFzZS1saW5lLWhlaWdodCkpO1xuICBAaWYgJGxpbmVzICogJGJhc2UtbGluZS1oZWlnaHQgLSAkZm9udC1zaXplIDwgJG1pbi1saW5lLXBhZGRpbmcgKiAyIHtcbiAgICAkbGluZXM6ICRsaW5lcyArIGlmKCRyb3VuZC10by1uZWFyZXN0LWhhbGYtbGluZSwgMC41LCAxKTtcbiAgfVxuICBAcmV0dXJuICRsaW5lcztcbn1cblxuLy8gQXBwbHkgbGVhZGluZyB3aGl0ZXNwYWNlLiBUaGUgJHByb3BlcnR5IGNhbiBiZSBtYXJnaW4gb3IgcGFkZGluZy5cbkBtaXhpbiBsZWFkZXIoJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRwcm9wZXJ0eTogbWFyZ2luKSB7XG4gICN7JHByb3BlcnR5fS10b3A6IHJoeXRobSgkbGluZXMsICRmb250LXNpemUpO1xufVxuXG4vLyBBcHBseSBsZWFkaW5nIHdoaXRlc3BhY2UgYXMgcGFkZGluZy5cbkBtaXhpbiBwYWRkaW5nLWxlYWRlcigkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBwYWRkaW5nLXRvcDogcmh5dGhtKCRsaW5lcywgJGZvbnQtc2l6ZSk7XG59XG5cbi8vIEFwcGx5IGxlYWRpbmcgd2hpdGVzcGFjZSBhcyBtYXJnaW4uXG5AbWl4aW4gbWFyZ2luLWxlYWRlcigkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBtYXJnaW4tdG9wOiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplKTtcbn1cblxuLy8gQXBwbHkgdHJhaWxpbmcgd2hpdGVzcGFjZS4gVGhlICRwcm9wZXJ0eSBjYW4gYmUgbWFyZ2luIG9yIHBhZGRpbmcuXG5AbWl4aW4gdHJhaWxlcigkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSwgJHByb3BlcnR5OiBtYXJnaW4pIHtcbiAgI3skcHJvcGVydHl9LWJvdHRvbTogcmh5dGhtKCRsaW5lcywgJGZvbnQtc2l6ZSk7XG59XG5cbi8vIEFwcGx5IHRyYWlsaW5nIHdoaXRlc3BhY2UgYXMgcGFkZGluZy5cbkBtaXhpbiBwYWRkaW5nLXRyYWlsZXIoJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUpIHtcbiAgcGFkZGluZy1ib3R0b206IHJoeXRobSgkbGluZXMsICRmb250LXNpemUpO1xufVxuXG4vLyBBcHBseSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFzIG1hcmdpbi5cbkBtaXhpbiBtYXJnaW4tdHJhaWxlcigkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBtYXJnaW4tYm90dG9tOiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplKTtcbn1cblxuLy8gU2hvcnRoYW5kIG1peGluIHRvIGFwcGx5IHdoaXRlc3BhY2UgZm9yIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgYW5kIHBhZGRpbmcuXG5AbWl4aW4gcmh5dGhtKCRsZWFkZXI6IDAsICRwYWRkaW5nLWxlYWRlcjogMCwgJHBhZGRpbmctdHJhaWxlcjogMCwgJHRyYWlsZXI6IDAsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBAaW5jbHVkZSBsZWFkZXIoJGxlYWRlciwgJGZvbnQtc2l6ZSk7XG4gIEBpbmNsdWRlIHBhZGRpbmctbGVhZGVyKCRwYWRkaW5nLWxlYWRlciwgJGZvbnQtc2l6ZSk7XG4gIEBpbmNsdWRlIHBhZGRpbmctdHJhaWxlcigkcGFkZGluZy10cmFpbGVyLCAkZm9udC1zaXplKTtcbiAgQGluY2x1ZGUgdHJhaWxlcigkdHJhaWxlciwgJGZvbnQtc2l6ZSk7XG59XG5cbi8vIEFwcGx5IGEgYm9yZGVyIGFuZCB3aGl0ZXNwYWNlIHRvIGFueSBzaWRlIHdpdGhvdXQgZGVzdHJveWluZyB0aGUgdmVydGljYWxcbi8vIHJoeXRobS4gVGhlIHdoaXRlc3BhY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIuXG5AbWl4aW4gYXBwbHktc2lkZS1yaHl0aG0tYm9yZGVyKCRzaWRlLCAkd2lkdGg6IDFweCwgJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRib3JkZXItc3R5bGU6ICRkZWZhdWx0LXJoeXRobS1ib3JkZXItc3R5bGUpIHtcbiAgQGlmIG5vdCgkcmVsYXRpdmUtZm9udC1zaXppbmcpIGFuZCAkZm9udC1zaXplICE9ICRiYXNlLWZvbnQtc2l6ZSB7XG4gICAgQHdhcm4gXCIkcmVsYXRpdmUtZm9udC1zaXppbmcgaXMgZmFsc2UgYnV0IGEgcmVsYXRpdmUgZm9udCBzaXplIHdhcyBwYXNzZWQgdG8gYXBwbHktc2lkZS1yaHl0aG0tYm9yZGVyXCI7XG4gIH1cbiAgYm9yZGVyLSN7JHNpZGV9LXN0eWxlOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItI3skc2lkZX0td2lkdGg6ICRmb250LXVuaXQgKiAkd2lkdGggLyAkZm9udC1zaXplO1xuICBwYWRkaW5nLSN7JHNpZGV9OiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplLCAkb2Zmc2V0OiAkd2lkdGgpO1xufVxuXG4vLyBBcHBseSBib3JkZXJzIGFuZCB3aGl0ZXNwYWNlIGVxdWFsbHkgdG8gYWxsIHNpZGVzLlxuQG1peGluIHJoeXRobS1ib3JkZXJzKCR3aWR0aDogMXB4LCAkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSwgJGJvcmRlci1zdHlsZTogJGRlZmF1bHQtcmh5dGhtLWJvcmRlci1zdHlsZSkge1xuICBAaWYgbm90KCRyZWxhdGl2ZS1mb250LXNpemluZykgYW5kICRmb250LXNpemUgIT0gJGJhc2UtZm9udC1zaXplIHtcbiAgICBAd2FybiBcIiRyZWxhdGl2ZS1mb250LXNpemluZyBpcyBmYWxzZSBidXQgYSByZWxhdGl2ZSBmb250IHNpemUgd2FzIHBhc3NlZCB0byByaHl0aG0tYm9yZGVyc1wiO1xuICB9XG4gIGJvcmRlcjoge1xuICAgIHN0eWxlOiAkYm9yZGVyLXN0eWxlO1xuICAgIHdpZHRoOiAkZm9udC11bml0ICogJHdpZHRoIC8gJGZvbnQtc2l6ZTtcbiAgfTtcbiAgcGFkZGluZzogcmh5dGhtKCRsaW5lcywgJGZvbnQtc2l6ZSwgJG9mZnNldDogJHdpZHRoKTtcbn1cblxuLy8gQXBwbHkgYSBsZWFkaW5nIGJvcmRlci5cbkBtaXhpbiBsZWFkaW5nLWJvcmRlcigkd2lkdGg6IDFweCwgJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRib3JkZXItc3R5bGU6ICRkZWZhdWx0LXJoeXRobS1ib3JkZXItc3R5bGUpIHtcbiAgQGluY2x1ZGUgYXBwbHktc2lkZS1yaHl0aG0tYm9yZGVyKHRvcCwgJHdpZHRoLCAkbGluZXMsICRmb250LXNpemUsICRib3JkZXItc3R5bGUpO1xufVxuXG4vLyBBcHBseSBhIHRyYWlsaW5nIGJvcmRlci5cbkBtaXhpbiB0cmFpbGluZy1ib3JkZXIoJHdpZHRoOiAxcHgsICRsaW5lczogMSwgJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplLCAkYm9yZGVyLXN0eWxlOiAkZGVmYXVsdC1yaHl0aG0tYm9yZGVyLXN0eWxlKSB7XG4gIEBpbmNsdWRlIGFwcGx5LXNpZGUtcmh5dGhtLWJvcmRlcihib3R0b20sICR3aWR0aCwgJGxpbmVzLCAkZm9udC1zaXplLCAkYm9yZGVyLXN0eWxlKTtcbn1cblxuLy8gQXBwbHkgYm90aCBsZWFkaW5nIGFuZCB0cmFpbGluZyBib3JkZXJzLlxuQG1peGluIGhvcml6b250YWwtYm9yZGVycygkd2lkdGg6IDFweCwgJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRib3JkZXItc3R5bGU6ICRkZWZhdWx0LXJoeXRobS1ib3JkZXItc3R5bGUpIHtcbiAgQGluY2x1ZGUgbGVhZGluZy1ib3JkZXIoJHdpZHRoLCAkbGluZXMsICRmb250LXNpemUsICRib3JkZXItc3R5bGUpO1xuICBAaW5jbHVkZSB0cmFpbGluZy1ib3JkZXIoJHdpZHRoLCAkbGluZXMsICRmb250LXNpemUsICRib3JkZXItc3R5bGUpO1xufVxuXG4vLyBBbGlhcyBmb3IgYGhvcml6b250YWwtYm9yZGVyc2AgbWl4aW4uXG5AbWl4aW4gaC1ib3JkZXJzKCR3aWR0aDogMXB4LCAkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSwgJGJvcmRlci1zdHlsZTogJGRlZmF1bHQtcmh5dGhtLWJvcmRlci1zdHlsZSkge1xuICBAaW5jbHVkZSBob3Jpem9udGFsLWJvcmRlcnMoJHdpZHRoLCAkbGluZXMsICRmb250LXNpemUsICRib3JkZXItc3R5bGUpO1xufVxuIiwiQGltcG9ydCBcIi4uL2NzczMvaW1hZ2VzXCI7XG5AaW1wb3J0IFwiLi4vY3NzMy9iYWNrZ3JvdW5kLXNpemVcIjtcblxuLy8gU2V0IHRoZSBjb2xvciBvZiB5b3VyIGNvbHVtbnNcbiRncmlkLWJhY2tncm91bmQtY29sdW1uLWNvbG9yICAgICA6IHJnYmEoMTAwLCAxMDAsIDIyNSwgMC4yNSkgICAhZGVmYXVsdDtcbi8vIFNldCB0aGUgY29sb3Igb2YgeW91ciBndXR0ZXJzXG4kZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci1jb2xvciAgICAgOiByZ2JhKDAsIDAsIDAsIDApICAgICAgICAgICAgIWRlZmF1bHQ7XG5cbi8vIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4geW91ciBncmlkXG4kZ3JpZC1iYWNrZ3JvdW5kLXRvdGFsLWNvbHVtbnMgICAgOiAyNCAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4vLyBTZXQgdGhlIHdpZHRoIG9mIHlvdXIgY29sdW1uc1xuJGdyaWQtYmFja2dyb3VuZC1jb2x1bW4td2lkdGggICAgIDogMzBweCAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuLy8gU2V0IHRoZSB3aWR0aCBvZiB5b3VyIGd1dHRlcnNcbiRncmlkLWJhY2tncm91bmQtZ3V0dGVyLXdpZHRoICAgICA6IDEwcHggICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIFNldCB0aGUgb2Zmc2V0LCBpZiB5b3VyIGNvbHVtbnMgYXJlIHBhZGRlZCBpbiBmcm9tIHRoZSBjb250YWluZXIgZWRnZVxuJGdyaWQtYmFja2dyb3VuZC1vZmZzZXQgICAgICAgICAgIDogMHB4ICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG4vLyBTZXQgdGhlIGNvbG9yIG9mIHlvdXIgYmFzZWxpbmVcbiRncmlkLWJhY2tncm91bmQtYmFzZWxpbmUtY29sb3IgICA6IHJnYmEoMCwgMCwgMCwgMC41KSAgICAgICAgICAhZGVmYXVsdDtcbi8vIFNldCB0aGUgaGVpZ2h0IG9mIHlvdXIgYmFzZWxpbmUgZ3JpZFxuJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1oZWlnaHQgIDogMS41ZW0gICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG4vLyB0b2dnbGUgeW91ciBjb2x1bW5zIGdyaWRzIG9uIGFuZCBvZmZcbiRzaG93LWNvbHVtbi1ncmlkLWJhY2tncm91bmRzICAgICA6IHRydWUgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIHRvZ2dsZSB5b3VyIHZlcnRpY2FsIGdyaWRzIG9uIGFuZCBvZmZcbiRzaG93LWJhc2VsaW5lLWdyaWQtYmFja2dyb3VuZHMgICA6IHRydWUgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIHRvZ2dsZSBhbGwgeW91ciBncmlkcyBvbiBhbmQgb2ZmXG4kc2hvdy1ncmlkLWJhY2tncm91bmRzICAgICAgICAgICAgOiB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cbi8vIG9wdGlvbmFsbHkgZm9yY2UgeW91ciBncmlkLWltYWdlIHRvIHJlbWFpbiBmbHVpZFxuLy8gbm8gbWF0dGVyIHdoYXQgdW5pdHMgeW91IHVzZWQgdG8gZGVjbGFyZWQgeW91ciBncmlkLlxuJGdyaWQtYmFja2dyb3VuZC1mb3JjZS1mbHVpZCAgICAgIDogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cbi8vIENyZWF0ZSB0aGUgZ3JhZGllbnQgbmVlZGVkIGZvciBiYXNlbGluZSBncmlkc1xuQGZ1bmN0aW9uIGdldC1iYXNlbGluZS1ncmFkaWVudChcbiAgJGNvbG9yIDogJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvclxuKSB7XG4gICRncmFkaWVudDogbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgJGNvbG9yIDUlLCByZ2JhKCRjb2xvciwwKSA1JSk7XG4gIEByZXR1cm4gJGdyYWRpZW50O1xufVxuXG4vLyBDcmVhdGUgdGhlIGNvbG9yLXN0b3BzIG5lZWRlZCBmb3IgaG9yaXpvbnRhbCBncmlkc1xuQGZ1bmN0aW9uIGJ1aWxkLWdyaWQtYmFja2dyb3VuZChcbiAgJHRvdGFsICAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC10b3RhbC1jb2x1bW5zLFxuICAkY29sdW1uICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWNvbHVtbi13aWR0aCxcbiAgJGd1dHRlciAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1ndXR0ZXItd2lkdGgsXG4gICRvZmZzZXQgICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtb2Zmc2V0LFxuICAkY29sdW1uLWNvbG9yICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWNvbHVtbi1jb2xvcixcbiAgJGd1dHRlci1jb2xvciAgIDogJGdyaWQtYmFja2dyb3VuZC1ndXR0ZXItY29sb3Jcbikge1xuICAkZ3JpZDogY29tcGFjdCgpO1xuICAkZ3JpZDogYXBwZW5kKCRncmlkLCAkZ3V0dGVyLWNvbG9yICRvZmZzZXQsIGNvbW1hKTtcbiAgQGZvciAkaSBmcm9tIDAgdG8gJHRvdGFsIHtcblxuICAgIC8vICRhIHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIHRoaXMgY29sdW1uLCBpbml0aWFsbHkgZXF1YWwgdG8gdGhlIG9mZnNldFxuICAgICRhOiAkb2Zmc2V0O1xuICAgIEBpZiAkaSA+IDAgeyAkYTogJGEgKyAoKCRjb2x1bW4gKyAkZ3V0dGVyKSAqICRpKTsgfVxuXG4gICAgLy8gJGcgcmVwcmVzZW50cyB0aGUgc3RhcnQgb2YgdGhpcyBndXR0ZXIsIGVxdWFsIHRvICRhIHBsdXMgb25lIGNvbHVtbi13aWR0aFxuICAgICRnOiAkYSArICRjb2x1bW47XG5cbiAgICAvLyAkeiByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBndXR0ZXIsIGVxdWFsIHRvICRnIHBsdXMgb25lIGd1dHRlci13aWR0aFxuICAgICR6OiAkZyArICRndXR0ZXI7XG5cbiAgICBAaWYgKHVuaXQoJGEpID09IFwiJVwiKSBhbmQgKCRpID09ICgkdG90YWwgLSAxKSkge1xuICAgICAgJHo6IDEwMCU7XG4gICAgfVxuXG4gICAgLy8gYW5kIHdlIGFkZCB0aGlzIGNvbHVtbi9ndXR0ZXIgcGFpciB0byBvdXIgZ3JpZFxuICAgICRncmlkOiBqb2luKCRncmlkLCAoJGNvbHVtbi1jb2xvciAkYSwgJGNvbHVtbi1jb2xvciAkZywgJGd1dHRlci1jb2xvciAkZywgJGd1dHRlci1jb2xvciAkeikpO1xuICB9XG5cbiAgQHJldHVybiAkZ3JpZDtcbn1cblxuLy8gUmV0dXJuIHRoZSBncmFkaWVudCBuZWVkZWQgZm9yIGhvcml6b250YWwgZ3JpZHNcbkBmdW5jdGlvbiBnZXQtY29sdW1uLWdyYWRpZW50KFxuICAkdG90YWwgICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLXRvdGFsLWNvbHVtbnMsXG4gICRjb2x1bW4gICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtY29sdW1uLXdpZHRoLFxuICAkZ3V0dGVyICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci13aWR0aCxcbiAgJG9mZnNldCAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1vZmZzZXQsXG4gICRjb2x1bW4tY29sb3IgICA6ICRncmlkLWJhY2tncm91bmQtY29sdW1uLWNvbG9yLFxuICAkZ3V0dGVyLWNvbG9yICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci1jb2xvcixcbiAgJGZvcmNlLWZsdWlkICAgIDogJGdyaWQtYmFja2dyb3VuZC1mb3JjZS1mbHVpZFxuKSB7XG4gICRncmlkOiB1bnF1b3RlKFwiXCIpO1xuXG4gIC8vIGRvbid0IGZvcmNlIGZsdWlkIGdyaWRzIHdoZW4gdGhleSBhcmUgYWxyZWFkeSBmbHVpZC5cbiAgQGlmIHVuaXQoJGNvbHVtbikgPT0gXCIlXCIgeyAkZm9yY2UtZmx1aWQ6IGZhbHNlOyB9XG5cbiAgQGlmICRmb3JjZS1mbHVpZCB7XG4gICAgJGdyaWQ6IGdldC1jb2x1bW4tZmx1aWQtZ3JpZCgkdG90YWwsJGNvbHVtbiwkZ3V0dGVyLCRvZmZzZXQsJGNvbHVtbi1jb2xvciwkZ3V0dGVyLWNvbG9yKTtcbiAgfSBAZWxzZSB7XG4gICAgJGdyaWQ6IGJ1aWxkLWdyaWQtYmFja2dyb3VuZCgkdG90YWwsJGNvbHVtbiwkZ3V0dGVyLCRvZmZzZXQsJGNvbHVtbi1jb2xvciwkZ3V0dGVyLWNvbG9yKTtcbiAgfVxuXG4gIC8vIHJldHVybiB0aGUgaG9yaXpvbnRhbCBncmlkIGFzIGEgZ3JhZGllbnRcbiAgJGdyYWRpZW50OiBsaW5lYXItZ3JhZGllbnQobGVmdCwgJGdyaWQpO1xuICBAcmV0dXJuICRncmFkaWVudDtcbn1cblxuLy8gQ29udmVydCBhIGdyaWQgZnJvbSBmaXhlZCB1bml0cyBpbnRvIHBlcmNlbnRhZ2VzLlxuQGZ1bmN0aW9uIGdldC1jb2x1bW4tZmx1aWQtZ3JpZChcbiAgJHRvdGFsICAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC10b3RhbC1jb2x1bW5zLFxuICAkY29sdW1uICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWNvbHVtbi13aWR0aCxcbiAgJGd1dHRlciAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1ndXR0ZXItd2lkdGgsXG4gICRvZmZzZXQgICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtb2Zmc2V0LFxuICAkY29sdW1uLWNvbG9yICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWNvbHVtbi1jb2xvcixcbiAgJGd1dHRlci1jb2xvciAgIDogJGdyaWQtYmFja2dyb3VuZC1ndXR0ZXItY29sb3Jcbikge1xuICAkY29udGV4dDogKCRjb2x1bW4gKiAkdG90YWwpICsgKCRndXR0ZXIgKiAoJHRvdGFsIC0gMSkgKyAoJG9mZnNldCAqIDIpKTtcbiAgJG9mZnNldDogJG9mZnNldCAvICRjb250ZXh0ICogMTAwJTtcbiAgJGNvbHVtbjogJGNvbHVtbiAvICRjb250ZXh0ICogMTAwJTtcbiAgJGd1dHRlcjogJGd1dHRlciAvICRjb250ZXh0ICogMTAwJTtcblxuICAvLyByZXR1cm4gdGhlIGhvcml6b250YWwgZ3JpZCBhcyBhIHNldCBvZiBjb2xvci1zdG9wc1xuICAkZ3JpZDogYnVpbGQtZ3JpZC1iYWNrZ3JvdW5kKCR0b3RhbCwkY29sdW1uLCRndXR0ZXIsJG9mZnNldCwkY29sdW1uLWNvbG9yLCRndXR0ZXItY29sb3IpO1xuICBAcmV0dXJuICRncmlkO1xufVxuXG5cbi8vIEFkZCBqdXN0IHRoZSBiYXNlbGluZSBncmlkIHRvIGFuIGVsZW1lbnQncyBiYWNrZ3JvdW5kXG5AbWl4aW4gYmFzZWxpbmUtZ3JpZC1iYWNrZ3JvdW5kKFxuICAkYmFzZWxpbmUgOiAkZ3JpZC1iYWNrZ3JvdW5kLWJhc2VsaW5lLWhlaWdodCxcbiAgJGNvbG9yICAgIDogJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvclxuKSB7XG4gIEBpZiAkc2hvdy1ncmlkLWJhY2tncm91bmRzIGFuZCAkc2hvdy1iYXNlbGluZS1ncmlkLWJhY2tncm91bmRzIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWltYWdlKGdldC1iYXNlbGluZS1ncmFkaWVudCgkY29sb3IpKTtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXNpemUoMTAwJSAkYmFzZWxpbmUpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wO1xuICB9XG59XG5cbi8vIEFkZCBqdXN0IHRoZSBob3Jpem9udGFsIGdyaWQgdG8gYW4gZWxlbWVudCdzIGJhY2tncm91bmRcbkBtaXhpbiBjb2x1bW4tZ3JpZC1iYWNrZ3JvdW5kKFxuICAkdG90YWwgICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLXRvdGFsLWNvbHVtbnMsXG4gICRjb2x1bW4gICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtY29sdW1uLXdpZHRoLFxuICAkZ3V0dGVyICAgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci13aWR0aCxcbiAgJG9mZnNldCAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1vZmZzZXQsXG4gICRjb2x1bW4tY29sb3IgICA6ICRncmlkLWJhY2tncm91bmQtY29sdW1uLWNvbG9yLFxuICAkZ3V0dGVyLWNvbG9yICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci1jb2xvcixcbiAgJGZvcmNlLWZsdWlkICAgIDogJGdyaWQtYmFja2dyb3VuZC1mb3JjZS1mbHVpZFxuKSB7XG4gIEBpZiAkc2hvdy1ncmlkLWJhY2tncm91bmRzIGFuZCAkc2hvdy1jb2x1bW4tZ3JpZC1iYWNrZ3JvdW5kcyB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1pbWFnZShcbiAgICAgIGdldC1jb2x1bW4tZ3JhZGllbnQoJHRvdGFsLCRjb2x1bW4sJGd1dHRlciwkb2Zmc2V0LCRjb2x1bW4tY29sb3IsJGd1dHRlci1jb2xvciwgJGZvcmNlLWZsdWlkKVxuICAgICk7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7XG4gIH1cbn1cblxuLy8gQWRkIGJvdGggaG9yaXpvbnRhbCBhbmQgYmFzZWxpbmUgZ3JpZHMgdG8gYW4gZWxlbWVudCdzIGJhY2tncm91bmRcbkBtaXhpbiBncmlkLWJhY2tncm91bmQoXG4gICR0b3RhbCAgICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtdG90YWwtY29sdW1ucyxcbiAgJGNvbHVtbiAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1jb2x1bW4td2lkdGgsXG4gICRndXR0ZXIgICAgICAgICA6ICRncmlkLWJhY2tncm91bmQtZ3V0dGVyLXdpZHRoLFxuICAkYmFzZWxpbmUgICAgICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWJhc2VsaW5lLWhlaWdodCxcbiAgJG9mZnNldCAgICAgICAgIDogJGdyaWQtYmFja2dyb3VuZC1vZmZzZXQsXG4gICRjb2x1bW4tY29sb3IgICA6ICRncmlkLWJhY2tncm91bmQtY29sdW1uLWNvbG9yLFxuICAkZ3V0dGVyLWNvbG9yICAgOiAkZ3JpZC1iYWNrZ3JvdW5kLWd1dHRlci1jb2xvcixcbiAgJGJhc2VsaW5lLWNvbG9yIDogJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvcixcbiAgJGZvcmNlLWZsdWlkICAgIDogJGdyaWQtYmFja2dyb3VuZC1mb3JjZS1mbHVpZFxuKSB7XG4gIEBpZiAkc2hvdy1ncmlkLWJhY2tncm91bmRzIHtcbiAgICBAaWYgJHNob3ctYmFzZWxpbmUtZ3JpZC1iYWNrZ3JvdW5kcyBhbmQgJHNob3ctY29sdW1uLWdyaWQtYmFja2dyb3VuZHMge1xuICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZC1pbWFnZShcbiAgICAgICAgZ2V0LWJhc2VsaW5lLWdyYWRpZW50KCRiYXNlbGluZS1jb2xvciksXG4gICAgICAgIGdldC1jb2x1bW4tZ3JhZGllbnQoJHRvdGFsLCRjb2x1bW4sJGd1dHRlciwkb2Zmc2V0LCRjb2x1bW4tY29sb3IsJGd1dHRlci1jb2xvciwgJGZvcmNlLWZsdWlkKVxuICAgICAgKTtcbiAgICAgIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZSgxMDAlICRiYXNlbGluZSwgYXV0byk7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpbmNsdWRlIGJhc2VsaW5lLWdyaWQtYmFja2dyb3VuZCgkYmFzZWxpbmUsICRiYXNlbGluZS1jb2xvcik7XG4gICAgICBAaW5jbHVkZSBjb2x1bW4tZ3JpZC1iYWNrZ3JvdW5kKCR0b3RhbCwkY29sdW1uLCRndXR0ZXIsJG9mZnNldCwkY29sdW1uLWNvbG9yLCRndXR0ZXItY29sb3IsICRmb3JjZS1mbHVpZCk7XG4gICAgfVxuICB9XG59XG4iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5AaW1wb3J0IFwiLi4vdXRpbGl0aWVzL2dlbmVyYWwvaGFja3NcIjtcbkBpbXBvcnQgXCIuLi9mdW5jdGlvbnNcIjtcblxuLy8gQmFja2dyb3VuZCBwcm9wZXJ0eSBzdXBwb3J0IGZvciB2ZW5kb3IgcHJlZml4aW5nIHdpdGhpbiB2YWx1ZXMuXG5AbWl4aW4gYmFja2dyb3VuZChcbiAgJGJhY2tncm91bmQtMSxcbiAgJGJhY2tncm91bmQtMjogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTM6IGZhbHNlLFxuICAkYmFja2dyb3VuZC00OiBmYWxzZSxcbiAgJGJhY2tncm91bmQtNTogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTY6IGZhbHNlLFxuICAkYmFja2dyb3VuZC03OiBmYWxzZSxcbiAgJGJhY2tncm91bmQtODogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTk6IGZhbHNlLFxuICAkYmFja2dyb3VuZC0xMDogZmFsc2Vcbikge1xuICAkYmFja2dyb3VuZHM6IGNvbXBhY3QoJGJhY2tncm91bmQtMSwgJGJhY2tncm91bmQtMiwgJGJhY2tncm91bmQtMywgJGJhY2tncm91bmQtNCwgJGJhY2tncm91bmQtNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRiYWNrZ3JvdW5kLTYsICRiYWNrZ3JvdW5kLTcsICRiYWNrZ3JvdW5kLTgsICRiYWNrZ3JvdW5kLTksICRiYWNrZ3JvdW5kLTEwKTtcbiAgJG11bHQtYmdzOiAtY29tcGFzcy1saXN0LXNpemUoJGJhY2tncm91bmRzKSA+IDE7XG4gICRhZGQtcGllLWJnOiBwcmVmaXhlZCgtcGllLCAgICRiYWNrZ3JvdW5kcykgb3IgJG11bHQtYmdzO1xuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1zdmcgICAgICAgICAgYW5kIHByZWZpeGVkKC1zdmcsICAgICRiYWNrZ3JvdW5kcykgeyAgICAgIGJhY2tncm91bmQ6ICAgIC1zdmcoJGJhY2tncm91bmRzKTsgfVxuICBAaWYgJHN1cHBvcnQtZm9yLW9yaWdpbmFsLXdlYmtpdC1ncmFkaWVudHMgYW5kIHByZWZpeGVkKC1vd2csICAgICRiYWNrZ3JvdW5kcykgeyAgICAgIGJhY2tncm91bmQ6ICAgIC1vd2coJGJhY2tncm91bmRzKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgICAgYW5kIHByZWZpeGVkKC13ZWJraXQsICRiYWNrZ3JvdW5kcykgeyAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQoJGJhY2tncm91bmRzKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhICAgICAgYW5kIHByZWZpeGVkKC1tb3osICAgICRiYWNrZ3JvdW5kcykgeyAgICAgIGJhY2tncm91bmQ6ICAgIC1tb3ooJGJhY2tncm91bmRzKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgICAgYW5kIHByZWZpeGVkKC1vLCAgICAgICRiYWNrZ3JvdW5kcykgeyAgICAgIGJhY2tncm91bmQ6ICAgICAgLW8oJGJhY2tncm91bmRzKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1waWUgICAgICAgICAgYW5kICRhZGQtcGllLWJnICAgICAgICAgICAgICAgICAgICAgeyAtcGllLWJhY2tncm91bmQ6ICAgIC1waWUoJGJhY2tncm91bmRzKTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICAgICAgICAgJGJhY2tncm91bmRzIDtcbn1cblxuQG1peGluIGJhY2tncm91bmQtd2l0aC1jc3MyLWZhbGxiYWNrKFxuICAkYmFja2dyb3VuZC0xLFxuICAkYmFja2dyb3VuZC0yOiBmYWxzZSxcbiAgJGJhY2tncm91bmQtMzogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTQ6IGZhbHNlLFxuICAkYmFja2dyb3VuZC01OiBmYWxzZSxcbiAgJGJhY2tncm91bmQtNjogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTc6IGZhbHNlLFxuICAkYmFja2dyb3VuZC04OiBmYWxzZSxcbiAgJGJhY2tncm91bmQtOTogZmFsc2UsXG4gICRiYWNrZ3JvdW5kLTEwOiBmYWxzZVxuKSB7XG4gICRiYWNrZ3JvdW5kczogY29tcGFjdCgkYmFja2dyb3VuZC0xLCAkYmFja2dyb3VuZC0yLCAkYmFja2dyb3VuZC0zLCAkYmFja2dyb3VuZC00LCAkYmFja2dyb3VuZC01LFxuICAgICAgICAgICAgICAgICAgICAgICAgJGJhY2tncm91bmQtNiwgJGJhY2tncm91bmQtNywgJGJhY2tncm91bmQtOCwgJGJhY2tncm91bmQtOSwgJGJhY2tncm91bmQtMTApO1xuICAkbXVsdC1iZ3M6IC1jb21wYXNzLWxpc3Qtc2l6ZSgkYmFja2dyb3VuZHMpID4gMTtcbiAgJHNpbXBsZS1iYWNrZ3JvdW5kOiBpZigkbXVsdC1iZ3Mgb3IgcHJlZml4ZWQoLWNzczIsICRiYWNrZ3JvdW5kcyksIC1jc3MyKC1jb21wYXNzLW50aCgkYmFja2dyb3VuZHMsIGxhc3QpKSwgZmFsc2UpO1xuICBAaWYgbm90KGJsYW5rKCRzaW1wbGUtYmFja2dyb3VuZCkpIHsgYmFja2dyb3VuZDogJHNpbXBsZS1iYWNrZ3JvdW5kOyB9XG4gIEBpbmNsdWRlIGJhY2tncm91bmQoJGJhY2tncm91bmQtMSwgJGJhY2tncm91bmQtMiwgJGJhY2tncm91bmQtMywgJGJhY2tncm91bmQtNCwgJGJhY2tncm91bmQtNSxcbiAgICAgICAgICAgICAgICAgICAgICAkYmFja2dyb3VuZC02LCAkYmFja2dyb3VuZC03LCAkYmFja2dyb3VuZC04LCAkYmFja2dyb3VuZC05LCAkYmFja2dyb3VuZC0xMCk7XG59XG5cblxuLy8gQmFja2dyb3VuZCBpbWFnZSBwcm9wZXJ0eSBzdXBwb3J0IGZvciB2ZW5kb3IgcHJlZml4aW5nIHdpdGhpbiB2YWx1ZXMuXG5AbWl4aW4gYmFja2dyb3VuZC1pbWFnZShcbiAgJGltYWdlLTEsXG4gICRpbWFnZS0yOiBmYWxzZSxcbiAgJGltYWdlLTM6IGZhbHNlLFxuICAkaW1hZ2UtNDogZmFsc2UsXG4gICRpbWFnZS01OiBmYWxzZSxcbiAgJGltYWdlLTY6IGZhbHNlLFxuICAkaW1hZ2UtNzogZmFsc2UsXG4gICRpbWFnZS04OiBmYWxzZSxcbiAgJGltYWdlLTk6IGZhbHNlLFxuICAkaW1hZ2UtMTA6IGZhbHNlXG4pIHtcbiAgJGltYWdlczogY29tcGFjdCgkaW1hZ2UtMSwgJGltYWdlLTIsICRpbWFnZS0zLCAkaW1hZ2UtNCwgJGltYWdlLTUsICRpbWFnZS02LCAkaW1hZ2UtNywgJGltYWdlLTgsICRpbWFnZS05LCAkaW1hZ2UtMTApO1xuICAkYWRkLXBpZS1iZzogcHJlZml4ZWQoLXBpZSwgICAkaW1hZ2VzKSBvciAtY29tcGFzcy1saXN0LXNpemUoJGltYWdlcykgPiAxO1xuXG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXN2ZyAgICAgICAgICBhbmQgcHJlZml4ZWQoLXN2ZywgICAgJGltYWdlcykgeyBiYWNrZ3JvdW5kLWltYWdlOiAgICAtc3ZnKCRpbWFnZXMpOyBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7IH1cbiAgQGlmICRzdXBwb3J0LWZvci1vcmlnaW5hbC13ZWJraXQtZ3JhZGllbnRzIGFuZCBwcmVmaXhlZCgtb3dnLCAgICAkaW1hZ2VzKSB7IGJhY2tncm91bmQtaW1hZ2U6ICAgIC1vd2coJGltYWdlcyk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0ICAgICAgIGFuZCBwcmVmaXhlZCgtd2Via2l0LCAkaW1hZ2VzKSB7IGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQoJGltYWdlcyk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgICAgIGFuZCBwcmVmaXhlZCgtbW96LCAgICAkaW1hZ2VzKSB7IGJhY2tncm91bmQtaW1hZ2U6ICAgIC1tb3ooJGltYWdlcyk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgICAgIGFuZCBwcmVmaXhlZCgtbywgICAgICAkaW1hZ2VzKSB7IGJhY2tncm91bmQtaW1hZ2U6ICAgICAgLW8oJGltYWdlcyk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItcGllICAgICAgICAgIGFuZCAkYWRkLXBpZS1iZyAgICAgICAgICAgICAgICB7IEB3YXJuIFwiUElFIGRvZXMgbm90IHN1cHBvcnQgYmFja2dyb3VuZC1pbWFnZS4gVXNlIEBpbmNsdWRlIGJhY2tncm91bmQoI3skaW1hZ2VzfSkgaW5zdGVhZC5cIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAgICAgICAgICRpbWFnZXMgO1xufVxuXG4vLyBFbWl0IGEgSUUtU3BlY2lmaWMgZmlsdGVycyB0aGF0IHJlbmRlcnMgYSBzaW1wbGUgbGluZWFyIGdyYWRpZW50LlxuLy8gRm9yIHVzZSBpbiBJRSA2IC0gOC4gQmVzdCBwcmFjdGljZSB3b3VsZCBoYXZlIHlvdSBhcHBseSB0aGlzIHZpYSBhXG4vLyBjb25kaXRpb25hbCBJRSBzdHlsZXNoZWV0LCBidXQgaWYgeW91IG11c3QsIHlvdSBzaG91bGQgcGxhY2UgdGhpcyBiZWZvcmVcbi8vIGFueSBiYWNrZ3JvdW5kLWltYWdlIHByb3BlcnRpZXMgdGhhdCB5b3UgaGF2ZSBzcGVjaWZpZWQuXG4vL1xuLy8gRm9yIHRoZSBgJG9yaWVudGF0aW9uYCBwYXJhbWV0ZXIsIHlvdSBjYW4gcGFzcyBgdmVydGljYWxgIG9yIGBob3Jpem9udGFsYC5cbkBtaXhpbiBmaWx0ZXItZ3JhZGllbnQoJHN0YXJ0LWNvbG9yLCAkZW5kLWNvbG9yLCAkb3JpZW50YXRpb246IHZlcnRpY2FsKSB7XG4gIEBpbmNsdWRlIGhhcy1sYXlvdXQ7XG4gICRncmFkaWVudC10eXBlOiBpZigkb3JpZW50YXRpb24gPT0gdmVydGljYWwsIDAsIDEpO1xuICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTYgb3IgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTcgb3IgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTgge1xuICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGdyYWRpZW50VHlwZT0jeyRncmFkaWVudC10eXBlfSwgc3RhcnRDb2xvcnN0cj0nI3tpZS1oZXgtc3RyKCRzdGFydC1jb2xvcil9JywgZW5kQ29sb3JzdHI9JyN7aWUtaGV4LXN0cigkZW5kLWNvbG9yKX0nKTtcbiAgfVxufVxuXG5cbi8vIEJvcmRlciBpbWFnZSBwcm9wZXJ0eSBzdXBwb3J0IGZvciB2ZW5kb3IgcHJlZml4aW5nIHByb3BlcnRpZXMgYW5kIHZhbHVlcy5cbkBtaXhpbiBib3JkZXItaW1hZ2UoJHZhbHVlKSB7XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICAgICB7ICAgIC1tb3otYm9yZGVyLWltYWdlOiAgICAtbW96KHJlamVjdCgtY29tcGFzcy1saXN0KCR2YWx1ZSksIGZpbGwpKTsgfVxuICBAaWYgJHN1cHBvcnQtZm9yLW9yaWdpbmFsLXdlYmtpdC1ncmFkaWVudHMgeyAtd2Via2l0LWJvcmRlci1pbWFnZTogICAgLW93ZyhyZWplY3QoLWNvbXBhc3MtbGlzdCgkdmFsdWUpLCBmaWxsKSk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0ICAgICAgIHsgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IC13ZWJraXQocmVqZWN0KC1jb21wYXNzLWxpc3QoJHZhbHVlKSwgZmlsbCkpOyB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICAgICB7ICAgICAgLW8tYm9yZGVyLWltYWdlOiAgICAgIC1vKHJlamVjdCgtY29tcGFzcy1saXN0KCR2YWx1ZSksIGZpbGwpKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1zdmcgICAgICAgICAgeyAgICAgICAgIGJvcmRlci1pbWFnZTogICAgLXN2ZyhyZWplY3QoLWNvbXBhc3MtbGlzdCgkdmFsdWUpLCBmaWxsKSk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItaW1hZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlO1xufVxuXG4vLyBMaXN0IHN0eWxlIGltYWdlIHByb3BlcnR5IHN1cHBvcnQgZm9yIHZlbmRvciBwcmVmaXhpbmcgd2l0aGluIHZhbHVlcy5cbkBtaXhpbiBsaXN0LXN0eWxlLWltYWdlKCRpbWFnZSkge1xuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhICAgICAgYW5kIHByZWZpeGVkKC1tb3osICAgICRpbWFnZSkgeyBsaXN0LXN0eWxlLWltYWdlOiAgICAtbW96KCRpbWFnZSk7IH1cbiAgQGlmICRzdXBwb3J0LWZvci1vcmlnaW5hbC13ZWJraXQtZ3JhZGllbnRzIGFuZCBwcmVmaXhlZCgtb3dnLCAgICAkaW1hZ2UpIHsgbGlzdC1zdHlsZS1pbWFnZTogICAgLW93ZygkaW1hZ2UpOyB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICAgICBhbmQgcHJlZml4ZWQoLXdlYmtpdCwgJGltYWdlKSB7IGxpc3Qtc3R5bGUtaW1hZ2U6IC13ZWJraXQoJGltYWdlKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgICAgYW5kIHByZWZpeGVkKC1vLCAgICAgICRpbWFnZSkgeyBsaXN0LXN0eWxlLWltYWdlOiAgICAgIC1vKCRpbWFnZSk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itc3ZnICAgICAgICAgIGFuZCBwcmVmaXhlZCgtc3ZnLCAgICAkaW1hZ2UpIHsgbGlzdC1zdHlsZS1pbWFnZTogICAgLXN2ZygkaW1hZ2UpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGUtaW1hZ2U6ICAgICAgICAgJGltYWdlIDtcbn1cblxuLy8gTGlzdCBzdHlsZSBwcm9wZXJ0eSBzdXBwb3J0IGZvciB2ZW5kb3IgcHJlZml4aW5nIHdpdGhpbiB2YWx1ZXMuXG5AbWl4aW4gbGlzdC1zdHlsZSgkdmFsdWUpIHtcbiAgJHZhbHVlOiAtY29tcGFzcy1saXN0KCR2YWx1ZSk7XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICAgICBhbmQgcHJlZml4ZWQoLW1veiwgICAgJHZhbHVlKSB7IGxpc3Qtc3R5bGUtaW1hZ2U6ICAgIC1tb3ooJHZhbHVlKTsgfVxuICBAaWYgJHN1cHBvcnQtZm9yLW9yaWdpbmFsLXdlYmtpdC1ncmFkaWVudHMgYW5kIHByZWZpeGVkKC1vd2csICAgICR2YWx1ZSkgeyBsaXN0LXN0eWxlLWltYWdlOiAgICAtb3dnKCR2YWx1ZSk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0ICAgICAgIGFuZCBwcmVmaXhlZCgtd2Via2l0LCAkdmFsdWUpIHsgbGlzdC1zdHlsZS1pbWFnZTogLXdlYmtpdCgkdmFsdWUpOyB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICAgICBhbmQgcHJlZml4ZWQoLW8sICAgICAgJHZhbHVlKSB7IGxpc3Qtc3R5bGUtaW1hZ2U6ICAgICAgLW8oJHZhbHVlKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1zdmcgICAgICAgICAgYW5kIHByZWZpeGVkKC1zdmcsICAgICR2YWx1ZSkgeyBsaXN0LXN0eWxlLWltYWdlOiAgICAtc3ZnKCR2YWx1ZSk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC1zdHlsZS1pbWFnZTogICAgICAgICAkdmFsdWUgO1xufVxuXG4vLyBjb250ZW50IHByb3BlcnR5IHN1cHBvcnQgZm9yIHZlbmRvciBwcmVmaXhpbmcgd2l0aGluIHZhbHVlcy5cbkBtaXhpbiBjb250ZW50KCR2YWx1ZSkge1xuICAkdmFsdWU6IC1jb21wYXNzLWxpc3QoJHZhbHVlKTtcbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgICAgIGFuZCBwcmVmaXhlZCgtbW96LCAgICAkdmFsdWUpIHsgY29udGVudDogICAgLW1veigkdmFsdWUpOyB9XG4gIEBpZiAkc3VwcG9ydC1mb3Itb3JpZ2luYWwtd2Via2l0LWdyYWRpZW50cyBhbmQgcHJlZml4ZWQoLW93ZywgICAgJHZhbHVlKSB7IGNvbnRlbnQ6ICAgIC1vd2coJHZhbHVlKTsgfVxuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgICAgYW5kIHByZWZpeGVkKC13ZWJraXQsICR2YWx1ZSkgeyBjb250ZW50OiAtd2Via2l0KCR2YWx1ZSk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgICAgIGFuZCBwcmVmaXhlZCgtbywgICAgICAkdmFsdWUpIHsgY29udGVudDogICAgICAtbygkdmFsdWUpOyB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXN2ZyAgICAgICAgICBhbmQgcHJlZml4ZWQoLXN2ZywgICAgJHZhbHVlKSB7IGNvbnRlbnQ6ICAgIC1zdmcoJHZhbHVlKTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAgICAgICAgICR2YWx1ZSA7XG59XG4iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vICBvdmVycmlkZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHRcbiRkZWZhdWx0LWJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvICFkZWZhdWx0O1xuXG4vLyBTZXQgdGhlIHNpemUgb2YgYmFja2dyb3VuZCBpbWFnZXMgdXNpbmcgcHgsIHdpZHRoIGFuZCBoZWlnaHQsIG9yIHBlcmNlbnRhZ2VzLlxuLy8gQ3VycmVudGx5IHN1cHBvcnRlZCBpbjogT3BlcmEsIEdlY2tvLCBXZWJraXQuXG4vL1xuLy8gKiBwZXJjZW50YWdlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJhY2tncm91bmQtb3JpZ2luIChkZWZhdWx0ID0gcGFkZGluZy1ib3gpXG4vLyAqIG1peGluIGRlZmF1bHRzIHRvOiBgJGRlZmF1bHQtYmFja2dyb3VuZC1zaXplYFxuQG1peGluIGJhY2tncm91bmQtc2l6ZShcbiAgJHNpemUtMTogJGRlZmF1bHQtYmFja2dyb3VuZC1zaXplLFxuICAkc2l6ZS0yOiBmYWxzZSxcbiAgJHNpemUtMzogZmFsc2UsXG4gICRzaXplLTQ6IGZhbHNlLFxuICAkc2l6ZS01OiBmYWxzZSxcbiAgJHNpemUtNjogZmFsc2UsXG4gICRzaXplLTc6IGZhbHNlLFxuICAkc2l6ZS04OiBmYWxzZSxcbiAgJHNpemUtOTogZmFsc2UsXG4gICRzaXplLTEwOiBmYWxzZVxuKSB7XG4gICRzaXplLTE6IGlmKHR5cGUtb2YoJHNpemUtMSkgPT0gc3RyaW5nLCB1bnF1b3RlKCRzaXplLTEpLCAkc2l6ZS0xKTtcbiAgJHNpemVzOiBjb21wYWN0KCRzaXplLTEsICRzaXplLTIsICRzaXplLTMsICRzaXplLTQsICRzaXplLTUsICRzaXplLTYsICRzaXplLTcsICRzaXplLTgsICRzaXplLTksICRzaXplLTEwKTtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGJhY2tncm91bmQtc2l6ZSwgJHNpemVzLCAtbW96LCAtd2Via2l0LCAtbywgbm90KC1tcyksIG5vdCgta2h0bWwpKTtcbn1cbiIsIkBpbXBvcnQgXCJjc3MzL2JvcmRlci1yYWRpdXNcIjtcbkBpbXBvcnQgXCJjc3MzL2lubGluZS1ibG9ja1wiO1xuQGltcG9ydCBcImNzczMvb3BhY2l0eVwiO1xuQGltcG9ydCBcImNzczMvYm94LXNoYWRvd1wiO1xuQGltcG9ydCBcImNzczMvdGV4dC1zaGFkb3dcIjtcbkBpbXBvcnQgXCJjc3MzL2NvbHVtbnNcIjtcbkBpbXBvcnQgXCJjc3MzL2JveC1zaXppbmdcIjtcbkBpbXBvcnQgXCJjc3MzL2JveFwiO1xuQGltcG9ydCBcImNzczMvaW1hZ2VzXCI7XG5AaW1wb3J0IFwiY3NzMy9iYWNrZ3JvdW5kLWNsaXBcIjtcbkBpbXBvcnQgXCJjc3MzL2JhY2tncm91bmQtb3JpZ2luXCI7XG5AaW1wb3J0IFwiY3NzMy9iYWNrZ3JvdW5kLXNpemVcIjtcbkBpbXBvcnQgXCJjc3MzL2ZvbnQtZmFjZVwiO1xuQGltcG9ydCBcImNzczMvdHJhbnNmb3JtXCI7XG5AaW1wb3J0IFwiY3NzMy90cmFuc2l0aW9uXCI7XG5AaW1wb3J0IFwiY3NzMy9hcHBlYXJhbmNlXCI7XG5AaW1wb3J0IFwiY3NzMy9yZWdpb25zXCI7XG5AaW1wb3J0IFwiY3NzMy9oeXBoZW5hdGlvblwiO1xuQGltcG9ydCBcImNzczMvZmlsdGVyXCI7XG5AaW1wb3J0IFwiY3NzMy9waWVcIjtcbkBpbXBvcnQgXCJjc3MzL3VzZXItaW50ZXJmYWNlXCI7XG5AaW1wb3J0IFwiY3NzMy9mbGV4Ym94XCI7IiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4kZGVmYXVsdC1ib3JkZXItcmFkaXVzOiA1cHggIWRlZmF1bHQ7XG5cbi8vIFJvdW5kIGFsbCBjb3JuZXJzIGJ5IGEgc3BlY2lmaWMgYW1vdW50LCBkZWZhdWx0cyB0byB2YWx1ZSBvZiBgJGRlZmF1bHQtYm9yZGVyLXJhZGl1c2AuXG4vL1xuLy8gV2hlbiB0d28gdmFsdWVzIGFyZSBwYXNzZWQsIHRoZSBmaXJzdCBpcyB0aGUgaG9yaXpvbnRhbCByYWRpdXNcbi8vIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSB2ZXJ0aWNhbCByYWRpdXMuXG4vL1xuLy8gTm90ZTogd2Via2l0IGRvZXMgbm90IHN1cHBvcnQgc2hvcnRoYW5kIHN5bnRheCBmb3Igc2V2ZXJhbCBjb3JuZXJzIGF0IG9uY2UuXG4vLyBTbyBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgcGFzcyBzZXZlcmFsIHZhbHVlcyBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIHBhc3NlZCB0byB3ZWJraXQuXG4vL1xuLy8gRXhhbXBsZXM6XG4vL1xuLy8gICAgIC5zaW1wbGUgICB7IEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNHB4LCA0cHgpOyB9XG4vLyAgICAgLmNvbXBvdW5kIHsgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygycHggNXB4LCAzcHggNnB4KTsgfVxuLy8gICAgIC5jcmF6eSAgICB7IEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMXB4IDNweCA1cHggN3B4LCAycHggNHB4IDZweCA4cHgpfVxuLy9cbi8vIFdoaWNoIGdlbmVyYXRlczpcbi8vXG4vLyAgICAuc2ltcGxlIHtcbi8vICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggNHB4O1xuLy8gICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweCAvIDRweDtcbi8vICAgICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDRweCAvIDRweDtcbi8vICAgICAgYm9yZGVyLXJhZGl1czogNHB4IC8gNHB4OyB9XG4vLyAgICBcbi8vICAgIC5jb21wb3VuZCB7XG4vLyAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4IDNweDtcbi8vICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAycHggNXB4IC8gM3B4IDZweDtcbi8vICAgICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IDJweCA1cHggLyAzcHggNnB4O1xuLy8gICAgICBib3JkZXItcmFkaXVzOiAycHggNXB4IC8gM3B4IDZweDsgfVxuLy8gICAgXG4vLyAgICAuY3Jhenkge1xuLy8gICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDFweCAycHg7XG4vLyAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogMXB4IDNweCA1cHggN3B4IC8gMnB4IDRweCA2cHggOHB4O1xuLy8gICAgICAta2h0bWwtYm9yZGVyLXJhZGl1czogMXB4IDNweCA1cHggN3B4IC8gMnB4IDRweCA2cHggOHB4O1xuLy8gICAgICBib3JkZXItcmFkaXVzOiAxcHggM3B4IDVweCA3cHggLyAycHggNHB4IDZweCA4cHg7IH1cblxuQG1peGluIGJvcmRlci1yYWRpdXMoJHJhZGl1czogJGRlZmF1bHQtYm9yZGVyLXJhZGl1cywgJHZlcnRpY2FsLXJhZGl1czogZmFsc2UpIHtcblxuICBAaWYgJHZlcnRpY2FsLXJhZGl1cyB7XG4gICAgLy8gV2Via2l0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgb2ZmaWNpYWwgc2hvcnRoYW5kIHN5bnRheCBmb3Igc3BlY2lmeWluZ1xuICAgIC8vIGEgdmVydGljYWwgcmFkaXVzIHVubGVzcyBzbyBpbiBjYXNlIHRoZXJlJ3Mgc2V2ZXJhbCB3ZSBvbmx5IHRha2UgdGhlIGZpcnN0LlxuICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChib3JkZXItcmFkaXVzLCBmaXJzdC12YWx1ZS1vZigkcmFkaXVzKSBmaXJzdC12YWx1ZS1vZigkdmVydGljYWwtcmFkaXVzKSxcbiAgICAgIG5vdCgtbW96KSxcbiAgICAgIC13ZWJraXQsXG4gICAgICBub3QoLW8pLFxuICAgICAgbm90KC1tcyksXG4gICAgICBub3QoLWtodG1sKSxcbiAgICAgIG5vdChvZmZpY2lhbClcbiAgICApO1xuICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChcImJvcmRlci1yYWRpdXNcIiwgJHJhZGl1cyB1bnF1b3RlKFwiL1wiKSAkdmVydGljYWwtcmFkaXVzLFxuICAgICAgLW1veixcbiAgICAgIG5vdCgtd2Via2l0KSxcbiAgICAgIG5vdCgtbyksXG4gICAgICBub3QoLW1zKSxcbiAgICAgIC1raHRtbCxcbiAgICAgIG9mZmljaWFsXG4gICAgKTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGJvcmRlci1yYWRpdXMsICRyYWRpdXMpO1xuICB9XG59XG5cbi8vIFJvdW5kIHJhZGl1cyBhdCBwb3NpdGlvbiBieSBhbW91bnQuXG4vL1xuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yIGAkdmVydGA6IGB0b3BgLCBgYm90dG9tYFxuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yIGAkaG9yemA6IGBsZWZ0YCwgYHJpZ2h0YFxuXG5AbWl4aW4gYm9yZGVyLWNvcm5lci1yYWRpdXMoJHZlcnQsICRob3J6LCAkcmFkaXVzOiAkZGVmYXVsdC1ib3JkZXItcmFkaXVzKSB7XG4gIC8vIFN1cHBvcnQgZm9yIG1vemlsbGEncyBzeW50YXggZm9yIHNwZWNpZnlpbmcgYSBjb3JuZXJcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKFwiYm9yZGVyLXJhZGl1cy0jeyR2ZXJ0fSN7JGhvcnp9XCIsICRyYWRpdXMsXG4gICAgLW1veixcbiAgICBub3QoLXdlYmtpdCksXG4gICAgbm90KC1vKSxcbiAgICBub3QoLW1zKSxcbiAgICBub3QoLWtodG1sKSxcbiAgICBub3Qob2ZmaWNpYWwpXG4gICk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChcImJvcmRlci0jeyR2ZXJ0fS0jeyRob3J6fS1yYWRpdXNcIiwgJHJhZGl1cyxcbiAgICBub3QoLW1veiksXG4gICAgLXdlYmtpdCxcbiAgICBub3QoLW8pLFxuICAgIG5vdCgtbXMpLFxuICAgIC1raHRtbCxcbiAgICBvZmZpY2lhbFxuICApO1xuICBcbn1cblxuLy8gUm91bmQgdG9wLWxlZnQgY29ybmVyIG9ubHlcblxuQG1peGluIGJvcmRlci10b3AtbGVmdC1yYWRpdXMoJHJhZGl1czogJGRlZmF1bHQtYm9yZGVyLXJhZGl1cykge1xuICBAaW5jbHVkZSBib3JkZXItY29ybmVyLXJhZGl1cyh0b3AsIGxlZnQsICRyYWRpdXMpOyB9XG5cbi8vIFJvdW5kIHRvcC1yaWdodCBjb3JuZXIgb25seVxuXG5AbWl4aW4gYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMoJHJhZGl1czogJGRlZmF1bHQtYm9yZGVyLXJhZGl1cykge1xuICBAaW5jbHVkZSBib3JkZXItY29ybmVyLXJhZGl1cyh0b3AsIHJpZ2h0LCAkcmFkaXVzKTsgfVxuXG4vLyBSb3VuZCBib3R0b20tbGVmdCBjb3JuZXIgb25seVxuXG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cygkcmFkaXVzOiAkZGVmYXVsdC1ib3JkZXItcmFkaXVzKSB7XG4gIEBpbmNsdWRlIGJvcmRlci1jb3JuZXItcmFkaXVzKGJvdHRvbSwgbGVmdCwgJHJhZGl1cyk7IH1cblxuLy8gUm91bmQgYm90dG9tLXJpZ2h0IGNvcm5lciBvbmx5XG5cbkBtaXhpbiBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cygkcmFkaXVzOiAkZGVmYXVsdC1ib3JkZXItcmFkaXVzKSB7XG4gIEBpbmNsdWRlIGJvcmRlci1jb3JuZXItcmFkaXVzKGJvdHRvbSwgcmlnaHQsICRyYWRpdXMpOyB9XG5cbi8vIFJvdW5kIGJvdGggdG9wIGNvcm5lcnMgYnkgYW1vdW50XG5AbWl4aW4gYm9yZGVyLXRvcC1yYWRpdXMoJHJhZGl1czogJGRlZmF1bHQtYm9yZGVyLXJhZGl1cykge1xuICBAaW5jbHVkZSBib3JkZXItdG9wLWxlZnQtcmFkaXVzKCRyYWRpdXMpO1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJpZ2h0LXJhZGl1cygkcmFkaXVzKTsgfVxuXG4vLyBSb3VuZCBib3RoIHJpZ2h0IGNvcm5lcnMgYnkgYW1vdW50XG5AbWl4aW4gYm9yZGVyLXJpZ2h0LXJhZGl1cygkcmFkaXVzOiAkZGVmYXVsdC1ib3JkZXItcmFkaXVzKSB7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzKCRyYWRpdXMpO1xuICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cygkcmFkaXVzKTsgfVxuXG4vLyBSb3VuZCBib3RoIGJvdHRvbSBjb3JuZXJzIGJ5IGFtb3VudFxuQG1peGluIGJvcmRlci1ib3R0b20tcmFkaXVzKCRyYWRpdXM6ICRkZWZhdWx0LWJvcmRlci1yYWRpdXMpIHtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cygkcmFkaXVzKTtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMoJHJhZGl1cyk7IH1cblxuLy8gUm91bmQgYm90aCBsZWZ0IGNvcm5lcnMgYnkgYW1vdW50XG5AbWl4aW4gYm9yZGVyLWxlZnQtcmFkaXVzKCRyYWRpdXM6ICRkZWZhdWx0LWJvcmRlci1yYWRpdXMpIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cygkcmFkaXVzKTtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cygkcmFkaXVzKTsgfVxuIiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBQcm92aWRlcyBjcm9zcy1icm93c2VyIENTUyBvcGFjaXR5LiBUYWtlcyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgYXMgdGhlIGFyZ3VtZW50LCBlLmcuIDAuNSBmb3IgNTAlIG9wYWNpdHkuXG4vL1xuLy8gICAgIEBwYXJhbSAkb3BhY2l0eVxuLy8gICAgICAgICBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEsIHdoZXJlIDAgaXMgdHJhbnNwYXJlbnQgYW5kIDEgaXMgb3BhcXVlLlxuXG5AbWl4aW4gb3BhY2l0eSgkb3BhY2l0eSkge1xuICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTYgb3IgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTcgb3IgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTgge1xuICAgIGZpbHRlcjogdW5xdW90ZShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PSN7cm91bmQoJG9wYWNpdHkgKiAxMDApfSlcIik7XG4gIH1cbiAgb3BhY2l0eTogJG9wYWNpdHk7XG59XG5cbi8vIE1ha2UgYW4gZWxlbWVudCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50LlxuQG1peGluIHRyYW5zcGFyZW50IHsgQGluY2x1ZGUgb3BhY2l0eSgwKTsgfVxuXG4vLyBNYWtlIGFuIGVsZW1lbnQgY29tcGxldGVseSBvcGFxdWUuXG5AbWl4aW4gb3BhcXVlIHsgQGluY2x1ZGUgb3BhY2l0eSgxKTsgfVxuIiwiLy8gQGRvYyBvZmZcbi8vIFRoZXNlIGRlZmF1bHRzIG1ha2UgdGhlIGFyZ3VtZW50cyBvcHRpb25hbCBmb3IgdGhpcyBtaXhpblxuLy8gSWYgeW91IGxpa2UsIHNldCBkaWZmZXJlbnQgZGVmYXVsdHMgYmVmb3JlIGltcG9ydGluZy5cbi8vIEBkb2Mgb25cblxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5cbi8vIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBib3ggc2hhZG93c1xuJGRlZmF1bHQtYm94LXNoYWRvdy1jb2xvcjogIzMzMzMzMyAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgaG9yaXpvbnRhbCBvZmZzZXQuIFBvc2l0aXZlIGlzIHRvIHRoZSByaWdodC5cbiRkZWZhdWx0LWJveC1zaGFkb3ctaC1vZmZzZXQ6IDBweCAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgdmVydGljYWwgb2Zmc2V0LiBQb3NpdGl2ZSBpcyBkb3duLlxuJGRlZmF1bHQtYm94LXNoYWRvdy12LW9mZnNldDogMHB4ICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBibHVyIGxlbmd0aC5cbiRkZWZhdWx0LWJveC1zaGFkb3ctYmx1cjogNXB4ICFkZWZhdWx0O1xuXG4vLyBUaGUgZGVmYXVsdCBzcHJlYWQgbGVuZ3RoLlxuJGRlZmF1bHQtYm94LXNoYWRvdy1zcHJlYWQgOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgc2hhZG93IGluc2V0OiBpbnNldCBvciBmYWxzZSAoZm9yIHN0YW5kYXJkIHNoYWRvdykuXG4kZGVmYXVsdC1ib3gtc2hhZG93LWluc2V0IDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFByb3ZpZGVzIGNyb3NzLWJyb3dzZXIgZm9yIFdlYmtpdCwgR2Vja28sIGFuZCBDU1MzIGJveCBzaGFkb3dzIHdoZW4gb25lIG9yIG1vcmUgYm94XG4vLyBzaGFkb3dzIGFyZSBuZWVkZWQuXG4vLyBFYWNoIHNoYWRvdyBhcmd1bWVudCBzaG91bGQgYWRoZXJlIHRvIHRoZSBzdGFuZGFyZCBjc3MzIHN5bnRheCBmb3IgdGhlXG4vLyBib3gtc2hhZG93IHByb3BlcnR5LlxuQG1peGluIGJveC1zaGFkb3coXG4gICRzaGFkb3ctMSA6IGRlZmF1bHQsXG4gICRzaGFkb3ctMiA6IGZhbHNlLFxuICAkc2hhZG93LTMgOiBmYWxzZSxcbiAgJHNoYWRvdy00IDogZmFsc2UsXG4gICRzaGFkb3ctNSA6IGZhbHNlLFxuICAkc2hhZG93LTYgOiBmYWxzZSxcbiAgJHNoYWRvdy03IDogZmFsc2UsXG4gICRzaGFkb3ctOCA6IGZhbHNlLFxuICAkc2hhZG93LTkgOiBmYWxzZSxcbiAgJHNoYWRvdy0xMDogZmFsc2Vcbikge1xuICBAaWYgJHNoYWRvdy0xID09IGRlZmF1bHQge1xuICAgICRzaGFkb3ctMSA6IC1jb21wYXNzLXNwYWNlLWxpc3QoY29tcGFjdChpZigkZGVmYXVsdC1ib3gtc2hhZG93LWluc2V0LCBpbnNldCwgZmFsc2UpLCAkZGVmYXVsdC1ib3gtc2hhZG93LWgtb2Zmc2V0LCAkZGVmYXVsdC1ib3gtc2hhZG93LXYtb2Zmc2V0LCAkZGVmYXVsdC1ib3gtc2hhZG93LWJsdXIsICRkZWZhdWx0LWJveC1zaGFkb3ctc3ByZWFkLCAkZGVmYXVsdC1ib3gtc2hhZG93LWNvbG9yKSk7XG4gIH1cbiAgJHNoYWRvdyA6IGNvbXBhY3QoJHNoYWRvdy0xLCAkc2hhZG93LTIsICRzaGFkb3ctMywgJHNoYWRvdy00LCAkc2hhZG93LTUsICRzaGFkb3ctNiwgJHNoYWRvdy03LCAkc2hhZG93LTgsICRzaGFkb3ctOSwgJHNoYWRvdy0xMCk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChib3gtc2hhZG93LCAkc2hhZG93LFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIG5vdCgtbXMpLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gUHJvdmlkZXMgYSBzaW5nbGUgY3Jvc3MtYnJvd3NlciBDU1MgYm94IHNoYWRvdyBmb3IgV2Via2l0LCBHZWNrbywgYW5kIENTUzMuXG4vLyBJbmNsdWRlcyBkZWZhdWx0IGFyZ3VtZW50cyBmb3IgaG9yaXpvbnRhbCBvZmZzZXQsIHZlcnRpY2FsIG9mZnNldCwgYmx1ciBsZW5ndGgsIHNwcmVhZCBsZW5ndGgsIGNvbG9yIGFuZCBpbnNldC5cbkBtaXhpbiBzaW5nbGUtYm94LXNoYWRvdyhcbiAgJGhvZmYgICA6ICRkZWZhdWx0LWJveC1zaGFkb3ctaC1vZmZzZXQsXG4gICR2b2ZmICAgOiAkZGVmYXVsdC1ib3gtc2hhZG93LXYtb2Zmc2V0LFxuICAkYmx1ciAgIDogJGRlZmF1bHQtYm94LXNoYWRvdy1ibHVyLFxuICAkc3ByZWFkIDogJGRlZmF1bHQtYm94LXNoYWRvdy1zcHJlYWQsXG4gICRjb2xvciAgOiAkZGVmYXVsdC1ib3gtc2hhZG93LWNvbG9yLFxuICAkaW5zZXQgIDogJGRlZmF1bHQtYm94LXNoYWRvdy1pbnNldFxuKSB7XG4gIEBpZiBub3QgKCRpbnNldCA9PSB0cnVlIG9yICRpbnNldCA9PSBmYWxzZSBvciAkaW5zZXQgPT0gaW5zZXQpIHtcbiAgICBAd2FybiBcIiRpbnNldCBleHBlY3RlZCB0byBiZSB0cnVlIG9yIHRoZSBpbnNldCBrZXl3b3JkLiBHb3QgI3skaW5zZXR9IGluc3RlYWQuIFVzaW5nOiBpbnNldFwiO1xuICB9XG5cbiAgQGlmICRjb2xvciA9PSBub25lIHtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9IEBlbHNlIHtcbiAgICAkZnVsbCAgIDogJGhvZmYgJHZvZmY7XG4gICAgQGlmICRibHVyICAgeyAkZnVsbDogJGZ1bGwgJGJsdXI7ICAgfVxuICAgIEBpZiAkc3ByZWFkIHsgJGZ1bGw6ICRmdWxsICRzcHJlYWQ7IH1cbiAgICBAaWYgJGNvbG9yICB7ICRmdWxsOiAkZnVsbCAkY29sb3I7ICB9XG4gICAgQGlmICRpbnNldCAgeyAkZnVsbDogaW5zZXQgJGZ1bGw7ICAgfVxuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZ1bGwpO1xuICB9XG59XG4iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vIFRoZXNlIGRlZmF1bHRzIG1ha2UgdGhlIGFyZ3VtZW50cyBvcHRpb25hbCBmb3IgdGhpcyBtaXhpblxuLy8gSWYgeW91IGxpa2UsIHNldCBkaWZmZXJlbnQgZGVmYXVsdHMgaW4geW91ciBwcm9qZWN0XG5cbiRkZWZhdWx0LXRleHQtc2hhZG93LWNvbG9yOiAgICAjYWFhICFkZWZhdWx0O1xuJGRlZmF1bHQtdGV4dC1zaGFkb3ctaC1vZmZzZXQ6IDBweCAgIWRlZmF1bHQ7XG4kZGVmYXVsdC10ZXh0LXNoYWRvdy12LW9mZnNldDogMHB4ICAhZGVmYXVsdDtcbiRkZWZhdWx0LXRleHQtc2hhZG93LWJsdXI6ICAgICAxcHggICFkZWZhdWx0O1xuJGRlZmF1bHQtdGV4dC1zaGFkb3ctc3ByZWFkOiAgIGZhbHNlICAhZGVmYXVsdDtcblxuLy8gUHJvdmlkZXMgY3Jvc3MtYnJvd3NlciB0ZXh0IHNoYWRvd3Mgd2hlbiBvbmUgb3IgbW9yZSBzaGFkb3dzIGFyZSBuZWVkZWQuXG4vLyBFYWNoIHNoYWRvdyBhcmd1bWVudCBzaG91bGQgYWRoZXJlIHRvIHRoZSBzdGFuZGFyZCBjc3MzIHN5bnRheCBmb3IgdGhlXG4vLyB0ZXh0LXNoYWRvdyBwcm9wZXJ0eS5cbi8vXG4vLyBOb3RlOiBpZiBhbnkgc2hhZG93IGhhcyBhIHNwcmVhZCBwYXJhbWV0ZXIsIHRoaXMgd2lsbCBjYXVzZSB0aGUgbWl4aW5cbi8vIHRvIGVtaXQgdGhlIHNoYWRvdyBkZWNsYXJhdGlvbiB0d2ljZSwgZmlyc3Qgd2l0aG91dCB0aGUgc3ByZWFkLFxuLy8gdGhlbiB3aXRoIHRoZSBzcHJlYWQgaW5jbHVkZWQuIFRoaXMgYWxsb3dzIHlvdSB0byBwcm9ncmVzc2l2ZWx5XG4vLyBlbmhhbmNlIHRoZSBicm93c2VycyB0aGF0IGRvIHN1cHBvcnQgdGhlIHNwcmVhZCBwYXJhbWV0ZXIuXG5AbWl4aW4gdGV4dC1zaGFkb3coXG4gICRzaGFkb3ctMSA6IGRlZmF1bHQsXG4gICRzaGFkb3ctMiA6IGZhbHNlLFxuICAkc2hhZG93LTMgOiBmYWxzZSxcbiAgJHNoYWRvdy00IDogZmFsc2UsXG4gICRzaGFkb3ctNSA6IGZhbHNlLFxuICAkc2hhZG93LTYgOiBmYWxzZSxcbiAgJHNoYWRvdy03IDogZmFsc2UsXG4gICRzaGFkb3ctOCA6IGZhbHNlLFxuICAkc2hhZG93LTkgOiBmYWxzZSxcbiAgJHNoYWRvdy0xMDogZmFsc2Vcbikge1xuICBAaWYgJHNoYWRvdy0xID09IGRlZmF1bHQge1xuICAgICRzaGFkb3ctMTogY29tcGFjdCgkZGVmYXVsdC10ZXh0LXNoYWRvdy1oLW9mZnNldCAkZGVmYXVsdC10ZXh0LXNoYWRvdy12LW9mZnNldCAkZGVmYXVsdC10ZXh0LXNoYWRvdy1ibHVyICRkZWZhdWx0LXRleHQtc2hhZG93LXNwcmVhZCAkZGVmYXVsdC10ZXh0LXNoYWRvdy1jb2xvcik7XG4gIH1cbiAgJHNoYWRvd3Mtd2l0aG91dC1zcHJlYWQ6IGpvaW4oKCksKCksY29tbWEpO1xuICAkc2hhZG93czogam9pbigoKSwoKSxjb21tYSk7XG4gICRoYXMtc3ByZWFkOiBmYWxzZTtcbiAgQGVhY2ggJHNoYWRvdyBpbiBjb21wYWN0KCRzaGFkb3ctMSwgJHNoYWRvdy0yLCAkc2hhZG93LTMsICRzaGFkb3ctNCwgJHNoYWRvdy01LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNoYWRvdy02LCAkc2hhZG93LTcsICRzaGFkb3ctOCwgJHNoYWRvdy05LCAkc2hhZG93LTEwKSB7XG4gICAgQGlmIGxlbmd0aCgkc2hhZG93KSA+IDQge1xuICAgICAgJGhhcy1zcHJlYWQ6IHRydWU7XG4gICAgICAkc2hhZG93cy13aXRob3V0LXNwcmVhZDogYXBwZW5kKCRzaGFkb3dzLXdpdGhvdXQtc3ByZWFkLCBudGgoJHNoYWRvdywxKSBudGgoJHNoYWRvdywyKSBudGgoJHNoYWRvdywzKSBudGgoJHNoYWRvdyw1KSk7XG4gICAgICAkc2hhZG93czogYXBwZW5kKCRzaGFkb3dzLCAkc2hhZG93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHNoYWRvd3Mtd2l0aG91dC1zcHJlYWQ6IGFwcGVuZCgkc2hhZG93cy13aXRob3V0LXNwcmVhZCwgJHNoYWRvdyk7XG4gICAgICAkc2hhZG93czogYXBwZW5kKCRzaGFkb3dzLCAkc2hhZG93KTtcbiAgICB9XG4gIH1cbiAgQGlmICRoYXMtc3ByZWFkIHtcbiAgICB0ZXh0LXNoYWRvdzogJHNoYWRvd3Mtd2l0aG91dC1zcHJlYWQ7XG4gIH1cbiAgdGV4dC1zaGFkb3c6ICRzaGFkb3dzO1xufVxuXG4vLyBQcm92aWRlcyBhIHNpbmdsZSBjcm9zcy1icm93c2VyIENTUyB0ZXh0IHNoYWRvdy5cbi8vXG4vLyBQcm92aWRlcyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgdGhlIGNvbG9yLCBob3Jpem9udGFsIG9mZnNldCwgdmVydGljYWwgb2Zmc2V0LCBibHVyLCBhbmQgc3ByZWFkXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgYWJvdmUuXG5AbWl4aW4gc2luZ2xlLXRleHQtc2hhZG93KFxuICAkaG9mZjogZmFsc2UsXG4gICR2b2ZmOiBmYWxzZSxcbiAgJGJsdXI6IGZhbHNlLFxuICAkc3ByZWFkOiBmYWxzZSxcbiAgJGNvbG9yOiBmYWxzZVxuKSB7XG4gIC8vIEEgbG90IG9mIHBlb3BsZSB0aGluayB0aGUgY29sb3IgY29tZXMgZmlyc3QuIEl0IGRvZXNuJ3QuXG4gIEBpZiB0eXBlLW9mKCRob2ZmKSA9PSBjb2xvciB7XG4gICAgJHRlbXAtY29sb3I6ICRob2ZmO1xuICAgICRob2ZmOiAkdm9mZjtcbiAgICAkdm9mZjogJGJsdXI7XG4gICAgJGJsdXI6ICRzcHJlYWQ7XG4gICAgJHNwcmVhZDogJGNvbG9yO1xuICAgICRjb2xvcjogJHRlbXAtY29sb3I7XG4gIH1cbiAgLy8gQ2FuJ3QgcmVseSBvbiBkZWZhdWx0IGFzc2lnbm1lbnQgd2l0aCBtdWx0aXBsZSBzdXBwb3J0ZWQgYXJndW1lbnQgb3JkZXJzLlxuICAkaG9mZjogICBpZigkaG9mZiwgICAkaG9mZiwgICAkZGVmYXVsdC10ZXh0LXNoYWRvdy1oLW9mZnNldCk7XG4gICR2b2ZmOiAgIGlmKCR2b2ZmLCAgICR2b2ZmLCAgICRkZWZhdWx0LXRleHQtc2hhZG93LXYtb2Zmc2V0KTtcbiAgJGJsdXI6ICAgaWYoJGJsdXIsICAgJGJsdXIsICAgJGRlZmF1bHQtdGV4dC1zaGFkb3ctYmx1ciAgICApO1xuICAkc3ByZWFkOiBpZigkc3ByZWFkLCAkc3ByZWFkLCAkZGVmYXVsdC10ZXh0LXNoYWRvdy1zcHJlYWQgICk7XG4gICRjb2xvcjogIGlmKCRjb2xvciwgICRjb2xvciwgICRkZWZhdWx0LXRleHQtc2hhZG93LWNvbG9yICAgKTtcbiAgLy8gV2UgZG9uJ3QgbmVlZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eS5cbiAgQGlmICRjb2xvciA9PSBub25lIG9yICRob2ZmID09IG5vbmUge1xuICAgIEBpbmNsdWRlIHRleHQtc2hhZG93KG5vbmUpO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSB0ZXh0LXNoYWRvdyhjb21wYWN0KCRob2ZmICR2b2ZmICRibHVyICRzcHJlYWQgJGNvbG9yKSk7XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJzaGFyZWRcIjtcblxuLy8gU3BlY2lmeSB0aGUgc2hvcnRoYW5kIGBjb2x1bW5zYCBwcm9wZXJ0eS5cbi8vXG4vLyBFeGFtcGxlOlxuLy9cbi8vICAgICBAaW5jbHVkZSBjb2x1bW5zKDIwZW0gMilcbkBtaXhpbiBjb2x1bW5zKCR3aWR0aC1hbmQtY291bnQpIHtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGNvbHVtbnMsICR3aWR0aC1hbmQtY291bnQsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIFNwZWNpZnkgdGhlIG51bWJlciBvZiBjb2x1bW5zXG5AbWl4aW4gY29sdW1uLWNvdW50KCRjb3VudCkge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLWNvdW50LCAkY291bnQsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIFNwZWNpZnkgdGhlIGdhcCBiZXR3ZWVuIGNvbHVtbnMgZS5nLiBgMjBweGBcbkBtaXhpbiBjb2x1bW4tZ2FwKCR3aWR0aCkge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLWdhcCwgJHdpZHRoLFxuICAgIC1tb3osIC13ZWJraXQsIC1vLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBTcGVjaWZ5IHRoZSB3aWR0aCBvZiBjb2x1bW5zIGUuZy4gYDEwMHB4YFxuQG1peGluIGNvbHVtbi13aWR0aCgkd2lkdGgpIHtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGNvbHVtbi13aWR0aCwgJHdpZHRoLFxuICAgIC1tb3osIC13ZWJraXQsIC1vLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBTcGVjaWZ5IHRoZSB3aWR0aCBvZiB0aGUgcnVsZSBiZXR3ZWVuIGNvbHVtbnMgZS5nLiBgMXB4YFxuQG1peGluIGNvbHVtbi1ydWxlLXdpZHRoKCR3aWR0aCkge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLXJ1bGUtd2lkdGgsICR3aWR0aCxcbiAgICAtbW96LCAtd2Via2l0LCAtbywgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gU3BlY2lmeSB0aGUgc3R5bGUgb2YgdGhlIHJ1bGUgYmV0d2VlbiBjb2x1bW5zIGUuZy4gYGRvdHRlZGAuXG4vLyBUaGlzIHdvcmtzIGxpa2UgYm9yZGVyLXN0eWxlLlxuQG1peGluIGNvbHVtbi1ydWxlLXN0eWxlKCRzdHlsZSkge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLXJ1bGUtc3R5bGUsIHVucXVvdGUoJHN0eWxlKSxcbiAgICAtbW96LCAtd2Via2l0LCAtbywgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gU3BlY2lmeSB0aGUgY29sb3Igb2YgdGhlIHJ1bGUgYmV0d2VlbiBjb2x1bW5zIGUuZy4gYGJsdWVgLlxuLy8gVGhpcyB3b3JrcyBsaWtlIGJvcmRlci1jb2xvci5cbkBtaXhpbiBjb2x1bW4tcnVsZS1jb2xvcigkY29sb3IpIHtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGNvbHVtbi1ydWxlLWNvbG9yLCAkY29sb3IsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIE1peGluIGVuY29tcGFzc2luZyBhbGwgY29sdW1uIHJ1bGUgcHJvcGVydGllc1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICAgIEBpbmNsdWRlIGNvbHVtbi1ydWxlKDFweCwgc29saWQsICNjMDApXG4vL1xuLy8gT3IgdGhlIHZhbHVlcyBjYW4gYmUgc3BhY2Ugc2VwYXJhdGVkOlxuLy9cbi8vICAgICBAaW5jbHVkZSBjb2x1bW4tcnVsZSgxcHggc29saWQgI2MwMClcbkBtaXhpbiBjb2x1bW4tcnVsZSgkd2lkdGgsICRzdHlsZTogZmFsc2UsICRjb2xvcjogZmFsc2UpIHtcbiAgJGZ1bGwgOiAtY29tcGFzcy1zcGFjZS1saXN0KGNvbXBhY3QoJHdpZHRoLCAkc3R5bGUsICRjb2xvcikpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLXJ1bGUsICRmdWxsLFxuICAgIC1tb3osIC13ZWJraXQsIC1vLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBNaXhpbiBmb3Igc2V0dGluZyBjb2x1bW4tYnJlYWstYmVmb3JlXG4vL1xuLy8gKiBsZWdhbCB2YWx1ZXMgYXJlIGF1dG8sIGFsd2F5cywgYXZvaWQsIGxlZnQsIHJpZ2h0LCBwYWdlLCBjb2x1bW4sIGF2b2lkLXBhZ2UsIGF2b2lkLWNvbHVtblxuLy9cbi8vICBFeGFtcGxlOiBcbi8vICAgIGgyLmJlZm9yZSB7QGluY2x1ZGUgY29sdW1uLWJyZWFrLWJlZm9yZShhbHdheXMpO31cbi8vXG4vLyAgV2hpY2ggZ2VuZXJhdGVzOiBcbi8vXG4vLyAgaDIuYmVmb3JlIHsgICAgXG4vLyAgICAtd2Via2l0LWNvbHVtbi1icmVhay1iZWZvcmU6IGFsd2F5cztcbi8vICAgIGNvbHVtbi1icmVhay1iZWZvcmU6IGFsd2F5czt9XG5AbWl4aW4gY29sdW1uLWJyZWFrLWJlZm9yZSgkdmFsdWU6IGF1dG8pe1xuICAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGNvbHVtbi1icmVhay1iZWZvcmUsICR2YWx1ZSwgbm90KC1tb3opLCAtd2Via2l0LCBub3QoLW8pLCBub3QoLW1zKSwgbm90KC1raHRtbCksIG9mZmljaWFsICk7XG59XG5cbi8vIE1peGluIGZvciBzZXR0aW5nIGNvbHVtbi1icmVhay1hZnRlclxuLy9cbi8vICogbGVnYWwgdmFsdWVzIGFyZSBhdXRvLCBhbHdheXMsIGF2b2lkLCBsZWZ0LCByaWdodCwgcGFnZSwgY29sdW1uLCBhdm9pZC1wYWdlLCBhdm9pZC1jb2x1bW5cbi8vXG4vLyAgRXhhbXBsZTogXG4vLyAgICBoMi5hZnRlciB7QGluY2x1ZGUgY29sdW1uLWJyZWFrLWFmdGVyKGFsd2F5cyk7IH1cbi8vXG4vLyAgV2hpY2ggZ2VuZXJhdGVzOiBcbi8vXG4vLyAgaDIuYWZ0ZXIge1xuLy8gICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXI6IGFsd2F5cztcbi8vICAgIGNvbHVtbi1icmVhay1hZnRlcjogYWx3YXlzOyB9XG5AbWl4aW4gY29sdW1uLWJyZWFrLWFmdGVyKCR2YWx1ZTogYXV0byl7XG4gICBAaW5jbHVkZSBleHBlcmltZW50YWwoY29sdW1uLWJyZWFrLWFmdGVyLCAkdmFsdWUsIG5vdCgtbW96KSwgLXdlYmtpdCwgbm90KC1vKSwgbm90KC1tcyksIG5vdCgta2h0bWwpLCBvZmZpY2lhbCApO1xufVxuXG4vLyBNaXhpbiBmb3Igc2V0dGluZyBjb2x1bW4tYnJlYWstaW5zaWRlXG4vL1xuLy8gKiBsZWdhbCB2YWx1ZXMgYXJlIGF1dG8sIGF2b2lkLCBhdm9pZC1wYWdlLCBhdm9pZC1jb2x1bW5cbi8vXG4vLyAgRXhhbXBsZTogXG4vLyAgICBoMi5pbnNpZGUge0BpbmNsdWRlIGNvbHVtbi1icmVhay1pbnNpZGUoKTt9XG4vLyAgV2hpY2ggZ2VuZXJhdGVzOiBcbi8vICBcbi8vICBoMi5pbnNpZGUge1xuLy8gICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdXRvO1xuLy8gICAgY29sdW1uLWJyZWFrLWluc2lkZTogYXV0bzt9XG5AbWl4aW4gY29sdW1uLWJyZWFrLWluc2lkZSgkdmFsdWU6IGF1dG8pe1xuICAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGNvbHVtbi1icmVhay1pbnNpZGUsICR2YWx1ZSwgbm90KC1tb3opLCAtd2Via2l0LCBub3QoLW8pLCBub3QoLW1zKSwgbm90KC1raHRtbCksIG9mZmljaWFsICk7XG59XG5cbi8vIEFsbC1wdXJwb3NlIG1peGluIGZvciBzZXR0aW5nIGNvbHVtbiBicmVha3MuXG4vL1xuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yICR0eXBlIDogYmVmb3JlLCBhZnRlciwgaW5zaWRlIFxuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yICckdmFsdWUnIGFyZSBkZXBlbmRlbnQgb24gJHR5cGVcbi8vICAgICogd2hlbiAkdHlwZSA9IGJlZm9yZSwgbGVnYWwgdmFsdWVzIGFyZSBhdXRvLCBhbHdheXMsIGF2b2lkLCBsZWZ0LCByaWdodCwgcGFnZSwgY29sdW1uLCBhdm9pZC1wYWdlLCBhdm9pZC1jb2x1bW5cbi8vICAgICogd2hlbiAkdHlwZSA9IGFmdGVyLCBsZWdhbCB2YWx1ZXMgYXJlIGF1dG8sIGFsd2F5cywgYXZvaWQsIGxlZnQsIHJpZ2h0LCBwYWdlLCBjb2x1bW4sIGF2b2lkLXBhZ2UsIGF2b2lkLWNvbHVtblxuLy8gICAgKiB3aGVuICR0eXBlID0gaW5zaWRlLCBsZWdhbCB2YWx1ZXMgYXJlIGF1dG8sIGF2b2lkLCBhdm9pZC1wYWdlLCBhdm9pZC1jb2x1bW5cbi8vICBcbi8vICBFeGFtcGxlczogXG4vLyAgICBoMi5iZWZvcmUge0BpbmNsdWRlIGNvbHVtbi1icmVhayhiZWZvcmUsIGFsd2F5cyk7fVxuLy8gICAgaDIuYWZ0ZXIge0BpbmNsdWRlIGNvbHVtbi1icmVhayhhZnRlciwgYWx3YXlzKTsgfVxuLy8gICAgaDIuaW5zaWRlIHtAaW5jbHVkZSBjb2x1bW4tYnJlYWsoaW5zaWRlKTsgfVxuLy9cbi8vICBXaGljaCBnZW5lcmF0ZXM6IFxuLy8gIGgyLmJlZm9yZSB7ICAgIFxuLy8gICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlOiBhbHdheXM7XG4vLyAgICBjb2x1bW4tYnJlYWstYmVmb3JlOiBhbHdheXM7fVxuLy8gIFxuLy8gIGgyLmFmdGVyIHtcbi8vICAgIC13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyOiBhbHdheXM7XG4vLyAgICBjb2x1bW4tYnJlYWstYWZ0ZXI6IGFsd2F5czsgfVxuLy9cbi8vICBoMi5pbnNpZGUge1xuLy8gICAgLXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlOiBhdXRvO1xuLy8gICAgY29sdW1uLWJyZWFrLWluc2lkZTogYXV0bzt9XG4gXG5AbWl4aW4gY29sdW1uLWJyZWFrKCR0eXBlOiBiZWZvcmUsICR2YWx1ZTogYXV0byl7XG4gICBAaW5jbHVkZSBleHBlcmltZW50YWwoXCJjb2x1bW4tYnJlYWstI3skdHlwZX1cIiwgJHZhbHVlLCBub3QoLW1veiksIC13ZWJraXQsIG5vdCgtbyksIG5vdCgtbXMpLCBub3QoLWtodG1sKSwgb2ZmaWNpYWwgKTtcbn0iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vIENoYW5nZSB0aGUgYm94IG1vZGVsIGZvciBNb3ppbGxhLCBXZWJraXQsIElFOCBhbmQgdGhlIGZ1dHVyZVxuLy9cbi8vIEBwYXJhbSAkYnNcbi8vICAgWyBjb250ZW50LWJveCB8IGJvcmRlci1ib3ggXVxuXG5AbWl4aW4gYm94LXNpemluZygkYnMpIHtcbiAgJGJzOiB1bnF1b3RlKCRicyk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChib3gtc2l6aW5nLCAkYnMsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgbm90KC1tcyksIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuIiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBkaXNwbGF5OmJveDsgbXVzdCBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIG90aGVyIGZsZXhib3ggbWl4aW5zIHRvIHdvcmsgcHJvcGVybHlcbkBtaXhpbiBkaXNwbGF5LWJveCB7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbC12YWx1ZShkaXNwbGF5LCBib3gsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gRGVmYXVsdCBib3ggb3JpZW50YXRpb24sIGFzc3VtaW5nIHRoYXQgdGhlIHVzZXIgd2FudHMgc29tZXRoaW5nIGxlc3MgYmxvY2stbGlrZVxuJGRlZmF1bHQtYm94LW9yaWVudDogaG9yaXpvbnRhbCAhZGVmYXVsdDtcblxuLy8gQm94IG9yaWVudGF0aW9uIFsgaG9yaXpvbnRhbCB8IHZlcnRpY2FsIHwgaW5saW5lLWF4aXMgfCBibG9jay1heGlzIHwgaW5oZXJpdCBdXG5AbWl4aW4gYm94LW9yaWVudChcbiAgJG9yaWVudGF0aW9uOiAkZGVmYXVsdC1ib3gtb3JpZW50XG4pIHtcbiAgJG9yaWVudGF0aW9uIDogdW5xdW90ZSgkb3JpZW50YXRpb24pO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LW9yaWVudCwgJG9yaWVudGF0aW9uLFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIERlZmF1bHQgYm94LWFsaWduXG4kZGVmYXVsdC1ib3gtYWxpZ246IHN0cmV0Y2ggIWRlZmF1bHQ7XG5cbi8vIEJveCBhbGlnbiBbIHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoIF1cbkBtaXhpbiBib3gtYWxpZ24oXG4gICRhbGlnbm1lbnQ6ICRkZWZhdWx0LWJveC1hbGlnblxuKSB7XG4gICRhbGlnbm1lbnQgOiB1bnF1b3RlKCRhbGlnbm1lbnQpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LWFsaWduLCAkYWxpZ25tZW50LFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIERlZmF1bHQgYm94IGZsZXhcbiRkZWZhdWx0LWJveC1mbGV4OiAwICFkZWZhdWx0O1xuXG4vLyBtaXhpbiB3aGljaCB0YWtlcyBhbiBpbnQgYXJndW1lbnQgZm9yIGJveCBmbGV4LiBBcHBseSB0aGlzIHRvIHRoZSBjaGlsZHJlbiBpbnNpZGUgdGhlIGJveC5cbi8vXG4vLyBGb3IgZXhhbXBsZTogXCJkaXYuZGlzcGxheS1ib3ggPiBkaXYuY2hpbGQtYm94XCIgd291bGQgZ2V0IHRoZSBib3ggZmxleCBtaXhpbi5cbkBtaXhpbiBib3gtZmxleChcbiAgJGZsZXg6ICRkZWZhdWx0LWJveC1mbGV4XG4pIHtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGJveC1mbGV4LCAkZmxleCxcbiAgICAtbW96LCAtd2Via2l0LCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBEZWZhdWx0IGZsZXggZ3JvdXBcbiRkZWZhdWx0LWJveC1mbGV4LWdyb3VwOiAxICFkZWZhdWx0O1xuXG4vLyBtaXhpbiB3aGljaCB0YWtlcyBhbiBpbnQgYXJndW1lbnQgZm9yIGZsZXhpYmxlIGdyb3VwaW5nXG5AbWl4aW4gYm94LWZsZXgtZ3JvdXAoXG4gICRncm91cDogJGRlZmF1bHQtYm94LWZsZXgtZ3JvdXBcbikge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LWZsZXgtZ3JvdXAsICRncm91cCxcbiAgICAtbW96LCAtd2Via2l0LCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBkZWZhdWx0IGZvciBvcmRpbmFsIGdyb3VwXG4kZGVmYXVsdC1ib3gtb3JkaW5hbC1ncm91cDogMSAhZGVmYXVsdDtcblxuLy8gbWl4aW4gd2hpY2ggdGFrZXMgYW4gaW50IGFyZ3VtZW50IGZvciBvcmRpbmFsIGdyb3VwaW5nIGFuZCByZWFycmFuZ2luZyB0aGUgb3JkZXJcbkBtaXhpbiBib3gtb3JkaW5hbC1ncm91cChcbiAgJGdyb3VwOiAkZGVmYXVsdC1vcmRpbmFsLWZsZXgtZ3JvdXBcbikge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LW9yZGluYWwtZ3JvdXAsICRncm91cCxcbiAgICAtbW96LCAtd2Via2l0LCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBCb3ggZGlyZWN0aW9uIGRlZmF1bHQgdmFsdWVcbiRkZWZhdWx0LWJveC1kaXJlY3Rpb246IG5vcm1hbCAhZGVmYXVsdDtcblxuLy8gbWl4aW4gZm9yIGJveC1kaXJlY3Rpb24gWyBub3JtYWwgfCByZXZlcnNlIHwgaW5oZXJpdCBdXG5AbWl4aW4gYm94LWRpcmVjdGlvbihcbiAgJGRpcmVjdGlvbjogJGRlZmF1bHQtYm94LWRpcmVjdGlvblxuKSB7XG4gICRkaXJlY3Rpb246IHVucXVvdGUoJGRpcmVjdGlvbik7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChib3gtZGlyZWN0aW9uLCAkZGlyZWN0aW9uLFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIGRlZmF1bHQgZm9yIGJveCBsaW5lc1xuJGRlZmF1bHQtYm94LWxpbmVzOiBzaW5nbGUgIWRlZmF1bHQ7XG5cbi8vIG1peGluIGZvciBib3ggbGluZXMgWyBzaW5nbGUgfCBtdWx0aXBsZSBdXG5AbWl4aW4gYm94LWxpbmVzKFxuICAkbGluZXM6ICRkZWZhdWx0LWJveC1saW5lc1xuKSB7XG4gICRsaW5lczogdW5xdW90ZSgkbGluZXMpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LWxpbmVzLCAkbGluZXMsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gZGVmYXVsdCBmb3IgYm94IHBhY2tcbiRkZWZhdWx0LWJveC1wYWNrOiBzdGFydCAhZGVmYXVsdDtcblxuLy8gbWl4aW4gZm9yIGJveCBwYWNrIFsgc3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5IF1cbkBtaXhpbiBib3gtcGFjayhcbiAgJHBhY2s6ICRkZWZhdWx0LWJveC1wYWNrXG4pIHtcbiAgJHBhY2s6IHVucXVvdGUoJHBhY2spO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYm94LXBhY2ssICRwYWNrLFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59IiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgcGFkZGluZy1ib3hgIC0tIHRoZSBib3ggbW9kZWwgdXNlZCBieSBtb2Rlcm4gYnJvd3NlcnMuXG4vL1xuLy8gSWYgeW91IHdpc2ggdG8gZG8gc28sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29uc3RhbnQgd2l0aCBgYm9yZGVyLWJveGBcbi8vXG4vLyBUbyBvdmVycmlkZSB0byB0aGUgZGVmYXVsdCBib3JkZXItYm94IG1vZGVsLCB1c2UgdGhpcyBjb2RlOlxuLy8gICAgICRkZWZhdWx0LWJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveFxuXG4kZGVmYXVsdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94ICFkZWZhdWx0O1xuXG4vLyBDbGlwIHRoZSBiYWNrZ3JvdW5kIChpbWFnZSBhbmQgY29sb3IpIGF0IHRoZSBlZGdlIG9mIHRoZSBwYWRkaW5nIG9yIGJvcmRlci5cbi8vXG4vLyBMZWdhbCBWYWx1ZXM6XG4vL1xuLy8gICAqIHBhZGRpbmctYm94XG4vLyAgICogYm9yZGVyLWJveFxuLy8gICAqIHRleHRcblxuQG1peGluIGJhY2tncm91bmQtY2xpcCgkY2xpcDogJGRlZmF1bHQtYmFja2dyb3VuZC1jbGlwKSB7XG4gIC8vIHdlYmtpdCBhbmQgbW96aWxsYSB1c2UgdGhlIGRlcHJlY2F0ZWQgc2hvcnQgW2JvcmRlciB8IHBhZGRpbmddXG4gICRjbGlwOiB1bnF1b3RlKCRjbGlwKTtcbiAgJGRlcHJlY2F0ZWQ6ICRjbGlwO1xuICBAaWYgJGNsaXAgPT0gcGFkZGluZy1ib3ggeyAkZGVwcmVjYXRlZDogcGFkZGluZzsgfVxuICBAaWYgJGNsaXAgPT0gYm9yZGVyLWJveCB7ICRkZXByZWNhdGVkOiBib3JkZXI7IH1cbiAgLy8gU3VwcG9ydCBmb3Igd2Via2l0IGFuZCBtb3ppbGxhJ3MgdXNlIG9mIHRoZSBkZXByZWNhdGVkIHNob3J0IGZvcm1cbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGJhY2tncm91bmQtY2xpcCwgJGRlcHJlY2F0ZWQsXG4gICAgLW1veixcbiAgICAtd2Via2l0LFxuICAgIG5vdCgtbyksXG4gICAgbm90KC1tcyksXG4gICAgbm90KC1raHRtbCksXG4gICAgbm90IG9mZmljaWFsXG4gICk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChiYWNrZ3JvdW5kLWNsaXAsICRjbGlwLFxuICAgIG5vdCgtbW96KSxcbiAgICBub3QoLXdlYmtpdCksXG4gICAgbm90KC1vKSxcbiAgICBub3QoLW1zKSxcbiAgICAta2h0bWwsXG4gICAgb2ZmaWNpYWxcbiAgKTtcbn1cbiIsIi8vIE92ZXJyaWRlIGAkZGVmYXVsdC1iYWNrZ3JvdW5kLW9yaWdpbmAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0LlxuXG5AaW1wb3J0IFwic2hhcmVkXCI7XG5cbiRkZWZhdWx0LWJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveCAhZGVmYXVsdDtcblxuLy8gUG9zaXRpb24gdGhlIGJhY2tncm91bmQgb2ZmIHRoZSBlZGdlIG9mIHRoZSBwYWRkaW5nLCBib3JkZXIgb3IgY29udGVudFxuLy9cbi8vICogUG9zc2libGUgdmFsdWVzOlxuLy8gICAqIGBwYWRkaW5nLWJveGBcbi8vICAgKiBgYm9yZGVyLWJveGBcbi8vICAgKiBgY29udGVudC1ib3hgXG4vLyAqIGJyb3dzZXIgZGVmYXVsdHMgdG8gYHBhZGRpbmctYm94YFxuLy8gKiBtaXhpbiBkZWZhdWx0cyB0byBgY29udGVudC1ib3hgXG5cblxuQG1peGluIGJhY2tncm91bmQtb3JpZ2luKCRvcmlnaW46ICRkZWZhdWx0LWJhY2tncm91bmQtb3JpZ2luKSB7XG4gICRvcmlnaW46IHVucXVvdGUoJG9yaWdpbik7XG4gIC8vIHdlYmtpdCBhbmQgbW96aWxsYSB1c2UgdGhlIGRlcHJlY2F0ZWQgc2hvcnQgW2JvcmRlciB8IHBhZGRpbmcgfCBjb250ZW50XVxuICAkZGVwcmVjYXRlZDogJG9yaWdpbjtcbiAgQGlmICRvcmlnaW4gPT0gcGFkZGluZy1ib3ggeyAkZGVwcmVjYXRlZDogcGFkZGluZzsgfVxuICBAaWYgJG9yaWdpbiA9PSBib3JkZXItYm94ICB7ICRkZXByZWNhdGVkOiBib3JkZXI7ICB9XG4gIEBpZiAkb3JpZ2luID09IGNvbnRlbnQtYm94IHsgJGRlcHJlY2F0ZWQ6IGNvbnRlbnQ7IH1cblxuICAvLyBTdXBwb3J0IGZvciB3ZWJraXQgYW5kIG1vemlsbGEncyB1c2Ugb2YgdGhlIGRlcHJlY2F0ZWQgc2hvcnQgZm9ybVxuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYmFja2dyb3VuZC1vcmlnaW4sICRkZXByZWNhdGVkLFxuICAgIC1tb3osXG4gICAgLXdlYmtpdCxcbiAgICBub3QoLW8pLFxuICAgIG5vdCgtbXMpLFxuICAgIG5vdCgta2h0bWwpLFxuICAgIG5vdCBvZmZpY2lhbFxuICApO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoYmFja2dyb3VuZC1vcmlnaW4sICRvcmlnaW4sXG4gICAgbm90KC1tb3opLFxuICAgIG5vdCgtd2Via2l0KSxcbiAgICAtbyxcbiAgICAtbXMsXG4gICAgLWtodG1sLFxuICAgIG9mZmljaWFsXG4gICk7XG59XG4iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vIENyb3NzLWJyb3dzZXIgc3VwcG9ydCBmb3IgQGZvbnQtZmFjZS4gU3VwcG9ydHMgSUUsIEdlY2tvLCBXZWJraXQsIE9wZXJhLlxuLy9cbi8vICogJG5hbWUgaXMgcmVxdWlyZWQsIGFyYml0cmFyeSwgYW5kIHdoYXQgeW91IHdpbGwgdXNlIGluIGZvbnQgc3RhY2tzLlxuLy8gKiAkZm9udC1maWxlcyBpcyByZXF1aXJlZCB1c2luZyBmb250LWZpbGVzKCdyZWxhdGl2ZS9sb2NhdGlvbicsICdmb3JtYXQnKS5cbi8vICAgZm9yIGJlc3QgcmVzdWx0cyB1c2UgdGhpcyBvcmRlcjogd29mZiwgb3BlbnR5cGUvdHJ1ZXR5cGUsIHN2Z1xuLy8gKiAkZW90IGlzIHJlcXVpcmVkIGJ5IElFLCBhbmQgaXMgYSByZWxhdGl2ZSBsb2NhdGlvbiBvZiB0aGUgZW90IGZpbGUuXG4vLyAqICR3ZWlnaHQgc2hvd3MgaWYgdGhlIGZvbnQgaXMgYm9sZCwgZGVmYXVsdHMgdG8gbm9ybWFsXG4vLyAqICRzdHlsZSBkZWZhdWx0cyB0byBub3JtYWwsIG1pZ2h0IGJlIGFsc28gaXRhbGljXG4vLyAqIEZvciBhbmRyb2lkIDIuMiBDb21wYXRpYmxpdHksIHBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHdlYiBwYWdlIGhhc1xuLy8gICBhIG1ldGEgdmlld3BvcnQgdGFnLlxuLy8gKiBUbyBzdXBwb3J0IGlPUyA8IDQuMiwgYW4gU1ZHIGZpbGUgbXVzdCBiZSBwcm92aWRlZFxuLy9cbi8vIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIG90aGVyIGZvcm1hdHMgY2hlY2sgb3V0IHRoZSBGb250IFNxdWlycmVsXG4vLyBbZm9udCBnZW5lcmF0b3JdKGh0dHA6Ly93d3cuZm9udHNxdWlycmVsLmNvbS9mb250ZmFjZS9nZW5lcmF0b3IpXG4vL1xuXG4vLyBJbiBvcmRlciB0byByZWZlciB0byBhIHNwZWNpZmljIHN0eWxlIG9mIHRoZSBmb250IGluIHlvdXIgc3R5bGVzaGVldHMgYXMgXG4vLyBlLmcuIFwiZm9udC1zdHlsZTogaXRhbGljO1wiLCAgeW91IG1heSBhZGQgYSBjb3VwbGUgb2YgQGZvbnQtZmFjZSBpbmNsdWRlc1xuLy8gY29udGFpbmluZyB0aGUgcmVzcGVjdGl2ZSBmb250IGZpbGVzIGZvciBlYWNoIHN0eWxlIGFuZCBzcGVjeWluZ1xuLy8gcmVzcGVjdGl2ZSB0aGUgJHN0eWxlIHBhcmFtZXRlci5cblxuLy8gT3JkZXIgb2YgdGhlIGluY2x1ZGVzIG1hdHRlcnMsIGFuZCBpdCBpczogbm9ybWFsLCBib2xkLCBpdGFsaWMsIGJvbGQraXRhbGljLlxuXG5AbWl4aW4gZm9udC1mYWNlKFxuICAkbmFtZSwgXG4gICRmb250LWZpbGVzLCBcbiAgJGVvdDogZmFsc2UsXG4gICR3ZWlnaHQ6IGZhbHNlLFxuICAkc3R5bGU6IGZhbHNlXG4pIHtcbiAgJGllZm9udDogdW5xdW90ZShcIiN7JGVvdH0/I2llZml4XCIpO1xuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogcXVvdGUoJG5hbWUpO1xuICAgIEBpZiAkZW90IHtcbiAgICAgIHNyYzogZm9udC11cmwoJGVvdCk7XG4gICAgICAkZm9udC1maWxlczogZm9udC11cmwoJGllZm9udCkgdW5xdW90ZShcImZvcm1hdCgnZW90JylcIiksICRmb250LWZpbGVzOyBcbiAgICB9XG4gICAgc3JjOiAkZm9udC1maWxlcztcbiAgICBAaWYgJHdlaWdodCB7XG4gICAgICBmb250LXdlaWdodDogJHdlaWdodDtcbiAgICB9XG4gICAgQGlmICRzdHlsZSB7XG4gICAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gICAgfVxuICB9XG59XG4iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vIEBkb2Mgb2ZmXG4vLyBOb3RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNhZmFyaSwgQ2hyb21lLCBhbmQgRmlyZWZveCBhbGwgc3VwcG9ydCAzRCB0cmFuc2Zvcm1zLiBIb3dldmVyLFxuLy8gb25seSBpbiB0aGUgbW9zdCByZWNlbnQgYnVpbGRzLiBZb3Ugc2hvdWxkIGFsc28gcHJvdmlkZSBmYWxsYmFjayAyZCBzdXBwb3J0IGZvclxuLy8gT3BlcmEgYW5kIElFLiBJRTEwIGlzIHNsYXRlZCB0byBoYXZlIDNkIGVuYWJsZWQsIGJ1dCBpcyBjdXJyZW50bHkgdW5yZWxlYXNlZC5cbi8vIFRvIG1ha2UgdGhhdCBlYXN5LCBhbGwgMkQgdHJhbnNmb3JtcyBpbmNsdWRlIGFuIGJyb3dzZXItdGFyZ2V0aW5nIHRvZ2dsZSAoJG9ubHkzZClcbi8vIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gc3VwcG9ydCBsaXN0cy4gVGhlIHRvZ2dsZSBkZWZhdWx0cyB0byAnZmFsc2UnICgyRCksXG4vLyBhbmQgYWxzbyBhY2NlcHRzICd0cnVlJyAoM0QpLiBDdXJyZW50bHkgdGhlIGxpc3RzIGFyZSBhcyBmb2xsb3dzOlxuLy8gMkQ6IE1vemlsbGEsIFdlYmtpdCwgT3BlcmEsIE9mZmljaWFsXG4vLyAzRDogV2Via2l0LCBGaXJlZm94LlxuXG4vLyBBdmFpbGFibGUgVHJhbnNmb3JtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gU2NhbGUgKDJkIGFuZCAzZClcbi8vIC0gUm90YXRlICgyZCBhbmQgM2QpXG4vLyAtIFRyYW5zbGF0ZSAoMmQgYW5kIDNkKVxuLy8gLSBTa2V3ICgyZCBvbmx5KVxuXG4vLyBUcmFuc2Zvcm0gUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gVHJhbnNmb3JtIE9yaWdpbiAoMmQgYW5kIDNkKVxuLy8gLSBQZXJzcGVjdGl2ZSAoM2QpXG4vLyAtIFBlcnNwZWN0aXZlIE9yaWdpbiAoM2QpXG4vLyAtIFRyYW5zZm9ybSBTdHlsZSAoM2QpXG4vLyAtIEJhY2tmYWNlIFZpc2liaWxpdHkgKDNkKVxuXG4vLyBNaXhpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRyYW5zZm9ybS1vcmlnaW5cbi8vICAtIHNob3J0Y3V0czogIHRyYW5zZm9ybS1vcmlnaW4yZCwgdHJhbnNmb3JtLW9yaWdpbjNkXG4vLyAgLSBoZWxwZXJzOiAgICBhcHBseS1vcmlnaW5cbi8vIHRyYW5zZm9ybVxuLy8gIC0gc2hvcnRjdXRzOiAgdHJhbnNmb3JtMmQsIHRyYW5zZm9ybTNkXG4vLyAgLSBoZWxwZXJzOiAgICBzaW1wbGUtdHJhbnNmb3JtLCBjcmVhdGUtdHJhbnNmb3JtXG4vLyBwZXJzcGVjdGl2ZVxuLy8gIC0gaGVscGVyczogICAgcGVyc3BlY3RpdmUtb3JpZ2luXG4vLyB0cmFuc2Zvcm0tc3R5bGVcbi8vIGJhY2tmYWNlLXZpc2liaWxpdHlcbi8vIHNjYWxlXG4vLyAgLSBzaG9ydGN1dHM6ICBzY2FsZVgsIHNjYWxlWSwgc2NhbGVaLCBzY2FsZTNkXG4vLyByb3RhdGVcbi8vICAtIHNob3J0Y3V0czogIHJvdGF0ZVgsIHJvdGF0ZVksIHJvdGF0ZTNkXG4vLyB0cmFuc2xhdGVcbi8vICAtIHNob3J0Y3V0czogIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIHRyYW5zbGF0ZVosIHRyYW5zbGF0ZTNkXG4vLyBza2V3XG4vLyAgLSBzaG9ydGN1dHM6ICBza2V3WCwgc2tld1lcblxuLy8gRGVmYXVsdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAZG9jIG9uXG5cbi8vIFRoZSBkZWZhdWx0IHgtb3JpZ2luIGZvciB0cmFuc2Zvcm1zXG4kZGVmYXVsdC1vcmlnaW4teCAgICA6IDUwJSAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIFRoZSBkZWZhdWx0IHktb3JpZ2luIGZvciB0cmFuc2Zvcm1zXG4kZGVmYXVsdC1vcmlnaW4teSAgICA6IDUwJSAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIFRoZSBkZWZhdWx0IHotb3JpZ2luIGZvciB0cmFuc2Zvcm1zXG4kZGVmYXVsdC1vcmlnaW4teiAgICA6IDUwJSAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuXG4vLyBUaGUgZGVmYXVsdCB4LW11bHRpcGxpZXIgZm9yIHNjYWxpbmdcbiRkZWZhdWx0LXNjYWxlLXggICAgIDogMS4yNSAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuLy8gVGhlIGRlZmF1bHQgeS1tdWx0aXBsaWVyIGZvciBzY2FsaW5nXG4kZGVmYXVsdC1zY2FsZS15ICAgICA6ICRkZWZhdWx0LXNjYWxlLXggICAgICAhZGVmYXVsdDtcbi8vIFRoZSBkZWZhdWx0IHotbXVsdGlwbGllciBmb3Igc2NhbGluZ1xuJGRlZmF1bHQtc2NhbGUteiAgICAgOiAkZGVmYXVsdC1zY2FsZS14ICAgICAgIWRlZmF1bHQ7XG5cblxuLy8gVGhlIGRlZmF1bHQgYW5nbGUgZm9yIHJvdGF0aW9uc1xuJGRlZmF1bHQtcm90YXRlICAgICAgOiA0NWRlZyAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuLy8gVGhlIGRlZmF1bHQgeC12ZWN0b3IgZm9yIHRoZSBheGlzIG9mIDNkIHJvdGF0aW9uc1xuJGRlZmF1bHQtdmVjdG9yLXggICAgOiAxICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4vLyBUaGUgZGVmYXVsdCB5LXZlY3RvciBmb3IgdGhlIGF4aXMgb2YgM2Qgcm90YXRpb25zXG4kZGVmYXVsdC12ZWN0b3IteSAgICA6IDEgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIFRoZSBkZWZhdWx0IHotdmVjdG9yIGZvciB0aGUgYXhpcyBvZiAzZCByb3RhdGlvbnNcbiRkZWZhdWx0LXZlY3Rvci16ICAgIDogMSAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cbi8vIFRoZSBkZWZhdWx0IHgtbGVuZ3RoIGZvciB0cmFuc2xhdGlvbnNcbiRkZWZhdWx0LXRyYW5zbGF0ZS14IDogMWVtICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuLy8gVGhlIGRlZmF1bHQgeS1sZW5ndGggZm9yIHRyYW5zbGF0aW9uc1xuJGRlZmF1bHQtdHJhbnNsYXRlLXkgOiAkZGVmYXVsdC10cmFuc2xhdGUteCAgIWRlZmF1bHQ7XG4vLyBUaGUgZGVmYXVsdCB6LWxlbmd0aCBmb3IgdHJhbnNsYXRpb25zXG4kZGVmYXVsdC10cmFuc2xhdGUteiA6ICRkZWZhdWx0LXRyYW5zbGF0ZS14ICAhZGVmYXVsdDtcblxuXG4vLyBUaGUgZGVmYXVsdCB4LWFuZ2xlIGZvciBza2V3aW5nXG4kZGVmYXVsdC1za2V3LXggICAgICA6IDVkZWcgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbi8vIFRoZSBkZWZhdWx0IHktYW5nbGUgZm9yIHNrZXdpbmdcbiRkZWZhdWx0LXNrZXcteSAgICAgIDogNWRlZyAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cbi8vICoqVHJhbnNmb3JtLW9yaWdpbioqXG4vLyBUcmFuc2Zvcm0tb3JpZ2luIHNlbnQgYXMgYSBjb21wbGV0ZSBzdHJpbmdcbi8vXG4vLyAgICAgQGluY2x1ZGUgYXBwbHktb3JpZ2luKCBvcmlnaW4gWywgM0Qtb25seSBdIClcbi8vXG4vLyB3aGVyZSAnb3JpZ2luJyBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IGNvbnRhaW5pbmcgMS0zICh4L3kveikgY29vcmRpbmF0ZXNcbi8vIGluIHBlcmNlbnRhZ2VzLCBhYnNvbHV0ZSAocHgsIGNtLCBpbiwgZW0gZXRjLi4pIG9yIHJlbGF0aXZlXG4vLyAobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBjZW50ZXIpIHVuaXRzXG4vL1xuLy8gQHBhcmFtIG9ubHkzZCBTZXQgdGhpcyB0byB0cnVlIHRvIG9ubHkgYXBwbHkgdGhpc1xuLy8gbWl4aW4gd2hlcmUgYnJvd3NlcnMgaGF2ZSAzRCBzdXBwb3J0LlxuQG1peGluIGFwcGx5LW9yaWdpbigkb3JpZ2luLCAkb25seTNkKSB7XG4gICRvbmx5M2Q6ICRvbmx5M2Qgb3IgLWNvbXBhc3MtbGlzdC1zaXplKC1jb21wYXNzLWxpc3QoJG9yaWdpbikpID4gMjtcbiAgQGlmICRvbmx5M2Qge1xuICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbCh0cmFuc2Zvcm0tb3JpZ2luLCAkb3JpZ2luLFxuICAgICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICAgKTtcbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKHRyYW5zZm9ybS1vcmlnaW4sICRvcmlnaW4sXG4gICAgICAtbW96LCAtd2Via2l0LCAtbywgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgICApO1xuICB9XG59XG5cbi8vIFRyYW5zZm9ybS1vcmlnaW4gc2VudCBhcyBpbmRpdmlkdWFsIGFyZ3VtZW50czpcbi8vXG4vLyAgICAgQGluY2x1ZGUgdHJhbnNmb3JtLW9yaWdpbiggWyBvcmlnaW4teCwgb3JpZ2luLXksIG9yaWdpbi16LCAzRC1vbmx5IF0gKVxuLy9cbi8vIHdoZXJlIHRoZSAzICdvcmlnaW4tJyBhcmd1bWVudHMgcmVwcmVzZW50IHgveS96IGNvb3JkaW5hdGVzLlxuLy9cbi8vICoqTk9URToqKiBzZXR0aW5nIHogY29vcmRpbmF0ZXMgdHJpZ2dlcnMgM0Qgc3VwcG9ydCBsaXN0LCBsZWF2ZSBmYWxzZSBmb3IgMkQgc3VwcG9ydFxuQG1peGluIHRyYW5zZm9ybS1vcmlnaW4oXG4gICRvcmlnaW4teDogJGRlZmF1bHQtb3JpZ2luLXgsXG4gICRvcmlnaW4teTogJGRlZmF1bHQtb3JpZ2luLXksXG4gICRvcmlnaW4tejogZmFsc2UsXG4gICRvbmx5M2Q6ICAgaWYoJG9yaWdpbi16LCB0cnVlLCBmYWxzZSlcbikge1xuICAkb3JpZ2luOiB1bnF1b3RlKCcnKTtcbiAgQGlmICRvcmlnaW4teCBvciAkb3JpZ2luLXkgb3IgJG9yaWdpbi16IHtcbiAgICBAaWYgJG9yaWdpbi14IHsgJG9yaWdpbjogJG9yaWdpbi14OyB9IEBlbHNlIHsgJG9yaWdpbjogNTAlOyB9XG4gICAgQGlmICRvcmlnaW4teSB7ICRvcmlnaW46ICRvcmlnaW4gJG9yaWdpbi15OyB9IEBlbHNlIHsgQGlmICRvcmlnaW4teiB7ICRvcmlnaW46ICRvcmlnaW4gNTAlOyB9fVxuICAgIEBpZiAkb3JpZ2luLXogeyAkb3JpZ2luOiAkb3JpZ2luICRvcmlnaW4tejsgfVxuICAgIEBpbmNsdWRlIGFwcGx5LW9yaWdpbigkb3JpZ2luLCAkb25seTNkKTtcbiAgfVxufVxuXG5cbi8vIFRyYW5zZm9ybSBzZW50IGFzIGEgY29tcGxldGUgc3RyaW5nOlxuLy9cbi8vICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0oIHRyYW5zZm9ybXMgWywgM0Qtb25seSBdIClcbi8vXG4vLyB3aGVyZSAndHJhbnNmb3JtcycgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBhbGwgdGhlIHRyYW5zZm9ybXMgdG8gYmUgYXBwbGllZC5cbkBtaXhpbiB0cmFuc2Zvcm0oXG4gICR0cmFuc2Zvcm0sXG4gICRvbmx5M2Q6IGZhbHNlXG4pIHtcbiAgQGlmICRvbmx5M2Qge1xuICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbCh0cmFuc2Zvcm0sICR0cmFuc2Zvcm0sXG4gICAgICAtbW96LCAtd2Via2l0LCAtbywgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgICApO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBleHBlcmltZW50YWwodHJhbnNmb3JtLCAkdHJhbnNmb3JtLFxuICAgICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBTaG9ydGN1dCB0byB0YXJnZXQgYWxsIGJyb3dzZXJzIHdpdGggMkQgdHJhbnNmb3JtIHN1cHBvcnRcbkBtaXhpbiB0cmFuc2Zvcm0yZCgkdHJhbnMpIHtcbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgZmFsc2UpO1xufVxuXG4vLyBTaG9ydGN1dCB0byB0YXJnZXQgb25seSBicm93c2VycyB3aXRoIDNEIHRyYW5zZm9ybSBzdXBwb3J0XG5AbWl4aW4gdHJhbnNmb3JtM2QoJHRyYW5zKSB7XG4gIEBpbmNsdWRlIHRyYW5zZm9ybSgkdHJhbnMsIHRydWUpO1xufVxuXG4vLyBAZG9jIG9mZlxuLy8gM0QgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAZG9jIG9uXG5cbi8vIFNldCB0aGUgcGVyc3BlY3RpdmUgb2YgM0QgdHJhbnNmb3JtcyBvbiB0aGUgY2hpbGRyZW4gb2YgYW4gZWxlbWVudDpcbi8vXG4vLyAgICAgIEBpbmNsdWRlIHBlcnNwZWN0aXZlKCBwZXJzcGVjdGl2ZSApXG4vL1xuLy8gd2hlcmUgJ3BlcnNwZWN0aXZlJyBpcyBhIHVuaXRsZXNzIG51bWJlciByZXByZXNlbnRpbmcgdGhlIGRlcHRoIG9mIHRoZVxuLy8gei1heGlzLiBUaGUgaGlnaGVyIHRoZSBwZXJzcGVjdGl2ZSwgdGhlIG1vcmUgZXhhZ2dlcmF0ZWQgdGhlIGZvcmVzaG9ydGVuaW5nLlxuLy8gdmFsdWVzIGZyb20gNTAwIHRvIDEwMDAgYXJlIG1vcmUtb3ItbGVzcyBcIm5vcm1hbFwiIC0gYSBnb29kIHN0YXJ0aW5nLXBvaW50LlxuQG1peGluIHBlcnNwZWN0aXZlKCRwKSB7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChwZXJzcGVjdGl2ZSwgJHAsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIFNldCB0aGUgb3JpZ2luIHBvc2l0aW9uIGZvciB0aGUgcGVyc3BlY3RpdmVcbi8vXG4vLyAgICAgIEBpbmNsdWRlIHBlcnNwZWN0aXZlLW9yaWdpbihvcmlnaW4teCBbb3JpZ2luLXldKVxuLy9cbi8vIHdoZXJlIHRoZSB0d28gYXJndW1lbnRzIHJlcHJlc2VudCB4L3kgY29vcmRpbmF0ZXNcbkBtaXhpbiBwZXJzcGVjdGl2ZS1vcmlnaW4oJG9yaWdpbjogNTAlKSB7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChwZXJzcGVjdGl2ZS1vcmlnaW4sICRvcmlnaW4sXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIC1tcywgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIERldGVybWluZSB3aGV0aGVyIGEgM0Qgb2JqZWN0cyBjaGlsZHJlbiBhbHNvIGxpdmUgaW4gdGhlIGdpdmVuIDNEIHNwYWNlXG4vL1xuLy8gICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0tc3R5bGUoIFsgc3R5bGUgXSApXG4vL1xuLy8gd2hlcmUgYHN0eWxlYCBjYW4gYmUgZWl0aGVyIGBmbGF0YCBvciBgcHJlc2VydmUtM2RgLlxuLy8gQnJvd3NlcnMgZGVmYXVsdCB0byBgZmxhdGAsIG1peGluIGRlZmF1bHRzIHRvIGBwcmVzZXJ2ZS0zZGAuXG5AbWl4aW4gdHJhbnNmb3JtLXN0eWxlKCRzdHlsZTogcHJlc2VydmUtM2QpIHtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKHRyYW5zZm9ybS1zdHlsZSwgJHN0eWxlLFxuICAgIC1tb3osIC13ZWJraXQsIC1vLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBEZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgYW4gZWxlbWVudCB3aGVuIGl0J3MgYmFjayBpcyB0dXJuZWRcbi8vXG4vLyAgICAgQGluY2x1ZGUgYmFja2ZhY2UtdmlzaWJpbGl0eSggWyB2aXNpYmlsaXR5IF0gKVxuLy9cbi8vIHdoZXJlIGB2aXNpYmlsaXR5YCBjYW4gYmUgZWl0aGVyIGB2aXNpYmxlYCBvciBgaGlkZGVuYC5cbi8vIEJyb3dzZXJzIGRlZmF1bHQgdG8gdmlzaWJsZSwgbWl4aW4gZGVmYXVsdHMgdG8gaGlkZGVuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmlzaWJpbGl0eTogaGlkZGVuKSB7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChiYWNrZmFjZS12aXNpYmlsaXR5LCAkdmlzaWJpbGl0eSxcbiAgICAtbW96LCAtd2Via2l0LCAtbywgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gQGRvYyBvZmZcbi8vIFRyYW5zZm9ybSBQYXJ0aWFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlc2Ugd29yayB3ZWxsIG9uIHRoZWlyIG93biwgYnV0IHRoZXkgZG9uJ3QgYWRkIHRvIGVhY2ggb3RoZXIsIHRoZXkgb3ZlcnJpZGUuXG4vLyBVc2UgYWxvbmcgd2l0aCB0cmFuc2Zvcm0gcGFyYW1ldGVyIG1peGlucyB0byBhZGp1c3Qgb3JpZ2luLCBwZXJzcGVjdGl2ZSBhbmQgc3R5bGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIFNjYWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGRvYyBvblxuXG4vLyBTY2FsZSBhbiBvYmplY3QgYWxvbmcgdGhlIHggYW5kIHkgYXhpczpcbi8vXG4vLyAgICAgIEBpbmNsdWRlIHNjYWxlKCBbIHNjYWxlLXgsIHNjYWxlLXksIHBlcnNwZWN0aXZlLCAzRC1vbmx5IF0gKVxuLy9cbi8vIHdoZXJlIHRoZSAnc2NhbGUtJyBhcmd1bWVudHMgYXJlIHVuaXRsZXNzIG11bHRpcGxpZXJzIG9mIHRoZSB4IGFuZCB5IGRpbWVuc2lvbnNcbi8vIGFuZCBwZXJzcGVjdGl2ZSwgd2hpY2ggd29ya3MgdGhlIHNhbWUgYXMgdGhlIHN0YW5kLWFsb25lIHBlcnNwZWN0aXZlIHByb3BlcnR5L21peGluXG4vLyBidXQgYXBwbGllcyB0byB0aGUgaW5kaXZpZHVhbCBlbGVtZW50IChtdWx0aXBsaWVkIHdpdGggYW55IHBhcmVudCBwZXJzcGVjdGl2ZSlcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gc2NhbGUoXG4gICRzY2FsZS14OiAgICAgJGRlZmF1bHQtc2NhbGUteCxcbiAgJHNjYWxlLXk6ICAgICAkc2NhbGUteCxcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZSxcbiAgJG9ubHkzZDogICAgICBmYWxzZVxuKSB7XG4gICR0cmFuczogc2NhbGUoJHNjYWxlLXgsICRzY2FsZS15KTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG59XG5cbi8vIFNjYWxlIGFuIG9iamVjdCBhbG9uZyB0aGUgeCBheGlzXG4vLyBAaW5jbHVkZSBzY2FsZVgoIFsgc2NhbGUteCwgcGVyc3BlY3RpdmUsIDNELW9ubHkgXSApXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHNjYWxlWChcbiAgJHNjYWxlOiAgICAgICAkZGVmYXVsdC1zY2FsZS14LFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlLFxuICAkb25seTNkOiAgICAgIGZhbHNlXG4pIHtcbiAgJHRyYW5zOiBzY2FsZVgoJHNjYWxlKTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG59XG5cbi8vIFNjYWxlIGFuIG9iamVjdCBhbG9uZyB0aGUgeSBheGlzXG4vLyBAaW5jbHVkZSBzY2FsZVkoIFsgc2NhbGUteSwgcGVyc3BlY3RpdmUsIDNELW9ubHkgXSApXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHNjYWxlWShcbiAgJHNjYWxlOiAgICAgICAkZGVmYXVsdC1zY2FsZS15LFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlLFxuICAkb25seTNkOiAgICAgIGZhbHNlXG4pIHtcbiAgJHRyYW5zOiBzY2FsZVkoJHNjYWxlKTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG59XG5cbi8vIFNjYWxlIGFuIG9iamVjdCBhbG9uZyB0aGUgeiBheGlzXG4vLyBAaW5jbHVkZSBzY2FsZVooIFsgc2NhbGUteiwgcGVyc3BlY3RpdmUgXSApXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHNjYWxlWihcbiAgJHNjYWxlOiAkZGVmYXVsdC1zY2FsZS16LFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlXG4pIHtcbiAgJHRyYW5zOiBzY2FsZVooJHNjYWxlKTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtM2QoJHRyYW5zKTtcbn1cblxuLy8gU2NhbGUgYW5kIG9iamVjdCBhbG9uZyBhbGwgdGhyZWUgYXhpc1xuLy8gQGluY2x1ZGUgc2NhbGUzZCggWyBzY2FsZS14LCBzY2FsZS15LCBzY2FsZS16LCBwZXJzcGVjdGl2ZSBdIClcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gc2NhbGUzZChcbiAgJHNjYWxlLXg6ICAgICAkZGVmYXVsdC1zY2FsZS14LFxuICAkc2NhbGUteTogICAgICRkZWZhdWx0LXNjYWxlLXksXG4gICRzY2FsZS16OiAgICAgJGRlZmF1bHQtc2NhbGUteixcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZVxuKSB7XG4gICR0cmFuczogc2NhbGUzZCgkc2NhbGUteCwgJHNjYWxlLXksICRzY2FsZS16KTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtM2QoJHRyYW5zKTtcbn1cblxuLy8gQGRvYyBvZmZcbi8vIFJvdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGRvYyBvblxuXG4vLyBSb3RhdGUgYW4gb2JqZWN0IGFyb3VuZCB0aGUgeiBheGlzICAoMkQpXG4vLyBAaW5jbHVkZSByb3RhdGUoIFsgcm90YXRpb24sIHBlcnNwZWN0aXZlLCAzRC1vbmx5IF0gKVxuLy8gd2hlcmUgJ3JvdGF0aW9uJyBpcyBhbiBhbmdsZSBzZXQgaW4gZGVncmVlcyAoZGVnKSBvciByYWRpYW4gKHJhZCkgdW5pdHNcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gcm90YXRlKFxuICAkcm90YXRlOiAgICAgICRkZWZhdWx0LXJvdGF0ZSxcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZSxcbiAgJG9ubHkzZDogICAgICBmYWxzZVxuKSB7XG4gICR0cmFuczogcm90YXRlKCRyb3RhdGUpO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0oJHRyYW5zLCAkb25seTNkKTtcbn1cblxuLy8gQSBsb25nY3V0IGZvciAncm90YXRlJyBpbiBjYXNlIHlvdSBmb3JnZXQgdGhhdCAneicgaXMgaW1wbGllZFxuLy9cbi8vICoqTm90ZSoqIFRoaXMgbWl4aW4gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgdHJhbnNmb3JtIG1peGlucy5cbkBtaXhpbiByb3RhdGVaKFxuICAkcm90YXRlOiAgICAgICRkZWZhdWx0LXJvdGF0ZSxcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZSxcbiAgJG9ubHkzZDogICAgICBmYWxzZVxuKSB7XG4gIEBpbmNsdWRlIHJvdGF0ZSgkcm90YXRlLCAkcGVyc3BlY3RpdmUsICRvbmx5M2QpO1xufVxuXG4vLyBSb3RhdGUgYW4gb2JqZWN0IGFyb3VuZCB0aGUgeCBheGlzICgzRClcbi8vIEBpbmNsdWRlIHJvdGF0ZVgoIFsgcm90YXRpb24sIHBlcnNwZWN0aXZlIF0gKVxuLy9cbi8vICoqTm90ZSoqIFRoaXMgbWl4aW4gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgdHJhbnNmb3JtIG1peGlucy5cbkBtaXhpbiByb3RhdGVYKFxuICAkcm90YXRlOiAkZGVmYXVsdC1yb3RhdGUsXG4gICRwZXJzcGVjdGl2ZTogZmFsc2Vcbikge1xuICAkdHJhbnM6IHJvdGF0ZVgoJHJvdGF0ZSk7XG4gIEBpZiAkcGVyc3BlY3RpdmUgeyAkdHJhbnM6IHBlcnNwZWN0aXZlKCRwZXJzcGVjdGl2ZSkgJHRyYW5zOyB9XG4gIEBpbmNsdWRlIHRyYW5zZm9ybTNkKCR0cmFucyk7XG59XG5cbi8vIFJvdGF0ZSBhbiBvYmplY3QgYXJvdW5kIHRoZSB5IGF4aXMgKDNEKVxuLy8gQGluY2x1ZGUgcm90YXRlKCBbIHJvdGF0aW9uLCBwZXJzcGVjdGl2ZSBdIClcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gcm90YXRlWShcbiAgJHJvdGF0ZTogJGRlZmF1bHQtcm90YXRlLFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlXG4pIHtcbiAgJHRyYW5zOiByb3RhdGVZKCRyb3RhdGUpO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0zZCgkdHJhbnMpO1xufVxuXG4vLyBSb3RhdGUgYW4gb2JqZWN0IGFyb3VuZCBhbiBhcmJpdHJhcnkgYXhpcyAoM0QpXG4vLyBAaW5jbHVkZSByb3RhdGUoIFsgdmVjdG9yLXgsIHZlY3Rvci15LCB2ZWN0b3Iteiwgcm90YXRpb24sIHBlcnNwZWN0aXZlIF0gKVxuLy8gd2hlcmUgdGhlICd2ZWN0b3ItJyBhcmd1bWVudHMgYWNjZXB0IHVuaXRsZXNzIG51bWJlcnMuXG4vLyBUaGVzZSBudW1iZXJzIGFyZSBub3QgaW1wb3J0YW50IG9uIHRoZWlyIG93biwgYnV0IGluIHJlbGF0aW9uIHRvIG9uZSBhbm90aGVyXG4vLyBjcmVhdGluZyBhbiBheGlzIGZyb20geW91ciB0cmFuc2Zvcm0tb3JpZ2luLCBhbG9uZyB0aGUgYXhpcyBvZiBYeCA9IFl5ID0gWnouXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHJvdGF0ZTNkKFxuICAkdmVjdG9yLXg6ICRkZWZhdWx0LXZlY3Rvci14LFxuICAkdmVjdG9yLXk6ICRkZWZhdWx0LXZlY3Rvci15LFxuICAkdmVjdG9yLXo6ICRkZWZhdWx0LXZlY3Rvci16LFxuICAkcm90YXRlOiAkZGVmYXVsdC1yb3RhdGUsXG4gICRwZXJzcGVjdGl2ZTogZmFsc2Vcbikge1xuICAkdHJhbnM6IHJvdGF0ZTNkKCR2ZWN0b3IteCwgJHZlY3Rvci15LCAkdmVjdG9yLXosICRyb3RhdGUpO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0zZCgkdHJhbnMpO1xufVxuXG4vLyBAZG9jIG9mZlxuLy8gVHJhbnNsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAZG9jIG9uXG5cbi8vIE1vdmUgYW4gb2JqZWN0IGFsb25nIHRoZSB4IG9yIHkgYXhpcyAoMkQpXG4vLyBAaW5jbHVkZSB0cmFuc2xhdGUoIFsgdHJhbnNsYXRlLXgsIHRyYW5zbGF0ZS15LCBwZXJzcGVjdGl2ZSwgM0Qtb25seSBdIClcbi8vIHdoZXJlIHRoZSAndHJhbnNsYXRlLScgYXJndW1lbnRzIGFjY2VwdCBhbnkgZGlzdGFuY2UgaW4gcGVyY2VudGFnZXMgb3IgYWJzb2x1dGUgKHB4LCBjbSwgaW4sIGVtIGV0Yy4uKSB1bml0cy5cbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gdHJhbnNsYXRlKFxuICAkdHJhbnNsYXRlLXg6ICRkZWZhdWx0LXRyYW5zbGF0ZS14LFxuICAkdHJhbnNsYXRlLXk6ICRkZWZhdWx0LXRyYW5zbGF0ZS15LFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlLFxuICAkb25seTNkOiAgICAgIGZhbHNlXG4pIHtcbiAgJHRyYW5zOiB0cmFuc2xhdGUoJHRyYW5zbGF0ZS14LCAkdHJhbnNsYXRlLXkpO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0oJHRyYW5zLCAkb25seTNkKTtcbn1cblxuLy8gTW92ZSBhbiBvYmplY3QgYWxvbmcgdGhlIHggYXhpcyAoMkQpXG4vLyBAaW5jbHVkZSB0cmFuc2xhdGUoIFsgdHJhbnNsYXRlLXgsIHBlcnNwZWN0aXZlLCAzRC1vbmx5IF0gKVxuLy9cbi8vICoqTm90ZSoqIFRoaXMgbWl4aW4gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgdHJhbnNmb3JtIG1peGlucy5cbkBtaXhpbiB0cmFuc2xhdGVYKFxuICAkdHJhbnMteDogICAgICRkZWZhdWx0LXRyYW5zbGF0ZS14LFxuICAkcGVyc3BlY3RpdmU6IGZhbHNlLFxuICAkb25seTNkOiAgICAgIGZhbHNlXG4pIHtcbiAgJHRyYW5zOiB0cmFuc2xhdGVYKCR0cmFucy14KTtcbiAgQGlmICRwZXJzcGVjdGl2ZSB7ICR0cmFuczogcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSAkdHJhbnM7IH1cbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG59XG5cbi8vIE1vdmUgYW4gb2JqZWN0IGFsb25nIHRoZSB5IGF4aXMgKDJEKVxuLy8gQGluY2x1ZGUgdHJhbnNsYXRlKCBbIHRyYW5zbGF0ZS15LCBwZXJzcGVjdGl2ZSwgM0Qtb25seSBdIClcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gdHJhbnNsYXRlWShcbiAgJHRyYW5zLXk6ICAgICAkZGVmYXVsdC10cmFuc2xhdGUteSxcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZSxcbiAgJG9ubHkzZDogICAgICBmYWxzZVxuKSB7XG4gICR0cmFuczogdHJhbnNsYXRlWSgkdHJhbnMteSk7XG4gIEBpZiAkcGVyc3BlY3RpdmUgeyAkdHJhbnM6IHBlcnNwZWN0aXZlKCRwZXJzcGVjdGl2ZSkgJHRyYW5zOyB9XG4gIEBpbmNsdWRlIHRyYW5zZm9ybSgkdHJhbnMsICRvbmx5M2QpO1xufVxuXG4vLyBNb3ZlIGFuIG9iamVjdCBhbG9uZyB0aGUgeiBheGlzICgzRClcbi8vIEBpbmNsdWRlIHRyYW5zbGF0ZSggWyB0cmFuc2xhdGUteiwgcGVyc3BlY3RpdmUgXSApXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHRyYW5zbGF0ZVooXG4gICR0cmFucy16OiAgICAgJGRlZmF1bHQtdHJhbnNsYXRlLXosXG4gICRwZXJzcGVjdGl2ZTogZmFsc2Vcbikge1xuICAkdHJhbnM6IHRyYW5zbGF0ZVooJHRyYW5zLXopO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0zZCgkdHJhbnMpO1xufVxuXG4vLyBNb3ZlIGFuIG9iamVjdCBhbG9uZyB0aGUgeCwgeSBhbmQgeiBheGlzICgzRClcbi8vIEBpbmNsdWRlIHRyYW5zbGF0ZSggWyB0cmFuc2xhdGUteCwgdHJhbnNsYXRlLXksIHRyYW5zbGF0ZS16LCBwZXJzcGVjdGl2ZSBdIClcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gdHJhbnNsYXRlM2QoXG4gICR0cmFuc2xhdGUteDogJGRlZmF1bHQtdHJhbnNsYXRlLXgsXG4gICR0cmFuc2xhdGUteTogJGRlZmF1bHQtdHJhbnNsYXRlLXksXG4gICR0cmFuc2xhdGUtejogJGRlZmF1bHQtdHJhbnNsYXRlLXosXG4gICRwZXJzcGVjdGl2ZTogZmFsc2Vcbikge1xuICAkdHJhbnM6IHRyYW5zbGF0ZTNkKCR0cmFuc2xhdGUteCwgJHRyYW5zbGF0ZS15LCAkdHJhbnNsYXRlLXopO1xuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpICR0cmFuczsgfVxuICBAaW5jbHVkZSB0cmFuc2Zvcm0zZCgkdHJhbnMpO1xufVxuXG4vLyBAZG9jIG9mZlxuLy8gU2tldyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAZG9jIG9uXG5cbi8vIFNrZXcgYW4gZWxlbWVudDpcbi8vXG4vLyAgICAgQGluY2x1ZGUgc2tldyggWyBza2V3LXgsIHNrZXcteSwgM0Qtb25seSBdIClcbi8vXG4vLyB3aGVyZSB0aGUgJ3NrZXctJyBhcmd1bWVudHMgYWNjZXB0IGNzcyBhbmdsZXMgaW4gZGVncmVlcyAoZGVnKSBvciByYWRpYW4gKHJhZCkgdW5pdHMuXG4vL1xuLy8gKipOb3RlKiogVGhpcyBtaXhpbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB0cmFuc2Zvcm0gbWl4aW5zLlxuQG1peGluIHNrZXcoXG4gICRza2V3LXg6ICRkZWZhdWx0LXNrZXcteCxcbiAgJHNrZXcteTogJGRlZmF1bHQtc2tldy15LFxuICAkb25seTNkOiBmYWxzZVxuKSB7XG4gICR0cmFuczogc2tldygkc2tldy14LCAkc2tldy15KTtcbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG59XG5cbi8vIFNrZXcgYW4gZWxlbWVudCBhbG9uZyB0aGUgeCBheGl6XG4vL1xuLy8gICAgIEBpbmNsdWRlIHNrZXcoIFsgc2tldy14LCAzRC1vbmx5IF0gKVxuLy9cbi8vICoqTm90ZSoqIFRoaXMgbWl4aW4gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgdHJhbnNmb3JtIG1peGlucy5cbkBtaXhpbiBza2V3WChcbiAgJHNrZXcteDogJGRlZmF1bHQtc2tldy14LFxuICAkb25seTNkOiBmYWxzZVxuKSB7XG4gICR0cmFuczogc2tld1goJHNrZXcteCk7XG4gIEBpbmNsdWRlIHRyYW5zZm9ybSgkdHJhbnMsICRvbmx5M2QpO1xufVxuXG4vLyBTa2V3IGFuIGVsZW1lbnQgYWxvbmcgdGhlIHkgYXhpc1xuLy9cbi8vICAgICBAaW5jbHVkZSBza2V3KCBbIHNrZXcteSwgM0Qtb25seSBdIClcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gc2tld1koXG4gICRza2V3LXk6ICRkZWZhdWx0LXNrZXcteSxcbiAgJG9ubHkzZDogZmFsc2Vcbikge1xuICAkdHJhbnM6IHNrZXdZKCRza2V3LXkpO1xuICBAaW5jbHVkZSB0cmFuc2Zvcm0oJHRyYW5zLCAkb25seTNkKTtcbn1cblxuXG4vLyBGdWxsIHRyYW5zZm9ybSBtaXhpbnNcbi8vIEZvciBzZXR0aW5ncyBhbnkgY29tYmluYXRpb24gb2YgdHJhbnNmb3JtcyBhcyBhcmd1bWVudHNcbi8vIFRoZXNlIGFyZSBjb21wbGV4IGFuZCBub3QgaGlnaGx5IHJlY29tbWVuZGVkIGZvciBkYWlseSB1c2UuIFRoZXkgYXJlIG1haW5seVxuLy8gaGVyZSBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbi8vXG4vLyAqIHRoZXkgaW5jbHVkZSBvcmlnaW4gYWRqdXN0bWVudHNcbi8vICogc2NhbGUgdGFrZXMgYSBtdWx0aXBsaWVyICh1bml0bGVzcyksIHJvdGF0ZSBhbmQgc2tldyB0YWtlIGRlZ3JlZXMgKGRlZylcbi8vXG4vLyAqKk5vdGUqKiBUaGlzIG1peGluIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHRyYW5zZm9ybSBtaXhpbnMuXG5AbWl4aW4gY3JlYXRlLXRyYW5zZm9ybShcbiAgJHBlcnNwZWN0aXZlOiBmYWxzZSxcbiAgJHNjYWxlLXg6ICAgICBmYWxzZSxcbiAgJHNjYWxlLXk6ICAgICBmYWxzZSxcbiAgJHNjYWxlLXo6ICAgICBmYWxzZSxcbiAgJHJvdGF0ZS14OiAgICBmYWxzZSxcbiAgJHJvdGF0ZS15OiAgICBmYWxzZSxcbiAgJHJvdGF0ZS16OiAgICBmYWxzZSxcbiAgJHJvdGF0ZTNkOiAgICBmYWxzZSxcbiAgJHRyYW5zLXg6ICAgICBmYWxzZSxcbiAgJHRyYW5zLXk6ICAgICBmYWxzZSxcbiAgJHRyYW5zLXo6ICAgICBmYWxzZSxcbiAgJHNrZXcteDogICAgICBmYWxzZSxcbiAgJHNrZXcteTogICAgICBmYWxzZSxcbiAgJG9yaWdpbi14OiAgICBmYWxzZSxcbiAgJG9yaWdpbi15OiAgICBmYWxzZSxcbiAgJG9yaWdpbi16OiAgICBmYWxzZSxcbiAgJG9ubHkzZDogICAgICBmYWxzZVxuKSB7XG4gICR0cmFuczogdW5xdW90ZShcIlwiKTtcblxuICAvLyBwZXJzcGVjdGl2ZVxuICBAaWYgJHBlcnNwZWN0aXZlIHsgJHRyYW5zOiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIDsgfVxuXG4gIC8vIHNjYWxlXG4gIEBpZiAkc2NhbGUteCBhbmQgJHNjYWxlLXkge1xuICAgIEBpZiAkc2NhbGUteiB7ICR0cmFuczogJHRyYW5zIHNjYWxlM2QoJHNjYWxlLXgsICRzY2FsZS15LCAkc2NhbGUteik7IH1cbiAgICBAZWxzZSB7ICR0cmFuczogJHRyYW5zIHNjYWxlKCRzY2FsZS14LCAkc2NhbGUteSk7IH1cbiAgfSBAZWxzZSB7XG4gICAgQGlmICRzY2FsZS14IHsgJHRyYW5zOiAkdHJhbnMgc2NhbGVYKCRzY2FsZS14KTsgfVxuICAgIEBpZiAkc2NhbGUteSB7ICR0cmFuczogJHRyYW5zIHNjYWxlWSgkc2NhbGUteSk7IH1cbiAgICBAaWYgJHNjYWxlLXogeyAkdHJhbnM6ICR0cmFucyBzY2FsZVooJHNjYWxlLXopOyB9XG4gIH1cblxuICAvLyByb3RhdGVcbiAgQGlmICRyb3RhdGUteCB7ICR0cmFuczogJHRyYW5zIHJvdGF0ZVgoJHJvdGF0ZS14KTsgfVxuICBAaWYgJHJvdGF0ZS15IHsgJHRyYW5zOiAkdHJhbnMgcm90YXRlWSgkcm90YXRlLXkpOyB9XG4gIEBpZiAkcm90YXRlLXogeyAkdHJhbnM6ICR0cmFucyByb3RhdGVaKCRyb3RhdGUteik7IH1cbiAgQGlmICRyb3RhdGUzZCB7ICR0cmFuczogJHRyYW5zIHJvdGF0ZTNkKCRyb3RhdGUzZCk7IH1cblxuICAvLyB0cmFuc2xhdGVcbiAgQGlmICR0cmFucy14IGFuZCAkdHJhbnMteSB7XG4gICAgQGlmICR0cmFucy16IHsgJHRyYW5zOiAkdHJhbnMgdHJhbnNsYXRlM2QoJHRyYW5zLXgsICR0cmFucy15LCAkdHJhbnMteik7IH1cbiAgICBAZWxzZSB7ICR0cmFuczogJHRyYW5zIHRyYW5zbGF0ZSgkdHJhbnMteCwgJHRyYW5zLXkpOyB9XG4gIH0gQGVsc2Uge1xuICAgIEBpZiAkdHJhbnMteCB7ICR0cmFuczogJHRyYW5zIHRyYW5zbGF0ZVgoJHRyYW5zLXgpOyB9XG4gICAgQGlmICR0cmFucy15IHsgJHRyYW5zOiAkdHJhbnMgdHJhbnNsYXRlWSgkdHJhbnMteSk7IH1cbiAgICBAaWYgJHRyYW5zLXogeyAkdHJhbnM6ICR0cmFucyB0cmFuc2xhdGVaKCR0cmFucy16KTsgfVxuICB9XG5cbiAgLy8gc2tld1xuICBAaWYgJHNrZXcteCBhbmQgJHNrZXcteSB7ICR0cmFuczogJHRyYW5zIHNrZXcoJHNrZXcteCwgJHNrZXcteSk7IH1cbiAgQGVsc2Uge1xuICAgIEBpZiAkc2tldy14IHsgJHRyYW5zOiAkdHJhbnMgc2tld1goJHNrZXcteCk7IH1cbiAgICBAaWYgJHNrZXcteSB7ICR0cmFuczogJHRyYW5zIHNrZXdZKCRza2V3LXkpOyB9XG4gIH1cblxuICAvLyBhcHBseSBpdCFcbiAgQGluY2x1ZGUgdHJhbnNmb3JtKCR0cmFucywgJG9ubHkzZCk7XG4gIEBpbmNsdWRlIHRyYW5zZm9ybS1vcmlnaW4oJG9yaWdpbi14LCAkb3JpZ2luLXksICRvcmlnaW4teiwgJG9ubHkzZCk7XG59XG5cblxuLy8gQSBzaW1wbGlmaWVkIHNldCBvZiBvcHRpb25zXG4vLyBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSAndHJhbnNmb3JtJyBtaXhpblxuQG1peGluIHNpbXBsZS10cmFuc2Zvcm0oXG4gICRzY2FsZTogICAgZmFsc2UsXG4gICRyb3RhdGU6ICAgZmFsc2UsXG4gICR0cmFucy14OiAgZmFsc2UsXG4gICR0cmFucy15OiAgZmFsc2UsXG4gICRza2V3LXg6ICAgZmFsc2UsXG4gICRza2V3LXk6ICAgZmFsc2UsXG4gICRvcmlnaW4teDogZmFsc2UsXG4gICRvcmlnaW4teTogZmFsc2Vcbikge1xuICBAaW5jbHVkZSBjcmVhdGUtdHJhbnNmb3JtKFxuICAgIGZhbHNlLFxuICAgICRzY2FsZSwgJHNjYWxlLCBmYWxzZSxcbiAgICBmYWxzZSwgZmFsc2UsICRyb3RhdGUsIGZhbHNlLFxuICAgICR0cmFucy14LCAkdHJhbnMteSwgZmFsc2UsXG4gICAgJHNrZXcteCwgJHNrZXcteSxcbiAgICAkb3JpZ2luLXgsICRvcmlnaW4teSwgZmFsc2UsXG4gICAgZmFsc2VcbiAgKTtcbn1cbiIsIkBpbXBvcnQgXCJzaGFyZWRcIjtcblxuLy8gQ1NTIFRyYW5zaXRpb25zXG4vLyBDdXJyZW50bHkgb25seSB3b3JrcyBpbiBXZWJraXQuXG4vL1xuLy8gKiBleHBlY3RlZCBpbiBDU1MzLCBGaXJlRm94IDMuNi83IGFuZCBPcGVyYSBQcmVzdG8gMi4zXG4vLyAqIFdlJ2xsIGJlIHByZXBhcmVkLlxuLy9cbi8vIEluY2x1ZGluZyB0aGlzIHN1Ym1vZHVsZSBzZXRzIGZvbGxvd2luZyBkZWZhdWx0cyBmb3IgdGhlIG1peGluczpcbi8vXG4vLyAgICAgJGRlZmF1bHQtdHJhbnNpdGlvbi1wcm9wZXJ0eSA6IGFsbFxuLy8gICAgICRkZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24gOiAxc1xuLy8gICAgICRkZWZhdWx0LXRyYW5zaXRpb24tZnVuY3Rpb24gOiBmYWxzZVxuLy8gICAgICRkZWZhdWx0LXRyYW5zaXRpb24tZGVsYXkgICAgOiBmYWxzZVxuLy9cbi8vIE92ZXJyaWRlIHRoZW0gaWYgeW91IGxpa2UuIFRpbWluZy1mdW5jdGlvbiBhbmQgZGVsYXkgYXJlIHNldCB0byBmYWxzZSBmb3IgYnJvd3NlciBkZWZhdWx0cyAoZWFzZSwgMHMpLlxuXG4kZGVmYXVsdC10cmFuc2l0aW9uLXByb3BlcnR5OiBhbGwgIWRlZmF1bHQ7XG5cbiRkZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246IDFzICFkZWZhdWx0O1xuXG4kZGVmYXVsdC10cmFuc2l0aW9uLWZ1bmN0aW9uOiBmYWxzZSAhZGVmYXVsdDtcblxuJGRlZmF1bHQtdHJhbnNpdGlvbi1kZWxheTogZmFsc2UgIWRlZmF1bHQ7XG5cbiR0cmFuc2l0aW9uYWJsZS1wcmVmaXhlZC12YWx1ZXM6IHRyYW5zZm9ybSwgdHJhbnNmb3JtLW9yaWdpbiAhZGVmYXVsdDtcblxuLy8gT25lIG9yIG1vcmUgcHJvcGVydGllcyB0byB0cmFuc2l0aW9uXG4vL1xuLy8gKiBmb3IgbXVsdGlwbGUsIHVzZSBhIGNvbW1hLWRlbGltaXRlZCBsaXN0XG4vLyAqIGFsc28gYWNjZXB0cyBcImFsbFwiIG9yIFwibm9uZVwiXG5cbkBtaXhpbiB0cmFuc2l0aW9uLXByb3BlcnR5KCRwcm9wZXJ0eS0xOiAkZGVmYXVsdC10cmFuc2l0aW9uLXByb3BlcnR5LFxuICAkcHJvcGVydHktMiA6IGZhbHNlLFxuICAkcHJvcGVydHktMyA6IGZhbHNlLFxuICAkcHJvcGVydHktNCA6IGZhbHNlLFxuICAkcHJvcGVydHktNSA6IGZhbHNlLFxuICAkcHJvcGVydHktNiA6IGZhbHNlLFxuICAkcHJvcGVydHktNyA6IGZhbHNlLFxuICAkcHJvcGVydHktOCA6IGZhbHNlLFxuICAkcHJvcGVydHktOSA6IGZhbHNlLFxuICAkcHJvcGVydHktMTA6IGZhbHNlXG4pIHtcbiAgQGlmIHR5cGUtb2YoJHByb3BlcnR5LTEpID09IHN0cmluZyB7ICRwcm9wZXJ0eS0xOiB1bnF1b3RlKCRwcm9wZXJ0eS0xKTsgfVxuICAkcHJvcGVydGllczogY29tcGFjdCgkcHJvcGVydHktMSwgJHByb3BlcnR5LTIsICRwcm9wZXJ0eS0zLCAkcHJvcGVydHktNCwgJHByb3BlcnR5LTUsICRwcm9wZXJ0eS02LCAkcHJvcGVydHktNywgJHByb3BlcnR5LTgsICRwcm9wZXJ0eS05LCAkcHJvcGVydHktMTApO1xuICBAaWYgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHkgOiBwcmVmaXhlZC1mb3ItdHJhbnNpdGlvbigtd2Via2l0LCAkcHJvcGVydGllcyk7IH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgICAgICAgICAgLW1vei10cmFuc2l0aW9uLXByb3BlcnR5IDogcHJlZml4ZWQtZm9yLXRyYW5zaXRpb24oLW1veiwgICAgJHByb3BlcnRpZXMpOyB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICB7ICAgICAgICAgICAgLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eSA6IHByZWZpeGVkLWZvci10cmFuc2l0aW9uKC1vLCAgICAgICRwcm9wZXJ0aWVzKTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHkgOiAkcHJvcGVydGllcztcbn1cblxuLy8gT25lIG9yIG1vcmUgZHVyYXRpb25zIGluIHNlY29uZHNcbi8vXG4vLyAqIGZvciBtdWx0aXBsZSwgdXNlIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Rcbi8vICogdGhlc2UgZHVyYXRpb25zIHdpbGwgYWZmZWN0IHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIGxpc3QgcG9zaXRpb25cblxuQG1peGluIHRyYW5zaXRpb24tZHVyYXRpb24oJGR1cmF0aW9uLTE6ICRkZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICRkdXJhdGlvbi0yIDogZmFsc2UsXG4gICRkdXJhdGlvbi0zIDogZmFsc2UsXG4gICRkdXJhdGlvbi00IDogZmFsc2UsXG4gICRkdXJhdGlvbi01IDogZmFsc2UsXG4gICRkdXJhdGlvbi02IDogZmFsc2UsXG4gICRkdXJhdGlvbi03IDogZmFsc2UsXG4gICRkdXJhdGlvbi04IDogZmFsc2UsXG4gICRkdXJhdGlvbi05IDogZmFsc2UsXG4gICRkdXJhdGlvbi0xMDogZmFsc2Vcbikge1xuICBAaWYgdHlwZS1vZigkZHVyYXRpb24tMSkgPT0gc3RyaW5nIHsgJGR1cmF0aW9uLTE6IHVucXVvdGUoJGR1cmF0aW9uLTEpOyB9XG4gICRkdXJhdGlvbnM6IGNvbXBhY3QoJGR1cmF0aW9uLTEsICRkdXJhdGlvbi0yLCAkZHVyYXRpb24tMywgJGR1cmF0aW9uLTQsICRkdXJhdGlvbi01LCAkZHVyYXRpb24tNiwgJGR1cmF0aW9uLTcsICRkdXJhdGlvbi04LCAkZHVyYXRpb24tOSwgJGR1cmF0aW9uLTEwKTtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKHRyYW5zaXRpb24tZHVyYXRpb24sICRkdXJhdGlvbnMsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIG5vdCgtbXMpLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gT25lIG9yIG1vcmUgdGltaW5nIGZ1bmN0aW9uc1xuLy9cbi8vICogWyBlYXNlIHwgbGluZWFyIHwgZWFzZS1pbiB8IGVhc2Utb3V0IHwgZWFzZS1pbi1vdXQgfCBjdWJpYy1iZXppZXIoeDEsIHkxLCB4MiwgeTIpXVxuLy8gKiBGb3IgbXVsdGlwbGUsIHVzZSBhIGNvbW1hLWRlbGltaXRlZCBsaXN0XG4vLyAqIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGVmZmVjdCB0aGUgcHJvcGVydGllcyBpbiB0aGUgc2FtZSBsaXN0IHBvc2l0aW9uXG5cbkBtaXhpbiB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbigkZnVuY3Rpb24tMTogJGRlZmF1bHQtdHJhbnNpdGlvbi1mdW5jdGlvbixcbiAgJGZ1bmN0aW9uLTIgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTMgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTQgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTUgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTYgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTcgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTggOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTkgOiBmYWxzZSxcbiAgJGZ1bmN0aW9uLTEwOiBmYWxzZVxuKSB7XG4gICRmdW5jdGlvbi0xOiB1bnF1b3RlKCRmdW5jdGlvbi0xKTtcbiAgJGZ1bmN0aW9uczogY29tcGFjdCgkZnVuY3Rpb24tMSwgJGZ1bmN0aW9uLTIsICRmdW5jdGlvbi0zLCAkZnVuY3Rpb24tNCwgJGZ1bmN0aW9uLTUsICRmdW5jdGlvbi02LCAkZnVuY3Rpb24tNywgJGZ1bmN0aW9uLTgsICRmdW5jdGlvbi05LCAkZnVuY3Rpb24tMTApO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sICRmdW5jdGlvbnMsXG4gICAgLW1veiwgLXdlYmtpdCwgLW8sIG5vdCgtbXMpLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cblxuLy8gT25lIG9yIG1vcmUgdHJhbnNpdGlvbi1kZWxheXMgaW4gc2Vjb25kc1xuLy9cbi8vICogZm9yIG11bHRpcGxlLCB1c2UgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdFxuLy8gKiB0aGVzZSBkZWxheXMgd2lsbCBlZmZlY3QgdGhlIHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgbGlzdCBwb3NpdGlvblxuXG5AbWl4aW4gdHJhbnNpdGlvbi1kZWxheSgkZGVsYXktMTogJGRlZmF1bHQtdHJhbnNpdGlvbi1kZWxheSxcbiAgJGRlbGF5LTIgOiBmYWxzZSxcbiAgJGRlbGF5LTMgOiBmYWxzZSxcbiAgJGRlbGF5LTQgOiBmYWxzZSxcbiAgJGRlbGF5LTUgOiBmYWxzZSxcbiAgJGRlbGF5LTYgOiBmYWxzZSxcbiAgJGRlbGF5LTcgOiBmYWxzZSxcbiAgJGRlbGF5LTggOiBmYWxzZSxcbiAgJGRlbGF5LTkgOiBmYWxzZSxcbiAgJGRlbGF5LTEwOiBmYWxzZVxuKSB7XG4gIEBpZiB0eXBlLW9mKCRkZWxheS0xKSA9PSBzdHJpbmcgeyAkZGVsYXktMTogdW5xdW90ZSgkZGVsYXktMSk7IH1cbiAgJGRlbGF5czogY29tcGFjdCgkZGVsYXktMSwgJGRlbGF5LTIsICRkZWxheS0zLCAkZGVsYXktNCwgJGRlbGF5LTUsICRkZWxheS02LCAkZGVsYXktNywgJGRlbGF5LTgsICRkZWxheS05LCAkZGVsYXktMTApO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodHJhbnNpdGlvbi1kZWxheSwgJGRlbGF5cyxcbiAgICAtbW96LCAtd2Via2l0LCAtbywgbm90KC1tcyksIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuXG4vLyBUcmFuc2l0aW9uIGFsbC1pbi1vbmUgc2hvcnRoYW5kXG5cbkBtaXhpbiBzaW5nbGUtdHJhbnNpdGlvbihcbiAgJHByb3BlcnR5OiAkZGVmYXVsdC10cmFuc2l0aW9uLXByb3BlcnR5LFxuICAkZHVyYXRpb246ICRkZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24sXG4gICRmdW5jdGlvbjogJGRlZmF1bHQtdHJhbnNpdGlvbi1mdW5jdGlvbixcbiAgJGRlbGF5OiAkZGVmYXVsdC10cmFuc2l0aW9uLWRlbGF5XG4pIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihjb21wYWN0KCRwcm9wZXJ0eSAkZHVyYXRpb24gJGZ1bmN0aW9uICRkZWxheSkpO1xufVxuXG5AbWl4aW4gdHJhbnNpdGlvbihcbiAgJHRyYW5zaXRpb24tMSA6IGRlZmF1bHQsXG4gICR0cmFuc2l0aW9uLTIgOiBmYWxzZSxcbiAgJHRyYW5zaXRpb24tMyA6IGZhbHNlLFxuICAkdHJhbnNpdGlvbi00IDogZmFsc2UsXG4gICR0cmFuc2l0aW9uLTUgOiBmYWxzZSxcbiAgJHRyYW5zaXRpb24tNiA6IGZhbHNlLFxuICAkdHJhbnNpdGlvbi03IDogZmFsc2UsXG4gICR0cmFuc2l0aW9uLTggOiBmYWxzZSxcbiAgJHRyYW5zaXRpb24tOSA6IGZhbHNlLFxuICAkdHJhbnNpdGlvbi0xMDogZmFsc2Vcbikge1xuICBAaWYgJHRyYW5zaXRpb24tMSA9PSBkZWZhdWx0IHtcbiAgICAkdHJhbnNpdGlvbi0xIDogY29tcGFjdCgkZGVmYXVsdC10cmFuc2l0aW9uLXByb3BlcnR5ICRkZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24gJGRlZmF1bHQtdHJhbnNpdGlvbi1mdW5jdGlvbiAkZGVmYXVsdC10cmFuc2l0aW9uLWRlbGF5KTtcbiAgfVxuICAkdHJhbnNpdGlvbnM6IGZhbHNlO1xuICBAaWYgdHlwZS1vZigkdHJhbnNpdGlvbi0xKSA9PSBsaXN0IGFuZCB0eXBlLW9mKG50aCgkdHJhbnNpdGlvbi0xLDEpKSA9PSBsaXN0IHtcbiAgICAkdHJhbnNpdGlvbnM6IGpvaW4oJHRyYW5zaXRpb24tMSwgY29tcGFjdCgkdHJhbnNpdGlvbi0yLCAkdHJhbnNpdGlvbi0zLCAkdHJhbnNpdGlvbi00LCAkdHJhbnNpdGlvbi01LCAkdHJhbnNpdGlvbi02LCAkdHJhbnNpdGlvbi03LCAkdHJhbnNpdGlvbi04LCAkdHJhbnNpdGlvbi05LCAkdHJhbnNpdGlvbi0xMCksIGNvbW1hKTtcbiAgfSBAZWxzZSB7XG4gICAgJHRyYW5zaXRpb25zIDogY29tcGFjdCgkdHJhbnNpdGlvbi0xLCAkdHJhbnNpdGlvbi0yLCAkdHJhbnNpdGlvbi0zLCAkdHJhbnNpdGlvbi00LCAkdHJhbnNpdGlvbi01LCAkdHJhbnNpdGlvbi02LCAkdHJhbnNpdGlvbi03LCAkdHJhbnNpdGlvbi04LCAkdHJhbnNpdGlvbi05LCAkdHJhbnNpdGlvbi0xMCk7XG4gIH1cbiAgJGRlbGF5czogY29tbWEtbGlzdCgpO1xuICAkaGFzLWRlbGF5czogZmFsc2U7XG4gICR3ZWJraXQtdmFsdWU6IGNvbW1hLWxpc3QoKTtcbiAgJG1vei12YWx1ZTogY29tbWEtbGlzdCgpO1xuICAkby12YWx1ZTogY29tbWEtbGlzdCgpO1xuXG4gIC8vIFRoaXMgYmxvY2sgY2FuIGJlIG1hZGUgY29uc2lkZXJhYmx5IHNpbXBsZXIgYXQgdGhlIHBvaW50IGluIHRpbWUgdGhhdFxuICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBkZWFsIHdpdGggdGhlIGRpZmZlcmVuY2VzIGluIGhvdyBkZWxheXMgYXJlIHRyZWF0ZWQuXG4gIEBlYWNoICR0cmFuc2l0aW9uIGluICR0cmFuc2l0aW9ucyB7XG4gICAgLy8gRXh0cmFjdCB0aGUgdmFsdWVzIGZyb20gdGhlIGxpc3RcbiAgICAvLyAodGhpcyB3b3VsZCBiZSBjbGVhbmVyIGlmIG50aCB0b29rIGEgM3JkIGFyZ3VtZW50IHRvIHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlKS5cbiAgICAkcHJvcGVydHk6IG50aCgkdHJhbnNpdGlvbiwgMSk7XG4gICAgJGR1cmF0aW9uOiBmYWxzZTtcbiAgICAkdGltaW5nLWZ1bmN0aW9uOiBmYWxzZTtcbiAgICAkZGVsYXk6IGZhbHNlO1xuICAgIEBpZiBsZW5ndGgoJHRyYW5zaXRpb24pID4gMSB7ICRkdXJhdGlvbjogICAgICAgIG50aCgkdHJhbnNpdGlvbiwgMik7IH1cbiAgICBAaWYgbGVuZ3RoKCR0cmFuc2l0aW9uKSA+IDIgeyAkdGltaW5nLWZ1bmN0aW9uOiBudGgoJHRyYW5zaXRpb24sIDMpOyB9XG4gICAgQGlmIGxlbmd0aCgkdHJhbnNpdGlvbikgPiAzIHsgJGRlbGF5OiAgICAgICAgICAgbnRoKCR0cmFuc2l0aW9uLCA0KTsgJGhhcy1kZWxheXM6IHRydWU7IH1cblxuICAgIC8vIElmIGEgZGVsYXkgaXMgcHJvdmlkZWQgd2l0aG91dCBhIHRpbWluZyBmdW5jdGlvblxuICAgIEBpZiBpcy10aW1lKCR0aW1pbmctZnVuY3Rpb24pIGFuZCBub3QoJGRlbGF5KSB7ICRkZWxheTogJHRpbWluZy1mdW5jdGlvbjsgJHRpbWluZy1mdW5jdGlvbjogZmFsc2U7ICRoYXMtZGVsYXlzOiB0cnVlOyB9XG5cbiAgICAvLyBLZWVwIGEgbGlzdCBvZiBkZWxheXMgaW4gY2FzZSBvbmUgaXMgc3BlY2lmaWVkXG4gICAgJGRlbGF5czogYXBwZW5kKCRkZWxheXMsIGlmKCRkZWxheSwgJGRlbGF5LCAwcykpO1xuXG4gICAgJHdlYmtpdC12YWx1ZTogYXBwZW5kKCR3ZWJraXQtdmFsdWUsIGNvbXBhY3QoKHByZWZpeGVkLWZvci10cmFuc2l0aW9uKC13ZWJraXQsICRwcm9wZXJ0eSkgJGR1cmF0aW9uICR0aW1pbmctZnVuY3Rpb24pLi4uKSk7XG4gICAgICAgJG1vei12YWx1ZTogYXBwZW5kKCAgICRtb3otdmFsdWUsIGNvbXBhY3QoKHByZWZpeGVkLWZvci10cmFuc2l0aW9uKCAgIC1tb3osICRwcm9wZXJ0eSkgJGR1cmF0aW9uICR0aW1pbmctZnVuY3Rpb24gJGRlbGF5KS4uLikpO1xuICAgICAgICAgJG8tdmFsdWU6IGFwcGVuZCggICAgICRvLXZhbHVlLCBjb21wYWN0KChwcmVmaXhlZC1mb3ItdHJhbnNpdGlvbiggICAgIC1vLCAkcHJvcGVydHkpICRkdXJhdGlvbiAkdGltaW5nLWZ1bmN0aW9uICRkZWxheSkuLi4pKTtcbiAgfVxuXG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7ICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbiA6ICR3ZWJraXQtdmFsdWU7XG4gICAgLy8gb2xkIHdlYmtpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGRlbGF5IHBhcmFtZXRlciBpbiB0aGUgc2hvcnRoYW5kIHNvIHdlIHByb2dyZXNzaXZlbHkgZW5oYW5jZSBpdC5cbiAgICBAaWYgJGhhcy1kZWxheXMgICAgICAgICAgICAgICAgICAgICAgIHsgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5IDogJGRlbGF5czsgICAgICAgfSB9XG4gIEBpZiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICAgICAgICAgIC1tb3otdHJhbnNpdGlvbiA6ICRtb3otdmFsdWU7ICAgIH1cbiAgQGlmICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgICAgICAgICAgICAtby10cmFuc2l0aW9uIDogJG8tdmFsdWU7ICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gOiAkdHJhbnNpdGlvbnM7XG59XG5cbi8vIGNvZXJjZSBhIGxpc3QgdG8gYmUgY29tbWEgZGVsaW1pdGVkIG9yIG1ha2UgYSBuZXcsIGVtcHR5IGNvbW1hIGRlbGltaXRlZCBsaXN0LlxuQGZ1bmN0aW9uIGNvbW1hLWxpc3QoJGxpc3Q6ICgpKSB7XG4gIEByZXR1cm4gam9pbigoKSwgJGxpc3QsIGNvbW1hKTtcbn1cblxuLy8gUmV0dXJucyBgJHByb3BlcnR5YCB3aXRoIHRoZSBnaXZlbiBwcmVmaXggaWYgaXQgaXMgZm91bmQgaW4gYCR0cmFuc2l0aW9uYWJsZS1wcmVmaXhlZC12YWx1ZXNgLlxuQGZ1bmN0aW9uIHByZWZpeGVkLWZvci10cmFuc2l0aW9uKCRwcmVmaXgsICRwcm9wZXJ0eSkge1xuICBAaWYgdHlwZS1vZigkcHJvcGVydHkpID09IGxpc3Qge1xuICAgICRuZXctbGlzdDogY29tbWEtbGlzdCgpO1xuICAgIEBlYWNoICR2IGluICRwcm9wZXJ0eSB7XG4gICAgICAkbmV3LWxpc3Q6IGFwcGVuZCgkbmV3LWxpc3QsIHByZWZpeGVkLWZvci10cmFuc2l0aW9uKCRwcmVmaXgsICR2KSk7XG4gICAgfVxuICAgIEByZXR1cm4gJG5ldy1saXN0O1xuICB9IEBlbHNlIHtcbiAgICBAaWYgaW5kZXgoJHRyYW5zaXRpb25hYmxlLXByZWZpeGVkLXZhbHVlcywgJHByb3BlcnR5KSB7XG4gICAgICBAcmV0dXJuICN7JHByZWZpeH0tI3skcHJvcGVydHl9O1xuICAgIH0gQGVsc2Uge1xuICAgICAgQHJldHVybiAkcHJvcGVydHk7XG4gICAgfVxuICB9XG59XG5cbi8vIENoZWNrcyBpZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgYSB1bml0IG9mIHRpbWUuXG5AZnVuY3Rpb24gaXMtdGltZSgkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSBudW1iZXIge1xuICAgIEByZXR1cm4gbm90KG5vdChpbmRleChzIG1zLCB1bml0KCR2YWx1ZSkpKSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJzaGFyZWRcIjtcblxuLy8gQ2hhbmdlIHRoZSBhcHBlYXJhbmNlIGZvciBNb3ppbGxhLCBXZWJraXQgYW5kIHBvc3NpYmx5IHRoZSBmdXR1cmUuXG4vLyBUaGUgYXBwZWFyYW5jZSBwcm9wZXJ0eSBpcyBjdXJyZW50bHkgbm90IHByZXNlbnQgaW4gYW55IG5ld2VyIENTUyBzcGVjaWZpY2F0aW9uLlxuLy9cbi8vIFRoZXJlIGlzIG5vIG9mZmljaWFsIGxpc3Qgb2YgYWNjZXB0ZWQgdmFsdWVzLCBidXQgeW91IG1pZ2h0IGNoZWNrIHRoZXNlIHNvdXJjZTpcbi8vICAgTW96aWxsYSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NTUy8tbW96LWFwcGVhcmFuY2Vcbi8vICAgV2Via2l0ICA6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJraXQtbWlycm9yL3NvdXJjZS9icm93c2UvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4/c3BlYz1zdm5mMWFlYTU1OWRjZDAyNWE4OTQ2YWE3ZGE2ZTRlODMwNmY1YzFiNjA0JnI9NjNjN2QxYWY0NDQzMGIzMTQyMzNmZWEzNDJjM2RkYjJhMDUyZTM2NVxuLy8gICAoc2VhcmNoIGZvciAnYXBwZWFyYW5jZScgd2l0aGluIHRoZSBwYWdlKVxuXG5AbWl4aW4gYXBwZWFyYW5jZSgkYXApIHtcbiAgJGFwOiB1bnF1b3RlKCRhcCk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChhcHBlYXJhbmNlLCAkYXAsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgbm90KC1tcyksIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICApO1xufVxuIiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBXZWJraXQsIElFMTAgYW5kIGZ1dHVyZSBzdXBwb3J0IGZvciBbQ1NTIFJlZ2lvbnNdKGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9ucy8pXG4vL1xuLy8gJHRhcmdldCBpcyBhIHZhbHVlIHlvdSB1c2UgdG8gbGluayB0d28gcmVnaW9ucyBvZiB5b3VyIGNzcy4gR2l2ZSB0aGUgc291cmNlIG9mIHlvdXIgY29udGVudCB0aGUgZmxvdy1pbnRvIHByb3BlcnR5LCBhbmQgZ2l2ZSB5b3VyIHRhcmdldCBjb250YWluZXIgdGhlIGZsb3ctZnJvbSBwcm9wZXJ0eS5cbi8vXG4vLyBGb3IgYSB2aXN1YWwgZXhwbGFuYXRpb24sIHNlZSB0aGUgZGlhZ3JhbXMgYXQgQ2hyaXMgQ295aWVyJ3Ncbi8vIFtDU1MtVHJpY2tzXShodHRwOi8vY3NzLXRyaWNrcy5jb20vY29udGVudC1mb2xkaW5nLylcblxuQG1peGluIGZsb3ctaW50bygkdGFyZ2V0KSB7XG4gICR0YXJnZXQ6IHVucXVvdGUoJHRhcmdldCk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChmbG93LWludG8sICR0YXJnZXQsXG4gICAgbm90KC1tb3opLCAtd2Via2l0LCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBub3Qgb2ZmaWNpYWxcbiAgKTtcbn1cblxuQG1peGluIGZsb3ctZnJvbSgkdGFyZ2V0KSB7XG4gICR0YXJnZXQ6IHVucXVvdGUoJHRhcmdldCk7XG4gIEBpbmNsdWRlIGV4cGVyaW1lbnRhbChmbG93LWZyb20sICR0YXJnZXQsXG4gICAgbm90KC1tb3opLCAtd2Via2l0LCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBub3Qgb2ZmaWNpYWxcbiAgKTtcbn0iLCJAaW1wb3J0IFwic2hhcmVkXCI7XG5cbi8vIE1peGlucyB0byBzdXBwb3J0IHNwZWNpZmljIENTUyBUZXh0IExldmVsIDMgZWxlbWVudHNcbi8vXG4vL1xuLy9cbi8vIE1peGluIGZvciB3b3JkLWJyZWFrIHByb3BlcnRpZXNcbi8vIGh0dHA6Ly93d3cudzMub3JnL2NzczMtdGV4dC8jd29yZC1icmVha1xuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yICR0eXBlIDogbm9ybWFsLCBrZWVwLWFsbCwgYnJlYWstYWxsXG4vL1xuLy8gRXhhbXBsZTpcbi8vICAgIHAud29yZEJyZWFrIHtAaW5jbHVkZSB3b3JkLWJyZWFrKGJyZWFrLWFsbCk7fVxuLy9cbi8vIFdoaWNoIGdlbmVyYXRlczpcbi8vICAgIHAud29yZEJyZWFrIHtcbi8vICAgICAgLW1zLXdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbi8vICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuLy8gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO31cbi8vXG5AbWl4aW4gd29yZC1icmVhaygkdmFsdWU6IG5vcm1hbCl7XG4gIEBpZiAkdmFsdWUgPT0gYnJlYWstYWxsIHtcbiAgICAvL01vc3QgYnJvd3NlcnMgaGFuZGxlIHRoZSBicmVhay1hbGwgY2FzZSB0aGUgc2FtZS4uLlxuICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbCh3b3JkLWJyZWFrLCAkdmFsdWUsXG4gICAgICBub3QoLW1veiksIG5vdCgtd2Via2l0KSwgbm90KC1vKSwgLW1zLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgICApO1xuICAgIC8vV2Via2l0IGhhbmRsZXMgYnJlYWstYWxsIGRpZmZlcmVudGx5Li4uIGFzIGJyZWFrLXdvcmRcbiAgICBAaW5jbHVkZSBleHBlcmltZW50YWwod29yZC1icmVhaywgYnJlYWstd29yZCxcbiAgICAgIG5vdCgtbW96KSwgbm90KC13ZWJraXQpLCBub3QoLW8pLCBub3QoLW1zKSwgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICAgKTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKHdvcmQtYnJlYWssICR2YWx1ZSxcbiAgICAgIG5vdCgtbW96KSwgbm90KC13ZWJraXQpLCBub3QoLW8pLCAtbXMsIG5vdCgta2h0bWwpLCBvZmZpY2lhbFxuICAgICk7XG4gIH1cbn1cblxuLy8gTWl4aW4gZm9yIHRoZSBoeXBoZW5zIHByb3BlcnR5XG4vL1xuLy8gVzNDIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8jaHlwaGVuc1xuLy8gKiBsZWdhbCB2YWx1ZXMgZm9yICR0eXBlIDogYXV0bywgbWFudWFsLCBub25lXG4vL1xuLy8gRXhhbXBsZTpcbi8vICBwIHtcbi8vICAgIEBpbmNsdWRlIGh5cGhlbnMoYXV0byk7fVxuLy8gV2hpY2ggZ2VuZXJhdGVzOlxuLy8gIHAge1xuLy8gICAgLW1vei1oeXBoZW5zOiBhdXRvO1xuLy8gICAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xuLy8gICAgaHlwaGVuczogYXV0bzt9XG4vL1xuQG1peGluIGh5cGhlbnMoJHZhbHVlOiBhdXRvKXtcbiAgQGluY2x1ZGUgZXhwZXJpbWVudGFsKGh5cGhlbnMsICR2YWx1ZSxcbiAgICAtbW96LCAtd2Via2l0LCBub3QoLW8pLCBub3QoLW1zKSwgbm90KC1raHRtbCksIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIE1peGluIGZvciB4LWJyb3dzZXIgaHlwaGVuYXRpb24gYmFzZWQgb24gQGF1Y2hlbmJlcmcncyBwb3N0OlxuLy8gUmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGhlIDx3YnIvPiBIVE1MIHRhZ1xuLy8gaHR0cDovL2Jsb2cua2VubmV0aC5pby9ibG9nLzIwMTIvMDMvMDQvd29yZC13cmFwcGluZy1oeXBlcm5hdGlvbi11c2luZy1jc3MvXG4vL1xuLy8gIEV4YW1wbGU6XG4vLyAgZGl2IHtAaW5jbHVkZSBoeXBoZW5hdGlvbjt9XG4vL1xuLy8gIFdoaWNoIGdlbmVyYXRlczpcbi8vICAgIGRpdiB7XG4vLyAgICAgIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4vLyAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbi8vICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbi8vICAgICAgLW1vei1oeXBoZW5zOiBhdXRvO1xuLy8gICAgICAtd2Via2l0LWh5cGhlbnM6IGF1dG87XG4vLyAgICAgIGh5cGhlbnM6IGF1dG87fVxuLy9cbkBtaXhpbiBoeXBoZW5hdGlvbntcbiAgQGluY2x1ZGUgd29yZC1icmVhayhicmVhay1hbGwpO1xuICBAaW5jbHVkZSBoeXBoZW5zO1xufVxuIiwiQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBQcm92aWRlcyBjcm9zcy1icm93c2VyIHN1cHBvcnQgZm9yIHRoZSB1cGNvbWluZyAoPykgY3NzMyBmaWx0ZXIgcHJvcGVydHkuXG4vL1xuLy8gRWFjaCBmaWx0ZXIgYXJndW1lbnQgc2hvdWxkIGFkaGVyZSB0byB0aGUgc3RhbmRhcmQgY3NzMyBzeW50YXggZm9yIHRoZVxuLy8gZmlsdGVyIHByb3BlcnR5LlxuQG1peGluIGZpbHRlciAoXG4gICRmaWx0ZXItMSxcbiAgJGZpbHRlci0yIDogZmFsc2UsXG4gICRmaWx0ZXItMyA6IGZhbHNlLFxuICAkZmlsdGVyLTQgOiBmYWxzZSxcbiAgJGZpbHRlci01IDogZmFsc2UsXG4gICRmaWx0ZXItNiA6IGZhbHNlLFxuICAkZmlsdGVyLTcgOiBmYWxzZSxcbiAgJGZpbHRlci04IDogZmFsc2UsXG4gICRmaWx0ZXItOSA6IGZhbHNlLFxuICAkZmlsdGVyLTEwOiBmYWxzZVxuKSB7XG4gICRmaWx0ZXIgOiBjb21wYWN0KCRmaWx0ZXItMSwgJGZpbHRlci0yLCAkZmlsdGVyLTMsICRmaWx0ZXItNCwgJGZpbHRlci01LCAkZmlsdGVyLTYsICRmaWx0ZXItNywgJGZpbHRlci04LCAkZmlsdGVyLTksICRmaWx0ZXItMTApO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoZmlsdGVyLCAkZmlsdGVyLFxuICAgIC1tb3osIC13ZWJraXQsIG5vdCgtbyksIG5vdCgtbXMpLCBub3QoLWtodG1sKSwgb2ZmaWNpYWxcbiAgKTtcbn1cbiIsIiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItcGllOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgU2FzcydzIEBleHRlbmQgZGlyZWN0aXZlIHRvIGFwcGx5IHRoZSBiZWhhdmlvclxuLy8gdG8geW91ciBQSUUgZWxlbWVudHMuIFRvIGFzc2lzdCB5b3UsIENvbXBhc3MgcHJvdmlkZXMgdGhpcyB2YXJpYWJsZS5cbi8vIFdoZW4gc2V0LCBpdCB3aWxsIGNhdXNlIHRoZSBgQGluY2x1ZGUgcGllYCBtaXhpbiB0byBleHRlbmQgdGhpcyBjbGFzcy5cbi8vIFRoZSBjbGFzcyBuYW1lIHlvdSBwcm92aWRlIHNob3VsZCAqKm5vdCoqIGluY2x1ZGUgdGhlIGAuYC5cbiRwaWUtYmFzZS1jbGFzczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFRoZSBkZWZhdWx0IGFwcHJvYWNoIHRvIHVzaW5nIFBJRS5cbi8vIENhbiBiZSBvbmUgb2Y6XG4vL1xuLy8gKiByZWxhdGl2ZSAoZGVmYXVsdClcbi8vICogei1pbmRleFxuLy8gKiBub25lXG4kcGllLWRlZmF1bHQtYXBwcm9hY2g6IHJlbGF0aXZlICFkZWZhdWx0O1xuXG4vLyBUaGUgbG9jYXRpb24gb2YgeW91ciBQSUUgYmVoYXZpb3IgZmlsZVxuLy8gVGhpcyBzaG91bGQgYmUgcm9vdC1yZWxhdGl2ZSB0byB5b3VyIHdlYiBzZXJ2ZXJcbi8vIHJlbGF0aXZlIGFzc2V0cyBkb24ndCB3b3JrLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0XG4vLyB5b3Ugc2V0IHRoaXMgeW91cnNlbGYuXG4kcGllLWJlaGF2aW9yOiBzdHlsZXNoZWV0LXVybChcIlBJRS5odGNcIikgIWRlZmF1bHQ7XG5cbi8vIFdoZW4gdXNpbmcgdGhlIHotaW5kZXggYXBwcm9hY2gsIHRoZVxuLy8gZmlyc3QgYW5jZXN0b3Igb2YgdGhlIFBJRSBlbGVtZW50IGF0XG4vLyBvciBiZWZvcmUgdGhlIGNvbnRhaW5lcidzIG9wYXF1ZSBiYWNrZ3JvdW5kXG4vLyBzaG91bGQgaGF2ZSBhIHotaW5kZXggc2V0IGFzIHdlbGwgdG8gZW5zdXJlXG4vLyBwcm9wZXJ0IHotaW5kZXggc3RhY2tpbmcuXG4vL1xuLy8gVGhlIGAkcG9zaXRpb25gIGFyZ3VtZW50IG11c3QgYmUgc29tZSBub24tc3RhdGljXG4vLyB2YWx1ZSAoYWJzb2x1dGUsIHJlbGF0aXZlLCBldGMuKVxuQG1peGluIHBpZS1jb250YWluZXIoJHotaW5kZXg6IDAsICRwb3NpdGlvbjogcmVsYXRpdmUpIHtcbiAgei1pbmRleDogJHotaW5kZXg7XG4gIHBvc2l0aW9uOiAkcG9zaXRpb247XG59XG5cbi8vIFBJRSBlbGVtZW50cyBtdXN0IGhhdmUgdGhpcyBiZWhhdmlvciBhdHRhY2hlZCB0byB0aGVtLlxuLy8gSUUgaXMgYnJva2VuIC0tIGl0IGRvZXNuJ3QgdGhpbmsgb2YgYmVoYXZpb3IgdXJscyBhc1xuLy8gcmVsYXRpdmUgdG8gdGhlIHN0eWxlc2hlZXQuIEl0IGNvbnNpZGVycyB0aGVtIHJlbGF0aXZlXG4vLyB0byB0aGUgd2VicGFnZS4gQXMgYSByZXN1bHQsIHlvdSBjYW5ub3QgcmVsaWFibHkgdXNlXG4vLyBjb21wYXNzJ3MgcmVsYXRpdmVfYXNzZXRzIHdpdGggUElFLlxuLy9cbi8vICogYCRhcHByb2FjaGAgLSBvbmUgb2Y6IHJlbGF0aXZlLCB6LWluZGV4LCBvciBub25lXG4vLyAqIGAkei1pbmRleGAgLSB3aGVuIHVzaW5nIHRoZSB6LWluZGV4IGFwcHJvYWNoLCB0aGlzXG4vLyAgICAgICAgICAgICAgICBpcyB0aGUgei1pbmRleCB0aGF0IGlzIGFwcGxpZWQuXG5AbWl4aW4gcGllLWVsZW1lbnQoXG4gICRhcHByb2FjaDogJHBpZS1kZWZhdWx0LWFwcHJvYWNoLFxuICAkei1pbmRleDogMFxuKSB7XG4gIGJlaGF2aW9yOiAkcGllLWJlaGF2aW9yO1xuICBAaWYgJGFwcHJvYWNoID09IHJlbGF0aXZlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbiAgQGVsc2UgaWYgJGFwcHJvYWNoID09IHotaW5kZXgge1xuICAgIHotaW5kZXg6ICR6LWluZGV4O1xuICB9XG59XG5cbi8vIGEgc21hcnQgbWl4aW4gdGhhdCBrbm93cyB0byBleHRlbmQgb3IgaW5jbHVkZSBwaWUtZWxlbWVudCBhY2NvcmRpbmdcbi8vIHRvIHlvdXIgc3R5bGVzaGVldCdzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLlxuQG1peGluIHBpZSgkYmFzZS1jbGFzczogJHBpZS1iYXNlLWNsYXNzKSB7XG4gIEBpZiAkYmFzZS1jbGFzcyB7XG4gICAgQGV4dGVuZCAuI3skYmFzZS1jbGFzc307XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIHBpZS1lbGVtZW50O1xuICB9XG59XG5cbi8vIFdhdGNoIGAkbmAgbGV2ZWxzIG9mIGFuY2VzdG9ycyBmb3IgY2hhbmdlcyB0byB0aGVpciBjbGFzcyBhdHRyaWJ1dGVcbi8vIFNvIHRoYXQgY2FzY2FkaW5nIHN0eWxlcyB3aWxsIHdvcmsgY29ycmVjdGx5IG9uIHRoZSBQSUUgZWxlbWVudC5cbkBtaXhpbiBwaWUtd2F0Y2gtYW5jZXN0b3JzKCRuKSB7XG4gIC1waWUtd2F0Y2gtYW5jZXN0b3JzOiAkbjtcbn1cbiIsIi8vIFVzZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhpcyBmaWxlIGNhbiBiZSBleHBhbmRlZCB0byBoYW5kbGUgYWxsIHRoZSB1c2VyIGludGVyZmFjZSBwcm9wZXJ0aWVzIGFzXG4vLyB0aGV5IGJlY29tZSBhdmFpbGFibGUgaW4gYnJvd3NlcnM6XG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELWNzczMtdXNlcmludC0yMDAwMDIxNlxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5cbi8vIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHNlbGVjdGlvbiBtb2RlbCBhbmQgZ3JhbnVsYXJpdHkgb2YgYW4gZWxlbWVudC5cbi8vXG4vLyBAcGFyYW0gJHNlbGVjdFxuLy8gICBbIG5vbmUgfCB0ZXh0IHwgdG9nZ2xlIHwgZWxlbWVudCB8IGVsZW1lbnRzIHwgYWxsIHwgaW5oZXJpdCBdXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAkc2VsZWN0OiB1bnF1b3RlKCRzZWxlY3QpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodXNlci1zZWxlY3QsICRzZWxlY3QsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgLW1zLCAta2h0bWwsIG9mZmljaWFsXG4gICk7XG59XG5cbi8vIFN0eWxlIHRoZSBodG1sNSBpbnB1dCBwbGFjZWhvbGRlciBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG4vL1xuLy8gVGhlIHN0eWxlcyBmb3IgdGhlIGlucHV0IHBsYWNlaG9sZGVyIGFyZSBwYXNzZWQgYXMgbWl4aW4gY29udGVudFxuLy8gYW5kIHRoZSBzZWxlY3RvciBjb21lcyBmcm9tIHRoZSBtaXhpbidzIGNvbnRleHQuXG4vL1xuLy8gRm9yIGV4YW1wbGU6XG4vL1xuLy8gICAgICN7ZWxlbWVudHMtb2YtdHlwZSh0ZXh0LWlucHV0KX0ge1xuLy8gICAgICAgQGluY2x1ZGUgaW5wdXQtcGxhY2Vob2xkZXIge1xuLy8gICAgICAgICBjb2xvcjogI2JmYmZiZjtcbi8vICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vXG4vLyBpZiB5b3Ugd2FudCB0byBhcHBseSB0aGUgcGxhY2Vob2xkZXIgc3R5bGVzIHRvIGFsbCBlbGVtZW50cyBzdXBwb3J0aW5nXG4vLyB0aGUgYGlucHV0LXBsYWNlaG9sZGVyYCBwc2V1ZG8gY2xhc3MgKGJld2FyZSBvZiBwZXJmb3JtYW5jZSBpbXBhY3RzKTpcbi8vXG4vLyAgICAgKiB7XG4vLyAgICAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4vLyAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuLy8gICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBAY29udGVudDsgfVxuICAmOi1tb3otcGxhY2Vob2xkZXIgeyBAY29udGVudDsgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHsgQGNvbnRlbnQ7IH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7IEBjb250ZW50OyB9XG59XG4iLCJAaW1wb3J0IFwiLi4vc3VwcG9ydFwiO1xuQGltcG9ydCBcInNoYXJlZFwiO1xuXG4vLyBUaGlzIGlzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGZvciBhbGwgdGhlIG90aGVyIG1peGlucyBpbiB0aGlzIG1vZHVsZS5cbi8vIEl0IGlzIHRoZSBvbmx5IHdheSB0byBhY2Nlc3MgcHJlZml4IHN1cHBvcnQgZm9yIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBzcGVjLlxuLy8gRGV2aWF0ZXMgZnJvbSBjYW5vbmljYWwgQ29tcGFzcyBpbXBsZW1lbnRhdGlvbiBieSBkcm9wcGluZyBzdXBwb3J0IGZvclxuLy8gb2xkZXIgdmVyc2lvbnMgb2YgdGhlIEZsZXhib3ggc3BlYy5cbi8vXG4vLyBgJHByb3BlcnRpZXNgOiBtYXAgb2YgcHJvcGVydHktdmFsdWUgcGFpcnMgdGhhdCBzaG91bGQgYmUgcHJlZml4ZWRcbkBtaXhpbiBmbGV4Ym94KCRwcm9wZXJ0aWVzKSB7XG4gIEBlYWNoICRwcm9wLCAkdmFsdWUgaW4gJHByb3BlcnRpZXMge1xuICAgIEBpZiAkcHJvcCA9PSBkaXNwbGF5IHtcbiAgICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbC12YWx1ZShkaXNwbGF5LCAkdmFsdWUsIG5vdCgtbW96KSwgLXdlYmtpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QoLW8pLCBub3QoLW1zKSwgbm90KC1raHRtbCksIG9mZmljaWFsKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpbmNsdWRlIGV4cGVyaW1lbnRhbCgkcHJvcCwgJHZhbHVlLCBub3QoLW1veiksIC13ZWJraXQsIG5vdCgtbyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90KC1tcyksIG5vdCgta2h0bWwpLCBvZmZpY2lhbCk7XG4gICAgfVxuICB9XG59XG5cbi8vIFZhbHVlcyBmb3IgJGRpc3BsYXkgYXJlOiBmbGV4IChkZWZhdWx0KSwgaW5saW5lLWZsZXhcbkBtaXhpbiBkaXNwbGF5LWZsZXgoJGRpc3BsYXk6IGZsZXgpIHtcbiAgQGluY2x1ZGUgZmxleGJveCgoZGlzcGxheTogJGRpc3BsYXkpKTtcbn1cblxuLy8gVmFsdWVzOiByb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlXG5AbWl4aW4gZmxleC1kaXJlY3Rpb24oJGRpcmVjdGlvbikge1xuICBAaW5jbHVkZSBmbGV4Ym94KChmbGV4LWRpcmVjdGlvbjogJGRpcmVjdGlvbikpO1xufVxuXG4vLyBWYWx1ZXM6IG5vd3JhcCB8IHdyYXAgfCB3cmFwLXJldmVyc2VcbkBtaXhpbiBmbGV4LXdyYXAoJHdyYXApIHtcbiAgQGluY2x1ZGUgZmxleGJveCgoZmxleC13cmFwOiAkd3JhcCkpO1xufVxuXG4vLyBTaG9ydGhhbmQgZm9yIGZsZXgtZGlyZWN0aW9uIGFuZCBmbGV4LXdyYXAuXG5AbWl4aW4gZmxleC1mbG93KCRmbG93KSB7XG4gIEBpbmNsdWRlIGZsZXhib3goKGZsZXgtZmxvdzogJGZsb3cpKTtcbn1cblxuLy8gQWNjZXB0cyBhbiBpbnRlZ2VyXG5AbWl4aW4gb3JkZXIoJG9yZGVyKSB7XG4gIEBpbmNsdWRlIGZsZXhib3goKG9yZGVyOiAkb3JkZXIpKTtcbn1cblxuLy8gU2hvcnRoYW5kIGZvciBmbGV4LWdyb3csIGZsZXgtc2hyaW5rIGFuZCBvcHRpb25hbGx5IGZsZXgtYmFzaXMuXG4vLyBTcGFjZSBzZXBhcmF0ZWQsIGluIHRoYXQgb3JkZXIuXG5AbWl4aW4gZmxleCgkZmxleCkge1xuICBAaW5jbHVkZSBmbGV4Ym94KChmbGV4OiAkZmxleCkpO1xufVxuXG4vLyBBY2NlcHRzIGEgbnVtYmVyLlxuQG1peGluIGZsZXgtZ3JvdygkZmxleC1ncm93KSB7XG4gIEBpbmNsdWRlIGZsZXhib3goKGZsZXgtZ3JvdzogJGZsZXgtZ3JvdykpO1xufVxuXG4vLyBBY2NlcHRzIGEgbnVtYmVyLlxuQG1peGluIGZsZXgtc2hyaW5rKCRmbGV4LXNocmluaykge1xuICBAaW5jbHVkZSBmbGV4Ym94KChmbGV4LXNocmluazogJGZsZXgtc2hyaW5rKSk7XG59XG5cbi8vIEFjY2VwdHMgYW55IGxlZ2FsIHZhbHVlIGZvciB0aGUgd2lkdGggcHJvcGVydHkuXG5AbWl4aW4gZmxleC1iYXNpcygkZmxleC1iYXNpcykge1xuICBAaW5jbHVkZSBmbGV4Ym94KChmbGV4LWJhc2lzOiAkZmxleC1iYXNpcykpO1xufVxuXG4vLyBMZWdhbCB2YWx1ZXM6IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmRcbkBtaXhpbiBqdXN0aWZ5LWNvbnRlbnQoJGp1c3RpZnktY29udGVudCkge1xuICBAaW5jbHVkZSBmbGV4Ym94KChqdXN0aWZ5LWNvbnRlbnQ6ICRqdXN0aWZ5LWNvbnRlbnQpKTtcbn1cblxuLy8gTGVnYWwgdmFsdWVzOiBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2hcbkBtaXhpbiBhbGlnbi1pdGVtcygkYWxpZ24taXRlbXMpIHtcbiAgQGluY2x1ZGUgZmxleGJveCgoYWxpZ24taXRlbXM6ICRhbGlnbi1pdGVtcykpO1xufVxuXG4vLyBMZWdhbCB2YWx1ZXM6IGF1dG8gfCBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2hcbkBtaXhpbiBhbGlnbi1zZWxmKCRhbGlnbi1zZWxmKSB7XG4gIEBpbmNsdWRlIGZsZXhib3goKGFsaWduLXNlbGY6ICRhbGlnbi1zZWxmKSk7XG59XG5cbi8vIExlZ2FsIHZhbHVlczogZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCB8IHN0cmV0Y2hcbkBtaXhpbiBhbGlnbi1jb250ZW50KCRhbGlnbi1jb250ZW50KSB7XG4gIEBpbmNsdWRlIGZsZXhib3goKGFsaWduLWNvbnRlbnQ6ICRhbGlnbi1jb250ZW50KSk7XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG4vLyBDb2xvcnNcbiRwcmltYXJ5Q29sb3I6ICM0M0FERUI7XG4kYmFja2dyb3VuZENvbG9yOiAjMUIxQjFCO1xuJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjogIzJCMkIyQjtcbiRsaWdodEJhY2tncm91bmRDb2xvcjogIzM5MzkzOTtcbiRzZXBhcmF0b3JDb2xvcjogIzQ2NDY0NjtcbiRkYXJrQ29sb3I6ICMxQTFBMUE7XG4kZ3JleUNvbG9yOiAjMzYzNjM2O1xuJGRhcmtlckdyZXlDb2xvcjogIzMxMzEzMTtcbiRsaWdodEdyZXlDb2xvcjogcmdiYSh3aGl0ZSwgMC4yKTtcbiRsaWdodGVyR3JleUNvbG9yOiByZ2JhKHdoaXRlLCAwLjUpO1xuJGxpZ2h0R3JleVRleHRDb2xvcjogI0M1QzVDNTtcbiRyZWRDb2xvcjogI0ZGM0UzRTtcbiR5ZWxsb3dDb2xvcjogI0ZGQkYzRTtcbiR3aGl0ZUNvbG9yOiAjRkZGRkZGO1xuJGJsYWNrQ29sb3I6ICMwMDAwMDA7XG4kdG9wQmFyU2VhcmNoUGxhY2Vob2xkZXJDb2xvcjogI0E4QThBODtcblxuLy8gTWV0cmljc1xuJGhlYWRlckJhckhlaWdodDogMzBweDtcbiRrbm9iU2l6ZTogMjBweDtcbiRjb250cm9sc0hlaWdodDogODRweDtcbiRjb250cm9sc0J1dHRvbldpZHRoOiA2NHB4O1xuJGNvbnRyb2xzQnV0dG9uSGVpZ2h0OiA2MHB4O1xuJGNvbnRyb2xzTGFyZ2VCdXR0b25XaWR0aDogNzRweDtcbiRjb250cm9sc05hcnJvd0J1dHRvbldpZHRoOiA1N3B4O1xuXG4vLyBSZXNwb25zaXZlXG4kZ3JpZC1jb2x1bW5zOiAxMjtcbiRzY3JlZW4tc21hbGwtbWluOiA3NjhweDtcbiRzY3JlZW4tc21hbGwtbWF4OiA5OTFweDtcbiRzY3JlZW4tbWVkaXVtLW1pbjogOTkycHg7XG4kc2NyZWVuLW1lZGl1bS1tYXg6IDExOTlweDtcbiRzY3JlZW4tbGFyZ2UtbWluOiAxMjAwcHg7XG4kc2NyZWVuLXhzbWFsbC1tYXg6ICRzY3JlZW4tc21hbGwtbWluIC0gMTtcbiRzY3JlZW4tc21hbGwtbWF4OiAkc2NyZWVuLW1lZGl1bS1taW4gLSAxO1xuJHNjcmVlbi1tZWRpdW0tbWF4OiAkc2NyZWVuLWxhcmdlLW1pbiAtIDE7XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG4vLyBQcmVmaXggYWxsIGJsb2NrIG5hbWVzIHdpdGggdGhpc1xuJGJsb2NrUHJlZml4OiAncGVzZGstcmVhY3QtJztcblxuJGVsZW1lbnRTZXBhcmF0b3I6ICdfXyc7XG4kbW9kaWZpZXJTZXBhcmF0b3I6ICctLSc7XG5cbi8vIEJFTSBtaXhpbnNcbi8vIFNlZSBodHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL3Nhc3MvYmVtLW1peGlucy9cblxuQG1peGluIGJsb2NrKCRuYW1lKSB7XG4gIC4jeyRibG9ja1ByZWZpeH0jeyRuYW1lfSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gZWxlbWVudCgkbmFtZSkge1xuICAmI3skZWxlbWVudFNlcGFyYXRvcn0jeyRuYW1lfSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gZWxlbWVudHNXaXRoQmFzZVNlbGVjdG9yKCRiYXNlU2VsZWN0b3IsICRuYW1lcy4uLikge1xuICAkc2VsZWN0b3I6ICgpO1xuICBAZWFjaCAkbmFtZSBpbiAkbmFtZXMge1xuICAgICRzZWxlY3RvcjogYXBwZW5kKCRzZWxlY3RvciwgdW5xdW90ZSgnI3skYmFzZVNlbGVjdG9yfSN7JGVsZW1lbnRTZXBhcmF0b3J9I3skbmFtZX0nKSwgY29tbWEpOyB9XG4gICN7JHNlbGVjdG9yfSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gZWxlbWVudHMoJG5hbWVzLi4uKSB7XG4gICRzZWxlY3RvcjogKCk7XG4gIEBlYWNoICRuYW1lIGluICRuYW1lcyB7XG4gICAgJHNlbGVjdG9yOiBhcHBlbmQoJHNlbGVjdG9yLCB1bnF1b3RlKCcmI3skZWxlbWVudFNlcGFyYXRvcn0jeyRuYW1lfScpLCBjb21tYSk7IH1cbiAgI3skc2VsZWN0b3J9IHtcbiAgICBAY29udGVudDsgfSB9XG5cbkBtaXhpbiBtb2RpZmllcigkbmFtZSkge1xuICAmI3skbW9kaWZpZXJTZXBhcmF0b3J9I3skbmFtZX0ge1xuICAgIEBjb250ZW50OyB9IH1cblxuQG1peGluIG1vZGlmaWVycygkbmFtZXMuLi4pIHtcbiAgJHNlbGVjdG9yOiAoKTtcbiAgQGVhY2ggJG5hbWUgaW4gJG5hbWVzIHtcbiAgICAkc2VsZWN0b3I6IGFwcGVuZCgkc2VsZWN0b3IsIHVucXVvdGUoJyYjeyRtb2RpZmllclNlcGFyYXRvcn0jeyRuYW1lfScpLCBjb21tYSk7IH1cbiAgI3skc2VsZWN0b3J9IHtcbiAgICBAY29udGVudDsgfSB9XG5cbkBtaXhpbiBmbGFnKCRuYW1lKSB7XG4gICYuaXMtI3skbmFtZX0ge1xuICAgIEBjb250ZW50OyB9IH1cblxuQG1peGluIHBhcmVudF9zZWxlY3Rvcl93aXRoX2VsZW1lbnRzKCRwYXJlbnRTZWxlY3RvciwgJG5hbWVzLi4uKSB7XG4gICRuYW1lc1NlbGVjdG9yczogKCk7XG4gIEBlYWNoICRuYW1lIGluICRuYW1lcyB7XG4gICAgJG5hbWVzU2VsZWN0b3JzOiBhcHBlbmQoJG5hbWVzU2VsZWN0b3JzLCB1bnF1b3RlKCcmI3skZWxlbWVudFNlcGFyYXRvcn0jeyRuYW1lfScpLCBjb21tYSk7IH1cbiAgJiN7JHBhcmVudFNlbGVjdG9yfSB7XG4gICAgI3skbmFtZXNTZWxlY3RvcnN9IHt9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuJGZvbnROYW1lOiBcIl9fcGVzZGtfTW9udHNlcnJhdFwiO1xuXG5AbWl4aW4gZm9udC1yZWd1bGFyIHtcbiAgZm9udC1mYW1pbHk6ICRmb250TmFtZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfVxuXG5AbWl4aW4gZm9udC1saWdodCB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udE5hbWU7XG4gIGZvbnQtd2VpZ2h0OiAxMDA7IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBtaXhpbiBzY3JlZW4tbWluLXNtYWxsKCkge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tc21hbGwtbWluKSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gc2NyZWVuLW1pbi1tZWRpdW0oKSB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHNjcmVlbi1tZWRpdW0tbWluKSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gc2NyZWVuLW1pbi1sYXJnZSgpIHtcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLWxhcmdlLW1pbikge1xuICAgIEBjb250ZW50OyB9IH1cblxuQG1peGluIHNjcmVlbi1zbWFsbCgpIHtcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLXNtYWxsLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc21hbGwtbWF4KSB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuXG5AbWl4aW4gc2NyZWVuLW1lZGl1bSgpIHtcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLW1lZGl1bS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1lZGl1bS1tYXgpIHtcbiAgICBAY29udGVudDsgfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AbWl4aW4gYXJyb3coJGRpcmVjdGlvbjogdG9wLCAkc2l6ZTogMTBweCwgJGNvbG9yOiAjY2NjLCAkY2VudGVyOiA1MCUsICRtYXJnaW46IC0xcHgsICRwc2V1ZG86IGJlZm9yZSkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuXG4gICY6I3skcHNldWRvfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgQGlmICRkaXJlY3Rpb24gPT0gXCJyaWdodFwiIHtcbiAgICAgIHRvcDogJGNlbnRlcjtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAkc2l6ZSAqIC0xO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW47XG4gICAgICBib3JkZXItdG9wOiAkc2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1ib3R0b206ICRzaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWxlZnQ6ICRzaXplIHNvbGlkICRjb2xvcjtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBpbmhlcml0OyB9XG5cbiAgICBAZWxzZSBpZiAkZGlyZWN0aW9uID09IFwiZG93blwiIHtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGxlZnQ6ICRjZW50ZXI7XG4gICAgICBtYXJnaW4tdG9wOiAkbWFyZ2luO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRzaXplICogLTE7XG4gICAgICBib3JkZXItdG9wOiAkc2l6ZSBzb2xpZCAkY29sb3I7XG4gICAgICBib3JkZXItcmlnaHQ6ICRzaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWxlZnQ6ICRzaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogaW5oZXJpdDsgfVxuXG4gICAgQGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBcImxlZnRcIiB7XG4gICAgICB0b3A6ICRjZW50ZXI7XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIG1hcmdpbi10b3A6ICRzaXplICogLTE7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRtYXJnaW47XG4gICAgICBib3JkZXItdG9wOiAkc2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yaWdodDogJHNpemUgc29saWQgJGNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJHNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogaW5oZXJpdDsgfVxuXG4gICAgQGVsc2Uge1xuICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgbGVmdDogJGNlbnRlcjtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICBtYXJnaW4tbGVmdDogJHNpemUgKiAtMTtcbiAgICAgIGJvcmRlci1yaWdodDogJHNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAkc2l6ZSBzb2xpZCAkY29sb3I7XG4gICAgICBib3JkZXItbGVmdDogJHNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBpbmhlcml0OyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyIHtcbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIEBjb250ZW50OyB9XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7IH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7IH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgQGNvbnRlbnQ7IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuIEBtaXhpbiBncmF5c2NhbGUoICR0b2dnbGU6IFwib25cIiwgJHBlcmNlbnRhZ2U6IDEgKSB7XG4gICRzdmctdHlwZTogXCJtYXRyaXhcIjtcbiAgJHN2Zy12YWx1ZTogXCIwLjMzMzMgMC4zMzMzIDAuMzMzMyAwIDAgMC4zMzMzIDAuMzMzMyAwLjMzMzMgMCAwIDAuMzMzMyAwLjMzMzMgMC4zMzMzIDAgMCAwIDAgMCAxIDBcIjtcbiAgJGllLWFscGhhOiBhbHBoYSgje1wib3BhY2l0eT1cIn1yb3VuZCggJHBlcmNlbnRhZ2UgKiAxMDAgKSApO1xuXG4gIEBpZiAkcGVyY2VudGFnZSAhPSAxIHtcbiAgICAkc3ZnLXR5cGU6IFwic2F0dXJhdGVcIjtcbiAgICAkc3ZnLXZhbHVlOiAkcGVyY2VudGFnZTtcbiAgfVxuXG4gIEBpZiAkdG9nZ2xlID09IFwib25cIiB7XG4gICAgZmlsdGVyOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFwnPjxmaWx0ZXIgaWQ9XFwnZ3JheXNjYWxlXFwnPjxmZUNvbG9yTWF0cml4IHR5cGU9XFwnI3skc3ZnLXR5cGV9XFwnIHZhbHVlcz1cXCcjeyRzdmctdmFsdWV9XFwnLz48L2ZpbHRlcj48L3N2Zz4jZ3JheXNjYWxlXCIpOyAvLyBGaXJlZm94IDEwKywgRmlyZWZveCBvbiBBbmRyb2lkXG4gICAgZmlsdGVyOiBncmF5ICRpZS1hbHBoYTsgLy8gSUU2LTlcbiAgICAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKCByb3VuZCggJHBlcmNlbnRhZ2UgKiAxMDAlICkgKTsgLy8gQ2hyb21lIDE5KywgU2FmYXJpIDYrLCBTYWZhcmkgNisgaU9TXG4gICAgZmlsdGVyOiBncmF5c2NhbGUoIHJvdW5kKCAkcGVyY2VudGFnZSAqIDEwMCUgKSApOyAvLyBDYXRjaC1hbGxcbiAgfVxuXG4gIEBpZiAkdG9nZ2xlID09IFwib2ZmXCIge1xuICAgIEBpZiAkc3ZnLXR5cGUgPT0gXCJzYXR1cmF0ZVwiIHtcbiAgICAgIGZpbHRlcjogbm9uZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIGZpbHRlcjogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcJz48ZmlsdGVyIGlkPVxcJ2dyYXlzY2FsZVxcJz48ZmVDb2xvck1hdHJpeCB0eXBlPVxcJ21hdHJpeFxcJyB2YWx1ZXM9XFwnMSAwIDAgMCAwLCAwIDEgMCAwIDAsIDAgMCAxIDAgMCwgMCAwIDAgMSAwXFwnLz48L2ZpbHRlcj48L3N2Zz4jZ3JheXNjYWxlXCIpO1xuICAgIH1cbiAgICAtd2Via2l0LWZpbHRlcjogZ3JheXNjYWxlKDAlKTtcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwKTtcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGdsb2JhbC1yZXNldCgpO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAvLyBXZWJraXQgYnVnZml4IGZvciByb3VuZGVkIGJvcmRlciB3aXRoIG92ZXJmbG93OiBoaWRkZW5cbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FJQUFBQ1FkMVBlQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFBNUpSRUZVZU5waVlHQmdBQWd3QUFBRUFBR2JBK29KQUFBQUFFbEZUa1N1UW1DQyk7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZENvbG9yO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gIEBpbmNsdWRlIHNjcmVlbi1taW4tc21hbGwge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNXB4KTsgfVxuXG4gICYsICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuJGhlYWRlckJhckhlaWdodDogMzBweDtcblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGhlYWRlcikge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJGhlYWRlckJhckhlaWdodDtcblxuICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudChsYWJlbCkge1xuICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjUpO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbGluZS1oZWlnaHQ6ICRoZWFkZXJCYXJIZWlnaHQ7XG4gICAgICBjb2xvcjogd2hpdGU7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoY2xvc2UpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTBweDtcbiAgICAgIGxlZnQ6IDE1cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaW1hZ2UpIHtcbiAgICAgICAgd2lkdGg6IDExcHg7XG4gICAgICAgIGhlaWdodDogMTFweDsgfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHNjcmVlbikge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNXB4KTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6ICRoZWFkZXJCYXJIZWlnaHQ7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjtcblxuICAgIEBpbmNsdWRlIG1vZGlmaWVyKG5vSGVhZGVyKSB7XG4gICAgICBwYWRkaW5nLXRvcDogMDsgfVxuXG4gICAgQGluY2x1ZGUgZmxhZyhoaWRkZW4pIHtcbiAgICAgIHotaW5kZXg6IC0xOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGJ1dHRvbikge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNXB4KTtcbiAgICBAaW5jbHVkZSBmb250LXJlZ3VsYXI7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC4zcyBlYXNlLW91dCk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiBub25lOyB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHByaW1hcnlDb2xvciwgMTApOyB9XG5cbiAgICBAaW5jbHVkZSBtb2RpZmllcihpbmxpbmUpIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuXG4gICAgQGluY2x1ZGUgbW9kaWZpZXIodXBwZXJjYXNlKSB7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDFweDsgfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbiR0b3BCYXJIZWlnaHQ6IDUwcHg7XG4kdG9wQmFySG9yaXpvbnRhbFBhZGRpbmc6IDIwcHg7XG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayh0b3BCYXIpIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50KHJvdykge1xuICAgICAgZGlzcGxheTogdGFibGUtcm93O1xuICAgICAgaGVpZ2h0OiAkdG9wQmFySGVpZ2h0O1xuICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudCh0YWJsZSkge1xuICAgICAgZGlzcGxheTogdGFibGU7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjZWxsKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVycyhsZWZ0LCByaWdodCkge1xuICAgICAgICBwYWRkaW5nOiAwICR0b3BCYXJIb3Jpem9udGFsUGFkZGluZzsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihsZWZ0KSB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIocmlnaHQpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZnVsbFdpZHRoKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQobGFiZWwpIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdG9wQmFySGVpZ2h0O1xuICAgICAgY29sb3I6IHdoaXRlOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50cyhsZWZ0LCByaWdodCkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxMHB4OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGxlZnQpIHtcbiAgICAgIGxlZnQ6IDE1cHg7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQocmlnaHQpIHtcbiAgICAgIHJpZ2h0OiAxNXB4OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGJhY2tCdXR0b24pIHtcbiAgICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50cyhpY29uLCBsYWJlbCkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpY29uKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBjb2xvcjogd2hpdGU7XG5cbiAgICAgICAgQGluY2x1ZGUgc2NyZWVuLW1pbi1zbWFsbCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjYW5jZWxCdXR0b24pIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC41KTtcbiAgICAgIC8vIE5vdCBmbG9hdGluZyBiZWNhdXNlIHdlIHdhbnQgdGhlIGxhYmVsIHRvIHN0YXkgY2VudGVyZWRcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6ICR0b3BCYXJIb3Jpem9udGFsUGFkZGluZztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdG9wQmFySGVpZ2h0O1xuICAgICAgY29sb3I6IHdoaXRlO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgxLjApOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoc3BhY2UpIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxMHB4OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGljb25CdXR0b24pIHtcbiAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC43KTtcbiAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuM3MgZWFzZS1vdXQpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luOiAwIDE0cHg7XG4gICAgICBwYWRkaW5nLXRvcDogMXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgxLjApOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4OyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoYnV0dG9uKSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW46IDAgNXB4O1xuICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgcGFkZGluZzogMCA2cHggMCA5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICBAaW5jbHVkZSBzY3JlZW4tbWluLXNtYWxsIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTJweDsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihibHVlKSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5Q29sb3I7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIod2l0aEljb24pIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4ICsgMTRweDsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIHNjcmVlbi1taW4tc21hbGwge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogOXB4O1xuICAgICAgICBsZWZ0OiAxMXB4O1xuICAgICAgICB3aWR0aDogMTRweDsgfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGNhbnZhcykge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQoY29udGFpbmVyKSB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50KHJvdykge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChjZWxsKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50cyhpbm5lckNvbnRhaW5lciwgY2FudmFzKSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcblxuICAgICAgQGluY2x1ZGUgZmxhZyhkcmFnZ2FibGUpIHtcbiAgICAgICAgY3Vyc29yOiBtb3ZlOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soY29udHJvbHMpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRhaW5lcikge1xuICAgICAgQGluY2x1ZGUgZWxlbWVudChyb3cpIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xuICAgICAgICBoZWlnaHQ6ICRjb250cm9sc0hlaWdodDtcbiAgICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGNlbGwpIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgICAgaGVpZ2h0OiAkY29udHJvbHNIZWlnaHQ7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHRhYmxlKSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkY29udHJvbHNIZWlnaHQ7XG4gICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KG92ZXJsYXkpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDM7XG4gICAgICBib3R0b206IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGxhcmdlKSB7XG4gICAgICAgIHBhZGRpbmc6IDE1cHggMCAxMHB4IDA7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZGFyaykge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRzZWNvbmRhcnlCYWNrZ3JvdW5kQ29sb3IsIDAuNyk7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjZWxsKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXJzKGJ1dHRvbiwgY29sb3JQaWNrZXIpIHtcbiAgICAgICAgd2lkdGg6ICRjb250cm9sc0J1dHRvbldpZHRoICsgMTBweDsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihjYXRlZ29yeURyb3Bkb3duKSB7XG4gICAgICAgIHdpZHRoOiAkY29udHJvbHNCdXR0b25XaWR0aCArIDIwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRsaWdodEJhY2tncm91bmRDb2xvcjsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihsYXJnZUJ1dHRvbikge1xuICAgICAgICB3aWR0aDogJGNvbnRyb2xzTmFycm93QnV0dG9uV2lkdGg7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIodmVyeUxhcmdlQnV0dG9uKSB7XG4gICAgICAgIHdpZHRoOiAkY29udHJvbHNMYXJnZUJ1dHRvbldpZHRoOyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHNsaWRlcikge1xuICAgICAgICBwYWRkaW5nLXRvcDogMzBweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHdpdGhCb3JkZXJSaWdodCkge1xuICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAkYmFja2dyb3VuZENvbG9yOyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHdpdGhCb3JkZXJMZWZ0KSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgJGJhY2tncm91bmRDb2xvcjsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihlbXB0eSkge1xuICAgICAgICB3aWR0aDogMDsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50cyhsYXJnZUJ1dHRvbiwgdmVyeUxhcmdlQnV0dG9uKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogJGNvbnRyb2xzTmFycm93QnV0dG9uV2lkdGg7XG4gICAgICBoZWlnaHQ6ICRjb250cm9sc0hlaWdodDtcbiAgICAgIGJhY2tncm91bmQ6ICRsaWdodEJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkY29udHJvbHNIZWlnaHQ7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuOCk7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIHdpZHRoOiAzNnB4OyB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KGljb24pOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQodmVyeUxhcmdlQnV0dG9uKSB7XG4gICAgICB3aWR0aDogJGNvbnRyb2xzTGFyZ2VCdXR0b25XaWR0aDtcblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpY29uKSB7XG4gICAgICAgIHdpZHRoOiA0OHB4OyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoYnV0dG9uKSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDFweCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogJGNvbnRyb2xzQnV0dG9uV2lkdGg7XG4gICAgICBoZWlnaHQ6ICRjb250cm9sc0J1dHRvbkhlaWdodDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkY29udHJvbHNCdXR0b25IZWlnaHQ7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaW5saW5lTGFiZWwpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgQGluY2x1ZGUgZmxhZyhhY3RpdmUpIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRwcmltYXJ5Q29sb3IsIDAuOCk7IH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZChsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKGJsYWNrLCAwKSwgcmdiYShibGFjaywgMC42KSkpO1xuICAgICAgICAgIEBpbmNsdWRlIGZvbnQtbGlnaHQ7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgICAgY29sb3I6IHdoaXRlOyB9IH1cblxuICAgICAgQGluY2x1ZGUgZmxhZyhhY3RpdmUpIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjsgfVxuXG4gICAgICAqIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIobmFycm93KSB7XG4gICAgICAgIHdpZHRoOiAkY29udHJvbHNOYXJyb3dCdXR0b25XaWR0aDsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGljb24pIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjgpO1xuICAgICAgICB3aWR0aDogMzZweDsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGNhbnZhcykge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuOCk7XG4gICAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgICBoZWlnaHQ6IDM2cHg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgxLjApOyB9XG5cbiAgICAgICAgQGluY2x1ZGUgbW9kaWZpZXIobGFyZ2UpIHtcbiAgICAgICAgICB3aWR0aDogJGNvbnRyb2xzQnV0dG9uV2lkdGg7XG4gICAgICAgICAgaGVpZ2h0OiAkY29udHJvbHNCdXR0b25IZWlnaHQ7IH0gfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC44KTtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWCgtNTAlKSk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiA5cHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgY29sb3I6IHdoaXRlOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQobGlzdCkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkY29udHJvbHNIZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAxMnB4IDA7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGl0ZW0pIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIHBhZGRpbmc6IDAgNXB4O1xuXG4gICAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGdhcCkge1xuICAgICAgICAgIHdpZHRoOiAyMHB4OyB9IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChzZXBhcmF0b3IpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbjogMCA1cHg7XG4gICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgIGhlaWdodDogNjRweDtcbiAgICAgICAgYmFja2dyb3VuZDogJHNlcGFyYXRvckNvbG9yOyB9IH0gfSB9XG5cbkBpbmNsdWRlIGJsb2NrKGNvbnRyb2xzKSB7XG4gIEBpbmNsdWRlIGVsZW1lbnQoYnV0dG9uKSB7XG4gICAgJGJhc2VTZWxlY3RvcjogJjtcbiAgICAmOmhvdmVyIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnRzV2l0aEJhc2VTZWxlY3RvcigkYmFzZVNlbGVjdG9yLCBpY29uLCBsYWJlbCkge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDEuMCk7IH0gfSB9XG5cbiAgQGluY2x1ZGUgZWxlbWVudChsYXJnZUJ1dHRvbikge1xuICAgICRiYXNlU2VsZWN0b3I6ICY7XG4gICAgJjpob3ZlciB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3RvciwgaWNvbiwgbGFiZWwpIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgxLjApOyB9IH0gfVxuXG4gIEBpbmNsdWRlIGVsZW1lbnQodmVyeUxhcmdlQnV0dG9uKSB7XG4gICAgJGJhc2VTZWxlY3RvcjogJjtcbiAgICAmOmhvdmVyIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnRzV2l0aEJhc2VTZWxlY3RvcigkYmFzZVNlbGVjdG9yLCBpY29uLCBsYWJlbCkge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDEuMCk7IH0gfSB9IH1cblxuQGluY2x1ZGUgYmxvY2soY29udHJvbHMpIHtcbiAgQGluY2x1ZGUgZWxlbWVudChidXR0b24pIHtcbiAgICAmI3skbW9kaWZpZXJTZXBhcmF0b3J9d2l0aElubGluZUxhYmVsICYjeyRlbGVtZW50U2VwYXJhdG9yfWljb24ge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygxcHgpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6ICRjb250cm9sc0J1dHRvbldpZHRoO1xuICAgICAgaGVpZ2h0OiAkY29udHJvbHNCdXR0b25IZWlnaHQ7IH1cblxuICAgICYjeyRtb2RpZmllclNlcGFyYXRvcn13aXRoSW5saW5lTGFiZWwgJiN7JGVsZW1lbnRTZXBhcmF0b3J9bGFiZWwge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoNHB4KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4gICAgJiN7JG1vZGlmaWVyU2VwYXJhdG9yfXdpdGhJbmxpbmVMYWJlbC5pcy1hY3RpdmUgJiN7JGVsZW1lbnRTZXBhcmF0b3J9bGFiZWwge1xuICAgICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjsgfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayhjYW52YXNDb250cm9scykge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQoaW5uZXJDb250YWluZXIpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjb250YWluZXIpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZnVsbCkge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoYm90dG9tKSB7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDE1cHggMCAxMHB4IDA7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZGFyaykge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRzZWNvbmRhcnlCYWNrZ3JvdW5kQ29sb3IsIDAuNyk7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudCh0YWJsZSkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHJvdykge1xuICAgICAgZGlzcGxheTogdGFibGUtcm93OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNlbGwpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2sod2ViY2FtKSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwYWRkaW5nOiAyNXB4O1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudCh2aWRlbykge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IGF1dG87IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soc2Nyb2xsYmFyKSB7XG4gICAgQGluY2x1ZGUgb3BhY2l0eSgwLjMpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIEBpbmNsdWRlIG1vZGlmaWVyKHZlcnRpY2FsKSB7XG4gICAgICByaWdodDogNXB4O1xuICAgICAgd2lkdGg6IDEycHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7IH1cblxuICAgIEBpbmNsdWRlIG1vZGlmaWVyKHZpc2libGUpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbiAgICBAaW5jbHVkZSBtb2RpZmllcihpbnZpc2libGUpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoYmFyKSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTJweDtcbiAgICAgIHBhZGRpbmc6IDRweDtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBjb250ZW50OiAnJzsgfSB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC41KTsgfSB9IH1cblxuQGluY2x1ZGUgYmxvY2soc2Nyb2xsYmFyKSB7XG4gIEBpbmNsdWRlIG1vZGlmaWVyKHZlcnRpY2FsKSB7XG4gICAgJGJhc2VTZWxlY3RvcjogJjtcbiAgICBAaW5jbHVkZSBibG9jayhzY3JvbGxiYXIpIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoYmFyKSB7XG4gICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlOyB9IH0gfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayhzbGlkZXIpIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgd2lkdGg6IDI4MHB4O1xuXG4gICAgQGluY2x1ZGUgbW9kaWZpZXIobGFyZ2UpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiA2MDBweDsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChiYXIpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA2cHg7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnRzKGJhY2tncm91bmQsIGZvcmVncm91bmQpIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGJhY2tncm91bmQpIHtcbiAgICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZChsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEod2hpdGUsIDAuMiksIHJnYmEod2hpdGUsIDAuNykpKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoZm9yZWdyb3VuZCkge1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGtub2IpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAyOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQobWlkZGxlRG90KSB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1hcmdpbjogLTNweCAwIDAgLTZweDtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQobGFiZWxzKSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtbGlnaHQ7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuXG4gICAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGxvd2VyQm91bmRhcnkpIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG5cbiAgICAgICAgQGluY2x1ZGUgbW9kaWZpZXIodXBwZXJCb3VuZGFyeSkge1xuICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbiAgICAgICAgQGluY2x1ZGUgbW9kaWZpZXJzKHVwcGVyQm91bmRhcnksIGxvd2VyQm91bmRhcnkpIHtcbiAgICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuNSk7XG4gICAgICAgICAgd2lkdGg6IDQwcHg7IH1cblxuICAgICAgICBAaW5jbHVkZSBtb2RpZmllcih2YWx1ZSkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2sobWluaVNsaWRlcikge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICB3aWR0aDogNDRweDtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoYmFyKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMnB4O1xuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50cyhiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kKSB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoM3B4KTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChiYWNrZ3JvdW5kKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEod2hpdGUsIDAuMyk7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChmb3JlZ3JvdW5kKSB7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoa25vYikge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDJweDtcbiAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soa25vYikge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICBtYXJnaW46IC0xMHB4IDAgMCAtMTBweDtcbiAgICBib3gtc2hhZG93OiAwcHggMXB4IDJweCAwcHggcmdiYShibGFjaywgLjUpO1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgQGluY2x1ZGUgbW9kaWZpZXIodHJhbnNwYXJlbnQpIHtcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHdoaXRlO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH1cblxuICAgIEBpbmNsdWRlIG1vZGlmaWVyKHNsaWRlcikge1xuICAgICAgbWFyZ2luOiAtN3B4IDAgMCAtN3B4O1xuICAgICAgcGFkZGluZzogNHB4IDA7XG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHByaW1hcnlDb2xvcjtcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIobGFyZ2VyKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgd2lkdGg6IDEwcHg7IH0gfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayhjb2xvclBpY2tlcikge1xuICAgIGhlaWdodDogJGNvbnRyb2xzSGVpZ2h0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIEBpbmNsdWRlIGZsYWcoYWN0aXZlKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZENvbG9yOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHByZXZpZXcpIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMnB4KTtcbiAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICB3aWR0aDogMzBweDtcbiAgICAgIGhlaWdodDogMzBweDsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChsYWJlbCkge1xuICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjgpO1xuICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZVgoLTUwJSkpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAxOXB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBjb2xvcjogd2hpdGU7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQob3ZlcmxheSkge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoNHB4KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDQ7XG4gICAgICBib3R0b206IDEwMCU7XG4gICAgICByaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgd2lkdGg6IDIyMHB4O1xuICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoYm90dG9tKSB7XG4gICAgICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50cyhzYXR1cmF0aW9uLCBodWUsIGFscGhhKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoa25vYikge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChjYW52YXMpIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoc2F0dXJhdGlvbikge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB3aWR0aDogMTYwcHg7XG4gICAgICBoZWlnaHQ6IDE2MHB4O1xuICAgICAgQGluY2x1ZGUgZWxlbWVudChjYW52YXMpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTYwcHg7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChodWUpIHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgaGVpZ2h0OiAxNjBweDtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoY2FudmFzKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDE2MHB4OyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoYWxwaGEpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgQGluY2x1ZGUgZWxlbWVudChjYW52YXMpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMzBweDsgfSB9IH0gfVxuXG5AaW5jbHVkZSBibG9jayhjb2xvclBpY2tlcikge1xuICAkYmFzZVNlbGVjdG9yOiAmO1xuICAmOmhvdmVyIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3RvciwgaWNvbiwgbGFiZWwpIHtcbiAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMS4wKTsgfSB9IH1cblxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGNvbnRyb2xzKSB7XG4gICAgQGluY2x1ZGUgZWxlbWVudChjYXRlZ29yeURyb3Bkb3duKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBoZWlnaHQ6ICRjb250cm9sc0hlaWdodDtcbiAgICAgIGJhY2tncm91bmQ6ICRsaWdodEJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgQGluY2x1ZGUgZmxhZyhhY3RpdmUpIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmRDb2xvcjsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC44KTtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWCgtNTAlKSk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAxOXB4O1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGljb24pIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjgpO1xuICAgICAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICAgICAgICB3aWR0aDogMzZweDtcbiAgICAgICAgaGVpZ2h0OiAzNnB4OyB9IH0gfVxuXG4gIEBpbmNsdWRlIGJsb2NrKGNhdGVnb3J5RHJvcGRvd24pIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50KG92ZXJsYXkpIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDRweCk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiA0O1xuICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgd2lkdGg6IDIyMHB4O1xuICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoJGJhY2tncm91bmRDb2xvciwgMC45KTtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChsaXN0KSB7XG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaXRlbSkge1xuICAgICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMnB4KTtcbiAgICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuOSk7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7IH1cblxuICAgICAgICAgIEBpbmNsdWRlIGZsYWcoYWN0aXZlKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDEuMCk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yOyB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBlbGVtZW50KGxhYmVsKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmb250LXJlZ3VsYXI7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDhweDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7IH1cblxuICAgICAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW46IDZweCAxMHB4IDAgNnB4O1xuICAgICAgICAgICAgd2lkdGg6IDM2cHg7IH0gfSB9IH0gfSB9XG5cbkBpbmNsdWRlIGJsb2NrKGNvbnRyb2xzKSB7XG4gIEBpbmNsdWRlIGVsZW1lbnQoY2F0ZWdvcnlEcm9wZG93bikge1xuICAgICRiYXNlU2VsZWN0b3I6ICY7XG4gICAgJjpob3ZlciB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3RvciwgaWNvbiwgbGFiZWwpIHtcbiAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgxLjApOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soaGlkZGVuRmlsZUlucHV0KSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKG1vZGFscykge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQobW9kYWwpIHtcbiAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSkpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogNjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIGdyZXk7XG4gICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICBtYXgtd2lkdGg6IDkwJTtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKCRzZWNvbmRhcnlCYWNrZ3JvdW5kQ29sb3IsIDAuOSk7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGVycm9yKSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHJlZENvbG9yOyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHdhcm5pbmcpIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkeWVsbG93Q29sb3I7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChvdmVybGF5KSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiA1O1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmFja2dyb3VuZENvbG9yLCAwLjgpOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGJ1dHRvbikge1xuICAgICAgbWFyZ2luLXRvcDogMC41ZW07IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnRzKHRpdGxlLCB0ZXh0KSB7XG4gICAgICBAaW5jbHVkZSBmb250LXJlZ3VsYXI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGNvbG9yOiB3aGl0ZTsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudCh0aXRsZSkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQodGV4dCkge1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgY29sb3I6IHJnYmEod2hpdGUsIDAuNSk7IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2sobG9hZGluZ01vZGFsKSB7XG4gICAgQGluY2x1ZGUgZWxlbWVudChwcm9ncmVzc0Jhcikge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIG1hcmdpbjogMTBweCBhdXRvIDA7XG4gICAgICBoZWlnaHQ6IDVweDtcbiAgICAgIGJhY2tncm91bmQ6ICRkYXJrZXJHcmV5Q29sb3I7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQocHJvZ3Jlc3MpIHtcbiAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRsaWdodGVyR3JleUNvbG9yOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2socGhvdG9Sb2xsKSB7XG4gICAgQGluY2x1ZGUgZWxlbWVudChyb3cpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZnVsbEhlaWdodCkge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjZWxsKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRhaW5lcikge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcblxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgQGluY2x1ZGUgc2NyZWVuLW1pbi1zbWFsbCB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChoZWFkbGluZSkge1xuICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgICAgIGNvbG9yOiAkbGlnaHRlckdyZXlDb2xvcjsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChpbm5lckNvbnRhaW5lcikge1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiA3NzBweDtcbiAgICAgIHBhZGRpbmc6IDMwcHggMTBweDsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChncm91cExpc3QpIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaXRlbSkge1xuICAgICAgICBtYXJnaW46IDMwcHggMCA2MHB4IDA7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChsaWJyYXJ5TGlzdCkge1xuICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDVweCA3cHggMCByZ2JhKGJsYWNrLCAwLjMzKSk7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpdGVtKSB7XG4gICAgICAgIEBpbmNsdWRlIGdyYXlzY2FsZSgnb24nLCAwLjc5KTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICBoZWlnaHQ6IDIxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChvdmVybGF5KSB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuM3MgZWFzZS1vdXQpO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYShibGFjaywgMC4zNSk7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChuYW1lKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgICAgQGluY2x1ZGUgdGV4dC1zaGFkb3coMHB4IDFweCAxcHggcmdiYShibGFjaywgMC41MCkpO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMjJweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogd2hpdGU7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChwaG90b0xpc3QpIHtcbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQobGlzdCkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcbiAgICAgICAgd2lkdGg6IDI0MHB4O1xuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpdGVtKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTVweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaW1hZ2UpIHtcbiAgICAgICAgICB3aWR0aDogMjQwcHg7IH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50cyh0aXRsZSwgb3ZlcmxheSkge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMCk7XG4gICAgICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC4zcyBlYXNlLW91dCk7IH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KHRpdGxlKSB7XG4gICAgICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgZGlzcGxheTogdGFibGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxM3B4O1xuICAgICAgICAgIHBhZGRpbmc6IDE1cHggMjBweDtcbiAgICAgICAgICBjb2xvcjogd2hpdGU7IH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KG92ZXJsYXkpIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IGJsYWNrOyB9IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChub1NlYXJjaFJlc3VsdHMpIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtbGlnaHQ7XG4gICAgICBwYWRkaW5nOiA1MHB4IDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiAkbGlnaHRlckdyZXlDb2xvcjtcblxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyOyB9IH0gfSB9XG5cbkBpbmNsdWRlIGJsb2NrKHBob3RvUm9sbCkge1xuICBAaW5jbHVkZSBlbGVtZW50KGxpYnJhcnlMaXN0KSB7XG4gICAgJGJhc2VTZWxlY3RvcjogJjtcbiAgICBAaW5jbHVkZSBlbGVtZW50KGl0ZW0pIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBncmF5c2NhbGUoJ29mZicpO1xuICAgICAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3Rvciwgb3ZlcmxheSkge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC4wKTsgfSB9IH0gfVxuXG4gIEBpbmNsdWRlIGVsZW1lbnQocGhvdG9MaXN0KSB7XG4gICAgQGluY2x1ZGUgZWxlbWVudChpdGVtKSB7XG4gICAgICAkYmFzZVNlbGVjdG9yOiAmO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnRzV2l0aEJhc2VTZWxlY3RvcigkYmFzZVNlbGVjdG9yLCBvdmVybGF5KSB7XG4gICAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjM3KTsgfVxuXG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnRzV2l0aEJhc2VTZWxlY3RvcigkYmFzZVNlbGVjdG9yLCB0aXRsZSkge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMSk7IH0gfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGNyb3BDYW52YXNDb250cm9scykge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoa25vYikge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMjtcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIodG9wTGVmdCkge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbjogKCRrbm9iU2l6ZSAqIC0wLjUpIDAgMCAoJGtub2JTaXplICogLTAuNSk7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoYm90dG9tUmlnaHQpIHtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbWFyZ2luOiAwICgka25vYlNpemUgKiAtMC41KSAoJGtub2JTaXplICogLTAuNSkgMDsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHJvdykge1xuICAgICAgZGlzcGxheTogdGFibGUtcm93OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNlbGwpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICBjdXJzb3I6IG1vdmU7XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGRhcmspIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmFja2dyb3VuZENvbG9yLCAwLjgpO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMHB4OyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGJvcmRlcmVkKSB7XG4gICAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMHB4IDFweCAycHggMHB4IGJsYWNrKTsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGRpbWVuc2lvbnMpIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtbGlnaHQ7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01MCUpKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgcGFkZGluZzogMCAxMHB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmFja2dyb3VuZENvbG9yLCAwLjcpO1xuICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgY29sb3I6IHdoaXRlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHN0cmFpZ2h0ZW5DYW52YXNDb250cm9scykge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoa25vYikge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMjtcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIodG9wTGVmdCkge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbjogKCRrbm9iU2l6ZSAqIC0wLjUpIDAgMCAoJGtub2JTaXplICogLTAuNSk7IH1cblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoYm90dG9tUmlnaHQpIHtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbWFyZ2luOiAwICgka25vYlNpemUgKiAtMC41KSAoJGtub2JTaXplICogLTAuNSkgMDsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHJvdykge1xuICAgICAgZGlzcGxheTogdGFibGUtcm93OyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNlbGwpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICBjdXJzb3I6IG1vdmU7XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGRhcmspIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmFja2dyb3VuZENvbG9yLCAwLjgpO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMHB4OyB9XG5cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKGJvcmRlcmVkKSB7XG4gICAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMHB4IDFweCAycHggMHB4IGJsYWNrKTsgfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGRpbWVuc2lvbnMpIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtbGlnaHQ7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01MCUpKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgcGFkZGluZzogMCAxMHB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgkYmFja2dyb3VuZENvbG9yLCAwLjcpO1xuICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgY29sb3I6IHdoaXRlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGxpbmVhckZvY3VzQ2FudmFzQ29udHJvbHMpIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGtub2IpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgICBtYXJnaW46ICgka25vYlNpemUgKiAtMC41KSAwIDAgKCRrbm9iU2l6ZSAqIC0wLjUpOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGFyZWEpIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMHB4IDFweCAycHggMHB4IGJsYWNrKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xuICAgICAgY3Vyc29yOiBtb3ZlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHJhZGlhbEZvY3VzQ2FudmFzQ29udHJvbHMpIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGtub2IpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgICBtYXJnaW46ICgka25vYlNpemUgKiAtMC41KSAwIDAgKCRrbm9iU2l6ZSAqIC0wLjUpOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGFyZWEpIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMHB4IDFweCAycHggMHB4IGJsYWNrKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlO1xuICAgICAgY3Vyc29yOiBtb3ZlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHN0aWNrZXJzQ29udHJvbHMpIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50KHRvb2x0aXApIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNHB4KTtcbiAgICAgIEBpbmNsdWRlIGFycm93KGRvd24sIDEwcHgsICRzZWNvbmRhcnlCYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIG1hcmdpbjogMCAwIDIwcHggLTgwcHg7XG4gICAgICB3aWR0aDogMTMwcHg7XG4gICAgICBoZWlnaHQ6IDIwMHB4O1xuICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnlCYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoY2FudmFzKSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChpdGVtKSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgd2lkdGg6ICRjb250cm9sc0J1dHRvbldpZHRoICsgMjBweDtcbiAgICAgIGhlaWdodDogJGNvbnRyb2xzQnV0dG9uSGVpZ2h0O1xuICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgYmFja2dyb3VuZDogJGRhcmtlckdyZXlDb2xvcjtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgJjpmaXJzdC1jaGlsZCwgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGNhbnZhcykge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soc3ByaXRlc0NhbnZhc0NvbnRyb2xzKSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoaXRlbSkge1xuICAgICAgQGluY2x1ZGUgZWxlbWVudChrbm9iKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogMzsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRhaW5lcikge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgICAgICAgQGluY2x1ZGUgbW9kaWZpZXIoZnVsbCkge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTsgfSB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnRzKHRleHQsIHN0aWNrZXIsIGtub2IpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnRzKHRleHQsIHN0aWNrZXIpIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIEBpbmNsdWRlIGZsYWcoc2VsZWN0ZWQpIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KDBweCAxcHggMnB4IDBweCBibGFjayk7XG4gICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIHdoaXRlO1xuICAgICAgICAgIGN1cnNvcjogbW92ZTsgfSB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQodGV4dCkge1xuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KGRpc2FibGVkT3ZlcmxheSkge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7IH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRlbnQpIHtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICByZXNpemU6IG5vbmU7IH0gfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGJydXNoKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcblxuICAgICAgICBAaW5jbHVkZSBmbGFnKHNlbGVjdGVkKSB7XG4gICAgICAgICAgY3Vyc29yOiBub25lOyB9XG5cbiAgICAgICAgY2FudmFzIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlOyB9IH0gfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayhzcHJpdGVzQ29udHJvbHNPdmVybGF5KSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyg0cHgpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA0cHggOXB4IHJnYmEoYmxhY2ssIDAuMikpO1xuICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGVYKC01MCUpKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICBoZWlnaHQ6IDMxcHg7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnRzKGl0ZW0sIHNlcGFyYXRvcikge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGl0ZW0pIHtcbiAgICAgIHdpZHRoOiAzNXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKGJsYWNrLCAwLjEpOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4OyB9IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoc2VwYXJhdG9yKSB7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAxOXB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYShibGFjaywgMC4xKTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soYWRqdXN0bWVudHNDb250cm9scykge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQobWluaVNsaWRlcikge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0yMnB4OyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHRleHRGb250U2l6ZUNvbnRyb2xzKSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxMTBweDtcbiAgICBoZWlnaHQ6ICRjb250cm9sc0J1dHRvbkhlaWdodDtcbiAgICBAaW5jbHVkZSBlbGVtZW50KGJ1dHRvbnMpIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiA5cHggMCAwIDE1cHg7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGJ1dHRvbikge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuMik7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC41KTsgfVxuXG4gICAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHBsdXMpIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygycHgpO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFweDsgfVxuXG4gICAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKG1pbnVzKSB7XG4gICAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMnB4KTsgfVxuXG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0gfSB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHJpZ2h0KSB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBtYXJnaW4tdG9wOiA3cHg7XG4gICAgICB3aWR0aDogNjBweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoc2l6ZSkge1xuICAgICAgICBAaW5jbHVkZSBmb250LXJlZ3VsYXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgY29sb3I6IHdoaXRlOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQobGFiZWwpIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTsgfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGZvbnRTaXplKSB7XG4gICAgQGluY2x1ZGUgZWxlbWVudCh0ZXh0KSB7XG4gICAgICBAaW5jbHVkZSBmb250LXJlZ3VsYXI7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgY29sb3I6IHdoaXRlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGZvbnRGYW1pbHkpIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50KGNhbnZhcykge1xuICAgICAgd2lkdGg6IDYwcHg7XG4gICAgICBoZWlnaHQ6IDQycHg7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQobGlzdCkge1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZzogNXB4IDAgMTBweCAwO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChpdGVtKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogNjBweDtcbiAgICAgIGhlaWdodDogNjBweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoM3B4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7IH0gfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChsYWJlbCkge1xuICAgICAgQGluY2x1ZGUgZm9udC1yZWd1bGFyO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiA1cHg7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6IDAgNXB4O1xuICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgY29sb3I6IHdoaXRlOyB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGJydXNoQ2FudmFzQ29udHJvbHMpIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgY3Vyc29yOiBub25lO1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjdXJzb3IpIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMHB4IDFweCAycHggMHB4IGJsYWNrKTtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgICAgIGN1cnNvcjogbm9uZTtcblxuICAgICAgQGluY2x1ZGUgZmxhZyh2aXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soc2VsZWN0aXZlQmx1ckNhbnZhc0NvbnRyb2xzKSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGN1cnNvcjogbm9uZTtcblxuICAgIEBpbmNsdWRlIGVsZW1lbnQoY3Vyc29yKSB7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KDBweCAxcHggMnB4IDBweCBibGFjayk7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDUwJSk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7XG4gICAgICBjdXJzb3I6IG5vbmU7XG5cbiAgICAgIEBpbmNsdWRlIGZsYWcodmlzaWJsZSkge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKGxvYWRpbmdTY3JlZW4pIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRhaW5lcikge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KGNhbnZhcykge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICBtYXJnaW4tdG9wOiAtNTNweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNTNweDtcbiAgICAgIHdpZHRoOiAxMDZweDtcbiAgICAgIGhlaWdodDogMTA2cHg7IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2soc3BsYXNoU2NyZWVuKSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZENvbG9yO1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjb250YWluZXIpIHtcbiAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSkpO1xuICAgICAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDc1MHB4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWF4LWhlaWdodDogNjAwcHg7IH1cblxuICAgIEBpbmNsdWRlIGVsZW1lbnQocm93KSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDVweCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgYm9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgQGluY2x1ZGUgbW9kaWZpZXIocm93LTIpIHtcbiAgICAgICAgaGVpZ2h0OiA1MCU7IH1cbiAgICAgIEBpbmNsdWRlIG1vZGlmaWVyKHJvdy0zKSB7XG4gICAgICAgIGhlaWdodDogMzMuMzMzMzMzJTsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoY29udGVudFJvdykge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChvdmVybGF5KSB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIGVhc2Utb3V0IDAuMXMpO1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDEuMCk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKGJsYWNrLCAwLjUpOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoY29udGVudENlbGwpIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyg1cHgpO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG5cbiAgICAgICAgQGluY2x1ZGUgbW9kaWZpZXIod2l0aEJvcmRlcikge1xuICAgICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuM3MgZWFzZS1vdXQpO1xuICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAkbGlnaHRHcmV5Q29sb3I7XG4gICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICRsaWdodGVyR3JleUNvbG9yOyB9IH0gfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50cyhoZWFkbGluZSwgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgQGluY2x1ZGUgdGV4dC1zaGFkb3coMHB4IDFweCAxcHggcmdiYShibGFjaywgMC41MCkpO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIG1hcmdpbjogYXV0bzsgfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGhlYWRsaW5lKSB7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtcmVndWxhcjtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICAgICAgICBjb2xvcjogJHdoaXRlQ29sb3I7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChkZXNjcmlwdGlvbikge1xuICAgICAgICBAaW5jbHVkZSBmb250LWxpZ2h0O1xuICAgICAgICBtYXgtd2lkdGg6IDI1NXB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTNweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBjb2xvcjogJGxpZ2h0R3JleVRleHRDb2xvcjsgfSB9IH0gfVxuXG5AaW5jbHVkZSBibG9jayhzcGxhc2hTY3JlZW4pIHtcbiAgQGluY2x1ZGUgZWxlbWVudChyb3cpIHtcbiAgICAkYmFzZVNlbGVjdG9yOiAmO1xuICAgIEBpbmNsdWRlIGVsZW1lbnQoY29udGVudFdyYXBwZXIpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3Rvciwgb3ZlcmxheSkge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC4wKTsgfSB9IH0gfSB9XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUGhvdG9FZGl0b3JTREsuXG4gKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IDllbGVtZW50cyBHbWJIIDxjb250YWN0QDllbGVtZW50cy5jb20+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnRcbiAqIGlzIGFwcHJvdmVkIGFuZCBhIGxlZ2FsL2ZpbmFuY2lhbCBjb250cmFjdCB3YXMgc2lnbmVkIGJ5IHRoZSB1c2VyLlxuICogVGhlIGxpY2Vuc2UgYWdyZWVtZW50IGNhbiBiZSBmb3VuZCB1bmRlciBmb2xsb3dpbmcgbGluazpcbiAqXG4gKiBodHRwczovL3d3dy5waG90b2VkaXRvcnNkay5jb20vTElDRU5TRS50eHRcbiAqL1xuXG5AaW5jbHVkZSBibG9jayhlZGl0b3IpIHtcbiAgQGluY2x1ZGUgYmxvY2sod2ViY2FtU2NyZWVuKSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudChyb3cpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsgfVxuXG4gICAgQGluY2x1ZGUgZWxlbWVudChjZWxsKSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHNodXR0ZXJCdXR0b24pIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMjZweCk7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgbWFyZ2luOiAxNXB4IGF1dG8gYXV0byBhdXRvO1xuICAgICAgd2lkdGg6IDExNXB4O1xuICAgICAgaGVpZ2h0OiA1M3B4O1xuICAgICAgYmFja2dyb3VuZDogZ3JheXNjYWxlKCRwcmltYXJ5Q29sb3IpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICBAaW5jbHVkZSBmbGFnKGFjdGl2ZSkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yOyB9XG5cbiAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaWNvbikge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIHdpZHRoOiAzOXB4O1xuICAgICAgICBoZWlnaHQ6IDM5cHg7IH0gfSB9IH1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaG90b0VkaXRvclNESy5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTYgOWVsZW1lbnRzIEdtYkggPGNvbnRhY3RAOWVsZW1lbnRzLmNvbT5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudFxuICogaXMgYXBwcm92ZWQgYW5kIGEgbGVnYWwvZmluYW5jaWFsIGNvbnRyYWN0IHdhcyBzaWduZWQgYnkgdGhlIHVzZXIuXG4gKiBUaGUgbGljZW5zZSBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kIHVuZGVyIGZvbGxvd2luZyBsaW5rOlxuICpcbiAqIGh0dHBzOi8vd3d3LnBob3RvZWRpdG9yc2RrLmNvbS9MSUNFTlNFLnR4dFxuICovXG5cbkBpbmNsdWRlIGJsb2NrKGVkaXRvcikge1xuICBAaW5jbHVkZSBibG9jayhlZGl0b3JTY3JlZW4pIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICBAaW5jbHVkZSBlbGVtZW50KHpvb20pIHtcbiAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMC43KTtcbiAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGJ1dHRvbikge1xuICAgICAgICBAaW5jbHVkZSBvcGFjaXR5KDAuNSk7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgcGFkZGluZzogMCAxN3B4O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIEBpbmNsdWRlIG9wYWNpdHkoMSk7IH1cblxuICAgICAgICBAaW5jbHVkZSBmbGFnKGRpc2FibGVkKSB7XG4gICAgICAgICAgQGluY2x1ZGUgb3BhY2l0eSgwLjEpOyB9XG5cbiAgICAgICAgQGluY2x1ZGUgZWxlbWVudChpbWFnZSkge1xuICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChsYWJlbCkge1xuICAgICAgICBAaW5jbHVkZSBmb250LWxpZ2h0O1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTsgfSB9IH0gfVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFBob3RvRWRpdG9yU0RLLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAxNiA5ZWxlbWVudHMgR21iSCA8Y29udGFjdEA5ZWxlbWVudHMuY29tPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50XG4gKiBpcyBhcHByb3ZlZCBhbmQgYSBsZWdhbC9maW5hbmNpYWwgY29udHJhY3Qgd2FzIHNpZ25lZCBieSB0aGUgdXNlci5cbiAqIFRoZSBsaWNlbnNlIGFncmVlbWVudCBjYW4gYmUgZm91bmQgdW5kZXIgZm9sbG93aW5nIGxpbms6XG4gKlxuICogaHR0cHM6Ly93d3cucGhvdG9lZGl0b3JzZGsuY29tL0xJQ0VOU0UudHh0XG4gKi9cblxuQGluY2x1ZGUgYmxvY2soZWRpdG9yKSB7XG4gIEBpbmNsdWRlIGJsb2NrKHBob3RvUm9sbFNjcmVlbikge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogJGJhY2tncm91bmRDb2xvcjtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuXG4gICAgQGluY2x1ZGUgZWxlbWVudChzZWFyY2hCYXIpIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMTVweCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIGJhY2tncm91bmQ6ICRsaWdodEdyZXlDb2xvcjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChjb250ZW50KSB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGVYKC01MCUpKTtcbiAgICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC4zcyBlYXNlLW91dCk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTsgfVxuXG4gICAgICBAaW5jbHVkZSBtb2RpZmllcihhY3RpdmUpIHtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpY29uKSB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMXB4O1xuXG4gICAgICAgIEBpbmNsdWRlIGVsZW1lbnQoaW1hZ2UpIHtcbiAgICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgICBoZWlnaHQ6IDE0cHg7IH0gfVxuXG4gICAgICBAaW5jbHVkZSBlbGVtZW50KGlucHV0Q29udGFpbmVyKSB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudChpbnB1dCkge1xuICAgICAgICBAaW5jbHVkZSBmb250LWxpZ2h0O1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKGFsbCAwLjNzIGVhc2Utb3V0KTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICAgICAgY29sb3I6ICR0b3BCYXJTZWFyY2hQbGFjZWhvbGRlckNvbG9yOyB9XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGJvcmRlci13aWR0aDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICBAaW5jbHVkZSBpbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICAgICAgICBjb2xvcjogJHRvcEJhclNlYXJjaFBsYWNlaG9sZGVyQ29sb3I7IH0gfSB9IH0gfSB9XG5cbkBpbmNsdWRlIGJsb2NrKHBob3RvUm9sbFNjcmVlbikge1xuICBAaW5jbHVkZSBlbGVtZW50KHNlYXJjaEJhcikge1xuICAgICRiYXNlU2VsZWN0b3I6ICY7XG4gICAgQGluY2x1ZGUgbW9kaWZpZXIoYWN0aXZlKSB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50c1dpdGhCYXNlU2VsZWN0b3IoJGJhc2VTZWxlY3RvciwgY29udGVudCkge1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKGFsbCAwLjNzIGVhc2Utb3V0KTtcbiAgICAgICAgQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZVgoMCkpO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogNDAwcHg7IH1cblxuICAgICAgQGluY2x1ZGUgZWxlbWVudHNXaXRoQmFzZVNlbGVjdG9yKCRiYXNlU2VsZWN0b3IsIGlucHV0KSB7XG4gICAgICAgIHdpZHRoOiA0MDBweCAtIDMwcHggIWltcG9ydGFudDsgfSB9IH0gfVxuXG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBcUVaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QUNaSDs7Ozs7Ozs7Ozs7O0dBWUc7QU5ZRCxBQUFBLG1CQUFtQixDQUFuQjtFaENWdUQsbUJBQW9CLEU2QkZsRSxJQUFPO0U3QkkwQyxnQkFBaUIsRTZCSmxFLElBQU87RTdCSzJDLGVBQWdCLEU2QkxsRSxJQUFPO0U3Qk8rQyxXQUFZLEU2QlBsRSxJQUFPO0VTT2hCLGtCQUFrQixFQUE0SywyS0FBQztFQUUvTCxRQUFRLEVBQUUsUUFBUztFQUNuQixRQUFRLEVBQUUsTUFBTztFQUNqQixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxJQUFLO0VBQ2IsVUFBVSxFUFRNLE9BQU87RU9VdkIsVUFBVSxFQUFFLElBQUssR05ESjtFQURiLEF4RHBCQSxtQndEb0JtQixDeERwQm5CLElBQUksRXdEb0JKLEF4RHBCTSxtQndEb0JhLEN4RHBCYixJQUFJLEV3RG9CVixBeERwQlksbUJ3RG9CTyxDeERwQlAsR0FBRyxFd0RvQmYsQXhEcEJpQixtQndEb0JFLEN4RHBCRixJQUFJLEV3RG9CckIsQXhEcEJ1QixtQndEb0JKLEN4RHBCSSxNQUFNLEV3RG9CN0IsQXhEcEIrQixtQndEb0JaLEN4RHBCWSxNQUFNLEV3RG9CckMsQXhEcEJ1QyxtQndEb0JwQixDeERwQm9CLE1BQU07RXdEb0I3QyxBeERuQkEsbUJ3RG1CbUIsQ3hEbkJuQixFQUFFLEV3RG1CRixBeERuQkksbUJ3RG1CZSxDeERuQmYsRUFBRSxFd0RtQk4sQXhEbkJRLG1Cd0RtQlcsQ3hEbkJYLEVBQUUsRXdEbUJWLEF4RG5CWSxtQndEbUJPLEN4RG5CUCxFQUFFLEV3RG1CZCxBeERuQmdCLG1Cd0RtQkcsQ3hEbkJILEVBQUUsRXdEbUJsQixBeERuQm9CLG1Cd0RtQkQsQ3hEbkJDLEVBQUUsRXdEbUJ0QixBeERuQndCLG1Cd0RtQkwsQ3hEbkJLLENBQUMsRXdEbUJ6QixBeERuQjJCLG1Cd0RtQlIsQ3hEbkJRLFVBQVUsRXdEbUJyQyxBeERuQnVDLG1Cd0RtQnBCLEN4RG5Cb0IsR0FBRztFd0RtQjFDLEF4RGxCQSxtQndEa0JtQixDeERsQm5CLENBQUMsRXdEa0JELEF4RGxCRyxtQndEa0JnQixDeERsQmhCLElBQUksRXdEa0JQLEF4RGxCUyxtQndEa0JVLEN4RGxCVixPQUFPLEV3RGtCaEIsQXhEbEJrQixtQndEa0JDLEN4RGxCRCxPQUFPLEV3RGtCekIsQXhEbEIyQixtQndEa0JSLEN4RGxCUSxHQUFHLEV3RGtCOUIsQXhEbEJnQyxtQndEa0JiLEN4RGxCYSxJQUFJLEV3RGtCcEMsQXhEbEJzQyxtQndEa0JuQixDeERsQm1CLElBQUk7RXdEa0IxQyxBeERqQkEsbUJ3RGlCbUIsQ3hEakJuQixHQUFHLEV3RGlCSCxBeERqQkssbUJ3RGlCYyxDeERqQmQsR0FBRyxFd0RpQlIsQXhEakJVLG1Cd0RpQlMsQ3hEakJULEVBQUUsRXdEaUJaLEF4RGpCYyxtQndEaUJLLEN4RGpCTCxHQUFHLEV3RGlCakIsQXhEakJtQixtQndEaUJBLEN4RGpCQSxHQUFHLEV3RGlCdEIsQXhEakJ3QixtQndEaUJMLEN4RGpCSyxHQUFHLEV3RGlCM0IsQXhEakI2QixtQndEaUJWLEN4RGpCVSxDQUFDLEV3RGlCOUIsQXhEakJnQyxtQndEaUJiLEN4RGpCYSxDQUFDLEV3RGlCakMsQXhEakJtQyxtQndEaUJoQixDeERqQmdCLElBQUk7RXdEaUJ2QyxBeERoQkEsbUJ3RGdCbUIsQ3hEaEJuQixLQUFLLEV3RGdCTCxBeERoQk8sbUJ3RGdCWSxDeERoQlosTUFBTSxFd0RnQmIsQXhEaEJlLG1Cd0RnQkksQ3hEaEJKLE1BQU0sRXdEZ0JyQixBeERoQnVCLG1Cd0RnQkosQ3hEaEJJLEdBQUcsRXdEZ0IxQixBeERoQjRCLG1Cd0RnQlQsQ3hEaEJTLEdBQUcsRXdEZ0IvQixBeERoQmlDLG1Cd0RnQmQsQ3hEaEJjLEVBQUUsRXdEZ0JuQyxBeERoQnFDLG1Cd0RnQmxCLEN4RGhCa0IsR0FBRztFd0RnQnhDLEF4RGZBLG1Cd0RlbUIsQ3hEZm5CLENBQUMsRXdEZUQsQXhEZkcsbUJ3RGVnQixDeERmaEIsQ0FBQyxFd0RlSixBeERmTSxtQndEZWEsQ3hEZmIsQ0FBQyxFd0RlUCxBeERmUyxtQndEZVUsQ3hEZlYsTUFBTTtFd0RlZixBeERkQSxtQndEY21CLEN4RGRuQixFQUFFLEV3RGNGLEF4RGRJLG1Cd0RjZSxDeERkZixFQUFFLEV3RGNOLEF4RGRRLG1Cd0RjVyxDeERkWCxFQUFFLEV3RGNWLEF4RGRZLG1Cd0RjTyxDeERkUCxFQUFFLEV3RGNkLEF4RGRnQixtQndEY0csQ3hEZEgsRUFBRSxFd0RjbEIsQXhEZG9CLG1Cd0RjRCxDeERkQyxFQUFFO0V3RGN0QixBeERiQSxtQndEYW1CLEN4RGJuQixRQUFRLEV3RGFSLEF4RGJVLG1Cd0RhUyxDeERiVCxJQUFJLEV3RGFkLEF4RGJnQixtQndEYUcsQ3hEYkgsS0FBSyxFd0RhckIsQXhEYnVCLG1Cd0RhSixDeERiSSxNQUFNO0V3RGE3QixBeERaQSxtQndEWW1CLEN4RFpuQixLQUFLLEV3RFlMLEF4RFpPLG1Cd0RZWSxDeERaWixPQUFPLEV3RFlkLEF4RFpnQixtQndEWUcsQ3hEWkgsS0FBSyxFd0RZckIsQXhEWnVCLG1Cd0RZSixDeERaSSxLQUFLLEV3RFk1QixBeERaOEIsbUJ3RFlYLEN4RFpXLEtBQUssRXdEWW5DLEF4RFpxQyxtQndEWWxCLEN4RFprQixFQUFFLEV3RFl2QyxBeERaeUMsbUJ3RFl0QixDeERac0IsRUFBRSxFd0RZM0MsQXhEWjZDLG1Cd0RZMUIsQ3hEWjBCLEVBQUU7RXdEWS9DLEF4RFhBLG1Cd0RXbUIsQ3hEWG5CLE9BQU8sRXdEV1AsQXhEWFMsbUJ3RFdVLEN4RFhWLEtBQUssRXdEV2QsQXhEWGdCLG1Cd0RXRyxDeERYSCxNQUFNLEV3RFd0QixBeERYd0IsbUJ3RFdMLEN4RFhLLE9BQU8sRXdEVy9CLEF4RFhpQyxtQndEV2QsQ3hEWGMsS0FBSztFd0RXdEMsQXhEVkEsbUJ3RFVtQixDeERWbkIsTUFBTSxFd0RVTixBeERWUSxtQndEVVcsQ3hEVlgsVUFBVSxFd0RVbEIsQXhEVm9CLG1Cd0RVRCxDeERWQyxNQUFNLEV3RFUxQixBeERWNEIsbUJ3RFVULEN4RFZTLE1BQU0sRXdEVWxDLEF4RFZvQyxtQndEVWpCLEN4RFZpQixNQUFNO0V3RFUxQyxBeERUQSxtQndEU21CLEN4RFRuQixJQUFJLEV3RFNKLEF4RFRNLG1Cd0RTYSxDeERUYixHQUFHLEV3RFNULEF4RFRXLG1Cd0RTUSxDeERUUixNQUFNLEV3RFNqQixBeERUbUIsbUJ3RFNBLEN4RFRBLElBQUksRXdEU3ZCLEF4RFR5QixtQndEU04sQ3hEVE0sT0FBTyxFd0RTaEMsQXhEVGtDLG1Cd0RTZixDeERUZSxPQUFPO0V3RFN6QyxBeERSQSxtQndEUW1CLEN4RFJuQixJQUFJLEV3RFFKLEF4RFJNLG1Cd0RRYSxDeERSYixJQUFJLEV3RFFWLEF4RFJZLG1Cd0RRTyxDeERSUCxLQUFLLEV3RFFqQixBeERSbUIsbUJ3RFFBLEN4RFJBLEtBQUssQ0FBQztJQWlEekIsTUFBTSxFQUFFLENBQUU7SUFDVixPQUFPLEVBQUUsQ0FBRTtJQUNYLE1BQU0sRUFBRSxDQUFFO0lBSVYsSUFBSSxFQUFFLE9BQVE7SUFDZCxTQUFTLEVBQUUsSUFBSztJQUNoQixjQUFjLEVBQUUsUUFBUyxHQXZERDtFd0RNeEIsQXhESEEsbUJ3REdtQixDeERIbkIsSUFBSSxDQUFDO0lBNkRMLFdBQVcsRUFBRSxDQUFFLEdBNURTO0V3REV4QixBeEREQSxtQndEQ21CLEN4RERuQixFQUFFLEV3RENGLEF4RERJLG1Cd0RDZSxDeEREZixFQUFFLENBQUM7SUErRFAsVUFBVSxFQUFFLElBQUssR0E5RGE7RXdEQTlCLEF4RENBLG1Cd0REbUIsQ3hEQ25CLEtBQUssQ0FBQztJQWlFTixlQUFlLEVBQUUsUUFBUztJQUMxQixjQUFjLEVBQUUsQ0FBRSxHQWpFTztFd0RGekIsQXhER0EsbUJ3REhtQixDeERHbkIsT0FBTyxFd0RIUCxBeERHUyxtQndESFUsQ3hER1YsRUFBRSxFd0RIWCxBeERHYSxtQndESE0sQ3hER04sRUFBRSxDQUFDO0lBb0VoQixVQUFVLEVBQUUsSUFBSztJQUNqQixXQUFXLEVBQUUsTUFBTztJQUNwQixjQUFjLEVBQUUsTUFBTyxHQXJFTztFd0RKOUIsQXhES0EsbUJ3RExtQixDeERLbkIsQ0FBQyxFd0RMRCxBeERLRyxtQndETGdCLEN4REtoQixVQUFVLENBQUM7SUF3RWQsTUFBTSxFQUFFLElBQUssR0F2RWdCO0l3RE43QixBeERLQSxtQndETG1CLEN4REtuQixDQUFDLEFBeUVBLE9BQU8sRXdEOUVSLEF4REtBLG1Cd0RMbUIsQ3hES25CLENBQUMsQUF5RVUsTUFBTSxFd0Q5RWpCLEF4REtHLG1Cd0RMZ0IsQ3hES2hCLFVBQVUsQUF5RVosT0FBTyxFd0Q5RVIsQXhES0csbUJ3RExnQixDeERLaEIsVUFBVSxBQXlFRixNQUFNLENBQUM7TUFDaEIsT0FBTyxFQUFFLEVBQUc7TUFDWixPQUFPLEVBQUUsSUFBSyxHQUFHO0V3RGhGbkIsQXhET0UsbUJ3RFBpQixDeERPbkIsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQTZFTixNQUFNLEVBQUUsSUFBSyxHQTVFMEI7RXdEUnZDLEF4RDJGQSxtQndEM0ZtQixDeEQyRm5CLE9BQU8sRXdEM0ZQLEF4RDJGUyxtQndEM0ZVLEN4RDJGVixLQUFLLEV3RDNGZCxBeEQyRmdCLG1Cd0QzRkcsQ3hEMkZILE9BQU8sRXdEM0Z2QixBeEQyRnlCLG1Cd0QzRk4sQ3hEMkZNLFVBQVUsRXdEM0ZuQyxBeEQyRnFDLG1Cd0QzRmxCLEN4RDJGa0IsTUFBTSxFd0QzRjNDLEF4RDJGNkMsbUJ3RDNGMUIsQ3hEMkYwQixNQUFNLEV3RDNGbkQsQXhEMkZxRCxtQndEM0ZsQyxDeEQyRmtDLE1BQU0sRXdEM0YzRCxBeEQyRjZELG1Cd0QzRjFDLEN4RDJGMEMsTUFBTSxFd0QzRm5FLEF4RDJGcUUsbUJ3RDNGbEQsQ3hEMkZrRCxJQUFJLEV3RDNGekUsQXhEMkYyRSxtQndEM0Z4RCxDeEQyRndELElBQUksRXdEM0YvRSxBeEQyRmlGLG1Cd0QzRjlELEN4RDJGOEQsR0FBRyxFd0QzRnBGLEF4RDJGc0YsbUJ3RDNGbkUsQ3hEMkZtRSxPQUFPLEV3RDNGN0YsQXhEMkYrRixtQndEM0Y1RSxDeEQyRjRFLE9BQU8sQ0FBdEc7SUFDRSxPQUFPLEVBQUUsS0FBTSxHQUFHO0UwRHJHcEIsTUFBTSxNQUFELE1BQU0sTUFBTSxTQUFTLEVBQUUs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 */
