/*!*************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/SliceTransformToolbar.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************************/
.slice-transform-toolbar {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/LayersDrawer.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.layers-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  width: min(360px, 92vw);
  background: #fff;
  border-left: 1px solid #eaeaea;
  transform: translateX(102%);
  transition: transform 180ms ease;
  z-index: 9999;
  display: flex;
  flex-direction: column;
}
.layers-drawer .canvas-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  border-bottom: 1px solid #eaeaea;
}
.layers-drawer .canvas-row .canvas-row-title {
  font-weight: bold;
  margin-right: 4px;
}
.layers-drawer .canvas-row .canvas-row-fields {
  display: flex;
  align-items: center;
  gap: 6px;
}
.layers-drawer .canvas-row .canvas-row-fields label {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.layers-drawer .canvas-row .canvas-row-fields input {
  width: 62px;
}
.layers-drawer .canvas-row .canvas-fit {
  flex: 1 1 auto;
}
.layers-drawer.open {
  transform: translateX(0);
}
.layers-drawer > .header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-bottom: 1px dotted #eaeaea;
}
.layers-drawer > .header > .title {
  font-size: 16px;
  font-weight: 700;
}
.layers-drawer > .header > .close {
  border: 1px solid #eaeaea;
  background: #fff;
  cursor: pointer;
  padding: 4px 8px;
}
.layers-drawer > .subtitle {
  padding: 6px 12px;
  font-size: 12px;
  color: #666;
  border-bottom: 1px dotted #eaeaea;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 6px 8px;
}
.layers-drawer > .subtitle > .subtitle-left {
  min-width: 0;
}
.layers-drawer > .subtitle > .subtitle-right {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
  flex-wrap: wrap;
  gap: 6px;
  margin-left: auto;
}
.layers-drawer > .subtitle > .subtitle-right > .btn-common {
  font-size: 12px;
  white-space: nowrap;
  flex: 0 0 auto;
}
.layers-drawer > .list {
  overflow: auto;
  padding: 8px 8px 12px;
}
.layers-drawer > .list > .item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px;
  border: 1px dotted #eaeaea;
  margin: 0 0 8px 0;
  background: #fff;
  cursor: pointer;
}
.layers-drawer > .list > .item:hover {
  background: #f7f7f7;
}
.layers-drawer > .list > .item:focus {
  outline: 2px solid #239373;
  outline-offset: 1px;
}
.layers-drawer > .list > .item.current {
  border: 1px solid #239373;
  background: #f0fbf7;
}
.layers-drawer > .list > .item.hidden {
  opacity: 0.55;
}
.layers-drawer > .list > .item.dragging {
  opacity: 0.4;
}
.layers-drawer > .list > .item.drop-above::before, .layers-drawer > .list > .item.drop-below::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  height: 0;
  border-top: 1px solid #504ff6;
  pointer-events: none;
}
.layers-drawer > .list > .item.drop-above::before {
  top: -5px;
}
.layers-drawer > .list > .item.drop-below::after {
  bottom: -5px;
}
.layers-drawer > .list > .item > .eye {
  flex: 0 0 26px;
  width: 26px;
  height: 26px;
  border: 1px solid #eaeaea;
  background: #fafafa;
  cursor: pointer;
  line-height: 1;
}
.layers-drawer > .list > .item > .eye.off {
  color: #aaa;
  background: #fff;
}
.layers-drawer > .list > .item > .thumb {
  width: 44px;
  height: 44px;
  border: 1px solid #eaeaea;
  background: #fafafa;
  flex: 0 0 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.layers-drawer > .list > .item > .thumb img {
  width: 44px;
  height: 44px;
  object-fit: cover;
  display: block;
}
.layers-drawer > .list > .item > .thumb .thumb-empty,
.layers-drawer > .list > .item > .thumb .thumb-bg {
  width: 100%;
  height: 100%;
}
.layers-drawer > .list > .item > .thumb .thumb-empty {
  background: repeating-linear-gradient(45deg, #f7f7f7, #f7f7f7 6px, #fff 6px, #fff 12px);
}
.layers-drawer > .list > .item > .thumb .thumb-bg {
  background: #fff;
  border: 1px solid #eaeaea;
}
.layers-drawer > .list > .item > .body {
  min-width: 0;
  flex: 1 1 auto;
}
.layers-drawer > .list > .item > .body > .name-input {
  width: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid #504ff6;
  background: transparent;
  font-size: 14px;
  font-weight: 700;
  font-family: inherit;
}
.layers-drawer > .list > .item > .body > .name-input:focus {
  outline: none;
}
.layers-drawer > .list > .item > .body > .name {
  font-size: 14px;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.layers-drawer > .list > .item > .body > .controls {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
}
.layers-drawer > .list > .item > .body > .controls > .blend {
  font-size: 11px;
  max-width: 110px;
}
.layers-drawer > .list > .item > .body > .controls > .opacity {
  flex: 1 1 auto;
  min-width: 0;
}
.layers-drawer > .list > .item > .delete {
  flex: 0 0 26px;
  width: 26px;
  height: 26px;
  border: 1px solid #eaeaea;
  background: #fff;
  cursor: pointer;
  line-height: 1;
}
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/CanvasDrawer.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.canvas-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  width: min(360px, 92vw);
  background: #fff;
  border-left: 1px solid #eaeaea;
  box-shadow: -2px 0 12px rgba(0, 0, 0, 0.15);
  transform: translateX(100%);
  transition: transform 180ms ease;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  padding: 10px 12px;
  gap: 12px;
  overflow-y: auto;
}
.canvas-drawer.open {
  transform: translateX(0);
}
@media (prefers-reduced-motion: reduce) {
  .canvas-drawer {
    transition: none;
  }
}
.canvas-drawer .header {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.canvas-drawer .title {
  font-weight: 700;
  font-size: 16px;
}
.canvas-drawer .close {
  border: none;
  background: none;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  padding: 0 4px;
}
.canvas-drawer .canvas-section {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-bottom: 12px;
  border-bottom: 1px solid #eaeaea;
}
.canvas-drawer .canvas-section:last-child {
  border-bottom: none;
}
.canvas-drawer .canvas-section-title {
  font-size: 12px;
  font-weight: 700;
  color: #666;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.canvas-drawer .canvas-fields {
  display: flex;
  align-items: center;
  gap: 6px;
}
.canvas-drawer .canvas-fields label {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.canvas-drawer .canvas-fields input {
  width: 72px;
  min-width: 0;
}
.canvas-drawer .slice-transform-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/SliceDrawer.scss ***!
  \***************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.slice-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  width: min(360px, 92vw);
  background: #fff;
  border-left: 1px solid #eaeaea;
  box-shadow: -2px 0 12px rgba(0, 0, 0, 0.15);
  transform: translateX(100%);
  transition: transform 180ms ease;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  padding: 10px 12px;
  gap: 12px;
  overflow-y: auto;
}
.slice-drawer.open {
  transform: translateX(0);
}
@media (prefers-reduced-motion: reduce) {
  .slice-drawer {
    transition: none;
  }
}
.slice-drawer .header {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.slice-drawer .title {
  font-weight: 700;
  font-size: 16px;
}
.slice-drawer .close {
  border: none;
  background: none;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  padding: 0 4px;
}
.slice-drawer .slice-drawer-subtitle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding-bottom: 10px;
  border-bottom: 1px solid #eaeaea;
}
.slice-drawer .slice-count {
  font-size: 12px;
  color: #666;
}
.slice-drawer .slice-count.at-limit {
  color: #c62828;
  font-weight: 700;
}
.slice-drawer .slice-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}
.slice-drawer .slice-bulkbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 12px;
  color: #666;
}
.slice-drawer .slice-selectall {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
}
.slice-drawer .slice-delete-selected:not(:disabled) {
  border-color: #d32f2f;
  color: #c62828;
}
.slice-drawer .slice-check,
.slice-drawer .slice-selectall {
  min-width: 24px;
  min-height: 24px;
}
.slice-drawer .slice-check {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.slice-drawer .slice-empty {
  font-size: 12px;
  color: #666;
  padding: 8px 2px;
}
.slice-drawer .slice-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.slice-drawer .slice-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px;
  border: 1px solid #eaeaea;
  border-radius: 4px;
  cursor: pointer;
  background: #fff;
}
.slice-drawer .slice-row:hover {
  background: #fafafa;
}
.slice-drawer .slice-row.is-current {
  border-color: #239373;
  background: #f0fbf7;
}
.slice-drawer .slice-index {
  flex: 0 0 auto;
  min-width: 22px;
  text-align: center;
  font-size: 12px;
  color: #666;
}
.slice-drawer .slice-thumb {
  flex: 0 0 auto;
  width: 48px;
  height: 36px;
  background: #fafafa;
  border: 1px solid #eaeaea;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.slice-drawer .slice-thumb img {
  max-width: 100%;
  max-height: 100%;
  display: block;
}
.slice-drawer .slice-thumb-empty {
  width: 100%;
  height: 100%;
  background: repeating-linear-gradient(45deg, #fafafa, #fafafa 4px, #eaeaea 4px, #eaeaea 8px);
}
.slice-drawer .slice-text {
  flex: 1 1 auto;
  min-width: 0;
}
.slice-drawer .slice-primary {
  font-weight: 700;
  font-size: 12px;
}
.slice-drawer .slice-secondary {
  font-size: 12px;
  color: #666;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.slice-drawer .slice-row.is-hidden-slice .slice-thumb,
.slice-drawer .slice-row.is-hidden-slice .slice-primary,
.slice-drawer .slice-row.is-hidden-slice .slice-secondary {
  opacity: 0.45;
}
.slice-drawer .slice-hide {
  flex: 0 0 auto;
  border: 1px solid transparent;
  background: none;
  cursor: pointer;
  line-height: 1;
  min-width: 24px;
  min-height: 24px;
  padding: 4px 6px;
  border-radius: 4px;
}
.slice-drawer .slice-hide:hover:not(:disabled) {
  background: #fafafa;
}
.slice-drawer .slice-hide:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}
.slice-drawer .slice-delete {
  flex: 0 0 auto;
  border: 1px solid transparent;
  background: none;
  cursor: pointer;
  line-height: 1;
  min-width: 24px;
  min-height: 24px;
  padding: 4px 6px;
  border-radius: 4px;
  color: #666;
}
.slice-drawer .slice-delete:hover {
  border-color: #d32f2f;
  background: #ffebee;
  color: #c62828;
}
/*!***********************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/Tooltip.scss ***!
  \***********************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
/**
 * The floating label itself. Positioned in viewport coordinates by Tooltip.tsx, so everything here
 * is appearance only — give it no margins or transforms that would fight that measurement.
 */
.tooltip-bubble {
  position: fixed;
  z-index: 9700;
  max-width: min(320px, 100vw - 16px);
  padding: 6px 10px;
  border-radius: 6px;
  background: #111;
  color: #fff;
  font-size: 12px;
  line-height: 1.4;
  pointer-events: none;
}
.tooltip-bubble::before {
  content: "";
  position: absolute;
  left: calc(var(--tooltip-arrow-left, 50%) - 6px);
  border: 6px solid transparent;
}
.tooltip-bubble[data-placement=bottom]::before {
  bottom: 100%;
  border-bottom-color: #111;
}
.tooltip-bubble[data-placement=top]::before {
  top: 100%;
  border-top-color: #111;
}
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AlertBanner.scss ***!
  \***************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.alert-banner {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  width: 100%;
  max-width: 640px;
  margin: 0 auto 20px;
  padding: 12px 16px;
  border: 1px solid;
  border-radius: 6px;
  box-sizing: border-box;
  text-align: left;
}

.alert-banner--error {
  border-color: #f3c2bd;
  background: #fdf0ef;
  color: #8a2b22;
}

.alert-banner--info {
  border-color: #eaeaea;
  background: #fafafa;
  color: #333;
}

.alert-banner-text {
  flex: 1 1 auto;
  line-height: 1.4;
}
.alert-banner-text a {
  color: inherit;
}

.alert-banner-dismiss {
  flex: 0 0 auto;
  padding: 0 4px;
  border: 0;
  background: none;
  color: inherit;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  opacity: 0.7;
}
.alert-banner-dismiss:hover {
  opacity: 1;
}
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AccountPanel.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.settings {
  width: 100%;
  max-width: 640px;
  margin: 0 auto;
  padding: 0 20px 40px;
}
.settings .settings-card {
  margin-top: 20px;
  padding: 20px 24px;
  border: 1px solid #e5e5e5;
  border-radius: 10px;
}
.settings .settings-card-title {
  margin: 0 0 12px;
  font-size: 21px;
}
.settings .settings-row {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  padding: 8px 0;
  border-top: 1px solid #f0f0f0;
}
.settings .settings-row:first-of-type {
  border-top: 0;
}
.settings .settings-label {
  color: #777;
}
.settings .settings-value {
  font-weight: 600;
  text-align: right;
  overflow-wrap: anywhere;
}
.settings .settings-badge {
  display: inline-block;
  margin-left: 6px;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
}
.settings .settings-badge-ok {
  background: #e6f6ec;
  color: #1f7a3f;
}
.settings .settings-badge-warn {
  background: #fff4e0;
  color: #8a5a00;
}
.settings .settings-plan {
  font-weight: 700;
}
.settings .settings-status {
  margin: 4px 0 16px;
}
.settings .settings-status-warn {
  color: #8a5a00;
}
.settings .settings-btn {
  display: inline-block;
  padding: 10px 18px;
  border: 0;
  border-radius: 6px;
  background: #111;
  color: #fff;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
}
.settings .settings-btn:disabled {
  opacity: 0.6;
  cursor: default;
}
.settings .settings-btn-secondary {
  border: 1px solid #ccc;
  background: #fff;
  color: #111;
}
.settings .settings-btn-danger {
  background: #b42318;
}
.settings .settings-link-btn {
  padding: 0;
  border: 0;
  background: none;
  color: #0a66c2;
  font: inherit;
  text-decoration: underline;
  cursor: pointer;
}
.settings .settings-link-btn:disabled {
  color: #777;
  text-decoration: none;
  cursor: default;
}
.settings .settings-link-danger {
  color: #b42318;
}
.settings .settings-inline {
  padding-bottom: 8px;
  text-align: right;
}
.settings .settings-danger {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid #f0f0f0;
}
.settings .settings-note {
  margin-top: 12px;
  color: #777;
  font-size: 13px;
}
.settings .settings-error {
  margin-top: 8px;
  color: #b42318;
}
/*!**************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/ModalShell.scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.modal-shell-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  z-index: 100000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
  opacity: 0;
  transition: opacity 300ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.modal-shell-overlay[data-state=open] {
  opacity: 1;
}
.modal-shell-overlay[data-state=exit] {
  opacity: 0;
  pointer-events: none;
}
.modal-shell-overlay .modal-shell {
  position: relative;
  box-sizing: border-box;
  transform-origin: center;
  transform: scale(0.6);
  opacity: 0;
  transition: transform 300ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 300ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.modal-shell-overlay .modal-shell:focus {
  outline: none;
}
.modal-shell-overlay .modal-shell-close {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 1;
  width: 28px;
  height: 28px;
  border-radius: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
}
.modal-shell-overlay .modal-shell-close:hover {
  background: #f3f3f3;
}
.modal-shell-overlay[data-state=open] .modal-shell {
  transform: scale(1);
  opacity: 1;
}
.modal-shell-overlay[data-state=exit] .modal-shell {
  transform: scale(0.6);
  opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
  .modal-shell-overlay {
    transition: none !important;
  }
  .modal-shell-overlay .modal-shell {
    transition: none !important;
  }
}
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AccountModal.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.modal-shell-overlay .account-modal {
  width: min(680px, 100vw - 24px);
  max-height: calc(100vh - 36px);
  background: #fff;
  color: #333;
  border-radius: 3px;
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.35);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.modal-shell-overlay .account-modal .account-modal-body {
  padding: 20px 24px 24px;
  overflow-y: auto;
  min-height: 0;
}
.modal-shell-overlay .account-modal .settings {
  max-width: none;
  padding: 0;
}
/*!*************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AuthModal.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/* Modal UI for "real auth" and dev-auth variant. */
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.auth-modal-overlay .auth-modal {
  width: min(980px, 100vw - 24px);
  height: min(640px, 100vh - 24px);
  background: #fff;
  border-radius: 3px;
  overflow: hidden;
  display: grid;
  grid-template-columns: 1.12fr 1fr;
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.35);
  line-height: 1.25;
}
.auth-modal-overlay .auth-modal .auth-modal-left {
  position: relative;
  background: #111;
  overflow: hidden;
}
.auth-modal-overlay .auth-modal .auth-modal-left .auth-modal-left-image {
  width: 100%;
  height: 100%;
  display: block;
}
.auth-modal-overlay .auth-modal .auth-modal-left::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(900px 520px at 20% 15%, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0) 55%), linear-gradient(180deg, rgba(0, 0, 0, 0.08), rgba(0, 0, 0, 0.38));
  pointer-events: none;
}
.auth-modal-overlay .auth-modal .auth-modal-right {
  padding: 22px 22px 18px;
  overflow: auto;
  box-sizing: border-box;
  background: #fff;
  border-left: 1px dotted #eaeaea;
  font-size: 14px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-form-hero {
  text-align: center;
  margin-top: 2px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-form-hero-title {
  line-height: 1.05;
  font-weight: 900;
  letter-spacing: -0.02em;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-form-hero-subtitle {
  margin-top: 10px;
  font-size: 14px;
  color: #444;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-form-switch {
  text-align: center;
  color: #444;
  margin-top: 6px;
  margin-bottom: 2px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-field {
  display: block;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-field-label {
  font-size: 14px;
  font-weight: 800;
  color: #111;
  margin-bottom: 8px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-input-with-icon {
  position: relative;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-icon-btn {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  border: none;
  background: none;
  cursor: pointer;
  padding: 4px 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-icon-btn .auth-icon {
  width: 16px;
  height: 16px;
  display: block;
  opacity: 0.75;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-icon-btn:hover .auth-icon {
  opacity: 1;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-remember-row {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 6px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-toggle {
  position: relative;
  width: 54px;
  height: 30px;
  border-radius: 999px;
  border: 1px solid #ccc;
  background: #fff;
  cursor: pointer;
  padding: 0;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-toggle-knob {
  position: absolute;
  top: 50%;
  left: 3px;
  transform: translateY(-50%);
  width: 24px;
  height: 24px;
  border-radius: 999px;
  background: #111;
  transition: left 160ms ease, background 160ms ease;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-toggle.on .auth-toggle-knob {
  left: 27px;
  background: #111;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-remember-label {
  font-size: 14px;
  font-weight: 400;
  color: #111;
  display: inline-flex;
  align-items: center;
  line-height: 1;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-forgot {
  margin-top: 6px;
  text-align: center;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-title {
  font-size: 20px;
  font-weight: 900;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-toggle-row {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
  flex-wrap: wrap;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-toggle-row button {
  padding: 6px 10px;
  font-size: 13px;
  border-radius: 10px;
  border: 1px solid #ddd;
  background: #fff;
  cursor: pointer;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-toggle-row button.active {
  border-color: #239373;
  background: #f0fbf7;
  font-weight: 700;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-field {
  display: block;
  margin-bottom: 12px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-label {
  font-size: 12px;
  color: #444;
  margin-bottom: 4px;
  font-weight: 700;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-field input {
  width: 100%;
  padding: 10px 10px;
  border-radius: 12px;
  border: 1px solid #ddd;
  font-size: 14px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin: 10px 0 6px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-actions button {
  padding: 9px 12px;
  border-radius: 12px;
  border: 1px solid #ddd;
  background: #fff;
  cursor: pointer;
  font-size: 14px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-actions button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-note {
  font-size: 13px;
  color: #333;
  margin: 10px 0;
  padding: 10px 12px;
  border: 1px solid #eee;
  border-radius: 12px;
  background: #fafafa;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-dev {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid #eee;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-dev-title {
  font-size: 13px;
  font-weight: 900;
  margin-bottom: 10px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-dev-section {
  margin-bottom: 14px;
  padding: 10px 12px;
  border: 1px solid #eee;
  border-radius: 12px;
  background: #fff;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-dev-section-title {
  font-weight: 900;
  font-size: 13px;
  margin-bottom: 6px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-dev-section-subtitle {
  font-size: 12px;
  color: #555;
  line-height: 1.35;
  margin-bottom: 10px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-info {
  margin-top: 10px;
  color: #1b5e20;
  font-size: 13px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-error {
  margin-top: 10px;
  color: #b00020;
  font-size: 13px;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-legal {
  margin-top: 14px;
  font-size: 12px;
  color: #666;
  line-height: 1.35;
}
.auth-modal-overlay .auth-modal .auth-modal-right .auth-modal-legal a {
  color: inherit;
  text-decoration: underline;
}
@media (max-width: 820px) {
  .auth-modal-overlay .auth-modal {
    grid-template-columns: 1fr;
    height: auto;
    max-height: calc(100vh - 24px);
  }
  .auth-modal-overlay .auth-modal-left {
    height: 220px;
  }
  .auth-modal-overlay .auth-modal-right {
    padding: 20px 16px 16px;
    border-left: none;
  }
}
/*!************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/Skeleton.scss ***!
  \************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
/**
 * A stand-in for content whose SHAPE is known but whose value is not yet.
 *
 * It exists because the alternative is guessing. `user: null` is indistinguishable from "we have
 * not asked yet", so rendering it straight showed a signed-in visitor "Sign up / Sign in" and a
 * Free visitor a "Create Account" button, each corrected a frame later. A skeleton says the one
 * true thing available at that moment: an answer is coming.
 *
 * It carries no text of its own, so it has no line box and would collapse to nothing — hence the
 * nbsp in ::before. Whatever class it is combined with supplies the padding and radius, which is
 * what keeps a skeleton exactly the size of the thing it replaces.
 */
.skeleton {
  position: relative;
  overflow: hidden;
  background: #fafafa;
  border: 1px solid #eaeaea;
}
.skeleton::before {
  content: " ";
}
.skeleton::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.7), transparent);
  animation: skeleton-sweep 1.3s ease-in-out infinite;
}

@keyframes skeleton-sweep {
  100% {
    transform: translateX(100%);
  }
}
@media (prefers-reduced-motion: reduce) {
  .skeleton::after {
    animation: none;
  }
}
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AuthLauncher.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
/*
 * ONE BOX FOR ALL THREE STATES: the skeleton, "My Account", and "Sign up / Sign in".
 *
 * The corner is anchored to the right edge, so any width change drags its left edge across the
 * canvas. The two labels are 96px and 152px, so before this the corner moved 56px the moment
 * /api/me answered — and adding a skeleton on top would only have added a second jump.
 *
 * The skeleton keeps its OWN class rather than borrowing `.auth-launcher-btn`: that selector is
 * how the rest of the suite finds the real, clickable button, and a <span> answering to it would
 * let a test click a placeholder and quietly do nothing.
 */
.auth-launcher-btn,
.auth-launcher-skeleton {
  position: fixed;
  right: 12px;
  bottom: 12px;
  z-index: 9000;
  box-sizing: border-box;
  /*
   * The widest label at this font. Deliberately a plain px value rather than a `ch` calc that
   * would silently drift — `auth-launcher-label.pwspec` asserts the three states are identical,
   * so a copy change that outgrows this fails loudly instead of reintroducing the shift.
   */
  min-width: 152px;
  max-width: min(320px, 100vw - 24px);
}

.auth-launcher-btn {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.auth-launcher-skeleton {
  display: block;
  height: 30px;
  border-radius: 2px;
}
/*!******************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/components/AppErrorBanner.scss ***!
  \******************************************************************************************************************************************************************************************************************************************************************/
.app-error-banner .err-dev-diagnostic {
  display: block;
  max-width: 720px;
  margin: 12px auto 0;
  padding: 8px 12px;
  text-align: left;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12px;
  line-height: 1.4;
  color: #5a4500;
  background: #fff3cd;
  border: 1px solid #c9a227;
  border-radius: 4px;
  white-space: pre-wrap;
  word-break: break-word;
}
/*!********************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/App.scss ***!
  \********************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * App.scss
 * The most most CSS SCSS file there is in the universe — and now the ONLY one for app CSS.
 *
 * `_baseline.scss` (originally `_legacyMainMin.scss`, from the v1 `css/main.min.css`) was
 * retired on 2026-08-16 and its rules live here, at the top, where its `@import` used to sit.
 * 102 declarations that this file already restated further down were dropped in the same pass.
 *
 * ⚠️ ORDER IS LOAD-BEARING. The reset + shared component block below must stay ABOVE
 * everything else: dozens of rules further down override it purely by source order, not by
 * specificity. Moving a rule up or down in this file can silently change what renders.
 *
 * ⚠️ `npm run verify:all` CANNOT see a CSS regression — it asserts geometry and behaviour,
 * never appearance. Prove changes here with the computed-style fingerprint harness
 * (`.ai-assist/tools/imageslicer-css-fingerprint.pwspec.ts`) plus before/after screenshots.
 * This retirement was proven that way: 1836 element-states and 15 full-page screenshots,
 * both zero-diff, with both instruments calibrated to zero first.
 */
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
:root {
  --z-layer-live-canvas: 40;
  --z-layer-canvas-boundary: 46;
  --z-layer-move-capture: 50;
  --z-layer-chrome: 52;
  --z-slice-outline-active: 100;
  --z-slice-delete-button: 104;
  --z-slice-bg-active: 102;
  --z-slice-selection-wash: 103;
  --z-slice-interactive-layer: 110;
  --z-slice-resize-handle: 105;
  --z-slice-bg-inactive: 2;
  --z-slice-outline-inactive: 0;
  --z-canvas-world: 200;
  --z-canvas-overlay: 500;
  --z-help-popover: 1000;
  --z-zoom-pan-hit-surface: 9996;
}

/**
 * Shared keyframes.
 *
 * `rainbow` used to be declared FIVE times — inline in `App.scss` and again in each of
 * `views/About.scss`, `Faq.scss`, `Privacy.scss` and `Terms.scss` — all byte-identical, all
 * emitted into the same bundle.
 *
 * ⚠️ This partial is imported by `App.scss` ONLY, and that is deliberate. Sass `@import`
 * INLINES a partial into every file that imports it, so importing this from the view
 * stylesheets as well would put the duplicates straight back. One importer = one copy.
 *
 * That is safe because of the module graph, not by luck: `App.tsx` statically imports both
 * `./App.scss` and every one of those four view components, and none of them are lazy
 * (only `Admin` and `MeowMix` use `React.lazy`). So a view cannot render without `App.scss`
 * having been loaded. If a view ever becomes lazily loaded, or gets rendered from its own
 * entry point, it will need its own copy again — a missing `@keyframes` fails SILENTLY.
 *
 * ⚠️ Neither the screenshot harness (which freezes animations) nor the computed-style
 * fingerprint (which records `animation-name` whether or not the rule exists) can detect a
 * missing keyframe. Use `element.getAnimations()` — an `animation-name` matching no
 * `@keyframes` rule creates no animation object at all.
 */
@keyframes rainbow {
  0% {
    background-position: 0 50%;
  }
  50% {
    background-position: 100% 25%;
  }
  100% {
    background-position: 0 50%;
  }
}
#err,
.err {
  color: red;
}

#imgWrap,
#uploadForm,
.center,
.err,
.result-wrap,
.thumbDiv,
h1,
h2 {
  text-align: center;
}

#menu,
#tool-box,
.result-wrap img {
  vertical-align: middle;
}

#switch-status,
#tool-box,
.btn-chop,
.switch {
  display: inline-block;
}

a, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video {
  margin: 0;
  padding: 0;
  border: 0;
  font: inherit;
  vertical-align: baseline;
}

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
  display: block;
}

ol,
ul {
  list-style: none;
}

blockquote,
q {
  quotes: none;
}
blockquote::before, blockquote::after,
q::before,
q::after {
  content: none;
}

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

button {
  height: 30px;
}

#err,
.err {
  font-size: 16px;
}

.switch {
  position: relative;
  width: 38px;
  height: 22px;
}

button.btn-add::before, button.btn-clear::before {
  background-size: 18px 18px;
  display: inline-block;
  width: 18px;
  height: 18px;
  content: "";
}
button.btn-add::before {
  background-image: url(/add-new-icon.02471d5f1c2054f3636f7ebed3a1e976.png);
}
button.btn-clear::before {
  background-image: url(/clear-all-icon.f2ebfec47e186fe7e3bfb65cf0a7ec4c.png);
}

:root {
  --font-size-sm: 12px;
  --font-size-base: 14px;
}

@keyframes MOVE-BG {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(46px);
  }
}
.clearfix {
  clear: both;
}

.hide {
  display: none;
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.right {
  text-align: right;
}

h1,
h2 {
  margin-top: 5px;
  margin-bottom: 3px;
  font-size: 25px;
}

h1,
h2,
h3 {
  font-weight: 400;
}

.delete-area {
  position: absolute;
  cursor: pointer;
  padding: 5px 5px 2px 2px;
}

#imgWrap, #uploadForm, .center, h1, h2 {
  text-align: center;
}

#uploadForm {
  max-width: 780px;
  margin: 20px auto;
  font-size: 18px;
}

body {
  margin: 0;
  font-size: 14px;
  line-height: 1;
}

*,
body {
  font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
}

#dynamic-text {
  font-size: 14px;
}

.download-all {
  clear: both;
  margin: 20px auto;
  text-align: right;
}

.feedback {
  text-align: center;
  padding-top: 8px;
  font-size: 13px;
}

.bold {
  font-weight: bold;
}

.thumbDiv {
  height: 142px;
  width: 142px;
  float: left;
  margin: 10px;
  line-height: 140px;
  padding: 5px;
  border: 1px dotted #999;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  -webkit-box-shadow: 0 8px 18px -6px rgba(0, 0, 0, 0.75);
  -moz-box-shadow: 0 8px 18px -6px rgba(0, 0, 0, 0.75);
  box-shadow: 0 8px 18px -6px rgba(0, 0, 0, 0.75);
}

.result-wrap, .thumbDiv {
  text-align: center;
}

.result-wrap img {
  height: auto;
  width: auto;
  max-height: 140px;
  max-width: 140px;
  vertical-align: middle;
  -webkit-box-shadow: inset 0 0 26px -7px rgba(0, 0, 0, 0.75);
  -moz-box-shadow: inset 0 0 26px -7px rgba(0, 0, 0, 0.75);
  box-shadow: inset 0 0 26px -7px rgba(0, 0, 0, 0.75);
}

#the-grid.is-fullscreen {
  position: fixed;
  inset: 0;
  margin: 0;
  z-index: 9500;
  background: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  --fs-doc-width: min(100vw, calc(100vh * var(--fs-aspect, 2)));
}
#the-grid.is-fullscreen .canvas-layout,
#the-grid.is-fullscreen .img-canvas {
  width: 100vw;
  max-width: 100vw;
  height: 100vh;
}
#the-grid.is-fullscreen .img-canvas {
  border-width: 0;
}
#the-grid.is-fullscreen .canvas-world {
  width: var(--fs-doc-width);
}
#the-grid.is-fullscreen .img-canvas #sliceImg {
  width: var(--fs-doc-width);
  height: auto;
}

body.app-fullscreen {
  overflow: hidden;
}

.logo,
h2,
#dynamic-text {
  transition: opacity 220ms ease;
}

body.app-chrome-hidden .logo,
body.app-chrome-hidden h2,
body.app-chrome-hidden #dynamic-text {
  opacity: 0;
}

.feedback {
  transition: opacity 220ms ease;
}

body.app-fullscreen .feedback {
  opacity: 0;
  pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
  .logo,
h2,
#dynamic-text,
.feedback {
    transition: none;
  }
}
body.app-fullscreen #menu {
  position: fixed;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9600;
  width: max-content;
  max-width: calc(100vw - 16px);
  background: #fff;
  border-radius: 6px;
  box-shadow: 0 2px 14px rgba(0, 0, 0, 0.18);
  padding: 6px 8px;
}

#the-grid {
  /**
   * Checkerboard phase, inherited by BOTH checkers — the out-of-bounds one on
   * `.img-canvas-zoompan` and the document's own backdrop inside `.canvas-world`.
   *
   * ⚠️ DECLARED ON THE ANCESTOR, NOT ON THE ELEMENTS THAT READ IT. App overrides these inline
   * on `#the-grid` while full screen is up; a declaration on a consumer would be that
   * element's OWN value and would beat the inherited one, so the override would silently do
   * nothing for the very element it was meant to move.
   *
   * ⚠️ And a unit on the zero, not a `var(..., 0px)` fallback: both feed `calc()`, where a
   * unitless zero is invalid (`calc(0 + 18px)` does not parse), while a `0px` literal in a
   * fallback trips stylelint's `length-zero-no-unit`. A custom property satisfies both.
   */
  --checker-phase-x: 0px;
  --checker-phase-y: 0px;
  margin: 10px auto;
  width: auto;
  height: auto;
  min-height: 400px;
}
#the-grid .img-canvas {
  position: relative;
  user-select: none;
  -webkit-user-select: none;
  width: 777px;
  max-width: 100%;
}
#the-grid .img-canvas #sliceImg {
  display: block;
  width: 100%;
  height: auto;
  user-select: none;
  -webkit-user-select: none;
}

.img-canvas {
  position: relative;
}

.img-canvas-zoompan {
  overflow: hidden;
  touch-action: none;
  isolation: isolate;
  contain: paint;
  transform: translateZ(0);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  background-color: #f7f7f7;
  background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.04) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.04) 75%, rgba(0, 0, 0, 0.04)), linear-gradient(45deg, rgba(0, 0, 0, 0.04) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.04) 75%, rgba(0, 0, 0, 0.04));
  background-size: 36px 36px;
  background-position: var(--checker-phase-x) var(--checker-phase-y), calc(var(--checker-phase-x) + 18px) calc(var(--checker-phase-y) + 18px);
  background-clip: padding-box;
  border: 1px solid rgba(0, 0, 0, 0.08);
}

.img-canvas-zoompan-space {
  cursor: grab;
}
.img-canvas-zoompan-space .canvas-world,
.img-canvas-zoompan-space .select-areas-overlay,
.img-canvas-zoompan-space .select-areas-slice-wrap,
.img-canvas-zoompan-space .select-areas-outline,
.img-canvas-zoompan-space .select-areas-resize-handler,
.img-canvas-zoompan-space .delete-area,
.img-canvas-zoompan-space .select-areas-delete-area {
  cursor: grab !important;
}

.img-canvas-zoompan-panning {
  cursor: grabbing;
}
.img-canvas-zoompan-panning .canvas-world,
.img-canvas-zoompan-panning .select-areas-overlay,
.img-canvas-zoompan-panning .select-areas-slice-wrap,
.img-canvas-zoompan-panning .select-areas-outline,
.img-canvas-zoompan-panning .select-areas-resize-handler,
.img-canvas-zoompan-panning .delete-area,
.img-canvas-zoompan-panning .select-areas-delete-area {
  cursor: grabbing !important;
}

.canvas-world {
  position: relative;
  display: block;
  z-index: var(--z-canvas-world);
  will-change: transform;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.canvas-layout {
  position: relative;
  display: inline-block;
  max-width: 100%;
}

.slice-delete-escape {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  overflow: visible;
  pointer-events: none;
  z-index: var(--z-canvas-overlay);
}
.slice-delete-escape .delete-area,
.slice-delete-escape .select-areas-delete-host {
  pointer-events: auto;
}

.canvas-overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-canvas-overlay);
  pointer-events: none;
}

.container {
  max-width: 780px;
  margin: 0 auto;
}
.container h2 {
  font-size: 21px;
}
.container h3 {
  margin-bottom: 8px;
}

.slice-marquee {
  position: absolute;
  pointer-events: none;
  border: 1px dashed #239373;
  background: rgba(0, 0, 0, 0.04);
  z-index: var(--z-slice-selection-wash, 103);
}

.slice-group-box {
  position: absolute;
  border: 1px dashed #d97706;
  z-index: var(--z-slice-selection-wash, 103);
  pointer-events: none;
}

.select-areas-slice-wrap.is-selected::after {
  content: "";
  position: absolute;
  inset: 1px;
  pointer-events: none;
  background: rgba(217, 119, 6, 0.18);
  box-shadow: inset 0 0 0 1px #d97706;
  z-index: var(--z-slice-selection-wash, 103);
}

.select-areas-outline {
  background-color: transparent;
  overflow: hidden;
  position: relative;
  touch-action: none;
  background-image: linear-gradient(90deg, #fff 50%, #000 50%), linear-gradient(90deg, #fff 50%, #000 50%), linear-gradient(0deg, #fff 50%, #000 50%), linear-gradient(0deg, #fff 50%, #000 50%);
  background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
  background-size: 8px 1px, 8px 1px, 1px 8px, 1px 8px;
  background-position: 0 0, 0 100%, 0 0, 100% 0;
  animation: marchingAnts 0.6s linear infinite;
}
@media (prefers-reduced-motion: reduce) {
  .select-areas-outline {
    animation: none;
  }
}
.select-areas-outline::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0;
  transition: opacity 160ms ease;
  background-image: linear-gradient(90deg, #fff 75%, #000 75%), linear-gradient(90deg, #fff 75%, #000 75%), linear-gradient(0deg, #fff 75%, #000 75%), linear-gradient(0deg, #fff 75%, #000 75%);
  background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
  background-size: 8px 1px, 8px 1px, 1px 8px, 1px 8px;
  background-position: 0 0, 0 100%, 0 0, 100% 0;
  animation: marchingAnts 1.2s linear infinite;
}
@media (prefers-reduced-motion: reduce) {
  .select-areas-outline::after {
    animation: none;
  }
}

.select-areas-outline-hover::after {
  opacity: 1;
}

.select-areas-outline-frozen,
.select-areas-outline-frozen::after {
  animation-play-state: paused;
}

@keyframes marchingAnts {
  to {
    background-position: 8px 0, -8px 100%, 0 -8px, 100% 8px;
  }
}
.tetris-rotate-cw,
.tetris-rotate-ccw,
.tetris-counter-cw,
.tetris-counter-ccw {
  transform-origin: center;
}

@keyframes tetrisRotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(var(--tetris-rot));
  }
}
@keyframes tetrisCounterRotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(var(--tetris-rot));
  }
}
@keyframes tetrisSpin360 {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}
@keyframes tetrisSpin360Ccw {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-360deg);
  }
}
@keyframes tetrisRainbowHue {
  0% {
    filter: hue-rotate(0deg) saturate(1.6) contrast(1.15);
  }
  100% {
    filter: hue-rotate(360deg) saturate(1.6) contrast(1.15);
  }
}
@keyframes tetrisRainbowHueCcw {
  0% {
    filter: hue-rotate(0deg) saturate(1.6) contrast(1.15);
  }
  100% {
    filter: hue-rotate(-360deg) saturate(1.6) contrast(1.15);
  }
}
.tetris-rotate {
  animation: tetrisRotate 0.3s ease;
}

.tetris-rotate-cw {
  --tetris-rot: 90deg;
}

.tetris-rotate-ccw {
  --tetris-rot: -90deg;
}

.tetris-counter {
  animation: tetrisCounterRotate 0.3s ease;
}

.tetris-counter-cw {
  --tetris-rot: -90deg;
}

.tetris-counter-ccw {
  --tetris-rot: 90deg;
}

.select-areas-background-area {
  transition: opacity 0.18s ease;
}

.select-areas-background-area.tetris-counter-cw,
.select-areas-background-area.tetris-counter-ccw {
  opacity: 0;
}

.tetris-spin360-rainbow {
  animation: tetrisSpin360 0.5s ease, tetrisRainbowHue 0.5s linear;
}

.tetris-spin360-rainbow-ccw {
  animation: tetrisSpin360Ccw 0.5s ease, tetrisRainbowHueCcw 0.5s linear;
}

.select-areas-resize-handler {
  background-color: #000;
  border: 1px solid #fff;
  height: 8px;
  width: 8px;
  touch-action: none;
}
.select-areas-resize-handler::before {
  content: "";
  position: absolute;
  inset: var(--slice-handle-grab-inset, 0);
  background: transparent;
}

.select-areas-delete-area {
  cursor: pointer;
  height: 20px;
  width: 20px;
  display: block;
  pointer-events: none;
  background: url(/bt-delete.4bc64b36232b57c1b7171848b8bb906f.png) center/contain no-repeat;
}

.select-areas-delete-host {
  padding: 5px 5px 2px 2px;
}

.tmpImg,
.my-panda-bro {
  margin: 0 auto;
  padding: 5rem;
  max-width: 69px;
}

.tmpImg {
  cursor: pointer;
}

#imgWrap .tmpImg {
  border-radius: 3px;
}

.select-areas-overlay {
  background-color: #000;
  overflow: hidden;
  position: absolute;
  opacity: 0;
  touch-action: none;
  display: block;
  cursor: crosshair;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
.select-areas-overlay.has-slice {
  opacity: 0.5;
}

.touch-guides-overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  pointer-events: none;
  z-index: 999;
}

@keyframes touchGuideBlink {
  0% {
    opacity: 0;
  }
  20% {
    opacity: 1;
  }
  65% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
.touch-guide-line {
  position: absolute;
  animation: touchGuideBlink 0.45s ease;
  opacity: 0;
}

.touch-guide-v {
  width: 1px;
  height: 100%;
}

.touch-guide-h {
  height: 1px;
  width: 100%;
}

.touch-guide-snap {
  background: rgba(0, 180, 255, 0.95);
  box-shadow: none;
}

.touch-guide-clamp {
  background: rgba(255, 80, 80, 0.95);
  box-shadow: none;
}

.help-popover-wrap {
  display: inline-block;
}

.help-popover {
  position: absolute;
  right: 0;
  top: calc(100% + 6px);
  box-sizing: border-box;
  width: min(620px, 100vw - 24px);
  max-height: calc(100vh - 220px);
  overflow-y: auto;
  overscroll-behavior: contain;
  background: #fff;
  border: 1px solid #ccc;
  border-radius: 2px;
  padding: 10px 12px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
  z-index: var(--z-help-popover);
}

.help-popover-title {
  font-weight: 700;
  font-size: 12px;
  margin-bottom: 6px;
}

.help-popover-section {
  margin: 22px 0 4px;
  padding-bottom: 3px;
  border-bottom: 1px solid #eaeaea;
  font-size: 11px;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: #111;
}
.help-popover-section:first-of-type {
  margin-top: 6px;
}

.help-popover-note {
  font-weight: normal;
  text-transform: none;
  letter-spacing: 0;
  color: #666;
}

.slice-limit-warning {
  color: #c62828;
  display: inline-block;
  animation: slice-limit-flash 600ms ease-out;
}
.slice-limit-warning a {
  color: inherit;
}
@media (prefers-reduced-motion: reduce) {
  .slice-limit-warning {
    animation: none;
  }
}

@keyframes slice-limit-flash {
  0% {
    transform: scale(1);
  }
  25% {
    transform: scale(1.04);
  }
  100% {
    transform: scale(1);
  }
}
.help-popover-pro {
  font-weight: normal;
  text-transform: none;
  letter-spacing: 0;
  font-size: 11px;
  white-space: nowrap;
  color: #666;
  opacity: 0.85;
}

.help-popover-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  line-height: 1.35;
}

.help-popover-desc {
  padding: 3px 10px 3px 0;
  text-align: left;
  vertical-align: top;
}

.help-popover-keys {
  padding: 3px 0;
  text-align: right;
  vertical-align: top;
  white-space: nowrap;
}

.help-popover kbd {
  display: inline-block;
  padding: 1px 6px;
  border: 1px solid rgba(0, 0, 0, 0.18);
  border-bottom-width: 2px;
  border-radius: 6px;
  background: whitesmoke;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  font-size: 11px;
}

.blurred {
  -webkit-filter: blur(calc(3px / var(--canvas-k, 1)));
  -moz-filter: blur(calc(3px / var(--canvas-k, 1)));
  -o-filter: blur(calc(3px / var(--canvas-k, 1)));
  filter: blur(calc(3px / var(--canvas-k, 1)));
}

.next {
  font-size: 18px;
  margin-top: 10px;
}

.btn-chop {
  font-weight: 700;
  margin-top: -2px;
}

.btn-add,
.btn-clear {
  position: relative;
  padding: 3px 8px 0 5px;
  font-size: 15px;
}
.btn-add-txt,
.btn-clear-txt {
  font-size: 15px;
  position: relative;
  top: -4px;
}
.btn-add::before,
.btn-clear::before {
  background-size: 18px 18px;
  display: inline-block;
  width: 18px;
  height: 18px;
  content: "";
}

button.btn-add::before {
  background-image: url(/add-new-icon.02471d5f1c2054f3636f7ebed3a1e976.png);
}

button.btn-clear::before {
  background-image: url(/clear-all-icon.f2ebfec47e186fe7e3bfb65cf0a7ec4c.png);
}

.btn-common {
  font-size: 14px;
  padding: 3px 8px;
}
.btn-common:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.layer-src-hidden {
  visibility: hidden;
}

.layer-live-canvas {
  position: absolute;
  top: 0;
  left: 0;
  pointer-events: none;
  z-index: var(--z-layer-live-canvas);
}

.layer-move-capture {
  position: absolute;
  inset: 0;
  cursor: default;
  z-index: var(--z-layer-move-capture);
}
.layer-move-capture.over-layer {
  cursor: move;
}

.canvas-context-menu {
  position: fixed;
  z-index: 1010;
  min-width: 170px;
  padding: 4px;
  background: #fff;
  border: 1px solid #cfcfcf;
  border-radius: 6px;
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.4);
}
.canvas-context-menu > .item {
  display: block;
  width: 100%;
  padding: 6px 10px;
  border: 0;
  background: transparent;
  font-size: 12px;
  text-align: left;
  cursor: pointer;
  white-space: nowrap;
}
.canvas-context-menu > .item:hover:not(:disabled) {
  background: rgba(80, 79, 246, 0.12);
}
.canvas-context-menu > .item:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.canvas-context-menu > .separator {
  margin: 4px 2px;
  border-top: 1px solid #eaeaea;
}

.canvas-context-menu .menu-heading {
  padding: 8px 10px 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: #666;
  user-select: none;
}

.layer-options-bar {
  position: fixed;
  bottom: 18px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 990;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  padding: 7px 10px;
  max-width: calc(100vw - 24px);
  background: #fff;
  border: 1px solid #cfcfcf;
  border-radius: 8px;
  box-shadow: 0 6px 20px -6px rgba(0, 0, 0, 0.35);
  font-size: 12px;
  animation: layerOptionsIslandIn 140ms ease-out;
  transition: translate 160ms ease;
}
.layer-options-bar.is-raised {
  translate: 0 -100px;
}
@media (prefers-reduced-motion: reduce) {
  .layer-options-bar {
    animation: none;
    transition: none;
  }
}
.layer-options-bar > .layer-options-name {
  font-weight: 700;
  max-width: 14ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.layer-options-bar > .layer-options-sep {
  color: #cfcfcf;
}
.layer-options-bar > .layer-field {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.layer-options-bar > .layer-field > .layer-field-label {
  color: #666;
  font-size: 11px;
}
.layer-options-bar > .layer-field > .layer-field-input {
  width: 6ch;
  padding: 2px 4px;
  font-size: 12px;
  border: 1px solid #cfcfcf;
  appearance: textfield;
  -moz-appearance: textfield;
}
.layer-options-bar > .layer-field > .layer-field-input::-webkit-outer-spin-button, .layer-options-bar > .layer-field > .layer-field-input::-webkit-inner-spin-button {
  appearance: none;
  margin: 0;
}
.layer-options-bar > .layer-field > .layer-field-input:focus {
  outline: 2px solid #504ff6;
  outline-offset: -1px;
}
.layer-options-bar > .layer-aspect-link {
  position: relative;
  opacity: 0.45;
}
.layer-options-bar > .layer-aspect-link.active {
  opacity: 1;
  border-color: #504ff6;
  background: rgba(80, 79, 246, 0.12);
}
.layer-options-bar > .layer-aspect-link:not(.active)::after {
  content: "";
  position: absolute;
  left: 15%;
  right: 15%;
  top: 50%;
  border-top: 1px solid #333;
  transform: rotate(-20deg);
}

@keyframes layerOptionsIslandIn {
  from {
    opacity: 0;
    transform: translateX(-50%) translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
  }
}
.layer-chrome-escape {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: var(--z-layer-chrome);
}

.layer-chrome {
  position: absolute;
  inset: 0;
  border: 1px solid transparent;
  box-sizing: border-box;
  pointer-events: none;
  z-index: var(--z-layer-chrome);
}
.layer-chrome > .hover,
.layer-chrome > .frame {
  --layer-accent: #504ff6;
  position: absolute;
  box-sizing: border-box;
}
.layer-chrome > .hover {
  outline: 1px solid #504ff6;
  outline-offset: -1px;
  background: rgba(80, 79, 246, 0.12);
}
.layer-chrome > .frame {
  background: transparent;
}
.layer-chrome > .frame > .edge-strip {
  position: absolute;
  background: transparent;
  pointer-events: auto;
  touch-action: none;
}
.layer-chrome > .frame > .edge-strip.edge-strip-n, .layer-chrome > .frame > .edge-strip.edge-strip-s {
  cursor: ns-resize;
}
.layer-chrome > .frame > .edge-strip.edge-strip-e, .layer-chrome > .frame > .edge-strip.edge-strip-w {
  cursor: ew-resize;
}
.layer-chrome > .frame > .handle {
  position: absolute;
  background: #504ff6;
  border: 1px solid #fff;
  border-radius: 2px;
  box-sizing: border-box;
  pointer-events: auto;
  touch-action: none;
}
.layer-chrome > .frame > .handle.handle-nw, .layer-chrome > .frame > .handle.handle-se {
  cursor: nwse-resize;
}
.layer-chrome > .frame > .handle.handle-ne, .layer-chrome > .frame > .handle.handle-sw {
  cursor: nesw-resize;
}
.layer-chrome > .frame > .handle.handle-n, .layer-chrome > .frame > .handle.handle-s {
  cursor: ns-resize;
}
.layer-chrome > .frame > .handle.handle-e, .layer-chrome > .frame > .handle.handle-w {
  cursor: ew-resize;
}
.layer-chrome .label {
  position: absolute;
  left: 0;
  top: 0;
  transform-origin: left top;
  padding: 1px 5px;
  background: #504ff6;
  color: #fff;
  font-size: 11px;
  line-height: 1.5;
  white-space: nowrap;
  border-radius: 2px;
  pointer-events: none;
}

.canvas-boundary {
  position: absolute;
  inset: 0;
  box-shadow: 0 0 0 var(--canvas-boundary-w, 1px) #239373;
  pointer-events: none;
  z-index: var(--z-layer-canvas-boundary);
}

.hidden-file-input {
  display: none;
}

.upload-dropzone {
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  padding: 40px 24px;
  min-height: 340px;
  border: 1px dashed #cfcfcf;
  border-radius: 8px;
  transition: border-color 120ms ease, background 120ms ease;
}
.upload-dropzone:hover, .upload-dropzone.drag-active {
  border-color: #239373;
  background: #f0fbf7;
}
.upload-dropzone .upload-hint {
  font-size: 14px;
  color: #666;
}

.canvas-settings-popover .canvas-settings-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.canvas-settings-popover .canvas-settings-close {
  border: 1px solid #eaeaea;
  background: #fff;
  cursor: pointer;
  padding: 2px 7px;
  line-height: 1;
}
.canvas-settings-popover .canvas-settings-note {
  font-size: 11px;
  color: #666;
  margin: 4px 0 0;
  max-width: 220px;
}
.canvas-settings-popover .canvas-settings-row {
  display: flex;
  align-items: flex-end;
  gap: 8px;
  margin: 8px 0;
}
.canvas-settings-popover .canvas-settings-row label {
  display: flex;
  flex-direction: column;
  font-size: 12px;
  gap: 2px;
}
.canvas-settings-popover .canvas-settings-row input {
  width: 72px;
  padding: 2px 4px;
}
.canvas-settings-popover .canvas-settings-row .canvas-settings-x {
  padding-bottom: 4px;
}
.canvas-settings-popover .canvas-settings-actions {
  display: flex;
  gap: 6px;
}

.tool-switch,
.tool-group {
  display: inline-flex;
  border: 1px solid #cfcfcf;
  border-radius: 4px;
  overflow: hidden;
}
.tool-switch .tool-switch-btn,
.tool-switch .tool-group-btn,
.tool-group .tool-switch-btn,
.tool-group .tool-group-btn {
  font-size: 14px;
  padding: 3px 10px;
  border: none;
  border-left: 1px solid #cfcfcf;
  background: #fafafa;
  color: #444;
  cursor: pointer;
}
.tool-switch .tool-switch-btn:first-child,
.tool-switch .tool-group-btn:first-child,
.tool-group .tool-switch-btn:first-child,
.tool-group .tool-group-btn:first-child {
  border-left: none;
}
.tool-switch .tool-switch-btn.active, .tool-switch .tool-switch-btn[aria-pressed=true]:not(:disabled),
.tool-switch .tool-group-btn.active,
.tool-switch .tool-group-btn[aria-pressed=true]:not(:disabled),
.tool-group .tool-switch-btn.active,
.tool-group .tool-switch-btn[aria-pressed=true]:not(:disabled),
.tool-group .tool-group-btn.active,
.tool-group .tool-group-btn[aria-pressed=true]:not(:disabled) {
  background: #239373;
  color: #fff;
  font-weight: 700;
}
.tool-switch .tool-switch-btn:disabled,
.tool-switch .tool-group-btn:disabled,
.tool-group .tool-switch-btn:disabled,
.tool-group .tool-group-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.zoom-percent-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 0;
  padding: 0 2px;
  font-size: 12px;
  color: #333;
}

.zoom-percent-input {
  width: 52px;
  height: 30px;
  box-sizing: border-box;
  font-size: 12px;
  text-align: center;
  padding: 0;
  border: 0;
  border-radius: 2px;
  background: transparent;
  color: #111;
  font-variant-numeric: tabular-nums;
}
.zoom-percent-input:focus-visible {
  background: #fff;
  outline: 2px solid rgba(35, 147, 115, 0.35);
  outline-offset: 1px;
}

.zoom-percent-wrap.is-active .zoom-percent-input {
  outline: 1px solid rgba(0, 0, 0, 0.25);
  background: #fff;
}

.history-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  width: min(360px, 92vw);
  background: #fff;
  border-left: 1px solid #eaeaea;
  transform: translateX(102%);
  transition: transform 180ms ease;
  z-index: 9999;
  display: flex;
  flex-direction: column;
}
.history-drawer.open {
  transform: translateX(0);
}

.history-drawer-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-bottom: 1px dotted #eaeaea;
}

.history-drawer-title {
  font-size: 16px;
  font-weight: bold;
}

.history-close {
  border: 1px solid #eaeaea;
  background: #fff;
  cursor: pointer;
  padding: 4px 8px;
}

.history-item.locked {
  opacity: 0.45;
  cursor: not-allowed;
}
.history-item.locked:hover {
  background: inherit;
}

.history-locked-note {
  margin-top: 8px;
  padding: 8px 6px 0;
  border-top: 1px dashed #eaeaea;
  font-size: 12px;
  color: #666;
}
.history-locked-note a {
  color: inherit;
}

.history-drawer-subtitle {
  padding: 6px 12px;
  font-size: 12px;
  color: #666;
  border-bottom: 1px dotted #eaeaea;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.history-drawer-subtitle-left {
  min-width: 0;
}

.history-drawer-subtitle-right {
  display: flex;
  align-items: center;
  gap: 6px;
}

.history-list {
  overflow: auto;
  padding: 8px 8px 12px;
}

.history-item {
  display: flex;
  gap: 10px;
  padding: 8px;
  border: 1px dotted #eaeaea;
  margin: 0 0 8px 0;
  background: #fff;
  cursor: pointer;
}

.history-item:hover {
  background: #f7f7f7;
}

.history-item:focus {
  outline: 2px solid #239373;
  outline-offset: 1px;
}

.history-item.current {
  border: 1px solid #239373;
  background: #f0fbf7;
}

.history-item.future {
  opacity: 0.55;
}

.history-item.future:hover {
  opacity: 0.75;
}

.history-item.root .history-primary {
  font-style: italic;
}

.modal-shell-close, .history-index {
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #eaeaea;
  background: #fafafa;
  color: #666;
}

.history-index {
  width: 22px;
  flex: 0 0 22px;
  font-size: 12px;
}

.history-thumb {
  width: 44px;
  height: 44px;
  border: 1px solid #eaeaea;
  background: #fafafa;
  flex: 0 0 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.history-thumb img {
  width: 44px;
  height: 44px;
  display: block;
}

.my-slices-thumb-empty, .history-thumb-empty {
  width: 100%;
  height: 100%;
  background: repeating-linear-gradient(45deg, #f7f7f7, #f7f7f7 6px, #ffffff 6px, #ffffff 12px);
}

.history-text {
  min-width: 0;
}

.history-primary {
  font-size: 13px;
  font-weight: bold;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.history-secondary {
  font-size: 12px;
  color: #444;
  margin-top: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.my-slices-list-wrap {
  margin-top: 20px;
  margin-bottom: 20px;
  text-align: left;
  width: 100%;
  display: inline-block;
}

.my-slices-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.my-slices-summary {
  margin-top: 16px;
  margin-bottom: 16px;
  padding: 10px 12px;
  border: 1px dotted #eaeaea;
  background: #fff;
  text-align: center;
}

.my-slices-limit {
  margin-bottom: 8px;
  font-size: 12px;
  color: #666;
}

.my-slices-pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-top: 16px;
  font-size: 12px;
  color: #666;
}

.my-slices-summary-title {
  font-size: 16px;
  font-weight: 800;
  margin-bottom: 11px;
}

.my-slices-section-title {
  margin-top: 34px;
}

.my-slices-section-note {
  margin-bottom: 8px;
  color: #666;
  font-size: 12px;
}

.my-slices-summary-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  flex-wrap: wrap;
  justify-content: center;
  font-size: 14px;
  color: #333;
}

.my-slices-summary-sep {
  color: #777;
  display: inline-block;
  margin: 0 6px;
}

.my-slices-summary-fun {
  margin-top: 6px;
  font-size: 12px;
  color: #555;
}

.my-slices-item {
  display: flex;
  gap: 12px;
  align-items: center;
  padding: 10px;
  border: 1px solid #e3e3e3;
  border-radius: 0;
  background: #fff;
  cursor: default;
}
.my-slices-item:hover {
  background: #f7f7f7;
}
.my-slices-item:focus {
  outline: 2px solid #239373;
  outline-offset: 1px;
}

.my-slices-item .history-index {
  align-self: stretch;
}

.my-slices-thumb {
  width: 56px;
  height: 56px;
  border: 1px solid #ddd;
  background: #f3f3f3;
  flex: 0 0 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  cursor: pointer;
}
.my-slices-thumb:focus {
  outline: 2px solid #239373;
  outline-offset: 1px;
}
.my-slices-thumb img {
  width: 56px;
  height: 56px;
  display: block;
  object-fit: cover;
}

.my-slices-text {
  flex: 1;
  min-width: 0;
}

.my-slices-version {
  margin-left: 8px;
  font-size: 12px;
  font-weight: normal;
  color: #666;
}

.my-slices-primary {
  font-size: 13px;
  font-weight: bold;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.my-slices-secondary {
  font-size: 12px;
  color: #444;
  margin-top: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.my-slices-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.my-slices-action {
  font-size: 14px;
}

#menu {
  border-bottom: 1px dotted #eaeaea;
  border-top: 1px dotted #eaeaea;
  position: relative;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-wrap: wrap;
  gap: 4px;
}

#tool-box {
  padding: 4px;
  vertical-align: middle;
}

#tool-box {
  flex: 1 1 100%;
  min-width: 200px;
  font-size: 15px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0;
}
#tool-box .tool-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  width: 100%;
}
#tool-box .btn-chop {
  margin-left: auto;
}
#tool-box .btn-icon {
  display: inline-grid;
  place-items: center;
  width: 38px;
  padding: 0;
}
#tool-box .toolbar-icon {
  display: block;
  width: 20px;
  height: 20px;
}
#tool-box .draft-save-notice {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 12px;
  color: #666;
}
#tool-box .save-draft-icon--saving {
  animation-name: save-draft-pulse;
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
}
#tool-box .save-draft-check {
  color: #239373;
  stroke-dasharray: 12;
  stroke-dashoffset: 12;
  animation: save-draft-check-draw 260ms ease-out forwards;
}
@media (prefers-reduced-motion: reduce) {
  #tool-box .save-draft-icon--saving {
    animation: none;
    opacity: 0.35;
  }
  #tool-box .save-draft-check {
    animation: none;
    stroke-dashoffset: 0;
  }
}
@keyframes save-draft-pulse {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.35;
  }
}
@keyframes save-draft-check-draw {
  to {
    stroke-dashoffset: 0;
  }
}
#tool-box .tool-rows-more {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 180ms ease, margin-top 180ms ease;
  width: 100%;
  overflow: hidden;
  margin-top: 0;
}
#tool-box .tool-rows-more[data-open="1"] {
  grid-template-rows: 1fr;
  margin-top: 8px;
}
#tool-box .tool-rows-more-inner {
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  visibility: hidden;
  transition: visibility 0s linear 180ms;
}
#tool-box .tool-rows-more[data-open="1"] .tool-rows-more-inner {
  visibility: visible;
  transition-delay: 0s;
}
#tool-box .btn-more {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
#tool-box .btn-more-chevron {
  display: inline-block;
  transition: transform 180ms ease;
  font-weight: bold;
}
#tool-box .btn-more.is-open .btn-more-chevron {
  transform: rotate(90deg);
}
@media (prefers-reduced-motion: reduce) {
  #tool-box .tool-rows-more,
#tool-box .tool-rows-more-inner,
#tool-box .btn-more-chevron {
    transition: none;
  }
}
#tool-box .switch-box {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 12px;
}
#tool-box .switch-box .switch-label {
  cursor: pointer;
  user-select: none;
}
#tool-box .switch-box .switch-label--disabled {
  cursor: not-allowed;
  opacity: 0.45;
}
#tool-box .switch-box .switch {
  position: relative;
  top: 0;
}
#tool-box .switch--disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
#tool-box .switch--disabled .slider {
  cursor: not-allowed;
}

.active-animation {
  animation-name: MOVE-BG;
  animation-duration: 4s;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
}

.logo {
  background-image: repeating-linear-gradient(45deg, violet, indigo, #00f, green, #ff0, orange, red, #d04343, #3d773d, #d0ae0b, #3961ab, #a22ea2);
  font-weight: bold;
  text-align: center;
  background-size: 314% 314%;
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  font-size: 36px;
  animation: rainbow 11s ease infinite;
}
@media (prefers-reduced-motion: reduce) {
  .logo {
    animation: none;
  }
}

.aitch-one {
  font-size: 36px;
}

.commanding-input,
.super-commanding-input {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid #ccc;
  background: #fff;
  padding: 8px 10px;
  font-size: 14px;
}

.commanding-input {
  height: 30px;
}

.super-commanding-input {
  height: 60px;
}

.auth-link {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  color: #239373;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
}

.auth-link:hover {
  text-decoration: underline;
}

.green-link-btn {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  color: #239373;
  font-weight: 700;
  text-decoration: underline;
  cursor: pointer;
}

.green-link-btn:hover {
  color: #1f8668;
}

.primary-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 16px 16px;
  border-radius: 10px;
  background: #239373;
  color: #fff;
  border: 1px solid #1a6e55;
  cursor: pointer;
  font-size: 18px;
  font-weight: 900;
  line-height: 1;
}

.primary-btn:hover:enabled {
  background: #1f8668;
}

.primary-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.auth-btn-row {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

/* Switch styles adapted from provided CSS */
.switch input {
  opacity: 0;
  width: 0;
  height: 0;
  cursor: pointer;
}

.slider {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: 0.4s;
  transition: 0.4s;
  cursor: pointer;
}
.slider::before {
  position: absolute;
  content: "";
  height: 18px;
  width: 18px;
  left: 2px;
  bottom: 2px;
  background-color: #fff;
  -webkit-transition: 0.4s;
  transition: 0.4s;
}
.slider.round {
  border-radius: 20px;
}
.slider.round::before {
  border-radius: 50%;
}

input:checked + .slider {
  background-color: #239373;
}

input:focus + .slider {
  box-shadow: 0 0 1px #239373;
}

input:checked + .slider::before {
  -webkit-transform: translateX(16px);
  -ms-transform: translateX(16px);
  transform: translateX(16px);
}

#switch-status {
  min-width: 30px;
}

@media (max-width: 600px) {
  #menu {
    justify-content: center;
  }

  #tool-box {
    width: 100%;
  }

  #the-grid {
    padding: 0 12px;
  }
}
.grid-document-backdrop {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-color: #f7f7f7;
  background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.06) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.06) 75%, rgba(0, 0, 0, 0.06)), linear-gradient(45deg, rgba(0, 0, 0, 0.06) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.06) 75%, rgba(0, 0, 0, 0.06));
}

#sliceImg {
  position: relative;
  z-index: 0;
}
/*!****************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/About.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.page-about .root,
.page-about .root a {
  text-decoration: none;
}
.page-about h2,
.page-about h3 .cta {
  font-size: 16px;
}
.page-about .content {
  width: 600px;
  margin: 5px auto;
}
.page-about .feedback {
  border-top: 1px solid #d5d5d5;
}
/*!******************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/Pricing.scss ***!
  \******************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
@keyframes plan-beam-spin {
  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}
@keyframes rainbow {
  0% {
    background-position: 0 50%;
  }
  50% {
    background-position: 100% 25%;
  }
  100% {
    background-position: 0 50%;
  }
}
.page-pricing {
  background: #fff;
  color: #333;
  /* Pricing Cards */
  /*
   * ONE ACCENT PER CARD.
   *
   * The two free cards get a rail; Pro gets the beam. A card carrying both would read as two
   * competing signals, and the point of the beam is that exactly one card has it.
   *
   * The rail is a pseudo-element rather than a thicker `border-left`, which would have changed
   * the card's inner width and stepped the CTA row that pricing-cta-alignment.pwspec defends.
   * Fully rounded and inset from both ends: the reference ran its stripe corner to corner, but
   * every other soft edge on this page is a 999px pill, so a pill is what reads as ours.
   */
  /*
   * BORDER BEAM — a light travelling the perimeter of the Pro card.
   *
   * After Magic UI's border-beam, rebuilt without it: theirs needs React, Tailwind and
   * framer-motion, and drives the travel with `offset-path` + `@property`, neither of which is
   * safe to rely on across the browsers this suite runs. This is a conic gradient rotating inside
   * a ring-shaped mask — one element, no JS, same read.
   *
   * Green into purple is deliberate: green is the app's own accent and purple is what Pro already
   * uses here, so the beam is made of the two colours the product already owns.
   */
}
.page-pricing.container {
  background: #fff;
}
.page-pricing .root,
.page-pricing .root a {
  text-decoration: none;
}
.page-pricing .logo {
  background-image: repeating-linear-gradient(45deg, violet, indigo, #00f, green, #ff0, orange, red, #d04343, #3d773d, #d0ae0b, #3961ab, #a22ea2);
  font-weight: 700;
  text-align: center;
  background-size: 314% 314%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  font-size: 36px;
  animation: rainbow 11s ease infinite;
  margin-bottom: 10px;
}
.page-pricing .pricing-page .content {
  width: 100%;
  max-width: 900px;
  margin: 0 auto;
  padding: 0 20px;
}
.page-pricing .feedback {
  text-align: center;
  border-top: 1px solid #d5d5d5;
  padding-top: 8px;
  font-size: 13px;
  margin-top: 40px;
  padding-bottom: 20px;
}
.page-pricing .pricing-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  margin: 30px 0;
}
.page-pricing .plan {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid #e8e8e8;
  border-radius: 16px;
  padding: 24px;
  text-align: left;
  background: #fff;
  transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s;
}
@media (min-width: 801px) {
  .page-pricing .plan:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
    border-color: #ccc;
  }
}
.page-pricing .plan.active {
  border-color: #333;
}
.page-pricing .plan.active:hover {
  border-color: #333;
}
.page-pricing .plan--featured {
  background: #f3f1fe;
  border-color: #d8d2f7;
}
.page-pricing .plan--featured.active {
  border-color: #6759d6;
}
.page-pricing .plan--railed::before {
  content: "";
  position: absolute;
  pointer-events: none;
  /*
   * The reference's rule, verbatim in effect:
   *
   *     border: 1px solid var(--border);
   *     border-left: 3px solid var(--accent);
   *     border-radius: var(--radius-lg);
   *
   * The taper comes from the two widths DISAGREEING. Where a 3px left border meets a 1px top
   * border, the browser mitres the join by running a line between the inner and outer corners,
   * so the colour narrows from 3px to 1px along the curve and slips away to nothing. An earlier
   * attempt set all four sides to 3px, where that same mitre is a flat 45° diagonal — it ended
   * the stripe, but it did not thin it.
   *
   * It lives on a pseudo-element rather than on `.plan` itself only because nothing here sets
   * `box-sizing: border-box`: a 3px border on the card would push its text 2px right of the Pro
   * card's. Same borders, same mitre, no layout.
   *
   * inset and radius are the card's own plus its 1px border, so the stripe lands exactly on that
   * border; the other three sides stay transparent and let it show through.
   */
  inset: -1px;
  border-radius: 17px;
  border: 1px solid transparent;
  border-left: 3px solid #6759d6;
}
.page-pricing .plan--railed-guest::before {
  border-left-color: #2f78c1;
}
.page-pricing .plan-beam {
  position: absolute;
  inset: -1px;
  border-radius: 17px;
  padding: 2px;
  overflow: hidden;
  pointer-events: none;
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
}
.page-pricing .plan-beam::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  /*
   * A square big enough that its rotation always covers the card, centred so it sweeps evenly.
   *
   * It has to be at least as wide as the card's DIAGONAL, and a percentage of the width alone
   * is not that: at 220% of a 247px-wide card this was 543px against a 628px diagonal, so the
   * beam never reached the corners and mostly fell outside the card entirely. `min-height`
   * with `aspect-ratio` makes the side 1.6 × the LONGER edge instead, and 1.6 > √2 ≥ any
   * diagonal/longest-edge ratio, so it covers whatever shape the card ends up.
   */
  width: 160%;
  min-height: 160%;
  aspect-ratio: 1;
  transform: translate(-50%, -50%);
  /*
   * A comet, and a SHORT one.
   *
   * The lit arc is an angle measured from the card's centre, so its width in degrees decides
   * how much of the perimeter lights up at once. At 180deg it covered half the border, which
   * put the purple head on one edge and the brightest green on another with a dim stretch
   * between — one beam that read unmistakably as two. 72deg keeps head and tail on the same
   * run of border.
   *
   * The hard cut back to transparent at 360deg is deliberate: it gives the comet a leading
   * edge, where a symmetric fade would meet its own tail and lose any sense of direction.
   */
  background: conic-gradient(from 0deg, transparent 0deg 288deg, rgba(35, 147, 115, 0) 292deg, #239373 338deg, #6759d6 356deg, transparent 360deg);
  animation: plan-beam-spin 5s linear infinite;
}
@media (prefers-reduced-motion: reduce) {
  .page-pricing .plan-beam::before {
    animation: none;
  }
}
.page-pricing .plan-head {
  margin-bottom: 18px;
}
.page-pricing .plan-name-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-height: 34px;
}
.page-pricing .plan-name {
  font-size: 26px;
  font-weight: 700;
  margin-bottom: 6px;
}
.page-pricing .plan-price {
  font-size: 38px;
  font-weight: 700;
  color: #1a1a1a;
  line-height: 1.1;
}
.page-pricing .plan-price span {
  font-size: 14px;
  color: #888;
  font-weight: 400;
  margin-left: 6px;
}
.page-pricing .plan-price .plan-cur {
  font-size: 16px;
  color: #888;
  font-weight: 700;
  vertical-align: top;
  margin-left: 0;
  margin-right: 1px;
  line-height: 1;
}
.page-pricing .plan-desc {
  color: #666;
  font-size: 14px;
  margin: 8px 0 0;
}
.page-pricing .plan-cta {
  margin-bottom: 18px;
}
.page-pricing .plan-cta-error {
  color: #c62828;
  font-size: 12px;
  margin-top: 8px;
}
.page-pricing .plan-features-title {
  font-weight: 700;
  font-size: 14px;
  margin-bottom: 12px;
}
.page-pricing .plan-features {
  list-style: none;
  padding: 0;
  margin: 0;
  text-align: left;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.page-pricing .plan-features li {
  font-size: 14px;
  padding-left: 26px;
  position: relative;
  line-height: 1.4;
}
.page-pricing .plan-features li.yes::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: #6759d6;
  font-weight: 700;
}
.page-pricing .plan-features li.no::before {
  content: "—";
  position: absolute;
  left: 0;
  color: #999;
}
.page-pricing .save-pill {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: #22a722;
  padding: 2px 7px;
  border-radius: 9px;
  vertical-align: middle;
  position: relative;
  top: -2px;
  margin-left: 4px;
}
.page-pricing .cta-btn,
.page-pricing .cta-skeleton {
  display: block;
  width: 100%;
  box-sizing: border-box;
  text-align: center;
  padding: 12px 20px;
  border-radius: 999px;
  font-weight: 600;
  font-size: 15px;
  text-decoration: none;
  transition: background 0.2s, border-color 0.2s, color 0.2s;
}
.page-pricing .cta-btn.disabled,
.page-pricing .cta-skeleton.disabled {
  opacity: 0.6;
  pointer-events: none;
  cursor: not-allowed;
}
.page-pricing .cta-outline {
  background: #fff;
  color: #1a1a1a;
  border: 1px solid #d0d0d0;
}
.page-pricing .cta-outline:hover {
  border-color: #888;
  background: #fafafa;
}
.page-pricing .cta-accent {
  background: #6759d6;
  color: #fff;
  border: 1px solid #6759d6;
}
.page-pricing .cta-accent:hover {
  background: #5546c9;
}
.page-pricing .cta-current {
  background: transparent;
  color: #999;
  border: 1px solid #e0e0e0;
  cursor: default;
}
.page-pricing .cta-current:hover {
  background: transparent;
}
.page-pricing .cta-founding {
  display: inline-block;
  width: auto;
  background: transparent;
  border: 2px solid #b38600;
  color: #b38600;
  margin: 0;
  white-space: nowrap;
}
.page-pricing .cta-founding:hover {
  background: #fffbe6;
}
.page-pricing .interval-toggle {
  display: inline-flex;
  gap: 2px;
  background: #eee;
  border-radius: 14px;
  padding: 2px;
}
.page-pricing .interval-btn {
  padding: 4px 10px;
  border: none;
  border-radius: 12px;
  background: transparent;
  cursor: pointer;
  font-size: 12px;
  font-weight: 500;
  color: #888;
  transition: background 0.15s, color 0.15s;
}
.page-pricing .interval-btn.active {
  background: #fff;
  color: #333;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.page-pricing .interval-btn:hover:not(.active) {
  color: #555;
}
.page-pricing .founding-note {
  background: #fffbe6;
  border: 1px solid #ffe066;
  border-radius: 8px;
  padding: 16px 20px;
  margin: 30px 0;
  font-size: 14px;
}
.page-pricing .founding-note strong {
  color: #b38600;
}
.page-pricing h2 {
  margin-top: 40px;
  margin-bottom: 10px;
}
.page-pricing .subtitle {
  color: #666;
  margin-top: 0;
  margin-bottom: 20px;
}
@media (max-width: 800px) {
  .page-pricing .pricing-grid {
    grid-template-columns: 1fr;
    max-width: 400px;
    margin-left: auto;
    margin-right: auto;
  }
}
@media (max-width: 500px) {
  .page-pricing .logo {
    font-size: 28px;
  }
  .page-pricing .plan-price {
    font-size: 28px;
  }
  .page-pricing .founding-note {
    padding: 12px 16px;
  }
  .page-pricing h2 {
    font-size: 20px;
    margin-top: 30px;
  }
  .page-pricing .content {
    padding: 0 16px;
  }
}

.plan-cta-note {
  margin-top: 8px;
  color: #666;
  font-size: 12px;
  text-align: center;
}
/*!*******************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/Settings.scss ***!
  \*******************************************************************************************************************************************************************************************************************************************************/
.page-settings {
  background: #fff;
  color: #333;
}
.page-settings.container {
  background: #fff;
}
/*!**************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/Faq.scss ***!
  \**************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.page-faq {
  background: #fff;
  color: #333;
}
.page-faq .root,
.page-faq .root a {
  text-decoration: none;
}
.page-faq .logo {
  margin-bottom: 10px;
}
.page-faq .content {
  max-width: 700px;
  margin: 0 auto;
  padding: 0 20px;
  width: 100%;
}
.page-faq .feedback {
  border-top: 1px solid #d5d5d5;
  margin-top: 40px;
  padding-bottom: 20px;
}
.page-faq h2 {
  margin-top: 10px;
  margin-bottom: 20px;
}
.page-faq .faq-item {
  margin-bottom: 28px;
}
.page-faq .faq-item h3 {
  margin: 0 0 8px 0;
  font-size: 17px;
  font-weight: 700;
}
.page-faq .faq-item p {
  margin: 0;
  line-height: 1.6;
  color: #444;
}
.page-faq .tier-table {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0;
  font-size: 14px;
}
.page-faq .tier-table th,
.page-faq .tier-table td {
  padding: 10px 12px;
  text-align: left;
  border-bottom: 1px solid #eee;
}
.page-faq .tier-table th {
  background: #f9f9f9;
  font-weight: 600;
}
.page-faq .tier-table td:first-child {
  font-weight: 500;
}
.page-faq .yes {
  color: #22a722;
}
.page-faq .no {
  color: #999;
}
@media (max-width: 500px) {
  .page-faq .logo {
    font-size: 28px;
  }
  .page-faq .content {
    padding: 0 16px;
  }
  .page-faq .tier-table {
    font-size: 13px;
  }
  .page-faq .tier-table th,
.page-faq .tier-table td {
    padding: 8px 6px;
  }
}
/*!****************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/Terms.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.page-terms .root,
.page-terms .root a {
  text-decoration: none;
}
.page-terms h2,
.page-terms h3 .cta {
  font-size: 16px;
}
.page-terms .content {
  width: 600px;
  margin: 5px auto;
}
.page-terms .feedback {
  border-top: 1px solid #d5d5d5;
}
/*!******************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./src/front/views/Privacy.scss ***!
  \******************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
/**
 * The four right-side slide-overs (History, Layers, Canvas, Slices).
 *
 * Named because it was a magic `9999` repeated in four files while the floating auth button
 * next to it was a NAMED 99999 — so the button painted over every drawer, clipping the
 * History drawer's footer. A number that appears four times loses arguments with a number
 * that appears once.
 *
 * Order that matters here:  canvas chrome  <  auth launcher  <  drawers  <  auth modal.
 * The launcher is a floating convenience and must yield to a panel the user deliberately
 * opened; the modal is modal and covers everything.
 */
/**
 * Full-screen canvas, and the toolbar floating over it.
 *
 * Both sit ABOVE the auth launcher (so full screen really is full) and BELOW the drawers, so
 * History / Layers / Canvas / Slices still open over the canvas in full screen — which is the
 * point of doing this in CSS rather than with the Fullscreen API. A native fullscreen element
 * would hide every one of those, because they are `position: fixed` siblings, not descendants.
 */
.page-privacy .root,
.page-privacy .root a {
  text-decoration: none;
}
.page-privacy h2,
.page-privacy h3 .cta {
  font-size: 16px;
}
.page-privacy .content {
  width: 600px;
  margin: 5px auto;
}
.page-privacy .feedback {
  border-top: 1px solid #d5d5d5;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFVSjtBQVBFO0VBQ0U7QUFTSjtBQVBJO0VBQ0U7RUFDQTtFQUNBO0FBU047QUFOSTtFQUNFO0VBQ0E7RUFDQTtBQVFOO0FBSkU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtBQU1KO0FBSkk7O0VBRUU7RUFDQTtFQUNBO0FBTU47QUFISTtFQUNFO0VBQ0E7QUFLTjtBQUZJO0VBQ0U7QUFJTjtBQUFFO0VBQ0U7QUFFSjtBQUNFO0VBQ0U7QUFDSjtBQUVFO0VBQ0U7SUFDRTtFQUFKO0VBR0U7SUFDRTtFQURKO0VBSUU7SUFDRSxlbEJzQ1M7RWtCeENiO0VBSUk7O0lBRUU7RUFGTjtBQUNGLEM7Ozs7QUNuR0EsZ0JBQWdCO0FuQjRNaEI7Ozs7Ozs7Ozs7O0VBQUE7QUFjQTs7Ozs7OztFQUFBO0FtQm5ORTs7RUFFRTtBQWVKO0FBWkU7O0VBRUU7QUFjSjtBQVhFO0VBQ0U7RUFDQTtBQWFKO0FBVkU7RUFDRTtBQVlKLEM7Ozs7QUNuQ0EsZ0JBQWdCO0FwQjRNaEI7Ozs7Ozs7Ozs7O0VBQUE7QUFjQTs7Ozs7OztFQUFBO0FvQm5ORTs7RUFFRTtBQWVKO0FBWkU7O0VBRUU7QUFjSjtBQVhFO0VBQ0U7RUFDQTtBQWFKO0FBVkU7RUFDRTtBQVlKLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pbWctc2xpY2VyLy4vc3JjL2Zyb250L2NvbXBvbmVudHMvU2xpY2VUcmFuc2Zvcm1Ub29sYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0xheWVyc0RyYXdlci5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvdmFyaWFibGVzLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0NhbnZhc0RyYXdlci5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvY29tcG9uZW50cy9TbGljZURyYXdlci5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvY29tcG9uZW50cy9Ub29sdGlwLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0FsZXJ0QmFubmVyLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0FjY291bnRQYW5lbC5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvY29tcG9uZW50cy9Nb2RhbFNoZWxsLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0FjY291bnRNb2RhbC5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvY29tcG9uZW50cy9BdXRoTW9kYWwuc2NzcyIsIndlYnBhY2s6Ly9pbWctc2xpY2VyLy4vc3JjL2Zyb250L2NvbXBvbmVudHMvU2tlbGV0b24uc2NzcyIsIndlYnBhY2s6Ly9pbWctc2xpY2VyLy4vc3JjL2Zyb250L2NvbXBvbmVudHMvQXV0aExhdW5jaGVyLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9jb21wb25lbnRzL0FwcEVycm9yQmFubmVyLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC9BcHAuc2NzcyIsIndlYnBhY2s6Ly9pbWctc2xpY2VyLy4vc3JjL2Zyb250L3pJbmRleC5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvX2FuaW1hdGlvbnMuc2NzcyIsIndlYnBhY2s6Ly9pbWctc2xpY2VyLy4vc3JjL2Zyb250L3ZpZXdzL0Fib3V0LnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC92aWV3cy9QcmljaW5nLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC92aWV3cy9TZXR0aW5ncy5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvdmlld3MvRmFxLnNjc3MiLCJ3ZWJwYWNrOi8vaW1nLXNsaWNlci8uL3NyYy9mcm9udC92aWV3cy9UZXJtcy5zY3NzIiwid2VicGFjazovL2ltZy1zbGljZXIvLi9zcmMvZnJvbnQvdmlld3MvUHJpdmFjeS5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi5zbGljZS10cmFuc2Zvcm0tdG9vbGJhciB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogNnB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuIiwiLy8gTGF5ZXJzIHBhbmVsIOKAlCB2aXN1YWwgc2libGluZyBvZiB0aGUgSGlzdG9yeSBkcmF3ZXIgKHNlZSBBcHAuc2Nzc1xuLy8gLmhpc3RvcnktZHJhd2VyKS4gU2FtZSByaWdodC1zaWRlIHNsaWRlLW92ZXIgY2hyb21lICsgZG90dGVkLWJvcmRlciBsaXN0IHJvd3Ncbi8vICsgZ3JlZW4gYWN0aXZlIGFjY2VudCwgd2l0aCBpbnRlcmFjdGl2ZSBwZXItcm93IGNvbnRyb2xzLiBFdmVyeXRoaW5nIGlzIHNjb3BlZFxuLy8gdW5kZXIgdGhlIGAubGF5ZXJzLWRyYXdlcmAgYmxvY2ssIHNvIGNoaWxkIGVsZW1lbnRzIGNhcnJ5IHNob3J0LCB1bnByZWZpeGVkXG4vLyBjbGFzcyBuYW1lcyAoYC5pdGVtYCwgYC5uYW1lYCwg4oCmKSBhbmQgdGhlIGJsb2NrIG93bnMgdGhlIHNjb3BpbmcuXG5AaW1wb3J0ICcuLi92YXJpYWJsZXMnO1xuXG4ubGF5ZXJzLWRyYXdlciB7XG4gIC8vIENhbnZhcyBzaXplIGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW4gYSB0b29sYmFyIHBvcG92ZXI6IGNhbnZhcyBhbmQgbGF5ZXJzIGFyZSBvbmVcbiAgLy8gbWVudGFsIG1vZGVsIOKAlCBhIGRvY3VtZW50IGFuZCB0aGUgdGhpbmdzIGluc2lkZSBpdCDigJQgd2hpbGUgem9vbSBpcyBvbmx5IGhvdyB5b3UgYXJlXG4gIC8vIGxvb2tpbmcgYXQgaXQuIEtlZXBpbmcgYWxsIHRocmVlIHNjb3BlcyBpbiBvbmUgdG9vbGJhciByb3cgaXMgd2hhdCBtYWRlIFwiRml0IG9uXG4gIC8vIHNjcmVlblwiLCBcIkZpdCBjYW52YXMgdG8gbGF5ZXJzXCIgYW5kIFwiRml0IHRvIGNhbnZhc1wiIHJlYWQgYXMgdGhlIHNhbWUgdmVyYiB0aHJlZSB0aW1lcy5cbiAgLmNhbnZhcy1yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA2cHg7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xvci1ib3JkZXItbGlnaHQ7XG5cbiAgICAuY2FudmFzLXJvdy10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIG1hcmdpbi1yaWdodDogNHB4O1xuICAgIH1cblxuICAgIC5jYW52YXMtcm93LWZpZWxkcyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDNweDtcbiAgICAgIH1cblxuICAgICAgaW5wdXQge1xuICAgICAgICB3aWR0aDogNjJweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXcmFwcyB0byBpdHMgb3duIGxpbmUgYmVmb3JlIHRoZSBsYWJlbCBjYW4gYnJlYWsg4oCUIHRoZSBzYW1lIHJ1bGUgdGhlIGxheWVyIGFjdGlvblxuICAgIC8vIGJ1dHRvbnMgZm9sbG93LCBhZnRlciBhIGJyb3dzZXIgbWluaW11bS1mb250LXNpemUgb25jZSBwdXNoZWQgdGhlbSBvdXQgb2YgdGhlaXIgcm93LlxuICAgIC5jYW52YXMtZml0IHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgd2lkdGg6IG1pbigzNjBweCwgOTJ2dyk7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAyJSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxODBtcyBlYXNlO1xuICB6LWluZGV4OiAkei1kcmF3ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgJi5vcGVuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICA+IC5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgJGNvbG9yLWJvcmRlci1saWdodDtcblxuICAgID4gLnRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10aXRsZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZDtcbiAgICB9XG5cbiAgICA+IC5jbG9zZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICB9XG4gIH1cblxuICA+IC5zdWJ0aXRsZSB7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICRjb2xvci1ib3JkZXItbGlnaHQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgIC8vIFdob2xlIFJPV1MgcmVmbG93IGJlZm9yZSBhbnkgbGFiZWwgZG9lcy4gV2hlbiB0aGUgbGFiZWxzIGRvbid0IGZpdCBiZXNpZGUgdGhlXG4gICAgLy8gbGF5ZXIgY291bnQg4oCUIGEgYnJvd3NlciBtaW5pbXVtLWZvbnQtc2l6ZSwgT1MgdGV4dCBzY2FsaW5nLCBvciBhIG5hcnJvdyB3aW5kb3dcbiAgICAvLyBhbGwgY2F1c2UgdGhpcyDigJQgdGhlIGFjdGlvbiBncm91cCBkcm9wcyB0byBpdHMgb3duIGxpbmUgaW50YWN0LCBpbnN0ZWFkIG9mXG4gICAgLy8gYnJlYWtpbmcgXCJGaXQgdG8gY2FudmFzXCIgYWNyb3NzIHR3byBsaW5lcyBhbmQgc3BpbGxpbmcgaXQgcGFzdCBpdHMgb3duIGJvcmRlci5cbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiA2cHggOHB4O1xuXG4gICAgLy8gVGhlIGxheWVyIGNvdW50IHlpZWxkcyBzcGFjZSBmaXJzdC5cbiAgICA+IC5zdWJ0aXRsZS1sZWZ0IHtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAvLyBMYXllci1sZXZlbCBhY3Rpb25zIChGaXQgdG8gY2FudmFzLCArIEFkZCBsYXllcikgc2hhcmUgdGhpcyBlbmQgb2YgdGhlIHJvdy5cbiAgICAvLyBgbm93cmFwYCArIG5vIHNocmlua2luZyBtZWFucyBlYWNoIGJ1dHRvbiBpcyBhbiBpbmRpdmlzaWJsZSB1bml0OiBpdCBrZWVwcyBpdHNcbiAgICAvLyB3aG9sZSBsYWJlbCBhdCB3aGF0ZXZlciBmb250IHNpemUgdGhlIGJyb3dzZXIgZW5kcyB1cCB1c2luZy5cbiAgICA+IC5zdWJ0aXRsZS1yaWdodCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICAgPiAuYnRuLWNvbW1vbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiAubGlzdCB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgcGFkZGluZzogOHB4IDhweCAxMnB4O1xuXG4gICAgPiAuaXRlbSB7XG4gICAgICAvLyBQb3NpdGlvbmVkIHNvIHRoZSBkcm9wLWluZGljYXRvciBwc2V1ZG8tZWxlbWVudHMgY2FuIHNpdCBpbiB0aGUgbWFyZ2luIGdhcC5cbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBib3JkZXI6IDFweCBkb3R0ZWQgJGNvbG9yLWJvcmRlci1saWdodDtcbiAgICAgIG1hcmdpbjogMCAwIDhweCAwO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWNhbnZhcy1jaGVja2VyLWJnO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkICRjb2xvci1ncmVlbi1saW5rO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMXB4O1xuICAgICAgfVxuXG4gICAgICAmLmN1cnJlbnQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItZ3JlZW4tbGluaztcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWdyZWVuLXRpbnQtYmc7XG4gICAgICB9XG5cbiAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgJi5kcmFnZ2luZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0aW9uIGxpbmU6IGEgMXB4IGhhaXJsaW5lIG9uIHRoZSBzaWRlIHRoZSByb3cgd291bGQgbGFuZCwgc28gdGhlIGRyYWcgc2F5c1xuICAgICAgLy8gV0hFUkUgaXQgaXMgZ29pbmcgcmF0aGVyIHRoYW4gb25seSB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyBkcmFnZ2VkLiBEcmF3biBhcyBhXG4gICAgICAvLyBwc2V1ZG8tZWxlbWVudCBvdXRzaWRlIHRoZSByb3cncyBib3JkZXIgYm94IChgbWFyZ2luYCBnYXAgaXMgOHB4KSBzbyBpdCByZWFkcyBhc1xuICAgICAgLy8gYSBnYXAgYmV0d2VlbiByb3dzIHJhdGhlciB0aGFuIGFuIGVkZ2Ugb2Ygb25lLCBhbmQgaW4gdGhlIGxheWVyIGFjY2VudCBzbyBpdCBpc1xuICAgICAgLy8gZGlzdGluY3QgZnJvbSB0aGUgZ3JlZW4gXCJjdXJyZW50IHJvd1wiIGhpZ2hsaWdodCwgd2hpY2ggc3RheXMgdmlzaWJsZSB1bmRlcm5lYXRoLlxuICAgICAgJi5kcm9wLWFib3ZlOjpiZWZvcmUsXG4gICAgICAmLmRyb3AtYmVsb3c6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRjb2xvci1sYXllci1hY2NlbnQ7XG5cbiAgICAgICAgLy8gTnVkZ2UgaW50byB0aGUgbWFyZ2luIGdhcDsgdGhlIDFweCBsaW5lIGl0c2VsZiBtdXN0IG5vdCBzaGlmdCB0aGUgcm93LlxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJi5kcm9wLWFib3ZlOjpiZWZvcmUge1xuICAgICAgICB0b3A6IC01cHg7XG4gICAgICB9XG5cbiAgICAgICYuZHJvcC1iZWxvdzo6YWZ0ZXIge1xuICAgICAgICBib3R0b206IC01cHg7XG4gICAgICB9XG5cbiAgICAgID4gLmV5ZSB7XG4gICAgICAgIGZsZXg6IDAgMCAyNnB4O1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itc3VyZmFjZS1tdXRlZDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcblxuICAgICAgICAmLm9mZiB7XG4gICAgICAgICAgY29sb3I6ICNhYWE7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gLnRodW1iIHtcbiAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgIGhlaWdodDogNDRweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1saWdodDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2UtbXV0ZWQ7XG4gICAgICAgIGZsZXg6IDAgMCA0NHB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBpbWcge1xuICAgICAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgICAgIGhlaWdodDogNDRweDtcbiAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIC50aHVtYi1lbXB0eSxcbiAgICAgICAgLnRodW1iLWJnIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAudGh1bWItZW1wdHkge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgICAgICAgICA0NWRlZyxcbiAgICAgICAgICAgICRjb2xvci1jYW52YXMtY2hlY2tlci1iZyxcbiAgICAgICAgICAgICRjb2xvci1jYW52YXMtY2hlY2tlci1iZyA2cHgsXG4gICAgICAgICAgICAkY29sb3Itd2hpdGUgNnB4LFxuICAgICAgICAgICAgJGNvbG9yLXdoaXRlIDEycHhcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRodW1iLWJnIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1saWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IC5ib2R5IHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBmbGV4OiAxIDEgYXV0bztcblxuICAgICAgICAvLyBNYXRjaGVzIGAubmFtZWAgc28gdGhlIHJvdyBkb2Vzbid0IGp1bXAgd2hlbiBlZGl0aW5nIHN0YXJ0cy5cbiAgICAgICAgPiAubmFtZS1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xvci1sYXllci1hY2NlbnQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gLm5hbWUge1xuICAgICAgICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIH1cblxuICAgICAgICA+IC5jb250cm9scyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGdhcDogNnB4O1xuICAgICAgICAgIG1hcmdpbi10b3A6IDRweDtcblxuICAgICAgICAgID4gLmJsZW5kIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS14cztcbiAgICAgICAgICAgIG1heC13aWR0aDogMTEwcHg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPiAub3BhY2l0eSB7XG4gICAgICAgICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAgICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAuZGVsZXRlIHtcbiAgICAgICAgZmxleDogMCAwIDI2cHg7XG4gICAgICAgIHdpZHRoOiAyNnB4O1xuICAgICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1ib3JkZXItbGlnaHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIFZBUklBQUFCTEVTU1xuLy8gTG90IG9mIHZhcmlhdGlvbnMgaW4gaGVyZSBtYW4uLi4uXG4vLyBMZXQncyBub3QgZ2V0IGxvc3QuXG4vL1xuLy8gdmFyaWFibGVzLnNjc3Ncbi8vXG4kZGVmYXVsdC1mb250LXNpemU6IDE0cHg7XG5cbi8vIExheW91dFxuJGltZy1jYW52YXMtd2lkdGg6IDc3N3B4O1xuJGNhbnZhcy1taW4taGVpZ2h0OiA0MDBweDtcbiRjb250YWluZXItaDItZm9udC1zaXplOiAyMXB4O1xuJGNvbnRyb2wtaGVpZ2h0LW1kOiAzMHB4O1xuXG4vLyBUaGUgdG9vbGJhcidzIG9uZSBzcGFjaW5nIHVuaXQ6IGJldHdlZW4gY29udHJvbHMgb24gYSByb3csIGJldHdlZW4gcm93cywgYW5kIGJldHdlZW4gcm93IDFcbi8vIGFuZCB0aGUgTU9SRSBwYW5lbC4gT25lIHZhbHVlIHNvIHRob3NlIHRocmVlIG5ldmVyIGRyaWZ0IGFwYXJ0IOKAlCB0aGV5IHJlYWQgYXMgb25lIHJoeXRobVxuLy8gb3IgdGhleSByZWFkIGFzIGEgbWlzdGFrZS5cbiR0b29sYmFyLWdhcDogOHB4O1xuXG4vLyBIb3Jpem9udGFsIGJyZWF0aGluZyByb29tIGZvciB0aGUgb25lIHRvb2xiYXIgY29udHJvbCB0aGF0IGlzIG5vdCBidXR0b24tc2hhcGVkOiBTbmFwXG4vLyBNb2RlJ3Mgc3dpdGNoICsgbGFiZWwgcGFpci4gSXRzIG5laWdoYm91cnMgY2FycnkgdGhlaXIgb3duIGJ1dHRvbiBwYWRkaW5nIGFuZCBib3JkZXJzLCBzb1xuLy8gd2l0aG91dCB0aGlzIGl0IHJlYWRzIGFzIGNyb3dkZWQgYWdhaW5zdCB0aGVtLiBXaWRlciB0aGFuICR0b29sYmFyLWdhcCBvbiBwdXJwb3NlIOKAlCB0aGlzIGlzXG4vLyBwYWRkaW5nIElOU0lERSBhIGNvbnRyb2wsIG5vdCBzcGFjaW5nIGJldHdlZW4gdHdvLlxuJHN3aXRjaC1ib3gtcGFkLXg6IDEycHg7XG5cbi8vIFRoZSB6b29tIHJlYWRvdXQncyBmaWVsZC4gRklYRUQsIG5vdCBpbnRyaW5zaWM6IHRoZSB2YWx1ZSBjaGFuZ2VzIG9uIGV2ZXJ5IHNjcm9sbCB0aWNrIGFuZFxuLy8gYW4gYXV0by13aWR0aCBpbnB1dCByZXNpemVkIHVuZGVyIHRoZSBwb2ludGVyLCBzaG92aW5nIHRoZSDiiJIvKyBidXR0b25zIHNpZGV3YXlzIHdoaWxlIHlvdVxuLy8gd2VyZSBhaW1pbmcgYXQgdGhlbS5cbi8vXG4vLyBNRUFTVVJFRCBhZ2FpbnN0IHRoZSBsb25nZXN0IHN0cmluZyB0aGUgZm9ybWF0dGVyIGNhbiBwcmludCwgXCI3OTkuOTklXCI6XG4vLyAgIGNocm9taXVtIDUwcHggICBmaXJlZm94IDUwcHggICB3ZWJraXQgNTJweFxuLy8gU28gNTIsIG5vdCB0aGUgcm91bmQgNTAg4oCUIFdlYktpdCBsYXlzIHRoYXQgdGV4dCBvdXQgMnB4IHdpZGVyIGFuZCBjbGlwcGVkIHRoZSB0cmFpbGluZyBcIiVcIi5cbi8vIFRoZSBmcmFtZSBpcyBhbiBgb3V0bGluZWAgcmF0aGVyIHRoYW4gYSBib3JkZXIgZm9yIHRoZSBzYW1lIHJlYXNvbjogYSAxcHggYm9yZGVyIGVhY2ggc2lkZVxuLy8gd291bGQgdGFrZSB0d28gb2YgdGhlc2UgcGl4ZWxzIGJhY2suXG4kem9vbS1pbnB1dC13aWR0aDogNTJweDtcblxuLy8gSG93IGZhciB0aGUgbGF5ZXItb3B0aW9ucyBpc2xhbmQgbGlmdHMgb25jZSB0aGUgcGFnZSBpcyBzY3JvbGxlZCB0byB0aGUgYm90dG9tLCBzbyB0aGVcbi8vIGZvb3RlciBsaW5rcyB1bmRlcm5lYXRoIGl0IGJlY29tZSBjbGlja2FibGUuIEVub3VnaCB0byBjbGVhciB0aGUgZm9vdGVyJ3MgdHdvIHJvd3MuXG4kbGF5ZXItaXNsYW5kLXJhaXNlOiAxMDBweDtcblxuLy8gQ29sb3JzXG4kY29sb3Itd2hpdGU6ICNmZmY7XG4kY29sb3Itc3VyZmFjZTogJGNvbG9yLXdoaXRlO1xuJGNvbG9yLWJsYWNrOiAjMDAwO1xuJGNvbG9yLXRleHQtdWk6ICMzMzM7XG4kY29sb3ItdGV4dC1zdHJvbmc6ICMxMTE7XG4kY29sb3ItYm9yZGVyLWRlZmF1bHQ6ICNjY2M7XG4kY29sb3ItZ3JlZW4tbGluazogIzIzOTM3MztcbiRjb2xvci1ncmVlbi1saW5rLWhvdmVyOiAjMWY4NjY4O1xuJGNvbG9yLWdyZWVuLXRpbnQtYmc6ICNmMGZiZjc7ICAgICAvLyBhY3RpdmUtcm93IC8gZHJvcC10YXJnZXQgdGludCBvZiAkY29sb3ItZ3JlZW4tbGlua1xuJGNvbG9yLWNhbnZhcy1jaGVja2VyLWJnOiAjZjdmN2Y3O1xuJGNvbG9yLWJvcmRlci1saWdodDogI2VhZWFlYTsgICAgICAvLyBoYWlybGluZSBkaXZpZGVycyAvIHBhbmVsIGJvcmRlcnMgKGRyYXdlcnMsIGNoaXBzKVxuJGNvbG9yLWJvcmRlci1taWQ6ICNjZmNmY2Y7ICAgICAgICAvLyBzbGlnaHRseSBzdHJvbmdlciBjb250cm9sIGJvcmRlcnMgKHNlZ21lbnRlZCBjb250cm9sLCBkcm9wem9uZSlcbiRjb2xvci1zdXJmYWNlLW11dGVkOiAjZmFmYWZhOyAgICAgLy8gaW5zZXQgY29udHJvbCBzdXJmYWNlIChleWUvdGh1bWIvZGVsZXRlIGJhY2tncm91bmRzKVxuJGNvbG9yLXRleHQtbXV0ZWQ6ICM2NjY7ICAgICAgICAgICAvLyBzZWNvbmRhcnkvc3VidGl0bGUgdGV4dFxuLy8gTGF5ZXIgY2hyb21lIGFjY2VudC4gRGVsaWJlcmF0ZWx5IE5PVCB0aGUgZ3JlZW4gdXNlZCBieSB0aGUgZG9jdW1lbnQgYm91bmRhcnkgYW5kIHRoZVxuLy8gTGF5ZXJzIHBhbmVsJ3MgYWN0aXZlIHJvdywgYW5kIG5ldmVyIGRhc2hlZCDigJQgc2xpY2VzIGFscmVhZHkgb3duIG1hcmNoaW5nIGFudHMsIHNvXG4vLyBsYXllciBzZWxlY3Rpb24gaGFzIHRvIHJlYWQgYXMgYSBkaWZmZXJlbnQga2luZCBvZiB0aGluZyBhdCBhIGdsYW5jZS5cbiRjb2xvci1sYXllci1hY2NlbnQ6ICM1MDRmZjY7XG5cbi8vIFNsaWNlIFNFTEVDVElPTiBhY2NlbnQg4oCUIHRoZSBmb3VydGggdmlzdWFsIHZvY2FidWxhcnksIGFuZCBkZWxpYmVyYXRlbHkgbm9uZSBvZiB0aGUgb3RoZXJcbi8vIHRocmVlLiBHcmVlbiBpcyB0aGUgZG9jdW1lbnQgYm91bmRhcnkgKGFuZCBwYW5lbCBhY3RpdmUgcm93cyksIHB1cnBsZSBpcyBsYXllciBjaHJvbWUsIGFuZFxuLy8gdGhlIGJsYWNrL3doaXRlIG1hcmNoaW5nIGFudHMgc2F5IFwidGhpcyBpcyBhIHNsaWNlXCIgd2hldGhlciBvciBub3QgaXQgaXMgc2VsZWN0ZWQuIFRpY2tlZFxuLy8gc2xpY2VzIG5lZWRlZCBhIHNpZ25hbCB0aGF0IGNvbGxpZGVzIHdpdGggbm9uZSBvZiB0aGVtOiBhbiBhbWJlciByaW5nIHJlYWRzIGNsZWFybHkgYWdhaW5zdFxuLy8gdGhlIGdyZWVuIGJvdW5kYXJ5LCB0aGUgcHVycGxlIGxheWVyIGZyYW1lLCBhbmQgbW9zdCBwaG90b2dyYXBoaWMgY29udGVudC5cbi8vXG4vLyBEcmF3biBhdCAxcHgsIE5PVCB0aGUgbGF5ZXIgZnJhbWUncyAycHggKHVzZXIsIDIwMjYtMDktMDYpOiBldmVyeXRoaW5nIGFyb3VuZCBhIHNsaWNlIOKAlCB0aGVcbi8vIG1hcmNoaW5nIGFudHMsIHRoaXMgcmluZyDigJQgaXMgb25lIGhhaXJsaW5lIHdlaWdodCwgc28gY29sb3VyIGlzIHdoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtXG4vLyByYXRoZXIgdGhhbiB0aGlja25lc3MuIExheWVyIGNocm9tZSBpcyBhIHNlcGFyYXRlIG9iamVjdCBhbmQga2VlcHMgaXRzIGhlYXZpZXIgMnB4IGZyYW1lLlxuLy8gVW5saWtlIHRoZSBjYW52YXMgYm91bmRhcnkgdGhpcyBuZWVkcyBubyAxL2sgY291bnRlci1zY2FsaW5nOiBzbGljZSBwcmV2aWV3cyBhcmUgcG9zaXRpb25lZFxuLy8gaW4gU0NSRUVOIHBpeGVscyAodGhlaXIgb25seSB0cmFuc2Zvcm1lZCBhbmNlc3RvciBpcyBhbiBpZGVudGl0eSBtYXRyaXgpLCBzbyAxcHggaXMgYWxyZWFkeVxuLy8gMSBzY3JlZW4gcHggYXQgYW55IHpvb20uIExheWVyIGNocm9tZSBkaWZmZXJzIOKAlCBpdCByZW5kZXJzIGluc2lkZSB0aGUgQ1NTLXNjYWxlZFxuLy8gYC5jYW52YXMtd29ybGRgLlxuLy8gV0NBRyAyLjIgU0MgMi41LjggXCJUYXJnZXQgU2l6ZSAoTWluaW11bSlcIiwgTGV2ZWwgQUEuIFN0YXRlZCBvbmNlIHNvIGV2ZXJ5IGludGVyYWN0aXZlXG4vLyB0YXJnZXQgY2FuIHJlZmVyZW5jZSB0aGUgc2FtZSBudW1iZXIsIGFuZCBzbyByYWlzaW5nIHRoZSBiYXIgdG8gdGhlIEFBQSA0NHB4IChTQyAyLjUuNSkgaXNcbi8vIG9uZSBlZGl0IHJhdGhlciB0aGFuIGEgaHVudC4gTWVhc3VyZWQsIG5vdCBhc3N1bWVkOiB0aGUgcGFuZWwgY2hlY2tib3hlcyByZW5kZXJlZCAxM3gxMyBhbmRcbi8vIHRoZSByb3cgZGVsZXRlIDIyeDMwIGJlZm9yZSB0aGlzIGV4aXN0ZWQuXG4kdGFyZ2V0LXNpemUtbWluOiAyNHB4O1xuJGNvbG9yLXNsaWNlLXNlbGVjdDogI2Q5NzcwNjtcbiRjb2xvci1zbGljZS1zZWxlY3Qtc29mdDogcmdiYSgyMTcsIDExOSwgNiwgMC4xOCk7XG5cbi8vIFdoaXRlIHNoYXJlIG9mIGVhY2ggbWFyY2hpbmctYW50IGRhc2ggd2hpbGUgYSBzbGljZSBpcyBob3ZlcmVkLiBJZGxlIGlzIGFuIGV2ZW4gNTAvNTBcbi8vIHdoaXRlL2JsYWNrIHNwbGl0ICg0cHgvNHB4IG9mIHRoZSA4cHggdGlsZSk7IHRoaXMgd2lkZW5zIHdoaXRlIHRvIDZweC8ycHguXG4vL1xuLy8gVGhlIHZhbHVlIGlzIFFVQU5USVpFRCwgc28gZG8gbm90IHRyZWF0IGl0IGFzIGEgZnJlZSBkaWFsLiBBIDFweCBsaW5lIG9uIGFuIDhweCB0aWxlIGNhblxuLy8gb25seSByZW5kZXIgd2hvbGUtcGl4ZWwgc3BsaXRzLCBzbyA3MCUsIDc1JSBhbmQgODAlIGFsbCByYXN0ZXJpemUgdG8gdGhlIHNhbWUgNi8yIGFuZFxuLy8gbWVhc3VyZSBpZGVudGljYWxseS4gVGhlIHJlYWNoYWJsZSBzdGVwcyBhcmUgNTAlIChpZGxlKSwgNjIuNSUgKDUvMykgYW5kIDc1JSAoNi8yKS5cbi8vIE1lYXN1cmVkIGxpZnQgaW4gcmVuZGVyZWQgcGl4ZWxzLCBhdmVyYWdlZCBvdmVyIHNpeCBhbmltYXRpb24gZnJhbWVzOlxuLy8gICA1LzMgLT4gKzE3LjclIG9uIGEgZGFyayBwaG90bywgKzEyLjYlIG9uIGEgd2hpdGUgb25lXG4vLyAgIDYvMiAtPiArMzUuNSUgb24gYSBkYXJrIHBob3RvLCArMjUuMSUgb24gYSB3aGl0ZSBvbmVcbiRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZTogNzUlO1xuXG4vLyBNYXJjaGluZy1hbnRzIGRhc2ggdGlsZSBhbmQgc3BlZWQuIEhvaXN0ZWQgb3V0IG9mIGBBcHAuc2Nzc2Agc28gdGhlIGhvdmVyIG92ZXJsYXkgY2FuXG4vLyBERVJJVkUgZnJvbSB0aGVtIOKAlCB0aGUgb3ZlcmxheSBtdXN0IHNoYXJlIHRoZSB0aWxlIGV4YWN0bHkgb3IgdGhlIHR3byBsYXllcnMgY3Jvc3MtZmFkZVxuLy8gb3V0IG9mIHJlZ2lzdGVyLCBhbmQgaXQgaGFsdmVzIHRoZSBkdXJhdGlvbiByYXRoZXIgdGhhbiByZXN0YXRpbmcgYSBtYWdpYyBudW1iZXIuXG4kc2xpY2UtYW50cy10aWxlOiA4cHg7XG4kc2xpY2UtYW50cy1kdXJhdGlvbjogMC42cztcblxuLy8gSG92ZXIgcnVucyBhdCBIQUxGIFNQRUVELCBzbyB0d2ljZSB0aGUgZHVyYXRpb24uXG4kc2xpY2UtYW50cy1ob3Zlci1kdXJhdGlvbjogJHNsaWNlLWFudHMtZHVyYXRpb24gKiAyO1xuXG4vLyBDcm9zcy1mYWRlIGJldHdlZW4gdGhlIGlkbGUgYW5kIGhvdmVyIGFudHMuIFNob3J0IGVub3VnaCB0byBmZWVsIGxpa2UgYSByZXNwb25zZSB0byB0aGVcbi8vIHBvaW50ZXIgcmF0aGVyIHRoYW4gYW4gZWZmZWN0IHBsYXlpbmcgYXQgeW91LlxuJHNsaWNlLWhvdmVyLWZhZGU6IDE2MG1zO1xuJGNvbG9yLWxheWVyLWFjY2VudC1zb2Z0OiByZ2JhKDgwLCA3OSwgMjQ2LCAwLjEyKTtcbiRjb2xvci1kYW5nZXItYm9yZGVyOiAjZDMyZjJmO1xuJGNvbG9yLWRhbmdlci1iZzogI2ZmZWJlZTtcbiRjb2xvci1kYW5nZXItdGV4dDogI2M2MjgyODtcblxuLy8gTWVvdyBNaXggYmFkZ2VzXG4kYmFkZ2UtcHJvLWJnOiAjZmZkNTRmO1xuJGJhZGdlLXByby10ZXh0OiAjNWE0NTAwO1xuJGJhZGdlLWRldi1iZzogIzdlNTdjMjtcbiRiYWRnZS1kZXYtdGV4dDogJGNvbG9yLXdoaXRlO1xuJGJhZGdlLWZvbnQtc2l6ZTogMTBweDtcbiRiYWRnZS1wYWRkaW5nLXk6IDFweDtcbiRiYWRnZS1wYWRkaW5nLXg6IDZweDtcbiRiYWRnZS1tYXJnaW4tbGVmdDogOHB4O1xuJGJhZGdlLXJhZGl1czogM3B4O1xuXG4vLyBSZXNpemUgaGFuZGxlIChtYXRjaCBjb25zdGFudHMgKyBBcHAuc2NzcylcbiRyZXNpemUtaGFuZGxlLXB4OiA4cHg7XG5cbi8vIExheWVyIHNlbGVjdGlvbiBjaHJvbWUgKG1hdGNoIGNvbnN0YW50cy5MQVlFUl9IQU5ETEVfUFggLyBMQVlFUl9IT1ZFUl9GUkFNRV9QWCkuXG4vLyBTQ1JFRU4gcGl4ZWxzIOKAlCB0aGUgY2hyb21lIGlzIGNvdW50ZXItc2NhbGVkIGJ5IDEvayBzbyB6b29tIG5ldmVyIGNoYW5nZXMgdGhlbS5cbiRsYXllci1oYW5kbGUtcHg6IDEwcHg7XG4kbGF5ZXItaG92ZXItZnJhbWUtcHg6IDFweDtcblxuLy8gU2xpY2Ugb3V0bGluZSBtYXJjaGluZy1hbnRzIHRpbGUgKG1hdGNoIGNvbnN0YW50cy5TTElDRV9PVVRMSU5FX1RJTEVfUFgpLlxuJHNsaWNlLW91dGxpbmUtdGlsZS1weDogNDZweDtcblxuLy8gVHlwb2dyYXBoeVxuJGZvbnQtc2l6ZS14czogMTFweDtcbiRmb250LXNpemUtc206IDEycHg7XG4kZm9udC1zaXplLW1kOiAxM3B4O1xuJGZvbnQtc2l6ZS1sZzogMThweDtcbiRmb250LXNpemUtdGl0bGU6IDE2cHg7ICAgICAgICAgICAgLy8gZHJhd2VyIC8gcGFuZWwgc2VjdGlvbiB0aXRsZXNcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7ICAgICAgICAgICAgLy8gZ2VuZXJpYyBib2xkIGxhYmVscyAoPT0gQ1NTIGBib2xkYClcbiRmb250LXdlaWdodC1jdGE6IDcwMDtcbiRmb250LXdlaWdodC1oZWF2eTogOTAwO1xuXG4vLyBBdXRoIG1vZGFsXG4kYXV0aC1tb2RhbC1iZzogJGNvbG9yLXN1cmZhY2U7XG4kYXV0aC1tb2RhbC1ib3JkZXItcmFkaXVzOiAzcHg7XG4kYXV0aC1tb2RhbC1sZWZ0LWJnOiAjMTExO1xuJGF1dGgtbW9kYWwtc2NhbGUtY2xvc2VkOiAwLjYwO1xuJGF1dGgtbW9kYWwtei1pbmRleDogMTAwMDAwO1xuXG4vLyBIZWxwIHBvcG92ZXJcbiRoZWxwLXBvcG92ZXItbWF4LXdpZHRoOiA2MjBweDtcbiRoZWxwLXBvcG92ZXItYmc6ICRjb2xvci1zdXJmYWNlO1xuJGhlbHAtcG9wb3Zlci1ib3JkZXItY29sb3I6ICRjb2xvci1ib3JkZXItZGVmYXVsdDtcbiRoZWxwLXBvcG92ZXItdGl0bGUtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1jdGE7XG4kaGVscC1wb3BvdmVyLXRpdGxlLWZvbnQtc2l6ZTogMTJweDtcbiRoZWxwLXBvcG92ZXIta2JkLWZvbnQtc2l6ZTogMTFweDtcblxuLy8gTW90aW9uXG4kdGV0cmlzLWFuaW0tZHVyYXRpb246IDAuM3M7XG5cbi8vIE9wYWNpdHlcbiRzZWxlY3QtYXJlYXMtb3ZlcmxheS1oYXMtc2xpY2Utb3BhY2l0eTogMC41O1xuJGRpc2FibGVkLW9wYWNpdHk6IDAuNTtcblxuLy8gWi1pbmRleCAoa2VlcCB0aGVzZSBzb3J0ZWQgYXNjZW5kaW5nKVxuJHotc2xpY2Utb3V0bGluZS1pbmFjdGl2ZTogMDtcbiR6LXNsaWNlLWJnLWluYWN0aXZlOiAyO1xuXG4vLyBQcm8gTGF5ZXJzOiBsaXZlIGNvbXBvc2l0ZSBjYW52YXMg4oaSIGRvY3VtZW50IGJvdW5kYXJ5IOKGkiBtb3ZlLWNhcHR1cmUgc3VyZmFjZSDihpJcbi8vIHNlbGVjdGlvbiBjaHJvbWUsIGFsbCB3aXRoaW4gdGhlIC5jYW52YXMtd29ybGQgc3RhY2tpbmcgY29udGV4dCAoYmVsb3cgdGhlIGFjdGl2ZVxuLy8gc2xpY2UgY2hyb21lKS4gVGhlIGNocm9tZSBzaXRzIEFCT1ZFIHRoZSBjYXB0dXJlIHN1cmZhY2Ugc28gaXRzIHJlc2l6ZSBoYW5kbGVzIHdpblxuLy8gdGhlIHBvaW50ZXIsIHdoaWxlIGEgZHJhZyBhbnl3aGVyZSBlbHNlIGluIHRoZSBsYXllciBzdGlsbCBmYWxscyB0aHJvdWdoIHRvIGEgbW92ZS5cblxuJHotbGF5ZXItbGl2ZS1jYW52YXM6IDQwO1xuJHotbGF5ZXItY2FudmFzLWJvdW5kYXJ5OiA0NjtcbiR6LWxheWVyLW1vdmUtY2FwdHVyZTogNTA7XG4kei1sYXllci1jaHJvbWU6IDUyO1xuJHotc2xpY2Utb3V0bGluZS1hY3RpdmU6IDEwMDtcbiR6LXNsaWNlLWJnLWFjdGl2ZTogMTAyO1xuXG4vLyBUaGUgbXVsdGktc2VsZWN0aW9uIHdhc2ggc2l0cyBBQk9WRSB0aGUgYWN0aXZlIHNsaWNlJ3MgY3JvcCBwcmV2aWV3LlxuLy9cbi8vIOKaoO+4jyBJdCB1c2VkIHRvIHJldXNlIGAkei1zbGljZS1vdXRsaW5lLWFjdGl2ZWAgKDEwMCksIHdoaWNoIGlzIEJFTE9XIGAkei1zbGljZS1iZy1hY3RpdmVgXG4vLyAoMTAyKSDigJQgc28gb24gdGhlIEFDVElWRSBzbGljZSB0aGUgY3JvcCBwYWludGVkIHN0cmFpZ2h0IG92ZXIgdGhlIHdhc2ggYW5kIHRoYXQgb25lIHNsaWNlXG4vLyBzaG93ZWQgbm8gYW1iZXIgZmlsbCB3aGlsZSBpdHMgbmVpZ2hib3VycyBkaWQuIFJlcG9ydGVkIGFzIFwidGhlIGxhc3Qgc2xpY2UgSSBzZWxlY3QgZG9lc24ndFxuLy8gY29udGFpbiB0aGUgb3JhbmdlIGJhY2tncm91bmRcIiwgYmVjYXVzZSB0aGUgbGFzdCBvbmUgc2VsZWN0ZWQgaXMgdGhlIGFjdGl2ZSBvbmUuXG4kei1zbGljZS1zZWxlY3Rpb24td2FzaDogMTAzO1xuJHotc2xpY2UtZGVsZXRlLWJ1dHRvbjogMTA0O1xuJHotc2xpY2UtcmVzaXplLWhhbmRsZTogMTA1O1xuXG4vLyBJbnRlcmFjdGl2ZSBsYXllciAoaGFuZGxlcy9kZWxldGUvZHJhZyBoaXQpIGFib3ZlIGNyb3AgcHJldmlldyBpbiB6b29tL3BhbiBtb2RlLlxuJHotc2xpY2UtaW50ZXJhY3RpdmUtbGF5ZXI6IDExMDtcbiR6LWNhbnZhcy13b3JsZDogMjAwO1xuJHotY2FudmFzLW92ZXJsYXk6IDUwMDtcbiR6LXRvdWNoLWd1aWRlcy1vdmVybGF5OiA5OTk7XG5cbi8vIEZsb2F0aW5nIGxheWVyLW9wdGlvbnMgaXNsYW5kOiBhYm92ZSB0aGUgY2FudmFzICsgZHJhd2VycywgYmVsb3cgcG9wb3ZlcnMgYW5kIG1vZGFsc1xuLy8gc28gYW4gb3BlbiBIZWxwL2NhbnZhcy1zaXplIHBvcG92ZXIgaXMgbmV2ZXIgY292ZXJlZCBieSBpdC5cbiR6LWxheWVyLW9wdGlvbnMtaXNsYW5kOiA5OTA7XG4kei1oZWxwLXBvcG92ZXI6IDEwMDA7XG5cbi8vIENvbnRleHQgbWVudSBzaXRzIGFib3ZlIGV2ZXJ5dGhpbmcgaXQgY2FuIGJlIG9wZW5lZCBvdmVyLCBpbmNsdWRpbmcgdGhlIG9wdGlvbnMgaXNsYW5kLlxuJHotY2FudmFzLWNvbnRleHQtbWVudTogMTAxMDtcbiR6LXpvb20tcGFuLWhpdC1zdXJmYWNlOiA5OTk2O1xuXG4vKipcbiAqIFRoZSBmb3VyIHJpZ2h0LXNpZGUgc2xpZGUtb3ZlcnMgKEhpc3RvcnksIExheWVycywgQ2FudmFzLCBTbGljZXMpLlxuICpcbiAqIE5hbWVkIGJlY2F1c2UgaXQgd2FzIGEgbWFnaWMgYDk5OTlgIHJlcGVhdGVkIGluIGZvdXIgZmlsZXMgd2hpbGUgdGhlIGZsb2F0aW5nIGF1dGggYnV0dG9uXG4gKiBuZXh0IHRvIGl0IHdhcyBhIE5BTUVEIDk5OTk5IOKAlCBzbyB0aGUgYnV0dG9uIHBhaW50ZWQgb3ZlciBldmVyeSBkcmF3ZXIsIGNsaXBwaW5nIHRoZVxuICogSGlzdG9yeSBkcmF3ZXIncyBmb290ZXIuIEEgbnVtYmVyIHRoYXQgYXBwZWFycyBmb3VyIHRpbWVzIGxvc2VzIGFyZ3VtZW50cyB3aXRoIGEgbnVtYmVyXG4gKiB0aGF0IGFwcGVhcnMgb25jZS5cbiAqXG4gKiBPcmRlciB0aGF0IG1hdHRlcnMgaGVyZTogIGNhbnZhcyBjaHJvbWUgIDwgIGF1dGggbGF1bmNoZXIgIDwgIGRyYXdlcnMgIDwgIGF1dGggbW9kYWwuXG4gKiBUaGUgbGF1bmNoZXIgaXMgYSBmbG9hdGluZyBjb252ZW5pZW5jZSBhbmQgbXVzdCB5aWVsZCB0byBhIHBhbmVsIHRoZSB1c2VyIGRlbGliZXJhdGVseVxuICogb3BlbmVkOyB0aGUgbW9kYWwgaXMgbW9kYWwgYW5kIGNvdmVycyBldmVyeXRoaW5nLlxuICovXG4kei1kcmF3ZXI6IDk5OTk7XG5cbi8qKlxuICogRnVsbC1zY3JlZW4gY2FudmFzLCBhbmQgdGhlIHRvb2xiYXIgZmxvYXRpbmcgb3ZlciBpdC5cbiAqXG4gKiBCb3RoIHNpdCBBQk9WRSB0aGUgYXV0aCBsYXVuY2hlciAoc28gZnVsbCBzY3JlZW4gcmVhbGx5IGlzIGZ1bGwpIGFuZCBCRUxPVyB0aGUgZHJhd2Vycywgc29cbiAqIEhpc3RvcnkgLyBMYXllcnMgLyBDYW52YXMgLyBTbGljZXMgc3RpbGwgb3BlbiBvdmVyIHRoZSBjYW52YXMgaW4gZnVsbCBzY3JlZW4g4oCUIHdoaWNoIGlzIHRoZVxuICogcG9pbnQgb2YgZG9pbmcgdGhpcyBpbiBDU1MgcmF0aGVyIHRoYW4gd2l0aCB0aGUgRnVsbHNjcmVlbiBBUEkuIEEgbmF0aXZlIGZ1bGxzY3JlZW4gZWxlbWVudFxuICogd291bGQgaGlkZSBldmVyeSBvbmUgb2YgdGhvc2UsIGJlY2F1c2UgdGhleSBhcmUgYHBvc2l0aW9uOiBmaXhlZGAgc2libGluZ3MsIG5vdCBkZXNjZW5kYW50cy5cbiAqL1xuJHotZnVsbHNjcmVlbi1jYW52YXM6IDk1MDA7XG4kei1mdWxsc2NyZWVuLXRvb2xiYXI6IDk2MDA7XG5cbi8vIEJlbG93IHRoZSBkcmF3ZXJzIG9uIHB1cnBvc2Ug4oCUIHNlZSAkei1kcmF3ZXIuXG4kei1hdXRoLWxhdW5jaGVyOiA5MDAwO1xuXG4vLyBBYm92ZSBldmVyeXRoaW5nOiBhIHRvb2x0aXAgaXMgcG9ydGFsbGVkIHRvIDxib2R5PiBwcmVjaXNlbHkgc28gbm8gYW5jZXN0b3IgY2FuIGNsaXAgb3Jcbi8vIG91dC1zdGFjayBpdCwgYW5kIGEgei1pbmRleCBiZWxvdyB0aGUgZnVsbHNjcmVlbiBsYXllcnMgd291bGQgaGFuZCB0aGF0IGJhY2suXG4kei10b29sdGlwOiA5NzAwO1xuIiwiQHVzZSAnLi4vdmFyaWFibGVzJyBhcyAqO1xuXG4vLyBSaWdodC1zaWRlIHNsaWRlLW92ZXIsIGRlbGliZXJhdGVseSBtYXRjaGluZyBgLmxheWVycy1kcmF3ZXJgIGFuZCBgLmhpc3RvcnktZHJhd2VyYCBzbyB0aGVcbi8vIHRocmVlIHBhbmVscyByZWFkIGFzIG9uZSBmYW1pbHkgcmF0aGVyIHRoYW4gdGhyZWUgd2lkZ2V0cy5cbi5jYW52YXMtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDEwMHZoO1xuICB3aWR0aDogbWluKDM2MHB4LCA5MnZ3KTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1saWdodDtcbiAgYm94LXNoYWRvdzogLTJweCAwIDEycHggcmdiKDAgMCAwIC8gMTUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTgwbXMgZWFzZTtcbiAgei1pbmRleDogJHotZHJhd2VyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gIGdhcDogMTJweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcblxuICAmLm9wZW4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgfVxuXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxuXG4gIC5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAudGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtY3RhO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10aXRsZTtcbiAgfVxuXG4gIC5jbG9zZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZztcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBwYWRkaW5nOiAwIDRweDtcbiAgfVxuXG4gIC5jYW52YXMtc2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLmNhbnZhcy1zZWN0aW9uLXRpdGxlIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xuICAgIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gIH1cblxuICAuY2FudmFzLWZpZWxkcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuXG4gICAgbGFiZWwge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuXG4gICAgaW5wdXQge1xuICAgICAgd2lkdGg6IDcycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRyYW5zZm9ybSB0b29sYmFyIHdhcyBidWlsdCBmb3IgYSB3aWRlIHRvb2xiYXIgcm93OyBpbiBhIDM2MHB4IHBhbmVsIGl0IGhhcyB0byB3cmFwLlxuICAuc2xpY2UtdHJhbnNmb3JtLXRvb2xiYXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogNnB4O1xuICB9XG59XG4iLCJAdXNlICcuLi92YXJpYWJsZXMnIGFzICo7XG5cbi8vIFJpZ2h0LXNpZGUgc2xpZGUtb3ZlciwgZGVsaWJlcmF0ZWx5IG1hdGNoaW5nIGAuY2FudmFzLWRyYXdlcmAsIGAubGF5ZXJzLWRyYXdlcmAgYW5kXG4vLyBgLmhpc3RvcnktZHJhd2VyYCBzbyB0aGUgZm91ciBwYW5lbHMgcmVhZCBhcyBvbmUgZmFtaWx5IHJhdGhlciB0aGFuIGZvdXIgd2lkZ2V0cy5cbi5zbGljZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMTAwdmg7XG4gIHdpZHRoOiBtaW4oMzYwcHgsIDkydncpO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itc3VyZmFjZTtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICBib3gtc2hhZG93OiAtMnB4IDAgMTJweCByZ2IoMCAwIDAgLyAxNSUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxODBtcyBlYXNlO1xuICB6LWluZGV4OiAkei1kcmF3ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgZ2FwOiAxMnB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gICYub3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLmhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC50aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1jdGE7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRpdGxlO1xuICB9XG5cbiAgLmNsb3NlIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxnO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIHBhZGRpbmc6IDAgNHB4O1xuICB9XG5cbiAgLy8gQ291bnQgb24gdGhlIGxlZnQsIENsZWFyIEFsbCBvbiB0aGUgcmlnaHQg4oCUIHRoZSBzYW1lIHNwbGl0IEhpc3RvcnlEcmF3ZXIgdXNlcyBmb3IgaXRzXG4gIC8vIFwiTiBhY3Rpb25zXCIgLyBVbmRvLVJlZG8gYmFyLCBzbyB0aGUgdHdvIHBhbmVscyBzY2FuIGlkZW50aWNhbGx5LlxuICAuc2xpY2UtZHJhd2VyLXN1YnRpdGxlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICB9XG5cbiAgLnNsaWNlLWNvdW50IHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgY29sb3I6ICRjb2xvci10ZXh0LW11dGVkO1xuXG4gICAgLy8gVGhlIGJhZGdlIGlzIHdoZXJlIFRJRVIgc2hvd3MgdXAgaW4gdGhpcyBwYW5lbDogc2xpY2VzIGFyZSBub3QgYSBjYXBhYmlsaXR5LCB0aGV5IGFyZVxuICAgIC8vIGEgbnVtZXJpYyBsaW1pdCwgc28gaGl0dGluZyB0aGUgY2VpbGluZyBpcyB0aGUgb25seSB0aWVyIHNpZ25hbCB0aGVyZSBpcyBoZXJlLlxuICAgICYuYXQtbGltaXQge1xuICAgICAgY29sb3I6ICRjb2xvci1kYW5nZXItdGV4dDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZDtcbiAgICB9XG4gIH1cblxuICAuc2xpY2UtYWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuICB9XG5cbiAgLy8gVGlja3MgKyBidWxrIGRlbGV0ZS4gU2l0cyBiZXR3ZWVuIHRoZSBzdWJ0aXRsZSBhbmQgdGhlIGxpc3Qgc28gdGhlIHNjb3BlIHJlYWRzXG4gIC8vIHRvcC1kb3duOiB0aGUgd2hvbGUgc2V0LCB0aGVuIHRoZSBzZWxlY3Rpb24gd2l0aGluIGl0LCB0aGVuIHRoZSByb3dzLlxuICAuc2xpY2UtYnVsa2JhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDhweDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgY29sb3I6ICRjb2xvci10ZXh0LW11dGVkO1xuICB9XG5cbiAgLnNsaWNlLXNlbGVjdGFsbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuc2xpY2UtZGVsZXRlLXNlbGVjdGVkOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvci1kYW5nZXItYm9yZGVyO1xuICAgIGNvbG9yOiAkY29sb3ItZGFuZ2VyLXRleHQ7XG4gIH1cblxuICAvLyBUaGUgbGFiZWwgaXMgdGhlIHRhcmdldCwgbm90IHRoZSBib3ggaW5zaWRlIGl0LiBBIG5hdGl2ZSBjaGVja2JveCByZW5kZXJzIH4xM3gxMywgd2hpY2hcbiAgLy8gTUVBU1VSRUQgMTN4MTMgaGVyZSDigJQgd2VsbCB1bmRlciBXQ0FHIDIuMiBTQyAyLjUuOCBcIlRhcmdldCBTaXplIChNaW5pbXVtKVwiLCBMZXZlbCBBQVxuICAvLyAoMjR4MjQgQ1NTIHB4KS4gUGFkZGluZyB0aGUgbGFiZWwgdG8gYSAyNHB4IG1pbmltdW0gbWFrZXMgdGhlIHdob2xlIHN0cmlwIGNsaWNrYWJsZVxuICAvLyB3aXRob3V0IGNoYW5naW5nIGhvdyB0aGUgY29udHJvbCBsb29rcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHRoZSBjcml0ZXJpb24gYXNrcyBmb3I6IHRoZVxuICAvLyBUQVJHRVQgaGFzIHRvIGJlIGJpZyBlbm91Z2gsIG5vdCB0aGUgZ2x5cGguXG4gIC5zbGljZS1jaGVjayxcbiAgLnNsaWNlLXNlbGVjdGFsbCB7XG4gICAgbWluLXdpZHRoOiAkdGFyZ2V0LXNpemUtbWluO1xuICAgIG1pbi1oZWlnaHQ6ICR0YXJnZXQtc2l6ZS1taW47XG4gIH1cblxuICAuc2xpY2UtY2hlY2sge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLnNsaWNlLWVtcHR5IHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgY29sb3I6ICRjb2xvci10ZXh0LW11dGVkO1xuICAgIHBhZGRpbmc6IDhweCAycHg7XG4gIH1cblxuICAuc2xpY2UtbGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogNnB4O1xuICB9XG5cbiAgLnNsaWNlLXJvdyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmc6IDZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1zdXJmYWNlLW11dGVkO1xuICAgIH1cblxuICAgICYuaXMtY3VycmVudCB7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1ncmVlbi1saW5rO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWdyZWVuLXRpbnQtYmc7XG4gICAgfVxuICB9XG5cbiAgLnNsaWNlLWluZGV4IHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBtaW4td2lkdGg6IDIycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG4gIH1cblxuICAuc2xpY2UtdGh1bWIge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogMzZweDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itc3VyZmFjZS1tdXRlZDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgaW1nIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICAuc2xpY2UtdGh1bWItZW1wdHkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgICAgNDVkZWcsXG4gICAgICAkY29sb3Itc3VyZmFjZS1tdXRlZCxcbiAgICAgICRjb2xvci1zdXJmYWNlLW11dGVkIDRweCxcbiAgICAgICRjb2xvci1ib3JkZXItbGlnaHQgNHB4LFxuICAgICAgJGNvbG9yLWJvcmRlci1saWdodCA4cHhcbiAgICApO1xuICB9XG5cbiAgLy8gYG1pbi13aWR0aDogMGAgbGV0cyB0aGUgZ2VvbWV0cnkgbGluZSBlbGxpcHNpemUgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSByb3cgd2lkZXIgdGhhblxuICAvLyB0aGUgMzYwcHggcGFuZWwg4oCUIHRoZSBjb29yZGluYXRlcyBnZXQgbG9uZyBvbiBhIGJpZyBkb2N1bWVudC5cbiAgLnNsaWNlLXRleHQge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC5zbGljZS1wcmltYXJ5IHtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICB9XG5cbiAgLnNsaWNlLXNlY29uZGFyeSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIH1cblxuICAvLyBIaWRkZW4gcm93cyBzdGF5IGxlZ2libGU6IHRoaXMgbGlzdCBpcyB0aGUgb25seSB3YXkgYmFjaywgc28gdGhleSBtdXN0IG5vdCBmYWRlIHRvXG4gIC8vIHVucmVhZGFibGUgdGhlIHdheSBhIHB1cmVseSBkZWNvcmF0aXZlIFwib2ZmXCIgc3RhdGUgY291bGQuXG4gIC5zbGljZS1yb3cuaXMtaGlkZGVuLXNsaWNlIHtcbiAgICAuc2xpY2UtdGh1bWIsXG4gICAgLnNsaWNlLXByaW1hcnksXG4gICAgLnNsaWNlLXNlY29uZGFyeSB7XG4gICAgICBvcGFjaXR5OiAwLjQ1O1xuICAgIH1cbiAgfVxuXG4gIC5zbGljZS1oaWRlIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBtaW4td2lkdGg6ICR0YXJnZXQtc2l6ZS1taW47XG4gICAgbWluLWhlaWdodDogJHRhcmdldC1zaXplLW1pbjtcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2UtbXV0ZWQ7XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgfVxuXG4gIC5zbGljZS1kZWxldGUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgLy8gTWVhc3VyZWQgMjJ4MzAg4oCUIGEgaGFpciB1bmRlciB0aGUgMjRweCBtaW5pbXVtIG9uIHRoZSBuYXJyb3cgYXhpcy5cbiAgICBtaW4td2lkdGg6ICR0YXJnZXQtc2l6ZS1taW47XG4gICAgbWluLWhlaWdodDogJHRhcmdldC1zaXplLW1pbjtcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWRhbmdlci1ib3JkZXI7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFuZ2VyLWJnO1xuICAgICAgY29sb3I6ICRjb2xvci1kYW5nZXItdGV4dDtcbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8qKlxuICogVGhlIGZsb2F0aW5nIGxhYmVsIGl0c2VsZi4gUG9zaXRpb25lZCBpbiB2aWV3cG9ydCBjb29yZGluYXRlcyBieSBUb29sdGlwLnRzeCwgc28gZXZlcnl0aGluZyBoZXJlXG4gKiBpcyBhcHBlYXJhbmNlIG9ubHkg4oCUIGdpdmUgaXQgbm8gbWFyZ2lucyBvciB0cmFuc2Zvcm1zIHRoYXQgd291bGQgZmlnaHQgdGhhdCBtZWFzdXJlbWVudC5cbiAqL1xuLnRvb2x0aXAtYnViYmxlIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAkei10b29sdGlwO1xuICBtYXgtd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTtcbiAgcGFkZGluZzogNnB4IDEwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXRleHQtc3Ryb25nO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgLy8gSXQgY2FuIHNpdCBvdmVyIHRoZSBjYW52YXM7IGEgZHJhZyB0aGF0IHN0YXJ0cyB1bmRlcm5lYXRoIGl0IG11c3Qgc3RpbGwgcmVhY2ggdGhlIGNhbnZhcy5cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgLy8gVGhlIGFycm93LiBgLS10b29sdGlwLWFycm93LWxlZnRgIGlzIHNldCBwZXItcmVuZGVyIHNvIGl0IGtlZXBzIHBvaW50aW5nIGF0IHRoZSBhbmNob3IgZXZlblxuICAvLyB3aGVuIHRoZSBidWJibGUgaGFzIGJlZW4gbnVkZ2VkIHNpZGV3YXlzIHRvIHN0YXkgb24gc2NyZWVuLlxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IGNhbGModmFyKC0tdG9vbHRpcC1hcnJvdy1sZWZ0LCA1MCUpIC0gNnB4KTtcbiAgICBib3JkZXI6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgfVxuXG4gICZbZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIl06OmJlZm9yZSB7XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRjb2xvci10ZXh0LXN0cm9uZztcbiAgfVxuXG4gICZbZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIl06OmJlZm9yZSB7XG4gICAgdG9wOiAxMDAlO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci10ZXh0LXN0cm9uZztcbiAgfVxufVxuIiwiQGltcG9ydCAnLi4vdmFyaWFibGVzJztcblxuLmFsZXJ0LWJhbm5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBnYXA6IDEycHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBtYXJnaW46IDAgYXV0byAyMHB4O1xuICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5hbGVydC1iYW5uZXItLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiAjZjNjMmJkO1xuICBiYWNrZ3JvdW5kOiAjZmRmMGVmO1xuICBjb2xvcjogIzhhMmIyMjtcbn1cblxuLmFsZXJ0LWJhbm5lci0taW5mbyB7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yLWJvcmRlci1saWdodDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2UtbXV0ZWQ7XG4gIGNvbG9yOiAkY29sb3ItdGV4dC11aTtcbn1cblxuLmFsZXJ0LWJhbm5lci10ZXh0IHtcbiAgZmxleDogMSAxIGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgYSB7IGNvbG9yOiBpbmhlcml0OyB9XG59XG5cbi5hbGVydC1iYW5uZXItZGlzbWlzcyB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBwYWRkaW5nOiAwIDRweDtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBvcGFjaXR5OiAwLjc7XG5cbiAgJjpob3ZlciB7IG9wYWNpdHk6IDE7IH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8vIFRoZSBhY2NvdW50IHZpZXcncyBvd24gc3R5bGVzLCBpbmRlcGVuZGVudCBvZiB3aGF0IGNvbnRhaW5zIGl0LiBUaGV5IHVzZWQgdG8gYmUgbmVzdGVkIGluc2lkZVxuLy8gYC5wYWdlLXNldHRpbmdzYCAodmlld3MvU2V0dGluZ3Muc2Nzcyk7IHRoZSBwYW5lbCBpcyBub3cgcmVuZGVyZWQgaW4gYSBtb2RhbCBhcyB3ZWxsLCBzbyB0aGV5IGFyZVxuLy8gc2NvcGVkIHRvIGAuc2V0dGluZ3NgIGluc3RlYWQuIFNwZWNpZmljaXR5IGlzIHVuY2hhbmdlZCBmb3IgZXZlcnkgaW5uZXIgcnVsZSAoc3RpbGwgdHdvIGNsYXNzZXMpLFxuLy8gc28gdGhlIGNhc2NhZGUgb24gdGhlIHBhZ2UgYmVoYXZlcyBleGFjdGx5IGFzIGJlZm9yZS5cbi5zZXR0aW5ncyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMCAyMHB4IDQwcHg7XG5cbiAgLnNldHRpbmdzLWNhcmQge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgcGFkZGluZzogMjBweCAyNHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgfVxuXG4gIC5zZXR0aW5ncy1jYXJkLXRpdGxlIHtcbiAgICBtYXJnaW46IDAgMCAxMnB4O1xuICAgIGZvbnQtc2l6ZTogJGNvbnRhaW5lci1oMi1mb250LXNpemU7XG4gIH1cblxuICAuc2V0dGluZ3Mtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDE2cHg7XG4gICAgcGFkZGluZzogOHB4IDA7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmMGYwZjA7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUgeyBib3JkZXItdG9wOiAwOyB9XG4gIH1cblxuICAuc2V0dGluZ3MtbGFiZWwgeyBjb2xvcjogIzc3NzsgfVxuXG4gIC5zZXR0aW5ncy12YWx1ZSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgfVxuXG4gIC5zZXR0aW5ncy1iYWRnZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgcGFkZGluZzogMnB4IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5zZXR0aW5ncy1iYWRnZS1vayB7XG4gICAgYmFja2dyb3VuZDogI2U2ZjZlYztcbiAgICBjb2xvcjogIzFmN2EzZjtcbiAgfVxuXG4gIC5zZXR0aW5ncy1iYWRnZS13YXJuIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmNGUwO1xuICAgIGNvbG9yOiAjOGE1YTAwO1xuICB9XG5cbiAgLnNldHRpbmdzLXBsYW4geyBmb250LXdlaWdodDogNzAwOyB9XG5cbiAgLnNldHRpbmdzLXN0YXR1cyB7IG1hcmdpbjogNHB4IDAgMTZweDsgfVxuXG4gIC5zZXR0aW5ncy1zdGF0dXMtd2FybiB7IGNvbG9yOiAjOGE1YTAwOyB9XG5cbiAgLnNldHRpbmdzLWJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIGJhY2tncm91bmQ6ICMxMTE7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgLnNldHRpbmdzLWJ0bi1zZWNvbmRhcnkge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBjb2xvcjogIzExMTtcbiAgfVxuXG4gIC5zZXR0aW5ncy1idG4tZGFuZ2VyIHsgYmFja2dyb3VuZDogI2I0MjMxODsgfVxuXG4gIC5zZXR0aW5ncy1saW5rLWJ0biB7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IDA7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBjb2xvcjogIzBhNjZjMjtcbiAgICBmb250OiBpbmhlcml0O1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICM3Nzc7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgLnNldHRpbmdzLWxpbmstZGFuZ2VyIHsgY29sb3I6ICNiNDIzMTg7IH1cblxuICAuc2V0dGluZ3MtaW5saW5lIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICB9XG5cbiAgLnNldHRpbmdzLWRhbmdlciB7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDtcbiAgfVxuXG4gIC5zZXR0aW5ncy1ub3RlIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgfVxuXG4gIC5zZXR0aW5ncy1lcnJvciB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIGNvbG9yOiAjYjQyMzE4O1xuICB9XG59XG4iLCJAaW1wb3J0ICcuLi92YXJpYWJsZXMnO1xuXG4vLyBDb250YWluZXIgY2hyb21lIHNoYXJlZCBieSBldmVyeSBkaWFsb2cgKGNvbXBvbmVudHMvTW9kYWxTaGVsbC50c3gpLiBFYWNoIGRpYWxvZydzIG93blxuLy8gc3R5bGVzaGVldCBhZGRzIGl0cyBza2luIOKAlCBzaXplLCBsYXlvdXQsIGJhY2tncm91bmQg4oCUIG9uIHRvcCBvZiB0aGVzZSBiYXNlIHJ1bGVzLlxuLy9cbi8vIFRoZSDDlyBsaXZlcyBoZXJlIGFuZCBOT1dIRVJFIGVsc2UuIEl0cyBzdXJmYWNlIGNvbG91cnMgY29tZSBmcm9tIGAldWktY2hpcGAgaW4gQXBwLnNjc3MsIHdoaWNoXG4vLyB1c2VkIHRvIG5hbWUgYC5hdXRoLW1vZGFsLWNsb3NlYCBkaXJlY3RseTsgdGhhdCBpcyB3aHkgdGhlIGFjY291bnQgZGlhbG9nJ3Mgw5cgZGlkIG5vdCBtYXRjaFxuLy8gYmVmb3JlIHRoaXMgZmlsZSBleGlzdGVkLlxuLm1vZGFsLXNoZWxsLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpO1xuICB6LWluZGV4OiAkYXV0aC1tb2RhbC16LWluZGV4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMThweDtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgsIDAuMiwgMSk7XG5cbiAgJltkYXRhLXN0YXRlPVwib3BlblwiXSB7IG9wYWNpdHk6IDE7IH1cblxuICAmW2RhdGEtc3RhdGU9XCJleGl0XCJdIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLm1vZGFsLXNoZWxsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgkYXV0aC1tb2RhbC1zY2FsZS1jbG9zZWQpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIHRyYW5zZm9ybSAzMDBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgsIDAuMiwgMSksXG4gICAgICBvcGFjaXR5IDMwMG1zIGN1YmljLWJlemllcigwLjIsIDAuOCwgMC4yLCAxKTtcblxuICAgIC8vIFRoZSBzaGVsbCB0YWtlcyBmb2N1cyBvbiBvcGVuOyB0aGUgcmluZyB3b3VsZCBmcmFtZSB0aGUgd2hvbGUgZGlhbG9nLCB3aGljaCByZWFkcyBhcyBhbiBlcnJvci5cbiAgICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICB9XG5cbiAgLm1vZGFsLXNoZWxsLWNsb3NlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMHB4O1xuICAgIHJpZ2h0OiAxMHB4O1xuICAgIHotaW5kZXg6IDE7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpob3ZlciB7IGJhY2tncm91bmQ6ICNmM2YzZjM7IH1cbiAgfVxuXG4gICZbZGF0YS1zdGF0ZT1cIm9wZW5cIl0gLm1vZGFsLXNoZWxsIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAvLyBCYWNrIHRvIHRoZSBjbG9zZWQgdmFsdWVzLCBzbyB0aGUgZXhpdCB0cmFuc2l0aW9uIHJ1bnMgYW5kIGl0cyBgdHJhbnNpdGlvbmVuZGAgdW5tb3VudHMuXG4gICZbZGF0YS1zdGF0ZT1cImV4aXRcIl0gLm1vZGFsLXNoZWxsIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKCRhdXRoLW1vZGFsLXNjYWxlLWNsb3NlZCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAubW9kYWwtc2hlbGwtb3ZlcmxheSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXG4gICAgLm1vZGFsLXNoZWxsIHtcbiAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8vIFNraW4gb25seS4gVGhlIG92ZXJsYXksIHRoZSBvcGVuL2Nsb3NlIGFuaW1hdGlvbiBhbmQgdGhlIMOXIGNvbWUgZnJvbSBNb2RhbFNoZWxsLnNjc3MuXG4ubW9kYWwtc2hlbGwtb3ZlcmxheSAuYWNjb3VudC1tb2RhbCB7XG4gIHdpZHRoOiBtaW4oNjgwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7XG5cbiAgLy8gQ2FwcyB0aGUgaGVpZ2h0IGluc3RlYWQgb2YgZml4aW5nIGl0OiB0aGUgcGFuZWwgaXMgc2hvcnQgb24gRnJlZSBhbmQgdGFsbCBvbiBQcm8gd2l0aCBhblxuICAvLyB1bnZlcmlmaWVkIGVtYWlsLCBhbmQgYSBmaXhlZCBoZWlnaHQgd291bGQgc3RyYW5kIHdoaXRlc3BhY2UgaW4gdGhlIGNvbW1vbiBjYXNlLlxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzZweCk7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGNvbG9yOiAjMzMzO1xuICBib3JkZXItcmFkaXVzOiAkYXV0aC1tb2RhbC1ib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMzUpO1xuXG4gIC8vIFRoZSBCT0RZIHNjcm9sbHMsIG5vdCB0aGUgcGFuZWwg4oCUIHNhbWUgc2hhcGUgYXMgYC5hdXRoLW1vZGFsYCAvIGAuYXV0aC1tb2RhbC1yaWdodGAuXG4gIC8vIFdoZW4gdGhlIHBhbmVsIGl0c2VsZiBzY3JvbGxlZCwgdGhlIMOXIChhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYWdhaW5zdCBpdCkgc2Nyb2xsZWQgYXdheSB3aXRoXG4gIC8vIHRoZSBjb250ZW50OiBvbiBhIDYwMHB4LXRhbGwgdmlld3BvcnQgYSBQcm8gYWNjb3VudCBpcyB+ODU5cHgsIHNvIHlvdSBsb3N0IHRoZSBjbG9zZSBidXR0b25cbiAgLy8gZXhhY3RseSB3aGVuIHlvdSB3ZXJlIGRlZXBlc3QgaW4gdGhlIGRpYWxvZy4gRXNjYXBlIGFuZCB0aGUgYmFja2Ryb3Agc3RpbGwgd29ya2VkLCBidXQgdGhlXG4gIC8vIHZpc2libGUgd2F5IG91dCBkaWQgbm90LlxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC5hY2NvdW50LW1vZGFsLWJvZHkge1xuICAgIHBhZGRpbmc6IDIwcHggMjRweCAyNHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICAvLyBXaXRob3V0IHRoaXMgYSBmbGV4IGNoaWxkIHJlZnVzZXMgdG8gc2hyaW5rIGJlbG93IGl0cyBjb250ZW50LCBzbyB0aGUgY2FwIG5ldmVyIGVuZ2FnZXMuXG4gICAgbWluLWhlaWdodDogMDtcbiAgfVxuXG4gIC8vIFRoZSBwYWdlIGNlbnRyZXMgdGhlIHBhbmVsIGluIGEgNjQwcHggY29sdW1uIGFuZCBwYWRzIGl0OyBpbiBoZXJlIHRoZSBtb2RhbCBvd25zIGJvdGguXG4gIC5zZXR0aW5ncyB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbiIsIi8qIE1vZGFsIFVJIGZvciBcInJlYWwgYXV0aFwiIGFuZCBkZXYtYXV0aCB2YXJpYW50LiAqL1xuQGltcG9ydCAnLi4vdmFyaWFibGVzJztcblxuLy8gU2tpbiBvbmx5LiBUaGUgb3ZlcmxheSwgdGhlIG9wZW4vY2xvc2UgYW5pbWF0aW9uIGFuZCB0aGUgw5cgbm93IGxpdmUgaW4gTW9kYWxTaGVsbC5zY3NzLCB3aGljaFxuLy8gdGhpcyBkaWFsb2cgc2hhcmVzIHdpdGggQWNjb3VudE1vZGFsIOKAlCB3aGF0IHN0YXlzIGhlcmUgaXMgd2hhdCBtYWtlcyBUSElTIGRpYWxvZyBsb29rIGxpa2Vcbi8vIGl0c2VsZi4gYC5hdXRoLW1vZGFsLW92ZXJsYXlgIC8gYC5hdXRoLW1vZGFsYCBhcmUgc3RpbGwgZW1pdHRlZCBieSB0aGUgc2hlbGwgYXMgc2tpbiBjbGFzc2VzLFxuLy8gc28gZXZlcnkgbmVzdGVkIHNlbGVjdG9yIGJlbG93IGlzIHVuY2hhbmdlZC5cbi5hdXRoLW1vZGFsLW92ZXJsYXkge1xuICAuYXV0aC1tb2RhbCB7XG4gICAgd2lkdGg6IG1pbig5ODBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTtcbiAgICBoZWlnaHQ6IG1pbig2NDBweCwgY2FsYygxMDB2aCAtIDI0cHgpKTtcbiAgICBiYWNrZ3JvdW5kOiAkYXV0aC1tb2RhbC1iZztcbiAgICBib3JkZXItcmFkaXVzOiAkYXV0aC1tb2RhbC1ib3JkZXItcmFkaXVzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEuMTJmciAxZnI7XG4gICAgYm94LXNoYWRvdzogMCAxNnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgICBsaW5lLWhlaWdodDogMS4yNTtcblxuICAgIC5hdXRoLW1vZGFsLWxlZnQge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYmFja2dyb3VuZDogJGF1dGgtbW9kYWwtbGVmdC1iZztcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIC5hdXRoLW1vZGFsLWxlZnQtaW1hZ2Uge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAgIC8vIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAvLyBmaWx0ZXI6IHNhdHVyYXRlKDEuMDUpIGNvbnRyYXN0KDEuMDIpO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudCg5MDBweCA1MjBweCBhdCAyMCUgMTUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDU1JSksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgwLCAwLCAwLCAwLjA4KSwgcmdiYSgwLCAwLCAwLCAwLjM4KSk7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5hdXRoLW1vZGFsLXJpZ2h0IHtcbiAgICAgIHBhZGRpbmc6IDIycHggMjJweCAxOHB4O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG4gICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCAjZWFlYWVhO1xuICAgICAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG5cbiAgICAgIC5hdXRoLWZvcm0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDE0cHg7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLWZvcm0taGVybyB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1mb3JtLWhlcm8tdGl0bGUge1xuICAgICAgICAvLyBGb250IHNpemUgY29tZXMgZnJvbSBgLmFpdGNoLW9uZWAgKHNoYXJlZCB3aXRoIEFwcCBoZWFkZXIpLlxuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLWZvcm0taGVyby1zdWJ0aXRsZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgICAgICBjb2xvcjogIzQ0NDtcbiAgICAgIH1cblxuICAgICAgLmF1dGgtZm9ybS1zd2l0Y2gge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiAjNDQ0O1xuICAgICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICAgIH1cblxuICAgICAgLy8gYXV0aCBsaW5rIHN0eWxlcyBsaXZlIGluIEFwcC5zY3NzIChgLmN0YS1idG4tbGlua2AgLyBgLmF1dGgtbGlua2AgdXNhZ2UpLlxuXG4gICAgICAuYXV0aC1maWVsZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1maWVsZC1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBjb2xvcjogIzExMTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnB1dCBzdHlsZXMgbGl2ZSBpbiBBcHAuc2NzcyAoYC5jb21tYW5kaW5nLWlucHV0YCAvIGAuc3VwZXItY29tbWFuZGluZy1pbnB1dGApLlxuXG4gICAgICAuYXV0aC1pbnB1dC13aXRoLWljb24ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLWljb24tYnRuIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDRweCA2cHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICAgICAgICAuYXV0aC1pY29uIHtcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgb3BhY2l0eTogMC43NTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIgLmF1dGgtaWNvbiB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuYXV0aC1yZW1lbWJlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgIH1cblxuICAgICAgLmF1dGgtdG9nZ2xlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNTRweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgLmF1dGgtdG9nZ2xlLWtub2Ige1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiAzcHg7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICMxMTE7XG4gICAgICAgIHRyYW5zaXRpb246IGxlZnQgMTYwbXMgZWFzZSwgYmFja2dyb3VuZCAxNjBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC10b2dnbGUub24gLmF1dGgtdG9nZ2xlLWtub2Ige1xuICAgICAgICBsZWZ0OiAyN3B4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTExO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1yZW1lbWJlci1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBjb2xvcjogIzExMTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmltYXJ5IGJ1dHRvbiBzdHlsZSBsaXZlcyBpbiBBcHAuc2NzcyAoYC5wcmltYXJ5LWJ0bmApIGZvciBjb25zaXN0ZW5jeS5cblxuICAgICAgLmF1dGgtZm9yZ290IHtcbiAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgLy8gRm9udCArIGNvbG9yIGNvbWUgZnJvbSBzaGFyZWQgYC5ncmVlbi1saW5rLWJ0bmAuXG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLWhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLXRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC10b2dnbGUtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMjM5MzczO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI2YwZmJmNztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLWZpZWxkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogIzQ0NDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1maWVsZCBpbnB1dCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gICAgICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIG1hcmdpbjogMTBweCAwIDZweDtcblxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgIHBhZGRpbmc6IDlweCAxMnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itc3VyZmFjZTtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG5cbiAgICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLW5vdGUge1xuICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtbWQ7XG4gICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICBtYXJnaW46IDEwcHggMDtcbiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1kZXYge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTRweDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLW1vZGFsLWRldi10aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cblxuICAgICAgLmF1dGgtbW9kYWwtZGV2LXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1zdXJmYWNlO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1kZXYtc2VjdGlvbi10aXRsZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1kZXYtc2VjdGlvbi1zdWJ0aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICM1NTU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1pbmZvIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgY29sb3I6ICMxYjVlMjA7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbiAgICAgIH1cblxuICAgICAgLmF1dGgtbW9kYWwtZXJyb3Ige1xuICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICBjb2xvcjogI2IwMDAyMDtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLW1kO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1tb2RhbC1sZWdhbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICM2NjY7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuXG4gICAgICAgIGEge1xuICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7XG4gICAgLmF1dGgtbW9kYWwge1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjRweCk7XG4gICAgfVxuXG4gICAgLmF1dGgtbW9kYWwtbGVmdCB7XG4gICAgICBoZWlnaHQ6IDIyMHB4O1xuICAgIH1cblxuICAgIC5hdXRoLW1vZGFsLXJpZ2h0IHtcbiAgICAgIHBhZGRpbmc6IDIwcHggMTZweCAxNnB4O1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8qKlxuICogQSBzdGFuZC1pbiBmb3IgY29udGVudCB3aG9zZSBTSEFQRSBpcyBrbm93biBidXQgd2hvc2UgdmFsdWUgaXMgbm90IHlldC5cbiAqXG4gKiBJdCBleGlzdHMgYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUgaXMgZ3Vlc3NpbmcuIGB1c2VyOiBudWxsYCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIFwid2UgaGF2ZVxuICogbm90IGFza2VkIHlldFwiLCBzbyByZW5kZXJpbmcgaXQgc3RyYWlnaHQgc2hvd2VkIGEgc2lnbmVkLWluIHZpc2l0b3IgXCJTaWduIHVwIC8gU2lnbiBpblwiIGFuZCBhXG4gKiBGcmVlIHZpc2l0b3IgYSBcIkNyZWF0ZSBBY2NvdW50XCIgYnV0dG9uLCBlYWNoIGNvcnJlY3RlZCBhIGZyYW1lIGxhdGVyLiBBIHNrZWxldG9uIHNheXMgdGhlIG9uZVxuICogdHJ1ZSB0aGluZyBhdmFpbGFibGUgYXQgdGhhdCBtb21lbnQ6IGFuIGFuc3dlciBpcyBjb21pbmcuXG4gKlxuICogSXQgY2FycmllcyBubyB0ZXh0IG9mIGl0cyBvd24sIHNvIGl0IGhhcyBubyBsaW5lIGJveCBhbmQgd291bGQgY29sbGFwc2UgdG8gbm90aGluZyDigJQgaGVuY2UgdGhlXG4gKiBuYnNwIGluIDo6YmVmb3JlLiBXaGF0ZXZlciBjbGFzcyBpdCBpcyBjb21iaW5lZCB3aXRoIHN1cHBsaWVzIHRoZSBwYWRkaW5nIGFuZCByYWRpdXMsIHdoaWNoIGlzXG4gKiB3aGF0IGtlZXBzIGEgc2tlbGV0b24gZXhhY3RseSB0aGUgc2l6ZSBvZiB0aGUgdGhpbmcgaXQgcmVwbGFjZXMuXG4gKi9cbi5za2VsZXRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2UtbXV0ZWQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvci1ib3JkZXItbGlnaHQ7XG5cbiAgLy8gQm9ycm93cyB0aGUgbGluZSBib3ggb2YgdGhlIGNvbnRyb2wgaXQgc3RhbmRzIGluIGZvcjsgaXQgaGFzIG5vIHRleHQgdG8gYmUgc2l6ZWQgYnkuXG4gICY6OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGEwXCI7IH1cblxuICAvLyBBIHN0aWxsIGdyZXkgYm94IHJlYWRzIGFzIGJyb2tlbi4gVGhlIHN3ZWVwIGlzIHRoZSB3aG9sZSBkaWZmZXJlbmNlIGJldHdlZW4gXCJlbXB0eVwiIGFuZFxuICAvLyBcImxvYWRpbmdcIiwgYW5kIGl0IGlzIHRoZSBvbmx5IG1vdmluZyBwYXJ0IOKAlCBubyBzcGlubmVyIHRvIGFsaWduLCBubyBkb3RzIHRvIGxheSBvdXQuXG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgdHJhbnNwYXJlbnQpO1xuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc3dlZXAgMS4zcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNrZWxldG9uLXN3ZWVwIHtcbiAgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxufVxuXG4vLyBBIHJlcGVhdGluZyBzd2VlcCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIG1vdGlvbiB0aGlzIHNldHRpbmcgaXMgZm9yLiBUaGUgZ3JleSBib3ggc3RpbGxcbi8vIGNvbW11bmljYXRlcyBcInBlbmRpbmdcIiBvbiBpdHMgb3duLCBzbyBub3RoaW5nIGlzIGxvc3QgYnkgaG9sZGluZyBpdCBzdGlsbC5cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gIC5za2VsZXRvbjo6YWZ0ZXIgeyBhbmltYXRpb246IG5vbmU7IH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8qXG4gKiBPTkUgQk9YIEZPUiBBTEwgVEhSRUUgU1RBVEVTOiB0aGUgc2tlbGV0b24sIFwiTXkgQWNjb3VudFwiLCBhbmQgXCJTaWduIHVwIC8gU2lnbiBpblwiLlxuICpcbiAqIFRoZSBjb3JuZXIgaXMgYW5jaG9yZWQgdG8gdGhlIHJpZ2h0IGVkZ2UsIHNvIGFueSB3aWR0aCBjaGFuZ2UgZHJhZ3MgaXRzIGxlZnQgZWRnZSBhY3Jvc3MgdGhlXG4gKiBjYW52YXMuIFRoZSB0d28gbGFiZWxzIGFyZSA5NnB4IGFuZCAxNTJweCwgc28gYmVmb3JlIHRoaXMgdGhlIGNvcm5lciBtb3ZlZCA1NnB4IHRoZSBtb21lbnRcbiAqIC9hcGkvbWUgYW5zd2VyZWQg4oCUIGFuZCBhZGRpbmcgYSBza2VsZXRvbiBvbiB0b3Agd291bGQgb25seSBoYXZlIGFkZGVkIGEgc2Vjb25kIGp1bXAuXG4gKlxuICogVGhlIHNrZWxldG9uIGtlZXBzIGl0cyBPV04gY2xhc3MgcmF0aGVyIHRoYW4gYm9ycm93aW5nIGAuYXV0aC1sYXVuY2hlci1idG5gOiB0aGF0IHNlbGVjdG9yIGlzXG4gKiBob3cgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGZpbmRzIHRoZSByZWFsLCBjbGlja2FibGUgYnV0dG9uLCBhbmQgYSA8c3Bhbj4gYW5zd2VyaW5nIHRvIGl0IHdvdWxkXG4gKiBsZXQgYSB0ZXN0IGNsaWNrIGEgcGxhY2Vob2xkZXIgYW5kIHF1aWV0bHkgZG8gbm90aGluZy5cbiAqL1xuLmF1dGgtbGF1bmNoZXItYnRuLFxuLmF1dGgtbGF1bmNoZXItc2tlbGV0b24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAxMnB4O1xuICBib3R0b206IDEycHg7XG4gIHotaW5kZXg6ICR6LWF1dGgtbGF1bmNoZXI7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgLypcbiAgICogVGhlIHdpZGVzdCBsYWJlbCBhdCB0aGlzIGZvbnQuIERlbGliZXJhdGVseSBhIHBsYWluIHB4IHZhbHVlIHJhdGhlciB0aGFuIGEgYGNoYCBjYWxjIHRoYXRcbiAgICogd291bGQgc2lsZW50bHkgZHJpZnQg4oCUIGBhdXRoLWxhdW5jaGVyLWxhYmVsLnB3c3BlY2AgYXNzZXJ0cyB0aGUgdGhyZWUgc3RhdGVzIGFyZSBpZGVudGljYWwsXG4gICAqIHNvIGEgY29weSBjaGFuZ2UgdGhhdCBvdXRncm93cyB0aGlzIGZhaWxzIGxvdWRseSBpbnN0ZWFkIG9mIHJlaW50cm9kdWNpbmcgdGhlIHNoaWZ0LlxuICAgKi9cbiAgbWluLXdpZHRoOiAxNTJweDtcbiAgbWF4LXdpZHRoOiBtaW4oMzIwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7XG59XG5cbi5hdXRoLWxhdW5jaGVyLWJ0biB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vLyBBIDxzcGFuPiBpbmhlcml0cyBub25lIG9mIGEgYnV0dG9uJ3MgY2hyb21lLCBzbyB0aGUgc2tlbGV0b24gcmVzdGF0ZXMgdGhlIGJveC4gVGhlIGhlaWdodCBpc1xuLy8gdGhlIGdsb2JhbCBgYnV0dG9uIHsgaGVpZ2h0OiAzMHB4IH1gIGZyb20gQXBwLnNjc3M7IHRoZSBmaWxsIGFuZCBzd2VlcCBjb21lIGZyb20gU2tlbGV0b24uc2Nzcy5cbi5hdXRoLWxhdW5jaGVyLXNrZWxldG9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMzBweDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuIiwiLmFwcC1lcnJvci1iYW5uZXIge1xuICAuZXJyLWRldi1kaWFnbm9zdGljIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgIG1hcmdpbjogMTJweCBhdXRvIDA7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBjb2xvcjogIzVhNDUwMDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmM2NkO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjOWEyMjc7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB9XG59XG4iLCIvKipcbiAqIEFwcC5zY3NzXG4gKiBUaGUgbW9zdCBtb3N0IENTUyBTQ1NTIGZpbGUgdGhlcmUgaXMgaW4gdGhlIHVuaXZlcnNlIOKAlCBhbmQgbm93IHRoZSBPTkxZIG9uZSBmb3IgYXBwIENTUy5cbiAqXG4gKiBgX2Jhc2VsaW5lLnNjc3NgIChvcmlnaW5hbGx5IGBfbGVnYWN5TWFpbk1pbi5zY3NzYCwgZnJvbSB0aGUgdjEgYGNzcy9tYWluLm1pbi5jc3NgKSB3YXNcbiAqIHJldGlyZWQgb24gMjAyNi0wOC0xNiBhbmQgaXRzIHJ1bGVzIGxpdmUgaGVyZSwgYXQgdGhlIHRvcCwgd2hlcmUgaXRzIGBAaW1wb3J0YCB1c2VkIHRvIHNpdC5cbiAqIDEwMiBkZWNsYXJhdGlvbnMgdGhhdCB0aGlzIGZpbGUgYWxyZWFkeSByZXN0YXRlZCBmdXJ0aGVyIGRvd24gd2VyZSBkcm9wcGVkIGluIHRoZSBzYW1lIHBhc3MuXG4gKlxuICog4pqg77iPIE9SREVSIElTIExPQUQtQkVBUklORy4gVGhlIHJlc2V0ICsgc2hhcmVkIGNvbXBvbmVudCBibG9jayBiZWxvdyBtdXN0IHN0YXkgQUJPVkVcbiAqIGV2ZXJ5dGhpbmcgZWxzZTogZG96ZW5zIG9mIHJ1bGVzIGZ1cnRoZXIgZG93biBvdmVycmlkZSBpdCBwdXJlbHkgYnkgc291cmNlIG9yZGVyLCBub3QgYnlcbiAqIHNwZWNpZmljaXR5LiBNb3ZpbmcgYSBydWxlIHVwIG9yIGRvd24gaW4gdGhpcyBmaWxlIGNhbiBzaWxlbnRseSBjaGFuZ2Ugd2hhdCByZW5kZXJzLlxuICpcbiAqIOKaoO+4jyBgbnBtIHJ1biB2ZXJpZnk6YWxsYCBDQU5OT1Qgc2VlIGEgQ1NTIHJlZ3Jlc3Npb24g4oCUIGl0IGFzc2VydHMgZ2VvbWV0cnkgYW5kIGJlaGF2aW91cixcbiAqIG5ldmVyIGFwcGVhcmFuY2UuIFByb3ZlIGNoYW5nZXMgaGVyZSB3aXRoIHRoZSBjb21wdXRlZC1zdHlsZSBmaW5nZXJwcmludCBoYXJuZXNzXG4gKiAoYC5haS1hc3Npc3QvdG9vbHMvaW1hZ2VzbGljZXItY3NzLWZpbmdlcnByaW50LnB3c3BlYy50c2ApIHBsdXMgYmVmb3JlL2FmdGVyIHNjcmVlbnNob3RzLlxuICogVGhpcyByZXRpcmVtZW50IHdhcyBwcm92ZW4gdGhhdCB3YXk6IDE4MzYgZWxlbWVudC1zdGF0ZXMgYW5kIDE1IGZ1bGwtcGFnZSBzY3JlZW5zaG90cyxcbiAqIGJvdGggemVyby1kaWZmLCB3aXRoIGJvdGggaW5zdHJ1bWVudHMgY2FsaWJyYXRlZCB0byB6ZXJvIGZpcnN0LlxuICovXG4vLyBCb3RoIGltcG9ydHMgc2l0IGhlcmUsIGFib3ZlIGV2ZXJ5IHJ1bGUuIGBAaW1wb3J0YCBiZWxvdyBhIHJ1bGUgaXMgaW52YWxpZCBDU1MgcG9zaXRpb24g4oCUXG4vLyBTYXNzIHJlc29sdmVzIGl0IGF0IGNvbXBpbGUgdGltZSBzbyBpdCB3b3JrZWQsIGJ1dCBpdCBvbmx5IGVuZGVkIHVwIGRvd24gdGhlcmUgYmVjYXVzZSB0aGVcbi8vIGJhc2VsaW5lIGJsb2NrIHdhcyBpbmxpbmVkIGJldHdlZW4gdGhlIHR3by4gYF96SW5kZXhgIGVtaXRzIG9ubHkgYDpyb290YCBjdXN0b20gcHJvcGVydGllcyxcbi8vIHNvIGhvaXN0aW5nIGl0IGNoYW5nZXMgbm90aGluZyAodmVyaWZpZWQ6IDAgZGlmZnMgb24gMTgzNiBlbGVtZW50LXN0YXRlcywgMCBwaXhlbHMpLlxuQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuQGltcG9ydCAnLi96SW5kZXgnO1xuXG4vLyBgQGtleWZyYW1lcyByYWluYm93YCDigJQgd2FzIGRlY2xhcmVkIGhlcmUgQU5EIGluIGFsbCBmb3VyIHBhZ2Ugc3R5bGVzaGVldHMuIFRoaXMgaXMgdGhlXG4vLyBPTkxZIGltcG9ydGVyIG9mIHRoYXQgcGFydGlhbDsgc2VlIHRoZSBmaWxlIGZvciB3aHkgdGhhdCBpcyBkZWxpYmVyYXRlLlxuQGltcG9ydCAnLi9hbmltYXRpb25zJztcblxuLy8g4pSA4pSAIFJlc2V0ICsgc2hhcmVkIGNvbXBvbmVudCBzdHlsZXMgdGhlIHdob2xlIGFwcCBpcyBkcmF3biBvbiB0b3Agb2YgKHdhcyBgX2Jhc2VsaW5lLnNjc3NgKS5cbiNlcnIsXG4uZXJyIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuI2ltZ1dyYXAsXG4jdXBsb2FkRm9ybSxcbi5jZW50ZXIsXG4uZXJyLFxuLnJlc3VsdC13cmFwLFxuLnRodW1iRGl2LFxuaDEsXG5oMiB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuI21lbnUsXG4jdG9vbC1ib3gsXG4ucmVzdWx0LXdyYXAgaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuI3N3aXRjaC1zdGF0dXMsXG4jdG9vbC1ib3gsXG4uYnRuLWNob3AsXG4uc3dpdGNoIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG5hLGFiYnIsYWNyb255bSxhZGRyZXNzLGFwcGxldCxhcnRpY2xlLGFzaWRlLGF1ZGlvLGIsYmlnLGJsb2NrcXVvdGUsYm9keSxjYW52YXMsY2FwdGlvbixjZW50ZXIsY2l0ZSxjb2RlLGRkLGRlbCxkZXRhaWxzLGRmbixkaXYsZGwsZHQsZW0sZW1iZWQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxodG1sLGksaWZyYW1lLGltZyxpbnMsa2JkLGxhYmVsLGxlZ2VuZCxsaSxtYXJrLG1lbnUsbmF2LG9iamVjdCxvbCxvdXRwdXQscCxwcmUscSxydWJ5LHMsc2FtcCxzZWN0aW9uLHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VtbWFyeSxzdXAsdGFibGUsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGltZSx0cix0dCx1LHVsLHZhcix2aWRlbyB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuXG4gIC8vIE5PVEU6IHRoZSB2MSByZXNldCBhbHNvIGNhcnJpZWQgYGZvbnQtc2l6ZTogMTEwJWAgaGVyZS4gSXQgd2FzIERFQUQg4oCUIHRoZSBgZm9udDogaW5oZXJpdGBcbiAgLy8gc2hvcnRoYW5kIG9uIHRoZSBuZXh0IGxpbmUgcmVzZXRzIGZvbnQtc2l6ZSwgYW5kIGl0IGNvbWVzIGFmdGVyLiBSZW1vdmVkIDIwMjYtMDgtMTYgb25jZVxuICAvLyBzdHlsZWxpbnQncyBgZGVjbGFyYXRpb24tYmxvY2stbm8tc2hvcnRoYW5kLXByb3BlcnR5LW92ZXJyaWRlc2AgcG9pbnRlZCBhdCBpdC5cbiAgZm9udDogaW5oZXJpdDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWVudSxuYXYsc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5vbCxcbnVsIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuYmxvY2txdW90ZSxcbnEge1xuICBxdW90ZXM6IG5vbmU7XG5cbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogbm9uZTtcbiAgfVxufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG5idXR0b24ge1xuICBoZWlnaHQ6IDMwcHg7XG59XG5cbiNlcnIsXG4uZXJyIHtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4uc3dpdGNoIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMzhweDtcbiAgaGVpZ2h0OiAyMnB4O1xufVxuXG5idXR0b24ge1xuICAmLmJ0bi1hZGQ6OmJlZm9yZSxcbiAgJi5idG4tY2xlYXI6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxOHB4IDE4cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG5cbiAgJi5idG4tYWRkOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi9yZXNvdXJjZXMvYWRkLW5ldy1pY29uLnBuZycpO1xuICB9XG5cbiAgJi5idG4tY2xlYXI6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuL3Jlc291cmNlcy9jbGVhci1hbGwtaWNvbi5wbmcnKTtcbiAgfVxufVxuXG4kZGVsZXRlLWltZzogdXJsKCcuL3Jlc291cmNlcy9idC1kZWxldGUucG5nJyk7XG4kY29udGFpbmVyLXdpZHRoOiA3ODBweDtcbiRyYWRpdXMtc206IDNweDtcblxuOnJvb3Qge1xuICAtLWZvbnQtc2l6ZS1zbTogMTJweDtcbiAgLS1mb250LXNpemUtYmFzZTogMTRweDtcbn1cblxuQGtleWZyYW1lcyBNT1ZFLUJHIHtcblx0ZnJvbSB7XG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuXHR9XG5cblx0dG8ge1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkc2xpY2Utb3V0bGluZS10aWxlLXB4KTtcblx0fVxufVxuXG4uY2xlYXJmaXgge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vLyBSZWFkIGJ5IHNjcmVlbiByZWFkZXJzLCBuZXZlciBzZWVuIG9yIGxhaWQgb3V0IChhYnNvbHV0ZSwgc28gaXQgYWRkcyBubyBmbGV4IGdhcCBlaXRoZXIpLlxuLnZpc3VhbGx5LWhpZGRlbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbmgxLFxuaDIge1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbiAgZm9udC1zaXplOiAyNXB4O1xufVxuXG5oMSxcbmgyLFxuaDMge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuXG4uZGVsZXRlLWFyZWEge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBNaXJyb3IgT0cgdjEuMDogcGFkZGluZzogNXB4IDVweCAycHggMnB4IChzbGlnaHRseSBzaG9ydGVyIGJveCBzbyBkZWxldGUgaWNvblxuICAvLyBzaXRzIGEgYml0IGNsb3NlciB0byB0aGUgc2VsZWN0aW9uLCBtYXRjaGluZyB0b3A6IC04cHggdnMgLTExcHggYmVoYXZpb3IpLlxuICBwYWRkaW5nOiA1cHggNXB4IDJweCAycHg7XG59XG5cbiNpbWdXcmFwLCAjdXBsb2FkRm9ybSwgLmNlbnRlciwgaDEsIGgyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vLyBVcGxvYWQgZm9ybSBzaXppbmcgYW5kIHR5cG9ncmFwaHlcbiN1cGxvYWRGb3JtIHtcbiAgLy8gVE9ETzogc2hhcmUgc2FtZSB2YXJpYWJsZSB3aXRoIEpTIGFuZCBDU1NcbiAgbWF4LXdpZHRoOiAkY29udGFpbmVyLXdpZHRoO1xuICBtYXJnaW46IDIwcHggYXV0bztcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4vLyBHbG9iYWwgdHlwb2dyYXBoeVxuYm9keSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4qLFxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsQ291cmllcixcIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXJcIixcIkx1Y2lkYSBUeXBld3JpdGVyXCIsbW9ub3NwYWNlO1xufVxuXG4jZHluYW1pYy10ZXh0IHtcbiAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG59XG5cbi5kb3dubG9hZC1hbGwge1xuICBjbGVhcjogYm90aDtcbiAgbWFyZ2luOiAyMHB4IGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uZmVlZGJhY2sge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbn1cblxuLmJvbGQge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnRodW1iRGl2IHtcbiAgaGVpZ2h0OiAxNDJweDtcbiAgd2lkdGg6IDE0MnB4O1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luOiAxMHB4O1xuICBsaW5lLWhlaWdodDogMTQwcHg7XG4gIHBhZGRpbmc6IDVweDtcbiAgYm9yZGVyOiAxcHggZG90dGVkICM5OTk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogJHJhZGl1cy1zbTtcbiAgLW1vei1ib3JkZXItcmFkaXVzOiAkcmFkaXVzLXNtO1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLXNtO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgOHB4IDE4cHggLTZweCByZ2JhKDAsMCwwLC43NSk7XG4gIC1tb3otYm94LXNoYWRvdzogMCA4cHggMThweCAtNnB4IHJnYmEoMCwwLDAsLjc1KTtcbiAgYm94LXNoYWRvdzogMCA4cHggMThweCAtNnB4IHJnYmEoMCwwLDAsLjc1KTtcbn1cblxuLnJlc3VsdC13cmFwLCAudGh1bWJEaXYge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5yZXN1bHQtd3JhcCBpbWcge1xuICBoZWlnaHQ6IGF1dG87XG4gIHdpZHRoOiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAxNDBweDtcbiAgbWF4LXdpZHRoOiAxNDBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMjZweCAtN3B4IHJnYmEoMCwwLDAsLjc1KTtcbiAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDAgMjZweCAtN3B4IHJnYmEoMCwwLDAsLjc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDI2cHggLTdweCByZ2JhKDAsMCwwLC43NSk7XG59XG5cbi8vIFwiVGhlIEdyaWRcIiDigJQgdGhlIGRpZ2l0YWwgZnJvbnRpZXIgdGhlIGRvY3VtZW50IGxpdmVzIG9uLiBSZW5hbWVkIGZyb20gYCNjYW52YXNgIGJlY2F1c2Vcbi8vIHRocmVlIGRpZmZlcmVudCB0aGluZ3MgaW4gdGhpcyBmaWxlIHdlcmUgYWxsIGNhbGxlZCBzb21lIGZsYXZvdXIgb2YgXCJjYW52YXNcIjogdGhpcyBvdXRlclxuLy8gY29sdW1uLCB0aGUgdmlld3BvcnQgKGAuaW1nLWNhbnZhc2ApLCBhbmQgdGhlIGRvY3VtZW50IChgLmNhbnZhcy13b3JsZGApLiBUaG9zZSB0aHJlZSBiZWluZ1xuLy8gaW50ZXJjaGFuZ2VhYmxlIGluIE5BTUUgd2hpbGUgZGlzdGluY3QgaW4gQkVIQVZJT1VSIGlzIHdoYXQgY29zdCB0aGlzIGNvZGViYXNlIG1vc3Qgb2YgdHdvXG4vLyBzZXNzaW9uczsgc2VlIGAuYWktYXNzaXN0L3JlZmVyZW5jZS1pbWFnZXNsaWNlci1jYW52YXMtZWxlbWVudHMubWRgLlxuLy9cbi8vIFRoaXMgb25lIGlzIHRoZSBvdXRlcm1vc3Q6IHRoZSBwYWdlLWxldmVsIGNvbHVtbiB0aGUgd2hvbGUgZWRpdG9yIHNpdHMgaW4uXG4vLyBGVUxMIFNDUkVFTiDigJQgdGhlIGNhbnZhcyB0YWtlcyB0aGUgd2hvbGUgdmlld3BvcnQgYW5kIHRoZSB0b29sYmFyIGZsb2F0cyBvdmVyIGl0LlxuLy9cbi8vIERlbGliZXJhdGVseSBDU1MsIG5vdCB0aGUgRnVsbHNjcmVlbiBBUEk6IGByZXF1ZXN0RnVsbHNjcmVlbmAgb24gI3RoZS1ncmlkIHdvdWxkIGhpZGUgZXZlcnlcbi8vIGRyYXdlciwgYmVjYXVzZSB0aGV5IGFyZSBgcG9zaXRpb246IGZpeGVkYCBTSUJMSU5HUyByYXRoZXIgdGhhbiBkZXNjZW5kYW50cyBvZiBpdC4gRG9pbmcgaXRcbi8vIHRoaXMgd2F5IGtlZXBzIEhpc3RvcnkvTGF5ZXJzL0NhbnZhcy9TbGljZXMgdXNhYmxlIGF0IGZ1bGwgc2l6ZSwgd2hpY2ggaXMgd2hlbiB5b3UgbW9zdCB3YW50XG4vLyB0aGVtLlxuI3RoZS1ncmlkLmlzLWZ1bGxzY3JlZW4ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6ICR6LWZ1bGxzY3JlZW4tY2FudmFzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itc3VyZmFjZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gVEhFIFdPUktTUEFDRSBJUyBUSEUgV0hPTEUgVklFV1BPUlQsIGFuZCB0aGUgaW1hZ2Ugc2l0cyBpbnNpZGUgaXQuXG4gIC8vXG4gIC8vIGAuaW1nLWNhbnZhc2AgaXMgdGhlIHpvb20vcGFuIFZJRVdQT1JUIChpdCBjbGlwczsgYC5jYW52YXMtd29ybGRgIGlzIHdoYXQgbW92ZXMgaW5zaWRlKS5cbiAgLy8gT3V0IG9mIGZ1bGwgc2NyZWVuIGl0IGlzIHNpemVkIHRvIHRoZSBpbWFnZSdzIG93biBhc3BlY3QsIHdoaWNoIGtlZXBzIHRoZSBwYWdlIGNvbXBhY3Qg4oCUXG4gIC8vIGJ1dCBpbiBmdWxsIHNjcmVlbiB0aGF0IG1hZGUgdGhlIGNoZWNrZXJlZCBhcmVhIGEgbmFycm93IHN0cmlwIGRvd24gdGhlIG1pZGRsZSBmb3IgYVxuICAvLyBwb3J0cmFpdCBpbWFnZSwgd2l0aCBtb3N0IG9mIHRoZSBzY3JlZW4gbGVmdCBlbXB0eS4gTGV0dGluZyB0aGUgdmlld3BvcnQgQkUgdGhlIHZpZXdwb3J0XG4gIC8vIGlzIHdoYXQgXCJmdWxsIHNjcmVlblwiIG1lYW5zLlxuICAvL1xuICAvLyBUaGlzIGlzIHdoeSBgZml0U2NhbGVgIGhhZCB0byBzdGFydCBjb25zaWRlcmluZyBoZWlnaHQ6IHdpdGggYSBjb250YWluZXIgdGhhdCBubyBsb25nZXJcbiAgLy8gbWF0Y2hlcyB0aGUgaW1hZ2UncyBhc3BlY3QsIGZpdHRpbmcgb24gd2lkdGggYWxvbmUgd291bGQgb3ZlcmZsb3cgYSB0YWxsIGltYWdlLlxuICAuY2FudmFzLWxheW91dCxcbiAgLmltZy1jYW52YXMge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwdmg7XG4gIH1cblxuICAvLyBOTyBIQUlSTElORSBJTiBGVUxMIFNDUkVFTiDigJQgaXQgaXMgd2hhdCBtYWRlIFwiZG9uJ3QgbW92ZVwiIGFuZCBcImNlbnRyZWRcIiBkaXNhZ3JlZS5cbiAgLy9cbiAgLy8gYG1hdGNoU2NyZWVuUmVjdGAgcHJlc2VydmVzIHRoZSBkb2N1bWVudCdzIHNjcmVlbiByZWN0LCBhbmQgdGhlIHdvcmtzcGFjZSBjZW50cmVzIHdoYXQgaXNcbiAgLy8gbGVmdCBvdmVyLiBUaG9zZSBhcmUgdGhlIHNhbWUgYW5zd2VyIG9ubHkgaWYgdGhlIHR3byBjb250YWluZXJzJyBDT05URU5UIG9yaWdpbnMgbGluZSB1cCxcbiAgLy8gYW5kIGEgMXB4IGJvcmRlciBvbiBvbmUgc2lkZSBvZiB0aGUgdHJhbnNpdGlvbiBvZmZzZXRzIG9uZSBvZiB0aGVtOiBtZWFzdXJlZCAxLjE3cHggb2ZmXG4gIC8vIGNlbnRyZSB3aXRoIHRoZSBib3JkZXIsIDAuMTdweCB3aXRob3V0LCB3aXRoIHRoZSBudWRnZSBhdCAwLjAwIGVpdGhlciB3YXkuXG4gIC8vXG4gIC8vIE5vdGhpbmcgaXMgbG9zdCB2aXN1YWxseS4gVGhlIGVsZW1lbnQgaXMgYDEwMHZ3YCBwbHVzIGl0cyBib3JkZXIsIHNvIGluIGZ1bGwgc2NyZWVuIHRoaXNcbiAgLy8gbGluZSBzaXRzIG9uIChvciBwYXN0KSB0aGUgc2NyZWVuIGVkZ2Ugd2hlcmUgaXQgY2Fubm90IGJlIHNlZW4uIE91dCBvZiBmdWxsIHNjcmVlbiB0aGVcbiAgLy8gYm9yZGVyIHN0YXlzIOKAlCB0aGVyZSBpdCBmcmFtZXMgdGhlIHdvcmtzcGFjZSBhZ2FpbnN0IHRoZSBwYWdlLlxuICAuaW1nLWNhbnZhcyB7XG4gICAgYm9yZGVyLXdpZHRoOiAwO1xuICB9XG5cbiAgLy8gT05FIGV4cHJlc3Npb24gZm9yIHRoZSBkb2N1bWVudCdzIG9uLXNjcmVlbiBzaXplLCBzbyB0aGUgaW1hZ2UsIHRoZSB3b3JsZCBhbmQgdGhlIGRvY3VtZW50XG4gIC8vIGJhY2tkcm9wIGNhbm5vdCBkcmlmdCBhcGFydC5cbiAgLS1mcy1kb2Mtd2lkdGg6IG1pbigxMDB2dywgY2FsYygxMDB2aCAqIHZhcigtLWZzLWFzcGVjdCwgMikpKTtcblxuICAvLyBgLmNhbnZhcy13b3JsZGAgaXMgdGhlIERPQ1VNRU5ULCBub3QgdGhlIGNvbnRhaW5lci5cbiAgLy9cbiAgLy8gSXQgaXMgYSBwbGFpbiBibG9jaywgc28gaXQgdG9vayBpdHMgd2lkdGggZnJvbSBgLmltZy1jYW52YXNgIOKAlCBmaW5lIHdoaWxlIHRoYXQgd2FzIHNpemVkIHRvXG4gIC8vIHRoZSBpbWFnZSwgd3Jvbmcgbm93IHRoYXQgdGhlIHdvcmtzcGFjZSBpcyB0aGUgd2hvbGUgdmlld3BvcnQuIGAuZ3JpZC1kb2N1bWVudC1iYWNrZHJvcGAgaXNcbiAgLy8gYGluc2V0OiAwYCBvZiB0aGUgd29ybGQsIHNvIGFuIG92ZXItd2lkZSB3b3JsZCBwYWludGVkIHRoZSBkb2N1bWVudCdzIGRhcmtlciBjaGVja2VyIGFjcm9zc1xuICAvLyB0aGUgZW1wdHkgc3BhY2UgYmVzaWRlIHRoZSBpbWFnZTogYSBncmV5IGJhbmQgZnJvbSB0aGUgaW1hZ2UncyByaWdodCBlZGdlIHRvIHdoZXJlIHRoZSBvbGRcbiAgLy8gY29udGFpbmVyIHdpZHRoIHVzZWQgdG8gZW5kLlxuICAuY2FudmFzLXdvcmxkIHtcbiAgICB3aWR0aDogdmFyKC0tZnMtZG9jLXdpZHRoKTtcbiAgfVxuXG4gIC8vIFRoZSBJTUFHRSBmaXRzIElOU0lERSB0aGF0IHdvcmtzcGFjZSwgYnkgaXRzIG93biBhc3BlY3QuXG4gIC8vXG4gIC8vIGAjc2xpY2VJbWdgIGlzIG5vcm1hbGx5IGB3aWR0aDogMTAwJWAgb2YgdGhlIGNhbnZhcywgd2hpY2ggd2FzIHNhZmUgd2hpbGUgdGhlIGNhbnZhcyB3YXNcbiAgLy8gaXRzZWxmIGFzcGVjdC1zaXplZCDigJQgdGhlIHR3byBhZ3JlZWQgYnkgY29uc3RydWN0aW9uLiBOb3cgdGhlIGNhbnZhcyBpcyB0aGUgd2hvbGUgc2NyZWVuLFxuICAvLyBzbyBgMTAwJWAgd291bGQgZml0IHRoZSB3aWR0aCBhbmQgcnVuIGEgcG9ydHJhaXQgaW1hZ2Ugb2ZmIHRoZSBib3R0b20gKG1lYXN1cmVkXG4gIC8vIDEyODB4MjI0MCBpbiBhIDcyMC10YWxsIHZpZXdwb3J0KS4gYC0tZnMtYXNwZWN0YCAodGhlIGltYWdlJ3Mgb3duIHdpZHRoL2hlaWdodCwgc2V0XG4gIC8vIGlubGluZSBieSBBcHApIGlzIHdoYXQgbGV0cyBDU1MgcGljayB0aGUgYmluZGluZyBheGlzLlxuICAvL1xuICAvLyBgbWluKClgIHNjYWxlcyBVUCBhcyB3ZWxsIGFzIGRvd24sIHNvIGEgc21hbGwgaW1hZ2Ugc3RpbGwgZmlsbHMgdGhlIHNjcmVlbiDigJQgd2hpY2hcbiAgLy8gYG1heC13aWR0aC9tYXgtaGVpZ2h0YCBhbG9uZSB3b3VsZCBub3QgZG8uXG4gIC8vIOKaoO+4jyBOZXN0ZWQgdW5kZXIgYC5pbWctY2FudmFzYCBmb3IgU1BFQ0lGSUNJVFksIG5vdCBmb3IgdGlkaW5lc3MuIFRoZSBiYXNlIHJ1bGUgaXNcbiAgLy8gYCN0aGUtZ3JpZCAuaW1nLWNhbnZhcyAjc2xpY2VJbWdgICgyIGlkcyArIDEgY2xhc3MpOyBhIGZsYXRcbiAgLy8gYCN0aGUtZ3JpZC5pcy1mdWxsc2NyZWVuICNzbGljZUltZ2AgdGllcyBpdCBleGFjdGx5IGFuZCB0aGVuIExPU0VTIG9uIHNvdXJjZSBvcmRlcixcbiAgLy8gYmVjYXVzZSB0aGUgYmFzZSBydWxlIHNpdHMgbGF0ZXIgaW4gdGhpcyBmaWxlLiBNZWFzdXJlZDogdGhlIGltYWdlIHN0YXllZCAxMjgweDIyNDAuXG4gIC5pbWctY2FudmFzICNzbGljZUltZyB7XG4gICAgd2lkdGg6IHZhcigtLWZzLWRvYy13aWR0aCk7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbi8vIOKaoO+4jyBUaGUgcGFnZSBtdXN0IG5vdCBTQ1JPTEwgd2hpbGUgZnVsbCBzY3JlZW4gaXMgdXAuXG4vL1xuLy8gYCN0aGUtZ3JpZGAgZ29lcyBgcG9zaXRpb246IGZpeGVkYCwgd2hpY2ggdGFrZXMgdGhlIHRhbGwgZG9jdW1lbnQgb3V0IG9mIHRoZSBmbG93IOKAlCB0aGUgcGFnZVxuLy8gY29sbGFwc2VzIGFuZCB0aGUgYnJvd3NlciBjbGFtcHMgdGhlIHNjcm9sbCB0byAwLiBMZWF2aW5nIHRoZW4gcmVzdG9yZXMgYSB0YWxsIHBhZ2UgYXQgYVxuLy8gZGlmZmVyZW50IHNjcm9sbCBvZmZzZXQsIHNvIGV2ZXJ5dGhpbmcgaW4gdGhlIGZsb3cgY29tZXMgYmFjayBzb21ld2hlcmUgZWxzZTogdGhlIHRvb2xiYXInc1xuLy8gcmVzdGluZyBwb3NpdGlvbiBtZWFzdXJlZCAxMTkgb24gdGhlIHdheSBpbiBhbmQgMjE1IG9uIHRoZSB3YXkgb3V0LCB3aGljaCBtYWRlIHRoZSBjbG9zaW5nXG4vLyBhbmltYXRpb24gYWltIGF0IHRoZSB3cm9uZyBwbGFjZS4gRnJlZXppbmcgdGhlIHNjcm9sbCBrZWVwcyB0aGUgZmxvdyBleGFjdGx5IHdoZXJlIGl0IHdhcywgc29cbi8vIHdoYXQgaXMgY2FwdHVyZWQgb24gdGhlIHdheSBpbiBpcyBzdGlsbCB0cnVlIG9uIHRoZSB3YXkgb3V0LlxuYm9keS5hcHAtZnVsbHNjcmVlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIFRoZSBwYWdlIGNocm9tZSBpcyBDT1ZFUkVEIGluIGZ1bGwgc2NyZWVuLCBub3QgcmVtb3ZlZCDigJQgdGhlIHdvcmtzcGFjZSBpcyBwYWludGVkIG92ZXIgaXQuXG4vLyBGYWRpbmcgaXQgbWVhbnMgbGVhdmluZyBmdWxsIHNjcmVlbiBicmluZ3MgdGhlIGhlYWRpbmcgYW5kIGluc3RydWN0aW9uIGxpbmUgYmFjayBvdmVyIGFcbi8vIG1vbWVudCBpbnN0ZWFkIG9mIHNuYXBwaW5nIHRoZW0gaW4sIHdoaWNoIGlzIHRoZSBvbmUgaGFyZCBlZGdlIGxlZnQgb24gdGhlIHdheSBvdXQuXG4vL1xuLy8gRW50ZXJpbmcgaXMgdW5hZmZlY3RlZCBlaXRoZXIgd2F5OiB0aGUgd29ya3NwYWNlIGNvdmVycyB0aGVzZSBiZWZvcmUgdGhlIGZhZGUgY291bGQgYmUgc2Vlbi5cbi5sb2dvLFxuaDIsXG4jZHluYW1pYy10ZXh0IHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMjBtcyBlYXNlO1xufVxuXG4vLyDimqDvuI8gSVRTIE9XTiBDTEFTUywgTk9UIGBhcHAtZnVsbHNjcmVlbmAg4oCUIHRoZSB0d28gaGF2ZSBkaWZmZXJlbnQgTElGRVRJTUVTLlxuLy9cbi8vIGBhcHAtZnVsbHNjcmVlbmAgbXVzdCBzdXJ2aXZlIHRoZSB3aG9sZSBjbG9zaW5nIGFuaW1hdGlvbiAodGhlIHdvcmtzcGFjZSBoYXMgdG8gc3RheVxuLy8gYHBvc2l0aW9uOiBmaXhlZGAgb3IgdGhlcmUgaXMgbm90aGluZyBjb3ZlcmluZyB0aGUgdmlld3BvcnQgbGVmdCB0byB3aXBlIHNodXQpLCBzbyBoYW5naW5nXG4vLyB0aGUgaGVhZGluZydzIG9wYWNpdHkgb2ZmIGl0IG1lYW50IHRoZSBmYWRlIGNvdWxkIG5vdCBiZWdpbiB1bnRpbCB0aGF0IGFuaW1hdGlvbiBoYWRcbi8vIEVOREVELiBNZWFzdXJlZDogdGhlIHdpcGUgYW5kIHRoZSB0b29sYmFyIGJvdGggZmluaXNoZWQgYXQgdD0zMDFtcyB3aXRoIHRoZSBoZWFkaW5nIHN0aWxsXG4vLyBhdCBvcGFjaXR5IDAsIHdoaWNoIG9ubHkgdGhlbiB0b29rIGFub3RoZXIgMjEwbXMgdG8gY29tZSBiYWNrIOKAlCBhIDUyMG1zIGV4aXQgbWFkZSBvZiB0d29cbi8vIGRpc2Nvbm5lY3RlZCBiZWF0cyBhZ2FpbnN0IGEgMjgwbXMgZW50cnkgbWFkZSBvZiBvbmUuIFRoYXQgZ2FwIGlzIHdoYXQgcmVhZHMgYXMgdGhlIGhlYWRpbmdcbi8vIFwicmVhcHBlYXJpbmcgb3V0IG9mIG5vd2hlcmVcIi5cbi8vXG4vLyBUaGlzIGNsYXNzIGlzIGRyb3BwZWQgd2hlbiB0aGUgY2xvc2UgU1RBUlRTIGluc3RlYWQsIHNvIHRoZSBjaHJvbWUgZmFkZXMgdXAgVU5ERVJORUFUSCB0aGVcbi8vIGNsb3Npbmcgd2lwZSDigJQgdGhlIG1pcnJvciBvZiB0aGUgd2F5IGl0IGZhZGVzIG91dCB1bmRlcm5lYXRoIHRoZSBvcGVuaW5nIG9uZS4gVGhlIGNsaXBcbi8vIHVuY292ZXJzIHRoZSBoZWFkaW5nIGFyb3VuZCB0PTk1bXMsIGJ5IHdoaWNoIHBvaW50IGl0IGlzIGFscmVhZHkgfjQwJSBpbi5cbmJvZHkuYXBwLWNocm9tZS1oaWRkZW4gLmxvZ28sXG5ib2R5LmFwcC1jaHJvbWUtaGlkZGVuIGgyLFxuYm9keS5hcHAtY2hyb21lLWhpZGRlbiAjZHluYW1pYy10ZXh0IHtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8g4pqg77iPIFRIRSBGT09URVInUyBMSUZFVElNRSBJUyBgYXBwLWZ1bGxzY3JlZW5gLCBOT1QgYGFwcC1jaHJvbWUtaGlkZGVuYC5cbi8vXG4vLyBgI3RoZS1ncmlkYCBnb2VzIGBwb3NpdGlvbjogZml4ZWRgIGluIGZ1bGwgc2NyZWVuLCB3aGljaCB0YWtlcyB0aGUgdGFsbCBkb2N1bWVudCBvdXQgb2YgdGhlXG4vLyBmbG93IGFuZCBDT0xMQVBTRVMgdGhlIHBhZ2Ug4oCUIGBkb2N1bWVudC5zY3JvbGxIZWlnaHRgIG1lYXN1cmVkIDE2MjEgLT4gODYwLiBFdmVyeXRoaW5nIHN0aWxsXG4vLyBpbiB0aGUgZmxvdyByaWRlcyB1cCB3aXRoIGl0OiB0aGUgZm9vdGVyIGxpbmtzIG1vdmUgZnJvbSBiZWxvdyB0aGUgd29ya3NwYWNlIHRvICoqeT0xMjYqKixcbi8vIGRpcmVjdGx5IGJlaGluZCB0aGUgZmxvYXRpbmcgdG9vbGJhci4gVGhleSB3ZXJlIGludmlzaWJsZSBvbmx5IGJlY2F1c2UgdGhlIHRvb2xiYXIgY2FyZCdzXG4vLyBvcGFxdWUgYmFja2dyb3VuZCBoYXBwZW5lZCB0byBjb3ZlciB0aGVtLCBzbyB0aGUgbW9tZW50IHRoZSBjbG9zZSBiZWdhbiBhbmltYXRpbmcgdGhhdFxuLy8gYmFja2dyb3VuZCBhd2F5IHRoZXkgc2hvd2VkIHRocm91Z2ggYmV0d2VlbiB0aGUgYnV0dG9ucy5cbi8vXG4vLyBUaGlzIGlzIHdoeSBpdCBjYW5ub3Qgam9pbiB0aGUgaGVhZGluZyBvbiBgYXBwLWNocm9tZS1oaWRkZW5gLCB3aGljaCBpcyBkcm9wcGVkIHdoZW4gdGhlXG4vLyBjbG9zZSBTVEFSVFM6IHRoYXQgd291bGQgZmFkZSB0aGUgbGlua3MgYmFjayBpbiB3aGlsZSB0aGV5IGFyZSBzdGlsbCBwYXJrZWQgYXQgdGhlIHRvcCwgd2hpY2hcbi8vIGlzIHRoZSBidWcgcmF0aGVyIHRoYW4gdGhlIGZpeC4gVGhlIGZvb3RlciBoYXMgdG8gc3RheSBoaWRkZW4gdW50aWwgdGhlIGdyaWQgaXMgYmFjayBpbiB0aGVcbi8vIGZsb3cgYW5kIGl0IGhhcyBkcm9wcGVkIHRvIHdoZXJlIGl0IGJlbG9uZ3Mg4oCUIGV4YWN0bHkgd2hhdCBgYXBwLWZ1bGxzY3JlZW5gIG1hcmtzIOKAlCBhbmQgb25seVxuLy8gdGhlbiBmYWRlIGluLCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG4uZmVlZGJhY2sge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIyMG1zIGVhc2U7XG59XG5cbmJvZHkuYXBwLWZ1bGxzY3JlZW4gLmZlZWRiYWNrIHtcbiAgb3BhY2l0eTogMDtcblxuICAvLyBOb3QgbWVyZWx5IGludmlzaWJsZS4gYGNsaXAtcGF0aGAgY2xpcHMgSElULVRFU1RJTkcgYXMgd2VsbCBhcyBwYWludCwgc28gYXMgdGhlIGNsb3NpbmdcbiAgLy8gd2lwZSBzaHJpbmtzIHRoZSB3b3Jrc3BhY2UgaXQgb3BlbnMgYSBnYXAgdGhlc2UgbGlua3Mgd291bGQgb3RoZXJ3aXNlIGJlIGNsaWNrYWJsZSB0aHJvdWdoLlxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgLmxvZ28sXG4gIGgyLFxuICAjZHluYW1pYy10ZXh0LFxuICAuZmVlZGJhY2sge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cbn1cblxuLy8gVGhlIHRvb2xiYXIgcmlkZXMgYWJvdmUgdGhlIGNhbnZhcyBpbnN0ZWFkIG9mIHB1c2hpbmcgaXQgZG93biwgc28gbm90aGluZyBpcyBsb3N0IHRvIGNocm9tZS5cbmJvZHkuYXBwLWZ1bGxzY3JlZW4gI21lbnUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogOHB4O1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogJHotZnVsbHNjcmVlbi10b29sYmFyO1xuXG4gIC8vIOKaoO+4jyBgbWF4LWNvbnRlbnRgLCBvciB0aGUgYmFyIFdSQVBTLiBSb3cgMSBpcyBhIHNpbmdsZSByb3cgYnkgZGVmaW5pdGlvblxuICAvLyAoYHRvb2xiYXJMYXlvdXQudHNgKSwgYnV0IGZsb2F0aW5nIHRoZSBiYXIgdG9vayBhd2F5IHRoZSBwYWdlLXdpZGUgd2lkdGggaXQgaGFkIGJlZW5cbiAgLy8gcmVseWluZyBvbjogYXQgYSBjb250ZW50LWJveCB3aWR0aCwgYENob3BgJ3MgYG1hcmdpbi1sZWZ0OiBhdXRvYCBwdXNoZWQgaXQgb250byBhIHNlY29uZFxuICAvLyBsaW5lLiBTaXppbmcgdG8gdGhlIHJvdydzIG5hdHVyYWwgd2lkdGgga2VlcHMgdGhlIGNvbGxhcHNlZCB0b29sYmFyIG9uZSByb3csIGFuZCB0aGUgY2FwXG4gIC8vIHN0aWxsIHN0b3BzIGl0IHJ1bm5pbmcgb2ZmIGEgbmFycm93IHNjcmVlbi5cbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAxNnB4KTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm94LXNoYWRvdzogMCAycHggMTRweCByZ2IoMCAwIDAgLyAxOCUpO1xuICBwYWRkaW5nOiA2cHggOHB4O1xufVxuXG4jdGhlLWdyaWQge1xuICAvKipcbiAgICogQ2hlY2tlcmJvYXJkIHBoYXNlLCBpbmhlcml0ZWQgYnkgQk9USCBjaGVja2VycyDigJQgdGhlIG91dC1vZi1ib3VuZHMgb25lIG9uXG4gICAqIGAuaW1nLWNhbnZhcy16b29tcGFuYCBhbmQgdGhlIGRvY3VtZW50J3Mgb3duIGJhY2tkcm9wIGluc2lkZSBgLmNhbnZhcy13b3JsZGAuXG4gICAqXG4gICAqIOKaoO+4jyBERUNMQVJFRCBPTiBUSEUgQU5DRVNUT1IsIE5PVCBPTiBUSEUgRUxFTUVOVFMgVEhBVCBSRUFEIElULiBBcHAgb3ZlcnJpZGVzIHRoZXNlIGlubGluZVxuICAgKiBvbiBgI3RoZS1ncmlkYCB3aGlsZSBmdWxsIHNjcmVlbiBpcyB1cDsgYSBkZWNsYXJhdGlvbiBvbiBhIGNvbnN1bWVyIHdvdWxkIGJlIHRoYXRcbiAgICogZWxlbWVudCdzIE9XTiB2YWx1ZSBhbmQgd291bGQgYmVhdCB0aGUgaW5oZXJpdGVkIG9uZSwgc28gdGhlIG92ZXJyaWRlIHdvdWxkIHNpbGVudGx5IGRvXG4gICAqIG5vdGhpbmcgZm9yIHRoZSB2ZXJ5IGVsZW1lbnQgaXQgd2FzIG1lYW50IHRvIG1vdmUuXG4gICAqXG4gICAqIOKaoO+4jyBBbmQgYSB1bml0IG9uIHRoZSB6ZXJvLCBub3QgYSBgdmFyKC4uLiwgMHB4KWAgZmFsbGJhY2s6IGJvdGggZmVlZCBgY2FsYygpYCwgd2hlcmUgYVxuICAgKiB1bml0bGVzcyB6ZXJvIGlzIGludmFsaWQgKGBjYWxjKDAgKyAxOHB4KWAgZG9lcyBub3QgcGFyc2UpLCB3aGlsZSBhIGAwcHhgIGxpdGVyYWwgaW4gYVxuICAgKiBmYWxsYmFjayB0cmlwcyBzdHlsZWxpbnQncyBgbGVuZ3RoLXplcm8tbm8tdW5pdGAuIEEgY3VzdG9tIHByb3BlcnR5IHNhdGlzZmllcyBib3RoLlxuICAgKi9cbiAgLS1jaGVja2VyLXBoYXNlLXg6IDBweDtcbiAgLS1jaGVja2VyLXBoYXNlLXk6IDBweDtcblxuICBtYXJnaW46IDEwcHggYXV0bztcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgbWluLWhlaWdodDogJGNhbnZhcy1taW4taGVpZ2h0O1xuXG4gIC5pbWctY2FudmFzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAvLyBTYWFhYWZhYXJycnJpIG5vdCBGZXJyYXJpXG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB3aWR0aDogJGltZy1jYW52YXMtd2lkdGg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgI3NsaWNlSW1nIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICAgLy8gU2FhYWFmYWFycnJyaSBub3QgRmVycmFyaVxuICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRW5zdXJlIG92ZXJsYXlzIChzbmFwL2NsYW1wIGd1aWRlcywgc2VsZWN0LWFyZWEgY2hyb21lKSBwb3NpdGlvbiBjb3JyZWN0bHlcbi8vIGV2ZW4gaWYgYC5pbWctY2FudmFzYCBpcyB1c2VkIG91dHNpZGUgYCN0aGUtZ3JpZGAuXG4uaW1nLWNhbnZhcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8gWm9vbS9QYW4gdmlld3BvcnQgd3JhcHBlcjpcbi8vIC0gYC5pbWctY2FudmFzYCByZW1haW5zIHRoZSB1bnRyYW5zZm9ybWVkIGxheW91dCBib3ggKHVzZWQgZm9yIHNsaWNlIG1hdGggKyBleHBvcnRzKS5cbi8vIC0gYC5jYW52YXMtd29ybGRgIGlzIHRyYW5zZm9ybWVkICh0cmFuc2xhdGUrc2NhbGUpIHRvIHByb3ZpZGUgdmlzdWFsIHpvb20vcGFuLlxuLmltZy1jYW52YXMtem9vbXBhbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLy8gUHJldmVudCBicm93c2VyIHNjcm9sbC96b29tIGdlc3R1cmVzIGZyb20gaGlqYWNraW5nIHdoZWVsL3BpbmNoIGludGVyYWN0aW9ucyBvdmVyIHRoZSBjYW52YXMuXG4gIHRvdWNoLWFjdGlvbjogbm9uZTtcblxuICAvLyBTYWZhcmkvV2ViS2l0OiBtaXRpZ2F0ZSBvY2Nhc2lvbmFsIHRyYW5zZm9ybSByYXN0ZXJpemF0aW9uIGFydGlmYWN0cyAoYSBcInR1bm5lbFwiIC8gYWZ0ZXJpbWFnZSlcbiAgLy8gYXJvdW5kIHRoZSBjYW52YXMgd2hlbiB6b29tZWQgb3V0LiBGb3JjaW5nIGxheWVyIGlzb2xhdGlvbi9jb21wb3NpdGluZyBoZWxwcy5cbiAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICBjb250YWluOiBwYWludDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIE9VVCBPRiBCT1VORFM6IHNxdWFyZXMgYXQgRE9VQkxFIHRoZSBkb2N1bWVudCdzLCBhbmQgZmFpbnRlci4gVHdvIGRpZmZlcmVudCB0aGluZ3MgbXVzdFxuICAvLyBub3QgbG9vayB0aGUgc2FtZSDigJQgaW5zaWRlIG1lYW5zIFwidHJhbnNwYXJlbnQgaGVyZVwiLCBvdXRzaWRlIG1lYW5zIFwibm90IHBhcnQgb2YgeW91ciBpbWFnZVxuICAvLyBhdCBhbGxcIiwgYW5kIG9uZSBzaGFyZWQgcGF0dGVybiBtYWRlIHRoZSBkb2N1bWVudCdzIGVkZ2UgZ2VudWluZWx5IGhhcmQgdG8gZmluZCB3aXRoIGFcbiAgLy8gbGF5ZXIgaGFuZ2luZyBvdmVyIGl0LlxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItY2FudmFzLWNoZWNrZXItYmc7XG4gIGJhY2tncm91bmQtaW1hZ2U6XG4gICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuMDQpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsIHJnYmEoMCwgMCwgMCwgMC4wNCkgNzUlLCByZ2JhKDAsIDAsIDAsIDAuMDQpKSxcbiAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMCwgMCwgMCwgMC4wNCkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgcmdiYSgwLCAwLCAwLCAwLjA0KSA3NSUsIHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDM2cHggMzZweDtcblxuICAvLyBQaGFzZSwgbm90IGEgZml4ZWQgb3JpZ2luLiBUaGVzZSBhcmUgMCBldmVyeXdoZXJlIGV4Y2VwdCBmdWxsIHNjcmVlbiwgd2hlcmUgQXBwIG92ZXJyaWRlc1xuICAvLyB0aGVtIG9uIGAjdGhlLWdyaWRgIHdpdGggdGhlIGRpc3RhbmNlIHRoaXMgZWxlbWVudCdzIG9yaWdpbiBtb3ZlZCDigJQgb3RoZXJ3aXNlIGV2ZXJ5IHRpbGVcbiAgLy8ganVtcHMgd2hlbiB0aGUgdmlld3BvcnQgZ29lcyBmcm9tIHRoZSBjb2x1bW4gdG8gdGhlIHdob2xlIHNjcmVlbi4gVGhlIGRvY3VtZW50J3Mgb3duXG4gIC8vIGNoZWNrZXIgYXBwbGllcyB0aGUgc2FtZSB2YWx1ZTsgc2VlIGBncmlkLWRvY3VtZW50LWJhY2tkcm9wYCBpbiBJbWFnZVNsaWNlci5cbiAgLy9cbiAgYmFja2dyb3VuZC1wb3NpdGlvbjpcbiAgICB2YXIoLS1jaGVja2VyLXBoYXNlLXgpIHZhcigtLWNoZWNrZXItcGhhc2UteSksXG4gICAgY2FsYyh2YXIoLS1jaGVja2VyLXBoYXNlLXgpICsgMThweCkgY2FsYyh2YXIoLS1jaGVja2VyLXBoYXNlLXkpICsgMThweCk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCk7XG59XG5cbi5pbWctY2FudmFzLXpvb21wYW4tc3BhY2Uge1xuICBjdXJzb3I6IGdyYWI7XG5cbiAgLy8gRHVyaW5nIFwiaGFuZCB0b29sXCIgbW9kZSAoU3BhY2UgaGVsZCksIGZvcmNlIHRoZSBjdXJzb3IgdG8gcmVmbGVjdCBwYW5uaW5nIGV2ZW4gd2hlbiBob3ZlcmluZ1xuICAvLyBlbGVtZW50cyB0aGF0IG5vcm1hbGx5IHNldCB0aGVpciBvd24gY3Vyc29yIChlLmcuIG1vdmUvcmVzaXplIGhhbmRsZXMpLlxuICAuY2FudmFzLXdvcmxkLFxuICAuc2VsZWN0LWFyZWFzLW92ZXJsYXksXG4gIC5zZWxlY3QtYXJlYXMtc2xpY2Utd3JhcCxcbiAgLnNlbGVjdC1hcmVhcy1vdXRsaW5lLFxuICAuc2VsZWN0LWFyZWFzLXJlc2l6ZS1oYW5kbGVyLFxuICAuZGVsZXRlLWFyZWEsXG4gIC5zZWxlY3QtYXJlYXMtZGVsZXRlLWFyZWEge1xuICAgIGN1cnNvcjogZ3JhYiAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5pbWctY2FudmFzLXpvb21wYW4tcGFubmluZyB7XG4gIGN1cnNvcjogZ3JhYmJpbmc7XG5cbiAgLmNhbnZhcy13b3JsZCxcbiAgLnNlbGVjdC1hcmVhcy1vdmVybGF5LFxuICAuc2VsZWN0LWFyZWFzLXNsaWNlLXdyYXAsXG4gIC5zZWxlY3QtYXJlYXMtb3V0bGluZSxcbiAgLnNlbGVjdC1hcmVhcy1yZXNpemUtaGFuZGxlcixcbiAgLmRlbGV0ZS1hcmVhLFxuICAuc2VsZWN0LWFyZWFzLWRlbGV0ZS1hcmVhIHtcbiAgICBjdXJzb3I6IGdyYWJiaW5nICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmNhbnZhcy13b3JsZCB7XG4gIC8vIE11c3QgcmVtYWluIGluIG5vcm1hbCBmbG93IHNvIGAuaW1nLWNhbnZhc2AgcmV0YWlucyB0aGUgaW1hZ2UgaGVpZ2h0LlxuICAvLyBJZiB0aGlzIGJlY29tZXMgYHBvc2l0aW9uOmFic29sdXRlYCwgdGhlIHBhcmVudCBjYW4gY29sbGFwc2UgdG8gMCBoZWlnaHQgYW5kIHRoZVxuICAvLyBhY3RpdmUtc2xpY2UgY3JvcCBwcmV2aWV3IHdpbGwgbG9vayBsaWtlIGEgd2hpdGUgYm94IChiYWNrZ3JvdW5kLXNpemUgYmVjb21lcyAwKS5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogdmFyKC0tei1jYW52YXMtd29ybGQpO1xuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uY2FudmFzLWxheW91dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi8vIERlbGV0ZSBjb250cm9scyBwb3J0YWxlZCBoZXJlIHNvIHRoZXkgY2FuIGV4dGVuZCBwYXN0IGAuaW1nLWNhbnZhc2Agb3ZlcmZsb3cgY2xpcHBpbmcuXG4uc2xpY2UtZGVsZXRlLWVzY2FwZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IHZhcigtLXotY2FudmFzLW92ZXJsYXkpO1xuXG4gIC5kZWxldGUtYXJlYSxcbiAgLnNlbGVjdC1hcmVhcy1kZWxldGUtaG9zdCB7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIH1cbn1cblxuLmNhbnZhcy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG5cbiAgLy8gQWJvdmUgdGhlIGltYWdlL3dvcmxkIGNvbnRlbnQsIGJlbG93IHRoZSBTcGFjZStkcmFnIGhpdCBzdXJmYWNlIChpbmxpbmUgei1pbmRleDogOTk5NikuXG4gIHotaW5kZXg6IHZhcigtLXotY2FudmFzLW92ZXJsYXkpO1xuXG4gIC8vIExldCBjbGlja3MgZmFsbCB0aHJvdWdoIHRvIHRoZSBhY3R1YWwgY2FudmFzIG92ZXJsYXkgKG5ldy1zbGljZSBjcmVhdGlvbiksXG4gIC8vIGJ1dCBzdGlsbCBhbGxvdyBleHBsaWNpdCBpbnRlcmFjdGl2ZSBjaHJvbWUgKGhhbmRsZXMvZGVsZXRlKSB0byBvcHQtaW4uXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAkY29udGFpbmVyLXdpZHRoO1xuICBtYXJnaW46IDAgYXV0bztcblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAkY29udGFpbmVyLWgyLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIGgzIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIH1cbn1cblxuLy8gQSBzbGljZSB0aWNrZWQgaW4gdGhlIFNsaWNlcyBwYW5lbC4gVGhlIG1hcmNoaW5nIGFudHMgc3RheSDigJQgdGhleSBzYXkgXCJ0aGlzIGlzIGEgc2xpY2VcIixcbi8vIHNlbGVjdGVkIG9yIG5vdCDigJQgYW5kIHNlbGVjdGlvbiBpcyBjYXJyaWVkIGJ5IGFuIGFtYmVyIHdhc2ggYW5kIHJpbmcuXG4vL1xuLy8gQW1iZXIsIG5vdCBncmVlbjogZ3JlZW4gaXMgdGhlIERPQ1VNRU5UIEJPVU5EQVJZIChhbmQgcGFuZWwgYWN0aXZlIHJvd3MpLCBzbyBhIGdyZWVuIHJpbmdcbi8vIHJvdW5kIGEgc2xpY2UgcmVhZHMgYXMgYSBjYW52YXMgZWRnZS4gTm90IHB1cnBsZSBlaXRoZXIg4oCUIHRoYXQgaXMgbGF5ZXIgY2hyb21lLiBTZWUgdGhlXG4vLyBgJGNvbG9yLXNsaWNlLXNlbGVjdGAgY29tbWVudCBmb3IgdGhlIGZvdXItdm9jYWJ1bGFyeSBydWxlLlxuLy9cbi8vIDFweCwgbWF0Y2hpbmcgdGhlIG1hcmNoaW5nIGFudHMgYW5kIHRoZSBjYW52YXMgYm91bmRhcnkgcmF0aGVyIHRoYW4gdGhlIDJweCBsYXllciBmcmFtZVxuLy8gKHVzZXIsIDIwMjYtMDktMDYpLiBJdCB3YXMgMnB4LCBhbmQgYWdhaW5zdCB0aGUgYW50cyDigJQgd2hpY2ggYXJlIDFweCDigJQgdGhlIHJpbmdlZCBzbGljZXNcbi8vIHJlYWQgYXMgaGVhdmllciB0aGFuIHRoZSBhY3RpdmUgb25lIHNpdHRpbmcgcmlnaHQgbmV4dCB0byB0aGVtLiBFdmVyeXRoaW5nIGRyYXduIGFyb3VuZCBhXG4vLyBTTElDRSBpcyBub3cgb25lIGhhaXJsaW5lIHdlaWdodDsgY29sb3VyIGNhcnJpZXMgdGhlIG1lYW5pbmcsIG5vdCB0aGlja25lc3MuXG4vL1xuLy8gTm8gMS9rIGNvdW50ZXItc2NhbGluZyBoZXJlOiB1bmxpa2UgdGhlIGNhbnZhcyBib3VuZGFyeSBhbmQgdGhlIGxheWVyIGNocm9tZSwgc2xpY2Vcbi8vIHByZXZpZXdzIGFyZSBsYWlkIG91dCBpbiBzY3JlZW4gcGl4ZWxzLCBzbyB0aGlzIGlzIGFscmVhZHkgMSBzY3JlZW4gcHggYXQgYW55IHpvb20uXG4vLyBUaGUgYm91bmRpbmcgYm94IGFyb3VuZCBhIG11bHRpLXNlbGVjdGlvbjogd2hhdCB3b3VsZCBtb3ZlIHRvZ2V0aGVyLlxuLy9cbi8vIERyYXduIGluIHRoZSBzYW1lIGFtYmVyIGFzIHRoZSBwZXItc2xpY2UgcmluZ3Mgc28gdGhlIHR3byByZWFkIGFzIG9uZSBpZGVhIOKAlCB0aGUgcmluZ3Mgc2F5XG4vLyBXSElDSCBzbGljZXMsIHRoZSBib3ggc2F5cyBXSEFUIE1PVkVTIFRPR0VUSEVSIOKAlCBhbmQgZGFzaGVkIHJhdGhlciB0aGFuIHNvbGlkIHNvIGl0IGlzIG5vdFxuLy8gbWlzdGFrZW4gZm9yIGEgc2xpY2UsIHdoaWNoIGlzIHRoZSBvbmUgdGhpbmcgb24gdGhpcyBjYW52YXMgYSBzb2xpZCByZWN0YW5nbGUgYWxyZWFkeSBtZWFucy5cbi8vXG4vLyBEZWxpYmVyYXRlbHkgaGFzIE5PIGhhbmRsZXMuIEl0IGRyYXdzLCBhbmQgbm90aGluZyBtb3JlOiBoYW5kbGVzIHdvdWxkIHByb21pc2UgYSBkcmFnIHRoYXRcbi8vIGRvZXMgbm90IGV4aXN0IHlldCwgYW5kIGEgbHlpbmcgYWZmb3JkYW5jZSBpcyB3b3JzZSB0aGFuIGEgbWlzc2luZyBvbmUuXG4vLyBUaGUgcnViYmVyIGJhbmQgaXRzZWxmLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBhbWJlciBvZiBhIHNsaWNlIHNlbGVjdGlvbjogdGhpcyBib3ggaXMgdGhlXG4vLyBnZXN0dXJlLCBub3QgdGhlIHJlc3VsdCwgYW5kIGl0IGRpc2FwcGVhcnMgb24gcmVsZWFzZS4gSXQgYWxzbyBuZXZlciB0YWtlcyBhIHBvaW50ZXIgZXZlbnQg4oCUXG4vLyBpdCBzaXRzIHVuZGVyIHRoZSBjdXJzb3IgZm9yIHRoZSB3aG9sZSBkcmFnLlxuLnNsaWNlLW1hcnF1ZWUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBib3JkZXI6IDFweCBkYXNoZWQgJGNvbG9yLWdyZWVuLWxpbms7XG4gIGJhY2tncm91bmQ6IHJnYigwIDAgMCAvIDQlKTtcbiAgei1pbmRleDogdmFyKC0tei1zbGljZS1zZWxlY3Rpb24td2FzaCwgMTAzKTtcbn1cblxuLnNsaWNlLWdyb3VwLWJveCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm9yZGVyOiAxcHggZGFzaGVkICRjb2xvci1zbGljZS1zZWxlY3Q7XG4gIHotaW5kZXg6IHZhcigtLXotc2xpY2Utc2VsZWN0aW9uLXdhc2gsIDEwMyk7XG5cbiAgLy8g4pqg77iPIFBVUkVMWSBWSVNVQUwuIEl0IG11c3QgbmV2ZXIgdGFrZSBhIHBvaW50ZXIgZXZlbnQuXG4gIC8vXG4gIC8vIFN0YWdlIDIgbWFkZSB0aGUgYm9keSBkcmFnZ2FibGUsIGFuZCBpdCBjb3N0IHR3byBidWdzLiBJdCBzd2FsbG93ZWQgcHJlc3NlcyBvbiB0aGUgQUNUSVZFXG4gIC8vIHNsaWNlJ3MgbmVpZ2hib3VycyAoc28gdGhlIGdyb3VwIG1vdmVkIGZyb20gb25lIG1lbWJlciBhbmQgYSBzaW5nbGUgc2xpY2UgbW92ZWQgZnJvbVxuICAvLyBhbm90aGVyIOKAlCBzYW1lIGdlc3R1cmUsIHR3byBtZWFuaW5ncyksIGFuZCB3b3JzZSwgaXQgbWFkZSBhbnkgVU5TRUxFQ1RFRCBzbGljZSBzaXR0aW5nXG4gIC8vIGluc2lkZSBpdHMgYm91bmRzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGU6IHRoZSBib3ggY292ZXJlZCBpdCBhbmQgdGhlIGNsaWNrIGRpZWQgdGhlcmUuXG4gIC8vXG4gIC8vIERyYWdnaW5nIGlzIG93bmVkIGJ5IHRoZSBzbGljZXMgdGhlbXNlbHZlcyDigJQgZ3JhYiBhbnkgbWVtYmVyLCB0aGUgZ3JvdXAgbW92ZXMuIFRoZSBib3hcbiAgLy8ganVzdCBzYXlzIHdoYXQgaXMgY29taW5nIHdpdGggeW91LlxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnNlbGVjdC1hcmVhcy1zbGljZS13cmFwLmlzLXNlbGVjdGVkOjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgLy8g4pqg77iPIGBpbnNldDogMXB4YCwgTk9UIDAg4oCUIGl0IG11c3Qgc3RvcCBzaG9ydCBvZiB0aGUgbWFyY2hpbmcgYW50cy5cbiAgLy9cbiAgLy8gVGhlIGFudHMgYXJlIDFweCBvbiB0aGUgb3V0bGluZSdzIG93biBlZGdlLCBhbmQgdGhpcyBvdmVybGF5IHNoYXJlcyB0aGVpciB6LWluZGV4ICgxMDApLlxuICAvLyBBIHBhcmVudCdzIDo6YWZ0ZXIgcGFpbnRzIEFGVEVSIGl0cyBjaGlsZHJlbiBhdCBlcXVhbCB6LWluZGV4LCBzbyBhdCBgaW5zZXQ6IDBgIHRoZSB3YXNoXG4gIC8vIGNvdmVyZWQgdGhlbSBhbmQgdGhlIGRhc2hlcyBmbGF0dGVuZWQgaW50byBhIHNvbGlkIGVkZ2UuIGBzbGljZS1ob3Zlci5wd3NwZWMudHNgIG1lYXN1cmVzXG4gIC8vIHRoYXQgZGlyZWN0bHkg4oCUIGVkZ2UgY3Jvc3NpbmdzIGNvbGxhcHNlZCBmcm9tID4yMCB0byA0IOKAlCBhbmQgb25seSBzdGFydGVkIGZhaWxpbmcgb25jZVxuICAvLyBuZXdseSBkcmF3biBzbGljZXMgYmVjYW1lIHNlbGVjdGVkLCBiZWNhdXNlIHVudGlsIHRoZW4gbm90aGluZyB3YXMgZXZlciBib3RoIGZyZXNobHkgZHJhd25cbiAgLy8gQU5EIG92ZXJsYWlkLlxuICAvL1xuICAvLyBQdWxsaW5nIGluIGEgcGl4ZWwgbGVhdmVzIHRoZSBhbnRzIHVudG91Y2hlZCBhbmQgcHV0cyB0aGUgYW1iZXIgcmluZyBpbW1lZGlhdGVseSBpbnNpZGVcbiAgLy8gdGhlbSwgd2hpY2ggaXMgYWxzbyB3aGVyZSBpdCByZWFkcyBiZXN0OiB0d28gMXB4IGxpbmVzIHJhdGhlciB0aGFuIG9uZSBmaWdodGluZyB0aGUgb3RoZXIuXG4gIGluc2V0OiAxcHg7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itc2xpY2Utc2VsZWN0LXNvZnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCAkY29sb3Itc2xpY2Utc2VsZWN0O1xuXG4gIC8vIOKaoO+4jyBBQk9WRSB0aGUgYWN0aXZlIHNsaWNlJ3MgY3JvcCBwcmV2aWV3LCBub3QgbGV2ZWwgd2l0aCB0aGUgb3V0bGluZS5cbiAgLy9cbiAgLy8gVGhpcyByZXVzZWQgYC0tei1zbGljZS1vdXRsaW5lLWFjdGl2ZWAgKDEwMCksIHdoaWNoIHNpdHMgQkVMT1cgYC0tei1zbGljZS1iZy1hY3RpdmVgXG4gIC8vICgxMDIpIOKAlCBzbyBvbiB0aGUgQUNUSVZFIHNsaWNlIHRoZSBjcm9wIHBhaW50ZWQgb3ZlciB0aGUgd2FzaCBhbmQgdGhhdCBvbmUgc2xpY2Ugc2hvd2VkXG4gIC8vIG5vIGFtYmVyIGZpbGwgd2hpbGUgZXZlcnkgb3RoZXIgc2VsZWN0ZWQgc2xpY2UgZGlkLiBUaGUgbGFzdCBzbGljZSB5b3Ugc2VsZWN0IElTIHRoZVxuICAvLyBhY3RpdmUgb25lLCB3aGljaCBpcyBleGFjdGx5IGhvdyBpdCB3YXMgcmVwb3J0ZWQuXG4gIHotaW5kZXg6IHZhcigtLXotc2xpY2Utc2VsZWN0aW9uLXdhc2gsIDEwMyk7XG59XG5cbi5zZWxlY3QtYXJlYXMtb3V0bGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvdWNoLWFjdGlvbjogbm9uZTtcblxuICAvLyBQdXJlLUNTUyBtYXJjaGluZyBhbnRzICh0aGluIDFweCwgaGlnaC1jb250cmFzdCBibGFjay93aGl0ZSBzbyB0aGV5IHJlYWQgb24gYW55XG4gIC8vIGJhY2tncm91bmQpIG9uIGFsbCBmb3VyIGVkZ2VzLiBSZXBsYWNlcyB0aGUgb2xkIHRpbGVkIG1hcmNoaW5nLWFudHMuZ2lmLlxuICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgJGNvbG9yLXdoaXRlIDUwJSwgJGNvbG9yLWJsYWNrIDUwJSksXG4gICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAkY29sb3Itd2hpdGUgNTAlLCAkY29sb3ItYmxhY2sgNTAlKSxcbiAgICBsaW5lYXItZ3JhZGllbnQoMGRlZywgJGNvbG9yLXdoaXRlIDUwJSwgJGNvbG9yLWJsYWNrIDUwJSksXG4gICAgbGluZWFyLWdyYWRpZW50KDBkZWcsICRjb2xvci13aGl0ZSA1MCUsICRjb2xvci1ibGFjayA1MCUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXgsIHJlcGVhdC14LCByZXBlYXQteSwgcmVwZWF0LXk7XG4gIGJhY2tncm91bmQtc2l6ZTpcbiAgICAkc2xpY2UtYW50cy10aWxlIDFweCwgJHNsaWNlLWFudHMtdGlsZSAxcHgsXG4gICAgMXB4ICRzbGljZS1hbnRzLXRpbGUsIDFweCAkc2xpY2UtYW50cy10aWxlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgMTAwJSwgMCAwLCAxMDAlIDA7XG4gIGFuaW1hdGlvbjogbWFyY2hpbmdBbnRzICRzbGljZS1hbnRzLWR1cmF0aW9uIGxpbmVhciBpbmZpbml0ZTtcblxuICAvLyBUaGUgYW50cyBhcmUgdGhlIG1vc3QgcHJvdm9raW5nIGFuaW1hdGlvbiBpbiB0aGUgZWRpdG9yIGZvciBhIG1vdGlvbi1zZW5zaXRpdmUgdXNlcjpcbiAgLy8gdW5saWtlIGV2ZXJ5IG90aGVyIGFuaW1hdGlvbiBoZXJlIHRoZXkgbmV2ZXIgc3RvcCwgYW5kIHRoZXkgc2l0IHJpZ2h0IG5leHQgdG8gd2hhdCB0aGVcbiAgLy8gdXNlciBpcyBsb29raW5nIGF0LiBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgaXMgYW4gT1MtbGV2ZWwgc2V0dGluZyAobWFjT1MgQWNjZXNzaWJpbGl0eSAtPlxuICAvLyBSZWR1Y2UgbW90aW9uLCBhbmQgdGhlIGVxdWl2YWxlbnQgZWxzZXdoZXJlKSwgc28gaG9ub3VyaW5nIGl0IGlzIG5vdCBvcHRpb25hbCBkcmVzc2luZy5cbiAgLy9cbiAgLy8gU3RvcHBpbmcgdGhlIGFuaW1hdGlvbiBpcyBzdWZmaWNpZW50IOKAlCBpdCBkb2VzIE5PVCBoaWRlIGFueXRoaW5nLiBUaGUgZGFzaGVzIGFyZSBwYWludGVkXG4gIC8vIGJ5IGBiYWNrZ3JvdW5kLWltYWdlYCwgc28gd2hhdCByZW1haW5zIGlzIGEgc3RhdGljIGRhc2hlZCBib3JkZXIsIGV4YWN0bHkgYXMgbGVnaWJsZSBhc1xuICAvLyB0aGUgbW92aW5nIG9uZS4gTm8gZmFsbGJhY2sgYm9yZGVyIGlzIG5lZWRlZC5cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICBhbmltYXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBUaGUgSE9WRVIgYW50cywgcHJlLXBhaW50ZWQgb24gYW4gb3ZlcmxheSB0aGF0IGlzIG5vcm1hbGx5IGludmlzaWJsZS5cbiAgLy9cbiAgLy8gV2h5IGFuIG92ZXJsYXkgaW5zdGVhZCBvZiBqdXN0IHJlc3R5bGluZyB0aGlzIGVsZW1lbnQgb24gaG92ZXI6IG5laXRoZXIgaGFsZiBvZiB0aGUgaG92ZXJcbiAgLy8gY2hhbmdlIGNhbiBiZSB0cmFuc2l0aW9uZWQgaW4gcGxhY2UuXG4gIC8vICAgLSBgYmFja2dyb3VuZC1pbWFnZWAgaXMgbm90IGludGVycG9sYWJsZSDigJQgYnJvd3NlcnMgZG8gbm90IHR3ZWVuIG9uZSBncmFkaWVudCBpbnRvXG4gIC8vICAgICBhbm90aGVyLCBzbyB0aGUgZGFzaCBzcGxpdCB3b3VsZCBzbmFwIGhvd2V2ZXIgbG9uZyBhIHRyYW5zaXRpb24gd2FzIGRlY2xhcmVkLlxuICAvLyAgIC0gYGFuaW1hdGlvbi1kdXJhdGlvbmAgaXMgbm90IGludGVycG9sYWJsZSBlaXRoZXIsIGFuZCBjaGFuZ2luZyBpdCBvbiBhIFJVTk5JTkdcbiAgLy8gICAgIGFuaW1hdGlvbiByZS1tYXBzIGVsYXBzZWQgdGltZSBvbnRvIHRoZSBuZXcgZHVyYXRpb24sIHdoaWNoIG1ha2VzIHRoZSBkYXNoIGp1bXBcbiAgLy8gICAgIHBvc2l0aW9uIGF0IHRoZSBtb21lbnQgb2YgaG92ZXIuXG4gIC8vIEEgc2Vjb25kIGxheWVyIHNpZGVzdGVwcyBib3RoOiBpdCBvd25zIGl0cyBvd24gZ3JhZGllbnQgYW5kIGl0cyBvd24gaGFsZi1zcGVlZCBhbmltYXRpb25cbiAgLy8gZnJvbSB0aGUgc3RhcnQsIGFuZCB0aGUgb25seSB0aGluZyB0aGF0IGNoYW5nZXMgb24gaG92ZXIgaXMgaXRzIE9QQUNJVFkg4oCUIHdoaWNoIGRvZXNcbiAgLy8gdHJhbnNpdGlvbi4gVGhlIGlkbGUgYW50cyBrZWVwIHJ1bm5pbmcgdW5kZXJuZWF0aCwgc28gdGhlIHR3byBzaW1wbHkgY3Jvc3MtZmFkZS5cbiAgLy9cbiAgLy8gQ292ZXJhZ2U6IGV2ZXJ5IHBpeGVsIG9mIGVhY2ggMXB4IGVkZ2UgaXMgcGFpbnRlZCBvcGFxdWUgKHdoaXRlIHBvcnRpb24gb3IgYmxhY2sgcG9ydGlvbiksXG4gIC8vIHNvIGF0IGZ1bGwgb3BhY2l0eSB0aGlzIGxheWVyIGNvbXBsZXRlbHkgaGlkZXMgdGhlIGlkbGUgYW50cyByYXRoZXIgdGhhbiBibGVuZGluZyB3aXRoIHRoZW0uXG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgICAvLyBNYXRjaGVzIHRoaXMgZWxlbWVudCdzIG93biBib3ggZXhhY3RseSDigJQgdGhlIG92ZXJsYXkgbXVzdCBzaXQgb24gdGhlIHNhbWUgZm91ciBlZGdlcy5cbiAgICBpbnNldDogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJHNsaWNlLWhvdmVyLWZhZGUgZWFzZTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAkY29sb3Itd2hpdGUgJHNsaWNlLWhvdmVyLXdoaXRlLXNoYXJlLCAkY29sb3ItYmxhY2sgJHNsaWNlLWhvdmVyLXdoaXRlLXNoYXJlKSxcbiAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgJGNvbG9yLXdoaXRlICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSwgJGNvbG9yLWJsYWNrICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSksXG4gICAgICBsaW5lYXItZ3JhZGllbnQoMGRlZywgJGNvbG9yLXdoaXRlICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSwgJGNvbG9yLWJsYWNrICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSksXG4gICAgICBsaW5lYXItZ3JhZGllbnQoMGRlZywgJGNvbG9yLXdoaXRlICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSwgJGNvbG9yLWJsYWNrICRzbGljZS1ob3Zlci13aGl0ZS1zaGFyZSk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14LCByZXBlYXQteCwgcmVwZWF0LXksIHJlcGVhdC15O1xuICAgIGJhY2tncm91bmQtc2l6ZTpcbiAgICAgICRzbGljZS1hbnRzLXRpbGUgMXB4LCAkc2xpY2UtYW50cy10aWxlIDFweCxcbiAgICAgIDFweCAkc2xpY2UtYW50cy10aWxlLCAxcHggJHNsaWNlLWFudHMtdGlsZTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgMTAwJSwgMCAwLCAxMDAlIDA7XG4gICAgYW5pbWF0aW9uOiBtYXJjaGluZ0FudHMgJHNsaWNlLWFudHMtaG92ZXItZHVyYXRpb24gbGluZWFyIGluZmluaXRlO1xuXG4gICAgLy8gU2FtZSB0cmVhdG1lbnQgYXMgdGhlIGlkbGUgYW50cy4gVGhlIG92ZXJsYXkncyBPUEFDSVRZIHRyYW5zaXRpb24gaXMgZGVsaWJlcmF0ZWx5IGxlZnRcbiAgICAvLyBhbG9uZTogYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIGlzIGFib3V0IHRyYXZlbCDigJQgc2xpZGluZywgcGFyYWxsYXgsIHNwaW5uaW5nIOKAlCB3aGljaCBpc1xuICAgIC8vIHdoYXQgcHJvdm9rZXMgdmVzdGlidWxhciBzeW1wdG9tcy4gQSAxNjBtcyBjcm9zcy1mYWRlIGRvZXMgbm90IHRyYXZlbCwgYW5kIHJlbW92aW5nIGl0XG4gICAgLy8gd291bGQgc3RyaXAgdGhlIGhvdmVyIGFmZm9yZGFuY2UgZnJvbSBwcmVjaXNlbHkgdGhlIHVzZXJzIHdobyBhc2tlZCBmb3IgbGVzcyBtb3Rpb24sXG4gICAgLy8gd2hpY2ggaXMgYSB3b3JzZSBvdXRjb21lIHRoYW4gbGVhdmluZyBpdCBpbiBwbGFjZS5cbiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vLyBIb3ZlciBvbiBhIE5PTi1hY3RpdmUgc2xpY2U6IHRoZSBzYW1lIG1hcmNoaW5nIGFudHMsIGJyaWdodGVyIGFuZCBhdCBIQUxGIFNQRUVELiBgc3JjX29sZGBcbi8vIGRpZCB0aGlzIGJ5IHN3YXBwaW5nIGl0cyBib3JkZXIgYmFyIGZyb20gYmx1ZSB0byB3aGl0ZSBvbiBgbW91c2VlbnRlcmAsIGFuZCB3YXMgYSBuby1vcCBvblxuLy8gdGhlIGFjdGl2ZSBzbGljZSDigJQgdGhhdCBzdXBwcmVzc2lvbiBpcyBwcmVzZXJ2ZWQgaW4gYEltYWdlU2xpY2VyYC5cbi8vXG4vLyBBbGwgdGhpcyBydWxlIGRvZXMgaXMgZmFkZSBpbiB0aGUgb3ZlcmxheSBkZWNsYXJlZCBvbiBgLnNlbGVjdC1hcmVhcy1vdXRsaW5lOjphZnRlcmA7IHNlZVxuLy8gdGhlcmUgZm9yIHdoeSB0aGUgY2hhbmdlIGNhbm5vdCBiZSB0cmFuc2l0aW9uZWQgb24gdGhlIGVsZW1lbnQgaXRzZWxmLlxuLy9cbi8vIOKaoO+4jyBUd28gZmFpbGVkIGF0dGVtcHRzLCBib3RoIG9mIHdoaWNoIGxvb2tlZCBmaW5lIG9uIGEgZGFyayB0ZXN0IGltYWdlIGFuZCBicm9rZSBvbiBhIHdoaXRlXG4vLyBvbmUg4oCUIHdvcnRoIGtlZXBpbmcgc28gdGhleSBhcmUgbm90IHJlcGVhdGVkOlxuLy8gICAxLiBNYWtpbmcgQk9USCBoYWx2ZXMgb2YgdGhlIGRhc2ggd2hpdGUuIFRoYXQgcmVhZHMgYXMgYSBzb2xpZCBsaW5lOiB0aGUgYW5pbWF0aW9uIGlzXG4vLyAgICAgIHN0aWxsIHJ1bm5pbmcsIGJ1dCBhIHVuaWZvcm1seSB3aGl0ZSBsaW5lIGhhcyBub3RoaW5nIGxlZnQgdG8gbWFyY2gsIHNvIGhvdmVyIGxvb2tlZFxuLy8gICAgICBsaWtlIGl0IGhhZCBmcm96ZW4gdGhlIG91dGxpbmUuXG4vLyAgIDIuIExpZnRpbmcgdGhlIGRhcmsgaGFsZiB0b3dhcmQgZ3JleSAoIzAwMCAtPiAjNDA0MDQwKS4gQnJpZ2h0ZXIgb24gYSBkYXJrIHBob3RvLCBidXQgb25cbi8vICAgICAgYSBXSElURSBwaG90byB0aGUgYmxhY2sgdGlja3MgYXJlIHRoZSBvbmx5IHZpc2libGUgcGFydCBvZiB0aGUgZGFzaCwgc28gbGlnaHRlbmluZ1xuLy8gICAgICB0aGVtIG1hZGUgaG92ZXIgRkFJTlRFUiB0aGFuIGlkbGUg4oCUIHRoZSBvcHBvc2l0ZSBvZiBhbiBhZmZvcmRhbmNlLlxuLy9cbi8vIFNvIGJyaWdodG5lc3MgY29tZXMgZnJvbSB0aGUgd2hpdGUgaGFsZidzIFdJRFRILCBsZWF2aW5nIHRoZSBibGFjayB0aWNrcyBhdCBmdWxsIGNvbnRyYXN0LlxuLy8gTWVhc3VyZWQgbGlmdCBpbiByZW5kZXJlZCBwaXhlbHMsIGF2ZXJhZ2VkIG92ZXIgc2l4IGFuaW1hdGlvbiBmcmFtZXM6ICszNS41JSBvbiBhIGRhcmtcbi8vIHBob3RvLCArMjUuMSUgb24gYSB3aGl0ZSBvbmUuXG4vL1xuLy8gRGVsaWJlcmF0ZWx5IHBhaW50LW9ubHkuIFRoZSBvdXRsaW5lIG1hcmtzIHRoZSBleGFjdCBlZGdlIHRoYXQgd2lsbCBiZSBjaG9wcGVkLCBzbyBob3ZlclxuLy8gbXVzdCBub3QgY2hhbmdlIGl0cyB3aWR0aCwgb2Zmc2V0IG9yIHBvc2l0aW9uIGJ5IGV2ZW4gYSBwaXhlbC5cbi5zZWxlY3QtYXJlYXMtb3V0bGluZS1ob3Zlcjo6YWZ0ZXIge1xuICBvcGFjaXR5OiAxO1xufVxuXG4vLyBNaWQtZ2VzdHVyZTogaG9sZCB0aGUgYW50cyBzdGlsbC4gUGhvdG9zaG9wIGRvZXMgdGhpcyB3aGlsZSB5b3UgbW92ZSBhIHNlbGVjdGlvbiwgYW5kIHRoZVxuLy8gcmVhc29uIGdlbmVyYWxpc2VzIOKAlCBhIGJvcmRlciB0aGF0IGtlZXBzIG1hcmNoaW5nIHdoaWxlIHRoZSBib3ggaXQgc3Vycm91bmRzIGlzIGJlaW5nXG4vLyBkcmFnZ2VkIHB1dHMgdHdvIG1vdGlvbnMgb24gc2NyZWVuIGNvbXBldGluZyBmb3IgdGhlIHNhbWUgYXR0ZW50aW9uLCBhbmQgdGhlIGJvcmRlciBpcyB0aGVcbi8vIG9uZSB0aGF0IGlzIE5PVCB0ZWxsaW5nIHlvdSBhbnl0aGluZy4gUGF1c2luZyBpdCBtYWtlcyB0aGUgc2xpY2UncyBvd24gbW92ZW1lbnQgdGhlIG9ubHlcbi8vIHRoaW5nIG1vdmluZy5cbi8vXG4vLyBgYW5pbWF0aW9uLXBsYXktc3RhdGVgLCBub3QgYGFuaW1hdGlvbjogbm9uZWAuIFBhdXNpbmcgaG9sZHMgdGhlIGRhc2ggbWlkLWN5Y2xlIGFuZCByZXN1bWVzXG4vLyBmcm9tIHRoZXJlLCBzbyByZWxlYXNpbmcgdGhlIG1vdXNlIHBpY2tzIHRoZSBtYXJjaCBiYWNrIHVwIHJhdGhlciB0aGFuIHNuYXBwaW5nIHRoZSBkYXNoIHRvXG4vLyBwaGFzZSB6ZXJvLiBJdCBhbHNvIGhhcyB0byBuYW1lIHRoZSBvdmVybGF5IGV4cGxpY2l0bHkg4oCUIGA6OmFmdGVyYCBydW5zIGl0cyBvd24gYW5pbWF0aW9uXG4vLyBhbmQgd291bGQgb3RoZXJ3aXNlIGtlZXAgbWFyY2hpbmcgdW5kZXJuZWF0aCBhIHBhdXNlZCBiYXNlIGxheWVyLlxuLy9cbi8vIFNjb3BlZCBieSBgSW1hZ2VTbGljZXJgIHRvIHRoZSBzbGljZSBhY3R1YWxseSBiZWluZyBtYW5pcHVsYXRlZDsgZnJlZXppbmcgZXZlcnkgc2xpY2Ugb24gdGhlXG4vLyBjYW52YXMgcmVhZHMgYXMgdGhlIGFwcCBoaXRjaGluZywgbm90IGFzIGZlZWRiYWNrIGFib3V0IHRoaXMgb25lLlxuLnNlbGVjdC1hcmVhcy1vdXRsaW5lLWZyb3plbixcbi5zZWxlY3QtYXJlYXMtb3V0bGluZS1mcm96ZW46OmFmdGVyIHtcbiAgYW5pbWF0aW9uLXBsYXktc3RhdGU6IHBhdXNlZDtcbn1cblxuLy8g4pqg77iPIFRoZSBuZWdhdGl2ZSBvZmZzZXRzIE1VU1Qgc3RheSBwYXJlbnRoZXNpc2VkLiBXcml0dGVuIGJhcmUsIFNhc3MgcmVhZHMgYDAgLSR0aWxlYCBhcyB0aGVcbi8vIFNVQlRSQUNUSU9OIGAwIC0gOHB4YCBhbmQgZW1pdHMgYSBzaW5nbGUgYC04cHhgIHdoZXJlIHR3byB2YWx1ZXMgd2VyZSBtZWFudCDigJQgc2lsZW50bHlcbi8vIHR1cm5pbmcgdGhlIExFRlQgZWRnZSdzIGAwIC04cHhgIGludG8gYW4geC1vbmx5IHBvc2l0aW9uLCB3aGljaCBzdG9wcGVkIHRoYXQgZWRnZSBhbmltYXRpbmdcbi8vIGFuZCBtYWRlIGl0cyBhbnRzIHZhbmlzaC4gT25seSB0aGUgdGhpcmQgdmFsdWUgaXMgZXhwb3NlZCAodGhlIG90aGVycyBmb2xsb3cgYSBjb21tYSwgc29cbi8vIHRoZXJlIGlzIG5vIGxlZnQtaGFuZCBvcGVyYW5kIHRvIHN1YnRyYWN0IGZyb20pLCB3aGljaCBpcyB3aHkgaXQgcHJlc2VudGVkIGFzIFwib25lIGVkZ2UgaXNcbi8vIGJyb2tlblwiIHJhdGhlciB0aGFuIGFzIGFuIG9idmlvdXNseSBtYWxmb3JtZWQgcnVsZS5cbkBrZXlmcmFtZXMgbWFyY2hpbmdBbnRzIHtcbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246XG4gICAgICAkc2xpY2UtYW50cy10aWxlIDAsICgtJHNsaWNlLWFudHMtdGlsZSkgMTAwJSxcbiAgICAgIDAgKC0kc2xpY2UtYW50cy10aWxlKSwgMTAwJSAkc2xpY2UtYW50cy10aWxlO1xuICB9XG59XG5cbi8vIFRldHJpcyBNb2RlIGFuaW1hdGlvbiBoZWxwZXJzOlxuLy8gLSBUaGUgc2xpY2UgXCJjaHJvbWVcIiAob3V0bGluZS9oYW5kbGVzL2RlbGV0ZSkgcm90YXRlcyB2aWEgYC50ZXRyaXMtcm90YXRlLSpgLlxuLy8gLSBUaGUgY3JvcHBlZCBpbWFnZSBwcmV2aWV3IGNvdW50ZXItcm90YXRlcyB2aWEgYC50ZXRyaXMtY291bnRlci0qYCBzbyBpdCBzdGF5cyB1cHJpZ2h0LlxuLy8gLSBXZSBicmllZmx5IGZhZGUgdGhlIGNyb3Agb3V0IGR1cmluZyB0aGUgcm90YXRpb24gdG8gYXZvaWQgYSBjb25mdXNpbmcgXCJzcGlubmluZyBpbWFnZVwiIGVmZmVjdC5cbi50ZXRyaXMtcm90YXRlLWN3LFxuLnRldHJpcy1yb3RhdGUtY2N3LFxuLnRldHJpcy1jb3VudGVyLWN3LFxuLnRldHJpcy1jb3VudGVyLWNjdyB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbn1cblxuQGtleWZyYW1lcyB0ZXRyaXNSb3RhdGUge1xuICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS10ZXRyaXMtcm90KSk7IH1cbn1cblxuQGtleWZyYW1lcyB0ZXRyaXNDb3VudGVyUm90YXRlIHtcbiAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tdGV0cmlzLXJvdCkpOyB9XG59XG5cbkBrZXlmcmFtZXMgdGV0cmlzU3BpbjM2MCB7XG4gIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cblxuQGtleWZyYW1lcyB0ZXRyaXNTcGluMzYwQ2N3IHtcbiAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTM2MGRlZyk7IH1cbn1cblxuQGtleWZyYW1lcyB0ZXRyaXNSYWluYm93SHVlIHtcbiAgMCUgeyBmaWx0ZXI6IGh1ZS1yb3RhdGUoMGRlZykgc2F0dXJhdGUoMS42KSBjb250cmFzdCgxLjE1KTsgfVxuICAxMDAlIHsgZmlsdGVyOiBodWUtcm90YXRlKDM2MGRlZykgc2F0dXJhdGUoMS42KSBjb250cmFzdCgxLjE1KTsgfVxufVxuXG5Aa2V5ZnJhbWVzIHRldHJpc1JhaW5ib3dIdWVDY3cge1xuICAwJSB7IGZpbHRlcjogaHVlLXJvdGF0ZSgwZGVnKSBzYXR1cmF0ZSgxLjYpIGNvbnRyYXN0KDEuMTUpOyB9XG4gIDEwMCUgeyBmaWx0ZXI6IGh1ZS1yb3RhdGUoLTM2MGRlZykgc2F0dXJhdGUoMS42KSBjb250cmFzdCgxLjE1KTsgfVxufVxuXG4udGV0cmlzLXJvdGF0ZSB7XG4gIGFuaW1hdGlvbjogdGV0cmlzUm90YXRlICR0ZXRyaXMtYW5pbS1kdXJhdGlvbiBlYXNlO1xufVxuXG4udGV0cmlzLXJvdGF0ZS1jdyB7XG4gIC0tdGV0cmlzLXJvdDogOTBkZWc7XG59XG5cbi50ZXRyaXMtcm90YXRlLWNjdyB7XG4gIC0tdGV0cmlzLXJvdDogLTkwZGVnO1xufVxuXG4vLyBDb3VudGVyLXJvdGF0aW9uOiBrZWVwcyB0aGUgY3JvcHBlZCBpbWFnZSB1cHJpZ2h0IHdoaWxlIHRoZSB3cmFwcGVyIHJvdGF0ZXMuXG4vLyBGYWRlIGJlaGF2aW9yOlxuLy8gLSBXZSBzZXQgYG9wYWNpdHk6IDBgIHdoaWxlIHRoZSBjb3VudGVyIGNsYXNzIGlzIHByZXNlbnQuXG4vLyAtIFdoZW4gdGhlIGNsYXNzIGlzIHJlbW92ZWQgKH4zMDBtcyksIGBvcGFjaXR5YCB0cmFuc2l0aW9ucyBiYWNrIHRvIDEgc21vb3RobHkuXG4udGV0cmlzLWNvdW50ZXIge1xuICBhbmltYXRpb246IHRldHJpc0NvdW50ZXJSb3RhdGUgJHRldHJpcy1hbmltLWR1cmF0aW9uIGVhc2U7XG59XG5cbi50ZXRyaXMtY291bnRlci1jdyB7XG4gIC0tdGV0cmlzLXJvdDogLTkwZGVnO1xufVxuXG4udGV0cmlzLWNvdW50ZXItY2N3IHtcbiAgLS10ZXRyaXMtcm90OiA5MGRlZztcbn1cblxuLy8gQ3JvcCBwcmV2aWV3IGZhZGUgZHVyaW5nIFRldHJpcyBNb2RlLlxuLnNlbGVjdC1hcmVhcy1iYWNrZ3JvdW5kLWFyZWEge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzIGVhc2U7XG59XG5cbi5zZWxlY3QtYXJlYXMtYmFja2dyb3VuZC1hcmVhLnRldHJpcy1jb3VudGVyLWN3LFxuLnNlbGVjdC1hcmVhcy1iYWNrZ3JvdW5kLWFyZWEudGV0cmlzLWNvdW50ZXItY2N3IHtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8gRG91YmxlLXRhcCBSOiAzNjDCsCByYWluYm93IHNwaW4gKHZpc3VhbCBvbmx5KS5cbi50ZXRyaXMtc3BpbjM2MC1yYWluYm93IHtcbiAgYW5pbWF0aW9uOiB0ZXRyaXNTcGluMzYwIDAuNXMgZWFzZSwgdGV0cmlzUmFpbmJvd0h1ZSAwLjVzIGxpbmVhcjtcbn1cblxuLnRldHJpcy1zcGluMzYwLXJhaW5ib3ctY2N3IHtcbiAgYW5pbWF0aW9uOiB0ZXRyaXNTcGluMzYwQ2N3IDAuNXMgZWFzZSwgdGV0cmlzUmFpbmJvd0h1ZUNjdyAwLjVzIGxpbmVhcjtcbn1cblxuLnNlbGVjdC1hcmVhcy1yZXNpemUtaGFuZGxlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1ibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLXN1cmZhY2U7XG4gIGhlaWdodDogOHB4O1xuICB3aWR0aDogOHB4O1xuXG4gIC8vIFByZXZlbnQgYnJvd3NlciBzY3JvbGwvem9vbSBnZXN0dXJlcyBmcm9tIGludGVyZmVyaW5nIHdpdGggcG9pbnRlciBpbnRlcmFjdGlvbnMgb24gbW9iaWxlLlxuICB0b3VjaC1hY3Rpb246IG5vbmU7XG5cbiAgLy8gSW52aXNpYmxlIGdyYWIgYXJlYS4gVGhlIHNxdWFyZSBzdGF5cyA4cHgg4oCUIGJpZ2dlciB3b3VsZCBjb3ZlciB0aGUgaW1hZ2UgYmVpbmcgY3JvcHBlZCDigJRcbiAgLy8gd2hpbGUgdGhlIFRBUkdFVCBncm93cyB0b3dhcmQgdGhlIDI0cHggbWluaW11bS4gYC0tc2xpY2UtaGFuZGxlLWdyYWItaW5zZXRgIGlzIGNvbXB1dGVkIGluXG4gIC8vIGBSZXNpemVIYW5kbGVyLmpzeGAsIHdoZXJlIHRoZSBzbGljZSdzIHNpemUgaXMga25vd24sIGJlY2F1c2UgdGhlIHBhZGRpbmcgaGFzIHRvIHNocmluayBvblxuICAvLyBzbWFsbCBzbGljZXMgb3IgdGhlIGNvcm5lciBhbmQgZWRnZSBoYW5kbGVzIHdvdWxkIG92ZXJsYXAuXG4gIC8vXG4gIC8vIOKaoO+4jyBgb3ZlcmZsb3c6IGhpZGRlbmAgd2FzIHJlbW92ZWQgZnJvbSB0aGlzIHJ1bGUgdG8gbGV0IHRoZSA6OmJlZm9yZSBlc2NhcGUgdGhlIDhweCBib3guXG4gIC8vIE5vdGhpbmcgd2FzIGJlaW5nIGNsaXBwZWQgYnkgaXQg4oCUIHRoZSBoYW5kbGUgaGFzIG5vIGNoaWxkcmVuIOKAlCBidXQgaXQgc2lsZW50bHkgbWFkZSBldmVyeVxuICAvLyBhdHRlbXB0IGF0IGEgbGFyZ2VyIGhpdCBhcmVhIGEgbm8tb3AuXG4gICY6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiB2YXIoLS1zbGljZS1oYW5kbGUtZ3JhYi1pbnNldCwgMCk7XG5cbiAgICAvLyBObyBwYWludCwgYWxsIGhpdDogdGhlIGhhbmRsZSdzIG93biBgb3BhY2l0eWAgbXVzdCBub3QgZmFkZSBhIHRyYW5zcGFyZW50IGJveCBpbiBhbmRcbiAgICAvLyBvdXQsIGFuZCBub3RoaW5nIGhlcmUgc2hvdWxkIGV2ZXIgYmUgdmlzaWJsZS5cbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4uc2VsZWN0LWFyZWFzLWRlbGV0ZS1hcmVhIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDIwcHg7XG4gIHdpZHRoOiAyMHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRkZWxldGUtaW1nIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4uc2VsZWN0LWFyZWFzLWRlbGV0ZS1ob3N0IHtcbiAgLy8gTWF0Y2hlcyBjb25zdGFudHMuanMgU0xJQ0VfREVMRVRFX1BBRF8qICg1LzUvMi8yKS5cbiAgcGFkZGluZzogNXB4IDVweCAycHggMnB4O1xufVxuXG4udG1wSW1nLFxuLm15LXBhbmRhLWJybyB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiA1cmVtO1xuICBtYXgtd2lkdGg6IDY5cHg7XG59XG5cbi50bXBJbWcge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbiNpbWdXcmFwIC50bXBJbWcge1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzLXNtO1xuXG4gIC8vIEhvdmVyL2FjdGl2ZSBmZWVkYmFjayBsaXZlcyBvbiB0aGUgd2hvbGUgYC51cGxvYWQtZHJvcHpvbmVgIG5vdywgbm90IHRoZSBpY29uLlxufVxuXG4uc2VsZWN0LWFyZWFzLW92ZXJsYXkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItYmxhY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgdG91Y2gtYWN0aW9uOiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY3Vyc29yOiBjcm9zc2hhaXI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcblxuICAmLmhhcy1zbGljZSB7XG4gICAgb3BhY2l0eTogJHNlbGVjdC1hcmVhcy1vdmVybGF5LWhhcy1zbGljZS1vcGFjaXR5O1xuICB9XG59XG5cbi8vIFRvdWNoIGd1aWRlczogYnJpZWYgZmxhc2ggbGluZXMgd2hlbiBzbGljZXMgc25hcC9jbGFtcC5cbi50b3VjaC1ndWlkZXMtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogJHotdG91Y2gtZ3VpZGVzLW92ZXJsYXk7IC8vIGFib3ZlIHNsaWNlIGNocm9tZVxufVxuXG5Aa2V5ZnJhbWVzIHRvdWNoR3VpZGVCbGluayB7XG4gIDAlIHsgb3BhY2l0eTogMDsgfVxuICAyMCUgeyBvcGFjaXR5OiAxOyB9XG4gIDY1JSB7IG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbn1cblxuLnRvdWNoLWd1aWRlLWxpbmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGFuaW1hdGlvbjogdG91Y2hHdWlkZUJsaW5rIDAuNDVzIGVhc2U7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi50b3VjaC1ndWlkZS12IHtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4udG91Y2gtZ3VpZGUtaCB7XG4gIGhlaWdodDogMXB4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnRvdWNoLWd1aWRlLXNuYXAge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDE4MCwgMjU1LCAwLjk1KTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLnRvdWNoLWd1aWRlLWNsYW1wIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDgwLCA4MCwgMC45NSk7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi8vIFRvb2xiYXIgSEVMUCBwb3BvdmVyLlxuLmhlbHAtcG9wb3Zlci13cmFwIHtcbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBwb3NpdGlvbmVkIOKAlCBzZWUgYC5oZWxwLXBvcG92ZXJgLiBNYWtpbmcgdGhpcyB0aGUgY29udGFpbmluZyBibG9jayBpc1xuICAvLyB3aGF0IHBpbm5lZCB0aGUgcG9wb3ZlciB0byB0aGUgYnV0dG9uIGFuZCBwdXNoZWQgaXQgb2ZmLXNjcmVlbi5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uaGVscC1wb3BvdmVyIHtcbiAgLy8gQW5jaG9yZWQgdG8gI21lbnUgKHRoZSBuZWFyZXN0IHBvc2l0aW9uZWQgYW5jZXN0b3Igbm93IHRoYXQgYC5oZWxwLXBvcG92ZXItd3JhcGAgaXNcbiAgLy8gc3RhdGljKSwgTk9UIHRvIHRoZSBIRUxQIGJ1dHRvbi4gSHVuZyBvZmYgdGhlIGJ1dHRvbiBpdCBvcGVuZWQgbGVmdHdhcmQgZnJvbSB3aGVyZXZlclxuICAvLyB0aGF0IGJ1dHRvbiBoYXBwZW5lZCB0byBzaXQgYW5kIHJhbiBzdHJhaWdodCBvZmYgdGhlIGxlZnQgZWRnZSBvZiB0aGUgdmlld3BvcnQgb25jZSBIRUxQXG4gIC8vIG1vdmVkIGludG8gdGhlIG1pZGRsZSBvZiByb3cgMS4gQWdhaW5zdCAjbWVudSBpdCBpcyBwaW5uZWQgdG8gdGhlIHRvb2xiYXIncyBvd24gcmlnaHRcbiAgLy8gZWRnZSBhbmQgZHJvcHMgYmVsb3cgdGhlIHdob2xlIHRvb2xiYXIsIHNvIGl0IGNhbiBuZXZlciBjb3ZlciB0aGUgY29udHJvbHMgZWl0aGVyLlxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IGNhbGMoMTAwJSArIDZweCk7XG5cbiAgLy8gTUVBU1VSRUQ6IHdpdGhvdXQgdGhpcyB0aGUgYm94IGlzIGNvbnRlbnQtYm94LCBzbyB0aGUgMjRweCBwYWRkaW5nIGFuZCAycHggYm9yZGVyIGFyZVxuICAvLyBhZGRlZCBPTiBUT1Agb2YgdGhlIHdpZHRoIOKAlCBhdCBhIDMyMHB4IHZpZXdwb3J0IHRoZSBcIjI5NnB4XCIgcG9wb3ZlciByZW5kZXJlZCAzMjJweCB3aWRlXG4gIC8vIGFuZCBodW5nIDJweCBvZmYgdGhlIGxlZnQgZWRnZS5cbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IG1pbigkaGVscC1wb3BvdmVyLW1heC13aWR0aCwgY2FsYygxMDB2dyAtIDI0cHgpKTtcblxuICAvLyBGaXQgdGhlIHZpZXdwb3J0IHZlcnRpY2FsbHkgdG9vIOKAlCB0aGUgbGF5ZXJzLWVyYSBjb250ZW50IGlzIGxvbmcgZW5vdWdoIHRvIHJ1biBvZmYgdGhlXG4gIC8vIGJvdHRvbSBvbiBhIGxhcHRvcC4gU2Nyb2xsIHRoZSBwb3BvdmVyIHJhdGhlciB0aGFuIHRoZSBwYWdlLlxuICAvL1xuICAvLyBUaGlzIGlzIHRoZSBGQUxMQkFDSyBvbmx5OiBgSGVscFBvcG92ZXJgIG1lYXN1cmVzIGl0cyBvd24gdG9wIG9uIG1vdW50IGFuZCBzZXRzIGFuIGlubGluZVxuICAvLyBgbWF4LWhlaWdodGAgdGhhdCBvdmVycmlkZXMgaXQuIFRoZSBmaXhlZCBvZmZzZXQgaGVyZSBjYW5ub3QgYmUgY29ycmVjdCBpbiBib3RoIHRvb2xiYXJcbiAgLy8gc3RhdGVzIOKAlCB0aGUgcG9wb3ZlcidzIHRvcCBpcyAxNjZweCB3aXRoIE1PUkUgY29sbGFwc2VkIGFuZCAyMDZweCB3aXRoIGl0IG9wZW4g4oCUIHNvIGl0IGlzXG4gIC8vIHNpemVkIGZvciB0aGUgdGFsbGVyIGNhc2UgYW5kIHRoZSBtZWFzdXJlZCB2YWx1ZSB0YWtlcyBvdmVyIGltbWVkaWF0ZWx5LlxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjIwcHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuICBiYWNrZ3JvdW5kOiAkaGVscC1wb3BvdmVyLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkaGVscC1wb3BvdmVyLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgei1pbmRleDogdmFyKC0tei1oZWxwLXBvcG92ZXIpO1xufVxuXG4uaGVscC1wb3BvdmVyLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6ICRoZWxwLXBvcG92ZXItdGl0bGUtZm9udC13ZWlnaHQ7XG4gIGZvbnQtc2l6ZTogJGhlbHAtcG9wb3Zlci10aXRsZS1mb250LXNpemU7XG4gIG1hcmdpbi1ib3R0b206IDZweDtcbn1cblxuLy8gU2NvcGUgaGVhZGluZyAoU2xpY2VzIC8gVmlldyAvIExheWVyKS4gVGhlIGVkaXRvciBoYXMgdGhyZWUgc2NvcGVzIGFuZCBjb25mbGF0aW5nXG4vLyB0aGVtIGlzIHRoZSBtYWluIHNvdXJjZSBvZiBjb25mdXNpb24sIHNvIHRoZSBoZWxwIGdyb3VwcyBieSBzY29wZSByYXRoZXIgdGhhblxuLy8gbGlzdGluZyBldmVyeXRoaW5nIGZsYXQuXG4uaGVscC1wb3BvdmVyLXNlY3Rpb24ge1xuICAvLyBHZW5lcm91cyBzcGFjZSBBQk9WRSBlYWNoIGhlYWRpbmcgc28gdGhlIGdyb3VwcyByZWFkIGFzIHNlcGFyYXRlIGJsb2NrcyByYXRoZXJcbiAgLy8gdGhhbiBvbmUgY29udGludW91cyBsaXN0OyB0aGUgcnVsZSB1bmRlcm5lYXRoIHRoZW4gcmVhZHMgYXMgYSBkaXZpZGVyLlxuICBtYXJnaW46IDIycHggMCA0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAzcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuXG4gIC8vIFNtYWxsICsgaGVhdnkgKyB0cmFja2VkOiB0aGUgaGllcmFyY2h5IGNvbWVzIGZyb20gd2VpZ2h0IGFuZCBsZXR0ZXItc3BhY2luZywgbm90XG4gIC8vIHNpemUsIHNvIGl0IHN0aWxsIHJlYWRzIGFzIGEgaGVhZGluZyBpZiB0aGUgYnJvd3NlciBmbG9vcnMgc21hbGwgdGV4dCB2aWEgYVxuICAvLyBtaW5pbXVtLWZvbnQtc2l6ZSBzZXR0aW5nLlxuICBmb250LXNpemU6ICRmb250LXNpemUteHM7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtaGVhdnk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgY29sb3I6ICRjb2xvci10ZXh0LXN0cm9uZztcblxuICAmOmZpcnN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi10b3A6IDZweDtcbiAgfVxufVxuXG4vLyBUaGUgXCLigJQgd2hhdCB5b3Ugc2VlLCBuZXZlciB0aGUgZXhwb3J0ZWQgZmlsZVwiIHF1YWxpZmllciBiZXNpZGUgYSBzY29wZSBoZWFkaW5nLlxuLy8gRGVsaWJlcmF0ZWx5IGxpZ2h0ZXIgYW5kIHVuLXRyYWNrZWQgc28gdGhlIHNjb3BlIHdvcmQgc3RheXMgdGhlIHRoaW5nIHlvdSBzZWUgZmlyc3QuXG4uaGVscC1wb3BvdmVyLW5vdGUge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbn1cblxuLy8gTWFya3MgYSBzaG9ydGN1dCB0aGUgY3VycmVudCB0aWVyIGNhbm5vdCB1c2UuIERlbGliZXJhdGVseSBxdWlldCDigJQgaXQgbGFiZWxzIHRoZSByb3dcbi8vIHJhdGhlciB0aGFuIHNob3V0aW5nIG92ZXIgdGhlIGluc3RydWN0aW9uLCBhbmQgZXZlcnkgbG9ja2VkIHJvdyByZWFkcyB0aGUgc2FtZSB3YXkgc29cbi8vIHRoZSBleWUgY2FuIHNraXAgdGhlbSBhcyBhIGdyb3VwLlxuLy8gT3ZlciB0aGUgcGxhbidzIHNsaWNlIGxpbWl0LiBVc2VzIHRoZSBkYW5nZXIgcGFsZXR0ZSByYXRoZXIgdGhhbiBhIG5ldyBjb2xvdXI6IHRoaXMgaXMgdGhlXG4vLyBzYW1lIFwieW91IGhhdmUgaGl0IGEgd2FsbFwiIG1lc3NhZ2UgdGhlIFNsaWNlcyBwYW5lbCBiYWRnZSB0dXJucyByZWQgZm9yLCBhbmQgdGhlIHR3byBzaG91bGRcbi8vIG5vdCBkaXNhZ3JlZSBhYm91dCBob3cgdXJnZW50IGl0IGxvb2tzLlxuLnNsaWNlLWxpbWl0LXdhcm5pbmcge1xuICBjb2xvcjogJGNvbG9yLWRhbmdlci10ZXh0O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgYSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBBIHJlZnVzZWQgZHJhdyByZW1vdW50cyB0aGlzIChpdHMgUmVhY3Qga2V5IGNoYW5nZXMpLCB3aGljaCByZXN0YXJ0cyB0aGUgZmxhc2guIFRoZVxuICAvLyBiYW5uZXIgaXMgYWxyZWFkeSBvbiBzY3JlZW4gYXQgdGhlIGxpbWl0OyB0aGlzIGlzIHdoYXQgY29ubmVjdHMgdGhlIGRlYWQgZ2VzdHVyZSB0byBpdCxcbiAgLy8gc28gYSBzZWNvbmQgYXR0ZW1wdCBmbGFzaGVzIGFnYWluIHJhdGhlciB0aGFuIHNpdHRpbmcgdGhlcmUgbG9va2luZyB0aGUgc2FtZS5cbiAgYW5pbWF0aW9uOiBzbGljZS1saW1pdC1mbGFzaCA2MDBtcyBlYXNlLW91dDtcblxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNsaWNlLWxpbWl0LWZsYXNoIHtcbiAgMCUgICB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbiAgMjUlICB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbn1cblxuLmhlbHAtcG9wb3Zlci1wcm8ge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY29sb3I6ICRjb2xvci10ZXh0LW11dGVkO1xuICBvcGFjaXR5OiAwLjg1O1xufVxuXG4uaGVscC1wb3BvdmVyLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XG59XG5cbi5oZWxwLXBvcG92ZXItZGVzYyB7XG4gIHBhZGRpbmc6IDNweCAxMHB4IDNweCAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4uaGVscC1wb3BvdmVyLWtleXMge1xuICBwYWRkaW5nOiAzcHggMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5oZWxwLXBvcG92ZXIga2JkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAxcHggNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTgpO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDI0NSwgMjQ1LCAxKTtcbiAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkxpYmVyYXRpb24gTW9ub1wiLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAkaGVscC1wb3BvdmVyLWtiZC1mb250LXNpemU7XG59XG5cbi8vIOKaoO+4jyBDT1VOVEVSLVNDQUxFRCBieSB0aGUgd29ybGQncyB6b29tLCBsaWtlIHRoZSByZXNpemUgaGFuZGxlcyBhbmQgdGhlIGNoZWNrZXIgdGlsZS5cbi8vXG4vLyBUaGlzIGZpbHRlciBpcyBhcHBsaWVkIGluIHRoZSBlbGVtZW50J3Mgb3duIExBWU9VVCBzcGFjZSBhbmQgdGhlbiBtdWx0aXBsaWVkIGJ5IHRoZSB3b3JsZFxuLy8gdHJhbnNmb3JtLCBzbyBhIGNvbnN0YW50IDNweCBzb2Z0ZW5lZCBhcyB0aGUgd29ybGQgc2NhbGVkOiBlbnRlcmluZyBmdWxsIHNjcmVlbiB0b29rIGBrYCB0b1xuLy8gMS44OTEgYW5kIHRoZSBibHVyIHJlbmRlcmVkIGF0IDUuNjdweCwgd2hpY2ggcmVhZHMgYXMgdGhlIHBpY3R1cmUgZ29pbmcgb3V0IG9mIGZvY3VzLiBUaGVcbi8vIGJsdXIgaXMgYSBVSSBzaWduYWwgKFwidGhpcyBwYXJ0IGlzIG5vdCBpbiBhIHNsaWNlXCIpLCBzbyBpdCBzaG91bGQgYmUgYSBjb25zdGFudCBTQ1JFRU4gc2l6ZS5cbi8vXG4vLyBgLS1jYW52YXMta2AgaXMgcHVibGlzaGVkIG9uIGAuY2FudmFzLXdvcmxkYCBhbG9uZ3NpZGUgdGhlIHRyYW5zZm9ybSBpdCBkZXNjcmliZXMuXG4uYmx1cnJlZCB7XG4gIC13ZWJraXQtZmlsdGVyOiBibHVyKGNhbGMoM3B4IC8gdmFyKC0tY2FudmFzLWssIDEpKSk7XG4gIC1tb3otZmlsdGVyOiBibHVyKGNhbGMoM3B4IC8gdmFyKC0tY2FudmFzLWssIDEpKSk7XG4gIC1vLWZpbHRlcjogYmx1cihjYWxjKDNweCAvIHZhcigtLWNhbnZhcy1rLCAxKSkpO1xuICBmaWx0ZXI6IGJsdXIoY2FsYygzcHggLyB2YXIoLS1jYW52YXMtaywgMSkpKTtcbn1cblxuLm5leHQge1xuICBmb250LXNpemU6IDE4cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi5idG4tY2hvcCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi8vIFRvb2xiYXIgaWNvbiBidXR0b25zIChBZGQgTmV3IC8gQ2xlYXIgQWxsKSArIHRoZWlyIGxhYmVscyBhbmQgaWNvbnMuXG4uYnRuLWFkZCxcbi5idG4tY2xlYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDNweCA4cHggMCA1cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcblxuICAvLyBUZXh0IGxhYmVsIGluc2lkZSB0aGUgYnV0dG9uIChrZWVwcyBmb250ICsgdmVydGljYWwgYWxpZ25tZW50IGNvbnNpc3RlbnQpLlxuICAmLXR4dCB7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC00cHg7XG4gIH1cblxuICAvLyBJY29uIHNwcml0ZSB0aGF0IGFwcGVhcnMgdG8gdGhlIGxlZnQgb2YgdGhlIHRleHQuXG4gICY6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxOHB4IDE4cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBjb250ZW50OiAnJztcbiAgfVxufVxuXG4vLyBVc2UgdGhlIHNhbWUgc2VsZWN0b3Igc3BlY2lmaWNpdHkgYXMgdGhlIGxlZ2FjeSBDU1MgKGJ1dHRvbi5idG4tYWRkOmJlZm9yZSlcbi8vIHNvIHRoYXQgb3VyIGJ1bmRsZWQgc3R5bGVzIHdpbiBieSBzb3VyY2Ugb3JkZXIsIGJ1dCB0aGUgc3RhdGljIHBhZ2VzIHRoYXRcbi8vIGRvbid0IGxvYWQgQXBwLnNjc3Mgc3RpbGwgcmVseSBvbiBtYWluLm1pbi5jc3MuXG5idXR0b24uYnRuLWFkZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuL3Jlc291cmNlcy9hZGQtbmV3LWljb24ucG5nJyk7XG59XG5cbmJ1dHRvbi5idG4tY2xlYXI6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi9yZXNvdXJjZXMvY2xlYXItYWxsLWljb24ucG5nJyk7XG59XG5cbi5idG4tY29tbW9uIHtcbiAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG4gIHBhZGRpbmc6IDNweCA4cHg7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogJGRpc2FibGVkLW9wYWNpdHk7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxufVxuXG4vLyBJbiBNb3ZlIG1vZGUgdGhlIGZsYXQgI3NsaWNlSW1nIGlzIGhpZGRlbjsgdGhlIGxpdmUgbGF5ZXIgY2FudmFzIHN0YW5kcyBpbiBmb3Jcbi8vIGl0IHNvIGEgZHJhZyBuZXZlciByZXZlYWxzIHRoZSBwcmUtbW92ZSBwb3NpdGlvbiB0aHJvdWdoIHRyYW5zcGFyZW50IGFyZWFzLlxuLmxheWVyLXNyYy1oaWRkZW4ge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbi8vIFJlYWwtdGltZSBjb21wb3NpdGUgY2FudmFzIHN0YW5kaW5nIGluIGZvciAjc2xpY2VJbWcgKG9wYWNpdHkvYmxlbmQvdmlzaWJpbGl0eS9cbi8vIHBvc2l0aW9uIGVkaXRzIHJlbmRlciBpbnN0YW50bHkpLiBJdHMgbGVmdC90b3Avd2lkdGgvaGVpZ2h0IGFyZSBzZXQgYnkgSlMgaW5cbi8vIGRyYXdMYXllcnNUb0xpdmUgKGRvY3VtZW50IHZzLiBvdXQtb2YtYm91bmRzIGdob3N0IGV4dGVudCk7IHRoaXMgcnVsZSBvbmx5IG93bnNcbi8vIHRoZSBzdGF0aWMgcG9zaXRpb25pbmcvc3RhY2tpbmcgc28gdGhlIGNvbXBvbmVudCBjYXJyaWVzIG5vIGlubGluZSBzdHlsZS5cbi5sYXllci1saXZlLWNhbnZhcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogdmFyKC0tei1sYXllci1saXZlLWNhbnZhcyk7XG59XG5cbi8vIE1vdmUtdG9vbCBjYXB0dXJlIHN1cmZhY2U6IHR1cm5zIGNhbnZhcyBkcmFncyBpbnRvIGxheWVyIHJlcG9zaXRpb25pbmcuIEFjdGl2ZVxuLy8gb25seSB3aGlsZSB0aGUgTW92ZSB0b29sIGlzIHNlbGVjdGVkIChtb3VudGVkIGNvbmRpdGlvbmFsbHkpLlxuLy9cbi8vIFJlbmRlcmVkIGFzIGEgc2libGluZyBvZiBgLmltZy1jYW52YXNgIGluc2lkZSBgLmNhbnZhcy1sYXlvdXRgLCBOT1QgaW5zaWRlIGAuY2FudmFzLXdvcmxkYCxcbi8vIHNvIGBpbnNldDogMGAgaXMgdGhlIFZJRVdQT1JUIGFuZCBkb2VzIG5vdCBzaHJpbmsgd2l0aCB0aGUgem9vbS4gSW5zaWRlIHRoZSB3b3JsZCBpdCBzY2FsZWRcbi8vIGRvd24gdG8gdGhlIGRvY3VtZW50IChtZWFzdXJlZCA4MHg2MCBhZ2FpbnN0IGEgNzc5eDU4NSB2aWV3cG9ydCBhdCA0IHN0ZXBzIG91dCksIHdoaWNoIGxlZnRcbi8vIGEgdmlzaWJsZSBsYXllciBvdXRzaWRlIHRoZSBkb2N1bWVudCBpbXBvc3NpYmxlIHRvIGdyYWIgZXZlbiB0aG91Z2ggaXRzIGhhbmRsZXMgc3RpbGxcbi8vIHdvcmtlZC5cbi5sYXllci1tb3ZlLWNhcHR1cmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHotaW5kZXg6IHZhcigtLXotbGF5ZXItbW92ZS1jYXB0dXJlKTtcblxuICAvLyBPbmx5IHByb21pc2UgXCJncmFiYmFibGVcIiB3aGVuIHRoZSBwb2ludGVyIGlzIGFjdHVhbGx5IG92ZXIgYSBsYXllci5cbiAgJi5vdmVyLWxheWVyIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gIH1cbn1cblxuLy8gUmlnaHQtY2xpY2sgbWVudSBmb3IgdGhlIGNhbnZhcy4gRml4ZWQtcG9zaXRpb25lZCBhdCB0aGUgcG9pbnRlciAodGhlIGNvbXBvbmVudCBwdWxsc1xuLy8gaXQgYmFjayBpbnNpZGUgdGhlIHZpZXdwb3J0IHdoZW4gYSBjbGljayBsYW5kcyBuZWFyIGFuIGVkZ2UpLlxuLmNhbnZhcy1jb250ZXh0LW1lbnUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6ICR6LWNhbnZhcy1jb250ZXh0LW1lbnU7XG4gIG1pbi13aWR0aDogMTcwcHg7XG4gIHBhZGRpbmc6IDRweDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLW1pZDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3gtc2hhZG93OiAwIDhweCAyNHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjQpO1xuXG4gID4gLml0ZW0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgIGJvcmRlcjogMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxheWVyLWFjY2VudC1zb2Z0O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogJGRpc2FibGVkLW9wYWNpdHk7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgfVxuXG4gID4gLnNlcGFyYXRvciB7XG4gICAgbWFyZ2luOiA0cHggMnB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICB9XG59XG5cbi8vIFNlY3Rpb24gdGl0bGVzLiBUaGUgbWVudSBpcyBlbnRpcmVseSBsYXllci1zY29wZWQgd2hlbiBhIGxheWVyIGlzIHVuZGVyIHRoZSBwb2ludGVyIGFuZFxuLy8gbmV2ZXIgc2FpZCBzbzsgXCJGaXQgdG8gY2FudmFzXCIgYW5kIFwiQWN0dWFsIHNpemVcIiBhcmUgdGhlIHR3byBpdGVtcyB0aGF0IHJlYWQgYXMgY2FudmFzXG4vLyBhY3Rpb25zIHdpdGhvdXQgb25lLlxuLmNhbnZhcy1jb250ZXh0LW1lbnUgLm1lbnUtaGVhZGluZyB7XG4gIC8vIDEwcHggc2lkZXMgdG8gbGluZSB1cCB3aXRoIGAuaXRlbWAncyBpbnNldDsgZ2VuZXJvdXMgdG9wIGFuZCBib3R0b20gYmVjYXVzZSB0aGlzIGlzIGFcbiAgLy8gc2VjdGlvbiB0aXRsZSB3aXRoIG5vdGhpbmcgYWJvdmUgaXQg4oCUIHRoZSBjb250YWluZXIncyBvd24gNHB4IHdhcyBub3QgZW5vdWdoIHRvIHN0b3AgaXRcbiAgLy8gc2l0dGluZyBhZ2FpbnN0IHRoZSBtZW51J3Mgcm91bmRlZCBjb3JuZXIuXG4gIHBhZGRpbmc6IDhweCAxMHB4IDZweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXhzO1xuICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi8vIFRoZSBDQU5WQVMgZmx5b3V0OiB0aGUgZG9jdW1lbnQgb25lIGhvcCBhd2F5IGluc3RlYWQgb2YgYSB0cmlwIHRvIGEgcGFuZWwuXG5cbi8vIENvbnRleHR1YWwgb3B0aW9ucyBmb3IgdGhlIHNlbGVjdGVkIGxheWVyIOKAlCBhIGZsb2F0aW5nIGlzbGFuZCBwaW5uZWQgdG8gdGhlIGJvdHRvbSBvZlxuLy8gdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIGEgZm91cnRoIHRvb2xiYXIgcm93LiBUaGUgdG9vbGJhciBpcyBhbHJlYWR5IHRocmVlIHJvd3MgZGVlcCxcbi8vIGFuZCB0aGVzZSBjb250cm9scyBvbmx5IG1hdHRlciB3aGlsZSBhIGxheWVyIGlzIHNlbGVjdGVkLCBzbyB0aGV5IGZvbGxvdyB0aGUgc2VsZWN0aW9uXG4vLyBpbnN0ZWFkIG9mIHBlcm1hbmVudGx5IG9jY3VweWluZyBjaHJvbWUuXG4ubGF5ZXItb3B0aW9ucy1iYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMThweDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6ICR6LWxheWVyLW9wdGlvbnMtaXNsYW5kO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMjRweCk7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1taWQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCA2cHggMjBweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgYW5pbWF0aW9uOiBsYXllck9wdGlvbnNJc2xhbmRJbiAxNDBtcyBlYXNlLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNsYXRlIDE2MG1zIGVhc2U7XG5cbiAgLy8gQXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGUgaXNsYW5kIHNpdHMgb24gdG9wIG9mIHRoZSBmb290ZXIgbGlua3MuIExpZnQgaXQgY2xlYXIuXG4gIC8vXG4gIC8vIGB0cmFuc2xhdGVgLCBOT1QgYHRyYW5zZm9ybWA6IHRoZSBjZW50cmluZyBgdHJhbnNsYXRlWCgtNTAlKWAgYWJvdmUgaXMgb24gYHRyYW5zZm9ybWAsIGFuZFxuICAvLyBvdmVycmlkaW5nIHRoYXQgcHJvcGVydHkgaGVyZSB3b3VsZCBkcm9wIHRoZSBjZW50cmluZyDigJQgdGhlIGlzbGFuZCB3b3VsZCBqdW1wIHRvIHRoZSByaWdodFxuICAvLyBoYWxmIG9mIHRoZSB3aW5kb3cgYXMgaXQgcm9zZS4gVGhlIHNlcGFyYXRlIGB0cmFuc2xhdGVgIHByb3BlcnR5IGNvbXBvc2VzIHdpdGggaXQgaW5zdGVhZC5cbiAgJi5pcy1yYWlzZWQge1xuICAgIHRyYW5zbGF0ZTogMCAoLSRsYXllci1pc2xhbmQtcmFpc2UpO1xuICB9XG5cbiAgLy8gUmVzcGVjdCB1c2VycyB3aG8gYXNrIGZvciBsZXNzIG1vdGlvbjsgdGhlIGlzbGFuZCBzdGlsbCBhcHBlYXJzLCBqdXN0IHdpdGhvdXQgdHJhdmVsLlxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgPiAubGF5ZXItb3B0aW9ucy1uYW1lIHtcbiAgICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XG5cbiAgICAvLyBUaGUgbmFtZSBjYW4gYmUgbG9uZyBvbmNlIGxheWVycyBhcmUgcmVuYW1lYWJsZTsgaXQgeWllbGRzIGJlZm9yZSB0aGUgZmllbGRzIGRvLlxuICAgIG1heC13aWR0aDogMTRjaDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICA+IC5sYXllci1vcHRpb25zLXNlcCB7XG4gICAgY29sb3I6ICRjb2xvci1ib3JkZXItbWlkO1xuICB9XG5cbiAgPiAubGF5ZXItZmllbGQge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAzcHg7XG5cbiAgICA+IC5sYXllci1maWVsZC1sYWJlbCB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUteHM7XG4gICAgfVxuXG4gICAgPiAubGF5ZXItZmllbGQtaW5wdXQge1xuICAgICAgd2lkdGg6IDZjaDtcbiAgICAgIHBhZGRpbmc6IDJweCA0cHg7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLW1pZDtcblxuICAgICAgLy8gU3Bpbm5lcnMgc3RlYWwgd2lkdGggZnJvbSBhbiBhbHJlYWR5LW5hcnJvdyBmaWVsZCBhbmQgaW52aXRlIG1pcy1jbGlja3MuXG4gICAgICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcblxuICAgICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJGNvbG9yLWxheWVyLWFjY2VudDtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiAubGF5ZXItYXNwZWN0LWxpbmsge1xuICAgIC8vIFRoZSBnbHlwaCBpcyBjb25zdGFudDsgdGhlIFNUQVRFIGlzIHdoYXQgZGlmZmVycy4gVW5sb2NrZWQgcmVhZHMgYXMgZmFkZWQgYW5kXG4gICAgLy8gc3RydWNrIHRocm91Z2gsIGxvY2tlZCBhcyB0aGUgYWNjZW50IHVzZWQgYnkgdGhlIHNlbGVjdGlvbiBjaHJvbWUuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG9wYWNpdHk6IDAuNDU7XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItbGF5ZXItYWNjZW50O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxheWVyLWFjY2VudC1zb2Z0O1xuICAgIH1cblxuICAgIC8vIERpYWdvbmFsIHN0cmlrZSB3aGlsZSB1bmxvY2tlZCwgc28gdGhlIHN0YXRlIGlzIGxlZ2libGUgd2l0aG91dCByZWx5aW5nIG9uIGNvbG91ci5cbiAgICAmOm5vdCguYWN0aXZlKTo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAxNSU7XG4gICAgICByaWdodDogMTUlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGNvbG9yLXRleHQtdWk7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjBkZWcpO1xuICAgIH1cbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxheWVyT3B0aW9uc0lzbGFuZEluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSg4cHgpO1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuLy8gTGF5ZXIgc2VsZWN0aW9uIGNocm9tZTogaG92ZXIgcHJldmlldyArIGFjdGl2ZSBmcmFtZSB3aXRoIGNvcm5lciByZXNpemUgaGFuZGxlcy5cbi8vIExpdmVzIGluc2lkZSAuY2FudmFzLXdvcmxkIChzbyBpdCB0cmFja3MgcGFuL3pvb20gZm9yIGZyZWUpIGJ1dCBBQk9WRSB0aGUgY2FwdHVyZVxuLy8gc3VyZmFjZSwgc28gaGFuZGxlcyB3aW4gdGhlIHBvaW50ZXIgd2hpbGUgZXZlcnl0aGluZyBlbHNlIHN0YXlzIGNsaWNrLXRocm91Z2ggYW5kXG4vLyBmYWxscyBiYWNrIHRvIGEgbW92ZS4gU2l6ZXMgbWFya2VkIFwic2NyZWVuIHB4XCIgYXJlIGNvdW50ZXItc2NhbGVkIGJ5IDEvayBpbiBKUy5cbi8vXG4vLyBEZWxpYmVyYXRlbHkgc29saWQsIG5ldmVyIGRhc2hlZDogc2xpY2VzIG93biBtYXJjaGluZyBhbnRzLCBzbyBsYXllciBzZWxlY3Rpb24gaGFzXG4vLyB0byByZWFkIGFzIGEgZGlmZmVyZW50IGtpbmQgb2YgdGhpbmcgYXQgYSBnbGFuY2UuXG4vLyBMYXllciBjaHJvbWUgbGl2ZXMgT1VUU0lERSBgLmltZy1jYW52YXNgLCBhcyBhIHNpYmxpbmcsIHNvIGBjb250YWluOiBwYWludGAgY2Fubm90IGNsaXBcbi8vIGl0cyBoYW5kbGVzIG91dCBvZiBoaXQtdGVzdGluZy4gVGhlIHRyYW5zcGFyZW50IGJvcmRlciBtaXJyb3JzIGAuaW1nLWNhbnZhc2AncyBvd24gMXB4XG4vLyBib3JkZXIgc28gdGhpcyBib3gncyBDT05URU5UIGJveCBzdGFydHMgZXhhY3RseSB3aGVyZSBgLmNhbnZhcy13b3JsZGAgaXMgbGFpZCBvdXQg4oCUXG4vLyBrZWVwaW5nIHRoYXQgb2Zmc2V0IGluIENTUyBpbnN0ZWFkIG9mIGFzIGEgY29uc3RhbnQgaW4gdGhlIGdlb21ldHJ5IGNvZGUuXG4ubGF5ZXItY2hyb21lLWVzY2FwZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAvLyBHcm93biBieSBleGFjdGx5IHRoZSBoYW5kbGUgYmxlZWQsIHRoZW4gY2xpcHBlZC4gQm90aCBoYWx2ZXMgbWF0dGVyOlxuICAvLyAgLSBncm93biwgc28gYSBoYW5kbGUgY2VudHJlZCBvbiB0aGUgY2FudmFzIGVkZ2UgaXMgZnVsbHkgaW5zaWRlIHRoaXMgYm94IGFuZCBrZWVwc1xuICAvLyAgICBpdHMgaGl0LXRlc3RpbmcgKHRoZSB3aG9sZSBwb2ludCBvZiBlc2NhcGluZyBgLmltZy1jYW52YXNgJ3MgYGNvbnRhaW46IHBhaW50YCk7XG4gIC8vICAtIGNsaXBwZWQsIHNvIGEgbGF5ZXIgZHJhZ2dlZCBmYXIgb2ZmLWNhbnZhcyBjYW5ub3QgcGFpbnQgaXRzIGZyYW1lIGFjcm9zcyB0aGVcbiAgLy8gICAgdG9vbGJhciBhbmQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuIGBvdmVyZmxvdzogdmlzaWJsZWAgaGVyZSBkaWQgZXhhY3RseSB0aGF0LlxuICAvLyBFeGFjdGx5IGAuaW1nLWNhbnZhc2AncyBib3guIFRoZXJlIGlzIG5vIHBhc3RlYm9hcmQgYW5kIG5vIGNocm9tZSBibGVlZCwgc28gdGhpcyBpcyBhXG4gIC8vIHBsYWluIGBpbnNldDogMGAg4oCUIGl0IHdhcyBgLSRsYXllci1jaHJvbWUtYmxlZWRgIChhIHZhcmlhYmxlIHBpbm5lZCBhdCAwcHgpIHVudGlsIHRoZVxuICAvLyBwYXJrZWQgcGFzdGVib2FyZCBzY2FmZm9sZGluZyB3YXMgcmVtb3ZlZCBvbiAyMDI2LTA4LTEyLlxuICAvL1xuICAvLyDimqDvuI8gRG8gTk9UIHRyeSB0byBkZXJpdmUgdGhpcyBib3ggYnkgaW5zZXR0aW5nIGAuY2FudmFzLWxheW91dGAgaWYgYSBwYXN0ZWJvYXJkIGV2ZXJcbiAgLy8gcmV0dXJucy4gVGhpcyBib3ggaXMgYSBTSUJMSU5HIG9mIGAuaW1nLWNhbnZhc2AsIGFuZCBgLmNhbnZhcy1sYXlvdXRgIGlzXG4gIC8vIGBpbmxpbmUtYmxvY2s7IG1heC13aWR0aDogMTAwJWAsIHNvIGl0IHNocmluay13cmFwcyBhZ2FpbnN0IHRoZSBDT0xVTU4gcmF0aGVyIHRoYW5cbiAgLy8gYWdhaW5zdCBgLmltZy1jYW52YXNgLiBNZWFzdXJlZCBhdCBhIDI0cHggcGFzdGVib2FyZCBpdCBjYW1lIG91dCA3ODAgd2hlcmUgdGhlIHBhZGRlZCBib3hcbiAgLy8gaXMgfjgyNywgbGVhdmluZyB0aGlzIGJveCA3NDggd2lkZSBhZ2FpbnN0IGEgNzc3IGRvY3VtZW50IOKAlCB0aGUgZWFzdCBlZGdlIHN0cmlwIGZlbGxcbiAgLy8gb3V0c2lkZSBhbmQgYG92ZXJmbG93OiBoaWRkZW5gIGNsaXBwZWQgaXQgb3V0IG9mIEhJVC1URVNUSU5HLCBub3QganVzdCBwYWludGluZy5cbiAgaW5zZXQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiB2YXIoLS16LWxheWVyLWNocm9tZSk7XG59XG5cbi5sYXllci1jaHJvbWUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgLy8gYC5pbWctY2FudmFzYCdzIG93biBib3gsIHBsdXMgYSB0cmFuc3BhcmVudCBib3JkZXIgbWlycm9yaW5nIGl0cyAxcHggb25lLCBzbyB0aGlzIGNvbnRlbnRcbiAgLy8gYm94IHN0YXJ0cyBleGFjdGx5IHdoZXJlIGAuY2FudmFzLXdvcmxkYCBpcyBsYWlkIG91dCDigJQga2VlcGluZyB0aGF0IG9mZnNldCBpbiBDU1MgcmF0aGVyXG4gIC8vIHRoYW4gZHVwbGljYXRpbmcgaXQgaW4gdGhlIGdlb21ldHJ5IGNvZGUuXG4gIGluc2V0OiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IHZhcigtLXotbGF5ZXItY2hyb21lKTtcblxuICA+IC5ob3ZlcixcbiAgPiAuZnJhbWUge1xuICAgIC8vIENvbnN1bWVkIGJ5IHRoZSBpbmxpbmUgYm94LXNoYWRvdyByaW5nIG9uIGAuZnJhbWVgLlxuICAgIC0tbGF5ZXItYWNjZW50OiAjeyRjb2xvci1sYXllci1hY2NlbnR9O1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICA+IC5ob3ZlciB7XG4gICAgb3V0bGluZTogJGxheWVyLWhvdmVyLWZyYW1lLXB4IHNvbGlkICRjb2xvci1sYXllci1hY2NlbnQ7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0jeyRsYXllci1ob3Zlci1mcmFtZS1weH07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxheWVyLWFjY2VudC1zb2Z0O1xuICB9XG5cbiAgPiAuZnJhbWUge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgLy8gSGFuZGxlcyBTVFJBRERMRSB0aGUgZnJhbWUgZWRnZSwgY2VudHJlZCBvbiBpdCwgbGlrZSB0aGUgc2xpY2UgdG9vbCdzLiBUaGF0IGlzIG9ubHlcbiAgICAvLyBzYWZlIGJlY2F1c2UgdGhlIGNocm9tZSByZW5kZXJzIG91dHNpZGUgYC5pbWctY2FudmFzLXpvb21wYW5gIOKAlCBpbnNpZGUgaXQsXG4gICAgLy8gYGNvbnRhaW46IHBhaW50YCBkcm9wcGVkIHRoZSBvdXRzaWRlIGhhbGYgb2YgZWFjaCBoYW5kbGUgZnJvbSBoaXQtdGVzdGluZyBhbmQgbGVmdFxuICAgIC8vIHRoZSBjb3JuZXJzIHVuZ3JhYmJhYmxlIG9uIGEgbGF5ZXIgdGhhdCBmaWxsZWQgdGhlIGNhbnZhcy5cbiAgICAvL1xuICAgIC8vIFNpemVzIGFuZCBvZmZzZXRzIGFyZSBwbGFpbiBTQ1JFRU4gcHggc2V0IGlubGluZSBieSB0aGUgY29tcG9uZW50LiBUaGV5IGFyZSBub3RcbiAgICAvLyBjb3VudGVyLXNjYWxlZCBhbnkgbW9yZSwgYW5kIHRoZXkgYXJlIG5vdCBjZW50cmVkIHdpdGggYHRyYW5zbGF0ZSgtNTAlKWAgZWl0aGVyOlxuICAgIC8vIHRoYXQgcmVzb2x2ZXMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIG93biB3aWR0aCwgd2hpY2ggcHV0IGVkZ2UgaGFuZGxlcyBvZmYtY2VudHJlIGF0XG4gICAgLy8gYW55IHpvb20gYnV0IDEwMCUgYmFjayB3aGVuIGEgc2NhbGUgd2FzIHN0aWxsIGludm9sdmVkLiBPbmx5IHRoZSBjdXJzb3IgZGlmZmVycyBoZXJlLlxuICAgIC8vIEludmlzaWJsZSBmdWxsLWxlbmd0aCBncmFiIHN0cmlwIG9uIGVhY2ggZWRnZSDigJQgdGhlIHNxdWFyZSBoYW5kbGUgaXMgb25seSB0aGVcbiAgICAvLyB2aXN1YWwgY3VlLCBzbyB5b3UgbmV2ZXIgaGF2ZSB0byBhaW0gZm9yIGEgMTBweCB0YXJnZXQgdG8gcmVzaXplIGEgc2lkZS4gU2l0c1xuICAgIC8vIEJFTE9XIHRoZSBzcXVhcmVzIGluIHNvdXJjZSBvcmRlciBzbyB0aGUgY29ybmVyIGhhbmRsZXMga2VlcCB0aGVpciB6b25lLlxuICAgID4gLmVkZ2Utc3RyaXAge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcblxuICAgICAgJi5lZGdlLXN0cmlwLW4sXG4gICAgICAmLmVkZ2Utc3RyaXAtcyB7IGN1cnNvcjogbnMtcmVzaXplOyB9XG5cbiAgICAgICYuZWRnZS1zdHJpcC1lLFxuICAgICAgJi5lZGdlLXN0cmlwLXcgeyBjdXJzb3I6IGV3LXJlc2l6ZTsgfVxuICAgIH1cblxuICAgID4gLmhhbmRsZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGF5ZXItYWNjZW50O1xuXG4gICAgICAvLyBBIHJlYWwgMXB4LCBzdGF0ZWQgb25jZSBoZXJlLiBJdCB1c2VkIHRvIGJlIHNldCBpbmxpbmUgYXMgYG1heCgwLjUsIDEvaylgIHNvIGl0XG4gICAgICAvLyB3b3VsZCBzdXJ2aXZlIHRoZSB3b3JsZCdzIHNjYWxpbmcg4oCUIGJ1dCBgYm9yZGVyLXdpZHRoYCBxdWFudGlzZXMgdG8gd2hvbGUgcGl4ZWxzLFxuICAgICAgLy8gc28gdGhhdCBjYW1lIG91dCBhbnl3aGVyZSBiZXR3ZWVuIDAuOHB4IGFuZCAzLjNweCBvbiBzY3JlZW4gZGVwZW5kaW5nIG9uIHpvb20uXG4gICAgICAvLyBPdXRzaWRlIHRoZSB3b3JsZCB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUgZm9yLlxuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLXdoaXRlO1xuICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuXG4gICAgICAvLyBQcmV2ZW50IGJyb3dzZXIgc2Nyb2xsL3pvb20gZ2VzdHVyZXMgZnJvbSBzdGVhbGluZyB0aGUgZHJhZyBvbiB0b3VjaC5cbiAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcblxuICAgICAgJi5oYW5kbGUtbncsXG4gICAgICAmLmhhbmRsZS1zZSB7IGN1cnNvcjogbndzZS1yZXNpemU7IH1cblxuICAgICAgJi5oYW5kbGUtbmUsXG4gICAgICAmLmhhbmRsZS1zdyB7IGN1cnNvcjogbmVzdy1yZXNpemU7IH1cblxuICAgICAgJi5oYW5kbGUtbixcbiAgICAgICYuaGFuZGxlLXMgeyBjdXJzb3I6IG5zLXJlc2l6ZTsgfVxuXG4gICAgICAmLmhhbmRsZS1lLFxuICAgICAgJi5oYW5kbGUtdyB7IGN1cnNvcjogZXctcmVzaXplOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gTmFtZSBiYWRnZTogdGhlIHJlYWwgZGlzYW1iaWd1YXRvciB3aGVuIHNldmVyYWwgc2ltaWxhciBsYXllcnMgb3ZlcmxhcCBhbmQgdGhlXG4gIC8vIG91dGxpbmVzIGFsb25lIGNhbid0IHRlbGwgeW91IHdoaWNoIG9uZSB5b3UgaGF2ZS4gQW5jaG9yZWQgaW5zaWRlIHRoZSBib3gncyB0b3AtbGVmdCxcbiAgLy8gaW4gc2NyZWVuIHB4IOKAlCBubyBjb3VudGVyLXNjYWxlIG5lZWRlZCBub3cgdGhlIGNocm9tZSBpcyBvdXRzaWRlIHRoZSB6b29tL3BhbiB3b3JsZC5cbiAgLy8gSlMgYWRkcyBhIHRyYW5zbGF0ZSB0aGF0IGNsZWFycyB0aGUgTlcgaGFuZGxlLlxuICAubGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcbiAgICBwYWRkaW5nOiAxcHggNXB4O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1sYXllci1hY2NlbnQ7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUteHM7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxufVxuXG4vLyBEb2N1bWVudCBib3VuZGFyeTogZnJhbWVzIHRoZSBjYW52YXMgKGRvY3VtZW50KSBzbyBpbi1ib3VuZHMgdnMgb3V0LW9mLWJvdW5kc1xuLy8gaXMgb2J2aW91cy4gU2l0cyBhYm92ZSB0aGUgbGl2ZSBjb21wb3NpdGUsIGJlbG93IHRoZSBtb3ZlLWNhcHR1cmUgc3VyZmFjZS5cbi5jYW52YXMtYm91bmRhcnkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuXG4gIC8vIEEgUklORywgbm90IGEgYGJvcmRlcmAuIFRoaXMgZWxlbWVudCBzaXRzIGluc2lkZSB0aGUgem9vbS9wYW4gd29ybGQsIHNvIGl0cyBvdXRsaW5lIGlzXG4gIC8vIHNjYWxlZCB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBhbmQgaGFzIHRvIGJlIGNvdW50ZXItc2NhbGVkIGJ5IDEvayB0byBzdGF5IG9uZSBzY3JlZW5cbiAgLy8gcGl4ZWwg4oCUIGJ1dCBgYm9yZGVyLXdpZHRoYCBpcyBRVUFOVElTRUQgVE8gV0hPTEUgUElYRUxTLCBzbyBhc2tpbmcgZm9yIDYuOTU1cHggeWllbGRzXG4gIC8vIDZweCBhbmQgdGhlIGxpbmUgbGFuZHMgYXQgMC44NiBzY3JlZW4gcHgsIHRoaW4gZW5vdWdoIGF0IHNvbWUgem9vbSBsZXZlbHMgdG8gd2FzaCBvdXRcbiAgLy8gZW50aXJlbHkuIEVkZ2VzIHRoZW4gd2luayBpbiBhbmQgb3V0IGluZGVwZW5kZW50bHkgd2hpbGUgem9vbWluZy4gQSBib3gtc2hhZG93IHNwcmVhZFxuICAvLyB0YWtlcyB0aGUgZnJhY3Rpb25hbCB2YWx1ZSBhcyBnaXZlbiwgd2hpY2ggaXMgdGhlIHNhbWUgcmVhc29uIHRoZSBsYXllciBzZWxlY3Rpb25cbiAgLy8gZnJhbWUgaXMgZHJhd24gYXMgYSByaW5nLiBXaWR0aCBjb21lcyBmcm9tIGAtLWNhbnZhcy1ib3VuZGFyeS13YCAoc2V0IGlubGluZSwgaXQgaXNcbiAgLy8gdGhlIG9ubHkgdGhpbmcgdGhhdCBrbm93cyB0aGUgY3VycmVudCB6b29tKTsgdGhlIGNvbG91ciBzdGF5cyBoZXJlLlxuICBib3gtc2hhZG93OiAwIDAgMCB2YXIoLS1jYW52YXMtYm91bmRhcnktdywgMXB4KSAkY29sb3ItZ3JlZW4tbGluaztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IHZhcigtLXotbGF5ZXItY2FudmFzLWJvdW5kYXJ5KTtcbn1cblxuLy8gSGlkZGVuIGZpbGUgaW5wdXRzICh1cGxvYWQgdHJpZ2dlciArIGFkZC1sYXllcik6IHRoZSB2aXNpYmxlIGRyb3B6b25lL3BhbmVsXG4vLyBidXR0b25zIHByb3h5IHRoZSBjbGljazsgdGhlIHJhdyA8aW5wdXQgdHlwZT1maWxlPiBzdGF5cyBvdXQgb2YgdGhlIGxheW91dC5cbi5oaWRkZW4tZmlsZS1pbnB1dCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIEhvbWUtc2NyZWVuIHVwbG9hZDogdGhlIHdob2xlIGNvbnRhaW5lciBJUyB0aGUgdHJpZ2dlciArIGRyYWctYW5kLWRyb3Agem9uZS5cbi51cGxvYWQtZHJvcHpvbmUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDE0cHg7XG4gIHBhZGRpbmc6IDQwcHggMjRweDtcbiAgbWluLWhlaWdodDogMzQwcHg7XG5cbiAgLy8gSGFpcmxpbmUsIG5vdCBhIGhlYXZ5IDJweCBydWxlOiBhdCB0aGlzIHNpemUgdGhlIGRyb3B6b25lIGlzIGFscmVhZHkgdW5taXN0YWthYmxlXG4gIC8vIGZyb20gaXRzIHNjYWxlIGFuZCBpdHMgXCJkcmFnICYgZHJvcFwiIGNvcHksIHNvIHRoZSBib3JkZXIgb25seSBuZWVkcyB0byBkZXNjcmliZSB0aGVcbiAgLy8gZWRnZSDigJQgYSB0aGljayBkYXNoZWQgZnJhbWUgcmVhZHMgYXMgZGVjb3JhdGlvbiBhbmQgZG9taW5hdGVzIGFuIG90aGVyd2lzZSBlbXB0eSBwYWdlLlxuICBib3JkZXI6IDFweCBkYXNoZWQgJGNvbG9yLWJvcmRlci1taWQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGJhY2tncm91bmQgMTIwbXMgZWFzZTtcblxuICAvLyBXaG9sZS1jb250YWluZXIgaGlnaGxpZ2h0IG9uIGhvdmVyIEFORCB3aGlsZSBhIGZpbGUgaXMgZHJhZ2dlZCBvdmVyLlxuICAmOmhvdmVyLFxuICAmLmRyYWctYWN0aXZlIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvci1ncmVlbi1saW5rO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ncmVlbi10aW50LWJnO1xuICB9XG5cbiAgLnVwbG9hZC1oaW50IHtcbiAgICBmb250LXNpemU6ICRkZWZhdWx0LWZvbnQtc2l6ZTtcbiAgICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG4gIH1cbn1cblxuLy8gQ2FudmFzLXNpemUgc2V0dGluZ3MgcG9wb3ZlciAoZ2VhciBidXR0b24pLlxuLmNhbnZhcy1zZXR0aW5ncy1wb3BvdmVyIHtcbiAgLmNhbnZhcy1zZXR0aW5ncy1oZWFkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogOHB4O1xuICB9XG5cbiAgLmNhbnZhcy1zZXR0aW5ncy1jbG9zZSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1saWdodDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDJweCA3cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gIH1cblxuICAuY2FudmFzLXNldHRpbmdzLW5vdGUge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS14cztcbiAgICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG4gICAgbWFyZ2luOiA0cHggMCAwO1xuICAgIG1heC13aWR0aDogMjIwcHg7XG4gIH1cblxuICAuY2FudmFzLXNldHRpbmdzLXJvdyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgZ2FwOiA4cHg7XG4gICAgbWFyZ2luOiA4cHggMDtcblxuICAgIGxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICAgICAgZ2FwOiAycHg7XG4gICAgfVxuXG4gICAgaW5wdXQge1xuICAgICAgd2lkdGg6IDcycHg7XG4gICAgICBwYWRkaW5nOiAycHggNHB4O1xuICAgIH1cblxuICAgIC5jYW52YXMtc2V0dGluZ3MteCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICAgIH1cbiAgfVxuXG4gIC5jYW52YXMtc2V0dGluZ3MtYWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDZweDtcbiAgfVxufVxuXG4vLyBTbGljZS9Nb3ZlIHRvb2wgc3dpdGNoZXIg4oCUIGEgc2VnbWVudGVkIGNvbnRyb2wgd2l0aCBhbiB1bm1pc3Rha2FibGUgYWN0aXZlIHRvb2wuXG4vLyBIaXN0b3J5ICsgTGF5ZXJzOiB0aGUgdHdvIHBhbmVscyB0aGF0IHNsaWRlIG92ZXIgdGhlIGNhbnZhcywgZHJhd24gYXMgb25lIHNlZ21lbnRlZFxuLy8gY29udHJvbC4gU2hhcmVzIHRoZSBzaGVsbCB3aXRoIGAudG9vbC1zd2l0Y2hgIOKAlCBzYW1lIGlkZWEsIGRpZmZlcmVudCBheGlzICh0aGF0IG9uZSBwaWNrc1xuLy8gYSB0b29sLCB0aGlzIG9uZSBvcGVucyBhIHBhbmVsKSwgc28gdGhleSBtdXN0IG5vdCByZWFkIGFzIHR3byBkaWZmZXJlbnQga2luZHMgb2Ygd2lkZ2V0LlxuLnRvb2wtc3dpdGNoLFxuLnRvb2wtZ3JvdXAge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLWJvcmRlci1taWQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAudG9vbC1zd2l0Y2gtYnRuLFxuICAudG9vbC1ncm91cC1idG4ge1xuICAgIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICAgIHBhZGRpbmc6IDNweCAxMHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRjb2xvci1ib3JkZXItbWlkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1zdXJmYWNlLW11dGVkO1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgfVxuXG4gICAgLy8gVGhlIFNsaWNlL0xheWVyIHN3aXRjaCBtYXJrcyB0aGUgYXJtZWQgdG9vbCB3aXRoIGAuYWN0aXZlYDsgSGlzdG9yeS9MYXllcnMgbWFya3MgdGhlXG4gICAgLy8gT1BFTiBwYW5lbCB3aXRoIGBhcmlhLXByZXNzZWRgLCB3aGljaCBpdCBhbHJlYWR5IGNhcnJpZWQgZm9yIGFzc2lzdGl2ZSB0ZWNoLiBTYW1lIHJ1bGUsXG4gICAgLy8gc28gdGhlIHR3byBzZWdtZW50ZWQgY29udHJvbHMgY2Fubm90IGRyaWZ0IGludG8gbG9va2luZyBsaWtlIGRpZmZlcmVudCB3aWRnZXRzLlxuICAgICYuYWN0aXZlLFxuICAgICZbYXJpYS1wcmVzc2VkPSd0cnVlJ106bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWdyZWVuLWxpbms7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogJGRpc2FibGVkLW9wYWNpdHk7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBab29tIHRvb2xiYXI6IGtlZXAgdGhlIHpvb20gcGVyY2VudCBjb21wYWN0IGFuZCBhY2Nlc3NpYmxlLlxuLnpvb20tcGVyY2VudC13cmFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi13aWR0aDogMDtcbiAgcGFkZGluZzogMCAycHg7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbTtcbiAgY29sb3I6ICRjb2xvci10ZXh0LXVpO1xufVxuXG4uem9vbS1wZXJjZW50LWlucHV0IHtcbiAgLy8gT25lIHdpZHRoLCBhbHdheXMuIFNlZSAkem9vbS1pbnB1dC13aWR0aCDigJQgdGhlIGZpZWxkIHVzZWQgdG8gc2l6ZSBpdHNlbGYgdG8gaXRzIGNvbnRlbnRzXG4gIC8vIGFuZCBqaXR0ZXJlZCBvbiBldmVyeSBzY3JvbGwgdGljay5cbiAgd2lkdGg6ICR6b29tLWlucHV0LXdpZHRoO1xuICBoZWlnaHQ6ICRjb250cm9sLWhlaWdodC1tZDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDA7XG5cbiAgLy8gTUVBU1VSRUQ6IGEgMXB4IGJvcmRlciBlYWNoIHNpZGUgbGVmdCA0OHB4IG9mIGNvbnRlbnQgYm94LCBhbmQgXCI3OTkuOTklXCIgbmVlZHMgNTAg4oCUIHRoZVxuICAvLyB3aWRlc3QgdmFsdWVzIGNsaXBwZWQgdGhlaXIgdHJhaWxpbmcgXCIlXCIuIFRoZSBmcmFtZSBpcyBhbiBgb3V0bGluZWAgaW5zdGVhZCwgd2hpY2ggcGFpbnRzXG4gIC8vIGluIHRoZSBzYW1lIHBsYWNlIGJ1dCB0YWtlcyBubyBsYXlvdXQgc3BhY2UsIHNvIGFsbCA1MHB4IGFyZSB1c2FibGUuXG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICRjb2xvci10ZXh0LXN0cm9uZztcblxuICAvLyBEaWdpdHMgYWxsIG9uZSB3aWR0aCwgc28gdGhlIG51bWJlciBkb2VzIG5vdCBzaHVmZmxlIHNpZGV3YXlzIGFzIGl0IGNvdW50cy5cbiAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1zdXJmYWNlO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKDM1LCAxNDcsIDExNSwgMC4zNSk7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgfVxufVxuXG4uem9vbS1wZXJjZW50LXdyYXAuaXMtYWN0aXZlIC56b29tLXBlcmNlbnQtaW5wdXQge1xuICBvdXRsaW5lOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXN1cmZhY2U7XG59XG5cbi5oaXN0b3J5LWRyYXdlciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgd2lkdGg6IG1pbigzNjBweCwgOTJ2dyk7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VhZWFlYTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMiUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTgwbXMgZWFzZTtcbiAgei1pbmRleDogJHotZHJhd2VyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICYub3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG59XG5cbi5oaXN0b3J5LWRyYXdlci1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjZWFlYWVhO1xufVxuXG4uaGlzdG9yeS1kcmF3ZXItdGl0bGUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uaGlzdG9yeS1jbG9zZSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlYWVhZWE7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogNHB4IDhweDtcbn1cblxuLy8gTG9ja2VkIHN0ZXBzIHN0YXkgbGVnaWJsZSDigJQgZGltbWVkIGVub3VnaCB0byByZWFkIGFzIHVuYXZhaWxhYmxlLCBub3Qgc28gZmFpbnQgdGhhdCB0aGVcbi8vIHVzZXIgY2Fubm90IHNlZSBXSEFUIHRoZXkgYXJlIG1pc3NpbmcuIFRoYXQgcmVhZGFiaWxpdHkgaXMgdGhlIHdob2xlIHBvaW50IG9mIGtlZXBpbmcgdGhlbS5cbi5oaXN0b3J5LWl0ZW0ubG9ja2VkIHtcbiAgb3BhY2l0eTogMC40NTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFNpdHMgd2l0aCB0aGUgbG9ja2VkIHJvd3MsIGF0IHRoZSBlbmQgb2YgdGhlIHRpbWVsaW5lLlxuLmhpc3RvcnktbG9ja2VkLW5vdGUge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIHBhZGRpbmc6IDhweCA2cHggMDtcbiAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAkY29sb3ItYm9yZGVyLWxpZ2h0O1xuICBmb250LXNpemU6ICRmb250LXNpemUtc207XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcblxuICBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxufVxuXG4uaGlzdG9yeS1kcmF3ZXItc3VidGl0bGUge1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzY2NjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjZWFlYWVhO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGdhcDogOHB4O1xufVxuXG4uaGlzdG9yeS1kcmF3ZXItc3VidGl0bGUtbGVmdCB7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLmhpc3RvcnktZHJhd2VyLXN1YnRpdGxlLXJpZ2h0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA2cHg7XG59XG5cbi5oaXN0b3J5LWxpc3Qge1xuICBvdmVyZmxvdzogYXV0bztcbiAgcGFkZGluZzogOHB4IDhweCAxMnB4O1xufVxuXG4uaGlzdG9yeS1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxMHB4O1xuICBwYWRkaW5nOiA4cHg7XG4gIGJvcmRlcjogMXB4IGRvdHRlZCAjZWFlYWVhO1xuICBtYXJnaW46IDAgMCA4cHggMDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uaGlzdG9yeS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbn1cblxuLmhpc3RvcnktaXRlbTpmb2N1cyB7XG4gIG91dGxpbmU6IDJweCBzb2xpZCAjMjM5MzczO1xuICBvdXRsaW5lLW9mZnNldDogMXB4O1xufVxuXG4uaGlzdG9yeS1pdGVtLmN1cnJlbnQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMjM5MzczO1xuICBiYWNrZ3JvdW5kOiAjZjBmYmY3O1xufVxuXG4uaGlzdG9yeS1pdGVtLmZ1dHVyZSB7XG4gIG9wYWNpdHk6IDAuNTU7XG59XG5cbi5oaXN0b3J5LWl0ZW0uZnV0dXJlOmhvdmVyIHtcbiAgb3BhY2l0eTogMC43NTtcbn1cblxuLmhpc3RvcnktaXRlbS5yb290IC5oaXN0b3J5LXByaW1hcnkge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8vIFNoYXJlZCBcImNoaXBcIiBzdHlsZSB1c2VkIGFjcm9zcyBzbWFsbCBVSSBiYWRnZXMvYnV0dG9ucy5cbiV1aS1jaGlwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlYWVhZWE7XG4gIGJhY2tncm91bmQ6ICNmYWZhZmE7XG4gIGNvbG9yOiAjNjY2O1xufVxuXG4uaGlzdG9yeS1pbmRleCB7XG4gIEBleHRlbmQgJXVpLWNoaXA7XG5cbiAgd2lkdGg6IDIycHg7XG4gIGZsZXg6IDAgMCAyMnB4O1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi8vIEV2ZXJ5IGRpYWxvZydzIGNsb3NlIGJ1dHRvbiAoY29tcG9uZW50cy9Nb2RhbFNoZWxsKSB1c2VzIHRoZSBzYW1lIGJhc2UgXCJjaGlwXCIgc3R5bGluZyBhcyBoaXN0b3J5XG4vLyBpbmRpY2VzLiBJdCBuYW1lZCBgLmF1dGgtbW9kYWwtY2xvc2VgIHVudGlsIHRoZSBzaGVsbCB3YXMgZXh0cmFjdGVkLCB3aGljaCBpcyBwcmVjaXNlbHkgd2h5IGFcbi8vIHNlY29uZCBkaWFsb2cncyDDlyBkaWQgbm90IG1hdGNoOiB0aGUgcnVsZSB3YXMgdGllZCB0byBvbmUgZGlhbG9nIHJhdGhlciB0aGFuIHRvIHRoZSBjb250cm9sLlxuLm1vZGFsLXNoZWxsLWNsb3NlIHtcbiAgQGV4dGVuZCAldWktY2hpcDtcbn1cblxuLmhpc3RvcnktdGh1bWIge1xuICB3aWR0aDogNDRweDtcbiAgaGVpZ2h0OiA0NHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZWFlYWVhO1xuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICBmbGV4OiAwIDAgNDRweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgaW1nIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuJXRodW1iLWVtcHR5LWJnIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudChcbiAgICA0NWRlZyxcbiAgICAjZjdmN2Y3LFxuICAgICNmN2Y3ZjcgNnB4LFxuICAgICNmZmZmZmYgNnB4LFxuICAgICNmZmZmZmYgMTJweFxuICApO1xufVxuXG4uaGlzdG9yeS10aHVtYi1lbXB0eSB7XG4gIEBleHRlbmQgJXRodW1iLWVtcHR5LWJnO1xufVxuXG4uaGlzdG9yeS10ZXh0IHtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uaGlzdG9yeS1wcmltYXJ5IHtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLW1kO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5oaXN0b3J5LXNlY29uZGFyeSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICM0NDQ7XG4gIG1hcmdpbi10b3A6IDRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5teS1zbGljZXMtbGlzdC13cmFwIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLm15LXNsaWNlcy1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMHB4O1xufVxuXG4ubXktc2xpY2VzLXN1bW1hcnkge1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gIGJvcmRlcjogMXB4IGRvdHRlZCAjZWFlYWVhO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8vIEZyZWU6IG9uZSBxdWlldCBsaW5lIHdoZW4gb2xkZXIgcHJvamVjdHMgYXJlIG5vdCBsaXN0ZWQuXG4ubXktc2xpY2VzLWxpbWl0IHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbn1cblxuLy8gUHJvOiBzaG93biBvbmx5IHdoZW4gdGhlIGxpc3Qgc3BhbnMgbW9yZSB0aGFuIG9uZSBwYWdlLlxuLm15LXNsaWNlcy1wYWdlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogJHRvb2xiYXItZ2FwO1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbn1cblxuLm15LXNsaWNlcy1zdW1tYXJ5LXRpdGxlIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogODAwO1xuICBtYXJnaW4tYm90dG9tOiAxMXB4O1xufVxuXG4vLyBTcGFjZSBiZXR3ZWVuIHRoZSB0d28gbGlzdHMuIERyYWZ0cyBhbmQgZmluaXNoZWQgcHJvamVjdHMgYXJlIGRpZmZlcmVudCBLSU5EUyBvZiB0aGluZyDigJQgb25lIGlzXG4vLyBnb2luZyB0byBiZSBkZWxldGVkIG9uIGEgY2xvY2ssIHRoZSBvdGhlciBpcyBrZXB0IOKAlCBhbmQgcnVuIHRvZ2V0aGVyIHRoZXkgcmVhZCBhcyBvbmUgbG9uZyBsaXN0XG4vLyB3aG9zZSByb3dzIGluZXhwbGljYWJseSBjYXJyeSBkaWZmZXJlbnQgYnV0dG9ucy5cbi5teS1zbGljZXMtc2VjdGlvbi10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDM0cHg7XG59XG5cbi5teS1zbGljZXMtc2VjdGlvbi1ub3RlIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBjb2xvcjogJGNvbG9yLXRleHQtbXV0ZWQ7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cblxuLm15LXNsaWNlcy1zdW1tYXJ5LXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgZ2FwOiA2cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogJGRlZmF1bHQtZm9udC1zaXplO1xuICBjb2xvcjogIzMzMztcbn1cblxuLm15LXNsaWNlcy1zdW1tYXJ5LXNlcCB7XG4gIGNvbG9yOiAjNzc3O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCA2cHg7XG59XG5cbi5teS1zbGljZXMtc3VtbWFyeS1mdW4ge1xuICBtYXJnaW4tdG9wOiA2cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICM1NTU7XG59XG5cbi5teS1zbGljZXMtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogMTJweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2UzZTNlMztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7IC8vIG1hdGNoIGhpc3RvcnkgaG92ZXJcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCAjMjM5MzczOyAvLyBtYXRjaCBoaXN0b3J5IGZvY3VzXG4gICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgfVxufVxuXG4ubXktc2xpY2VzLWl0ZW0gLmhpc3RvcnktaW5kZXgge1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xufVxuXG4ubXktc2xpY2VzLXRodW1iIHtcbiAgd2lkdGg6IDU2cHg7XG4gIGhlaWdodDogNTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYmFja2dyb3VuZDogI2YzZjNmMztcbiAgZmxleDogMCAwIDU2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkICMyMzkzNzM7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgfVxuXG4gIGltZyB7XG4gICAgd2lkdGg6IDU2cHg7XG4gICAgaGVpZ2h0OiA1NnB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICB9XG59XG5cbi5teS1zbGljZXMtdGh1bWItZW1wdHkge1xuICBAZXh0ZW5kICV0aHVtYi1lbXB0eS1iZztcbn1cblxuLm15LXNsaWNlcy10ZXh0IHtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4ubXktc2xpY2VzLXZlcnNpb24ge1xuICBtYXJnaW4tbGVmdDogOHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNjY2O1xufVxuXG4ubXktc2xpY2VzLXByaW1hcnkge1xuICBmb250LXNpemU6ICRmb250LXNpemUtbWQ7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLm15LXNsaWNlcy1zZWNvbmRhcnkge1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjNDQ0O1xuICBtYXJnaW4tdG9wOiA0cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4ubXktc2xpY2VzLWFjdGlvbnMge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cblxuLm15LXNsaWNlcy1hY3Rpb24ge1xuICBmb250LXNpemU6ICRkZWZhdWx0LWZvbnQtc2l6ZTtcbn1cblxuI21lbnUge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNlYWVhZWE7XG4gIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgI2VhZWFlYTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogNHB4O1xufVxuXG4jdG9vbC1ib3gge1xuICBwYWRkaW5nOiA0cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbn1cblxuI3Rvb2wtYm94IHtcbiAgLy8gVEhFIHRvb2xiYXIgY29udGFpbmVyIOKAlCB0aGUgb25seSBjaGlsZCBvZiAjbWVudS4gVGhlcmUgdXNlZCB0byBiZSBhIHNpYmxpbmcgYCNhY3Rpb25zYFxuICAvLyBob2xkaW5nIENob3AsIG1hcmt1cCBpbmhlcml0ZWQgdmVyYmF0aW0gZnJvbSB0aGUgcHJlLVJlYWN0IHYxLjEgcHJvZCBwYWdlIChgN2NjYTllZWApLFxuICAvLyBhbmQgdGhpcyBydWxlIGNhcnJpZWQgYG1heC13aWR0aDogY2FsYygxMDAlIC0gMTUwcHgpYCBwdXJlbHkgdG8gc3RvcCB0b29sYmFyIGNvbnRyb2xzXG4gIC8vIHNsaWRpbmcgdW5kZXJuZWF0aCBpdC4gQm90aCBhcmUgZ29uZTogQ2hvcCBpcyBzaW1wbHkgdGhlIGxhc3QgaXRlbSBvbiByb3cgMS5cbiAgZmxleDogMSAxIDEwMCU7XG4gIG1pbi13aWR0aDogMjAwcHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcblxuICAvLyBTdGFja2VkIHJvd3MsIGNvbXBvc2VkIHBlciB0aWVyIGluIGBjb25zdGFudHMvdG9vbGJhckxheW91dC50c2AuIEVhY2ggcm93IHdyYXBzXG4gIC8vIGluZGVwZW5kZW50bHkgd2hlbiBzcGFjZSBpcyB0aWdodC4gYWxpZ24taXRlbXM6ZmxleC1zdGFydCBrZWVwcyB0aGVtIGxlZnQtYWxpZ25lZFxuICAvLyAoYSBjZW50ZXJlZCBjb2x1bW4gd291bGQgaW5kZW50IHRoZSBuYXJyb3dlciByb3dzKS5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgLy8gWkVSTywgZGVsaWJlcmF0ZWx5LiBUaGUgTU9SRSBwYW5lbCBpcyBhbHdheXMgYSBmbGV4IGNoaWxkIOKAlCBjb2xsYXBzZWQgaXQgaXMgMHB4IHRhbGwg4oCUXG4gIC8vIHNvIGEgZ2FwIGhlcmUgcGFpbnRzIGEgYmxhbmsgOHB4IGJhbmQgdW5kZXIgcm93IDEgd2hlbmV2ZXIgdGhlIHRvb2xiYXIgaXMgc2h1dC4gVGhlIGdhcFxuICAvLyB0aGF0IHNlcGFyYXRlcyByb3cgMSBmcm9tIHRoZSBwYW5lbCBpcyB0aGUgcGFuZWwncyBvd24gYG1hcmdpbi10b3BgLCB3aGljaCBvbmx5IGV4aXN0c1xuICAvLyB3aGlsZSBpdCBpcyBvcGVuLlxuICBnYXA6IDA7XG5cbiAgLnRvb2wtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogJHRvb2xiYXItZ2FwO1xuXG4gICAgLy8gRnVsbCB3aWR0aCBzbyBDaG9wJ3MgYXV0by1tYXJnaW4gaGFzIHNvbWV0aGluZyB0byBwdXNoIGFnYWluc3QuXG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBDaG9wIHNpdHMgaGFyZCByaWdodCwgdGhlIHdheSBpdCBkb2VzIG9uIHRoZSBsaXZlIHNpdGUg4oCUIHdoZXJlIHRoZSBlZmZlY3QgY2FtZSBmcm9tXG4gIC8vIGAjYWN0aW9uc2AgYmVpbmcgYSBzZXBhcmF0ZSBmbGV4IGNvbHVtbi4gVGhlcmUgaXMgb25lIGNvbnRhaW5lciBub3csIHNvIGFuIGF1dG8tbWFyZ2luXG4gIC8vIGRvZXMgaXQgaW5zdGVhZDogaXQgYWRhcHRzIHRvIHRoZSBidXR0b24ncyByZWFsIHdpZHRoICh3aGljaCBjaGFuZ2VzIOKAlCBcIlNsaWNpbmcuLi5cIiB2c1xuICAvLyBcIkNob3Ag4pyCIENob3AhXCIpIHdoZXJlIGEgcmVzZXJ2ZWQgY29sdW1uIGhhZCB0byBndWVzcy5cbiAgLmJ0bi1jaG9wIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC8vIEljb24tb25seSB0b29sYmFyIGJ1dHRvbnMgKFVuZG8sIFJlZG8sIFNhdmUgZHJhZnQg4oCUIGNvbXBvbmVudHMvVG9vbGJhckljb25zLnRzeCk6IG9uZSBmaXhlZFxuICAvLyBib3gsIHNvIGEgc3RhdGUgY2hhbmdlIG9yIGljb24gc3dhcCBuZXZlciBzaGlmdHMgdGhlIHJvdy4gV29yZHMgbGl2ZSBpbiBhcmlhLWxhYmVsICsgdGl0bGUuXG4gIC5idG4taWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWdyaWQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMzhweDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLnRvb2xiYXItaWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICB9XG5cbiAgLy8gU2hvd24gb25seSB3aGVuIGRyYWZ0IGF1dG8tc2F2ZSBoYXMgcGF1c2VkIGFmdGVyIGl0cyByZXRyaWVzICh1c2VEcmFmdEF1dG9zYXZlKS5cbiAgLy8gVGhlIFwiZHJhZnQgaXNuJ3Qgc2F2aW5nXCIgd2FybmluZy4gSU4gRkxPVyBvbiBwdXJwb3NlOiBpdCBjYXJyaWVzIGEgVHJ5IGFnYWluIGJ1dHRvbiwgc28gaXQgaXNcbiAgLy8gc29tZXRoaW5nIHRvIGFjdCBvbiwgYW5kIHB1c2hpbmcgdGhlIGNhbnZhcyBkb3duIGEgbGluZSBpcyB0aGUgcmlnaHQgY29zdCBmb3IgdGhhdC5cbiAgLmRyYWZ0LXNhdmUtbm90aWNlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogJHRvb2xiYXItZ2FwO1xuICAgIG1hcmdpbi10b3A6ICR0b29sYmFyLWdhcDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICRjb2xvci10ZXh0LW11dGVkO1xuICB9XG5cblxuICAvLyBTYXZpbmcgcHVsc2U6IGEgc21vb3RoIGZhZGUgb3V0IGFuZCBiYWNrIGluLiBJdHMgZHVyYXRpb24gaXMgc2V0IGlubGluZSBmcm9tIFNBVkVfUFVMU0VfTVNcbiAgLy8gKFNhdmVEcmFmdEljb24udHN4KSDigJQgdGhlIG9uZSBzb3VyY2U7IGVhY2ggY3ljbGUgc3RhcnRzIGFuZCBlbmRzIGF0IGZ1bGwgc3RyZW5ndGguXG4gIC5zYXZlLWRyYWZ0LWljb24tLXNhdmluZyB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHNhdmUtZHJhZnQtcHVsc2U7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbi1vdXQ7XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gIH1cblxuICAvLyBPbmx5IHRoZSBjaGVja21hcmsgaXMgY29sb3JlZDsgaXQgZHJhd3MgaW4gb25jZSB3aGVuIHRoZSBzYXZlZCBpY29uIG1vdW50cy5cbiAgLnNhdmUtZHJhZnQtY2hlY2sge1xuICAgIGNvbG9yOiAkY29sb3ItZ3JlZW4tbGluaztcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMjtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMTI7XG4gICAgYW5pbWF0aW9uOiBzYXZlLWRyYWZ0LWNoZWNrLWRyYXcgMjYwbXMgZWFzZS1vdXQgZm9yd2FyZHM7XG4gIH1cblxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5zYXZlLWRyYWZ0LWljb24tLXNhdmluZyB7XG4gICAgICBhbmltYXRpb246IG5vbmU7XG5cbiAgICAgIC8vIFNhbWUgZ3JleSBhcyB0aGUgYmxpbmsncyBncmV5IGJlYXQsIGhlbGQgc3RlYWR5LlxuICAgICAgb3BhY2l0eTogMC4zNTtcbiAgICB9XG5cbiAgICAuc2F2ZS1kcmFmdC1jaGVjayB7XG4gICAgICBhbmltYXRpb246IG5vbmU7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNhdmUtZHJhZnQtcHVsc2Uge1xuICAgIDAlLFxuICAgIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICA1MCUge1xuICAgICAgb3BhY2l0eTogMC4zNTtcbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNhdmUtZHJhZnQtY2hlY2stZHJhdyB7XG4gICAgdG8ge1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIE1PUkUgYWNjb3JkaW9uLiBSb3dzIDIrIHN0YXkgbW91bnRlZCBhbmQgY29sbGFwc2UgdG8gemVybyBoZWlnaHQsIHNvIHRoZSBwYW5lbCBjYW5cbiAgLy8gYW5pbWF0ZSBhbmQgUmVhY3QgbmV2ZXIgdGVhcnMgdGhlIHN1YnRyZWUgZG93biBtaWQtaW50ZXJhY3Rpb24uXG4gIC8vXG4gIC8vIGBncmlkLXRlbXBsYXRlLXJvd3M6IDBmciAtPiAxZnJgIGFuaW1hdGVzIHRvIHRoZSBjb250ZW50J3MgbmF0dXJhbCBoZWlnaHQgd2l0aG91dCBhbnlvbmVcbiAgLy8gaGF2aW5nIHRvIGtub3cgdGhhdCBoZWlnaHQgdXAgZnJvbnQsIHdoaWNoIGlzIHdoYXQgYSBtYXgtaGVpZ2h0IGhhY2sgYWx3YXlzIGdldHMgd3JvbmcuXG4gIC50b29sLXJvd3MtbW9yZSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjtcblxuICAgIC8vIGBtYXJnaW4tdG9wYCByaWRlcyBhbG9uZyB3aXRoIHRoZSBjb2xsYXBzZSBzbyB0aGUgZ2FwIHVuZGVyIHJvdyAxIGFwcGVhcnMgYW5kIHZhbmlzaGVzXG4gICAgLy8gd2l0aCB0aGUgcGFuZWwgcmF0aGVyIHRoYW4gc25hcHBpbmcuXG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93cyAxODBtcyBlYXNlLFxuICAgICAgbWFyZ2luLXRvcCAxODBtcyBlYXNlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAvLyBaZXJvIHdoaWxlIHNodXQuIFRoaXMgaXMgdGhlIGdhcCB0aGF0ICN0b29sLWJveCBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgY2Fycnk6IGFzIHBhcmVudFxuICAgIC8vIGBnYXBgIGl0IHdvdWxkIHBhaW50IGEgYmxhbmsgYmFuZCB1bmRlciByb3cgMSB3aGVuZXZlciB0aGUgdG9vbGJhciBpcyBjbG9zZWQuXG4gICAgLy9cbiAgICAvLyDimqDvuI8gSXQgY2Fubm90IGxpdmUgYXMgYHBhZGRpbmctdG9wYCBvbiB0aGUgaW5uZXIgZWl0aGVyIOKAlCBNRUFTVVJFRDogcGFkZGluZyBpcyBwYXJ0IG9mXG4gICAgLy8gdGhlIGdyaWQgaXRlbSdzIG93biBib3ggYW5kIGlzIE5PVCBjbGlwcGVkIGJ5IGBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcmAsIHNvIHRoZSBzaHV0XG4gICAgLy8gcGFuZWwgc3RheWVkIDhweCB0YWxsLiBPbmx5IGEgbWFyZ2luIG9uIHRoZSBvdXRlciBib3ggYWN0dWFsbHkgZGlzYXBwZWFycy5cbiAgICBtYXJnaW4tdG9wOiAwO1xuXG4gICAgJltkYXRhLW9wZW49JzEnXSB7XG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjtcbiAgICAgIG1hcmdpbi10b3A6ICR0b29sYmFyLWdhcDtcbiAgICB9XG4gIH1cblxuICAudG9vbC1yb3dzLW1vcmUtaW5uZXIge1xuICAgIC8vIFJFUVVJUkVEIGZvciB0aGUgMGZyIGNvbGxhcHNlOiBhIGdyaWQgaXRlbSdzIGRlZmF1bHQgYG1pbi1oZWlnaHQ6IGF1dG9gIHJlZnVzZXMgdG9cbiAgICAvLyBzaHJpbmsgYmVsb3cgaXRzIGNvbnRlbnQsIHNvIHdpdGhvdXQgdGhpcyB0aGUgcGFuZWwgbmV2ZXIgY2xvc2VzLlxuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogJHRvb2xiYXItZ2FwO1xuXG4gICAgLy8gVGFrZXMgdGhlIGNvbGxhcHNlZCBjb250cm9scyBvdXQgb2YgdGhlIHRhYiBvcmRlciBhbmQgb2ZmIHRoZSBoaXQtdGVzdC4gRGVsYXllZCBvbiB0aGVcbiAgICAvLyB3YXkgb3V0IHNvIHRoZSByb3cgc3RheXMgcGFpbnRlZCB3aGlsZSBpdCBhbmltYXRlcyBzaHV0LlxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAxODBtcztcbiAgfVxuXG4gIC50b29sLXJvd3MtbW9yZVtkYXRhLW9wZW49JzEnXSAudG9vbC1yb3dzLW1vcmUtaW5uZXIge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XG4gIH1cblxuICAuYnRuLW1vcmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA0cHg7XG4gIH1cblxuICAuYnRuLW1vcmUtY2hldnJvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxODBtcyBlYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLmJ0bi1tb3JlLmlzLW9wZW4gLmJ0bi1tb3JlLWNoZXZyb24ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgfVxuXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgLnRvb2wtcm93cy1tb3JlLFxuICAgIC50b29sLXJvd3MtbW9yZS1pbm5lcixcbiAgICAuYnRuLW1vcmUtY2hldnJvbiB7XG4gICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5zd2l0Y2gtYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuICAgIHBhZGRpbmc6IDAgJHN3aXRjaC1ib3gtcGFkLXg7XG5cbiAgICAvLyBUaGUgbGFiZWwgc2l0cyBBRlRFUiB0aGUgc3dpdGNoIGFuZCBpcyBjbGlja2FibGUgKGBodG1sRm9yPVwiY2JTbmFwXCJgKSwgc28gaXQgbmVlZHMgdGhlXG4gICAgLy8gcG9pbnRlciB0byBzYXkgc28g4oCUIGEgYmFyZSA8bGFiZWw+IGluaGVyaXRzIHRoZSB0ZXh0IGN1cnNvciBhbmQgcmVhZHMgYXMgc3RhdGljIGNvcHkuXG4gICAgLnN3aXRjaC1sYWJlbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG5cbiAgICAuc3dpdGNoLWxhYmVsLS1kaXNhYmxlZCB7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgb3BhY2l0eTogMC40NTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBsZWdhY3kgYGNzcy9tYWluLm1pbi5jc3NgIHdoaWNoIHBvc2l0aW9ucyBgLnN3aXRjaGAgc2xpZ2h0bHkgdXB3YXJkICh0b3A6LTRweCkuXG4gICAgLnN3aXRjaCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvLWdhdGVkIHRvZ2dsZSAoZS5nLiBTbmFwIE1vZGUpIHNob3duIHRvIG5vbi1Qcm8gdGllcnM6IHZpc2libHkgaW5lcnQuXG4gIC5zd2l0Y2gtLWRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjQ1O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgICAvLyBgLnNsaWRlcmAgc2V0cyBgY3Vyc29yOiBwb2ludGVyYCBmb3IgdGhlIGVuYWJsZWQgc3dpdGNoLCBhbmQgaXQgaXMgYSBDSElMRCDigJQgYSBjaGlsZCdzXG4gICAgLy8gY3Vyc29yIHdpbnMgb3ZlciBpdHMgcGFyZW50J3MsIHNvIHRoZSBrbm9iIGtlcHQgaW52aXRpbmcgYSBjbGljayB3aGlsZSB0aGUgbGFiZWwgYmVzaWRlIGl0XG4gICAgLy8gYWxyZWFkeSByZWFkIGFzIGRpc2FibGVkLiBUaGUgY29udHJvbCBoYXMgdG8gc2F5IG9uZSB0aGluZy5cbiAgICAuc2xpZGVyIHtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICB9XG59XG5cbi5hY3RpdmUtYW5pbWF0aW9uIHtcbiAgYW5pbWF0aW9uLW5hbWU6IE1PVkUtQkc7XG5cdGFuaW1hdGlvbi1kdXJhdGlvbjogNHM7XG5cdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcblx0YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG59XG5cbi5sb2dvIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZyx2aW9sZXQsaW5kaWdvLCMwMGYsZ3JlZW4sI2ZmMCxvcmFuZ2UscmVkLCNkMDQzNDMsIzNkNzczZCwjZDBhZTBiLCMzOTYxYWIsI2EyMmVhMik7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtc2l6ZTogMzE0JSAzMTQlO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgYW5pbWF0aW9uOiByYWluYm93IDExcyBlYXNlIGluZmluaXRlO1xuXG4gIC8vIFRoZSBlZGl0b3IncyBvdGhlciBuZXZlci1lbmRpbmcgYW5pbWF0aW9uLiBIdWUgY3ljbGluZyByYXRoZXIgdGhhbiB0cmF2ZWwsIHNvIGl0IGlzIG1pbGRlclxuICAvLyB0aGFuIHRoZSBhbnRzLCBidXQgXCJwZXJtYW5lbnQgbW90aW9uXCIgaXMgdGhlIHRoaW5nIHRoZSBzZXR0aW5nIGFza3MgdXMgdG8gc3RvcC4gVGhlIGxvZ29cbiAgLy8ga2VlcHMgaXRzIGdyYWRpZW50OyBpdCBqdXN0IGhvbGRzIHN0aWxsLlxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgfVxufVxuXG4vLyBTaGFyZWQgaGVhZGluZyBzaXppbmcgaGVscGVyICh1c2UgYWxvbmdzaWRlIG90aGVyIGNsYXNzZXMgbGlrZSBgLmxvZ29gKS5cbi5haXRjaC1vbmUge1xuICBmb250LXNpemU6IDM2cHg7XG59XG5cbi8vIFNoYXJlZCBpbnB1dCBzdHlsZXMgZm9yIFwiY29tbWFuZGluZ1wiIGF1dGgvYWRtaW4gVUlzLlxuLmNvbW1hbmRpbmctaW5wdXQsXG4uc3VwZXItY29tbWFuZGluZy1pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXI6IDFweCBzb2xpZCAkY29sb3ItYm9yZGVyLWRlZmF1bHQ7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1zdXJmYWNlO1xuICBwYWRkaW5nOiA4cHggMTBweDtcbiAgZm9udC1zaXplOiAkZGVmYXVsdC1mb250LXNpemU7XG59XG5cbi5jb21tYW5kaW5nLWlucHV0IHtcbiAgaGVpZ2h0OiAkY29udHJvbC1oZWlnaHQtbWQ7XG59XG5cbi5zdXBlci1jb21tYW5kaW5nLWlucHV0IHtcbiAgaGVpZ2h0OiA2MHB4O1xufVxuXG4vLyBTaW1wbGUgZ3JlZW4gXCJsaW5rIGJ1dHRvblwiIHN0eWxlICh1c2VkIGFjcm9zcyBVSSkuXG4uYXV0aC1saW5rIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBmb250OiBpbmhlcml0O1xuICBjb2xvcjogJGNvbG9yLWdyZWVuLWxpbms7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtY3RhO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmF1dGgtbGluazpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vLyBHcmVlbiBsaW5rLXN0eWxlIGJ1dHRvbiAodXNlZCBmb3IgaW5saW5lIENUQXMgbGlrZSBcIlNpZ24gVXAhXCIpXG4uZ3JlZW4tbGluay1idG4ge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAkY29sb3ItZ3JlZW4tbGluaztcbiAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1jdGE7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5ncmVlbi1saW5rLWJ0bjpob3ZlciB7XG4gIGNvbG9yOiAkY29sb3ItZ3JlZW4tbGluay1ob3Zlcjtcbn1cblxuLy8gUHJpbWFyeSBidXR0b24gc3R5bGUgKHNoYXJlZCkuXG4ucHJpbWFyeS1idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHggMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYmFja2dyb3VuZDogIzIzOTM3MztcbiAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAxcHggc29saWQgIzFhNmU1NTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6ICRmb250LXNpemUtbGc7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtaGVhdnk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4ucHJpbWFyeS1idG46aG92ZXI6ZW5hYmxlZCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1ncmVlbi1saW5rLWhvdmVyO1xufVxuXG4ucHJpbWFyeS1idG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjU1O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4vLyBTaGFyZWQgXCJzaW1wbGUgYnV0dG9uIHJvd1wiIGxheW91dCAodXNlZCBpbiBkZXYgcGFuZWxzICsgYXV0aCBmbG93cykuXG4uYXV0aC1idG4tcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA4cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLyogU3dpdGNoIHN0eWxlcyBhZGFwdGVkIGZyb20gcHJvdmlkZWQgQ1NTICovXG4uc3dpdGNoIGlucHV0IHtcbiAgb3BhY2l0eTogMDtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uc2xpZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLjRzO1xuICB0cmFuc2l0aW9uOiAuNHM7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogMThweDtcbiAgICB3aWR0aDogMThweDtcbiAgICBsZWZ0OiAycHg7XG4gICAgYm90dG9tOiAycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLjRzO1xuICAgIHRyYW5zaXRpb246IC40cztcbiAgfVxuXG4gICYucm91bmQge1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIH1cbiAgfVxufVxuXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMzkzNzM7XG59XG5cbmlucHV0OmZvY3VzICsgLnNsaWRlciB7XG4gIGJveC1zaGFkb3c6IDAgMCAxcHggIzIzOTM3Mztcbn1cblxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXI6OmJlZm9yZSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XG59XG5cbiNzd2l0Y2gtc3RhdHVzIHtcbiAgbWluLXdpZHRoOiAkY29udHJvbC1oZWlnaHQtbWQ7XG59XG5cbi8vIE1vYmlsZSBzdHlsZXNcbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAvLyBUb29sYmFyOiBmdWxsIHdpZHRoLCBjZW50ZXJlZFxuICAjbWVudSB7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAjdG9vbC1ib3gge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gTk8gYHRleHQtYWxpZ246IGNlbnRlcmAgaGVyZS4gSXQgZGF0ZXMgZnJvbSB3aGVuICN0b29sLWJveCB3YXMgYGRpc3BsYXk6IGlubGluZS1ibG9ja2A7XG4gICAgLy8gdGhlIGNvbnRhaW5lciBpcyBhIGZsZXggY29sdW1uIG5vdywgc28gaXQgY2VudHJlZCBub3RoaW5nIGluIHRoZSB0b29sYmFyIGl0c2VsZiBhbmRcbiAgICAvLyBJTkhFUklURUQgaW50byB0aGUgSEVMUCBwb3BvdmVyLCBjZW50cmluZyBpdHMgc2VjdGlvbiB0aXRsZXMgYmVsb3cgNjAwcHggZm9yIG5vIHJlYXNvblxuICAgIC8vIGFueW9uZSBjb3VsZCBzdGF0ZS4gQ2VudHJlIHRoZSB0b29sYmFyIHdpdGggZmxleCBwcm9wZXJ0aWVzIGlmIGl0IGlzIGV2ZXIgd2FudGVkLlxuICB9XG5cbiAgLy8gQ2FudmFzOiBhZGQgbWFyZ2lucyBmb3IgZWFzaWVyIGVkZ2UgaW50ZXJhY3Rpb24gKHBob25lIGNhc2UgZmluZ2VyIHJlYWNoKVxuICAjdGhlLWdyaWQge1xuICAgIHBhZGRpbmc6IDAgMTJweDtcbiAgfVxufVxuXG4vLyBUaGUgRE9DVU1FTlQncyB0cmFuc3BhcmVuY3kgY2hlY2tlcjogSEFMRiB0aGUgc2l6ZSBvZiB0aGUgb3V0LW9mLWJvdW5kcyBvbmUsIGFuZCBzdHJvbmdlci5cbi8vXG4vLyBTaXRzIGluc2lkZSBgLmNhbnZhcy13b3JsZGAgYXQgYGluc2V0OiAwYCwgc28gaXQgY292ZXJzIGV4YWN0bHkgdGhlIGRvY3VtZW50IGFuZCBjb21wdXRlcyBub1xuLy8gZ2VvbWV0cnkgb2YgaXRzIG93biDigJQgZXZlcnkgZ2VvbWV0cnkgYnVnIGluIHRoaXMgY2FudmFzIGNhbWUgZnJvbSBhIHJlY3RhbmdsZSBpbnZlbnRpbmcgaXRzXG4vLyBvd24gaWRlYSBvZiB3aGVyZSB0aGUgZG9jdW1lbnQgaXMsIGFuZCBpbmhlcml0aW5nIGl0IGZyb20gdGhlIGVsZW1lbnQgdGhhdCBhbHJlYWR5IGtub3dzIGlzXG4vLyBob3cgbm90IHRvIGFkZCBhbm90aGVyLlxuLy9cbi8vIGBiYWNrZ3JvdW5kLXNpemVgIGlzIHNldCBpbmxpbmUgYW5kIGNvdW50ZXItc2NhbGVkIGJ5IDEvazsgYC5jYW52YXMtd29ybGRgIGNhcnJpZXMgdGhlXG4vLyB6b29tL3BhbiBtYXRyaXgsIHNvIHdpdGhvdXQgdGhhdCB0aGUgc3F1YXJlcyB3b3VsZCBncm93IGFuZCBzaHJpbmsgd2l0aCB6b29tIGFuZCBzdG9wXG4vLyByZWFkaW5nIGFzIGEgYmFja2Ryb3AuIGBiYWNrZ3JvdW5kLXBvc2l0aW9uYCBpcyBzZXQgaW5saW5lIGZvciB0aGUgc2FtZSByZWFzb24g4oCUIHNlZSB0aGVcbi8vIHdhcm5pbmcgb24gdGhlIHJ1bGUuIChBbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBjb21tZW50IHJlYXNvbmVkIHRoYXQgYmVpbmcgaW4gYSBzY2FsZWRcbi8vIHNwYWNlIG1lYW50IHRoZSBvZmZzZXQgc2hvdWxkIGJlIGEgUEVSQ0VOVEFHRS4gVGhhdCBpcyBleGFjdGx5IGJhY2t3YXJkcywgYW5kIGl0IGlzIHdoYXRcbi8vIHByb2R1Y2VkIHRoZSBtb2lyw6k6IHRoZSBvZmZzZXQgbXVzdCBiZSBoYWxmIGEgVElMRSwgYW5kIHRoZSB0aWxlIGlzIGEgcGl4ZWwgbGVuZ3RoLilcbi5ncmlkLWRvY3VtZW50LWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgLy8gSWRlbnRpY2FsIHRvIHRoZSBjaGVja2VyIHRoZSBjYW52YXMgaGFzIGFsd2F5cyBoYWQ6IHNhbWUgY29sb3VyLCBzYW1lIDE4cHggdGlsZS4gVGhlIG9ubHlcbiAgLy8gdGhpbmcgdGhhdCBjaGFuZ2VkIGlzIFdIRVJFIGl0IGlzIHBhaW50ZWQg4oCUIG9uIHRoZSBkb2N1bWVudCByYXRoZXIgdGhhbiBvbiB0aGUgdmlld3BvcnQg4oCUXG4gIC8vIHNvIHRoYXQgdGhlIG91dC1vZi1ib3VuZHMgYXJlYSBjYW4gbG9vayBkaWZmZXJlbnQgd2l0aG91dCB0aGlzIGxvb2tpbmcgZGlmZmVyZW50IGF0IGFsbC5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWNhbnZhcy1jaGVja2VyLWJnO1xuICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgwLCAwLCAwLCAwLjA2KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCByZ2JhKDAsIDAsIDAsIDAuMDYpIDc1JSwgcmdiYSgwLCAwLCAwLCAwLjA2KSksXG4gICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuMDYpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsIHJnYmEoMCwgMCwgMCwgMC4wNikgNzUlLCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcblxuICAvLyDimqDvuI8gYGJhY2tncm91bmQtcG9zaXRpb25gIGlzIHNldCBpbmxpbmUgYWxvbmdzaWRlIGBiYWNrZ3JvdW5kLXNpemVgLCBOT1QgaGVyZS4gVGhlIHR3b1xuICAvLyBncmFkaWVudHMgaW50ZXJsb2NrIGludG8gYSBjaGVja2VyIG9ubHkgd2hlbiB0aGUgc2Vjb25kIGlzIG9mZnNldCBieSBleGFjdGx5IEhBTEYgQSBUSUxFXG4gIC8vIGluIHBpeGVscy4gQSBwZXJjZW50YWdlIGlzIGhhbGYgdGhlIEVMRU1FTlQsIHdoaWNoIGlzIGEgZGlmZmVyZW50IG51bWJlciBlbnRpcmVseSDigJQgdXNpbmdcbiAgLy8gYDUwJSA1MCVgIHByb2R1Y2VkIGEgZGlhZ29uYWwgbGF0dGljZSBtb2lyw6kgaW5zdGVhZCBvZiBzcXVhcmVzLiBBbmQgYmVjYXVzZSB0aGUgdGlsZSBpc1xuICAvLyBjb3VudGVyLXNjYWxlZCBieSAxL2ssIGhhbGYgb2YgaXQgaXMgb25seSBrbm93biBhdCByZW5kZXIgdGltZS5cbn1cblxuLy8gVGhlIGNvbXBvc2l0ZSBoYXMgdG8gYmUgbGlmdGVkIG92ZXIgdGhlIGJhY2tkcm9wIEVYUExJQ0lUTFksIGJlY2F1c2UgdGhlIGJhY2tkcm9wIGFib3ZlIGlzXG4vLyBgcG9zaXRpb246YWJzb2x1dGU7IHotaW5kZXg6MGAgd2hpbGUgYCNzbGljZUltZ2AgaXMgYW4gb3JkaW5hcnkgaW4tZmxvdyBpbWFnZS4gQ1NTIHBhaW50c1xuLy8gbm9uLXBvc2l0aW9uZWQgaW4tZmxvdyBjb250ZW50IEJFRk9SRSBwb3NpdGlvbmVkL3N0YWNraW5nLWNvbnRleHQgY29udGVudCwgc28gYSBzdGF0aWNcbi8vIGAjc2xpY2VJbWdgIHJlbmRlcnMgVU5ERVJORUFUSCB0aGUgY2hlY2tlciBubyBtYXR0ZXIgdGhhdCBpdCBjb21lcyBsYXRlciBpbiB0aGUgRE9NLlxuLy9cbi8vIEl0IGxvb2tlZCBmaW5lIG9ubHkgYnkgYWNjaWRlbnQ6IGAuYmx1cnJlZGAgKGBmaWx0ZXI6IGJsdXIoM3B4KWAsIGFwcGxpZWQgd2hpbGUgc2xpY2VzXG4vLyBleGlzdCkgY3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQsIHdoaWNoIHByb21vdGVkIHRoZSBpbWFnZSBpbnRvIHRoZSBzYW1lIHBhaW50aW5nIHN0ZXAgYXNcbi8vIHRoZSBiYWNrZHJvcCBhbmQg4oCUIGJlaW5nIGxhdGVyIGluIHRyZWUgb3JkZXIg4oCUIG92ZXIgaXQuIFNvIHRoZSBwaWN0dXJlIHdhcyByaWRpbmcgb24gYSBibHVyXG4vLyBmaWx0ZXIgZm9yIGl0cyBzdGFja2luZy4gYENsZWFyIEFsbGAgZW1wdGllcyB0aGUgc2xpY2VzLCBgLmJsdXJyZWRgIGNvbWVzIG9mZiwgdGhlIHN0YWNraW5nXG4vLyBjb250ZXh0IGdvZXMgd2l0aCBpdCBhbmQgdGhlIGltYWdlIGRyb3BwZWQgYmVoaW5kIHRoZSBjaGVja2VyOiB0aGUgY2FudmFzIHdlbnQgZnVsbHlcbi8vIHRyYW5zcGFyZW50IHdoaWxlIHRoZSBsYXllciwgaXRzIHRodW1ibmFpbCBhbmQgdGhlIGNvbXBvc2l0ZSBibG9iIHdlcmUgYWxsIHN0aWxsIHBlcmZlY3RseVxuLy8gaW50YWN0LiBUaGF0IGlzIHRoZSBcIkNsZWFyIEFsbCBoaWRlcyB0aGUgbGF5ZXIgaW1hZ2VcIiByZXBvcnQuXG4vL1xuLy8gYHotaW5kZXg6IDBgIGFuZCBOT1QgYSBwb3NpdGl2ZSB2YWx1ZSwgZGVsaWJlcmF0ZWx5OiBpdCBtdXN0IHN0YXkgQkVMT1cgdGhlIHNsaWNlIG92ZXJsYXlcbi8vIChgLnNlbGVjdC1hcmVhcy1vdmVybGF5YCwgYHotaW5kZXg6YXV0b2AsIGxhdGVyIGluIHRyZWUgb3JkZXIpLCB0aGUgbGl2ZSBsYXllciBjYW52YXMgKDQwKVxuLy8gYW5kIHRoZSBkb2N1bWVudCBib3VuZGFyeSAoNDYpLiBNYXRjaGluZyB0aGUgYmFja2Ryb3AncyBvd24gMCBhbmQgd2lubmluZyBvbiB0cmVlIG9yZGVyIGlzXG4vLyBleGFjdGx5IHRoZSBzdGFja2luZyBgLmJsdXJyZWRgIHVzZWQgdG8gcHJvZHVjZSDigJQgdGhlIHBpY3R1cmUgaXMgYWJvdmUgdGhlIGNoZWNrZXIsIGFuZFxuLy8gZXZlcnl0aGluZyBkcmF3biBvbiB0b3Agb2YgdGhlIHBpY3R1cmUgc3RpbGwgaXMuXG4jc2xpY2VJbWcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDA7XG59XG4iLCIvLyBaIEluZGV4XG4vLyBVc2UgQ1NTIHZhcmlhYmxlcyBzbyBKUyAoaW5saW5lIHN0eWxlcykgYW5kIENTUyBzaGFyZSB0aGUgc2FtZSBzb3VyY2Ugb2YgdHJ1dGguXG5AaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5cbjpyb290IHtcbiAgLS16LWxheWVyLWxpdmUtY2FudmFzOiAjeyR6LWxheWVyLWxpdmUtY2FudmFzfTtcbiAgLS16LWxheWVyLWNhbnZhcy1ib3VuZGFyeTogI3skei1sYXllci1jYW52YXMtYm91bmRhcnl9O1xuICAtLXotbGF5ZXItbW92ZS1jYXB0dXJlOiAjeyR6LWxheWVyLW1vdmUtY2FwdHVyZX07XG4gIC0tei1sYXllci1jaHJvbWU6ICN7JHotbGF5ZXItY2hyb21lfTtcbiAgLS16LXNsaWNlLW91dGxpbmUtYWN0aXZlOiAjeyR6LXNsaWNlLW91dGxpbmUtYWN0aXZlfTtcbiAgLS16LXNsaWNlLWRlbGV0ZS1idXR0b246ICN7JHotc2xpY2UtZGVsZXRlLWJ1dHRvbn07XG4gIC0tei1zbGljZS1iZy1hY3RpdmU6ICN7JHotc2xpY2UtYmctYWN0aXZlfTtcbiAgLS16LXNsaWNlLXNlbGVjdGlvbi13YXNoOiAjeyR6LXNsaWNlLXNlbGVjdGlvbi13YXNofTtcbiAgLS16LXNsaWNlLWludGVyYWN0aXZlLWxheWVyOiAjeyR6LXNsaWNlLWludGVyYWN0aXZlLWxheWVyfTtcbiAgLS16LXNsaWNlLXJlc2l6ZS1oYW5kbGU6ICN7JHotc2xpY2UtcmVzaXplLWhhbmRsZX07XG4gIC0tei1zbGljZS1iZy1pbmFjdGl2ZTogI3skei1zbGljZS1iZy1pbmFjdGl2ZX07XG4gIC0tei1zbGljZS1vdXRsaW5lLWluYWN0aXZlOiAjeyR6LXNsaWNlLW91dGxpbmUtaW5hY3RpdmV9O1xuICAtLXotY2FudmFzLXdvcmxkOiAjeyR6LWNhbnZhcy13b3JsZH07XG4gIC0tei1jYW52YXMtb3ZlcmxheTogI3skei1jYW52YXMtb3ZlcmxheX07XG4gIC0tei1oZWxwLXBvcG92ZXI6ICN7JHotaGVscC1wb3BvdmVyfTtcbiAgLS16LXpvb20tcGFuLWhpdC1zdXJmYWNlOiAjeyR6LXpvb20tcGFuLWhpdC1zdXJmYWNlfTtcbn1cbiIsIi8qKlxuICogU2hhcmVkIGtleWZyYW1lcy5cbiAqXG4gKiBgcmFpbmJvd2AgdXNlZCB0byBiZSBkZWNsYXJlZCBGSVZFIHRpbWVzIOKAlCBpbmxpbmUgaW4gYEFwcC5zY3NzYCBhbmQgYWdhaW4gaW4gZWFjaCBvZlxuICogYHZpZXdzL0Fib3V0LnNjc3NgLCBgRmFxLnNjc3NgLCBgUHJpdmFjeS5zY3NzYCBhbmQgYFRlcm1zLnNjc3NgIOKAlCBhbGwgYnl0ZS1pZGVudGljYWwsIGFsbFxuICogZW1pdHRlZCBpbnRvIHRoZSBzYW1lIGJ1bmRsZS5cbiAqXG4gKiDimqDvuI8gVGhpcyBwYXJ0aWFsIGlzIGltcG9ydGVkIGJ5IGBBcHAuc2Nzc2AgT05MWSwgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZS4gU2FzcyBgQGltcG9ydGBcbiAqIElOTElORVMgYSBwYXJ0aWFsIGludG8gZXZlcnkgZmlsZSB0aGF0IGltcG9ydHMgaXQsIHNvIGltcG9ydGluZyB0aGlzIGZyb20gdGhlIHZpZXdcbiAqIHN0eWxlc2hlZXRzIGFzIHdlbGwgd291bGQgcHV0IHRoZSBkdXBsaWNhdGVzIHN0cmFpZ2h0IGJhY2suIE9uZSBpbXBvcnRlciA9IG9uZSBjb3B5LlxuICpcbiAqIFRoYXQgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBtb2R1bGUgZ3JhcGgsIG5vdCBieSBsdWNrOiBgQXBwLnRzeGAgc3RhdGljYWxseSBpbXBvcnRzIGJvdGhcbiAqIGAuL0FwcC5zY3NzYCBhbmQgZXZlcnkgb25lIG9mIHRob3NlIGZvdXIgdmlldyBjb21wb25lbnRzLCBhbmQgbm9uZSBvZiB0aGVtIGFyZSBsYXp5XG4gKiAob25seSBgQWRtaW5gIGFuZCBgTWVvd01peGAgdXNlIGBSZWFjdC5sYXp5YCkuIFNvIGEgdmlldyBjYW5ub3QgcmVuZGVyIHdpdGhvdXQgYEFwcC5zY3NzYFxuICogaGF2aW5nIGJlZW4gbG9hZGVkLiBJZiBhIHZpZXcgZXZlciBiZWNvbWVzIGxhemlseSBsb2FkZWQsIG9yIGdldHMgcmVuZGVyZWQgZnJvbSBpdHMgb3duXG4gKiBlbnRyeSBwb2ludCwgaXQgd2lsbCBuZWVkIGl0cyBvd24gY29weSBhZ2FpbiDigJQgYSBtaXNzaW5nIGBAa2V5ZnJhbWVzYCBmYWlscyBTSUxFTlRMWS5cbiAqXG4gKiDimqDvuI8gTmVpdGhlciB0aGUgc2NyZWVuc2hvdCBoYXJuZXNzICh3aGljaCBmcmVlemVzIGFuaW1hdGlvbnMpIG5vciB0aGUgY29tcHV0ZWQtc3R5bGVcbiAqIGZpbmdlcnByaW50ICh3aGljaCByZWNvcmRzIGBhbmltYXRpb24tbmFtZWAgd2hldGhlciBvciBub3QgdGhlIHJ1bGUgZXhpc3RzKSBjYW4gZGV0ZWN0IGFcbiAqIG1pc3Npbmcga2V5ZnJhbWUuIFVzZSBgZWxlbWVudC5nZXRBbmltYXRpb25zKClgIOKAlCBhbiBgYW5pbWF0aW9uLW5hbWVgIG1hdGNoaW5nIG5vXG4gKiBgQGtleWZyYW1lc2AgcnVsZSBjcmVhdGVzIG5vIGFuaW1hdGlvbiBvYmplY3QgYXQgYWxsLlxuICovXG5cbkBrZXlmcmFtZXMgcmFpbmJvdyB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTtcbiAgfVxuXG4gIDUwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAyNSU7XG4gIH1cblxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTtcbiAgfVxufVxuIiwiQGltcG9ydCAnLi4vdmFyaWFibGVzJztcblxuLy8gRXh0cmFjdGVkIGZyb20gcGFnZXMvYWJvdXQuaHRtbCBpbmxpbmUgPHN0eWxlPlxuLy9cbi8vIOKaoO+4jyBPbmx5IHdoYXQgaXMgTk9UIGFscmVhZHkgZ2xvYmFsIGxpdmVzIGhlcmUuIGBCcmFuZEhlYWRlcmAgcmVuZGVycyBgPGgxIGNsYXNzPVwibG9nb1wiPmAgYW5kXG4vLyBgU3RhdGljUGFnZUJhc2VgIHdyYXBzIGl0IGluIGAuY29udGFpbmVyYCwgc28gYEFwcC5zY3NzYCdzIGdsb2JhbCBgLmxvZ29gIGFuZCBgLmZlZWRiYWNrYFxuLy8gYWxyZWFkeSBhcHBseSBvbiB0aGlzIHBhZ2UuIFJlc3RhdGluZyB0aGVtIHdhcyBwdXJlIGR1cGxpY2F0aW9uIOKAlCBtZWFzdXJlZCBpZGVudGljYWwgYWNyb3NzXG4vLyBhbGwgZml2ZSBzdXJmYWNlcyBiZWZvcmUgcmVtb3ZhbCAoc2FtZSBncmFkaWVudCwgYGZvbnQtd2VpZ2h0OiA3MDBgLCBgYmFja2dyb3VuZC1jbGlwOiB0ZXh0YCxcbi8vIGBhbmltYXRpb246IHJhaW5ib3dgKS4gYEBrZXlmcmFtZXMgcmFpbmJvd2AgbGl2ZXMgaW4gYF9hbmltYXRpb25zLnNjc3NgLCBpbXBvcnRlZCBieVxuLy8gYEFwcC5zY3NzYCwgd2hpY2ggaXMgYWx3YXlzIGxvYWRlZCBiZWNhdXNlIGBBcHAudHN4YCBzdGF0aWNhbGx5IGltcG9ydHMgdGhpcyB2aWV3IGFuZCBpdC5cbi5wYWdlLWFib3V0IHtcbiAgLnJvb3QsXG4gIC5yb290IGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIGgyLFxuICBoMyAuY3RhIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cblxuICAuY29udGVudCB7XG4gICAgd2lkdGg6IDYwMHB4O1xuICAgIG1hcmdpbjogNXB4IGF1dG87XG4gIH1cblxuICAvLyBUaGUgYm9yZGVyIGlzIHRoZSBvbmx5IHRoaW5nIHRoaXMgcGFnZSBhZGRzOyB0aGUgcmVzdCBvZiBgLmZlZWRiYWNrYCBpcyBnbG9iYWwuXG4gIC5mZWVkYmFjayB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkNWQ1ZDU7XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8vIFBybydzIGFjY2VudCDigJQgdGhlIOKckyBtYXJrcywgdGhlIHVwZ3JhZGUgYnV0dG9uLCB0aGUgZmVhdHVyZWQgYm9yZGVyLCB0aGUgcmFpbCBvbiB0aGUgZnJlZSBjYXJkc1xuLy8gYW5kIHRoZSBoZWFkIG9mIHRoZSBiZWFtLiBJdCB3YXMgYSBiYXJlIGhleCByZXBlYXRlZCBpbiBmaXZlIHJ1bGVzIGJlZm9yZSB0aG9zZSBsYXN0IHR3byBtYWRlXG4vLyBpdCB3b3J0aCBuYW1pbmcuXG4kcGxhbi1hY2NlbnQ6ICM2NzU5ZDY7XG5cbi8vIEd1ZXN0J3MgcmFpbC4gQmx1ZSBiZWNhdXNlIEd1ZXN0IGlzIHRoZSBvbmUgdGllciB3aXRoIG5vIGFjY291bnQg4oCUIHRoZSByYWlsIGNvbG91ciBzYXlzIHdoaWNoXG4vLyBzaWRlIG9mIHRoYXQgbGluZSBhIGNhcmQgaXMgb24sIHdoaWNoIGlzIHRoZSBvbmx5IGRpc3RpbmN0aW9uIHRoZSB0aHJlZSBjYXJkcyBtYWtlIHRoYXQgYVxuLy8gdmlzaXRvciBjYW5ub3QgcmVhZCBvZmYgdGhlIHByaWNlcy4gUGl0Y2hlZCBhdCB0aGUgc2FtZSBzYXR1cmF0aW9uIGFuZCBsaWdodG5lc3MgYXMgdGhlIGdyZWVuXG4vLyBhbmQgdGhlIHB1cnBsZSBzbyBpdCBiZWxvbmdzIHRvIHRoZSBzYW1lIHNldCByYXRoZXIgdGhhbiBsb29raW5nIGJvcnJvd2VkLlxuJHBsYW4tZ3Vlc3QtYWNjZW50OiAjMmY3OGMxO1xuXG5Aa2V5ZnJhbWVzIHBsYW4tYmVhbS1zcGluIHtcbiAgdG8geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoMzYwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIHJhaW5ib3cge1xuICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgNTAlOyB9XG4gIDUwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMjUlOyB9XG4gIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTsgfVxufVxuXG4vLyBFeHRyYWN0ZWQgZnJvbSBwYWdlcy9wcmljaW5nLmh0bWwgaW5saW5lIDxzdHlsZT5cbi5wYWdlLXByaWNpbmcge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBjb2xvcjogIzMzMztcblxuICAmLmNvbnRhaW5lciB7IGJhY2tncm91bmQ6ICNmZmY7IH1cblxuICAucm9vdCxcbiAgLnJvb3QgYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4gIC5sb2dvIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHZpb2xldCxpbmRpZ28sIzAwZixncmVlbiwjZmYwLG9yYW5nZSxyZWQsI2QwNDM0MywjM2Q3NzNkLCNkMGFlMGIsIzM5NjFhYiwjYTIyZWEyKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDMxNCUgMzE0JTtcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZm9udC1zaXplOiAzNnB4O1xuICAgIGFuaW1hdGlvbjogcmFpbmJvdyAxMXMgZWFzZSBpbmZpbml0ZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICB9XG5cbiAgLnByaWNpbmctcGFnZSAuY29udGVudCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gIH1cblxuICAuZmVlZGJhY2sge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2Q1ZDVkNTtcbiAgICBwYWRkaW5nLXRvcDogOHB4O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZDtcbiAgICBtYXJnaW4tdG9wOiA0MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICB9XG5cbiAgLyogUHJpY2luZyBDYXJkcyAqL1xuICAucHJpY2luZy1ncmlkIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG4gICAgZ2FwOiAyMHB4O1xuICAgIG1hcmdpbjogMzBweCAwO1xuICB9XG5cbiAgLnBsYW4ge1xuICAgIC8vIEFuY2hvcnMgdGhlIHJhaWwgYW5kIHRoZSBiZWFtLiBEZWxpYmVyYXRlbHkgbm8gYHotaW5kZXhgIHdpdGggaXQ6IGEgc3RhY2tpbmcgY29udGV4dCBoZXJlXG4gICAgLy8gd291bGQgdHJhcCB0aGVtLCBhbmQgdGhlIHJhaWwgaW4gcGFydGljdWxhciBoYXMgdG8gcGFpbnQgb3ZlciB0aGUgY2FyZCdzIG93biBib3JkZXIuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZThlOGU4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgcGFkZGluZzogMjRweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGJveC1zaGFkb3cgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLDAsMCwwLjA4KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgcGxhbiDigJQgYWx3YXlzLXZpc2libGUgYm9yZGVyXG4gICAgJi5hY3RpdmUge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzMzO1xuXG4gICAgICAmOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiAjMzMzOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmVhdHVyZWQgKFBybykg4oCUIHRpbnRlZCBjYXJkXG4gIC5wbGFuLS1mZWF0dXJlZCB7XG4gICAgYmFja2dyb3VuZDogI2YzZjFmZTtcbiAgICBib3JkZXItY29sb3I6ICNkOGQyZjc7XG5cbiAgICAmLmFjdGl2ZSB7IGJvcmRlci1jb2xvcjogJHBsYW4tYWNjZW50OyB9XG4gIH1cblxuICAvKlxuICAgKiBPTkUgQUNDRU5UIFBFUiBDQVJELlxuICAgKlxuICAgKiBUaGUgdHdvIGZyZWUgY2FyZHMgZ2V0IGEgcmFpbDsgUHJvIGdldHMgdGhlIGJlYW0uIEEgY2FyZCBjYXJyeWluZyBib3RoIHdvdWxkIHJlYWQgYXMgdHdvXG4gICAqIGNvbXBldGluZyBzaWduYWxzLCBhbmQgdGhlIHBvaW50IG9mIHRoZSBiZWFtIGlzIHRoYXQgZXhhY3RseSBvbmUgY2FyZCBoYXMgaXQuXG4gICAqXG4gICAqIFRoZSByYWlsIGlzIGEgcHNldWRvLWVsZW1lbnQgcmF0aGVyIHRoYW4gYSB0aGlja2VyIGBib3JkZXItbGVmdGAsIHdoaWNoIHdvdWxkIGhhdmUgY2hhbmdlZFxuICAgKiB0aGUgY2FyZCdzIGlubmVyIHdpZHRoIGFuZCBzdGVwcGVkIHRoZSBDVEEgcm93IHRoYXQgcHJpY2luZy1jdGEtYWxpZ25tZW50LnB3c3BlYyBkZWZlbmRzLlxuICAgKiBGdWxseSByb3VuZGVkIGFuZCBpbnNldCBmcm9tIGJvdGggZW5kczogdGhlIHJlZmVyZW5jZSByYW4gaXRzIHN0cmlwZSBjb3JuZXIgdG8gY29ybmVyLCBidXRcbiAgICogZXZlcnkgb3RoZXIgc29mdCBlZGdlIG9uIHRoaXMgcGFnZSBpcyBhIDk5OXB4IHBpbGwsIHNvIGEgcGlsbCBpcyB3aGF0IHJlYWRzIGFzIG91cnMuXG4gICAqL1xuICAucGxhbi0tcmFpbGVkOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgLypcbiAgICAgKiBUaGUgcmVmZXJlbmNlJ3MgcnVsZSwgdmVyYmF0aW0gaW4gZWZmZWN0OlxuICAgICAqXG4gICAgICogICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgICogICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tYWNjZW50KTtcbiAgICAgKiAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgICAgKlxuICAgICAqIFRoZSB0YXBlciBjb21lcyBmcm9tIHRoZSB0d28gd2lkdGhzIERJU0FHUkVFSU5HLiBXaGVyZSBhIDNweCBsZWZ0IGJvcmRlciBtZWV0cyBhIDFweCB0b3BcbiAgICAgKiBib3JkZXIsIHRoZSBicm93c2VyIG1pdHJlcyB0aGUgam9pbiBieSBydW5uaW5nIGEgbGluZSBiZXR3ZWVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgY29ybmVycyxcbiAgICAgKiBzbyB0aGUgY29sb3VyIG5hcnJvd3MgZnJvbSAzcHggdG8gMXB4IGFsb25nIHRoZSBjdXJ2ZSBhbmQgc2xpcHMgYXdheSB0byBub3RoaW5nLiBBbiBlYXJsaWVyXG4gICAgICogYXR0ZW1wdCBzZXQgYWxsIGZvdXIgc2lkZXMgdG8gM3B4LCB3aGVyZSB0aGF0IHNhbWUgbWl0cmUgaXMgYSBmbGF0IDQ1wrAgZGlhZ29uYWwg4oCUIGl0IGVuZGVkXG4gICAgICogdGhlIHN0cmlwZSwgYnV0IGl0IGRpZCBub3QgdGhpbiBpdC5cbiAgICAgKlxuICAgICAqIEl0IGxpdmVzIG9uIGEgcHNldWRvLWVsZW1lbnQgcmF0aGVyIHRoYW4gb24gYC5wbGFuYCBpdHNlbGYgb25seSBiZWNhdXNlIG5vdGhpbmcgaGVyZSBzZXRzXG4gICAgICogYGJveC1zaXppbmc6IGJvcmRlci1ib3hgOiBhIDNweCBib3JkZXIgb24gdGhlIGNhcmQgd291bGQgcHVzaCBpdHMgdGV4dCAycHggcmlnaHQgb2YgdGhlIFByb1xuICAgICAqIGNhcmQncy4gU2FtZSBib3JkZXJzLCBzYW1lIG1pdHJlLCBubyBsYXlvdXQuXG4gICAgICpcbiAgICAgKiBpbnNldCBhbmQgcmFkaXVzIGFyZSB0aGUgY2FyZCdzIG93biBwbHVzIGl0cyAxcHggYm9yZGVyLCBzbyB0aGUgc3RyaXBlIGxhbmRzIGV4YWN0bHkgb24gdGhhdFxuICAgICAqIGJvcmRlcjsgdGhlIG90aGVyIHRocmVlIHNpZGVzIHN0YXkgdHJhbnNwYXJlbnQgYW5kIGxldCBpdCBzaG93IHRocm91Z2guXG4gICAgICovXG4gICAgaW5zZXQ6IC0xcHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTdweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRwbGFuLWFjY2VudDtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlcyBvbmx5IHRoZSBjb2xvdXIsIHNvIHRoZSAxcHgvM3B4IG1pdHJlIHRoYXQgdGFwZXJzIHRoZSBlbmRzIGlzIGluaGVyaXRlZCByYXRoZXIgdGhhblxuICAvLyByZXN0YXRlZC4gRGVjbGFyZWQgYWZ0ZXIgYC5wbGFuLS1yYWlsZWRgIGRlbGliZXJhdGVseTogdGhlIHR3byBzZWxlY3RvcnMgdGllIG9uIHNwZWNpZmljaXR5LFxuICAvLyBhbmQgc291cmNlIG9yZGVyIGlzIHRoZSBvbmx5IHRoaW5nIHNlcGFyYXRpbmcgdGhlbS5cbiAgLnBsYW4tLXJhaWxlZC1ndWVzdDo6YmVmb3JlIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogJHBsYW4tZ3Vlc3QtYWNjZW50O1xuICB9XG5cbiAgLypcbiAgICogQk9SREVSIEJFQU0g4oCUIGEgbGlnaHQgdHJhdmVsbGluZyB0aGUgcGVyaW1ldGVyIG9mIHRoZSBQcm8gY2FyZC5cbiAgICpcbiAgICogQWZ0ZXIgTWFnaWMgVUkncyBib3JkZXItYmVhbSwgcmVidWlsdCB3aXRob3V0IGl0OiB0aGVpcnMgbmVlZHMgUmVhY3QsIFRhaWx3aW5kIGFuZFxuICAgKiBmcmFtZXItbW90aW9uLCBhbmQgZHJpdmVzIHRoZSB0cmF2ZWwgd2l0aCBgb2Zmc2V0LXBhdGhgICsgYEBwcm9wZXJ0eWAsIG5laXRoZXIgb2Ygd2hpY2ggaXNcbiAgICogc2FmZSB0byByZWx5IG9uIGFjcm9zcyB0aGUgYnJvd3NlcnMgdGhpcyBzdWl0ZSBydW5zLiBUaGlzIGlzIGEgY29uaWMgZ3JhZGllbnQgcm90YXRpbmcgaW5zaWRlXG4gICAqIGEgcmluZy1zaGFwZWQgbWFzayDigJQgb25lIGVsZW1lbnQsIG5vIEpTLCBzYW1lIHJlYWQuXG4gICAqXG4gICAqIEdyZWVuIGludG8gcHVycGxlIGlzIGRlbGliZXJhdGU6IGdyZWVuIGlzIHRoZSBhcHAncyBvd24gYWNjZW50IGFuZCBwdXJwbGUgaXMgd2hhdCBQcm8gYWxyZWFkeVxuICAgKiB1c2VzIGhlcmUsIHNvIHRoZSBiZWFtIGlzIG1hZGUgb2YgdGhlIHR3byBjb2xvdXJzIHRoZSBwcm9kdWN0IGFscmVhZHkgb3ducy5cbiAgICovXG4gIC5wbGFuLWJlYW0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAgIC8vIEFuIGFic29sdXRlbHkgcG9zaXRpb25lZCBjaGlsZCBpcyBsYWlkIG91dCBhZ2FpbnN0IHRoZSBQQURESU5HIGJveCwgc28gYGluc2V0OiAwYCB3b3VsZCBwdXRcbiAgICAvLyB0aGUgcmluZyBqdXN0IGluc2lkZSB0aGUgY2FyZCdzIG93biAxcHggYm9yZGVyIGFuZCByZWFkIGFzIGEgZ2xvdyByYXRoZXIgdGhhbiBhcyBhbiBlZGdlLlxuICAgIC8vIC0xcHggbGlmdHMgaXQgb250byB0aGUgYm9yZGVyIGl0c2VsZjsgdGhlIHJhZGl1cyBncm93cyBieSB0aGUgc2FtZSAxcHggdG8gc3RheSBjb25jZW50cmljLlxuICAgIGluc2V0OiAtMXB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE3cHg7XG4gICAgcGFkZGluZzogMnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBLZWVwcyBvbmx5IHRoZSBwYWRkaW5nIHJpbmcsIHNvIHRoZSByb3RhdGluZyBncmFkaWVudCBiZWxvdyBzaG93cyBhcyBhIGJvcmRlciBhbmQgbm90aGluZ1xuICAgIC8vIGJsZWVkcyBhY3Jvc3MgdGhlIGNhcmQgZmFjZS5cbiAgICAtd2Via2l0LW1hc2s6IGxpbmVhci1ncmFkaWVudCgjMDAwIDAgMCkgY29udGVudC1ib3gsIGxpbmVhci1ncmFkaWVudCgjMDAwIDAgMCk7XG4gICAgLXdlYmtpdC1tYXNrLWNvbXBvc2l0ZTogeG9yO1xuICAgIG1hc2s6IGxpbmVhci1ncmFkaWVudCgjMDAwIDAgMCkgY29udGVudC1ib3gsIGxpbmVhci1ncmFkaWVudCgjMDAwIDAgMCk7XG4gICAgbWFzay1jb21wb3NpdGU6IGV4Y2x1ZGU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuXG4gICAgICAvKlxuICAgICAgICogQSBzcXVhcmUgYmlnIGVub3VnaCB0aGF0IGl0cyByb3RhdGlvbiBhbHdheXMgY292ZXJzIHRoZSBjYXJkLCBjZW50cmVkIHNvIGl0IHN3ZWVwcyBldmVubHkuXG4gICAgICAgKlxuICAgICAgICogSXQgaGFzIHRvIGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgdGhlIGNhcmQncyBESUFHT05BTCwgYW5kIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggYWxvbmVcbiAgICAgICAqIGlzIG5vdCB0aGF0OiBhdCAyMjAlIG9mIGEgMjQ3cHgtd2lkZSBjYXJkIHRoaXMgd2FzIDU0M3B4IGFnYWluc3QgYSA2MjhweCBkaWFnb25hbCwgc28gdGhlXG4gICAgICAgKiBiZWFtIG5ldmVyIHJlYWNoZWQgdGhlIGNvcm5lcnMgYW5kIG1vc3RseSBmZWxsIG91dHNpZGUgdGhlIGNhcmQgZW50aXJlbHkuIGBtaW4taGVpZ2h0YFxuICAgICAgICogd2l0aCBgYXNwZWN0LXJhdGlvYCBtYWtlcyB0aGUgc2lkZSAxLjYgw5cgdGhlIExPTkdFUiBlZGdlIGluc3RlYWQsIGFuZCAxLjYgPiDiiJoyIOKJpSBhbnlcbiAgICAgICAqIGRpYWdvbmFsL2xvbmdlc3QtZWRnZSByYXRpbywgc28gaXQgY292ZXJzIHdoYXRldmVyIHNoYXBlIHRoZSBjYXJkIGVuZHMgdXAuXG4gICAgICAgKi9cbiAgICAgIHdpZHRoOiAxNjAlO1xuICAgICAgbWluLWhlaWdodDogMTYwJTtcbiAgICAgIGFzcGVjdC1yYXRpbzogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgICAvKlxuICAgICAgICogQSBjb21ldCwgYW5kIGEgU0hPUlQgb25lLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBsaXQgYXJjIGlzIGFuIGFuZ2xlIG1lYXN1cmVkIGZyb20gdGhlIGNhcmQncyBjZW50cmUsIHNvIGl0cyB3aWR0aCBpbiBkZWdyZWVzIGRlY2lkZXNcbiAgICAgICAqIGhvdyBtdWNoIG9mIHRoZSBwZXJpbWV0ZXIgbGlnaHRzIHVwIGF0IG9uY2UuIEF0IDE4MGRlZyBpdCBjb3ZlcmVkIGhhbGYgdGhlIGJvcmRlciwgd2hpY2hcbiAgICAgICAqIHB1dCB0aGUgcHVycGxlIGhlYWQgb24gb25lIGVkZ2UgYW5kIHRoZSBicmlnaHRlc3QgZ3JlZW4gb24gYW5vdGhlciB3aXRoIGEgZGltIHN0cmV0Y2hcbiAgICAgICAqIGJldHdlZW4g4oCUIG9uZSBiZWFtIHRoYXQgcmVhZCB1bm1pc3Rha2FibHkgYXMgdHdvLiA3MmRlZyBrZWVwcyBoZWFkIGFuZCB0YWlsIG9uIHRoZSBzYW1lXG4gICAgICAgKiBydW4gb2YgYm9yZGVyLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBoYXJkIGN1dCBiYWNrIHRvIHRyYW5zcGFyZW50IGF0IDM2MGRlZyBpcyBkZWxpYmVyYXRlOiBpdCBnaXZlcyB0aGUgY29tZXQgYSBsZWFkaW5nXG4gICAgICAgKiBlZGdlLCB3aGVyZSBhIHN5bW1ldHJpYyBmYWRlIHdvdWxkIG1lZXQgaXRzIG93biB0YWlsIGFuZCBsb3NlIGFueSBzZW5zZSBvZiBkaXJlY3Rpb24uXG4gICAgICAgKi9cbiAgICAgIGJhY2tncm91bmQ6IGNvbmljLWdyYWRpZW50KFxuICAgICAgICBmcm9tIDBkZWcsXG4gICAgICAgIHRyYW5zcGFyZW50IDBkZWcgMjg4ZGVnLFxuICAgICAgICAje3JnYmEoJGNvbG9yLWdyZWVuLWxpbmssIDApfSAyOTJkZWcsXG4gICAgICAgICN7JGNvbG9yLWdyZWVuLWxpbmt9IDMzOGRlZyxcbiAgICAgICAgJHBsYW4tYWNjZW50IDM1NmRlZyxcbiAgICAgICAgdHJhbnNwYXJlbnQgMzYwZGVnXG4gICAgICApO1xuICAgICAgYW5pbWF0aW9uOiBwbGFuLWJlYW0tc3BpbiA1cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RvcHBlZCwgdGhlIGJlYW0gbGVhdmVzIGEgc3RhdGljIGdyZWVuLXRvLXB1cnBsZSBhcmMgb24gdGhlIGJvcmRlciDigJQgdGhlIGNhcmQgc3RpbGwgcmVhZHMgYXNcbiAgLy8gdGhlIGZlYXR1cmVkIG9uZSwgd2hpY2ggYSB0cmVhdG1lbnQgdGhhdCB2YW5pc2hlZCB1bmRlciB0aGlzIHNldHRpbmcgd291bGQgbm90LlxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5wbGFuLWJlYW06OmJlZm9yZSB7IGFuaW1hdGlvbjogbm9uZTsgfVxuICB9XG5cbiAgLnBsYW4taGVhZCB7IG1hcmdpbi1ib3R0b206IDE4cHg7IH1cblxuICAvLyBFVkVSWSBjYXJkIHVzZXMgdGhpcywgaW5jbHVkaW5nIHRoZSB0d28gd2l0aCBub3RoaW5nIGJlc2lkZSB0aGUgdGl0bGUuIFBybyBjYXJyaWVzIHRoZVxuICAvLyBNb250aGx5L1llYXJseSB0b2dnbGUsIHdoaWNoIG1hZGUgaXRzIHJvdyAycHggdGFsbGVyIHRoYW4gYSBiYXJlIGAucGxhbi1uYW1lYCBhbmQgc3RlcHBlZCB0aGVcbiAgLy8gd2hvbGUgQ1RBIHJvdy4gQSBzaGFyZWQgbWluLWhlaWdodCBpcyB3aGF0IGtlZXBzIHRoZSB0aHJlZSBoZWFkcyB0aGUgc2FtZSBoZWlnaHQgd2hldGhlciBvclxuICAvLyBub3QgYSBjYXJkIGhhcyBhIGNvbnRyb2wgdXAgdGhlcmUuXG4gIC5wbGFuLW5hbWUtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMTBweDtcbiAgICBtaW4taGVpZ2h0OiAzNHB4O1xuICB9XG5cbiAgLnBsYW4tbmFtZSB7XG4gICAgZm9udC1zaXplOiAyNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICB9XG5cbiAgLnBsYW4tcHJpY2Uge1xuICAgIGZvbnQtc2l6ZTogMzhweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiAjMWExYTFhO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG5cbiAgICBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGNvbG9yOiAjODg4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcblxuICAgICAgLy8gMnB4IHdhcyBlbm91Z2ggdG8gc2VwYXJhdGUgXCIvbW9cIiBmcm9tIGEgbnVtZXJhbDsgXCJVU0RcIiBpcyBhIHdvcmQgYW5kIHJhbiBpbnRvIGl0LlxuICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICB9XG5cbiAgICAvLyBUaW55IGN1cnJlbmN5IG1hcmssIHRvcC1hbGlnbmVkIHRvIHRoZSBiaWcgbnVtYmVyIChsaWtlIHRoZSByZWZlcmVuY2UpLlxuICAgIC8vIEdyZXksIG5vdCBuZWFyLWJsYWNrOiB0aGUgcHJpY2UgaXMgdGhlIG51bWVyYWwsIGFuZCB0aGUgc3ltYm9sIGlzIHRoZSBzYW1lIGtpbmQgb2ZcbiAgICAvLyBxdWFsaWZpZXIgYXMgdGhlIFwiVVNEIC8gbW9cIiBiZXNpZGUgaXQuIE1hdGNoaW5nIHRoZWlyIGNvbG91ciBtYWtlcyB0aGUgZmlndXJlIHJlYWQgYXMgb25lXG4gICAgLy8gb2JqZWN0IHdpdGggdW5pdHMgYXR0YWNoZWQgcmF0aGVyIHRoYW4gYXMgdGhyZWUgY29tcGV0aW5nIHdlaWdodHMuXG4gICAgLnBsYW4tY3VyIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjODg4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgfVxuICB9XG5cbiAgLnBsYW4tZGVzYyB7XG4gICAgY29sb3I6ICM2NjY7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbjogOHB4IDAgMDtcblxuICAgIC8vIE5vIHJlc2VydmVkIHNlY29uZCBsaW5lOiBldmVyeSBkZXNjcmlwdGlvbiBpcyBvbmUgbGluZSwgYW5kIHJlc2VydmluZyB0d28gcHV0IGEgbGluZSdzXG4gICAgLy8gd29ydGggb2YgZW1wdHkgc3BhY2UgYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGJ1dHRvbiBvbiBhbGwgdGhyZWUgY2FyZHMuIFdoYXQga2VlcHMgdGhlXG4gICAgLy8gQ1RBcyBsZXZlbCBpcyB0aGF0IHRoZSBkZXNjcmlwdGlvbnMgYXJlIHRoZSBTQU1FIGhlaWdodCDigJQgYHByaWNpbmctY3RhLWFsaWdubWVudC5wd3NwZWNgXG4gICAgLy8gYXNzZXJ0cyBib3RoIHRoYXQgYW5kIHRoZSByZXN1bHRpbmcgQ1RBIHRvcHMsIHNvIGEgZGVzY3JpcHRpb24gdGhhdCBncm93cyB0byB0d28gbGluZXNcbiAgICAvLyBmYWlscyB0aGUgc3VpdGUgaW5zdGVhZCBvZiBxdWlldGx5IHN0ZXBwaW5nIHRoZSByb3cuXG4gIH1cblxuICAvLyBDVEEgYXJlYVxuICAucGxhbi1jdGEge1xuICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG5cbiAgICAmLWVycm9yIHtcbiAgICAgIGNvbG9yOiAjYzYyODI4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZlYXR1cmUgbGlzdFxuICAucGxhbi1mZWF0dXJlcy10aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgfVxuXG4gIC5wbGFuLWZlYXR1cmVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMTJweDtcblxuICAgIGxpIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgICAgICYueWVzOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIlxcMjcxM1wiO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGNvbG9yOiAkcGxhbi1hY2NlbnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC8vIEEgbGltaXRhdGlvbiBpcyBzdGlsbCBpbmZvcm1hdGlvbiwgc28gaXQgaXMgc2V0IGluIHRoZSBzYW1lIGNvbG91ciBhcyBldmVyeXRoaW5nIGVsc2UuXG4gICAgICAvLyBJdCB1c2VkIHRvIGJlICNhYWEgb24gd2hpdGUg4oCUIHRoZSBvbmUgbGluZSBvbiB0aGUgcGFnZSBhIHZpc2l0b3IgbmVlZGVkIHRvIHJlYWQgYmVmb3JlXG4gICAgICAvLyBjaG9vc2luZyBhIHBsYW4sIGFuZCB0aGUgaGFyZGVzdCBvbmUgdG8gcmVhZC4gT25seSB0aGUgbWFya2VyIHN0YXlzIG11dGVkOiB0aGUgZW0tZGFzaFxuICAgICAgLy8gYWdhaW5zdCB0aGUgb3RoZXIgaXRlbXMnIOKckyBpcyB3aGF0IHNheXMgXCJub3QgaW5jbHVkZWRcIiwgbm90IGxvdyBjb250cmFzdC5cbiAgICAgICYubm8ge1xuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6IFwiXFwyMDE0XCI7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgY29sb3I6ICM5OTk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTYXZlIHBpbGwg4oCUIGlubGluZSBiYWRnZSBuZXh0IHRvIHllYXJseSBwcmljZVxuICAuc2F2ZS1waWxsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZDogIzIyYTcyMjtcbiAgICBwYWRkaW5nOiAycHggN3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IDlweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgfVxuXG4gIC8vIENUQSBidXR0b25zIOKAlCBmdWxsIHdpZHRoIHBpbGxzLlxuICAvL1xuICAvLyBXaGlsZSB0aGUgdGllciBpcyB1bmtub3duIEFMTCBUSFJFRSBjYXJkcyByZW5kZXIgYC5jdGEtc2tlbGV0b25gIGluc3RlYWQsIHdoaWNoIHNoYXJlcyB0aGlzXG4gIC8vIGV4YWN0IGJveCDigJQgc2FtZSB3aWR0aCwgcGFkZGluZyBhbmQgcmFkaXVzIOKAlCBzbyB0aGUgdGhyZWUgQ1RBIHRvcHMgc3RheSBsZXZlbFxuICAvLyAocHJpY2luZy1jdGEtYWxpZ25tZW50LnB3c3BlYykgYW5kIG5vdGhpbmcgc2hpZnRzIHdoZW4gdGhlIHJlYWwgYnV0dG9ucyBhcnJpdmUuIEZpbGwsIGJvcmRlclxuICAvLyBhbmQgc3dlZXAgY29tZSBmcm9tIGNvbXBvbmVudHMvU2tlbGV0b24uc2Nzcy5cbiAgLy9cbiAgLy8gVGhlIHNrZWxldG9uIGtlZXBzIGl0cyBvd24gY2xhc3MgcmF0aGVyIHRoYW4gYm9ycm93aW5nIGAuY3RhLWJ0bmAsIGJlY2F1c2UgdGhhdCBzZWxlY3RvciBpc1xuICAvLyBob3cgdGVzdHMgZmluZCBhIHJlYWwsIGNsaWNrYWJsZSBDVEE7IGEgPHNwYW4+IGFuc3dlcmluZyB0byBpdCBjb3VsZCBiZSBjbGlja2VkIHRvIG5vIGVmZmVjdC5cbiAgLmN0YS1idG4sXG4gIC5jdGEtc2tlbGV0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzLCBib3JkZXItY29sb3IgMC4ycywgY29sb3IgMC4ycztcblxuICAgICYuZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgfVxuXG4gIC8vIE91dGxpbmUgKGRlZmF1bHQgLyBub24tZmVhdHVyZWQpXG4gIC5jdGEtb3V0bGluZSB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBjb2xvcjogIzFhMWExYTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZDBkMGQwO1xuXG4gICAgJjpob3ZlciB7IGJvcmRlci1jb2xvcjogIzg4ODsgYmFja2dyb3VuZDogI2ZhZmFmYTsgfVxuICB9XG5cbiAgLy8gQWNjZW50IChQcm8pXG4gIC5jdGEtYWNjZW50IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGxhbi1hY2NlbnQ7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHBsYW4tYWNjZW50O1xuXG4gICAgJjpob3ZlciB7IGJhY2tncm91bmQ6ICM1NTQ2Yzk7IH1cbiAgfVxuXG4gIC8vIEN1cnJlbnQgcGxhbiBpbmRpY2F0b3JcbiAgLmN0YS1jdXJyZW50IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICY6aG92ZXIgeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICB9XG5cbiAgLy8gRm91bmRpbmcgbm90ZSBDVEEg4oCUIGNvbXBhY3QgKG92ZXJyaWRlcyBmdWxsLXdpZHRoIGN0YS1idG4gZm9yIHRoZSBpbmxpbmUgcm93KVxuICAuY3RhLWZvdW5kaW5nIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAycHggc29saWQgI2IzODYwMDtcbiAgICBjb2xvcjogI2IzODYwMDtcbiAgICBtYXJnaW46IDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZmZmYmU2OyB9XG4gIH1cblxuICAvLyBJbnRlcnZhbCB0b2dnbGUg4oCUIGNvbXBhY3QgcGlsbFxuICAuaW50ZXJ2YWwtdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBnYXA6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiAjZWVlO1xuICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgcGFkZGluZzogMnB4O1xuICB9XG5cbiAgLmludGVydmFsLWJ0biB7XG4gICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiAjODg4O1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGNvbG9yIDAuMTVzO1xuXG4gICAgJi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyOm5vdCguYWN0aXZlKSB7IGNvbG9yOiAjNTU1OyB9XG4gIH1cblxuICAuZm91bmRpbmctbm90ZSB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmJlNjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZlMDY2O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgbWFyZ2luOiAzMHB4IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuXG4gICAgc3Ryb25nIHsgY29sb3I6ICNiMzg2MDA7IH1cbiAgfVxuXG4gIGgyIHsgbWFyZ2luLXRvcDogNDBweDsgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxuICAuc3VidGl0bGUgeyBjb2xvcjogIzY2NjsgbWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuXG4gIC8vIFJlc3BvbnNpdmU6IHN0YWNrIHRoZSBjYXJkc1xuICBAbWVkaWEgKG1heC13aWR0aDogODAwcHgpIHtcbiAgICAucHJpY2luZy1ncmlkIHtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vYmlsZSB0d2Vha3NcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgLmxvZ28geyBmb250LXNpemU6IDI4cHg7IH1cbiAgICAucGxhbi1wcmljZSB7IGZvbnQtc2l6ZTogMjhweDsgfVxuICAgIC5mb3VuZGluZy1ub3RlIHsgcGFkZGluZzogMTJweCAxNnB4OyB9XG4gICAgaDIgeyBmb250LXNpemU6IDIwcHg7IG1hcmdpbi10b3A6IDMwcHg7IH1cbiAgICAuY29udGVudCB7IHBhZGRpbmc6IDAgMTZweDsgfVxuICB9XG59XG5cbi8vIFNpdHMgdW5kZXIgdGhlIFBybyBDVEE7IHF1aWV0IG9uIHB1cnBvc2Ug4oCUIHJlYXNzdXJhbmNlLCBub3QgYSBzZWxsaW5nIHBvaW50LlxuLnBsYW4tY3RhLW5vdGUge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIGNvbG9yOiAkY29sb3ItdGV4dC1tdXRlZDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4iLCIvLyBQYWdlIGNocm9tZSBvbmx5LiBUaGUgYWNjb3VudCB2aWV3J3Mgb3duIHN0eWxlcyBtb3ZlZCB0byBjb21wb25lbnRzL0FjY291bnRQYW5lbC5zY3NzIHdoZW4gdGhlXG4vLyBwYW5lbCBiZWNhbWUgc2hhcmVkIHdpdGggdGhlIE15IEFjY291bnQgbW9kYWwg4oCUIHRoaXMgZmlsZSBub3cgc2F5cyBub3RoaW5nIGFib3V0IHRoZSBjb250ZW50LlxuLnBhZ2Utc2V0dGluZ3Mge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBjb2xvcjogIzMzMztcblxuICAmLmNvbnRhaW5lciB7IGJhY2tncm91bmQ6ICNmZmY7IH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8vIEV4dHJhY3RlZCBmcm9tIHBhZ2VzL2ZhcS5odG1sIGlubGluZSA8c3R5bGU+XG4vL1xuLy8g4pqg77iPIE9ubHkgd2hhdCBpcyBOT1QgYWxyZWFkeSBnbG9iYWwgbGl2ZXMgaGVyZSDigJQgc2VlIHRoZSBub3RlIGluIGBBYm91dC5zY3NzYC4gVGhlIGAubG9nb2Bcbi8vIGdyYWRpZW50IGFuZCBtb3N0IG9mIGAuZmVlZGJhY2tgIGNvbWUgZnJvbSBgQXBwLnNjc3NgLiBUaGlzIHBhZ2Uga2VlcHMgYSBgLmxvZ29gIGJsb2NrIGZvclxuLy8gT05FIGRlY2xhcmF0aW9uOiBgbWFyZ2luLWJvdHRvbWAsIHdoaWNoIGlzIHRoZSBzaW5nbGUgbWVhc3VyZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXNcbi8vIHN1cmZhY2UgYW5kIHRoZSBvdGhlciBmb3VyICgxMHB4IGhlcmUgdnMgdGhlIDNweCB0aGUgZ2xvYmFsIGBoMWAgcnVsZSBnaXZlcykuXG4ucGFnZS1mYXEge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBjb2xvcjogIzMzMztcblxuICAucm9vdCxcbiAgLnJvb3QgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgLmxvZ28ge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIH1cblxuICAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA3MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuZmVlZGJhY2sge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZDVkNWQ1O1xuICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gIH1cblxuICBoMiB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICB9XG5cbiAgLmZhcS1pdGVtIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyOHB4O1xuXG4gICAgaDMge1xuICAgICAgbWFyZ2luOiAwIDAgOHB4IDA7XG4gICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgIGNvbG9yOiAjNDQ0O1xuICAgIH1cbiAgfVxuXG4gIC50aWVyLXRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIG1hcmdpbjogMTZweCAwO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcblxuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcbiAgICB9XG5cbiAgICB0aCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjlmOWY5O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cbiAgfVxuXG4gIC55ZXMge1xuICAgIGNvbG9yOiAjMjJhNzIyO1xuICB9XG5cbiAgLm5vIHtcbiAgICBjb2xvcjogIzk5OTtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgIC5sb2dvIHtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICB9XG5cbiAgICAuY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAwIDE2cHg7XG4gICAgfVxuXG4gICAgLnRpZXItdGFibGUge1xuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLW1kO1xuXG4gICAgICB0aCxcbiAgICAgIHRkIHtcbiAgICAgICAgcGFkZGluZzogOHB4IDZweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcyc7XG5cbi8vIEV4dHJhY3RlZCBmcm9tIHBhZ2VzL3RjLmh0bWwgaW5saW5lIDxzdHlsZT5cbi8vXG4vLyDimqDvuI8gT25seSB3aGF0IGlzIE5PVCBhbHJlYWR5IGdsb2JhbCBsaXZlcyBoZXJlIOKAlCBzZWUgdGhlIG5vdGUgaW4gYEFib3V0LnNjc3NgLiBUaGUgYC5sb2dvYFxuLy8gZ3JhZGllbnQgYW5kIG1vc3Qgb2YgYC5mZWVkYmFja2AgY29tZSBmcm9tIGBBcHAuc2Nzc2AuXG4ucGFnZS10ZXJtcyB7XG4gIC5yb290LFxuICAucm9vdCBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICBoMixcbiAgaDMgLmN0YSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG5cbiAgLmNvbnRlbnQge1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICBtYXJnaW46IDVweCBhdXRvO1xuICB9XG5cbiAgLmZlZWRiYWNrIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2Q1ZDVkNTtcbiAgfVxufVxuIiwiQGltcG9ydCAnLi4vdmFyaWFibGVzJztcblxuLy8gRXh0cmFjdGVkIGZyb20gcGFnZXMvcHJpdmFjeS5odG1sIGlubGluZSA8c3R5bGU+XG4vL1xuLy8g4pqg77iPIE9ubHkgd2hhdCBpcyBOT1QgYWxyZWFkeSBnbG9iYWwgbGl2ZXMgaGVyZSDigJQgc2VlIHRoZSBub3RlIGluIGBBYm91dC5zY3NzYC4gVGhlIGAubG9nb2Bcbi8vIGdyYWRpZW50IGFuZCBtb3N0IG9mIGAuZmVlZGJhY2tgIGNvbWUgZnJvbSBgQXBwLnNjc3NgLlxuLnBhZ2UtcHJpdmFjeSB7XG4gIC5yb290LFxuICAucm9vdCBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICBoMixcbiAgaDMgLmN0YSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICB9XG5cbiAgLmNvbnRlbnQge1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICBtYXJnaW46IDVweCBhdXRvO1xuICB9XG5cbiAgLmZlZWRiYWNrIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2Q1ZDVkNTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/